Welcome to Byte Hamr Labs.
This is where I keep notes on the stuff I build. Mostly nobody asked for any of it. There’s a CPU made out of TTL chips, an FPGA card for the Apple IIe, a few old machines I’ve brought back to life, and a fair amount of software to go with it.

It’s not just hardware. One week I’m working on an instruction set or microcode. The next it’s a VHDL core rebuilt from the original datasheet, or Docker and CDK and whatever I’ve decided AWS should be doing for me this month. Sometimes it’s something dumb, like packaging an Intel 8008 with FuseSoC so you can talk to it over the network. I’m not sure why either, but it works.
Every project has a page that says what it is and where it’s at. Under that are dated build logs. The dead ends are in there too, since that’s usually where I learned something.
Right now I’m on: the IBM 5160. It boots DOS 5 off its ST-251, and I’ve got a CF and IDE card to put in it because I only have one serial cable right now and the Apple IIe is using it. DINO is off the breadboard and waiting on a PCB, power first.
Pick a project below, or follow the log stream and RSS if you want to watch it happen.
Hardware
- IBM 5160 and 3270 PC bring-up
Two Tektronix-surplus IBM XTs, a 5160 and a 5271, brought from untested to booting DOS 5 off their ST-251s.
- DINO
8-bit CPU from discrete 74-series logic on breadboards. 174-instruction microcoded ISA, stack, CALL/RET, executes from RAM, memory-mapped I/O bus with a serial card and a monitor.
- LiteX 8008 Node
The b8008 core inside a LiteX SoC on the ECP5-5G Versa, with its monitor console carried over UDP. make login from anywhere on the LAN lands you at the 8008 monitor prompt.
- Intel 8008 VHDL
Intel 8008 in VHDL, one module per box on Intel’s 1972 block diagram. Cycle-exact, runs on a Lattice ECP5-5G Versa, boots into SCELBI BASIC. Every module has a machine-checked proof or sweep in CI.
- Byte Hamr
Open-source ECP5-85F FPGA card for the Apple IIe: 64 MB SDRAM, SPI flash, USB and JTAG, 20-pin GPIO. Rev 2 runs a ProDOS block device, a Liron SmartPort controller, a soft 6502 coprocessor, and an Intel 8008 coprocessor with its own toolchain on the Apple.
- IBM PCjr
A $5 garage sale IBM PCjr, bare unit, being sized up for what it takes to get power, a keyboard and a monitor on it.
Software
- SigScope
SigScope: a native Mac front panel for the Siglent SDS1204X-E over USB, written in C++ and Qt 6. Knobs and lit buttons like the scope’s own panel, live traces, persistence, cursors and measurements.
- Apple IIe
A 128K Apple IIe with A2DVI video and ADTPro over serial, used mostly as a place to write 6502 in Merlin and try old toolchains on the real machine.
Recent logs
- Aztec C 3.2b on one 800K disk Merged the eight Aztec C65 floppies onto one bootable 800K image, hit the shell’s reload bug, wrote a 186-byte loader around it, compiled hello world, and decided C isn’t worth it on this machine.
- The instruction set, all 174 of them The full DINO ISA as it sits in the three microcode EEPROMs: how to read a row, the six addressing modes, every opcode by family, and which ones have actually run on the hardware.
- Cursors, measurements, and the write that flips the scope into Track v0.4: the scope’s cursors and five measurement slots in the app, plus a day of chasing a mode change that turned out to be a side effect of every cursor position write.
- CI runs for the first time, and the wrapper had drifted off the core Pushing the August work to GitHub ran the verification workflow for the first time. It found the wrapper still declaring ports the core removed in August. Fixed, sims green, CI green, silicon unverified.
- Why this site exists A static build log for Byte Hamr Labs projects, and the rules it follows.
- Talking to the SDS1204X-E over USB from a Mac Poked the scope over USBTMC with pyusb, wrote down its quirks, then built the first Qt app that runs, triggers, shows traces and saves screenshots.
- Front panel, scope-style trigger, and persistence Rebuilt the UI as knobs and lit buttons laid out like the scope, fixed the trigger workflow and the Auto Setup slowdown, then added phosphor-style persistence that also drives the scope’s own persistence.
- OUT before a RAM fetch halts; the breadboard is done A staircase of RAM programs pinned a halt to OUT immediately before a fetch from RAM; a microcode settle row was burned and did not fix it; the clock bracket says setup margin, so the next phase is a PCB with power first.