Skip to the content
4 layers273 × 178 mmPico thing, the printed circuit board in 3D

An 8-bit MC6809E / HD6309E single-board computer with a pair of Raspberry Pi Pico 2 (RP2350 / Pimoroni PGA2350) modules acting as intelligent bus peripherals, a 1–2 MB banked-RAM DAT/MMU, a 40-pin PATA hard-disk…

Size
273 × 178 mm
Copper layers
4
Thickness
1.6 mm
Parts
206
Nets
282
Pads
1,101
Tracks, vias
2,245, 644
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
17 Jul 2026
Updated
13 Aug 2026

Overview

Pico thing is an open-source printed circuit board by markrvmurray, from the markrvmurray/pico-thing repository on GitHub, published under the BSD-2-Clause licence. It is a 4-layer board of 273 × 178 mm with 206 parts on 282 nets, routed with 2,245 tracks and 644 vias.

It is built around the ATF22V10C-15PU, 74HCT541D and SN74HCT125N, with the 74LVC1G139DCU, 74LVC2G3157DP-Q10J and AS6C4008-55PCN among its other parts. Its parts include 43 resistors, 42 capacitors, 19 ICs, 15 connectors and 13 diodes. It belongs with the RP2040 and FPGA and CPLD boards of this library.

Main components

12

README

README.md

Pico-Thing

An 8-bit MC6809E / HD6309E single-board computer with a pair of Raspberry Pi Pico 2 (RP2350 / Pimoroni PGA2350) modules acting as intelligent bus peripherals, a 1–2 MB banked-RAM DAT/MMU, a 40-pin PATA hard-disk interface, and an HSTX→DVI video output.

The board is entirely through-hole where it matters — old-school sockets, hand-solderable, KiCad 10 project.

Pre-release — v2.0 work-in-progress. This snapshot has not been fabricated end-to-end. Individual blocks are at different maturity levels, and several are known to be untested on real hardware: the real-time clock, the LCD interface, the revised v2.0 power arrangement (external +VDC input + MIC29501 5 V rail switched by A101), the external USB-A input, the EMC ferrites, and the top-level sheet reorganisation are all fresh since the last spun board. Look for (untested) markers on the sections below.

The last hardware that was actually fabricated and partially tested lives on the RELEASE_1.0 branch — read its notes before assuming any v2.0 change is known-good. Bring-up and OS-port work is being done against the usim simulator in parallel.

Repository layout

PathWhat's in it
pico-thing.kicad_proKiCad project (schematic, PCB, netlists)
pico-thing.kicad_schTop-level sheet — CPU, glue, power
RAM_and_DAT.kicad_schMain RAM bank + DAT/MMU logic (two 22V10s)
ATA_IDE.kicad_schPATA hard-disk interface
Video.kicad_schHDMI connector + companion PGA2350
mezzanine/Sub-project: 1 MB RAM daughterboard
GAL/.PLD sources, .jed fuse maps and .doc compile reports for the five GALs (four 22V10 + one 16V8)
docs/PDFs, Gerbers, assembly drawings (see below)
RELEASE-HISTORY.txtTerse per-release changes

Branches

  • main — work-in-progress v2.0. Substantial rework: video subsystem redesigned around the PGA2350 (firmware moved to ../pico-thing-video), power section redone with an external +VDC input and a MIC29501 5 V linear rail, ATA/HD terminal block moved onto the ATA sheet, ferrite beads added to the peripheral supplies, DAT/MMU control split across two GALs on the RAM_and_DAT sheet, and generous new test points wired up for bring-up and scope work.
  • RELEASE_1.0 — the last hardware that has actually been spun and partially tested. Contains my working notes on what needs to be fixed, what needs to be re-tested, and the migration path to v2.0. Read this branch before touching a v1.0 board.

Design highlights

CPU and its two RP2350 companions

  • U102 — MC6809E in a 40-pin socket, or drop-in HD6309E for the extended register set / faster instruction timings. Real silicon, real bus timing.
  • A101 — Pimoroni PGA2350 module sitting next to the CPU. A101 sources the E and Q clocks that drive the 6x09 — the CPU's bus timing is generated by A101's PIO, not by an external crystal oscillator. It also behaves as a slave bus peripheral: it watches A/D/control lines via PIO state machines and responds when its !CS is asserted, presenting a memory-mapped register window that the 6809 can read and write. This is where firmware-emulated devices (serial ACIAs, storage helpers, boot-ROM loading, host-side gadgets) live. !RESET is observed; !IRQ is driven back to the CPU as a simulated open-collector. Firmware lives in the sibling repo ../pico-thing-main.
  • A601 — a second PGA2350 dedicated to video. It observes the E/Q clocks that A101 produces, uses the RP2350's HSTX peripheral to drive a DVI-over-HDMI output at 1024×480 RGB332 ~60 Hz, and presents a $FF10-page register window so the 6809 can eventually drive text/graphics from software. Firmware lives in the sibling repo ../pico-thing-video.

DAT RAM architecture

The memory system is a poor-man's 6809 MMU built out of static RAM and two 22V10 GALs (U208, U209) on the RAM_and_DAT sheet. It gives the 6809 a 21-bit physical address space (2 MB) paged into its native 16-bit logical space in 8 kB pages:

  • Logical $0000–$DFFF — 7 fully translated pages. Each page's physical address (PA13..PA20) comes from the DAT RAM, indexed by the logical page number and the current task. The DAT RAM is itself accessible as ordinary RAM at logical $FE00–$FEFF, but only by task 0 (the supervisor).
  • Logical $E000–$FFFF — always mapped to physical $1FE000–$1FFFFF regardless of the current task, so the OS, vectors and I/O window are always reachable. This is the ~MMU_fixed signal handled by the GALs.
  • If the DAT translates a page to all-ones (i.e. "no page mapped here"), the GAL asserts ~NMI on the CPU. Touching unmapped RAM is a fault, not a silent bit-bucket.

Two AS6C4008-55PCN 512K×8 SRAMs (U203, U204) on the main board provide 1 MB of physical memory; two more of the same on the mezzanine daughterboard bring this up to the full 2 MB.

PATA IDE interface

J401 is a 40-pin IDC header for a standard PATA hard drive (2.5" or 3.5", laptop/desktop, master or slave). The 6809 only has an 8-bit bus and can't do the ATA 16-bit data-register reads natively, so a pair of 74ABT652 bidirectional registered transceivers (with the two data GALs) implement:

  • 8-bit register reads/writes for the ATA task-file registers (status, command, LBA0..3, error, features, etc.) — packed into contiguous 6809 address space with no wasted locations.
  • 16-bit word reads/writes on the data register, transparently swapped and latched to fit into two consecutive 8-bit 6809 cycles. This means that 16-bit loads and stores to the data register can be done naturally in single instructions.

Host-side memory map is $FF00–$FF09 (one location offset from canonical ATA, with the DEV bit selecting master/slave inside the firmware). An absent drive slot reads status = $00.

Hard-drive power is a Metz-Connect terminal block (J402) on the ATA sheet, filtered through an axial ferrite bead (FB401) from the main +5 V rail, with a hardware ~Reset_HD line driven by the board's power-on-reset supervisor.

Real-time clock (untested)

U106 is a Maxim/Dallas DS12885 — an ISA-era RTC + CMOS RAM part with an external battery-backup pin. J108 is a 2-pin header for the backup battery (a CR2032 holder off-board is the expected fit); the RTC keeps time and preserves its scratchpad RAM across full board power-down. A ~Reset_RTC from the power-on-reset supervisor makes sure the RTC comes up cleanly after each cold start. This block has not been tested on real hardware yet.

LCD interface (untested)

J110 is a 1×16 pin socket carrying the classic HD44780-style parallel LCD signal set (DB0..DB7, RS, R/W, E, backlight and contrast, ground and +5 V). Any 16-pin HD44780-compatible module — 16×2, 20×4 and friends — should drop straight in. RV101 is a small vertical trim pot for the contrast pin (marked DNP in the BOM; solder one on only if your chosen module needs it). Untested on real hardware.

Power (v2.0)

  • +VDC — external DC input via a barrel jack; nominally 7.5–12 V.
  • +5V (main) — the big logic rail, is generated by a heatsunk MIC29501-5.0 low-dropout linear regulator (U104). This rail is switched under A101's control — A101 owns the enable pin, so firmware on the CPU-side Pico decides when to bring the 6809 side of the board up (or drop it, e.g. for a controlled reset or a fault response). This also powers all of the non-A101 peripherals.
  • +5VP — auxiliary/peripheral 5 V rail from a MIC29150WT (U104) in a heatsunk TO-220-5 package. A101 itself runs off this rail so it stays alive across a switch-off.
  • +3.3V — local rail on each PGA2350, generated by the Pico modules themselves.
  • Downstream peripheral supplies (Video +5V, ATA +5V) are individually ferrite-bead filtered from the +5V rails.
  • A 5V-sense divider into an ADC on A101 lets the firmware notice when a rail is sagging and take defensive action.

Test points

v2.0 adds a generous set of test points across the board: TP603/TP604 (video RD/WR), TP605/TP606 (video GND returns), TP116 (+3.3 V local), TP117 (E clock), and the usual GND loops. If you have a scope, you can reach anything interesting without prodding a DIP leg.

Assembly notes

The board is deliberately through-hole and hand-solderable almost everywhere — sockets, DIPs, axial resistors, radial capacitors, IDC headers. The two SMD pockets to be aware of are both in the video area, and both are on the top of the board.

  • The HDMI receptacle (J605, Molex 208658-1001) has a fine pin pitch and shielded body — you want a fine tip, flux, and patience. Solder-paste + hot air is easier than iron work here.
  • The CAT16-271J4LF HDMI data-line series-terminator arrays (RN601, RN602) are 4×1206 SMD parts. These are the "data resistors" for the differential pairs; the footprint is the hand-solder variant, but they're still small.

Everything else can be built with a plain iron.

Documentation

Everything renderable lives under docs/.

Hand-authored explainer

  • docs/dat-mmu.pdf — DAT MMU deep-dive: Task/Block bit-field walkthrough, full DAT RAM diagram, four worked lookup examples (valid page, valid mapped page, unmapped-page NMI, and the hard-wired $1FE000–$1FFFFF window). Source alongside: docs/dat-mmu.tex (LaTeX + TikZ, newtxtext/newtxmath + inconsolata).

Fabrication + reference artefacts

Main board:

Mezzanine daughterboard — same set with the mezzanine- prefix:

Regenerate with docs/build.sh after changing the schematic or PCB. Needs KiCad 10 (defaults to /Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli on macOS; override with KICAD_CLI=/path/to/kicad-cli ./docs/build.sh).

Simulator

Bring-up, boot-code development and OS work happens against a software model of this board before it touches copper. The simulator is:

  • usim — an MC6809/HD6309 cycle simulator with a Pico-Thing hardware profile (dual MC6850-shaped console/aux ACIAs, DAT/MMU, PATA task-file, usim09pt and usim09batch entry points).
  • Local checkout: ~/GitHub/usim
  • Published at: https://github.com/mrvmurray/usim

The usim09pt --aux-pty mode exposes the aux serial port as a host pseudo-terminal (typically /dev/ttys00N), which is handy for DriveWire and other host-side serial protocols during OS porting.

Related projects

  • ../pico-thing-main — firmware for the CPU-side PGA2350 (A101): E/Q clock generation, bus-slave register window, firmware-emulated peripherals (ACIAs, storage helpers, boot-ROM loading). Published at https://github.com/markrvmurray/pico-thing-main.
  • ../pico-thing-video — firmware for the video PGA2350 (A601): HSTX→DVI engine, bus-slave register window, Spleen-font text overlay.
  • ../usim — cycle-accurate 6809/6309 simulator with Pico-Thing hardware model.

Prerequisites

  • KiCad 10 to open the schematic and PCB.
  • lwtools (lwasm, lwlink) to build any of the boot ROMs or GAL programming aids.
  • A CUPL toolchain (WinCUPL or equivalent) is only needed to rebuild the GAL fuse maps — the current .jed files ship alongside their .PLD sources in GAL/, ready to burn onto the appropriate 22V10 or 16V8 with your usual programmer (Atmel ATF, Lattice GAL, or any other compatible-family part — the JEDEC file is the same; only the programmer's device selection differs).

License

Hardware: see LICENSE.txt.

Parts

206
QtyValueFootprintReferences
310µ1Capacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mmC101, C102, C103, C105, C106, C108, C109, C111, C115, C116, C117, C118, C201, C202, C203, C204 +15
12GNDTestPoint:TestPoint_Loop_D3.80mm_Drill2.0mmTP101, TP102, TP103, TP104, TP105, TP117, TP201, TP202, TP401, TP402, TP605, TP606
910kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR118, R119, R401, R402, R407, R408, R409, R604, R605
7330Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR113, R115, R116, R120, R123, R124, R406
73k3Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR102, R103, R104, R105, R403, R404, R405
45k1Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR106, R107, R601, R602
45mmMountingHole:MountingHole_5mmH1, H2, H3, H4
4ATF22V10Package_DIP:DIP-24_W7.62mm_SocketU105, U208, U209, U402
4Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ102, J103, J602, J604
4JST BM03B SRSS-TBConnector_JST:JST_SH_BM03B-SRSS-TB_1x03-1MP_P1.00mm_VerticalJ101, J105, J603, J606
4RedLED_THT:LED_D3.0mmD105, D107, D116, D401
3120Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR109, R114, R126
347µCapacitor_THT:CP_Radial_D8.0mm_P2.50mmC107, C211, C408
374HCT541Package_DIP:DIP-20_W7.62mm_SocketU205, U206, U207
3GreenLED_THT:LED_D3.0mmD108, D112, D113
3OrangeLED_THT:LED_D3.0mmD106, D110, D115
2100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR101, R603
210nCapacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mmC104, C119
2270Resistor_SMD:R_Array_Convex_4x1206RN601, RN602
247Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR117, R128
256kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR606, R607
274ABT652Package_DIP:DIP-24_W7.62mm_SocketU403, U404
2AM93L422Package_DIP:DIP-22_W10.16mm_SocketU201, U202
2Pimoroni_PGA2350MarkM:pimoroni_pga2350A101, A601
2STPS20L25CTPackage_TO_SOT_THT:TO-220-3_VerticalD109, D601
2SW_PushButton_Switch_THT:SW_TH_Tactile_Omron_B3F-100xSW101, SW102
2SolderJumper_2_OpenJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP601, JP602
2TN0604N3-GPackage_TO_SOT_THT:TO-92_InlineQ103, Q105
2USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4085J104, J601
1+3.3VTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP110
1+3.3VideoTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP602
1+3.3v(local)TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_BeadedTP116
1+5.2VTestPoint:TestPoint_Loop_D3.80mm_Drill2.0mmTP108
1+5BusTestPoint:TestPoint_Loop_D3.80mm_Drill2.0mmTP111
1+5VTestPoint:TestPoint_Loop_D3.80mm_Drill2.0mmTP109
1+5VideoTestPoint:TestPoint_Loop_D3.80mm_Drill2.0mmTP601
1100Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR122
110kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR608
110k-22kPotentiometer_THT:Potentiometer_Piher_PT-10-V05_VerticalRV101
110µCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC602
1150Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR127
11k0Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR125
11µ0Capacitor_THT:CP_Radial_D8.0mm_P2.50mmC110
1220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR121
12m2Capacitor_THT:CP_Radial_D10.0mm_P5.00mmC112
132.768kHzCrystal:Crystal_DS26_D2.0mm_L6.0mm_Horizontal_1EP_style2Y101
133kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR133
147uCapacitor_THT:C_Disc_D11.0mm_W5.0mm_P5.00mmC113
147uCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC114
14k7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR201
14k7Resistor_THT:R_Array_SIP9RN201
14µ7Capacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mmC407
174HCT125Package_DIP:DIP-14_W7.62mm_SocketU103
174LVC1G139Package_SO:VSSOP-8_2.3x2mm_P0.5mmU101
174LVC2G3157Package_SO:TSSOP-10_3x3mm_P0.5mmU601
1ADC0TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mmTP613
1ADC1TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mmTP612
1ADC2TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mmTP611
1ADC3TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mmTP610
1ADC4TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mmTP609
1ADC5TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mmTP608
1ADC_VRefTestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mmTP607
1AS6C4008-55PCNPackage_DIP:DIP-32_W15.24mm_SocketU203
1AS6C4008-55PCNPackage_DIP:DIP-32_W15.24mmU204
1BC547Package_TO_SOT_THT:TO-92_InlineQ401
1Barrel_Jack_SwitchConnector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_HorizontalJ111
1BatteryConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ108
1BlueLED_THT:LED_D3.0mmD111
1BootSelButton_Switch_THT:SW_TH_Tactile_Omron_B3F-100xSW602
1Conn_01x16Connector_PinSocket_2.54mm:PinSocket_1x16_P2.54mm_VerticalJ110
1Conn_02x16_Counter_ClockwiseMarkM:PinHeader_2x16_P2.54mm_Vertical_AntiClockwiseJ201
1DS12885Package_SO:SOIC-24W_7.5x15.4mm_P1.27mmU106
1ETestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP106
1FerriteInductor_THT:L_Axial_L16.0mm_D7.5mm_P25.40mm_Horizontal_Fastron_XHBCCFB401
1GAL16V8Package_DIP:DIP-20_W7.62mm_SocketU401
1HD RESETButton_Switch_THT:SW_TH_Tactile_Omron_B3F-100xSW401
1Hard Drive PowerTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type086_RT03402HBLC_1x02_P3.81mm_HorizontalJ402
1HeatsinkHeatsink:Heatsink_AAVID_TV5G_TO220_HorizontalHS101
1ICM7555xPPackage_DIP:DIP-8_W7.62mm_SocketU109
1J109Package_TO_SOT_THT:TO-92SQ101

The 182 most common of 206 parts.

More from markrvmurray/pico-thing

1
  • 4 layers59.7 × 49.5 mmMezzanine, the printed circuit board in 3D

    Mezzanine

    markrvmurray/pico-thing

    An 8-bit MC6809E / HD6309E single-board computer with a pair of Raspberry Pi Pico 2 (RP2350 / Pimoroni PGA2350) modules acting as intelligent bus peripherals, a 1–2 MB banked-RAM DAT/MMU, a 40-pin PATA hard-disk…

    5 parts1BSD-2-Clause

Similar boards

  • 2 layers111.8 × 50.8 mmWallClockGen, the printed circuit board in 3D

    WallClockGen

    martinbros/Quantifying-the-Current

    Art piece demonstrating the power grid

    38 parts2GPL-3.0
  • 4 layers180.5 × 108 mmRadian panel.before colored actual models 20260918T190457, the printed circuit board in 3D

    Radian panel.before colored actual models 20260918T190457

    KrasForge/Courant

    A 2D finite-difference physical-modeling synthesis engine in structural VHDL: a vibrating membrane/plate/gong solved on FPGA fabric, with a nonlinear chaos term, playable polyphonically over MIDI/CV.

    69 partsMIT
  • 4 layers85.5 × 110.8 mmGuitarPedalV4, the printed circuit board in 3D

    GuitarPedalV4

    OscarBazylewich/Phaser_and_Overdrive_Custom_Guitar_Pedal

    This project is a guitar pedal with analog circuits. It has a four-stage JFET phaser of the MXR Phase 90 type and a diode-clipping overdrive of the BOSS OD-1 type.

    103 partsGPL-3.0
  • 4 layers202.3 × 90 mmMythra psu, the printed circuit board in 3D

    Mythra psu

    bad-alloc-heavy-industries/Mythra

    45 parts7BSD-3-Clause
  • 2 layers88.6 × 55.6 mmLedian support board, the printed circuit board in 3D

    Ledian support board

    aleclearmind/ledian

    ledian: a color-coded terminal made out of LEDs

    88 parts
  • 2 layers80 × 70 mmJli2555-tin can, the printed circuit board in 3D

    Jli2555-tin can

    anauseam/JLI-2555-tin-can-mic

    JLI-2555 Microphone preamplifier

    26 partsCERN-OHL-P-2.0
  • 2 layers160 × 60 mmCarrier, the printed circuit board in 3D

    Carrier

    ntotten/Kohler-DTV-Plus

    Replacement interface and CGI protocol analysis for the Kohler DTV+ shower system controller (K-99695-NA / K-99693-P-NA), plus an open investigation into mid-shower shutoffs.

    52 parts

Questions

How big is the Pico thing PCB?

It measures 273 × 178 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Pico thing use?

206 parts, built around the ATF22V10C-15PU, 74HCT541D, SN74HCT125N and 74LVC1G139DCU. 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 Pico thing KiCad files?

From the markrvmurray/pico-thing repository on GitHub, at the commit this page was made from: the board is pico-thing.kicad_pcb and its schematic ATA_IDE.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Pico thing design in my own project?

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