Smart Hamr: the card is a Liron card and FujiNet boots ProDOS through it

/ Byte Hamr / updated 2026-09-11 / from project_byte_hamr smart-hamr iwm liron smartport fujinet rev1

What I tried

The FPGA implements the whole Liron card: IWM, 4K ROM, all the TTL glue. I started from Steve Chamberlin’s original Yellowstone Verilog and hit a dead end. I asked him, and the answer was that the open-source release is the version he gave up on, with major problems, and the current Yellowstone II is a closed-source overhaul. So I went to the source documents. The IWM is built from the IWM patent, US 4,742,448, and the IWM Spec rev 19, cross-referenced against a disassembly of the Liron ROM to check every register access.

On the other side of the GPIO header is an ESP32 DevKitC WROVER running FujiNet firmware, wired straight to the FPGA’s 3.3 V I/O with no level shifting. The Apple’s 5 V side goes through the ‘245 transceivers as usual. I have a fork of the FujiNet firmware with hardening changes. I wanted to change as little as possible, but hardcoded timing and error paths that only make sense on production hardware needed fiddling.

The ESP32 DevKitC WROVER on perfboard, ribbon cable to the card's GPIO header.
The ESP32 DevKitC WROVER on perfboard, ribbon cable to the card’s GPIO header.
PR#4 and the FujiNet splash comes up through the card.
PR#4 and the FujiNet splash comes up through the card.
FujiNet CONFIG through the card, with the Total Replay image mounted on SmartPort drive 1.
FujiNet CONFIG through the card, with the Total Replay image mounted on SmartPort drive 1.
Total Replay, 301 games, loaded over SmartPort from the FujiNet.
Total Replay, 301 games, loaded over SmartPort from the FujiNet.
Mad Rat on the IIe, the ESP32 rig sitting on the case.
Mad Rat on the IIe, the ESP32 rig sitting on the case.
Mad Rat, playing.
Mad Rat, playing.
AppleWorks running from a FujiNet volume, saving a file back through the card.
AppleWorks running from a FujiNet volume, saving a file back through the card.
A real floppy in the DuoDisk, slot 6 drive 2, with VCF.TXT copied onto it from the FujiNet volume.
A real floppy in the DuoDisk, slot 6 drive 2, with VCF.TXT copied onto it from the FujiNet volume.

What I measured

What broke or surprised me

The IWM latches state off address bus edges under 500 ns long, serializes with FCLK-counted bit cells, and has handshake timing that punishes being one clock off.

Disk II emulation through FujiNet, which uses the ESP32 RMT peripheral for GCR track data, does not work. It is a different signal path and I have not started on it.

Next

Rev 2 with cleaner routing and connectors should remove the need for bodge caps. Open question: a real FujiNet board expects a Liron with 5 V TTL outputs, so it may need another set of level shifters, or it may just work at 3.3 V since the ESP32 is 3.3 V native. Extra shifting adds propagation delay, and SmartPort timing may notice.