RTL (GS rasterizer, EE core stub, platform bridge, LPDDR4B path), sim regression (272 TBs), docs, and tooling. Copyrighted PS2 content (BIOS, game code, GS dumps, and all dump-derived textures/traces) is excluded via .gitignore and stays local. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7.2 KiB
PS2 Implementation Workstreams
This file is the planning map for "what would we actually have to account for?" It is deliberately biased toward project decomposition rather than hardware history.
Executive Take
ao486 is a reasonable organizational comparison, but only partially.
Why the comparison fits:
- both projects are full-system bring-ups, not narrow cartridge-style cores,
- both need firmware-aware boot behavior,
- both need host/media integration,
- both benefit from strong subsystem boundaries and platform glue isolation,
- both will need serious debug instrumentation.
Why the comparison breaks:
- PS2 leans harder on DMA orchestration and coprocessor interaction,
- PS2 has a more central "packetized graphics path" problem,
- PS2 has a stricter dual-CPU story with visible EE<->IOP coordination,
- PS2 includes vector units and fixed-function graphics behavior that are not naturally analogous to a PC chipset.
My planning conclusion: treat this as ao486-class or harder, but not
ao486-shaped internally.
Workstream Map
1. Platform shell integration
Needed work:
- retroDE top-level wrapper,
- clock/reset sequencing,
- HDMI/video adaptation strategy,
- audio output integration,
- HPS bridge register map,
- manifest/backend planning.
Questions:
- What clocks are generated locally versus inherited from the shared shell?
- Does the first implementation target native-like timings internally and adapt outward, or simplify early output into a framebuffer path?
2. Main memory architecture
Needed work:
- 32 MiB EE main RAM behavior,
- 2 MiB IOP RAM behavior,
- 16 KiB scratchpad behavior,
- GS VRAM model,
- SPU2 RAM model,
- BIOS ROM visibility,
- arbitration between execution units, DMA, and graphics paths.
This is one of the hardest planning areas because the PS2 is not just "shared DDR plus a CPU." Memory placement, visibility, and access rules are part of the software contract.
3. EE / R5900 core
Needed work:
- MIPS III base behavior,
- relevant MIPS IV extensions,
- MMI instructions,
- exception / interrupt behavior,
- COP0 system behavior,
- FPU behavior and edge cases,
- TLB / mapping behavior or a scoped approximation if a staged bring-up allows.
A key planning question is whether there is any reusable R5900 implementation candidate, or whether the project would require a major custom core effort.
4. VU / VIF complex
Needed work:
- VU0 and VU1 execution model,
- local code/data memories,
- microprogram upload path,
- VIF unpack / packet interpretation,
- synchronization rules between EE, VIF, VU, and GIF.
This is a major reason the project is not just "CPU + GPU." A lot of PS2-era software performance depends on this path.
5. DMAC
Needed work:
- per-channel register behavior,
- channel scheduling / priority,
- stall / ring / status behavior,
- GIF, VIF, SIF, IPU, and scratchpad transfer semantics,
- interrupt generation.
If the DMAC is wrong, everything looks randomly broken. This is likely a top-tier subsystem for instrumentation and standalone tests.
6. GIF + GS
Needed work:
- GIF tag/path handling,
- PATH prioritization behavior,
- GS command/register decode,
- VRAM layout / swizzle / formats,
- framebuffer / zbuffer behavior,
- display controller / output timing strategy,
- enough rendering fidelity to pass real software.
This is probably the subsystem most likely to dominate bring-up time after the CPU/memory base exists.
7. IOP subsystem
Needed work:
- IOP CPU behavior,
- IOP RAM and I/O space,
- IOP DMA engine,
- interrupt/timer behavior,
- module boot expectations from BIOS,
- PS1-legacy-derived hardware blocks used in PS2 mode.
For planning purposes, the IOP should be treated as a real subsystem, not as "peripheral glue."
8. SIF and EE<->IOP coordination
Needed work:
- SIF registers,
- DMA channels on both sides,
- command/flag behavior,
- RPC-visible behavior as exercised by system software.
This is likely one of the first places where "mostly works" breaks down when moving from demos to real software.
9. Audio path
Needed work:
- SPU2 register behavior,
- SPU2 RAM behavior,
- DMA and AutoDMA cases,
- output mixing and timing,
- bridge into retroDE audio output.
A staged project might boot without accurate audio, but a believable PS2 core cannot stop there.
10. Media and storage
Needed work:
- CDVD-visible behavior,
- optional HDD / DEV9 strategy,
- BIOS expectations around media presence,
- HPS-side image mounting or file-backed emulation.
This is one of the best arguments for an ao486-style host integration layer.
Media handling will almost certainly live partly on the HPS side.
11. Input and memory cards
Needed work:
- SIO2-visible controller path,
- memory card protocol / presence behavior,
- mapping retroDE input stack to DualShock-compatible semantics.
The good news is the retroDE platform already contains wired DualShock 2 controller work. That may help at the platform-input layer, even though it does not solve PS2 console-side SIO2 semantics by itself.
12. BIOS / firmware strategy
Questions to settle early:
- Real dumped BIOS only?
- Any HLE stubs for debug-only bring-up?
- What is the policy for user-supplied ROM images and module assets?
This decision changes the bring-up plan significantly. A real BIOS path is more authentic and more demanding. An HLE debug path may shorten early validation but adds its own maintenance burden.
13. Debug and verification infrastructure
Needed work:
- trace taps for EE fetch/decode/exception flow,
- DMAC channel traces,
- GIF/GS packet capture,
- IOP/SIF event logging,
- golden-reference comparison points against emulators,
- tiny directed tests for memory map, DMA, VIF, GS, and SIF.
This project should probably assume that debug plumbing is a first-class feature, not an afterthought.
Suggested phased plan
Phase 0: architecture lock
- choose upstream/reference strategy,
- choose BIOS policy,
- choose host/media policy,
- choose first display strategy,
- define subsystem boundaries.
Phase 1: scaffold and observability
- create repo skeleton,
- define register/bridge map,
- add debug plumbing and trace formats,
- decide validation harnesses.
Phase 2: minimal EE boot
- RAM/ROM map,
- reset vectors,
- enough EE behavior for BIOS progress,
- proof-of-life traces.
Phase 3: first graphics proof
- minimal DMAC + GIF + GS path,
- simple visible output,
- likely driven by tiny test payloads before commercial software.
Phase 4: IOP and SIF
- IOP bootstrap,
- SIF messaging and DMA,
- enough coordination for deeper BIOS progress.
Phase 5: completeness layers
- VIF/VU correctness,
- SPU2,
- CDVD / DEV9 / storage,
- controller and memory card semantics,
- broader software compatibility work.
Bottom line
If the question is "is this closer to ao486 than to the simpler retroDE
cores?", the answer is yes.
If the question is "can we mostly copy the ao486 strategy and just swap the
payload?", the answer is no.
The safe way to start is:
- treat PS2 as a full-system architecture project,
- lock memory / firmware / host integration decisions early,
- build around subsystem ownership and instrumentation,
- aim for staged proof-of-life milestones instead of "boots games" as the first success bar.