diff --git a/src/mame/drivers/pgm.c b/src/mame/drivers/pgm.c index c6c3b1ba358..9e71af5bb7c 100644 --- a/src/mame/drivers/pgm.c +++ b/src/mame/drivers/pgm.c @@ -3688,7 +3688,7 @@ ROM_START( happy6 ) // ROM_LOAD( "happy6_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) // for testing only, this is from the gladiator and wrong for this game. ROM_LOAD( "happy6_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP ) - ROM_LOAD( "happy6_igs027a_v100_japan.bin", 0x0188, 0x3e78, BAD_DUMP CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // from 'thegladpcb set' + ROM_LOAD( "happy6_igs027a_v100_china.bin", 0x0188, 0x3e78, CRC(ed530445) SHA1(05c92d649701be2541557b1334dd6c820ca1009e) ) ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data) */ @@ -4181,6 +4181,8 @@ GAME( 2003, thegladpcb, theglad, pgm_arm_type3, pgm, pgm_arm_type3_st GAME( 2005, svgpcb, svg, pgm_arm_type3, svg, pgm_arm_type3_state, svgpcb, ROT0, "IGS / Idea Factory", "S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05 S.V.G V100) (Japan, JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )// ARM time: 15:31:35 // PCB version only released in Japan? +GAME( 2004, happy6, pgm, pgm_arm_type3, happy6, pgm_arm_type3_state, happy6, ROT0, "IGS", "Happy 6-in-1 (ver. 101CN)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) + /* ----------------------------------------------------------------------------------------------------------------------- Partially Working, playable, but some imperfections -----------------------------------------------------------------------------------------------------------------------*/ @@ -4237,7 +4239,7 @@ GAME( 2004, kovlsjb, kovshp, pgm_arm_type1, kovsh, pgm_arm_type1_sta GAME( 2004, kovlsjba, kovshp, pgm_arm_type1, kovsh, pgm_arm_type1_state, kovlsqh2, ROT0, "bootleg", "Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 2)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ -GAME( 2004, happy6, pgm, pgm_arm_type3, happy6, pgm_arm_type3_state, happy6, ROT0, "IGS", "Happy 6-in-1 (ver. 101CN)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ + // this is kludged to boot but isn't really going to work properly without the real internal ROM GAME( 2005, svg, pgm, pgm_arm_type3, pgm, pgm_arm_type3_state, svg, ROT0, "IGS / Idea Factory", "S.V.G. - Spectral vs Generation (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // label was 200, but it's code rev 201? // ARM time: 10:07:20 diff --git a/src/mame/includes/pgm.h b/src/mame/includes/pgm.h index 1ac2b4d2f86..5c88e73976c 100644 --- a/src/mame/includes/pgm.h +++ b/src/mame/includes/pgm.h @@ -353,6 +353,7 @@ public: DECLARE_READ16_MEMBER( dmnfrnt_main_speedup_r ); DECLARE_READ32_MEMBER( killbldp_speedup_r ); DECLARE_READ32_MEMBER( theglad_speedup_r ); + DECLARE_READ32_MEMBER( happy6_speedup_r ); DECLARE_READ32_MEMBER( svg_speedup_r ); DECLARE_MACHINE_RESET(pgm_arm_type3_reset); }; diff --git a/src/mame/machine/pgmprot_igs027a_type3.c b/src/mame/machine/pgmprot_igs027a_type3.c index 167dc297be8..bfb8fd16625 100644 --- a/src/mame/machine/pgmprot_igs027a_type3.c +++ b/src/mame/machine/pgmprot_igs027a_type3.c @@ -161,7 +161,7 @@ MACHINE_RESET_MEMBER(pgm_arm_type3_state, pgm_arm_type3_reset) if (!strcmp(machine().system().name, "theglad")) base = 0x3316; if (!strcmp(machine().system().name, "theglad100")) base = 0x3316; if (!strcmp(machine().system().name, "theglad101")) base = 0x3316; - if (!strcmp(machine().system().name, "happy6")) base = 0x3316; + if (!strcmp(machine().system().name, "happy6")) base = 0x3586; if (!strcmp(machine().system().name, "svgpcb")) base = 0x3a8e; if (base != -1) @@ -255,6 +255,15 @@ READ32_MEMBER(pgm_arm_type3_state::theglad_speedup_r ) return m_arm_ram2[0x00c/4]; } + +READ32_MEMBER(pgm_arm_type3_state::happy6_speedup_r ) +{ + int pc = space.device().safe_pc(); + if (pc == 0x0a08) space.device().execute().eat_cycles(500); + //else printf("theglad_speedup_r %08x\n", pc); + return m_arm_ram2[0x00c/4]; +} + // installed over rom READ32_MEMBER(pgm_arm_type3_state::svg_speedup_r ) { @@ -832,7 +841,6 @@ DRIVER_INIT_MEMBER(pgm_arm_type3_state,happy6) pgm_happy6_decrypt(machine()); svg_latch_init(); pgm_create_dummy_internal_arm_region_theglad(0); - pgm_patch_external_arm_rom_jumptable_theglada(0x5f1c0); - machine().device("prot")->memory().space(AS_PROGRAM).install_read_handler(0x1000000c, 0x1000000f, read32_delegate(FUNC(pgm_arm_type3_state::theglad_speedup_r),this)); + machine().device("prot")->memory().space(AS_PROGRAM).install_read_handler(0x1000000c, 0x1000000f, read32_delegate(FUNC(pgm_arm_type3_state::happy6_speedup_r),this)); }