Skip to the content
PCBKitNew board
2 layers177.5 × 161.5 mmVideo circuit, the printed circuit board in 3D

This project is a fully microcoded 8-bit CPU designed from scratch and implemented using 100+ 74LS-series ICs across 40+ breadboards. CURRENTLY REIMPLEMENTING ON FPGA: https://github.com/0nonymous/fpga-cpu

Size
177.5 × 161.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
191
Pads
476
Tracks, vias
903, 67
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
13 Feb 2024
Updated
29 Jul 2026

Overview

Video circuit is an open-source printed circuit board by 0nonymous, from the 0nonymous/Breadboard-CPU-Computer-System repository on GitHub, published under the MIT licence. It is a 2-layer board of 177.5 × 161.5 mm with 35 parts on 191 nets, routed with 903 tracks and 67 vias.

It is built around the 74LS85DC, 74LS30PC and 74LS04PC, with the 74LS151PC, 74LS32SC and 74LS161DC among its other parts. Its parts include 17 ICs, 7 resistors, 2 connectors and 1 crystal. It belongs with the retro computing and games boards of this library.

Main components

7

README

readme.md

8-Bit Microcoded Breadboard CPU

Overview

The CPU

This project is a fully microcoded 8-bit CPU designed from scratch and implemented using 100+ 74LS-series ICs across 40+ breadboards.

The system includes:

  • Custom 8-bit CISC-style instruction set (0x00–0x45 implemented)
  • 8-bit data bus
  • 16-bit address bus (64KB address space)
  • Fully horizontal microcoded control unit (48-bit control word)
  • 6 × AT28C16 EEPROM control store
  • Memory-mapped I/O
  • 6522 VIA interface (32 GPIO)
  • Dual-port shared memory VGA subsystem
  • Custom Python two-pass assembler and ROM flashing pipeline
  • Working assembly programs including Snake

This is the third architectural iteration. Earlier versions exposed architectural limitations. The current version runs reliably at approximately ~0.25 MHz.


Assembly Syntax

The assembler uses suffix symbols to indicate addressing modes:

  • $ = Immediate
  • @ = Absolute
  • # = Indirect (pointer-based)
  • & = Absolute + X offset
  • No suffix = Implied

Example:

text
lda $10
lda @2000
lda #3000
lda &4000
inx

Complete Instruction Encoding Table

text
0x00  lda $
0x01  lda @
0x02  lda #
0x03  lda &

0x04  ldx $
0x05  ldx @
0x06  ldx #
0x07  ldx &

0x08  inx
0x09  dex
0x0A  txa
0x0B  tax

0x0C  add $
0x0D  add @
0x0E  add #
0x0F  add &

0x10  sub $
0x11  sub @
0x12  sub #
0x13  sub &

CPU Architecture

Block Diagrams

Registers

  • A — 8-bit accumulator
  • B — 8-bit helper register
  • X — 8-bit index register
  • SP — 8-bit stack pointer (descending from 0xFF)
  • PC — 16-bit program counter
  • MAR — 16-bit memory address register
  • IR — 8-bit instruction register
  • Flags (3-bit):
    • Zero
    • Carry
    • Negative

Buses and Datapath

  • 8-bit internal data bus
  • 16-bit address bus
  • Shared bus architecture with gated register in/out signals
  • MAR handles memory addressing
  • PC high/low bytes independently gated

ALU Implementation

The ALU is implemented using discrete TTL logic:

  • 74LS283 — Addition core
  • 74LS86 — 2's Complement
  • 74LS08 — AND
  • 74LS32 — OR
  • Shift/rotate implemented via combinational wiring and arithmetic reuse
  • Flag updates controlled via microcode signals (C SET, SZ SET, etc.)

Microcoded Control Unit

Control Signals

The CPU uses a horizontal microcode architecture.

  • Microinstruction width: 48 bits
  • Control store: 6 × AT28C16 EEPROMs
  • Microaddress width: 11 bits
  • Microaddress formation: opcode[7:0] || microstep[2:0]
  • Maximum microsteps per instruction: 7 (+ fetch cycle)

The microstep counter increments sequentially and overflows to reset.

Conditional branches do not alter microcode sequencing.
Instead, discrete logic gates PC load signals based on flag conditions (Z, C, S).

Each microinstruction directly drives register enables, ALU operations, bus drivers, PC control, memory read/write, and flag updates.


Memory Map

Total address space: 64KB

Current configuration includes:

  • 2KB ROM
  • 6522 VIA (32 GPIO)
  • Memory-mapped I/O
  • ~512B dual-port shared RAM (VGA subsystem)

Stack resides in a dedicated page and grows downward.


VGA Subsystem

The CPU integrates with a separate VGA driver module.

Features:

  • Text mode output
  • 25 columns × 16 rows
  • Hardware-assisted scrolling
  • Dual-port shared memory interface between CPU and VGA driver
  • Polling-based communication

The CPU writes character data into shared dual-port memory.
The VGA module independently reads this memory to generate video timing and pixel output.

VGA signal generation approach was inspired by Ben Eater’s methodology and adapted for this architecture.


Toolchain

Custom Python-based programming pipeline:

Two-pass assembler:

  • Pass 1: label resolution
  • Pass 2: opcode and operand encoding

Outputs a hex array representation of machine code.

A secondary Python script converts the output into binary format for ROM flashing via XGPro.


Programs Written

  • Instruction verification programs
  • Fibonacci sequence
  • Calculator utilities
  • Keypad-driven applications
  • VGA name/text rendering
  • Snake (fully playable)

Hardware Engineering and Debugging

Major issue encountered:

  • Race condition causing unintended PC double-increment due to propagation delay

Debugging involved:

  • Oscilloscope-based timing analysis
  • Star power distribution layout
  • Extensive decoupling capacitors
  • Signal integrity stabilization

System runs reliably at approximately ~1 MHz.
Estimated current draw: ~1.2–1.6A under load.


Design Influences

  • Instruction set loosely inspired by 6502 concepts
  • Breadboard methodology and VGA experimentation influenced by Ben Eater
  • Control logic, ISA structure, microcode, and integration independently designed

Future Work

  • Implement machine code monitor
  • Potential RISC-style redesign
  • FPGA implementation exploration
  • Pipelining experimentation

A Register and ALU A Registers, B Register, ALU, Data Bus, and Clock Power Distribution Decoupling Capacitors

Parts

35
QtyValueFootprintReferences
874LS85Package_DIP:DIP-16_W7.62mm_Socket_LongPadsU1, U2, U3, U4, U6, U7, U11, U12
7RResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_HorizontalR1, R2, R3, R4, R5, R6, R7
674LS161Package_DIP:DIP-16_W7.62mm_Socket_LongPadsHorizontalCounter1, HorizontalCounter2, HorizontalCounter3, VerticalCounter1, VerticalCounter2, VerticalCounter3
274LS00Package_DIP:DIP-14_W7.62mm_Socket_LongPadsnandBoard1, nandBoard2
274LS30Package_DIP:DIP-14_W7.62mm_Socket_LongPadsU5, U13
114, 13, RConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ1
174LS04Package_DIP:DIP-14_W7.62mm_Socket_LongPadsU10
174LS08Package_DIP:DIP-14_W7.62mm_Socket_LongPadsU8
174LS151Package_DIP:DIP-16_W7.62mm_LongPadsU16
174LS283Package_DIP:DIP-16_W7.62mm_LongPadsU17
174LS32Package_DIP:DIP-14_W7.62mm_Socket_LongPadsU9
1AT28C16-15PCfootprints:PDIP24_14P4X32P3_MCHU15
1CXO_DIP14Oscillator:Oscillator_DIP-14Y2
1Conn_01x29_PinConnector_PinHeader_2.54mm:PinHeader_1x29_P2.54mm_VerticalJ3
1IDT7132Package_DIP:DIP-48_W15.24mm_LongPadsU14

Questions

How big is the Video circuit PCB?

It measures 177.5 × 161.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Video circuit use?

35 parts, built around the 74LS85DC, 74LS30PC, 74LS04PC and 74LS151PC. 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 Video circuit KiCad files?

From the 0nonymous/Breadboard-CPU-Computer-System repository on GitHub, at the commit this page was made from: the board is Test KiCad/video circuit/video circuit.kicad_pcb and its schematic Test KiCad/Test KiCad.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Video circuit 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).

Similar boards

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

    SecretBase

    stonedDiscord/SecretBase

    SEGA Secret Base Arcade Game

    441 parts
  • 2 layers486 × 306.3 mmMonacoGP, the printed circuit board in 3D

    MonacoGP

    stonedDiscord/MonacoGP

    Sega MonacoGP TTL Boards

    257 parts1
  • 2 layers156 × 100.1 mmVIO MPF v2.0, the printed circuit board in 3D

    VIO MPF v2.0

    electrickery/VIO_MPF_I

    Extended firmware for the 6845 based video card for the Microprofessor MPF-I(b)

    64 parts4
  • 4 layers236.8 × 240.9 mmDIY Video, the printed circuit board in 3D

    DIY Video

    jimbro1000/DIY-Video

    General purpose video system for 8-bit computers using 74LS logic

    315 parts1
  • 2 layers400.9 × 280.5 mmAleste520v4, the printed circuit board in 3D

    Aleste520v4

    lucedoriente/Aleste520ex

    Western version of 1993 Z80 russian computer

    345 parts4GPL-3.0
  • 2 layers320 × 150 mmDigiTrainer, the printed circuit board in 3D

    DigiTrainer

    RetroStack/BitStack-DigiTrainer

    A trainer board for digital electronics

    262 parts2MIT
  • 2 layers248.9 × 139.7 mm6809 Plus EPROM Version, the printed circuit board in 3D

    6809 Plus EPROM Version

    roberto314/GIMIX_reproduction

    Reproducing SS-50 and SS-30 cards and GIMIX Ghost Case and Mainboard

    167 parts1BSD-2-Clause