Split out of #202 so that issue can close with its host-side items done.
c64-wireguard's check_net_counters reads ip65_send_attempts / ip65_recv_dropped and uses them to tell "the driver never tried" from "it tried and the wire ate it" — the ambiguity a first-silicon cartridge run is most likely to hit. Our rig reads net_last_error only.
Blocked on bytes, not on the checker. The counters are c64-wireguard exports; they do not exist in our ip65 adapter (src/net/ip65/net.s) and did not resolve in build/labels.txt when #200's resolve_symbols ran. Porting the check means adding them to the adapter first, and ip65's LOADER has 17 B free at the v0.14.0 pin (CLAUDE.md, Memory layout) — build the wikipedia target too before placing anything in NET_CODE (CLAUDE.md, Known issues).
Once the symbols exist: add them to DIAG_SYMBOLS, port the check with a red case (the unit suite's introspection backstop requires one), and add its branches to tools/mutate_ip65_hw_checks.py.
Split out of #202 so that issue can close with its host-side items done.
c64-wireguard's
check_net_countersreadsip65_send_attempts/ip65_recv_droppedand uses them to tell "the driver never tried" from "it tried and the wire ate it" — the ambiguity a first-silicon cartridge run is most likely to hit. Our rig readsnet_last_erroronly.Blocked on bytes, not on the checker. The counters are c64-wireguard exports; they do not exist in our ip65 adapter (
src/net/ip65/net.s) and did not resolve inbuild/labels.txtwhen #200'sresolve_symbolsran. Porting the check means adding them to the adapter first, and ip65's LOADER has 17 B free at the v0.14.0 pin (CLAUDE.md, Memory layout) — build the wikipedia target too before placing anything inNET_CODE(CLAUDE.md, Known issues).Once the symbols exist: add them to
DIAG_SYMBOLS, port the check with a red case (the unit suite's introspection backstop requires one), and add its branches totools/mutate_ip65_hw_checks.py.