Files
psxrecomp/runtime/include
Matthew Stanley 7e4adff41f feat(bios): backend ABI so two recompiled BIOSes link into one binary
Groundwork for "no BIOS chosen -> OpenBIOS, explicit choice -> that BIOS"
(docs/BIOS_SELECTION.md). Shipping both images in one build removes the
per-BIOS build flavour, and with it the three restatements of the same
choice that nothing cross-checked.

Two recompiled BIOSes could not previously coexist: each generated
dispatch exported 16 globals, 14 of which were identical between images
(16 func_ bodies at coincident normalized addresses, the two dispatch
entry points, the per-image tables, and the dispatch depth).

Each image now exports exactly one descriptor, PsxBiosBackend
<STEM>_psx_bios_backend, carrying its image info, dispatch entry points
and kernel-body table. Everything else it defines is static or
stem-prefixed:

  - func_ bodies and continuations take the stem prefix (fn_sym/cont_sym).
  - psx_dispatch / psx_dispatch_call are renamed in the generated
    preamble rather than at ~20 emit sites; the runtime keeps the
    unprefixed names as forwarders through the active backend, so the
    game's generated C and ~66 runtime call sites are untouched.
  - the image info, kernel-body and native-stub tables become static.
    psx_bios_image and psx_bios_kernel_bodies/_count are now published
    by the runtime from the selected backend, so memory.c and the other
    52 read sites are unchanged (the table is a pointer, indexing is
    identical).
  - g_psx_dispatch_depth moves to the runtime: it is shared dispatch
    state, not per-image, and its duplicate definition was one of the
    collisions.

The generated dispatch now includes psx_bios_backend.h instead of
re-declaring PsxKernelBody / PsxBiosImageInfo / PsxNativeStub locally —
those layouts had to be kept in sync with the runtime by hand, which the
old header comment admitted.

Verified by compiling both images and diffing their exported symbols:
dispatch objects export 3 stem-prefixed symbols each (was 16, 14
shared), full-body objects export 3911 and 13070, and the intersection
in both cases is empty.

Selection policy and the [runtime] openbios setting are not wired yet;
this is the linkability seam only.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 11:52:22 -07:00
..
2026-07-21 21:38:04 -07:00
2026-07-17 03:54:27 -05:00
2026-05-17 21:58:55 -07:00
2026-07-21 14:29:38 -07:00
2026-07-21 21:38:04 -07:00
2026-07-21 21:38:04 -07:00
2026-07-21 21:38:04 -07:00