mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 19:07:47 -04:00
5e23de8393
(cherry picked from commit 98d617b5f3)
52 lines
2.5 KiB
Markdown
52 lines
2.5 KiB
Markdown
# External test-ROM conformance status
|
|
|
|
Date: 2026-08-21
|
|
|
|
This lane turns small public PS1 hardware tests into deterministic PSXRecomp
|
|
regression fixtures. It boots the exact pinned PS-X EXE from a locally built
|
|
disc, captures guest TTY bytes through a bounded debug endpoint, and compares
|
|
the assertion log with the upstream hardware-derived result.
|
|
|
|
## Current result
|
|
|
|
| Fixture | Assertions | PSXRecomp result | Meaning |
|
|
|---|---:|---|---|
|
|
| `gte-test-all` | 1,150 | **1,150 passed, 0 failed** | All valid GTE opcodes and tested register semantics match the pinned oracle. |
|
|
| `cpu-cop` | 17 | **Blocked after 2 passes** | The strict AOT compiler replaces functions containing intentional invalid COP instructions with `psx_unknown_dispatch` stubs. |
|
|
|
|
The GTE fixture initially passed zero of its 50 register tests. The oracle then
|
|
identified and verified title-neutral corrections for register sign extension,
|
|
RES1, FLAG writes, 44-bit MAC overflow, projection overflow flags, MVMVA edge
|
|
cases, lighting/color staging, and depth-cue pipeline ordering. The completed
|
|
fixture passes from a clean `prepare` -> recompile -> build -> headless run.
|
|
|
|
The CPU result is not a harness failure. Its first two tests execute and pass;
|
|
the next intentionally invalid COP instruction reaches generated function
|
|
`0x80010144`, which is a fatal unknown-dispatch stub. A faithful interpreter or
|
|
exception-generating fallback for compiler-rejected instructions is required
|
|
before this fixture can test the remaining CPU behavior.
|
|
|
|
## Provenance and boundaries
|
|
|
|
- Fixture source: `JaCzekanski/ps1-tests`, MIT, release `build-158`, commit
|
|
`5f73d61b27a8d51269b54dde1c456d2d2f7dc865`.
|
|
- Exact binary/log/archive hashes are in
|
|
`tools/conformance_testrom/fixtures.json` and each private run's
|
|
`prepare-receipt.json`.
|
|
- Fixture binaries and locally owned PlayStation license-sector data are not
|
|
committed.
|
|
- The upstream expected logs are the automated oracle. A matched physical-PS1
|
|
recapture remains the promotion gate for a hardware-qualified receipt.
|
|
|
|
## Next factory steps
|
|
|
|
1. Add a nonfatal compiler fallback for deliberately invalid instructions and
|
|
finish the 17-test CPU/COP fixture.
|
|
2. Have Eagle recapture the hashed synthetic GTE disc on hardware.
|
|
3. Add focused CPU, cache, DMA, timer, CD, GPU, SPU, and SIO fixtures one at a
|
|
time; each must retain exact input hashes and a machine-readable result.
|
|
4. Run this lane before whole-game validation so architectural regressions are
|
|
found below the game layer.
|
|
|
|
Reproduction instructions are in `tools/conformance_testrom/README.md`.
|