Haze: documented where the crash happens in Mr. Kicker,no credit wanted

This commit is contained in:
Angelo Salese 2010-03-17 19:23:12 +00:00
parent f4dffd77c1
commit 37bd643357

View File

@ -26,6 +26,25 @@
Real games bugs:
- dquizgo2: bugged video test
Notes:
Mr Kicker appears to be broken due to problems with the Hyperstone CPU Core
It ends up trashing the registers containing the return value for a function
000018D6: MASK L51, L45, $1e00000
000018DC: CMPI L51, $c00000
000018E2: BE $18e6
000018E4: RET PC, L0
0003FA66: RET PC, L1 <-- no valid return value
00000000: CHK PC, PC causes jump to 0
It executes this code several times earlier before the crash, so I don't know
if it's some kind of nested call problem, or simply beacuse it's using a
different set of registers for the frame / call this time. (or if another
Hyperstone bug is trashing some of the code in RAM)
*********************************************************************/
#include "emu.h"
@ -290,6 +309,25 @@ static ADDRESS_MAP_START( finalgdr_io, ADDRESS_SPACE_IO, 32 )
AM_RANGE(0x60a0, 0x60a3) AM_DEVWRITE("oki", finalgdr_oki_bank_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( mrkicker_io, ADDRESS_SPACE_IO, 32 )
AM_RANGE(0x2400, 0x2403) AM_DEVREAD("eeprom", eeprom32_r)
AM_RANGE(0x4000, 0x4003) AM_DEVWRITE("eeprom", finalgdr_eeprom_w)
AM_RANGE(0x4040, 0x4043) AM_WRITE(finalgdr_prot_w)
AM_RANGE(0x6400, 0x6403) AM_READ(finalgdr_prot_r)
AM_RANGE(0x7000, 0x7007) AM_DEVREADWRITE8("ymsnd", ym2151_r, ym2151_w, 0x0000ff00)
// AM_RANGE(0x7400, 0x7403) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x0000ff00)
// AM_RANGE(0xxxxx, 0xxxxx) AM_WRITE(finalgdr_backupram_bank_w)
// AM_RANGE(0xxxxx, 0xxxxx) AM_READWRITE(finalgdr_backupram_r, finalgdr_backupram_w)
// AM_RANGE(0xxxxx, 0xxxxx) AM_READ_PORT("P1_P2")
// AM_RANGE(0xxxxx, 0xxxxx) AM_READ_PORT("SYSTEM")
// AM_RANGE(0xxxxx, 0xxxxx) AM_READNOP //?
// AM_RANGE(0xxxxx, 0xxxxx) AM_WRITE(flipscreen32_w) //?
// AM_RANGE(0xxxxx, 0xxxxx) AM_WRITE(finalgdr_prize_w)
// AM_RANGE(0xxxxx, 0xxxxx) AM_DEVWRITE("oki", finalgdr_oki_bank_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( jmpbreak_io, ADDRESS_SPACE_IO, 16 )
AM_RANGE(0x0c0, 0x0c3) AM_NOP // ?
AM_RANGE(0x100, 0x103) AM_WRITENOP // ?
@ -757,6 +795,17 @@ static MACHINE_DRIVER_START( finalgdr )
MDRV_IMPORT_FROM(sound_ym_oki)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( mrkicker )
MDRV_IMPORT_FROM(common)
MDRV_CPU_REPLACE("maincpu", E132T, 50000000) /* 50 MHz */
MDRV_CPU_PROGRAM_MAP(common_32bit_map)
MDRV_CPU_IO_MAP(mrkicker_io)
MDRV_NVRAM_HANDLER(finalgdr)
MDRV_IMPORT_FROM(sound_ym_oki)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( aoh )
MDRV_CPU_ADD("maincpu", E132XN, 20000000*4) /* 4x internal multiplier */
MDRV_CPU_PROGRAM_MAP(aoh_map)
@ -1912,6 +1961,6 @@ GAME( 2000, dquizgo2, 0, coolmini, common, dquizgo2, ROT0, "SemiCom",
GAME( 2000, misncrft, 0, misncrft, common, misncrft, ROT90, "Sun", "Mission Craft (version 2.4)", GAME_NO_SOUND )
GAME( 2000, mrdig, 0, mrdig, common, mrdig, ROT0, "Sun", "Mr. Dig", 0 ) /* Some PCB in game pics show a 2 VS mode, but how do you select? */
GAME( 2001, finalgdr, 0, finalgdr, finalgdr, finalgdr, ROT0, "SemiCom", "Final Godori (Korea, version 2.20.5915)", 0 )
GAME( 2001, mrkicker, 0, finalgdr, finalgdr, mrkicker, ROT0, "SemiCom", "Mr. Kicker", GAME_NOT_WORKING )
GAME( 2001, mrkicker, 0, mrkicker, finalgdr, mrkicker, ROT0, "SemiCom", "Mr. Kicker", GAME_NOT_WORKING )
GAME( 2001, wyvernwg, 0, wyvernwg, common, wyvernwg, ROT270, "SemiCom (Game Vision License)", "Wyvern Wings", GAME_NO_SOUND )
GAME( 2001, aoh, 0, aoh, aoh, aoh, ROT0, "Unico", "Age Of Heroes - Silkroad 2 (v0.63 - 2001/02/07)", 0 )