Uploaded May 2022 | Updated September 2026, 2 weeks ago
In this final installment of the RISC-V (emulator) series, we implement a multi-cycle memory interface. With this in place, the design is complete enough to move forward and begin design honest-to-goodness FPGA hardware!
=[ 🔗 Links 🔗 ]=
🎥 Series Playlist: youtube.com/watch?v=ER7h4ZTe19A&list=PLP29wDx6QmW4sXTvFYgbHrLygqH8_oNEH
💌 Updates to your inbox: tinyletter.com/lowleveljavascript
🗣 Discord: discord.gg/FPWaVgk
⭐️ Patreon: patreon.com/lowleveljavascript
💻 Github Repo (emulator): github.com/LowLevelJavaScript/RISC-V-Emulator
In this final installment of the RISC-V (emulator) series, we implement a multi-cycle memory interface. With this in place, the design is complete enough to move forward and begin design honest-to-goodness FPGA hardware!
=[ 🔗 Links 🔗 ]=
🎥 Series Playlist: youtube.com/watch?v=ER7h4ZTe19A&list=PLP29wDx6QmW4sXTvFYgbHrLygqH8_oNEH
💌 Updates to your inbox: tinyletter.com/lowleveljavascript
🗣 Discord: discord.gg/FPWaVgk
⭐️ Patreon: patreon.com/lowleveljavascript
💻 Github Repo (emulator): github.com/LowLevelJavaScript/RISC-V-Emulator
![Binary Patching: How The IPS Format Works
In this video, were taking a deep dive into the IPS format, and building a compliant parser and patcher in the C programming language!
IPS is a relatively old and simple format, and not in widespread use these days, but taking a look at the details provides a lot of insight into the subject, as well as a clear direction for the formats that succeeded it.
=[ 🔗 Links 🔗 ]=
💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://pawww.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/IPS-Binary-Patcher Binary Patching: How The IPS Format Works](https://i.ytimg.com/vi/R-TGJ-9QSP4/mqdefault.jpg)
![Turing Complete with Conditional Branches: RISC-V ep.7
=[ 🔗 Links 🔗 ]=
🎥 Series Playlist: https://www.youtube.com/watch?v=ER7h4ZTe19A&list=PLP29wDx6QmW4sXTvFYgbHrLygqH8_oNEH
💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo (emulator): https://github.com/LowLevelJavaScript/RISC-V-Emulator Turing Complete with Conditional Branches: RISC-V ep.7](https://i.ytimg.com/vi/RPUSuZwoiGA/mqdefault.jpg)
![Implementing Store Instructions: RISC-V part 4
=[ 🔗 Links 🔗 ]=
🎥 Series Playlist: https://www.youtube.com/watch?v=ER7h4ZTe19A&list=PLP29wDx6QmW4sXTvFYgbHrLygqH8_oNEH
💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo (emulator): https://github.com/LowLevelJavaScript/RISC-V-Emulator Implementing Store Instructions: RISC-V part 4](https://i.ytimg.com/vi/RZ9OrIprbUY/mqdefault.jpg)
![Bootloader Packet Protocol Implementation :: Bare Metal Programming Series 7.2
In this episode of the bare metal programming series, were implementing the packet protocol we looked at in the previous video inside the bootloader.
This protocol is able to automatically process incoming packets, acknowledging or requesting retransmission (or retransmitting when requested), and stuffing the data into a buffer for the application logic to use.
=[ 🔗 Links 🔗 ]=
🎥 Series Playlist: https://www.youtube.com/playlist?list=PLP29wDx6QmW7HaCrRydOnxcy8QmW0SNdQ
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/bare-metal-series Bootloader Packet Protocol Implementation :: Bare Metal Programming Series 7.2](https://i.ytimg.com/vi/RrUyS-gixWk/mqdefault.jpg)
![Interrupts and Memory Mapped I/O :: Bare Metal Programming Series 2
This is episode 2 of the bare metal programming series! In this video, were taking a deep dive into the memory-mapped I/O mechanism that underpins the CPUs communication with the peripherals on the chip. We also discuss and explore interrupts and the interrupt vector table, as well where to find the fundamental information related to your chip: datasheets and reference manuals.
=[ 🔗 Links 🔗 ]=
Bit Hacks (Beginner to Advanced) video by Creel: https://www.youtube.com/watch?v=ZRNO-ewsNcQ
Demystifying bitwise operations blog post by Andrei Ciobanu: https://www.andreinc.net/2023/02/01/demystifying-bitwise-ops
🎥 Series Playlist: https://www.youtube.com/playlist?list=PLP29wDx6QmW7HaCrRydOnxcy8QmW0SNdQ
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/bare-metal-series Interrupts and Memory Mapped I/O :: Bare Metal Programming Series 2](https://i.ytimg.com/vi/S92ltJ0C59k/mqdefault.jpg)
![[stream] Writing a SPI SD-Card driver in TypeScript
=[ 🔗 Links 🔗 ]=
Awesome reference page: http://elm-chan.org/docs/mmc/mmc_e.html
Adafruit SD card library: https://github.com/arduino-libraries/SD/
Bunny Huangs SD card talk: https://www.youtube.com/watch?v=ruEn7TE4YMM
🎥 Stream Playlist: https://www.youtube.com/playlist?list=PLP29wDx6QmW7jg0LgRJYAmHLM6G_6NDw6
💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: [stream] Writing a SPI SD-Card driver in TypeScript](https://i.ytimg.com/vi/SIIde33EZrA/mqdefault.jpg)
![Rendering 3D Graphics On An Oscilloscope
In this video, were learning how to draw on an oscilloscope. By utilising the X-Y mode of the scope, combined with some clever firmware to generate the right signals, and a sprinkle of DIY digital-to-analog conversion, we can render animated 3D graphics on a scope in real time!
00:00:00 3D Animated Demo
00:01:36 Understanding X-Y Mode
00:05:00 Firmware Architecture Overview
00:09:52 PWM Digital-to-Analog Conversion
00:14:48 Manually creating images
00:21:57 Visualizing the signals
00:25:03 Writing the static image firmware
00:48:30 PWM signals on the scope
00:51:14 Building the low-pass filters
00:58:42 First 3D image
01:03:30 Reading the 3D renderer firmware code
01:17:15 Final demo
=[ 🔗 Links 🔗 ]=
⭐️ Become a patron and get bonus videos! https://www.patreon.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
💻 Github Repo: https://github.com/lowbyteproductions/3d-oscilloscope-renderer Rendering 3D Graphics On An Oscilloscope](https://i.ytimg.com/vi/TAfWea21ooM/mqdefault.jpg)
![I wrote a GameBoy game in TypeScript (And it runs on real hardware!)
=[ 🔗 Links 🔗 ]=
💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo (emulator): https://github.com/francisrstokes/tega
00:00:00 – Intro
00:05:23 – Demo on real hardware
00:06:48 – TEGA Overview
00:08:22 – Modules! No linker required
00:11:18 – Loads, Stores, and instruction representability
00:21:05 – Arithmetic and Logic
00:25:17 – Jumps, Labels, and Branches
00:29:45 – Macro abstraction examples
00:39:28 – Building a ROM
00:45:16 – The GameBoy Memory Map
00:56:58 – Block Jump Code Overview
01:05:39 – Tile graphics
01:12:26 – The DMA routine, and virtual symbol offsets
01:19:19 – Setting up the LCD screen
01:23:52 – Organising values in RAM
01:29:22 – Setting up OAM
01:33:34 – Setting up the player character and obstacle structs
01:35:26 – The main game loop
01:38:08 – Random Number Generation
01:42:26 – Game State Machine
01:53:23 – Jump Physics
02:05:43 – Compression: Encoding side
02:12:42 – Compression: Decoding side
02:17:59 – Running and Debugging in an emulator
02:30:50 – Outro I wrote a GameBoy game in TypeScript (And it runs on real hardware!)](https://i.ytimg.com/vi/TIlx5nBnx-o/mqdefault.jpg)
![Assembler Hacking: Inline Data And Constants (16-Bit VM in JavaScript 014)
In this episode, were going to implement 2 new features in the assembly language and assembler of the machine. The first is the ability to specify named, arbitrary data inline with the assembly code. And the second is the ability to specify named constants - whose values can be used meaningfully in the assembly code.
00:00 - Intro
01:23 - Parsing data directives
04:54 - Parsing constant directives
05:33 - Updating the main parser
06:03 - Writing a test program in assembly
07:03 - Refactoring the assembler
08:02 - Extracting constant and semantics in the assembler
08:58 - Encoding data blocks in the generated binary
10:17 - Testing the new assembler features
=[ ℹ About ℹ ]=
This series is all about building a powerful virtual machine in JavaScript with the following features:
- A flexible, extensible, register-based virtual machine
- Support for signed, unsigned and floating point operations
- A call stack
- Interrupt capabilities
- Ability to do memory mapping for IO
- An assembly language with macro and module support
- A higher level, C like language. Well use and expand the library from the parser combinators from scratch series
- And finally, to be able to take the whole thing into the browser and extend it to create a sort of fantasy console - an emulator for a machine that never existed
=[ 🔗 Links 🔗 ]=
- 💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
- ⭐️ Patreon: https://www.patreon.com/lowleveljavascript
- Assembly language tour (16-Bit VM ep 7) : https://youtu.be/ai63l4OUxSs
- Data directives: https://en.wikipedia.org/wiki/Assembly_language#Data_directives
- Series Playlist: https://www.youtube.com/playlist?list=PLP29wDx6QmW5DdwpdwHCRJsEubS5NrQ9b&playnext=1&index=1
- Github Repo: https://github.com/LowLevelJavaScript/16-Bit-Virtual-Machine Assembler Hacking: Inline Data And Constants (16-Bit VM in JavaScript 014)](https://i.ytimg.com/vi/TXSgQZsVW8w/mqdefault.jpg)
![Unsigned Numbers! [The Bits And Bytes Of Binary ep. 3]
This mini series is all about binary. Over the course of the series, well be building a library that gives us precise control of every bit and operation.
Youll learn how the logical and arithmetic operations work, how different kinds of numbers are encoded, how to set, clear and toggle bits, and how we can create representations of structured binary data.
1. Bits
2. Operations
3. Unsigned Numbers
4. Addition
5. Zero Extension
6. Twos complement
7. Overflow Addition and Sign Extension
8. Shifting
9. Setting, Clearing, and Toggling Bits
10. Endianness
11. Structures
=[ 🔗 Links 🔗 ]=
💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
🎥 Playlist: https://www.youtube.com/watch?v=pOM86M1pGb4&list=PLP29wDx6QmW47oPsNBFNEi_SYTOLDJXqQ
💻 Github Repo: https://github.com/LowLevelJavaScript/The-Bits-And-Bytes-Of-Binary
=[ 🎶 Music 🎶 ]=
Game Plan - The Morning After Unsigned Numbers! [The Bits And Bytes Of Binary ep. 3]](https://i.ytimg.com/vi/TdPQ-1TEiNI/mqdefault.jpg)
