mirror of
https://git.k-space.ee/arti/vt1200.git
synced 2026-10-30 12:03:54 +02:00
docs: level-1 errors are status-code dispatched; withdraw the unsound failing-address claim
This commit is contained in:
1 parent
cca49dc27d
commit
9a2363a68f
1 file changed
+46
-4
@@ -857,11 +857,53 @@ remaining candidates:
|
||||
**Honest status: level 1 is NOT passing.** Video memory is located, correctly mapped and now
|
||||
proven to round-trip a walking-bit pattern; the test's remaining requirement is not yet met.
|
||||
|
||||
## Error strings come from a STATUS-CODE DISPATCHER, not from addresses (2026-10-16)
|
||||
|
||||
Following the level-1 error path in Ghidra corrects a wrong turn I had taken.
|
||||
|
||||
The block immediately before the error handlers is a switch on a status code:
|
||||
|
||||
```
|
||||
07fbe0c6: MOVE *A13(0xffe0),A8,0x1 ; A8 = status code set by the test
|
||||
07fbe0ca: JREQ 0x07fbdfd0 ; code 0 -> (no error)
|
||||
07fbe0cc: DEC A8 / JREQ 0x07fbce12 ; codes 1..8 -> ROM CHECKSUM handler
|
||||
07fbe0fc: SUBI -0xff88,A8 / JREQ 0x07fbcf40
|
||||
07fbe104: SUBI -0xff80,A8 / JREQ 0x07fbcfe0 ; <- VIDEO MEMORY handler
|
||||
07fbe10c: SUBI -0xff00,A8 / JREQ 0x07fbd02a
|
||||
...
|
||||
```
|
||||
|
||||
So each error string is selected by a **code**, and the values printed alongside (e.g.
|
||||
`0x40000C`, `0x4000C0`) are **constants in the message**, not addresses.
|
||||
|
||||
**Correction.** My earlier claim that "the video RAM test fails at bit `0x040000C0`" rested on
|
||||
reading `a11` at the printer breakpoint. `a11` is a stale local, and `0x40000C` turned out to
|
||||
be a printed constant that also appears in the ROM-checksum path. **That inference was
|
||||
unsound and is withdrawn.** The video RAM test's failing address is not known.
|
||||
|
||||
**Useful landmarks now mapped (Ghidra addresses):**
|
||||
|
||||
| what | address |
|
||||
|---|---|
|
||||
| the level-1 test routine | `0x07FBCB02`-`0x07FBE21B` |
|
||||
| status-code dispatcher | `0x07FBE0C6` |
|
||||
| VIDEO MEMORY error handler | `0x07FBCFE0` (reached only for its one code) |
|
||||
| ROM CHECKSUM error handler | `0x07FBCE12` |
|
||||
| hex-format + draw helper | `0x07FBBF96`-`0x07FBC015` |
|
||||
|
||||
**Method note, worth keeping.** A register snapshot at a call is not evidence of an argument.
|
||||
Read the **call site in the ROM** — which is what Ghidra just made easy, and what I should
|
||||
have done before chasing an address for several rounds. Ghidra and `smart34010` agree
|
||||
instruction-for-instruction on every range checked, so the two disassemblers cross-validate.
|
||||
|
||||
**Next:** find where the test **sets** `*A13(0xffe0)` to the video-memory code — that
|
||||
assignment is the actual failing comparison, and it is the thing to fix.
|
||||
|
||||
---
|
||||
|
||||
## Next steps
|
||||
|
||||
1. Map video memory across the FULL extent the bank walk reaches (bit 0x200000C0 and
|
||||
beyond) -- the last bank is currently unmapped.
|
||||
2. Pin the unit of the reported address (0x0040000C): bank base vs failing offset.
|
||||
3. Re-run the console check (cap.lua) after each change; it reports the failing address.
|
||||
1. Find where the test SETS *A13(0xffe0) to the video-memory code -- that assignment
|
||||
is the failing comparison.
|
||||
2. Everything else is in place: console capture (cap.lua), video memory located and
|
||||
mapped, Ghidra project seeded and saved (25 functions).
|
||||
Reference in new issue
Block a user