Skip to the content
PCBKitNew board
2 layersHERA, the printed circuit board in 3D

A slightly less simple CPU than the SPEAR. It is way more powerful due to:

Copper layers
2
Thickness
1.6 mm
Parts
18
Nets
13
Pads
54
Tracks, vias
140, 24
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
31 Oct 2024
Updated
11 Apr 2026

Overview

HERA is an open-source printed circuit board by Ryz3D, from the Ryz3D/HERA repository on GitHub. It is a 2-layer board with 18 parts on 13 nets, routed with 140 tracks and 24 vias.

It is built around the BSS123 and BSS84.

Main components

2

README

README.md

HERA: Hopefully Electronics Running Automatically

A slightly less simple CPU than the SPEAR [blocked]. It is way more powerful due to:

  • Significantly more control lines, thus more instructions
  • An extra C register
  • Direct read and write access to all registers
  • Jump and branches as individual instructions (SPEAR solution was creative, but tedious)
  • A 16-bit bus (i.e. jump in single cycle)
  • 16-bit registers and ALU
  • RAM size increased from 256 bytes to 128 KiB
  • Additional NOR operation
  • Multiple flags (carry out, zero, negative) in a proper status register
  • Far better input/output capabilities
  • Instructions without literal value fit into one byte

Features

  • Full 16-bit architecture
    • 16-bit addressing for ROM and RAM (ROM: 64 KiB, RAM: 128 KiB)
      • Two RAM chips for direct 16-bit access
    • 16-bit bus, registers and ALU
  • Usable digital I/O
    • 256 input ports (16-bit)
    • 256 output ports (16-bit), can be extended at expense of RAM size

Technical details

Instructions

The upper 4 bits of any instruction represent control lines for writing to the internal bus (everything but STAT uses 16-bit values):

Upper nibbleNameDescription
0LITLiteral value
1AA register
2BB register
3CC register
4RAMRAM
5RAM_PRAM pointer register
6PCProgram counter register
7STATStatus register (8-bit)
8--
9--
AADDAdd (A + B)
BCOMTwo's complement (-A)
CNORNOR (~(A | B))
D--
E--
F--

If a literal is selected to be written to the bus (upper nibble is 0x0), it is read from the two bytes after the instruction in big-endian format.

The lower 4 bits represent control lines for reading from the internal bus:

Lower nibbleNameDescription
0VOIDIgnore value
1AA register
2BB register
3CC register
4RAMRAM
5RAM_PRAM pointer register
6PCProgram counter register
7STATStatus register (8-bit)
8--
9--
AA BA & B registers
BB RAM_PB & RAM_P registers
CC PCC & PC registers
DPC_CProgram counter if carry flag set
EPC_ZProgram counter if zero flag set
FPC_NProgram counter if negative flag set

Status register

The flags of the status register STAT are written on any arithmetic operation (ADD, COM, NOR) and any instruction writing the A register. Arithmetic operations overwrite all flags, instructions writing the A register overwrite only the zero and negative flags.

BitDescription
0 (LSB)Carry (PC_C)
1Zero (PC_Z)
2Negative (PC_N)
3...8 (MSB)Reserved

Assembly code Examples

Machine code Examples

Copying the value of the A register into the B register is done by instruction 0x12 (upper nibble 1 -> write A to bus, lower nibble 2 -> read from bus into B).

Setting B to a literal value is done by instruction 0x02 followed by two bytes in big-endian order (i.e. 0x02 0x12 0x34 -> B=0x1234).

Some larger programs showcasing some optimized instructions (all instructions in hexadecimal):

text
# This program writes a lookup-table (array) for showing a 4-bit value as a hexadecimal character on a seven segment display using the following segments (a=LSB, h=MSB):

#  aaa
# f   b
# f   b
# f   b
#  ggg
# e   c
# e   c
# e   c
#  ddd  h

# Using lower nibble 0xB can be a very efficient way to count a pointer (by setting the operand and the pointer in a single instruction), the counting offset (or "step") is determined by the A register.

(00) 01 00 01   # A = 0x01 (increment pointer while writing lookup-table)
(03) 0b 00 80   # B = RAM_P = 0x0080 (base pointer of lookup-table)
(06) 04 00 3f   # Write 0x3f (character '0') at address 0x0080
(09) ab         # Add into B register and RAM_P (increment pointer by 1)
(0A) 04 00 06   # Write 0x06 (character '1') at address 0x0081
(0D) ab         # 
(0E) 04 00 5b   # '2'
(11) ab         # 
(12) 04 00 4f   # '3'
(15) ab         # 

Default memory map

StartEndDescription
0x00000x00ffZeropage
0x01000x01ffInput registers (default GPIA at 0x0100)
0x02000x02ffOutput registers (default GPOA at 0x0200)
0x03000x7fffStatically allocated RAM
0x80040xfbffDynamically allocated RAM
0xfc000xffffStack (starting at 0xffff)

Parts

18
QtyValueFootprintReferences
9BSS123Package_TO_SOT_SMD:SOT-23Q4, Q6, Q10, Q12, Q14, Q19, Q20, Q21, Q22
9BSS84Package_TO_SOT_SMD:SOT-23Q3, Q5, Q9, Q11, Q13, Q15, Q16, Q17, Q18

Questions

What parts does the HERA use?

18 parts, built around the BSS123 and BSS84. 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 HERA KiCad files?

From the Ryz3D/HERA repository on GitHub, at the commit this page was made from: the board is kicad/hera/hera.kicad_pcb and its schematic kicad/hera/adder_1.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the HERA design in my own project?

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

Similar boards

  • 4 layers113 × 93.7 mmCharacterizer, the printed circuit board in 3D

    Characterizer

    patrickyeon/battery-characterizer

    battery tester/characterizer hardware, firmware.

    217 parts4
  • 2 layers53 × 30 mmRL78I1C PMOD PROG ADAPTOR ISO, the printed circuit board in 3D

    RL78I1C PMOD PROG ADAPTOR ISO

    lwray-renesas/RL78-I1C-PMOD-Programming-Adaptor---Isolated

    This piece of hardware alows connection between an E2-Lite and any of the RL78/I1C Metering PMOD's. Providing 5kv isolation.

    28 parts1MIT
  • 6 layers100 × 175 mmV1sch, the printed circuit board in 3D

    V1sch

    spartacus-hf/spartacus_PCB_REV1

    KiCad schematic and PCB project for the SPARTACUS-HF Chireix transceiver.

    438 parts1CERN-OHL-S-2.0
  • 2 layers135.4 × 28.4 mmMoisture Sensor, the printed circuit board in 3D

    Moisture Sensor

    JakobThiessen/OpenThread_Sensors

    Fehler im Schlatplan!!! R7, Q1 und Q2 nicht bestücken. Verbindung von Q1/pin1 zu Q2/Pin2 wie eingezeichnet herstellen und mit GPIO ein und ausschalten.

    29 partsMIT
  • 4 layers64.5 × 0.1 mmPebble, the printed circuit board in 3D

    Pebble

    Yatekii/pebble

    167 parts
  • 2 layers120 × 100 mmBatt Rev21, the printed circuit board in 3D

    Batt Rev21

    curtisseizert/Nanovoltmeter

    A low noise nanovoltmeter design files and code

    57 parts44
  • 2 layers112 × 100 mmBatt Rev20, the printed circuit board in 3D

    Batt Rev20

    curtisseizert/LowFreqLNA

    A 0.01Hz-1+MHz low noise amplifier

    56 parts35MIT