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 01position 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.
Top comments (0)