You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
acid: bring up framework end-to-end (smoke test passes)
Brought up the toolkit on a real host and shook out three blockers
during first integration:
* Boot stub: I had originally placed a `jmp entry` at $800400 thinking
the BIOS jumped through it. The actual contract is that the file
loader reads the 32-bit cart entry address as raw bytes from $800404
(see src/core/file.c:140 -- jaguarRunAddress = GET32(jagMemSpace,
0x800404)) and HLE BIOS init writes that value to the 68K reset PC
vector at $00000004 before m68k_pulse_reset(). Replaced the JMP with
`dc.l entry` at $800404 and updated the header comments to match.
* Signature address conflict: ACID_BASE was at $100, but HLE BIOS init
fills the entire 68K exception vector table from $0..$3FF on cart
boot, which clobbered our signature ($100 is vector 64, the IRQ
vector that irq_ack_handler() returns for all hardware IRQs).
Moved ACID_BASE to $100000 (1 MB into main RAM) -- well clear of
vectors, BIOS workspace, cart-mode stack ($4000), and typical
RAM-loaded executable region. Switched the macros from short-
absolute (.w) to long-absolute (.l) addressing accordingly.
* BIOS mode: runner was setting `virtualjaguar_bios = "enabled"` which
selects the real BIOS path -- which performs cart authentication
that synthetic test ROMs don't satisfy. Switched to "disabled" so
the HLE-BIOS path runs, sets the 68K reset PC from our cart entry
vector, and dumps the CPU straight into the test code.
* ACID_FAIL macro: callers can now pass either immediate (#imm) or
register (dN/aN) operands -- the macro forwards them to move.l
directly instead of forcing immediate addressing. The original
copy_simple test `ACID_FAIL d3,d5,d4` form now assembles cleanly.
Added `tests/blitter/zzz_smoke.s`, the simplest possible test (just
ACID_INIT + ACID_PASS), which now reports PASS through the runner.
This proves the framework end-to-end:
$ make all && ./acid_run ../../virtualjaguar_libretro.dylib \
tests/blitter/zzz_smoke.jag
[PASS ] tests/blitter/zzz_smoke.jag
The real `copy_simple.jag` blitter test still reports NOT-RUN-YET --
the test code itself is buggy (likely register offsets / command
encoding) and crashes before reaching ACID_PASS / ACID_FAIL. That's
a test-content issue, not a framework issue, and will be fixed in
a follow-up alongside expanded blitter coverage.
vasm 1.9 (prb28/vasm GitHub mirror) verified working on macOS arm64.
Toolchain install instructions in test/acid/README.md will be updated
in the next commit to point at that mirror, since the upstream
sun.hasenbraten.de site has been intermittently unreachable.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
0 commit comments