Raiden II / DX high-score saving — RE findings
Sorry for the necro, but everything I've seen from RE analysis points to high score saving being an urban legend.
TL/DR: I reverse-engineered the high-score path in Raiden II and Raiden DX and tested rtw's "magic value in the custom" idea directly. Across every ROM revision I could run, the main CPU performs zero reads from the battery-backed custom at boot. That means it's impossible for the main CPU to be checking any "magic word" read from the battery backed custom. There is also no save/restore code in any of them.
More details:
What the code does (both games, confirmed by disassembly + live MAME tracing):
- At every power-on the boot routine unconditionally zero-fills all work RAM, then builds the high-score table from hardcoded ROM defaults (R2: a compute loop; DX: copied from per-course ROM tables, initials hardcoded to "***"). It reads no saved data. The display/name-entry code only ever touches that volatile work-RAM table. Nothing writes saved scores into it — I tapped every write to the table region and only the wipe and the default-builder ever fire.
Testing rtw's hypothesis (could the SEI252 hold a magic value the CPU checks?):
- This was the right place to look, and it's the one thing MAME-side traces miss, because MAME doesn't map the SEI252's interface — so any CPU access to it shows up as *unmapped*. I logged unmapped accesses across a full boot. Result: 92 unmapped writes (COP microcode / sprite setup), zero unmapped reads. The CPU programs the customs but never reads a value back from them. I also traced the COP (SEI1000) itself — it only does the per-frame sprite DMA and standard math macros; it never touches the score region or reads the SEI252.
The variant sweep (the interesting part):
- Since the difficulty tiers are genuinely different builds, I ran the same unmapped-read test on ~20 sets: raiden2j, raiden2 (US Fabtek — turns out it's 2 bytes from raiden2j, both a region tag), raiden2u, the *easier* family (raiden2e/eu/ea/eua/eub/es/i/nl/sw — including the different-RAM-layout builds), the *harder* (raiden2k, raiden2dx), the 4-ROM prototype (raiden2eup), and Raiden DX in every region I have. All of them: 0 custom reads. (raiden2g/hk were the only outliers — both fail romset verification and crash, and they're single-ROM region clones of raiden2 anyway.)
On the battery: it powers only the SEI252 (matches twistedsymphony's trace; I confirmed it on my own board — work RAM runs on plain +5V, not backed). That's the sprite-key suicide cell, and it's redundant on Raiden 2/DX because the keys are reprogrammed from ROM every boot — which is why boards run perfectly with it dead or removed.
The one thing software analysis can't settle: the SEI252's internal SRAM is a battery-backed, undocumented black box that MAME doesn't emulate. I can't see inside it. But it's a sprite-decryption chip with no path to the score RAM, and no revision ever reads it for that purpose — so every piece of evidence we *can* inspect says the feature doesn't exist.
Credit to twistedsymphony's earlier teardown for the battery trace and the first look at the default-table builder — this lines up with and extends it.