Skip to the content
PCBKitNew board
2 layers99.6 × 59.9 mmProgrammer, the printed circuit board in 3D

An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

Size
99.6 × 59.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
110
Nets
99
Pads
470
Tracks, vias
2,405, 207
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
9 Feb 2021
Updated
20 Oct 2026

Overview

Programmer is an open-source printed circuit board by benanderman, from the benanderman/spork-8 repository on GitHub, published under the MIT licence. It is a 2-layer board of 99.6 × 59.9 mm with 110 parts on 99 nets, routed with 2,405 tracks and 207 vias.

It is built around the ATMEGA328-AU, 74HC161S and HM62256BLP-7, with the 3183-10200P1T and SP0503BAHTG among its other parts. Its parts include 46 resistors, 29 diodes, 13 capacitors, 7 ICs and 6 connectors. It belongs with the retro computing and games and interfaces and adapters boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

5

README

README.md

Spork-8

This is an 8-bit computer project, inspired by Ben Eater's 8-bit breadboard computer. It's made out of modular PCBs that plug into each other, and contain mostly 74HC-series chips (original 74LS). It runs code from an EEPROM (so it's only programmable from a computer), and has separate memory. It's meant to display what's happening, when running on a 555-timer or manually stepping, but also be capable enough to implement some sort of game, when using an oscillator as a clock.

For details about programming the Spork-8, see Programming.md.

Status of project

The project was originally completed in 2021 and mostly worked with 74LS-series chips, but it had some issues (see RevisionLog), and used way too much power.

In 2025, it was rebuilt with 74HC-series chips, and several improvements, an emulator, and peripheral boards. It had some issues, but mostly worked well.

In 2026, reliability was improved by adding ground planes to the bus boards and control board, the instruction set was improved, and much more complex programs were made.

Modules

  • Control module: Coordinates everything else. Contains the micro-code EEPROMs, instruction register, micro-instruction counter, power input, reset button, and logic to interface with modules through bus boards.
  • Bus: Four of these interface between the control module and up to 16 other modules. These demux three signal lines each for in/out enable signals to the four modules connected to each bus board. One bus board plugs into the top of the control module, and one into the bottom. Two more bus boards plug into the first two. The first in/out signal line selects between the two boards on top / bottom, and the one connected to the control module inverts the signal before passing it onto the other bus board.
  • Register: Stores 8 bits, and can connect directly to an adjacent board above or below to expose its value (for use by the ALU and shift / rotate module). Has output headers, to interface with peripherals.
  • ALU: Performes calculations on values from register modules above and below it. Can output: add, subtract, bit-wise AND, or the carry-bit and zero-flag for any of those operations. Must be placed in the 1111 position (bottom right of top-most bus board), because the control module is hard-wired to input to the flags register when the read signal to that module position is enabled, which also enables flag output on the ALU.
  • Clock: Provides the clock pulse for the computer. Has three modes: manual with button to pulse, 555-timer with potentiometer to adjust timing, or crystal oscillator (2MHz seems to work).
  • Counter: Stores and counts 16-bit values. Uses two global signal lines to select which byte to read / write, and whether to enable counting. Used for both the RAM address register and program counter / program memory address register.
  • RAM: RAM or EEPROM (they have the same pinout). Used for the program memory EEPROM (not intended to be written to), and the static memory used for storing data. Up to 15-bits of address are taken from an adjacent counter module. Also has a cartridge slot, and switches between it and the EEPROM on the board using the 16th address bit. This allows swapping out programs much easier
  • Input / Output: Like a register module, except when outputting to the bus, outputs the value from input headers instead of the registers. The 8-bit value stored in the registers is accessible on output headers as well. The two headers are in parallel, making it sturdy to plug in a peripheral that uses both.
  • Battery: Has a battery, charging capability with USB-C, and a switch to output power to the CPU.

Layout

In general, any of the 16 module slots can input from or output to the bus, so most modules could go in any position. However, some of them have to go in specific slots, because:

  1. The 0th slot on the top and bottom aren't usable for in/out selection, because it's ambiguous whether that slot is selected or if no module on that side is selected. The battery and clock go in those slots, since they only output power and a clock signal, and don't use the bus.
  2. The 8 "custom" signals (that mean something different for different modules) are split up into 4 for top, 4 for bottom. Those 4 are split into pairs; the top 2 modules on each bus board get one pair, and the bottom two get the second pair. The second pair of signals on the bottom is actually used by the control board.
  3. Some modules (RAM / ROM, ALU, and Shift) get inputs from other modules, so their inputs have to be next to them.

Top left: The program counter goes in the top to use the first pair of custom signals (for count and byte select), plugging into the program memory below it. Below that is the clock (in the 0th position), and Register C.

Top right: The ALU goes one slot down from the top, to use the second pair of custom signals (for add/subtract and bit-wise AND), with register A and B as its operands above and below. Then the shift / rotate module goes at the bottom plugging into register B. These need to be on the right side to avoid the 0th position. The shift module shares custom signals with the ALU, which is okay because only one is used at a time, and the signals don't have an effect if that module isn't outputting.

Bottom left: The battery takes the top 0th slot, and then the stack and swap registers, and input / output A module after that. Other than the battery, the positions are arbitrary.

Bottom right: The output A register goes at the top and the RAM goes below it. The memory address register goes in the next position to get the first pair of custom signals (for count and byte select), and plugs into the RAM above it. The input / output B module goes at the bottom. The memory address could instead go where output A is, and RAM just needs to be next to it. The other two could go anywhere.

Peripherals

  • Controller Connector: Plugs into IO module, and has two RJ12 plugs on it, to connect to parallel-to-serial shift register-based controllers.
  • Screen: An 10x20 595-shift register-based monochrome display. Plugs into output module (vertically), or IO module (horizontally).
  • Cartridge: A small board with a surface-mount version of the same 28C256 EEPROM used as in the program memory module. Plugs into the program memory module with the smallest PCIe board edge connector.
  • Programmer: Arduino-based board used to program and test the CPU in 3 ways:
    1. Separate from the CPU, read / write to EEPROMs (big ones, or cartridges).
    2. Plug into bus boards, to test all the modules plugged in (doesn't work, because the bus is needed to set the signals, but that could cause bus contention).
    3. Replace the program memory and clock, to have a very fast development cycle to write program code (not necessary now that there's an emulator), or to test the CPU.

Layout, signals, and parts list

These images show the layout of the modules in the 16 slots, the functions of each of the signals, and a parts list. Module layout Signal functions Parts list

Design images

Overall layout

Layout of the CPU

Mounting board (laser cut acrylic)

Mounting board design

Schematics

Control Module schematic Control Module bus interface schematic Bus schematic Register schematic ALU schematic Shift / Rotate schematic Clock schematic Counter schematic RAM schematic Input / Output schematic Battery schematic Screen schematic Screen schematic Controller Connector schematic Cartridge schematic Programmer schematic Programmer USB Interface schematic Programmer LEDs schematic

PCB Layouts

Control Module PCB layout Bus PCB layout Register PCB layout ALU PCB layout Shift / Rotate PCB layout Clock PCB layout Counter PCB layout RAM PCB layout Input / Output PCB layout Battery PCB layout Screen PCB layout Controller Connector PCB layout Cartridge PCB layout Programmer PCB layout

3D Renderings

Control Module 3D render Bus 3D render Register 3D render ALU 3D render Shift / Rotate 3D render Clock 3D render Counter 3D render RAM 3D render Input / Output 3D render Battery 3D render Screen 3D render Controller Connector 3D render Cartridge 3D render Programmer 3D render

Parts

110
QtyValueFootprintReferences
2710kResistor_SMD:R_0603_1608MetricR2, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24 +11
25LEDLED_SMD:LED_0603_1608MetricD10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25 +9
1210kResistor_SMD:R_0402_1005MetricR35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46
60.1uFCapacitor_SMD:C_0603_1608MetricC8, C9, C10, C11, C12, C13
54.7uFCapacitor_SMD:C_0402_1005MetricC1, C2, C3, C4, C6
474HC161Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU4, U5, U6, U7
4MountingHole_2.2mm_M2_DIN965_PadMountingHole:MountingHole_2.2mm_M2_DIN965_PadHOLE1, HOLE2, HOLE3, HOLE4
20.1uFCapacitor_SMD:C_0402_1005MetricC5, C7
247kResistor_SMD:R_0603_1608MetricR1, R9
25.1kResistor_SMD:R_0603_1608MetricR3, R4
2Conn_01x22Connector_PinSocket_2.54mm:PinSocket_1x22_P2.54mm_HorizontalJ2, J3
2GREENLED_SMD:LED_0603_1608MetricD1, D4
11kResistor_SMD:R_0402_1005MetricR7
122.1kResistor_SMD:R_0402_1005MetricR5
13183-10200P1Tupdated_libs:318310200P1TJ5
147.5kResistor_SMD:R_0402_1005MetricR6
1ATMEGA328-AUPackage_QFP:TQFP-32_7x7mm_P0.8mmU1
1CONTINUETS-1088-AR02016:SW_TS-1088-AR02016SW4
1CP2102N-Axx-xQFN24Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mmU2
1Conn_01x16Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_HorizontalJ4
1Conn_02x04_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_VerticalJ6
1HM62256BLPPackage_DIP:DIP-28_W15.24mm_SocketU3
1PAUSETS-1088-AR02016:SW_TS-1088-AR02016SW2
1REDLED_SMD:LED_0603_1608MetricD3
1RESETTS-1088-AR02016:SW_TS-1088-AR02016SW1
1Resonatorupdated_libs:OSC_CSTCE16M0V53-R016MHz1
1SP0503BAHTPackage_TO_SOT_SMD:SOT-143D2
1STEPTS-1088-AR02016:SW_TS-1088-AR02016SW3
1USB_C_Receptacle_USB2.0updated_libs:USB_C_Receptacle_G-Switch_GT-USB-7010ASVJ1

Questions

How big is the Programmer PCB?

It measures 99.6 × 59.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Programmer use?

110 parts, built around the ATMEGA328-AU, 74HC161S, HM62256BLP-7 and 3183-10200P1T. 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 Programmer KiCad files?

From the benanderman/spork-8 repository on GitHub, at the commit this page was made from: the board is Programmer/Programmer.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Programmer design in my own project?

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

More from benanderman/spork-8

12
  • 2 layers65.3 × 99.4 mmScreen, the printed circuit board in 3D

    Screen

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    460 parts61MIT
  • 4 layers99.6 × 99.6 mmControl Module, the printed circuit board in 3D

    Control Module

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    73 parts61MIT
  • 2 layers99.6 × 59.9 mmALU, the printed circuit board in 3D

    ALU

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    44 parts61MIT
  • 2 layers99.6 × 59.9 mmCounter, the printed circuit board in 3D

    Counter

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    44 parts61MIT
  • 2 layers99.6 × 59.9 mmClock, the printed circuit board in 3D

    Clock

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    41 parts61MIT
  • 2 layers99.6 × 59.9 mmSpork-8, the printed circuit board in 3D

    Spork-8

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    36 parts61MIT
  • 4 layers89.9 × 120.4 mmBus, the printed circuit board in 3D

    Bus

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    35 parts61MIT
  • 2 layers99.6 × 59.9 mmShift, the printed circuit board in 3D

    Shift

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    31 parts61MIT
  • 2 layers99.6 × 59.9 mmRAM, the printed circuit board in 3D

    RAM

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    27 parts61MIT
  • 2 layers99.6 × 59.9 mmRegister, the printed circuit board in 3D

    Register

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    27 parts61MIT
  • 2 layers99.6 × 59.9 mmInput, the printed circuit board in 3D

    Input

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    25 parts61MIT
  • 2 layers99.6 × 59.9 mmBattery, the printed circuit board in 3D

    Battery

    benanderman/spork-8

    An 8-bit CPU, made with TTL chips on custom, modular PCBs. Includes board designs, and Arduino code to program its instruction set and programs.

    23 parts61MIT

Similar boards

  • 2 layers100 × 100 mmMedia converter 02, the printed circuit board in 3D

    Media converter 02

    hamayanShowa-ele/kicad_share

    kicad share data.

    68 parts
  • 2 layers245.1 × 160 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64x4-Home-Computer

    My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

    139 parts326
  • 2 layers191.8 × 121.3 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-UART-Computer-1-2

    Legacy: Version 1 and 2 of my TTL-only CPU featuring UART I/O, an expansion port, 512KB SSD at up to 10MHz clock speed

    109 parts184
  • 2 layers306.1 × 130.2 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64-Home-Computer

    Legacy: Full TTL-only home computer with VGA and PS/2 and twice the processing power of a Commodore 64

    132 parts94
  • 2 layers100 × 75 mmRTSS Power Supply V2-5C, the printed circuit board in 3D

    RTSS Power Supply V2-5C

    RadioThermal/RadioThermal_Soldering_OSHW

    Open Source Hardware 470KHz Induction Soldering Iron

    69 parts84CERN-OHL-P-2.0
  • 2 layers208.9 × 170.8 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-UART-Computer-3

    Version 3 of my educational DIY TTL computer built around a UART serial interface - now with blinkenlights!

    207 parts54
  • 2 layers99.7 × 63.9 mmNES CN ROM-256-05, the printed circuit board in 3D

    NES CN ROM-256-05

    emeargt/nes-cnrom

    KiCad project for NES-CN-ROM-256-05 cartridge schematic and PCB

    17 parts31CC-BY-SA-4.0
  • 2 layers208 × 110 mm8 16 computer 2, the printed circuit board in 3D

    8 16 computer 2

    halfburnttoast/TCPU816-v1

    Version 1.1 of my 8-bit, TTL computer.

    120 parts21