Recorded as an expectation in tests/chips.rs rather than asserted away.
6502 power-on: converged
6800 power-on: converged
z80 power-on: did NOT converge
"Did not converge" means the solver hit MAX_SETTLE_ROUNDS (100) without
reaching a fixed point. That cap matches the reference implementation, which
silently gave up; here it is counted in Stats::nonconvergent_settles.
What this is not
It is not evidence that the Z80 oscillates. These tests perform no
chip-specific initialisation, and visual6502 ships a support.js per chip that
does. The useful half of the result is that the engine runs a die twice the size
of the one it was developed against and reports the failure instead of hanging
or returning a plausible wrong answer.
The lead
cargo run --example inspect -- extern/visual6502/chip-z80 reports:
WARNING: 32 transistors are gated by the supply rail
The 6502 has none. A transistor gated by the supply is permanently on in
silicon and permanently off in this model, because group evaluation never
crosses a rail. Thirty-two of those is easily enough to change what the chip
settles to, and might be enough to stop it settling at all.
Nobody has tested this. It is a lead, not a cause.
Things worth trying
- Perform the initialisation
support.js does for the Z80 and see whether it
converges then.
- Identify which nodes are still changing at round 100 — if they are a small
cluster, that names the structure responsible.
- Check whether the supply-gated transistors are near those nodes.
Recorded as an expectation in
tests/chips.rsrather than asserted away."Did not converge" means the solver hit
MAX_SETTLE_ROUNDS(100) withoutreaching a fixed point. That cap matches the reference implementation, which
silently gave up; here it is counted in
Stats::nonconvergent_settles.What this is not
It is not evidence that the Z80 oscillates. These tests perform no
chip-specific initialisation, and visual6502 ships a
support.jsper chip thatdoes. The useful half of the result is that the engine runs a die twice the size
of the one it was developed against and reports the failure instead of hanging
or returning a plausible wrong answer.
The lead
cargo run --example inspect -- extern/visual6502/chip-z80reports:The 6502 has none. A transistor gated by the supply is permanently on in
silicon and permanently off in this model, because group evaluation never
crosses a rail. Thirty-two of those is easily enough to change what the chip
settles to, and might be enough to stop it settling at all.
Nobody has tested this. It is a lead, not a cause.
Things worth trying
support.jsdoes for the Z80 and see whether itconverges then.
cluster, that names the structure responsible.