Troubleshooting

Symptoms seen during bring-up and their likely causes.

Hardware / bus symptoms

Symptom

Likely cause

Address bus stuck at one value, never changes

No clock on PHI2 (check GP28 → CPU pin 37) or power fight (external 3.3 V on Pico VSYS while USB connected)

65C02 address bus doesn’t change

RDY floating (verify R1) or clock not reaching the CPU

Address bus stuck at $FFFE forever

CPU in reset (RESB low — check R5 + Pico GP27 should be INPUT after boot)

Address goes $FFFC, $FFFD, then random garbage

D0–D7 / address lines mis-wired, or ROM image wasn’t uploaded correctly

Reset vector fetches correct bytes but jumps to wrong address

Endianness — reset vector low byte at $FFFC, high byte at $FFFD

Watch shows $50 at $5000 or $40 at $4000

Address-line crosstalk onto the data bus — use $4000 as the virtual print port

Watch shows $05 but never $14, or CPU crashes quickly

RAM OE# still on GND — move it to +3.3 V

RAM reads return garbage (writes seem to work)

HM62256 at 3.3 V is out of spec — replace with 3.3 V SRAM for production

Random behavior when touching the breadboard

Loose wire or missing decoupling — re-seat connections; a 100 nF cap helps

Pico USB disconnects when the 65C02 boots

Brownout — the 3.3 V supply can’t deliver enough current

Hardware API / host symptoms

Symptom

Likely cause

Upload: Device or resource busy

Another program holds the serial port — close serial monitors first

ProtocolError: expected ACK got 0x7C

ASCII monitor still enabled — run api.monitor(enable=False) or start a read capture (auto-disables it); reflash if firmware is stale

ProtocolError: device NACK after EOT (0x15)

Stale or mismatched firmware — rebuild and reflash piclone.uf2 (picotool load -f)

ProtocolError / timeout (other)

Wrong port, no firmware flashed, or a plain serial monitor is open on the port

TimeoutError during capture

ROM missing STP (0xDB) at end of program, or clock slower than 12 s/frame — rebuild the ROM or raise frame_timeout in read_until_stp()

ModuleNotFoundError: romulan

Run host commands from the Romulan checkout (~/Downloads/romulan) with uv run, not from src/build/