Skip to the content
4 layers150 × 101.8 mmRocinante1, the printed circuit board in 3D

I wired up a microcontroller on a protoboard to display video on a vintage CRT TV.

Size
150 × 101.8 mm
Copper layers
4
Thickness
1.6 mm
Parts
143
Nets
189
Pads
665
Tracks, vias
3,413, 363
Pours
4
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
4 Apr 2020
Updated
6 Nov 2026

Overview

Rocinante1 is an open-source printed circuit board by bradgrantham, from the bradgrantham/rocinante repository on GitHub, published under the Apache-2.0 licence. It is a 4-layer board of 150 × 101.8 mm with 143 parts on 189 nets, routed with 3,413 tracks and 363 vias.

It is built around the W9812G6KH-6 and ASE-14.31818MHZ-C-T3. Its parts include 62 resistors, 36 capacitors, 16 connectors, 5 diodes and 5 switches. It belongs with the ESP8266 and STM32 boards of this library.

Main components

2

README

README.md

Introduction

I wired up a microcontroller on a protoboard to display video on a vintage CRT TV.

I call it Rocinante.

It's named after Don Quixote's horse in the novel by Miguel de Cervantes. Quixote is proud of his horse and views Rocinante as his noble steed that carries him boldy into battle. Like Don Quixote, Rocinante is actually awkward, past his prime, and engaged in a task beyond his capabilities.

I reached the limit of what I could do comfortably on a protoboard, so I designed a PCB with the peripherals I thought I might need for a beefy version of the thing. I had PCBWay make the boards and place the SMD parts. The boards arrived November 4th, 2020. I installed the through-hole parts myself.

Rosa V1

Hardware Features

  • STM32H743IITX
  • Power LED, debug LED, and RESET button
  • BOOT button to reset into DFU mode
  • 10-pin SWD (serial wire debugging) header
  • USB connector for programming/device/host
  • NTSC Composite video output
  • Stereo audio output
  • 3 "USER" buttons
  • 3 programmable RGB LEDs (WS2812B aka "NeoPixel") and 3-pin header for chaining more
  • Stereo audio input (untested)
  • 2x PS/2 input (mouse, keyboard) (untested)
  • 16-bit (R5G6B5) VGA output (untested)
  • 166MHz 16MByte SDRAM (untested)
  • 8-pin header compatible with ESP-01 for wireless (untested)
  • SD card (untested)
  • Expansion header with SPI and 2 GPIO
  • I2S header

I'm keeping a spreadsheet of the status of hardware features as I bring them up.

I'm keeping rework notes for Rev1 in rework.md.

The Fundamental Idea

There is no framebuffer being directly scanned out in Rocinante.

Instead, there are two scanline buffers, and the CPU fills the next scanline buffer while DMA is scanning out the current scanline buffer.

Modern microcontrollers have high capabilities (the STM32H7 runs at 480MHz and has an FPU including double floats). Embedded SRAM remains expensive, however, so most of the STM32 series doesn't contain enough RAM to display e.g. double-buffered 640x480 with 8-bit pixels.

This implementation trades CPU for memory and generates video data on-the-fly (aka "racing the beam") from a handful of different video formats at the time of writing:

  • 1, 2, 4, and 8-bit palettized pixmaps
  • Monochrome text
  • A "Wolfenstein"-style ray-casting maze renderer
  • A display made of multiple run-length-compressed gradient spans per scanline

The current hardware supports a composite video display using NTSC output on an 8-bit DAC. The pixel clock is 4x the color burst frequency, so typical console displays of the 1970's and 1980's should be almost directly representable. Because the data is generated one scanline ahead and some CPU capacity is left over per scanline for apps, the latency for processing can be as low as one scanline.

Applications currently include a PPM viewer, PCM audio player, rudimentary 3D model viewer, and a very limited command shell.

I originally designed this with emulation of the Apple ][, ColecoVision, and Atari 2600 in mind, but who knows if I'll ever find the time for those!

The Vision

Hardware

On the PCB I also laid out a bunch of pie-in-the-sky features without knowing they would work.

The protoboard version used SPI to talk to an SD card. The PCB wires an SD slot to the actual SDMMC signals on the STM32H7.

There's a 15-pin VGA header, two PS/2 jacks, and stereo audio input to give it some better media capabilities.

I daydreamed a system capable of running multiple simultaneous apps and installed 16 megabytes of SDRAM.

Pipe Dream

Over time I hope I can make most of the system function. If there's something that doesn't work but a fix is clear, maybe I'll spin a second rev of the board if I don't lose interest before then.

Parts

143
QtyValueFootprintReferences
22100nFCapacitor_SMD:C_0603_1608MetricC1, C2, C10, C11, C12, C13, C14, C15, C16, C17, C21, C22, C23, C24, C28, C31 +6
810KResistor_SMD:R_0603_1608MetricR14, R15, R16, R21, R36, R37, R38, R39
820KResistor_SMD:R_0603_1608MetricR22, R23, R43, R44, R45, R46, R47, R48
622Resistor_SMD:R_0603_1608MetricR55, R56, R57, R58, R59, R60
668KResistor_SMD:R_0603_1608MetricR49, R50, R51, R52, R53, R54
42.2kResistor_SMD:R_0603_1608MetricR2, R20, R28, R34
310µFCapacitor_SMD:C_0603_1608MetricC25, C26, C27
31100Resistor_SMD:R_0603_1608MetricR19, R27, R33
3150Resistor_SMD:R_0603_1608MetricR40, R41, R42
31µFCapacitor_SMD:C_0603_1608MetricC33, C35, C36
3270Resistor_SMD:R_0603_1608MetricR17, R25, R31
34.3kResistor_SMD:R_0603_1608MetricR24, R29, R35
3560Resistor_SMD:R_0603_1608MetricR18, R26, R32
20Resistor_SMD:R_0603_1608MetricR61, R62
22.2µFCapacitor_SMD:C_0603_1608MetricC3, C5
2220Resistor_SMD:R_0603_1608MetricR1, R4
25.1pFCapacitor_SMD:C_0603_1608MetricC29, C30
270nFCapacitor_SMD:C_0603_1608MetricC18, C19
11.7kResistor_SMD:R_0603_1608MetricR8
11225Battery:BatteryHolder_Keystone_3001_1x12mmBT1
114kResistor_SMD:R_0603_1608MetricR11
11nFCapacitor_SMD:C_0603_1608MetricC20
1215Resistor_SMD:R_0603_1608MetricR5
125MHzCrystal:Crystal_SMD_2016-4Pin_2.0x1.6mmY1
128KResistor_SMD:R_0603_1608MetricR12
13.4kResistor_SMD:R_0603_1608MetricR9
13V3TestPoint:TestPoint_Keystone_5015_Micro-MinatureTP3
14.7µFCapacitor_SMD:C_0603_1608MetricC34
1430Resistor_SMD:R_0603_1608MetricR6
147Resistor_SMD:R_0603_1608MetricR13
15VTestPoint:TestPoint_Keystone_5015_Micro-MinatureTP2
16.8kResistor_SMD:R_0603_1608MetricR3
16.9kResistor_SMD:R_0603_1608MetricR10
18.6kResistor_SMD:R_0603_1608MetricR30
1860Resistor_SMD:R_0603_1608MetricR7
1ASE-14.31818MHzOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmX1
1AUDIOINConnector_Audio:Jack_3.5mm_CUI_SJ1-3535NG_HorizontalJ7
1AUDIOOUTConnector_Audio:Jack_3.5mm_CUI_SJ1-3535NG_HorizontalJ8
1BOOT0Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmSW5
1COMPOSITECUI_RCJ-044:CUI_RCJ-044J3
1CPSTTestPoint:TestPoint_Keystone_5015_Micro-MinatureTP1
1CTRL1Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mmJ4
1CTRL2Connector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mmJ5
1DEBUGLEDLED_SMD:LED_0603_1608MetricD2
1ESP_01Connector_PinSocket_2.54mm:PinSocket_2x04_P2.54mm_VerticalJ1
1EXPHDRConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ16
1F_SmallFuse:Fuse_1210_3225MetricF1
1GNDTestPoint:TestPoint_Keystone_5015_Micro-MinatureTP4
1HOLE0MountingHole:MountingHole_3.2mm_M3_Pad_ViaH1
1HOLE1MountingHole:MountingHole_3.2mm_M3_Pad_ViaH2
1HOLE2MountingHole:MountingHole_3.2mm_M3_Pad_ViaH3
1HOLE3MountingHole:MountingHole_3.2mm_M3_Pad_ViaH4
1I2SConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ14
1KBDCLKTestPoint:TestPoint_Keystone_5015_Micro-MinatureTP6
1KBDDATATestPoint:TestPoint_Keystone_5015_Micro-MinatureTP5
1KEYBOARDMini_din6:CUI_MD-60SMJ10
1LD1117S33TR_SOT223Package_TO_SOT_SMD:SOT-223-3_TabPin2U3
1MOUSEMini_din6:CUI_MD-60SMJ9
1NEOPIXELConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ15
1POWERLEDLED_SMD:LED_0603_1608MetricD1
1Q_NPN_CBEPackage_TO_SOT_SMD:SOT-323_SC-70Q1
1RESETButton_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmSW1
1RGBLED1LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD4
1RGBLED2LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD5
1RGBLED3LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD6
1SD_CardConnector_FCI:10067847-001RLFJ12
1SERIALConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ11
1STM32H743IITxPackage_QFP:LQFP-176_24x24mm_P0.5mmU1
1SWDConnector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMDJ2
1USBFS/POWERConnector_USB:USB_Micro-B_Amphenol_10104110_HorizontalJ13
1USER1Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmSW2
1USER2Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmSW3
1USER3Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmSW4
1VGADSUB15HD:HD15-SN-24J6
1W9812G6KH-6Package_SO:TSOP-II-54_22.2x10.16mm_P0.8mmU2

The 142 most common of 143 parts.

Similar boards

  • 4 layers67.3 × 48.5 mmRAM2GS, the printed circuit board in 3D

    RAM2GS

    garrettsworkshop/RAM2GS

    8 MB RAM expansion card for Apple IIgs

    68 parts26
  • 4 layers78.2 × 50 mmRAM2E, the printed circuit board in 3D

    RAM2E

    garrettsworkshop/RAM2E

    RAMWorks-compatible auxiliary RAM expansion card for Apple IIe

    81 parts25
  • 4 layers82.3 × 37.2 mmRIDE, the printed circuit board in 3D

    RIDE

    LIV2/RIDE

    To add the A0 Bonus RAM to the system you will need to use the addram command included in the RIDE-Software adf/lha found under Releases.

    67 parts17
  • 4 layers100 × 80 mmBuilt, the printed circuit board in 3D

    Built

    devbisme/ai-circuit-design-tests

    Tests of KiCad-related AI tools.

    243 parts10
  • 4 layers85 × 54 mmManila ice, the printed circuit board in 3D

    Manila ice

    joshtyler/manila-ice

    Lattice iCE HX4K Development Board

    158 parts10
  • 4 layers146 × 95 mmEEZ DIB MIO168, the printed circuit board in 3D

    EEZ DIB MIO168

    eez-open/dib-mio168

    EEZ DIB Mixed I/O module

    279 parts8
  • 4 layers33.3 × 93.7 mmActiveImpactor Control, the printed circuit board in 3D

    ActiveImpactor Control

    harrislab-brown/CyberDiver

    Untethered cyber-physical robotic platform for water entry experiments

    124 parts2CC-BY-SA-4.0

Questions

How big is the Rocinante1 PCB?

It measures 150 × 101.8 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Rocinante1 use?

143 parts, built around the W9812G6KH-6 and ASE-14.31818MHZ-C-T3. 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 Rocinante1 KiCad files?

From the bradgrantham/rocinante repository on GitHub, at the commit this page was made from: the board is kicad/rocinante1/rocinante1.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Rocinante1 design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).