Files
Joe MattielloandClaude Opus 5.5 96dc445fab test(matrix): score a black run whose 68K is stuck in an exception loop as a crash (#980)
* test(matrix): score a black run whose 68K is stuck in an exception loop as a crash

The cart matrix called a run GAME_CODE when the final 68K PC was in
RAM, cart space or the boot ROM.  Two crash states pass that test and
were published as "Runs; video undetermined headlessly":

  - parked in the loader's ILLEGAL guard ($1000: BRA.S *, vector 4),
    e.g. Mandelbrot Demo, Painter (bin), Gorf 2000, the Jaguar Server
    examples;
  - an RTE ping-pong between one faulting PC and the HLE RTE stub at
    $404, e.g. Rayman Demo, Phase Zero (PD), Hubble Nebula.

The probe now reads the pcQueue ring and the RAM vector table every
frame and reports trap_frames (consecutive frames, up to the last, in
which every ring PC is inside an RTE / BRA.S * handler that one of
vectors 2-11 names, or is one single other PC), trap_pc (the faulting
PC; for a parked guard, the PC saved in the exception frame) and
trap_handler.  cart_classify.sh turns 30+ such frames into
"? (trap_loop)" when the run also never put a picture up.  With video
the row stays GAME_CODE and the notes say the 68K is parked: BJL demos
(DEMO1, DEMO1B, DEMO1C, Ladybug) end their 68K main on purpose and let
the GPU/OP run the demo.  A legitimate idle loop is not caught: Jaguar
Server JAGOS's 14-PC wait loop reads trap_frames=0.  The classifier's
final-PC extraction is now anchored to the field so trap_pc= cannot
match it.

matrix_diff reads GAME_CODE -> "? (trap_loop)" as backward (rank 1);
the baseline refresh that lands with this records those rows.

Refs #975

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* docs(matrix): refresh the cart matrix baseline for ? (trap_loop)

Full cart sweep on the corpus host (155 titles, both modes, FAST
blitter, develop + the classifier change).  Against the previous
baseline, matrix_diff reports 29 cells GAME_CODE -> "? (trap_loop)":
the 18 HLE rows the matrix triage found crashed in frame 1-60 and the
BIOS cells of the 11 RAM-loaded ones (the boot ROM is not used there,
so they mirror HLE).  These are the scoring being corrected, not a
regression: every one had 0 lit frames and a 68K parked in the $1000
ILLEGAL guard or ping-ponging with the HLE RTE stub.  Each is ticketed:

  #971  Mandelbrot Demo, Jaguar Server INTRO / INTROMOD
  #972  Painter (bin), Hubble Nebula (HLE)
  #973  Rayman Demo x2, BadCode4 (Metal)/(Modified) (rom)
  #974  Phase Zero (PD) (HLE)
  #975  authentic, no loader fix possible: Jaguar Server 50HZ / 60HZ /
        KEYB (helpers that need the resident server), Gorf 2000 (a
        stale-A0 address error in the game's own startup), BadCode4
        (Metal) (bin) [a1] (an incomplete build), Assassin (for BJL),
        FFYL [a2], Kasumi Ninja [a1] (bad / altered dumps)

Seven GPU/OP-driven BJL demos (DEMO1 x2, DEMO1B x2, DEMO1C, Ladybug
x2) keep GAME_CODE with video; their notes now say the 68K is parked.
Every other row is unchanged apart from the build stamp.  The legend
gains the new stage.

Refs #975

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-15 16:07:33 -04:00
..