

Crt drive
Programmable CRT drive: sync and video from a microcontroller for analog CRTs and TVs.
- Size
- 71.1 × 83.8 mm
- Copper layers
- 8
- Thickness
- 1.6 mm
- Parts
- 17
- Nets
- 42
- Pads
- 87
- Tracks, vias
- 75, 0
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 18 Sep 2026
- Updated
- 24 Sep 2026
Overview
Crt drive is an open-source printed circuit board by fractalclockwork, from the fractalclockwork/crt-drive repository on GitHub. It is an 8-layer board of 71.1 × 83.8 mm with 17 parts on 42 nets, routed with 75 tracks and 0 vias.
It is built around the 74AHCT125D. Its parts include 7 capacitors, 4 resistors, 2 connectors, 1 IC and 1 diode. It belongs with the RP2040 boards of this library.
Main components
1README
README.mdcrt-drive
Programmable CRT drive: sync and video from a microcontroller for analog CRTs and TVs.
The first target is the Link MC5 terminal (Wyse WY-120 architecture). A Raspberry Pi Pico (RP2040) replaces the CRT drive ASIC (Wyse 211009-02, U4): it synthesizes active-low /HSYNC and /VSYNC plus active-high dual video (V0 dim, V1 normal) and drives the existing deflection and neck boards. The original CPU, EPROM, and VRAM bus do not need to run.
Status: Injection pads and the Pico + 74AHCT125 carrier (KiCad protoboard) are decided. The Dev-Host Docker toolchain is validated (make smoke / make test APP=hello). Default firmware is the 60 Hz 80-col measure pattern (make build / make flash / make test / make monitor): GPIO 0–3, box+grid+plus; USB m 80/132-col, r 60/78 Hz; a/d/w/s nudge H/V phase. Four-mode analog drawings: make build APP=pattern. Phosphor reel: make build APP=demos (same m/r). Glass TTY: make build APP=term. CRT HIL is in progress after isolation and the 74AHCT125.
Docs
| Doc | Role |
|---|---|
| Project writeup | Methodology, hardware, software, HIL, camera on the glass |
| Hardware design | Board identity, labeled pads V0/V1/V/H/GND, level shift, 60 Hz then 78 Hz timings |
| Firmware plan | Phased PIO / DMA / framebuffer build, open choices |
| Test patterns | cross60 HIL record (keep); six 78 Hz drawings still on APP=pattern |
| Terminal emulator | Glass TTY (apps/term, make build APP=term) |
| Video TTY | Host session (apps/vtty, tools/vtty.py, news page) |
| Phosphor demos | Attract reel (apps/demos, make build APP=demos) |
| Firmware apps | Separate CMake projects: cross60 (default), pattern, term, demos, vtty, rick |
| Toolchains | Dev-Host Docker image, volume mount, USB flash (no gateway) |
| KiCad project | Pico carrier / level-shift protoboard (schematic + jumper layout) |
| Injector power | +5 V, VSYS Schottky, AHCT buffer rail |
| PCB drawing | Board artwork referenced from the hardware guide |
| Signal pads | Solder-side taps next to U4: V0, V1, V, H, GND |
Dev-Host toolchain (Docker)
Edit on the Dev-Host. Firmware is compiled by calling into the pico-dev image from that host (make at the repository root); the repo is bind-mounted at /workspace for the call. Plug the Pico into this machine (no Raspberry Pi gateway). Modeled on fractalclockwork/cede lab/docker/pico-dev.
Full guide: docs/toolchains.md (setup, USB modes, hello_pico, troubleshooting). Short path: docker/README.md.
make image # build crt-drive/pico-dev:local
make smoke # ARM GCC, CMake, Ninja, Pico SDK, picotool USB
make pico-discover # identify the Pico on this host's USB
make test APP=hello # build, flash, USB CDC ping (hello_pico)
make build # 60 Hz 80-col plus (default CRT UF2)
make flash # load crt_cross60
make monitor # USB CDC; follows whichever app is running
make build APP=pattern
make build APP=term # glass TTY
make build APP=vtty # host session; usage in docs/vtty.md
uv sync # Dev-Host .venv; Pillow for tools/vtty.py images
make vtty-start # news page; make vtty-stop frees the serial node
make build APP=demos
make help # all targetsmake shell and make shell-usb are a call into the image. Leave with exit. The editor stays on the Dev-Host.
Phased development
Hardware is ready to drive: lift harness at pads V0, V1, V, H, GND; level-shift on the Pico carrier (74AHCT125); power from logic-board +5 V / GND. First video mode is 60 Hz 80-col (32.1 MHz dots, 1024-dot /HSYNC, 523 lines); USB m is 60 Hz 132-col (1188×416). 78 Hz patterns come after that raster is on-glass.
Firmware order (detail in firmware-plan.md):
- Clock + PIO load — Pico PLL; 60 Hz in
apps/cross60, 78 Hz invideo/ - Stable
/HSYNCand/VSYNC— 60 Hz wraps 1024 dots / 523 lines (HIL); 78 Hz 1530 / 402 on a scope - Pixel SM + packing — 800×416 @ 2 bpp (60 Hz), 800×338 (78 Hz); FIFO stall, trailing off word
- DMA loop into PIO TX — per-line kick from hsync RX
- 60 Hz plus — default UF2; center and size on the live CRT (
make test) - 78 Hz test patterns —
make test APP=patternafter 60 Hz fills - Other apps — glass TTY in
apps/term/; phosphor reel inapps/demos/
Safety
CRT anode and flyback voltages are lethal. Isolate U4 by lifting the harness wires at the labeled V0, V1, V, H, and GND pads before splicing in RP2040 signals. Do not work on a powered chassis until you know the discharge path for the CRT anode cap.
Parts
17| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C2, C4, C7 |
| 3 | 10uF | Capacitor_THT:C_Radial_D6.3mm_H11.0mm_P2.50mm | C1, C3, C6 |
| 2 | 100R | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R1, R2 |
| 2 | 47R | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R3, R4 |
| 1 | 100R @ 100MHz | Inductor_THT:L_Axial_L5.3mm_D2.2mm_P7.62mm_Horizontal_Vishay_IM-1 | FB1 |
| 1 | 1N5817 | Diode_THT:D_DO-41_SOD81_P7.62mm_Horizontal | D1 |
| 1 | 1nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C5 |
| 1 | 74AHCT125 | Package_DIP:DIP-14_W7.62mm | U1 |
| 1 | Harness | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J2 |
| 1 | Logic +5V | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J1 |
| 1 | RaspberryPi_Pico | Module:RaspberryPi_Pico_Common_THT | A1 |
Questions
How big is the Crt drive PCB?
It measures 71.1 × 83.8 mm and has 8 copper layers, 1.6 mm thick.
What parts does the Crt drive use?
17 parts, built around the 74AHCT125D. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Crt drive KiCad files?
From the fractalclockwork/crt-drive repository on GitHub, at the commit this page was made from: the board is docs/kicad/crt-drive/crt-drive.kicad_pcb and its schematic docs/kicad/crt-drive/crt-drive.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Crt drive design in my own project?
Its repository states no licence, so its author keeps all rights: ask fractalclockwork before reusing the design.
Similar boards
- 2 layers333.4 × 149.9 mm

- 2 layers45 × 54 mm

- 2 layers333.4 × 149.9 mm

- 2 layers273.8 × 109 mm

TrueStrike42
byungyoonc/TrueStrike42
TrueStrike42 is a columnar staggered unibody split keyboard designed to maximize performance and minimize finger fatigue.
167 parts24 - 4 layers65.4 × 53.3 mm

Waterdrop esphome
twasilczyk/waterdrop-esphome
Waterdrop RO system smart Wi-Fi module for Home Assistant
39 parts15MIT - 2 layers345 × 105.6 mm

Pov display
usedhondacivic/ECE-4760-POV-Display
Persistence of vision display. 30 FPS, full RGB color, and 26" diameter. Updates remotely over WIFI.
50 parts13 - 2 layers95.3 × 50.8 mm

TinyDiskII
GLGPrograms/tinyDiskII
Homemade floppy disk emulator for Apple II series computers
52 parts12GPL-3.0 - 2 layers296 × 234 mm

Deck
joshjetson/phosphor
A full fledged DAW in TUI and GUI flavors: Run it in the terminal or run it as a desktop app (Desktop App Coming Soon..maybe)
281 parts12MIT