PicoCRT is a hardware/software project that drives the internal CRT of a Compact Macintosh (SE, Classic, Plus) using a Raspberry Pi Pico (RP2040), without the original Apple logic board.
The Compact Mac CRT requires three TTL-level signals: horizontal sync (HSYNC), vertical sync (VSYNC) and monochrome pixel data (DATA). The display runs at a fixed 512×342 resolution with a dot clock of 15.625 MHz, HSYNC at ~22.2 kHz and VSYNC at ~60 Hz. The pixel data is 1-bit monochrome with inverted polarity — high means black, low means white — and the electron beam must be blanked (data held high) outside the active video area, including during both horizontal and vertical retrace.
The RP2040’s Programmable I/O (PIO) subsystem makes this possible. Three PIO state machines run simultaneously and independently: one generates HSYNC with precise dot-clock timing, one generates VSYNC and counts scan lines, and one clocks out pixel data from a framebuffer in RAM. The state machines are synchronized via PIO interrupt flags rather than software, giving cycle-accurate timing without any CPU involvement. DMA transfers the framebuffer to the data state machine in a continuous loop, freeing the CPU entirely for application logic.
The framebuffer is 512×342 pixels at 1 bit per pixel (21,888 bytes) - a small fraction of the RP2040’s 264 KB SRAM. Pixel data is packed MSB-first, with bit 31 representing the leftmost pixel in each word.
The RP2040’s GPIO outputs (3.3V) connect directly to the analog board without a level shifter. In practice the analog board’s TTL inputs trigger reliably at 3.3V, as confirmed by testing against both Mac SE - however I have not made it work on a otherwise identical Mac Classic display.
The Pico’s USB device capability enables a simple host-side protocol for pushing framebuffer content to the display. Current software includes a Python script for still images, a Linux kernel module, and a macOS proof-of-concept that captures the screen, scales it to 512×342 and dithers it to 1-bit monochrome using Floyd-Steinberg dithering before streaming it live to the CRT.
Jonatan