-
Notifications
You must be signed in to change notification settings - Fork 10
32x: Notes and quirks
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.
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.
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)
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.
MASTER unexpected reg write, addr: 412c, 0 LONG //can be ignored
Controller detection code relies on hardware delays (ie. lines/bits toggling not instantly - check (?))
Uses SCI, Sh2 TRAPA
Uses EEPROM
Homebrew, see https://github.com/cherishprojects/sopwith32x
Requires the FRT for timing, set the following property:
helios.32x.sh2.frt=true