Skip to the content
2 layers300 × 300 mmSAP Extended, the printed circuit board in 3D

Extended Simple-As-Possible Computer based on Ben Eaters video series

Size
300 × 300 mm
Copper layers
2
Thickness
1.6 mm
Parts
440
Nets
565
Pads
2,006
Tracks, vias
5,310, 311
Pours
3
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
20 Oct 2023
Updated
12 Feb 2024

Overview

SAP Extended is an open-source printed circuit board by cyrillvalentini, from the cyrillvalentini/SAP-Extended repository on GitHub. It is a 2-layer board of 300 × 300 mm with 440 parts on 565 nets, routed with 5,310 tracks and 311 vias.

It is built around the 74HC245D, 74LS195APC and 74LS04PC, with the 74LS157PC, 74LS161DC and 74LS32SC among its other parts. Its parts include 175 resistors, 85 diodes, 59 ICs, 16 capacitors and 13 switches.

Main components

12

README

README.md

SAP-Extended

Simple-As-Possible Computer based on Ben Eaters video series.

Project

As part of my matura project, I planned and build an 8-Bit computer based around the design from Ben Eater. This repository contains the schematics, design files and instructions for the computer. alt text

Breadboard-computer

The breadboard variant is heavily inspired by the computer made by Ben Eater. In the first phase I build computer, which is functionally similar to his design, while occasionally using different parts which were either already on hand or made the process of expanding easier in the future. After a successful test run, I started to expand the design. To allow for longer programs I expanded the RAM to allow 8-Bit addresses and 7-Bit instructions. This allows for a maximum length of 256 instructions. In order to make these changes different modules had to be expanded as well. The other major difference is the expansion port, which allows expansion cards to be created for the computer. The signals are handled by an additional EEPROM-chip within the control logic.

alt text Simplified diagram of the changes made to the architecture.

Schematics and PCB

After building the breadboard variant, I started working on a PCB version. Being the first larger design, there are some power related issues and some missing filtering components which prevent the computer from running completely. In addition to the breadboard version this design includes a 7-segment display as well as additional power input options. There is an integrated buck converter and an USB Type C port which can supply 5V 3A using PD.

The schematics and PCB were created using KiCad 7.

alt text

Usage

alt text

Programming the computer

To set the computer to programming mode, the clock switch must first be set to manual. The LED should then stop flashing. It is then advisable to press the RESET button once to clear all registers. To be able to program the computer, the programmer must also be plugged in and the RUN/PROGRAM switch must be set to PROGRAM.

Now the actual programming can begin. First, the desired address must be set; without jump commands, these are iterated through in ascending order. In this case, the first command can be saved in the address 00000001. This is followed by the actual command, which can also be entered using the DIP switches. Finally, if the command requires it, the address to be accessed by the command can be entered under "DATA". Once the entire command has been typed in, the "FLASH" button can be pressed. The command should then be displayed in RAM. It is important that the address 00000000 is empty and is not used, as the computer does not always read in the first command after resetting.

Examples

RAM-addressadding two numbersshow input in output-register
0000 00010000 0001 0000 1000 (LDA)0000 1010 0000 0000 (INA)
0000 00100000 0011 0001 0000 (ADD)0000 0101 0000 0000 (OUT)
0000 00110000 0101 0000 0000 (OUT)0000 0110 0000 0001 (JMP)
0000 01000000 1100 0000 0000 (HLT)
...
0000 01000000 0000 0000 0011 (3)
...
0000 01000000 0000 0000 0001 (1)

Run a program

To start the program, the switch must be set to RUN. As soon as this has been done, the program can be started either manually by using the button or by switching to automatic mode. For the I/O, it should be noted that the switch next to the display can be used to switch the decimal output between unsigned binary and two's complement. In addition, the input register deletes its contents after use or can be deleted manually using the button next to it. The commands can be found here

Microcode

The control logic is build using AT28C64B parallel EEPROMs, which need to be programmed. The binary file was created using the txt2bin.py python script. The microcode can conveniently be changed as a text file and converted back into a binary image.

The microcode can be flashed to the EEPROMs using crmaykish's Arduino Mega EEPROM programmer. After hooking everything up as described in the documentation, the EEPROMs can be flashed with their corresponding firmware using following command:

python.exe .\at28c_programmer.py -d <port> -o 0 -f <microcode.bin> -l 8192 -w

Programming port

The modular programming interface allows to use different programmers to load the program into RAM. As of now, there is only a manual programmer that can be used, automatic variants are planned. The interface connects the programmer with a set of multiplexer, which can be controlled using the corresponding switch. By switching to programming mode, the RAM-address as well as the data pins are connected with the pins in the port, which can be accessed by the programmer. There is an additional flash-signal which is hooked up to the write input of the RAM-chips. The full specs of the pins can be found here.

Note that for entering the programming mode successfully the clock must be set to manual in order to function correctly.

Expansions

To allow for future expansion both versions of the computer have an expansion port controlled by a dedicated EEPROM within the control logic. There are 16 individual instructions present in the microcode, which can be used to interact with the expansion. The full specifications can be found here.

8x8 LED-matrix

As of now, the LED-matrix expansion is still in a prototyping phase. Once finished this expansion will allow to display simple graphics which can be copied row by row from either the RAM or the A-register. Combined with the input buttons this will allow the development of simple games, which can be run on the computer.

alt text Unfinished prototype of the 8x8 led-matrix

Planed expansions

  • ALU expansion to allow for additional operations (e.g. logic operations)
  • LCD character display
  • Automatic programmer

Parts

440
QtyValueFootprintReferences
144470Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR10, R11, R100, R101, R102, R103, R104, R105, R106, R107, R108, R109, R110, R111, R112, R113 +128
41LEDLED_THT:LED_D3.0mmD1, D100, D101, D102, D103, D104, D105, D106, D107, D108, D109, D110, D111, D112, D113, D114 +25
2110KResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR1, R2, R3, R4, R5, R49, R140, R149, R150, R151, R152, R153, R154, R155, R156, R159 +5
1074HC245Package_DIP:DIP-20_W7.62mm_SocketU1, U4, U7, U24, U38, U39, U40, U41, U49, U62
974LS195Package_DIP:DIP-16_W7.62mm_SocketU2, U3, U5, U6, U12, U13, U32, U33, U64
8SWButton_Switch_THT:SW_PUSH_6mmSW6, SW7, SW8, SW9, SW10, SW11, SW12, SW13
61KResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR51, R61, R62, R64, R65, R66
474LS08Package_DIP:DIP-14_W7.62mm_SocketU31, U57, U58, U65
4AT28C64BPackage_DIP:DIP-28_W15.24mm_SocketU51, U52, U53, U54
4D168KDisplay_7Segment:D1X8KU14, U15, U16, U17
30.01 uFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC1, C2, C16
30.01µFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC5, C7, C8
30.1µFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC3, C4, C6
315 µF/50VCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC10, C11, C12
374LS04Package_DIP:DIP-14_W7.62mm_SocketU42, U55, U59
374LS157Package_DIP:DIP-16_W7.62mm_SocketU34, U35, U44
374LS161Package_DIP:DIP-16_W7.62mm_SocketU22, U23, U50
374LS32Package_DIP:DIP-14_W7.62mm_SocketU30, U43, U56
3LM555Package_DIP:DIP-8_W7.62mm_SocketU27, U28, U29
25.1KResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR157, R158
274LS283Package_DIP:DIP-16_W7.62mm_SocketU8, U9
274LS86Package_DIP:DIP-14_W7.62mm_SocketU10, U11
2DC37_PlugConnector_Dsub:DSUB-37_Male_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mmJ2, J3
2IN_0LED_THT:LED_D3.0mmD129, D133
2IN_1LED_THT:LED_D3.0mmD128, D134
2IN_2LED_THT:LED_D3.0mmD127, D135
2IN_3LED_THT:LED_D3.0mmD126, D136
2IN_4LED_THT:LED_D3.0mmD125, D137
2IN_5LED_THT:LED_D3.0mmD124, D138
2IN_6LED_THT:LED_D3.0mmD123, D139
2IN_7LED_THT:LED_D3.0mmD122, D140
2SW_DIP_x01Button_Switch_THT:SW_DIP_SPSTx01_Slide_9.78x4.72mm_W7.62mm_P2.54mmSW1, SW5
2SW_PushButton_Switch_THT:SW_PUSH_6mmSW2, SW15
2~Package_DIP:DIP-16_W7.62mm_SocketU60, U61
10.01 µFCapacitor_SMD:C_1206_3216MetricC13
1100KResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR50
1180 µF / 16 VCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC14
1180 µF/ 16VCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC15
11MResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR63
11MPotentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_VerticalRV1
11µFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC9
122 µHInductor_THT:L_Radial_D12.0mm_P10.00mm_Neosid_SD12_style1L1
1700SP7B20M6QEFootprints:E-Switch-700SP7B20M6QE-0-0-MFGSW14
174HC04Package_DIP:DIP-14_W7.62mm_SocketU25
174LS02Package_DIP:DIP-14_W7.62mm_SocketU66
174LS107Package_DIP:DIP-14_W7.62mm_SocketU21
174LS139Package_DIP:DIP-16_W7.62mm_SocketU19
1AT28C64B-15PUPackage_DIP:DIP-28_W15.24mm_SocketU18
1A_0LED_THT:LED_D3.0mmD24
1A_1LED_THT:LED_D3.0mmD23
1A_2LED_THT:LED_D3.0mmD22
1A_3LED_THT:LED_D3.0mmD21
1A_4LED_THT:LED_D3.0mmD20
1A_5LED_THT:LED_D3.0mmD19
1A_6LED_THT:LED_D3.0mmD18
1A_7LED_THT:LED_D3.0mmD17
1B_0LED_THT:LED_D3.0mmD9
1B_1LED_THT:LED_D3.0mmD10
1B_2LED_THT:LED_D3.0mmD11
1B_3LED_THT:LED_D3.0mmD12
1B_4LED_THT:LED_D3.0mmD13
1B_5LED_THT:LED_D3.0mmD14
1B_6LED_THT:LED_D3.0mmD15
1B_7LED_THT:LED_D3.0mmD16
1Barrel_JackConnector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_HorizontalJ5
1CFLED_THT:LED_D3.0mmD130
1C_0LED_THT:LED_D3.0mmD48
1C_1LED_THT:LED_D3.0mmD47
1C_2LED_THT:LED_D3.0mmD46
1C_3LED_THT:LED_D3.0mmD45
1C_4LED_THT:LED_D3.0mmD44
1C_5LED_THT:LED_D3.0mmD43
1C_6LED_THT:LED_D3.0mmD42
1C_7LED_THT:LED_D3.0mmD41
1Conn_01x11_MountingPinConnector_PinHeader_2.54mm:PinHeader_1x11_P2.54mm_VerticalJ6
1DR_1Package_DIP:DIP-16_W7.62mm_SocketU48
1DR_2Package_DIP:DIP-16_W7.62mm_SocketU47
1EFLED_THT:LED_D3.0mmD132
1IN_10LED_THT:LED_D3.0mmD143
1IN_11LED_THT:LED_D3.0mmD144

The 354 most common of 440 parts.

More from cyrillvalentini/SAP-Extended

2
  • 2 layers135 × 100 mmLED Matrix, the printed circuit board in 3D

    LED Matrix

    cyrillvalentini/SAP-Extended

    Extended Simple-As-Possible Computer based on Ben Eaters video series

    147 parts1
  • 2 layers218.4 × 74.9 mmManual programmer, the printed circuit board in 3D

    Manual programmer

    cyrillvalentini/SAP-Extended

    Extended Simple-As-Possible Computer based on Ben Eaters video series

    81 parts1

Similar boards

  • 2 layers90.2 × 88.9 mmAlu, the printed circuit board in 3D

    Alu

    codemonkey76/DIY-8-Bit-Computer

    DIY 8-Bit Computer, based on the design by Ben Eater

    70 parts
  • 2 layers100 × 99.9 mmUsb display, the printed circuit board in 3D

    Usb display

    Ivansquark/tut

    Some examples for future fast remembering

    115 parts
  • 2 layers67.8 × 55 mmVFD Watch, the printed circuit board in 3D

    VFD Watch

    Pakue95/VFD_Watch

    Portable VFD based on IVL2-7/5 and ESP32

    67 parts41
  • 2 layersTeensynth, the printed circuit board in 3D

    Teensynth

    m4ntis/teensynth-pcb

    KiCad PCB schematics for teensynth

    80 parts2GPL-3.0
  • 2 layers55.2 × 49 mmPanel, the printed circuit board in 3D

    Panel

    Envious-Data/Env-DIY305

    A custom PCB implementation of the LTP305 as they are now discontinued.

    440 parts2GPL-3.0
  • 2 layers432.2 × 143 mmScottoModules, the printed circuit board in 3D

    ScottoModules

    CalamityCow/MacOS-Keyboard

    Two modules based on the STM32F072CBT6 to make integrated MCU PCBs simpler. They're designed to sit between 2 switches on an ortholinear or row-staggered keyboard, column-staggered will require some manual moving to get…

    440 parts
  • 2 layers99.1 × 99.1 mmMess Sense+USBC, the printed circuit board in 3D

    Mess Sense+USBC

    unicab369/IOT-Mess-Hardware

    440 parts

Questions

How big is the SAP Extended PCB?

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

What parts does the SAP Extended use?

440 parts, built around the 74HC245D, 74LS195APC, 74LS04PC and 74LS157PC. 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 SAP Extended KiCad files?

From the cyrillvalentini/SAP-Extended repository on GitHub, at the commit this page was made from: the board is schematics/SAP-Extended/SAP-Extended.kicad_pcb and its schematic expansions/LED-Matrix (simplified)/LED-Matrix.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the SAP Extended design in my own project?

Its repository states no licence, so its author keeps all rights: ask cyrillvalentini before reusing the design.