

8bit computer
Schematics & code for my 74LS-based 8-bit MK1 CPU
- Size
- 297.2 × 180.3 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 377
- Nets
- 574
- Pads
- 2,141
- Tracks, vias
- 11,197, 441
- Pours
- 3
- Routed
- Yes
- KiCad
- KiCad 5 (file 20171130)
- Created
- 1 Mar 2020
- Updated
- 12 Dec 2022
Overview
8bit computer is an open-source printed circuit board by vascofazza, from the vascofazza/8bit-cpu repository on GitHub, published under the MIT licence. It is a 2-layer board of 297.2 × 180.3 mm with 377 parts on 574 nets, routed with 11,197 tracks and 441 vias.
It is built around the 74HCT245, 74HCT157D and 74HCT273D, with the 74HCT08D, 74HCT32D and 74LS157PC among its other parts. Its parts include 134 diodes, 81 ICs, 45 capacitors, 32 resistors and 7 switches. It belongs with the retro computing and games boards and the NXP (LPC, Kinetis, i.MX RT) boards of this library.
Main components
1274HCT245
DIP-20-40℃~+85℃ 28ns@4.5V 4.5V~5.5V 6mA 6mA 74HCT 8 8uA Bidirectional TTL-compatible CMOS Tri-State DIP-20 Buffers, Drivers, Receivers, Transceivers ROHSWuxi I-core Elec74 Series74HCT157D
SO-16-40℃~+125℃ 160uA 16ns@4.5V,50pF 4.5V~5.5V 4mA 4mA 74HCT 8/4 Multiplexer Single Supply SOIC-16 Signal Switches, Multiplexers, Decoders ROHSNexperiaSignal Switches, Multiplexers, Decoders74HCT273D
SOIC-20-300mil-40℃~+125℃ 12ns 3.5pF 30ns@4.5V,50pF 36MHz 3ns 4.5V~5.5V 4mA 5.2mA 74HCT Series 8 8uA D-Type Reset Rising Edge SOIC-20-300mil Flip Flops ROHSNexperiaFlip Flops74HCT08D
SOP-14-40℃~+125℃ 100mV、330mV 16ns@4.5V,15pF 2 2V 3.84V、4.4V 4 4.5V~5.5V 74HCT 800mV AND Gate TTL compatible CMOS SOP-14 Logic Gates ROHSMDDLogic Gates74HCT32D
SO-14-40℃~+125℃ 2 24ns@4.5V,50pF 2V 2uA 3.7V、4.4V 4 4.5V~5.5V 400mV 4mA 4mA 74HCT Series 800mV OR Gate SOIC-14 Logic Gates ROHSNexperiaGates74LS157PC
PDIP-160℃~+70℃ 4.75V~5.25V Single Supply PDIP-16 Signal Switches, Multiplexers, Decoders ROHSTexas InstrumentsSignal Switches, Multiplexers, DecodersNE555
SOP-8-20℃~+70℃ 1 1.5mA 200mA 4.5V~15V Adjustable duty cycle oscillation、Reset function、Duty cycle stabilization SOP-8 555 Timers / Counters ROHSGRTimers / Counters74HCT161D
SOIC-16SOIC-16 Specialty Logic ROHSPhilips SemiconsSpecialty Logic74HCT86D
SO-14-40℃~+125℃ 2 2V 2uA 3.98V、4.4V 32ns@4.5V,50pF 4 4.5V~5.5V 400mV 4mA 4mA 74HCT Series 800mV XOR Gate SOIC-14 Logic Gates ROHSNexperiaLogic Gates74HCT00D
SO-14-40℃~+125℃ 100mV、400mV 12ns@4.5V,50pF 2 2V 3.7V、4.4V 4 4.5V~5.5V 40uA 4mA 4mA 74HCT Series 800mV NAND Gate Overvoltage-tolerant input TTL Compatible CMOS SO-14 Logic Gates ROHSNexperiaLogic Gates74HCT02D
SO-14-40℃~+125℃ 19ns@4.5V,50pF 2 2V 2uA 3.7V 4 4.5V~5.5V 400mV 4mA 4mA 74HCT Series 800mV NOR Gate Overvoltage-tolerant input SOIC-14 Logic Gates ROHSNexperiaGates74HCT04D
SO-14-40℃~+125℃ 1 19ns@4.5V,50pF 2V 2uA 3.7V 4.5V~5.5V 400mV 4mA 4mA 6 74HCT 800mV SO-14 Inverters ROHSNexperiaInverters
README
README.mdMK1 8bit Computer
Schematics and code for my home-made 8-bit CPU and its companion boards.
Articles about this project:
Overview
During the past month, I designed and built a programmable 8-bit CPU from scratch, out of basic series 74LS logic ICs.
This repository contains pictures, schematics, and code for this project and its companion boards.
- V 1.0 assembled:
- V 2.0b assembled:
- Helix Display Interface in action:
- V 1.0 in action:
DEMO VIDEO (YouTube)
Architecture
The MK1 CPU is composed of several modules, all connected trough a common 8-bit BUS, the status of each module is shown by dedicated LEDs.
- The clock module is designed to allow step-by-step execution; in automatic mode the clock speed can be adjusted from 1Hz up to 32KHz.
- The computer programs are stored in RAM and the CPU can be programmed both manually, by inserting binary machine code through dip-switches, and automatically via a USB PC interface.
- The Programming interface is designed to be used in conjunction with an Arduino Nano or the Start9 programming board.
- The Start9 programming board allows the loading of multiple programs stored on an on-board flash memory without the aid of an external computer device.
- The Addressable memory space is 1024 byte, data, stack and code spaces are separated, the code address space is not writable.
- The instructions are variable-length (see instruction-set here) 1 or 2 bytes long (first byte for the opcode, the second one for the argument), there are 4 general purpose registers (
A,B,C,D) and astack pointerregister for subroutine calls. - The Arithmetic Logic Unit has a dedicated register for the second operand and supports the following operations:
- Addition
- Subtraction
- OR
- AND
- NOT
- Left/Right Shift
- Left/Right Rotation
- The Control Unit combinatory logic is implemented using EEPROMs (see microcode here) whilst each instruction is realized through a variable number of micro-instruction for a maximum of 6 micro-steps per instruction, including the fetch cycle. The instruction-set supports both direct and indirect memory access as well as absolute and conditional jumps on carry (
CF) and zero (ZF) ALU flags. - The computation output can be visualized on a 4-digit display, with a dedicated register, able to represent positive and 2-complement negative numbers both in decimal and hexadecimal format.
- The CPU can be extended thanks to the external BUS interface capable of handling up to 2 peripheral. The communication is bidirectional, the devices can send interrupts to the CPU to notify when new data is available. Interrupts are cleared once the data has been processed.
- The only available peripheral at the moment is the Helix display interface, an ATmega328-driven 2x16 LCD output display.
Structure
- MK1 CPU/:
- 8bit-computer/: KiCad project, schematics and PCB design of the MK1 CPU.
- code/:
- microcode.py: generates the binary EEPROM microcode.
- out_display.py: generates the binary output display EEPROM code.
- uploader.py: uploads a binary MK1 program to the CPU.
- mk1_computer_uploader/: Arduino programmer interface sketch.
- assembler/: fork of the hlorenzi's assembler, improved and customized for the MK1
- programs/: a collection of programs for the MK1 CPU plus the assembler definition
- start9_programming_interface/:
- programming_interface/: KiCad project, schematics and PCB design of the Start9 programming board.
- code/start9_programming_interface/: Arduino code for the programming interface.
- helix_display_interface/:
- display_interface/: KiCad project, schematics and PCB design of the Helix display interface board.
- code/helix_display_interface/: Arduino code for the display interface.
- eeprom_programmer/: KiCad project, schematics and PCB design of a simple Arduino-based eeprom programmer
- bus_breakout/: KiCad project, schematics and PCB design of the external bus connector breakout board.
Changelog
V2.0d:
- minor hardware revision
- revisited PCB design
- new memory architecture, code memory section is read-only, stack and data live on separated spaces
V2.0b:
- minor hardware revision
- Variable-length instructions (1 or 2 bytes)
- new custom assembler, thanks to https://github.com/hlorenzi/customasm
- few new instructions
- revisited microcode and instruction-set
V2.0:
- 4 general purposes registers (A, B, C, D)
- Stack Pointer implemented as an up-down counter
- External interface and interrupt handling
- Output display decodes HEX and ASCII values
- Clock speed multipliers
- Control Unit extended with 4 EEPROMs
- Variable step microcode counter length (each instruction uses the minimum amount of micro-steps)
- revisited microcode and instruction-set
V1.0:
- Bugfixes.
HLandSTKaddress signals available in theMARdip-switch.
V0.1:
- Initial release
Parts
377| Qty | Value | Footprint | References |
|---|---|---|---|
| 43 | BLUE | LED_THT:LED_D3.0mm | D10, D100, D101, D102, D103, D104, D105, D106, D107, D108, D109, D110, D111, D112, D113, D114 +27 |
| 41 | GREEN | LED_THT:LED_D3.0mm | D11, D12, D13, D14, D15, D16, D17, D18, D127, D128, D129, D130, D131, D132, D133, D134 +25 |
| 25 | RED | LED_THT:LED_D3.0mm | D1, D2, D3, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30, D31, D32, D33 +9 |
| 21 | YELLOW | LED_THT:LED_D3.0mm | D38, D39, D40, D41, D42, D43, D44, D45, D48, D55, D56, D57, D58, D59, D60, D61 +5 |
| 19 | 0.1µF | Capacitor_THT:C_Disc_D4.3mm_W1.9mm_P5.00mm | C10, C11, C12, C14, C15, C18, C22, C23, C25, C28, C29, C30, C34, C36, C37, C40 +3 |
| 15 | 1K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R3, R5, R6, R7, R8, R9, R10, R11, R14, R15, R17, R25, R26, R27, R28 |
| 14 | 1K | Resistor_THT:R_Array_SIP9 | RN3, RN7, RN9, RN10, RN11, RN12, RN13, RN14, RN15, RN16, RN17, RN18, RN19, RN20 |
| 11 | 74HCT245 | Package_DIP:DIP-20_W7.62mm | U8, U14, U42, U48, U49, U52, U56, U59, U65, U70, U80 |
| 10 | * | Capacitor_THT:C_Disc_D4.3mm_W1.9mm_P5.00mm | C13, C16, C21, C26, C31, C32, C33, C35, C38, C43 |
| 10 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R12, R18, R19, R20, R21, R22, R29, R30, R31, R32 |
| 9 | 74HCT157 | Package_DIP:DIP-16_W7.62mm | U17, U18, U20, U23, U45, U62, U63, U67, U68 |
| 8 | 0.01µF | Capacitor_THT:C_Disc_D4.3mm_W1.9mm_P5.00mm | C3, C6, C7, C9, C19, C20, C39, C45 |
| 8 | 74HCT273 | Package_DIP:DIP-20_W7.62mm | U9, U19, U32, U34, U57, U61, U66, U81 |
| 7 | 74HCT08 | Package_DIP:DIP-14_W7.62mm | U5, U10, U26, U27, U29, U58, U64 |
| 5 | 74HCT32 | Package_DIP:DIP-14_W7.62mm | U1, U2, U12, U25, U28 |
| 4 | 220 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R1, R2, R23, R24 |
| 4 | 74LS157 | Package_DIP:DIP-16_W7.62mm | U30, U31, U50, U51 |
| 4 | 7SEGMENT_CC | Display_7Segment:7SegmentLED_LTS6760_LTS6780 | U37, U39, U40, U41 |
| 4 | AM29F040 | Housings_LCC:PLCC-32_THT-Socket | U73, U74, U75, U76 |
| 4 | MountingHole_3.2mm_M3 | MountingHole:MountingHole_3.2mm_M3 | MH0, MH1, MH2, MH3 |
| 4 | NE555 | Package_DIP:DIP-8_W7.62mm | U3, U6, U7, U33 |
| 4 | WHITE | LED_THT:LED_D3.0mm | D19, D20, D88, D89 |
| 3 | 0.01µf | Capacitor_THT:C_Disc_D4.3mm_W1.9mm_P5.00mm | C24, C27, C44 |
| 3 | 470 | Resistor_THT:R_Array_SIP9 | RN2, RN4, RN5 |
| 3 | 74HCT161 | Package_DIP:DIP-16_W7.62mm | U43, U44, U72 |
| 3 | 74HCT86 | Package_DIP:DIP-14_W7.62mm | U21, U22, U24 |
| 3 | REG-I | TestPoint:TestPoint_Pad_1.0x1.0mm | TP5, TP27, TP41 |
| 3 | ~REG-O | TestPoint:TestPoint_Pad_1.0x1.0mm | TP4, TP26, TP40 |
| 2 | 10µF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C1, C2 |
| 2 | 1µF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C4, C8 |
| 2 | 220 | Resistor_THT:R_Array_SIP9 | RN6, RN8 |
| 2 | 74HCT00 | Package_DIP:DIP-14_W7.62mm | U46, U55 |
| 2 | 74HCT02 | Package_DIP:DIP-14_W7.62mm | U13, U69 |
| 2 | 74HCT04 | Package_DIP:DIP-14_W7.62mm | U4, U60 |
| 2 | 74HCT107 | Package_DIP:DIP-14_W7.62mm | U35, U71 |
| 2 | 74HCT193 | Package_DIP:DIP-16_W7.62mm | U53, U54 |
| 2 | 74HCT238 | Package_DIP:DIP-16_W7.62mm | U78, U79 |
| 2 | 74HCT283 | Package_DIP:DIP-16_W7.62mm | U15, U16 |
| 1 | 0.01 | Capacitor_THT:C_Disc_D4.3mm_W1.9mm_P5.00mm | C17 |
| 1 | 100K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R16 |
| 1 | 10K | Resistor_THT:R_Array_SIP9 | RN1 |
| 1 | 1M | Potentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_Vertical | RV1 |
| 1 | 28C64 | Package_DIP:DIP-28_W15.24mm_Socket | U36 |
| 1 | 330K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R4 |
| 1 | 470 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R13 |
| 1 | 74HCT138 | Package_DIP:DIP-16_W7.62mm | U77 |
| 1 | 74HCT139 | Package_DIP:DIP-16_W7.62mm | U38 |
| 1 | 74HCT173 | Package_DIP:DIP-16_W7.62mm | U11 |
| 1 | AI | TestPoint:TestPoint_Pad_1.0x1.0mm | TP29 |
| 1 | AND | TestPoint:TestPoint_Pad_1.0x1.0mm | TP10 |
| 1 | Address | Button_Switch_THT:SW_DIP_SPSTx10_Slide_9.78x27.58mm_W7.62mm_P2.54mm | SW5 |
| 1 | Arduino Nano | Module:Arduino_Nano | A1 |
| 1 | Arduino_VIN | Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm | JP1 |
| 1 | Barrel_Jack_Switch | Connector_BarrelJack:BarrelJack_Horizontal | J2 |
| 1 | CF | TestPoint:TestPoint_Pad_1.0x1.0mm | TP8 |
| 1 | CLK | TestPoint:TestPoint_Pad_1.0x1.0mm | TP2 |
| 1 | CLK_IN | TestPoint:TestPoint_Pad_1.0x1.0mm | TP1 |
| 1 | CY62256 | Package_DIP:DIP-28_W15.24mm_Socket | U47 |
| 1 | Data | Button_Switch_THT:SW_DIP_SPSTx08_Slide_9.78x22.5mm_W7.62mm_P2.54mm | SW9 |
| 1 | E0 | TestPoint:TestPoint_Pad_1.0x1.0mm | TP34 |
| 1 | E1 | TestPoint:TestPoint_Pad_1.0x1.0mm | TP36 |
| 1 | EI | TestPoint:TestPoint_Pad_1.0x1.0mm | TP11 |
| 1 | EXT-CONN | Connector_PinHeader_2.54mm:PinHeader_2x09_P2.54mm_Vertical | J4 |
| 1 | EXT_IN | TestPoint:TestPoint_Pad_1.0x1.0mm | TP35 |
| 1 | II | TestPoint:TestPoint_Pad_1.0x1.0mm | TP28 |
| 1 | KiCad-Logo2_8mm_SilkScreen | Symbol:KiCad-Logo2_8mm_SilkScreen | G2 |
| 1 | LOGO | Symbol:parrot | G0 |
| 1 | MI | TestPoint:TestPoint_Pad_1.0x1.0mm | TP15 |
| 1 | Manual | Button_Switch_THT:SW_NKK_GW12LJP | SW3 |
| 1 | Mode | Button_Switch_THT:SW_DIP_SPSTx03_Slide_9.78x9.8mm_W7.62mm_P2.54mm | SW6 |
| 1 | Multiplier | Button_Switch_THT:SW_DIP_SPSTx03_Slide_9.78x9.8mm_W7.62mm_P2.54mm | SW1 |
| 1 | NOT | TestPoint:TestPoint_Pad_1.0x1.0mm | TP13 |
| 1 | OI | TestPoint:TestPoint_Pad_1.0x1.0mm | TP16 |
| 1 | OR | TestPoint:TestPoint_Pad_1.0x1.0mm | TP9 |
| 1 | OSHW-Logo_11.4x12mm_SilkScreen | Symbol:OSHW-Logo_11.4x12mm_SilkScreen | G3 |
| 1 | PE | TestPoint:TestPoint_Pad_1.0x1.0mm | TP18 |
| 1 | Prog | Button_Switch_THT:SW_DIP_SPSTx01_Slide_9.78x4.72mm_W7.62mm_P2.54mm | SW4 |
| 1 | Pulse | Button_Switch_THT:SW_PUSH_6mm_H5mm | SW2 |
| 1 | RGT | TestPoint:TestPoint_Pad_1.0x1.0mm | TP31 |
| 1 | RI | TestPoint:TestPoint_Pad_1.0x1.0mm | TP21 |
The 354 most common of 377 parts.
Questions
How big is the 8bit computer PCB?
It measures 297.2 × 180.3 mm and has 2 copper layers, 1.6 mm thick.
What parts does the 8bit computer use?
377 parts, built around the 74HCT245, 74HCT157D, 74HCT273D and 74HCT08D. 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 8bit computer KiCad files?
From the vascofazza/8bit-cpu repository on GitHub, at the commit this page was made from: the board is MK1_CPU/8bit-computer/8bit-computer.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the 8bit computer 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 vascofazza/8bit-cpu
4- 2 layers96.5 × 55.2 mm

- 2 layers53.3 × 48.3 mm

Programming interface
vascofazza/8bit-cpu
Schematics & code for my 74LS-based 8-bit MK1 CPU
15 parts317MIT - 2 layers68.7 × 53.5 mm

Arduino eeprom programmer
vascofazza/8bit-cpu
Schematics & code for my 74LS-based 8-bit MK1 CPU
9 parts317MIT - 2 layers57.1 × 41.9 mm

Similar boards
- 4 layers244.5 × 393.4 mm

- 2 layers368.3 × 215.9 mm

- 2 layers235 × 158.8 mm

Gigatron
flypie/Gigatron
This is a version of the files from https://gigatron.io/ altered to work on a vanilla KiCAD 5.1.6. Changes are minimal in the schematic and PCB, layout has only been changed where dimensions or orientations changed as a…
151 parts2 - 2 layers214.6 × 123.2 mm

- 4 layers161.1 × 82.9 mm

- 2 layers300 × 200 mm

Model 150
Julesc013/project-carbon
Hardware and software for custom CPUs, FPUs, and computer systems.
377 parts - 2 layers200 × 150 mm

- 2 layers102 × 96 mm

