
MemDaughterCard SurfaceMount
danstruthers/hydra-16
6502-based multi-tasking hardware and software project

6502-based multi-tasking hardware and software project
Hydra-16 is an open-source printed circuit board by danstruthers, from the danstruthers/hydra-16 repository on GitHub. It is a 6-layer board of 304.8 × 243.8 mm with 210 parts on 368 nets, routed with 7,357 tracks and 250 vias.
It is built around the 74F541PC, 74F125D and 74F240PC, with the 74F245D, MAX232N and LF353P among its other parts. Its parts include 77 capacitors, 68 ICs, 29 connectors, 21 resistors and 1 crystal.
A multitasking 65C02 computer and its operating system, HydraOS.
The Hydra-16's hardware gives each of 16 tasks its own 32K of RAM, zero page and stack included, with its own RAM and ROM bank selections, so a task switch is one register write. HydraOS runs on it, Plan 9's way:
base/), which HydraOS is built on and which boots on its own: write an OS of your own on it./pc, a folder on the PC over the serial line), and each task has a namespace of its own, built by binds and mounts.as, an assembler on the Hydra itself.edit), a debugger (db), a song player that plays ZSM songs and compiles scores as it plays.The code is built with cc65 (https://cc65.github.io/), and the board is designed in KiCad 9 (https://www.kicad.org).
cd base
node build.js the base alone: the kernel, ser, kdev, the monitor (bin/bios_*.bin, bin/prom0.bin)
node sim/run.js -i its monitor in your terminal (Ctrl-A x quits)
cd ../reborn
node build.js build HydraOS (needs Node.js and cc65): bin/bios_*.bin, bin/prom0.bin ...
node sim/run.js -i use the Hydra in your terminal, in the emulator (Ctrl-A x quits)
node sim/web.js the emulator in a browser: one file, bin/hydra-16.html, to open (in Git: no
Node.js needed to use it)
node sim/test.js the regression testsThe ROM images are in Git (reborn/bin/) and on each GitHub release, so the chips can be programmed without a toolchain.
The Hydra-16 book is everything, in order: what the machine is, the board and how to build it (the parts, the layout, the quirks), the kernel and its calls, the drivers, the shell, the languages, the tools, the emulator, and the programming guide. It's also one PDF, to print.
| Chapter | |
|---|---|
| 1. The Hydra-16 at a glance | The ideas, the software in layers, and a first hour in the emulator |
| 2. The hardware | The architecture, the devices, the parts, building it, the layout, the quirks, the cards |
| 3. The base | The boot, the kernel, files and namespaces, the system calls, the monitor |
| 4. The drivers | The serial console, the kernel's devices, storage, sound, GPIO, video |
| 5. The shell: rc | Plan 9's shell |
| 6. The languages | HyForth, hylang, HyBASIC, and the numbers they share |
| 7. The tools | The core tools, the editors, the debugger, the assembler and disassembler |
| 8. The emulator | The emulator, the build, the tests, the PC tools |
| 9. The programming guide | Assembly, C, servers and drivers, libraries, your own OS, every system call |
How it was designed, and where it stands: the plan and the design notes.
| Folder | What |
|---|---|
base/ | The base: the kernel (the BIOS ROM), the system calls' specification, the console driver ser, the kernel's devices kdev, the monitor wozmon, the assembly SDK's core, the board's emulator and the tests' runner |
reborn/ | HydraOS, on the base: its modules, the SDKs, the ROM disk, the SD card's image, its tests |
docs/ | The book (its chapters, docs/build: the tools that make its parts list, layout drawings, call reference and PDF), and the design notes (docs/design) |
board/ | KiCad schematics and PCBs: the main board, the memory daughter card, the bus breakout card, the Vera X's glue board |
old/ | The old system (the 1.8C line: os_rom/, its programs, emulator, build and documents), frozen at HydraOS 1.0; node old/build.js test still builds and tests it |
| Qty | Value | Footprint | References |
|---|---|---|---|
| 62 | 104 | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C1, C2, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25 +46 |
| 18 | 103 | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal | R4, R5, R6, R7, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21 +2 |
| 10 | MountingHole_Pad | MountingHole:MountingHole_4mm_Pad_TopBottom | H1, H3, H4, H5, H6, H7, H8, H9, H10, H11 |
| 8 | 74LS219 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | IC1, IC2, IC3, IC4, IC5, IC6, IC7, IC8 |
| 8 | SST39SF040 | Package_DIP:DIP-32_W15.24mm_Socket_LongPads | U30, U31, U32, U33, U34, U35, U36, U37 |
| 7 | 74F541 | Package_DIP:DIP-20_W7.62mm_Socket_LongPads | U21, U49, U51, U53, U55, U58, U60 |
| 5 | 105 | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm | C4, C7, C8, C9, C10 |
| 5 | 107 | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C51, C53, C54, C55, C56 |
| 4 | 74F573 | Package_DIP:DIP-20_W7.62mm_Socket_LongPads | U48, U50, U52, U54 |
| 4 | HM628512LP-5 | Package_SO:SOP-32_11.305x20.495mm_P1.27mm | U25, U27, U28, U29 |
| 3 | 332 | Resistor_THT:R_Array_SIP9 | RN1, RN2, RN3 |
| 3 | 74F138 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U4, U20, U24 |
| 3 | 74F32 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U13, U16, U56 |
| 2 | 330 | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm | C47, C48 |
| 2 | 332 | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm | C50, C52 |
| 2 | 74F00 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U15, U44 |
| 2 | 74LS148 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U17, U18 |
| 2 | 74LS154 | Package_DIP:DIP-24_W15.24mm_Socket_LongPads | U19, U23 |
| 2 | 74LS260 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U8, U9 |
| 1 | 0.89489MHz | Connector_PinHeader_2.54mm:PinHeader_2x01_P2.54mm_Vertical | J5 |
| 1 | 1.78977MHz | Connector_PinHeader_2.54mm:PinHeader_2x01_P2.54mm_Vertical | J6 |
| 1 | 101 | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal | R3 |
| 1 | 105 | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal | R1 |
| 1 | 14.31818MHz | Crystal:Crystal_HC18-U_Vertical | Y1 |
| 1 | 3.57955MHz | Connector_PinHeader_2.54mm:PinHeader_2x01_P2.54mm_Vertical | J7 |
| 1 | 471 | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal | R2 |
| 1 | 475 | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C49 |
| 1 | 7.15909MHz | Connector_PinHeader_2.54mm:PinHeader_2x01_P2.54mm_Vertical | J8 |
| 1 | 74ACT14 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U39 |
| 1 | 74F02 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U57 |
| 1 | 74F08 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U11 |
| 1 | 74F125 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U61 |
| 1 | 74F139 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U26 |
| 1 | 74F157 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U45 |
| 1 | 74F191 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U40 |
| 1 | 74F20 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U10 |
| 1 | 74F240 | Package_DIP:DIP-20_W7.62mm_Socket_LongPads | U22 |
| 1 | 74F245 | Package_DIP:DIP-20_W7.62mm_Socket_LongPads | U59 |
| 1 | 74F30 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U14 |
| 1 | 74F86 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U12 |
| 1 | ATX-24 | Connector_Molex:Molex_Mini-Fit_Jr_5566-24A2_2x12_P4.20mm_Vertical | J11 |
| 1 | Audio In 6 | Connector_PinHeader_2.54mm:PinHeader_2x01_P2.54mm_Vertical | J29 |
| 1 | Audio Jack | Connector_Audio:Jack_3.5mm_CUI_SJ1-3525N_Horizontal | J26 |
| 1 | Conn_01x24 | Connector_PinSocket_2.54mm:PinSocket_1x24_P2.54mm_Vertical | J2 |
| 1 | Conn_01x32 | Connector_PinSocket_2.54mm:PinSocket_1x32_P2.54mm_Vertical | J1 |
| 1 | DM1813-10 | Package_TO_SOT_THT:TO-92_Inline_Wide | U43 |
| 1 | DSUB_9 | DSUB_9:L77SDE09SA4CH3R | J3 |
| 1 | Front Panel | Connector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_Vertical | J10 |
| 1 | HM628512LP-5 | Package_DIP:DIP-32_W15.24mm_Socket_LongPads | U7 |
| 1 | LF353P | Package_DIP:DIP-8_W7.62mm_Socket_LongPads | IC9 |
| 1 | MAX232 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U5 |
| 1 | MountingHole | MountingHole:MountingHole_4mm | H2 |
| 1 | R65C22-P2 | Package_DIP:DIP-40_W15.24mm_Socket_LongPads | U2 |
| 1 | R65C51-P2 | Package_DIP:DIP-28_W15.24mm_Socket_LongPads | U3 |
| 1 | RDY Pull_Up | Connector_PinHeader_2.54mm:PinHeader_2x01_P2.54mm_Vertical | J4 |
| 1 | SLOT 0 | PC Edge:TE_7-5530843-0 | J12 |
| 1 | SLOT 1 | PC Edge:TE_7-5530843-0 | J13 |
| 1 | SLOT 2 | PC Edge:TE_7-5530843-0 | J14 |
| 1 | SLOT 3 | PC Edge:TE_7-5530843-0 | J15 |
| 1 | SLOT 4 | PC Edge:TE_7-5530843-0 | J16 |
| 1 | SLOT 5 | PC Edge:TE_7-5530843-0 | J17 |
| 1 | SND CT1/2 | Connector_PinHeader_2.54mm:PinHeader_2x01_P2.54mm_Vertical | J9 |
| 1 | SP720APP | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | J28 |
| 1 | SPI Device 0 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J18 |
| 1 | SPI Device 1 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J19 |
| 1 | SPI Device 2 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J20 |
| 1 | SPI Device 3 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J21 |
| 1 | SPI Device 4 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J22 |
| 1 | SPI Device 5 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J23 |
| 1 | SPI Device 6 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J24 |
| 1 | SPI Device 7 | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J25 |
| 1 | SST39SF0x0A | Package_LCC:PLCC-32_THT-Socket | U6 |
| 1 | TL074 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U42 |
| 1 | VIA Port A | Connector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_Vertical | J27 |
| 1 | WDC65C02S | Package_DIP:DIP-40_W15.24mm_Socket_LongPads | U1 |
| 1 | YM2151 | Package_DIP:DIP-24_W15.24mm_Socket_LongPads | U38 |
| 1 | YM3012 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U41 |

danstruthers/hydra-16
6502-based multi-tasking hardware and software project

danstruthers/hydra-16
6502-based multi-tasking hardware and software project







RichCini/MacRedux
Redraws/reimplementations of various legacy Macintosh boards.


raszpl/386RC-16
Modular Circuit Technology 386RC-16 ram expansion board for C386-33 reproduction
It measures 304.8 × 243.8 mm and has 6 copper layers, 1.57 mm thick.
210 parts, built around the 74F541PC, 74F125D, 74F240PC and 74F245D. 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 danstruthers/hydra-16 repository on GitHub, at the commit this page was made from: the board is board/hydra-16.kicad_pcb and its schematic board/AddressDecode.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask danstruthers before reusing the design.