Uploaded January 2021 | Updated September 2026, 2 weeks ago
In this video we're taking a look at gateware-ts, a TypeScript library for describing and building digital hardware for FPGAs in TypeScript. Specifically, we're building a driver for a 64x64 RGB LED Panel - the same as those used in large video wall displays.
If you want to try this project out for yourself, you can find the LED panels in many different places - including the 1bitsquared store mentioned in the video, but also sites like adafruit and other general electronics stockists have these kinds of panels available. If you don't mind the wait time, you can order them from China on sites like aliexpress - where they're usually a little cheaper.
00:00 - Introduction
05:38 - The LED Panel
11:43 - The icebreaker FPGA Board
14:51 - Writing the driver
52:18 - Testing the panel
54:16 - Creating a pattern on screen
58:58 - Testing the pattern
=[ 🔗 Links 🔗 ]=
- FPGA: en.wikipedia.org/wiki/Field-programmable_gate_array
- gateware-ts: github.com/gateware-ts/gateware-ts
- gateware-ts documentation: gateware-ts.github.io/gateware-ts
- icebreaker FPGA: 1bitsquared.com/collections/fpga/products/icebreaker
- LED Panel: 1bitsquared.com/collections/fpga/products/led-panel
- Great Sparkfun article about driving LED panels: sparkfun.com/news/2650
- Verilog: en.wikipedia.org/wiki/Verilog
- Summon FPGA Tools (script to download and build the OSS FPGA toolchain): github.com/open-tool-forge/summon-fpga-tools
- Prebuilt FPGA toolchain releases: github.com/YosysHQ/fpga-toolchain
- Yosys: http://www.clifford.at/yosys/
- NextPNR: github.com/YosysHQ/nextpnr
- Symbiflow: symbiflow.github.io
- nMigen (like gateware-ts, but for python): github.com/m-labs/nmigen
💌 Updates to your inbox: tinyletter.com/lowleveljavascript
🗣 Discord: discord.gg/FPWaVgk
⭐️ Patreon: patreon.com/lowleveljavascript
💻 Github Repo: github.com/LowLevelJavaScript/led-panel-driver-in-gateware-ts
In this video we're taking a look at gateware-ts, a TypeScript library for describing and building digital hardware for FPGAs in TypeScript. Specifically, we're building a driver for a 64x64 RGB LED Panel - the same as those used in large video wall displays.
If you want to try this project out for yourself, you can find the LED panels in many different places - including the 1bitsquared store mentioned in the video, but also sites like adafruit and other general electronics stockists have these kinds of panels available. If you don't mind the wait time, you can order them from China on sites like aliexpress - where they're usually a little cheaper.
00:00 - Introduction
05:38 - The LED Panel
11:43 - The icebreaker FPGA Board
14:51 - Writing the driver
52:18 - Testing the panel
54:16 - Creating a pattern on screen
58:58 - Testing the pattern
=[ 🔗 Links 🔗 ]=
- FPGA: en.wikipedia.org/wiki/Field-programmable_gate_array
- gateware-ts: github.com/gateware-ts/gateware-ts
- gateware-ts documentation: gateware-ts.github.io/gateware-ts
- icebreaker FPGA: 1bitsquared.com/collections/fpga/products/icebreaker
- LED Panel: 1bitsquared.com/collections/fpga/products/led-panel
- Great Sparkfun article about driving LED panels: sparkfun.com/news/2650
- Verilog: en.wikipedia.org/wiki/Verilog
- Summon FPGA Tools (script to download and build the OSS FPGA toolchain): github.com/open-tool-forge/summon-fpga-tools
- Prebuilt FPGA toolchain releases: github.com/YosysHQ/fpga-toolchain
- Yosys: http://www.clifford.at/yosys/
- NextPNR: github.com/YosysHQ/nextpnr
- Symbiflow: symbiflow.github.io
- nMigen (like gateware-ts, but for python): github.com/m-labs/nmigen
💌 Updates to your inbox: tinyletter.com/lowleveljavascript
🗣 Discord: discord.gg/FPWaVgk
⭐️ Patreon: patreon.com/lowleveljavascript
💻 Github Repo: github.com/LowLevelJavaScript/led-panel-driver-in-gateware-ts
![Building A Language Parser and Interpreter [Parser Combinators from Scratch] Episode 5
In this episode we dive into parsing recursive structures, and build a very simple functional language parser and interpreter.
=[ ℹ About ℹ ]=
During this series we will develop an understanding of the concept of parsing, and build our own parser combinator system from scratch. The system we build will be capable of parsing both binary and text data. Well make use of both object-oriented and function programming principles to develop an effective and intuitive library.
=[ 🔗 Links 🔗 ]=
- ⭐️ Patreon: https://www.patreon.com/lowleveljavascript
- 💌 Updates to your inbox: https://tinyletter.com/lowleveljavascript
- Playlist: https://www.youtube.com/watch?v=6oQLRhw5Ah0&list=PLP29wDx6QmW5yfO1LAgO8kU3aQEj8SIrU
- Code: https://github.com/LowLevelJavaScript/Parser-Combinators-From-Scratch
- LLJS Subreddit: https://reddit.com/r/lowleveljavascript Building A Language Parser and Interpreter [Parser Combinators from Scratch] Episode 5](https://i.ytimg.com/vi/PzodUuERBZc/mqdefault.jpg)
![Programmatic Flash Control :: Bare Metal Programming Series 8
In this installment of the bare metal programming series, were diving into how the flash peripheral of the STM32F401 chip works, and building out a little layer to be able to write a new main application from the bootloader. This serves as an excellent opportunity to cross reference the details of the reference manual with the APIs provided by libopencm3 - going from a register level understanding, to a higher level implementation!
=[ 🔗 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 Programmatic Flash Control :: Bare Metal Programming Series 8](https://i.ytimg.com/vi/QcE3Y_8hroU/mqdefault.jpg)
![The Emulator Is Done?!: RISC-V ep.12
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: 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 The Emulator Is Done?!: RISC-V ep.12](https://i.ytimg.com/vi/QmHAN1vOtjs/mqdefault.jpg)
![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)