I'm developing oss-pce-cd-bios, an open-source project aiming to replace the PC Engine / TurboGrafx-CD System Card firmware.

The previous update covered a multi-sector synthetic IPL loader running through a separate 256 KiB development image on a pinned Geargrafx core.

Since then, the most interesting result isn't a larger test count. Local traces of two commercial CDs now reach BIOS API entry points after the IPL, rather than stopping at the earlier media-layout mismatch.

To be precise: neither disc reached a title screen, and no retail-game compatibility is claimed. The observed calls still lead to unimplemented development stubs.

Getting beyond the pre-API blocker

The original diagnostic loader used a synthetic disc-layout assumption. On the locally held commercial CUE/BIN media, that assumption could place the IPL information-sector selection incorrectly, producing a PRE_API_BLOCKER_OBSERVED result before the BIOS interface could even be studied.

PR #728 introduced explicit opt-in local CUE discovery. The --commercial mode only considers local media under ./rom/; the public CI suite does not search for or consume private commercial images.

PR #730 then added a CUE-aware automatic loader configuration:

  • Parse the selected CUE text and derive the data track's INDEX 01 position using file-size metadata without reading the BIN payload.
  • Apply that position to a purpose-built PUBLIC diagnostic loader, with separate DEV behavior preserved.
  • Reject unsupported or ambiguous layouts and unsafe destination-overflow cases.
  • Keep names, absolute paths, media content, hashes, and private sector coordinates out of the public manifest and evidence.

The resulting local measurements, made with a pinned Geargrafx core in cold and warm configurations, were:

Loader Two locally tested commercial discs
Previous synthetic-layout selection PRE_API_BLOCKER_OBSERVED
Automatic DEV loader control PRE_API_BLOCKER_OBSERVED
Automatic PUBLIC diagnostic loader API_ENTRY_CONFIRMED

One disc reached a JSR into candidate slot $02; another reached a sequence of API calls followed by a stub halt. The observer checks the call/return sequence before classifying a result as confirmed.

This is an instrumentation milestone, not a functioning replacement BIOS. The commercial bytes stay local, and no private traces or game-derived content are published to the repository or CI.

Investigating CD_BASE without pretending the ABI is known

The candidate at slot $02 is being investigated as CD_BASE, but that identification and its precise ABI are not verified.

PR #731 builds a host-side discriminator for competing address-coordinate models: absolute LBA, track-relative, INDEX 00-relative, and other caller-adjusted interpretations.

PR #733 adds a sanitized observation catalogue and fail-closed schema, while PR #736 rejects unknown or unsupported host-side CD_BASE conditions.

None of these PRs execute the proprietary reference entry point. The candidate's register behavior, side effects, error contract, and LBA origin remain unresolved. A model that can distinguish hypotheses is not a measurement that proves one hypothesis correct.

Better refusal boundaries and stronger evidence gates

PR #734 improves the synthetic multi-sector loader by probing its final target sector before performing the first load-area write. Some end-of-media failures that previously occurred after partial copying are now rejected with zero copied bytes.

This is still a reachability probe, not a guarantee that all sectors belong to the intended data track. Other failure modes and the media track-length contract remain open.

Separately, the pinned-core ST/IRQ/MMIO diagnostic in PR #732 was merged after additional no-resume, instruction-fetch, and side-effect validation.

The E1–E3, E4–E5, and unified host judge work is also merged. These components exercise synthetic pre-block and device-access decisions, but their fixture-level PASS is not permission to execute reference firmware. The production gate remains blocked.

The development ROM now has 15 entries

Finally, PR #748 added a project-defined EX_JOYREP implementation at candidate slot $22. The DEV contract returns while preserving the tested CPU state, stack, and page registers; pinned Geargrafx regression tests and an intentionally broken mutant check the behavior.

As of the November 10 main snapshot (890c149):

Evidence axis Current status
Project-owned DEV entry implementations 15/81
Remaining nonreturning stubs 66/81
Independently verified reference BIOS ABIs 0/81
Permitted reference BIOS JSR entries 0/81
Demonstrated retail-game title screens 0
Release eligibility false

Upcoming work includes safely characterizing the first required CD-related API contracts, replacing one stub at a time, and refining IPL address-range handling. Work in open draft PRs, including wider LBA support, is not counted as a merged capability.

The project is still far from a distributable, compatible System Card. But reaching an observable BIOS call boundary on real local disc layouts provides a more concrete target for the next implementation step than merely improving synthetic boot tests.

Repository: https://github.com/mao2009/oss-pce-cd-bios

Implementation evidence: https://github.com/mao2009/oss-pce-cd-bios/blob/main/docs/status.md

This is an independent project, unaffiliated with NEC, Hudson Soft, Konami, or other rights holders. It does not distribute proprietary BIOS images, retail game data, or extracted commercial code.