Skip to the content
2 layers100 × 100 mmProgram Counter, the printed circuit board in 3D

Program Counter

Shmerlard/SH818

a custom 16bit cpu

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
34
Nets
77
Pads
183
Tracks, vias
0, 0
Routed
Not yet
KiCad
KiCad 8.0 (file 20240108)
Created
9 Jun 2024
Updated
20 Oct 2024

Overview

Program Counter is an open-source printed circuit board by Shmerlard, from the Shmerlard/SH8 repository on GitHub. It is a 2-layer board of 100 × 100 mm with 34 parts on 77 nets.

It is built around the 74LS245SC and 74LS161DC. Its parts include 16 diodes, 6 ICs and 6 connectors.

Main components

2

README

README.md

The shmerlard 16

hi, my name is elad and Im an electrical engineering student in Ben gurion university. I designed a small 16bit cpu, with a mix of jdh8, src, msp430 and the Hack computer. this is still a work in progress, but so far it works.

I used logisim for the logic design, draw.io for the diagrams. in order to see the working cpu in logisim: you need to build version 3.9.0 from source here, then just open the .circ file.

Specs

  • a common 16-bit data and address bus
  • a total of 128kB of usable memory
  • 6 GP register (up to 14 available)
  • modular design for easy troubleshooting
  • port for outside connections

Contents

  1. Registers
  2. Instruction Register
  3. Program Counter
  4. ALU
  5. Control Unit
  6. Memory Registers
  7. Condition Logic
  8. Shift Control
  9. Gallery

Instruction set

text
0x00:  NOP
0x01:  MOV  Ra/#, Rb       | Ra/# -> Rb
0x02:  ST   Ra/#, Rb/#     | Ra/# -> M[Rb]/
0x03:  PUSH Ra/#           | Ra/# -> @SP; SP--
0x04:  POP  Ra             | SP++; @SP -> Ra
0x05:  ADD  Ra/#, Rb       | Ra/# + Rb -> Rb
0x06:  ADDC Ra/#, Rb       | Ra/# + Rb + c -> Rb
0x07:  SUB  Ra/#, Rb       | Rb - Ra/# -> Rb
0x08:  CMP  Ra/#, Rb       | Rb - Ra/#
0x09:  SHR  Ra/#, Rb       | SHR Rb (Ra/# times) -> Rb
0x0A:  SHL
0x0B:  RRC  Ra/#, Rb       | RRC Rb (Ra/# times) -> Rb
0x0C:  RLC
0x0D:  AND  Ra/#, Rb       | Ra/# AND Rb -> Rb
0x0E:  OR   Ra/#, Rb       | Ra/# OR  Rb -> Rb
0x0F:  XOR  Ra/#, Rb       | Ra/# XOR Rb -> Rb
0x10:  NOT
0x11:  CALL DST            | PC -> @SP; DST -> PC; SP-- -> SP;
0x12:  RET
0x13:  JMP  DST            | DST -> PC

for more simulated instructions see: Simulated Instructions

Registers

text
0: SP/REG0  : STACK pointer    
1: SR/REG1  : Status register
2: REG2     : GP Input
3: REG3     : GP Output
4: REG3     : GP
5: REG4     : GP
6: REG5     : GP
7: REG6     : GP

Memory

the memory ranges from 0x0000 to 0xFFFF. the memory is mapped in the following way:

text
0x0000 - 0x7FFF: GP ROM              (32KiB    ROM)
0x8000 - 0xBFFF: GP RAM              (16KiB    RAM) 
0xC000 - 0xCFFF: VRAM                (4KiB    RAM) #CURRENTLY NOT IN USE#
0xD000 - 0xFFFF: NOT IN USE          (12KiB UNUSED)

Instruction format

The instruction register is a 16-bit register

text
the format is XXXX-XUMM-SSSS-DDDD
X = the opcode of the instruction
U = Currently not in use
M = indicates the addressing mode
S = indicates the source register
D = indicates the destination register

(see addressing modes) for more info

Full diagram

for the full gallery go to Gallery

text

Parts

34
QtyValueFootprintReferences
16LEDLED_THT:LED_Rectangular_W3.0mm_H2.0mmD0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15
474LS161Package_DIP:DIP-16_W7.62mm_Socket_LongPadsU1, U2, U3, U4
4MountingHole_PadMountingHole:MountingHole_2.2mm_M2_DIN965_PadH1, H2, H3, H4
3Conn_01x02_SocketConnector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ2, J4, J5
274LS245Package_DIP:DIP-20_W7.62mm_Socket_LongPadsU5, U6
2Conn_01x08_SocketConnector_JST:JST_XH_S8B-XH-A_1x08_P2.50mm_HorizontalJ1, J3
2R_Network08_USResistor_THT:R_Array_SIP9RN1, RN2
1Conn_01x03_SocketConnector_JST:JST_XH_S3B-XH-A-1_1x03_P2.50mm_HorizontalJ6

More from Shmerlard/SH8

9
  • 2 layers100 × 100 mmRegister, the printed circuit board in 3D

    Register

    Shmerlard/SH8

    a custom 16bit cpu

    84 parts18
  • 2 layers100 × 100 mmALU FLAGS CALC, the printed circuit board in 3D

    ALU FLAGS CALC

    Shmerlard/SH8

    a custom 16bit cpu

    52 parts18
  • 2 layers100 × 100 mmStatus Register, the printed circuit board in 3D

    Status Register

    Shmerlard/SH8

    a custom 16bit cpu

    44 parts18
  • 2 layers100 × 100 mmALU Extra, the printed circuit board in 3D

    ALU Extra

    Shmerlard/SH8

    a custom 16bit cpu

    25 parts18
  • 2 layers100 × 100 mmALU Shifter, the printed circuit board in 3D

    ALU Shifter

    Shmerlard/SH8

    a custom 16bit cpu

    19 parts18
  • 2 layers100 × 100 mmALU Main, the printed circuit board in 3D

    ALU Main

    Shmerlard/SH8

    a custom 16bit cpu

    18 parts18

Similar boards

  • 2 layers365.1 × 203.2 mmDIAG, the printed circuit board in 3D

    DIAG

    Nakazoto/CenturionComputer

    This is just a simple backup of all the files related to the Centurion that I have stored on my HD. The Wiki itself has far more in-depth information about the Centurion and it's individual cards.

    150 parts172
  • 2 layers370.8 × 298.5 mm8 Bit Computer, the printed circuit board in 3D

    8 Bit Computer

    The-Invent0r/8-bit-Computer-PCB

    These are the KiCAD files for my 8-Bit Computer.

    323 parts142
  • 2 layers155.2 × 78.6 mm80ColumnCard, the printed circuit board in 3D

    80ColumnCard

    btb/80ColumnCard

    An Apple II 80-Column Card. Based on the Videx Videoterm

    47 parts43Apache-2.0
  • 4 layers170 × 181 mm3ric, the printed circuit board in 3D

    3ric

    ebadger/3ric

    3ric homebrew computer repository

    150 parts32
  • 2 layersSap be, the printed circuit board in 3D

    Sap be

    kyllikki/eda-designs

    EDA designs

    148 parts32MIT
  • 2 layers157.5 × 73.9 mm8086 ISA ver2, the printed circuit board in 3D

    8086 ISA ver2

    homebrew8088/8086-PC-Compatible

    8086 PC Compatible

    50 parts27GPL-3.0
  • 2 layers236.8 × 169.8 mmTK2000, the printed circuit board in 3D

    TK2000

    clemarfolly/Microdigital-TK2000

    Reprodução da PCB do TK-2000 da Microdigital, clone do Micro-Professor MPF-II

    212 parts17
  • 2 layers111.8 × 121.9 mmTlcs90-rom reader pcb, the printed circuit board in 3D

    Tlcs90-rom reader pcb

    sergiopolog/tlcs90-rom-reader

    TLCS-90 ROM Reader

    60 parts15GPL-3.0

Questions

How big is the Program Counter PCB?

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

What parts does the Program Counter use?

34 parts, built around the 74LS245SC and 74LS161DC. 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 Program Counter KiCad files?

From the Shmerlard/SH8 repository on GitHub, at the commit this page was made from: the board is KiCad/Program_Counter/Program_Counter.kicad_pcb and its schematic KiCad/ALU/ALU_Extra/ALU_Extra.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Program Counter design in my own project?

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