From 37bd643357d5d001e87ec2aff923668192d6172c Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Wed, 17 Mar 2010 19:23:12 +0000 Subject: [PATCH] Haze: documented where the crash happens in Mr. Kicker,no credit wanted --- src/mame/drivers/vamphalf.c | 51 ++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/vamphalf.c b/src/mame/drivers/vamphalf.c index b234d2db25e..fab5f45f776 100644 --- a/src/mame/drivers/vamphalf.c +++ b/src/mame/drivers/vamphalf.c @@ -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 )