

3ric
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
774LS245SC
-0℃~+70℃ 12ns@5V,45pF 15mA 24mA 4.75V~5.25V 74LS 8 Bidirectional Output enable Schmitt trigger Tri-State - Buffers, Drivers, Receivers, Transceivers ROHSTexas InstrumentsBuffers, Drivers, Receivers, Transceivers74LS574N
-0ns 0℃~+70℃ 1 2.6mA 20ns 24mA 28ns@5V,45pF 35MHz 4.75V~5.25V 74LS Series 8 D-Type Rising Edge Tri-State - Flip Flops ROHSRochester Electronics, LLCFlip Flops74LS161DC
-0℃~+70℃ 14ns 32MHz 4 4.75V~5.25V 74LS 93mW Asynchronous Binary Counter Programmable divide ratio、Reset function、Cascade counter、Synchronous counting Rising Edge Synchronous - Counters, DividersTexas InstrumentsCounters, DividersSN74LS166AN
PDIP-160℃~+70℃ 1 4.75V~5.25V 74LS 8 Parallel or Serial to Serial PDIP-16 Shift Registers ROHSTexas InstrumentsShift Registers74LS14PC
PDIP-14InvertersTexas Instruments74LS86
DIP-14-20℃~+75℃ 10mA 2.7V 23ns@5V,15pF 2V 400mV 400uA 5V 74LS 800mV 8mA XOR Gate DIP-14 Logic Gates ROHSHITLogic GatesSN74LS279AN
PDIP-160℃~+70℃ 12ns 4 4.75V~5.25V 400uA 74LS 8mA SR Latch PDIP-16 Latches ROHSTexas InstrumentsLatches
README
README.md3ric
A from-scratch, Apple-II-class 65C02 personal computer — real hardware plus a cycle-honest emulator that also runs in your browser.
▶ 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
.wozimages (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
- Open the live emulator and pick a sample from the editor's program menu.
- Edit the assembly, hit Assemble & Run, and watch it execute on the machine.
- 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):
pwsh web/build.ps1 # Emscripten -> web/badger6502.js + .wasm, stages data/
pwsh web/serve.ps1 # serves http://localhost:8011/index.htmlVerify it's healthy (headless smoke tests — no WASM build needed for the first one):
$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 stateHow it works
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 .-> VMThe 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
| Path | What'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
$E000BASIC 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:
- Software — MIT.
- Hardware designs & documentation — Creative Commons Attribution-ShareAlike 4.0 International.
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| Qty | Value | Footprint | References |
|---|---|---|---|
| 37 | 0.1µF | Capacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal | C1, C2, C3, C11, C12, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28 +21 |
| 21 | 220 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25 +5 |
| 21 | LED | LED_THT:LED_D3.0mm | D1, D2, D3, D4, D5, D6, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19 +5 |
| 7 | 1K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R_RESET_1, R1, R2, R3, R4, R5, R6 |
| 6 | 0.1µ | Capacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal | C10, C13, C14, C15, C16, C17 |
| 6 | 74LS574 | Package_DIP:DIP-20_W7.62mm_Socket | U_BANK_1, U_LSB_1, U_MSB_1, U_VDATA_LATCH1, U_VIDREG_LATCH1, U3 |
| 5 | 74LS161 | Package_DIP:DIP-16_W7.62mm_Socket | U_ADDR_CNT1, U_ADDR_CNT2, U_ADDR_CNT3, U_ADDR_CNT4, U_CLOCK_DIV1 |
| 5 | 74LS245 | Package_DIP:DIP-20_W7.62mm_Socket | U_BUS_A_HIGH1, U_BUS_A_LOW_1, U_BUS_DATA_1, U_VBUS_HIGH1, U_VBUS_LOW1 |
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 3 | 28C256 | Package_DIP:DIP-28_W15.24mm_Socket | U_ROM_ADDR_HIGH_1, U_ROM_ADDR_LOW1, U4 |
| 3 | 74LS154 | Package_DIP:DIP-24_W15.24mm_Socket | U_DECODE_SIGS1, U_DECODER_1, U1 |
| 3 | 74LS590 | Package_DIP:DIP-16_W7.62mm_Socket | U_HORIZ_CNT1, U_VERT_CNT_1, U_VERT_CNT_2 |
| 3 | SST39SF040 | Package_DIP:DIP-32_W15.24mm_Socket | U_ROM_DISK1, U_ROM_FONTS1, U_ROM_VGA1 |
| 2 | Conn_02x20_Top_Bottom | Connector_IDC:IDC-Header_2x20_P2.54mm_Vertical | JDEVICES1, JVIAS1 |
| 2 | R | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | RKB1, RKB2 |
| 2 | SN74LS166AN | Package_DIP:DIP-16_W7.62mm_Socket | U_VID_SHIFT1, U_VID_TXTSHIFT1 |
| 1 | 1.8432MHz | Oscillator:Oscillator_DIP-14 | X_CLK_ACIA1 |
| 1 | 22V10C | Package_DIP:DIP-24_W7.62mm_Socket | U_DECODER_PLD1 |
| 1 | 25.175MHz | Oscillator:Oscillator_DIP-14 | X_CLK_VGA1 |
| 1 | 330 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R_POWER1 |
| 1 | 6502-library_65C02S-2 | Package_DIP:DIP-40_W15.24mm_Socket | U2 |
| 1 | 6502-library_65C51N | Package_DIP:DIP-28_W15.24mm_Socket | U10 |
| 1 | 65C22S | Package_DIP:DIP-40_W15.24mm_Socket | U_VIA_1 |
| 1 | 74LS08 | Package_DIP:DIP-14_W7.62mm_Socket | U_AND_OUT1 |
| 1 | 74LS14 | Package_DIP:DIP-14_W7.62mm_Socket | U_NOT_DECODE1 |
| 1 | 74LS86 | Package_DIP:DIP-14_W7.62mm_Socket | U_XOR1 |
| 1 | AP1117-33 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U5 |
| 1 | Conn_02x03_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical | J2 |
| 1 | DB15_Female_HighDensity | Connector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm | J_VGA1 |
| 1 | EB6502_isc61c1024-15n | Package_DIP:DIP-32_W7.62mm | U8 |
| 1 | LED | LED_THT:LED_D5.0mm | D20 |
| 1 | Micro_SD_Card | badger6502pico:microSD_Amazon2 | J4 |
| 1 | PS/2 keyboard | PS2_mini_din_6:MINI-DIN-6-FULL-SHIELD | J3 |
| 1 | SN74LS279AN | Package_DIP:DIP-16_W7.62mm_Socket | U_MEM_SRLATCH1 |
| 1 | SW_Push | Button_Switch_THT:SW_PUSH_6mm | SW1 |
| 1 | USB_B_Micro | Connector_USB:USB_Micro-B_Molex-105017-0001 | J1 |
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 mm

- 2 layers165.1 × 114.3 mm

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 mm

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 mm

- 2 layers229.9 × 93.3 mm

- 2 layers279.4 × 203.2 mm

Z180GDC
lynchaj/rhyophyre
Single Board Computer featuring Zilog Z180 processor and NEC µPD7220 Graphics Display Controller
249 parts12 - 2 layers360.1 × 141.4 mm

- 2 layers177 × 121.9 mm
