Skip to content

32x: Notes and quirks

Federico Berti edited this page Sep 1, 2023 · 3 revisions

Ecco demo

MASTER bios compares MARS Initial & Security Program stored in the bios vs. the one stored in ROM; in this case they don't match.
The comparison starts @ 360h bios binary vs 400h cart binary, first diff at position 3a2h bios (436h cart)

The following instruction is different:
00000436 102D 0001 MOVE.B $0001(A5),D0 ; BIOS rom: TMSS check
00000436 1015 MOVE.B (A5),D0 ; Ecco rom: TMSS check - buggy

The Ecco demo was likely built with a previous MISP version, the official BIOS rom fixes the issue. Homebrew bioses that skip the security program check will obviously work.

Possible sync issue: due to timing with COMM ports the SH2 reset needs to actually stop the SH2s for a while.

Mars Check Program 02

The SLAVE SH2 is running some PWM interrupt driven code that attempts to play data starting at ROM address 0x1002C.
As the rom is size is 0x10000 (64 KBytes), this is not going to work; most emulators will read a stream of 0xFF, resulting in silence. (what about real HW?)
Turns out the available rom is likely to be missing the sound data at the end of the file.
The program expects to find raw PCM data in mono @11khz, if we concatenate a suitable WAVE file
cat mars_check02.bin my_wave.wav > mars_check02_play.bin
The resulting rom will now run in most emulators (and real HW I'd imagine) with the addition of background music.

Blackthorne

Requires proper masking of MD_INT_CTRL register at 0xA15102 as it sets the even byte by mistake (bit#2 = 1); it then reads back the registers expecting it to be zero (interrupt cleared)

Devster homebrew MD bios

There seems to be a bug in the AllBankSet method at the following line:
0x7e07 //moveq #8-1,d7 <- ko
0x7007 //moveq #8-1,d0 <- ok
The AllBankSet function is supposed to initialize the MD mapper registers ($A130F1 - $A130FF) to some given values.
However I'haven't seen any sw using that bios function, or loading any data from the vector ROM range 0xD4 <= PC < 0x100.

Fifa 96

MASTER unexpected reg write, addr: 412c, 0 LONG //can be ignored

WWF Raw

Controller detection code relies on hardware delays (ie. lines/bits toggling not instantly - check (?))

X-Men prototype

Uses SCI, Sh2 TRAPA

Nba Jam TE

Uses EEPROM

Sopwith32x

Homebrew, see https://github.com/cherishprojects/sopwith32x
Requires the FRT for timing, set the following property:
helios.32x.sh2.frt=true