
Indicator module
DDecoene/kransputer
A working computer from a few thousand discrete CMOS transistors — SUBLEQ core, Transputer-style message-passing ring. This repo: the gate-level breadboard PCB modules.

A working computer from a few thousand discrete CMOS transistors — SUBLEQ core, Transputer-style message-passing ring. This repo: the gate-level breadboard PCB modules.
Nor module is an open-source printed circuit board by DDecoene, from the DDecoene/kransputer repository on GitHub. It is a 2-layer board of 47.1 × 30.9 mm with 19 parts on 20 nets.
It is built around the AO3400A and AO3401A. Its parts include 2 connectors and 1 capacitor.
Kransputer is a working computer built from a few thousand discrete CMOS transistors — a machine on the scale of an Intel 4004, but made of parts you can hold — designed to grow into a multiprocessor: one core, then a ring of up to eight, passing messages the way INMOS's Transputer did. It exists to be understood and rebuilt, by a person, a class or a hackerspace. Not to be sold.
One decision forces everything else: CMOS. Almost every discrete-transistor computer ever built is NMOS and burns about a watt standing still. CMOS costs twice the transistors but makes power scale with clock rate instead — turn the clock down and the machine sips. Staying inside a small transistor budget is why the design is stripped to the bone:
On this machine, talking to the core next door is cheaper than reading your own memory. That is why the ring is the point, not an afterthought.
The architecture is settled on paper: a SUBLEQ core with a serial datapath and SPI links, meant to grow into a message-passing ring. What is deliberate is the direction of the work. Instead of proving the whole machine on an FPGA before touching a soldering iron, Kransputer is built upward from real gates, one module at a time.
The structural model is the reference: the same stimulus into the simulation and into the breadboard must give the same result, or the block is wrong.
The gate boards are drawn but not yet routed — schematics and rough placement are done, copper is not. Work right now is on the first blocks in structural Verilog, which land here soon. Once those hold up in simulation the boards get routed and finished for a first self-ordered run, with build notes and other material alongside.
Discrete-logic building blocks for the kransputer — the Gates layer above. Each module is a small PCB that plugs into a breadboard on two opposite edge headers carrying an identical 16-pin pass-through bus, so modules can sit side by side across one or more breadboards and be wired together into larger logic.
| TARGET | Board |
|---|---|
nand | 4x discrete static-CMOS 2-input NAND |
nor | 4x discrete static-CMOS 2-input NOR |
not | 6x discrete static-CMOS inverter |
indicator | 12-channel buffered bus LED indicator |
Logic FETs are AO3400A (N-channel) / AO3401A (P-channel) in SOT-23.
The logic boards carry no indicator parts. Every node is on the bus; the indicator board buffers each signal with a single AO3400A in common source (its gate is high-impedance, so the logic net is not loaded) that sinks an LED fed from the indicator board's own VDD rail. LED lit = logic 1. Watching the machine therefore does not sag the logic levels.
Both edge headers (J1, J2) carry the same 16 pins, wired 1:1, so any signal
is reachable from either edge. Framing is fixed: pin 1 = VDD, pin 2 = GND,
pins 3–14 carry the 12 signal nets the board drives, pins 15/16 are the
edge-to-edge spares (BUS_X, BUS_Y).
J1/J2 are stacking headers: male tails point down into the breadboard,
female sockets face up so the indicator shield can plug onto the same 16 pins.
| Pin | nand | nor | not | indicator |
|---|---|---|---|---|
| 3 | NAND_1_A | NOR_1_A | NOT_1_IN | SIG1 |
| 4 | NAND_1_B | NOR_1_B | NOT_1_OUT | SIG2 |
| 5 | NAND_1_Y | NOR_1_Y | NOT_2_IN | SIG3 |
| 6 | NAND_2_A | NOR_2_A | NOT_2_OUT | SIG4 |
| 7 | NAND_2_B | NOR_2_B | NOT_3_IN | SIG5 |
| 8 | NAND_2_Y | NOR_2_Y | NOT_3_OUT | SIG6 |
| 9 | NAND_3_A | NOR_3_A | NOT_4_IN | SIG7 |
| 10 | NAND_3_B | NOR_3_B | NOT_4_OUT | SIG8 |
| 11 | NAND_3_Y | NOR_3_Y | NOT_5_IN | SIG9 |
| 12 | NAND_4_A | NOR_4_A | NOT_5_OUT | SIG10 |
| 13 | NAND_4_B | NOR_4_B | NOT_6_IN | SIG11 |
| 14 | NAND_4_Y | NOR_4_Y | NOT_6_OUT | SIG12 |
The bus is positional: J1 pin k ≡ J2 pin k on every board. The indicator
shield taps pins 3–14 as SIG1..SIG12 and shows whatever a neighbouring board
drives there.
Supply: 5 V on the bus. The two header rows are 0.9" apart (row a to row j
of one breadboard); columns b–e and f–i stay free for patch wires.
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
./venv/bin/python circuit.py # writes every <target>_module.net
./venv/bin/python circuit.py nand # or just onekicad_env.py finds the KiCad symbol libraries at the macOS bundle path
(/Applications/KiCad/KiCad.app/...). On Linux or Windows, set the
KICAD*_SYMBOL_DIR / KICAD*_FOOTPRINT_DIR environment variables to your
install's library paths before running, or adjust kicad_env.py.
nand_module/
in KiCad and "Update PCB from Netlist", or run kinet2pcb headless (needs
skidl, kinparse and pcbnew on the same Python — i.e. installed into
KiCad's bundled Python, since pcbnew is not in the venv):
kinet2pcb -i nand_module.net -o nand_module/nand_module.kicad_pcb -w --overwritenand_module/,
using KiCad's bundled Python:
/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/python3 \
place.py nandplace.py positions J1/J2 on opposite 0.9" edges, clusters each gate between
them, draws a tight Edge.Cuts rectangle and pours a B.Cu GND zone. Pass an
explicit .kicad_pcb path as a second argument to place a board elsewhere.Repeat with nor, not, and indicator (each is its own KiCad project in its
own <target>_module/ folder). nand_module/, nor_module/, not_module/ and
indicator_module/ are checked in.
A discrete gate output driving other gate inputs is limited by speed, not current (CMOS inputs are capacitive) — fine at this machine's speeds. One indicator-board channel adds roughly the AO3400A gate capacitance to the net it watches; one indicator board on the bus is negligible.
./venv/bin/pytestThe placement integration test is skipped unless kinet2pcb can import
pcbnew (it cannot from the venv). place.py uses fixed, hand-computed
coordinates per board type, so its output is deterministic and easy to
eyeball in KiCad.
circuit.py — SKiDL netlist generator (all boards, no arg = build every one)place.py — pcbnew layout: exact positions per board type, Edge.Cuts, GND pourkicad_env.py— points SKiDL at the bundled KiCad libraries on macOSSYMBOLS.md — resolved KiCad symbols (AO3400A/AO3401A, LED, R array, header)tests/ — SKiDL-netlist topology checks per board + CLI + place integrationPolyForm Noncommercial License 1.0.0. Build it, study it, modify it, teach with it, and contribute — freely, for any noncommercial purpose. Selling kits, boards, or hardware based on this work is reserved to the maintainer; see COMMERCIAL.md. Contribution terms are in CONTRIBUTING.md.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | AO3400A | Package_TO_SOT_SMD:SOT-23 | QNA1, QNA2, QNA3, QNA4, QNB1, QNB2, QNB3, QNB4 |
| 8 | AO3401A | Package_TO_SOT_SMD:SOT-23 | QPA1, QPA2, QPA3, QPA4, QPB1, QPB2, QPB3, QPB4 |
| 2 | BUS_STACK_1x16 | Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_Vertical | J1, J2 |
| 1 | 1u | Capacitor_SMD:C_0805_2012Metric | C1 |
It measures 47.1 × 30.9 mm and has 2 copper layers, 1.6 mm thick.
19 parts, built around the AO3400A and AO3401A. 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.
From the DDecoene/kransputer repository on GitHub, at the commit this page was made from: the board is nor_module/nor_module.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask DDecoene before reusing the design.

DDecoene/kransputer
A working computer from a few thousand discrete CMOS transistors — SUBLEQ core, Transputer-style message-passing ring. This repo: the gate-level breadboard PCB modules.

DDecoene/kransputer
A working computer from a few thousand discrete CMOS transistors — SUBLEQ core, Transputer-style message-passing ring. This repo: the gate-level breadboard PCB modules.

Stefan-Olt/MISRC
MISRC Is a multi channel RF capture device for FM RF, S-Video, CVBS RAW capture and anything else, but intended and supported for the decode family of projects vhs-decode, ld-decode, hifi-decode.

TobleMiner/DC-UPS
A small DC UPS, designed to keep small appliances like consumer network equipment running during power outages

maxlab-io/tokay-lite-pcb
Tokay AI Camera - ESP32 camera development board

CrashOverride85/zc95
4 channel EStim box inspired by the mk312bt, with Lua scripting support


Twisted-Fields/acorn-robot-electronics
PCB hardware designs in KICAD for Acorn, the precision farming rover from Twisted Fields.


Arkos-Engineering/HT-15_hardware
We can split this out into separate repos later, right now its very convenient to have everything here.