
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…

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…
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.
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.0branch — read its notes before assuming any v2.0 change is known-good. Bring-up and OS-port work is being done against theusimsimulator in parallel.
| Path | What's in it |
|---|---|
pico-thing.kicad_pro | KiCad project (schematic, PCB, netlists) |
pico-thing.kicad_sch | Top-level sheet — CPU, glue, power |
RAM_and_DAT.kicad_sch | Main RAM bank + DAT/MMU logic (two 22V10s) |
ATA_IDE.kicad_sch | PATA hard-disk interface |
Video.kicad_sch | HDMI 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.txt | Terse per-release changes |
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.!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.$FF10-page register window so the 6809 can
eventually drive text/graphics from software. Firmware lives in
the sibling repo ../pico-thing-video.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:
$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).$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.~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.
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:
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.
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.
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.
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.
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.
Everything else can be built with a plain iron.
Everything renderable lives under docs/.
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).Main board:
docs/pico-thing-schematic.pdf — multi-sheet schematic PDFdocs/pico-thing-pcb.pdf — layer plot, one page per layer (F.Cu, In1.Cu, In2.Cu, B.Cu, silk, mask, paste, Edge.Cuts)docs/pico-thing-pcb-front.pdf — composite front view (copper + silk + mask + paste + adhesive, drill markers)docs/pico-thing-pcb-back.pdf — composite back view, mirrored so B.Silkscreen reads right way rounddocs/pico-thing-pcb-fab.pdf — front fabrication view (Edge.Cuts, F.Silkscreen, F.Courtyard, F.Fab)docs/pico-thing-bom.csv — flat CSV BOM, grouped by Value+Footprint, DNPs markeddocs/pico-thing-gerbers.zip — Gerbers + Excellon drill files + drill map — hand this to your fabMezzanine daughterboard — same set with the
mezzanine- prefix:
docs/mezzanine-schematic.pdfdocs/mezzanine-pcb.pdfdocs/mezzanine-pcb-front.pdfdocs/mezzanine-pcb-back.pdfdocs/mezzanine-pcb-fab.pdfdocs/mezzanine-bom.csvdocs/mezzanine-gerbers.zipRegenerate 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).
Bring-up, boot-code development and OS work happens against a software model of this board before it touches copper. The simulator is:
usim09pt and usim09batch entry points).~/GitHub/usimThe 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.
../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.lwasm, lwlink) to build any of the boot ROMs
or GAL programming aids..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).Hardware: see LICENSE.txt.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 31 | 0µ1 | Capacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mm | C101, C102, C103, C105, C106, C108, C109, C111, C115, C116, C117, C118, C201, C202, C203, C204 +15 |
| 12 | GND | TestPoint:TestPoint_Loop_D3.80mm_Drill2.0mm | TP101, TP102, TP103, TP104, TP105, TP117, TP201, TP202, TP401, TP402, TP605, TP606 |
| 9 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R118, R119, R401, R402, R407, R408, R409, R604, R605 |
| 7 | 330 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R113, R115, R116, R120, R123, R124, R406 |
| 7 | 3k3 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R102, R103, R104, R105, R403, R404, R405 |
| 4 | 5k1 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R106, R107, R601, R602 |
| 4 | 5mm | MountingHole:MountingHole_5mm | H1, H2, H3, H4 |
| 4 | ATF22V10 | Package_DIP:DIP-24_W7.62mm_Socket | U105, U208, U209, U402 |
| 4 | Conn_01x02 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J102, J103, J602, J604 |
| 4 | JST BM03B SRSS-TB | Connector_JST:JST_SH_BM03B-SRSS-TB_1x03-1MP_P1.00mm_Vertical | J101, J105, J603, J606 |
| 4 | Red | LED_THT:LED_D3.0mm | D105, D107, D116, D401 |
| 3 | 120 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R109, R114, R126 |
| 3 | 47µ | Capacitor_THT:CP_Radial_D8.0mm_P2.50mm | C107, C211, C408 |
| 3 | 74HCT541 | Package_DIP:DIP-20_W7.62mm_Socket | U205, U206, U207 |
| 3 | Green | LED_THT:LED_D3.0mm | D108, D112, D113 |
| 3 | Orange | LED_THT:LED_D3.0mm | D106, D110, D115 |
| 2 | 100k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R101, R603 |
| 2 | 10n | Capacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mm | C104, C119 |
| 2 | 270 | Resistor_SMD:R_Array_Convex_4x1206 | RN601, RN602 |
| 2 | 47 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R117, R128 |
| 2 | 56k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R606, R607 |
| 2 | 74ABT652 | Package_DIP:DIP-24_W7.62mm_Socket | U403, U404 |
| 2 | AM93L422 | Package_DIP:DIP-22_W10.16mm_Socket | U201, U202 |
| 2 | Pimoroni_PGA2350 | MarkM:pimoroni_pga2350 | A101, A601 |
| 2 | STPS20L25CT | Package_TO_SOT_THT:TO-220-3_Vertical | D109, D601 |
| 2 | SW_Push | Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x | SW101, SW102 |
| 2 | SolderJumper_2_Open | Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP601, JP602 |
| 2 | TN0604N3-G | Package_TO_SOT_THT:TO-92_Inline | Q103, Q105 |
| 2 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_GCT_USB4085 | J104, J601 |
| 1 | +3.3V | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP110 |
| 1 | +3.3Video | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP602 |
| 1 | +3.3v(local) | TestPoint:TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded | TP116 |
| 1 | +5.2V | TestPoint:TestPoint_Loop_D3.80mm_Drill2.0mm | TP108 |
| 1 | +5Bus | TestPoint:TestPoint_Loop_D3.80mm_Drill2.0mm | TP111 |
| 1 | +5V | TestPoint:TestPoint_Loop_D3.80mm_Drill2.0mm | TP109 |
| 1 | +5Video | TestPoint:TestPoint_Loop_D3.80mm_Drill2.0mm | TP601 |
| 1 | 100 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R122 |
| 1 | 10k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R608 |
| 1 | 10k-22k | Potentiometer_THT:Potentiometer_Piher_PT-10-V05_Vertical | RV101 |
| 1 | 10µ | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C602 |
| 1 | 150 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R127 |
| 1 | 1k0 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R125 |
| 1 | 1µ0 | Capacitor_THT:CP_Radial_D8.0mm_P2.50mm | C110 |
| 1 | 220 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R121 |
| 1 | 2m2 | Capacitor_THT:CP_Radial_D10.0mm_P5.00mm | C112 |
| 1 | 32.768kHz | Crystal:Crystal_DS26_D2.0mm_L6.0mm_Horizontal_1EP_style2 | Y101 |
| 1 | 33k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R133 |
| 1 | 47u | Capacitor_THT:C_Disc_D11.0mm_W5.0mm_P5.00mm | C113 |
| 1 | 47u | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C114 |
| 1 | 4k7 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R201 |
| 1 | 4k7 | Resistor_THT:R_Array_SIP9 | RN201 |
| 1 | 4µ7 | Capacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mm | C407 |
| 1 | 74HCT125 | Package_DIP:DIP-14_W7.62mm_Socket | U103 |
| 1 | 74LVC1G139 | Package_SO:VSSOP-8_2.3x2mm_P0.5mm | U101 |
| 1 | 74LVC2G3157 | Package_SO:TSSOP-10_3x3mm_P0.5mm | U601 |
| 1 | ADC0 | TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mm | TP613 |
| 1 | ADC1 | TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mm | TP612 |
| 1 | ADC2 | TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mm | TP611 |
| 1 | ADC3 | TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mm | TP610 |
| 1 | ADC4 | TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mm | TP609 |
| 1 | ADC5 | TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mm | TP608 |
| 1 | ADC_VRef | TestPoint:TestPoint_THTPad_1.0x1.0mm_Drill0.5mm | TP607 |
| 1 | AS6C4008-55PCN | Package_DIP:DIP-32_W15.24mm_Socket | U203 |
| 1 | AS6C4008-55PCN | Package_DIP:DIP-32_W15.24mm | U204 |
| 1 | BC547 | Package_TO_SOT_THT:TO-92_Inline | Q401 |
| 1 | Barrel_Jack_Switch | Connector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_Horizontal | J111 |
| 1 | Battery | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J108 |
| 1 | Blue | LED_THT:LED_D3.0mm | D111 |
| 1 | BootSel | Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x | SW602 |
| 1 | Conn_01x16 | Connector_PinSocket_2.54mm:PinSocket_1x16_P2.54mm_Vertical | J110 |
| 1 | Conn_02x16_Counter_Clockwise | MarkM:PinHeader_2x16_P2.54mm_Vertical_AntiClockwise | J201 |
| 1 | DS12885 | Package_SO:SOIC-24W_7.5x15.4mm_P1.27mm | U106 |
| 1 | E | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP106 |
| 1 | Ferrite | Inductor_THT:L_Axial_L16.0mm_D7.5mm_P25.40mm_Horizontal_Fastron_XHBCC | FB401 |
| 1 | GAL16V8 | Package_DIP:DIP-20_W7.62mm_Socket | U401 |
| 1 | HD RESET | Button_Switch_THT:SW_TH_Tactile_Omron_B3F-100x | SW401 |
| 1 | Hard Drive Power | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type086_RT03402HBLC_1x02_P3.81mm_Horizontal | J402 |
| 1 | Heatsink | Heatsink:Heatsink_AAVID_TV5G_TO220_Horizontal | HS101 |
| 1 | ICM7555xP | Package_DIP:DIP-8_W7.62mm_Socket | U109 |
| 1 | J109 | Package_TO_SOT_THT:TO-92S | Q101 |
The 182 most common of 206 parts.

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…

martinbros/Quantifying-the-Current
Art piece demonstrating the power grid

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.


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.




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.
It measures 273 × 178 mm and has 4 copper layers, 1.6 mm thick.
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.
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.
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).