Skip to the content
PCBKitNew board
4 layers170 × 181 mm3ric, the printed circuit board in 3D

3ric homebrew computer repository

Size
170 × 181 mm
Copper layers
4
Thickness
4.69 mm
Parts
150
Nets
356
Pads
1,204
Tracks, vias
3,781, 125
Pours
5
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
28 Aug 2023
Updated
2 Nov 2026

Overview

3ric is an open-source printed circuit board by ebadger, from the ebadger/3ric repository on GitHub. It is a 4-layer board of 170 × 181 mm with 150 parts on 356 nets, routed with 3,781 tracks and 125 vias.

It is built around the 74LS245SC, 74LS574N and 74LS161DC, with the SN74LS166AN, 74LS14PC and 74LS86 among its other parts. Its parts include 43 capacitors, 22 diodes, 21 resistors, 4 ICs and 4 connectors.

Main components

7

README

README.md

3ric

A from-scratch, Apple-II-class 65C02 personal computer — real hardware plus a cycle-honest emulator that also runs in your browser.

Live demo Build series Sponsor CPU Runs in WebAssembly Code license: MIT Hardware & docs: CC BY-SA 4.0


▶ Try it now — no install, no account

Built from Bits: the Hackaday showcase is a one-minute tour of the machine: a hi-res starfield, 16-color plasma, a rotating wireframe, and an original six-voice stereo chiptune, all running as real 65C02 code. Run and remix the demo at 1x, then click the emulator for sound. Use 1-4 for scenes, Space to pause, M to mute, and Q/Esc to return to the monitor. Source and .PRG / .woz exports are available in the editor; the program targets 3RIC, not an unmodified Apple II.

https://ebadger.github.io/3ric/ runs the entire machine client-side via WebAssembly. Click the canvas and start typing at the DOS > prompt (MON enters the monitor's * prompt). Then:

  • Boot Disk — boot the demo 5.25″ floppy (a self-booting machine-code disk).
  • Mount SD — mount the micro-SD card and use the ROM's DOS shell (DIR, etc.).
  • Play Dirt Bike — ebadger.github.io/3ric/?brun=DIRTBIKE/DIRTBIKE.PRG boots Arnaud Verhille's Apple II motocross from the SD card through the ROM DOS (CD DIRTBIKE, BRUN DIRTBIKE.PRG 0800). It takes about 10 seconds to load; play with the keyboard or a gamepad.
  • Assemble & Run — open the built-in 65C02 editor, write assembly, and run it like BRUN — all in the browser. Programs are shareable via a ?src= deep link.

What is 3ric?

3ric is a personal learn-by-building project: an 8-bit computer designed at the chip level — KiCad schematics, a custom PCB, and 74-series address-decode logic — paired with a C++ emulator of the exact same machine. The emulator compiles to WebAssembly, so the same VM core that models the real hardware also boots the unmodified 512 KB ROM in any browser. The whole journey is documented in a YouTube build series.

Why it exists: to understand, build, document, and demonstrate how an Apple-II-class computer works end to end — and to let anyone poke at it with zero friction. See docs/MISSION.md.

Features

  • 65C02 CPU with a faithful memory map and soft switches, adjustable clock speed.
  • Video: 40×24 text, lo-res, and hi-res color, rendered to a canvas.
  • Input & I/O: keyboard ($C000/$C010), 6551-style ACIA serial, 6522 VIA.
  • Disk II 5.25″ floppy via .woz images (self-booting machine-code disks).
  • Micro-SD storage: a bit-banged SPI FAT32 card with a ROM DOS shell.
  • In-browser 65C02 assembler/editor — assemble & run, download a .PRG, share ?src= links; ships ~11 sample programs.
  • AI-generated 6502 games (STAR DUEL, Snake, Life, Minesweeper, 2048, Star Swarm, and more) built through the project's own codegen pipeline — see emulator/AICodeGen/.
  • Runs everywhere the same way: one shared C++ VM core drives both the native Windows build and the browser (WebAssembly) build.

Write your first program in the browser

  1. Open the live emulator and pick a sample from the editor's program menu.
  2. Edit the assembly, hit Assemble & Run, and watch it execute on the machine.
  3. Use Download .PRG to save it, or copy the ?src= link to share the exact program.

Prebuilt samples live in web/programs/; their source and design notes are under emulator/AICodeGen/ and codegen/.

Build from source

Full, current instructions are in status/SYSTEM-STATUS.md.

Native emulator (Windows): open emulator/Badger6502VM.sln in Visual Studio 2022 and build/run the Console or WinUI (Badger6502Emulator) host.

Browser / WebAssembly build (emsdk 6.0.1, Node, Python 3):

powershell
pwsh web/build.ps1     # Emscripten -> web/badger6502.js + .wasm, stages data/
pwsh web/serve.ps1     # serves http://localhost:8011/index.html

Verify it's healthy (headless smoke tests — no WASM build needed for the first one):

powershell
$node = "C:\Users\ebadger\emsdk\node\22.16.0_64bit\bin\node.exe"
& $node codegen/tools/asm6502.test.mjs   # assembler encoding tests
& $node web/test_boot.cjs                # ROM boots to a sane state

How it works

mermaid
flowchart TD
    ROM["6502 ROM + software<br/>(badger6502.bin, fontrom.dat, .s / .prg)"]
    VM["Emulator core — 65C02 VM in C++<br/>(WozLib floppy · MockMicroSD · video/keyboard/ACIA/VIA)"]
    NATIVE["Native hosts<br/>(Windows / Console)"]
    WASM["Emscripten bridge → WebAssembly"]
    BROWSER["Browser client (index.html)<br/>→ GitHub Pages"]
    CODEGEN["Codegen<br/>(asm6502 + headless harness)"]
    HW["Hardware<br/>(KiCad · 74-series logic · logisim)"]

    ROM --> VM
    VM --> NATIVE
    VM --> WASM --> BROWSER
    CODEGEN -->|assembles & tests on the same VM| VM
    HW -. mirrors the same memory map .-> VM

The memory map is a shared contract: emulator/Badger6502VMLib/vm.h is mirrored by the hardware decode schematic, the web bridge, and the codegen platform reference. The architecture and each layer are documented in specs/ — start with specs/SYSTEM.md.

Repository layout

PathWhat's there
emulator/C++ 65C02 VM core, WozLib, MockMicroSD, native hosts, ROM data, AI codegen programs
web/Emscripten bridge, browser client, in-browser assembler, Pages build/deploy
codegen/asm6502 assembler, run6502/harness, platform-ref generation
specs/Layer specifications (the source of truth — specs before code)
status/How to build/run/verify; current state and known gaps
docs/Mission, workflow rules & learnings, roles
kicad/, logisim/, diylayout/, schematic_pdf/Hardware: schematics, PCB, 74-series address decode, digital-logic models
22v10/Historical intermediate GAL experiments; replaced by 74-series logic in the final build
romgen/, scripts/, test/ROM assembly tooling, dev/CI scripts, tests

Known gaps

  • DOS 3.3 / Applesoft disks don't run. This clone's $E000 BASIC is generic Microsoft BASIC, not Applesoft, so games that chain through an Applesoft auto-run greeting won't boot. Self-booting machine-code disks work.

Contributing

Contributions and experiments are welcome — especially new 6502 programs for the gallery.

Add a program (the easy path). No C++, no local build: have an AI coding tool write a 65C02 program by pointing it at llms.txt, test it in the browser editor, and open a one-file pull request to the Community Gallery. Step-by-step, with a copy-paste prompt: CONTRIBUTING.md.

Change the machine itself. A few house rules keep it trustworthy:

  • Specs before code. Update the relevant spec in specs/ in the same change.
  • Trace every layer a change touches (ROM/software → C++ VM core → web bridge/WASM), and keep the native and browser builds behavior-identical.
  • Open a PR — changes land via pull request, not direct pushes to main.

The full workflow rules live in docs/LEARNINGS.md; bug reports use the templates under .github/ISSUE_TEMPLATE/.

The build series

3ric is built in public. Watch the design and construction, episode by episode: YouTube build series.

The porting logs tell the software side of that story: A2Robots, Spy vs Spy, Spy Hunter, and Pitfall II, with the changes, failed experiments, hardware evidence, and lessons for future sessions.

Support

If this project helps you learn or you just enjoy the build, please consider sponsoring it on GitHub — or use the Sponsor button at the top of this repository (see .github/FUNDING.yml). Sponsorship funds parts, boards, and more build videos, and every sponsor is credited in BACKERS.md.

License

3ric is dual-licensed:

Bundled third-party components keep their own licenses, and some bundled data (the ROM's Microsoft BASIC, Apple II disk images used as test fixtures) is third-party copyrighted material not licensed by this project. The emulators' micro-SD card holds Dirt Bike, a separate game under the GNU GPL v3, modified for 3RIC (see emulator/Data/sd-card/). See NOTICE for the full breakdown before redistributing.

Parts

150
QtyValueFootprintReferences
370.1µFCapacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_HorizontalC1, C2, C3, C11, C12, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28 +21
21220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25 +5
21LEDLED_THT:LED_D3.0mmD1, D2, D3, D4, D5, D6, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19 +5
71KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR_RESET_1, R1, R2, R3, R4, R5, R6
60.1µCapacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_HorizontalC10, C13, C14, C15, C16, C17
674LS574Package_DIP:DIP-20_W7.62mm_SocketU_BANK_1, U_LSB_1, U_MSB_1, U_VDATA_LATCH1, U_VIDREG_LATCH1, U3
574LS161Package_DIP:DIP-16_W7.62mm_SocketU_ADDR_CNT1, U_ADDR_CNT2, U_ADDR_CNT3, U_ADDR_CNT4, U_CLOCK_DIV1
574LS245Package_DIP:DIP-20_W7.62mm_SocketU_BUS_A_HIGH1, U_BUS_A_LOW_1, U_BUS_DATA_1, U_VBUS_HIGH1, U_VBUS_LOW1
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
328C256Package_DIP:DIP-28_W15.24mm_SocketU_ROM_ADDR_HIGH_1, U_ROM_ADDR_LOW1, U4
374LS154Package_DIP:DIP-24_W15.24mm_SocketU_DECODE_SIGS1, U_DECODER_1, U1
374LS590Package_DIP:DIP-16_W7.62mm_SocketU_HORIZ_CNT1, U_VERT_CNT_1, U_VERT_CNT_2
3SST39SF040Package_DIP:DIP-32_W15.24mm_SocketU_ROM_DISK1, U_ROM_FONTS1, U_ROM_VGA1
2Conn_02x20_Top_BottomConnector_IDC:IDC-Header_2x20_P2.54mm_VerticalJDEVICES1, JVIAS1
2RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalRKB1, RKB2
2SN74LS166ANPackage_DIP:DIP-16_W7.62mm_SocketU_VID_SHIFT1, U_VID_TXTSHIFT1
11.8432MHzOscillator:Oscillator_DIP-14X_CLK_ACIA1
122V10CPackage_DIP:DIP-24_W7.62mm_SocketU_DECODER_PLD1
125.175MHzOscillator:Oscillator_DIP-14X_CLK_VGA1
1330Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR_POWER1
16502-library_65C02S-2Package_DIP:DIP-40_W15.24mm_SocketU2
16502-library_65C51NPackage_DIP:DIP-28_W15.24mm_SocketU10
165C22SPackage_DIP:DIP-40_W15.24mm_SocketU_VIA_1
174LS08Package_DIP:DIP-14_W7.62mm_SocketU_AND_OUT1
174LS14Package_DIP:DIP-14_W7.62mm_SocketU_NOT_DECODE1
174LS86Package_DIP:DIP-14_W7.62mm_SocketU_XOR1
1AP1117-33Package_TO_SOT_SMD:SOT-223-3_TabPin2U5
1Conn_02x03_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ2
1DB15_Female_HighDensityConnector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mmJ_VGA1
1EB6502_isc61c1024-15nPackage_DIP:DIP-32_W7.62mmU8
1LEDLED_THT:LED_D5.0mmD20
1Micro_SD_Cardbadger6502pico:microSD_Amazon2J4
1PS/2 keyboardPS2_mini_din_6:MINI-DIN-6-FULL-SHIELDJ3
1SN74LS279ANPackage_DIP:DIP-16_W7.62mm_SocketU_MEM_SRLATCH1
1SW_PushButton_Switch_THT:SW_PUSH_6mmSW1
1USB_B_MicroConnector_USB:USB_Micro-B_Molex-105017-0001J1

Questions

How big is the 3ric PCB?

It measures 170 × 181 mm and has 4 copper layers, 4.69 mm thick.

What parts does the 3ric use?

150 parts, built around the 74LS245SC, 74LS574N, 74LS161DC and SN74LS166AN. 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 3ric KiCad files?

From the ebadger/3ric repository on GitHub, at the commit this page was made from: the board is kicad/3ric/3ric.kicad_pcb and its schematic kicad/3ric/3ric.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the 3ric design in my own project?

Its repository states no licence, so its author keeps all rights: ask ebadger before reusing the design.

Similar boards

  • 2 layers630 × 300 mmSecretBase, the printed circuit board in 3D

    SecretBase

    stonedDiscord/SecretBase

    SEGA Secret Base Arcade Game

    441 parts
  • 2 layers165.1 × 114.3 mmACE COLOUR2, the printed circuit board in 3D

    ACE COLOUR2

    flypie/Ace-2019

    Reimplimentation of the Jupiter ACE with slightly more modern hardware. https://www.jupiter-ace.co.uk/ the KiCad versions are the up to date designs which are available at https://jupiterdeuce.blogspot.com and…

    95 parts13GPL-3.0
  • 2 layers304.8 × 165.1 mmComix-35, the printed circuit board in 3D

    Comix-35

    schlae/comix-35

    The COMIX-35 is an improved clone of the COMX-35 1802 home computer

    173 parts138
  • 4 layers243.8 × 204.5 mmA1 micro atx, the printed circuit board in 3D

    A1 micro atx

    andrastantos/anachron

    243 parts1MIT
  • 2 layers279.4 × 203.2 mmZ180GDC, the printed circuit board in 3D

    Z180GDC

    lynchaj/rhyophyre

    Single Board Computer featuring Zilog Z180 processor and NEC µPD7220 Graphics Display Controller

    249 parts12
  • 2 layers360.1 × 141.4 mmWe816, the printed circuit board in 3D

    We816

    kitspace-test-repos/kicad6-file-collection

    135 partsMIT
  • 2 layers177 × 121.9 mmALUModule, the printed circuit board in 3D

    ALUModule

    crempp/ucpu

    16bit CPU made from TTL Logic Chips

    181 parts4