

Video circuit
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
774LS85DC
CDIP-16-55℃~+125℃ 10mA 24ns Four channels TTL CDIP-16 Comparators ROHSTexas InstrumentsComparators74LS30PC
PDIP-140℃~+70℃ 1 1.1mA 18ns@5V,50pF、20ns@5V,50pF 2.7V 2V 4.75V~5.25V 400uA 500mV 74LS Series 8 800mV 8mA NAND Gate PDIP-14 Logic GatesTexas InstrumentsLogic Gates74LS04PC
PDIP-140℃~+70℃ 4.75V~5.25V 6 6.6mA 74LS PDIP-14 InvertersonsemiInverters74LS151PC
DIP-160℃~+70℃ 12.5ns 4.75V~5.25V 400uA 6mA 74LS 8mA Tri-state output DIP-16 Signal Switches, Multiplexers, Decoders ROHSonsemiSignal Switches, Multiplexers, Decoders74LS32SC
-- Logic Gates ROHSTexas InstrumentsLogic Gates74LS161DC
-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, Dividers74LS00SC
-0℃~+70℃ 15ns@5V,50pF 2 2.7V 2V 4 4.75V~5.25V 400uA 500mV 74LS 800mV 8mA NAND Gate - Logic Gates ROHSTexas InstrumentsLogic Gates
README
readme.md8-Bit Microcoded Breadboard CPU
Overview

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:
lda $10
lda @2000
lda #3000
lda &4000
inxComplete Instruction Encoding Table
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

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

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

Parts
35| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 74LS85 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | U1, U2, U3, U4, U6, U7, U11, U12 |
| 7 | R | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal | R1, R2, R3, R4, R5, R6, R7 |
| 6 | 74LS161 | Package_DIP:DIP-16_W7.62mm_Socket_LongPads | HorizontalCounter1, HorizontalCounter2, HorizontalCounter3, VerticalCounter1, VerticalCounter2, VerticalCounter3 |
| 2 | 74LS00 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | nandBoard1, nandBoard2 |
| 2 | 74LS30 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U5, U13 |
| 1 | 14, 13, R | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J1 |
| 1 | 74LS04 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U10 |
| 1 | 74LS08 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U8 |
| 1 | 74LS151 | Package_DIP:DIP-16_W7.62mm_LongPads | U16 |
| 1 | 74LS283 | Package_DIP:DIP-16_W7.62mm_LongPads | U17 |
| 1 | 74LS32 | Package_DIP:DIP-14_W7.62mm_Socket_LongPads | U9 |
| 1 | AT28C16-15PC | footprints:PDIP24_14P4X32P3_MCH | U15 |
| 1 | CXO_DIP14 | Oscillator:Oscillator_DIP-14 | Y2 |
| 1 | Conn_01x29_Pin | Connector_PinHeader_2.54mm:PinHeader_1x29_P2.54mm_Vertical | J3 |
| 1 | IDT7132 | Package_DIP:DIP-48_W15.24mm_LongPads | U14 |
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 mm

- 2 layers486 × 306.3 mm

- 2 layers156 × 100.1 mm

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 mm

DIY Video
jimbro1000/DIY-Video
General purpose video system for 8-bit computers using 74LS logic
315 parts1 - 2 layers400.9 × 280.5 mm

- 2 layers320 × 150 mm

- 2 layers248.9 × 139.7 mm

6809 Plus EPROM Version
roberto314/GIMIX_reproduction
Reproducing SS-50 and SS-30 cards and GIMIX Ghost Case and Mainboard
167 parts1BSD-2-Clause - 2 layers229.9 × 83.8 mm
