mirror of
https://github.com/holub/mame
synced 2025-04-26 10:13:37 +03:00
shuffle happy6 gfx data around (nw)
This commit is contained in:
parent
8da0f4dfd1
commit
ba9300d4b6
@ -4225,7 +4225,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, pgm, 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 */
|
||||
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 */
|
||||
|
||||
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
|
||||
GAME( 2005, svgpcb, svg, pgm_arm_type3, pgm, 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) (JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // ARM time: 15:31:35
|
||||
|
@ -348,6 +348,8 @@ public:
|
||||
void pgm_create_dummy_internal_arm_region(int size);
|
||||
void pgm_patch_external_arm_rom_jumptable_theglada(int base);
|
||||
void pgm_create_dummy_internal_arm_region_theglad(void);
|
||||
void pgm_descramble_happy6(UINT8* src);
|
||||
void pgm_descramble_happy6_2(UINT8* src);
|
||||
void svg_latch_init();
|
||||
DECLARE_READ32_MEMBER( dmnfrnt_speedup_r );
|
||||
DECLARE_READ16_MEMBER( dmnfrnt_main_speedup_r );
|
||||
@ -503,6 +505,7 @@ INPUT_PORTS_EXTERN( dw2001 );
|
||||
|
||||
MACHINE_CONFIG_EXTERN( pgm_arm_type3 );
|
||||
INPUT_PORTS_EXTERN(theglad);
|
||||
INPUT_PORTS_EXTERN(happy6);
|
||||
|
||||
/*----------- defined in machine/pgmprot4.c -----------*/
|
||||
|
||||
|
@ -159,6 +159,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 (base != -1)
|
||||
{
|
||||
@ -643,12 +644,87 @@ DRIVER_INIT_MEMBER(pgm_arm_type3_state,dmnfrnt)
|
||||
share16[0x158/2] = 0x0005;
|
||||
}
|
||||
|
||||
// todo, collapse these to an address swap
|
||||
void pgm_arm_type3_state::pgm_descramble_happy6(UINT8* src)
|
||||
{
|
||||
UINT8* buffer = auto_alloc_array(machine(), UINT8, 0x800000);
|
||||
int writeaddress = 0;
|
||||
|
||||
for (int j = 0; j < 0x800; j += 0x200)
|
||||
{
|
||||
for (int i = j; i < 0x800000; i += 0x800)
|
||||
{
|
||||
memcpy(buffer + writeaddress, src + i, 0x200);
|
||||
writeaddress += 0x200;
|
||||
}
|
||||
}
|
||||
memcpy(src, buffer, 0x800000);
|
||||
auto_free(machine(), buffer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void pgm_arm_type3_state::pgm_descramble_happy6_2(UINT8* src)
|
||||
{
|
||||
UINT8* buffer = auto_alloc_array(machine(), UINT8, 0x800000);
|
||||
int writeaddress = 0;
|
||||
for (int k = 0; k < 0x800000; k += 0x100000)
|
||||
{
|
||||
for (int j = 0; j < 0x40000; j += 0x10000)
|
||||
{
|
||||
for (int i = j; i < 0x100000; i += 0x40000)
|
||||
{
|
||||
memcpy(buffer + writeaddress, src + i + k, 0x10000);
|
||||
writeaddress += 0x10000;
|
||||
}
|
||||
}
|
||||
}
|
||||
memcpy(src, buffer, 0x800000);
|
||||
auto_free(machine(), buffer);
|
||||
}
|
||||
|
||||
INPUT_PORTS_START( happy6 )
|
||||
PORT_INCLUDE ( pgm )
|
||||
|
||||
PORT_START("RegionHack") /* Region - actually supplied by protection device */
|
||||
PORT_CONFNAME( 0x00ff, 0x0000, DEF_STR( Region ) )
|
||||
PORT_CONFSETTING( 0x0000, DEF_STR( China ) )
|
||||
PORT_CONFSETTING( 0x0001, DEF_STR( Taiwan ) )
|
||||
PORT_CONFSETTING( 0x0002, DEF_STR( Hong_Kong ) )
|
||||
PORT_CONFSETTING( 0x0003, "Singapore" )
|
||||
PORT_CONFSETTING( 0x0004, "Oversea" ) // unlikely this actually exists, there's no english anything!
|
||||
PORT_CONFSETTING( 0x00ff, "Don't Change" ) // don't hack the region
|
||||
INPUT_PORTS_END
|
||||
|
||||
DRIVER_INIT_MEMBER(pgm_arm_type3_state,happy6)
|
||||
{
|
||||
UINT8 *src;
|
||||
|
||||
src = (UINT8 *)(machine().root_device().memregion("tiles")->base()) + 0x180000;
|
||||
pgm_descramble_happy6(src);
|
||||
pgm_descramble_happy6_2(src);
|
||||
|
||||
src = (UINT8 *)(machine().root_device().memregion("sprcol")->base()) + 0x000000;
|
||||
pgm_descramble_happy6(src);
|
||||
pgm_descramble_happy6_2(src);
|
||||
|
||||
src = (UINT8 *)(machine().root_device().memregion("sprcol")->base()) + 0x0800000;
|
||||
pgm_descramble_happy6(src);
|
||||
pgm_descramble_happy6_2(src);
|
||||
|
||||
src = (UINT8 *)(machine().root_device().memregion("sprmask")->base());
|
||||
pgm_descramble_happy6(src);
|
||||
pgm_descramble_happy6_2(src);
|
||||
|
||||
src = (UINT8 *)(machine().root_device().memregion("ics")->base()) + 0x400000;
|
||||
pgm_descramble_happy6(src);
|
||||
pgm_descramble_happy6_2(src);
|
||||
|
||||
svg_basic_init();
|
||||
pgm_happy6_decrypt(machine());
|
||||
svg_latch_init();
|
||||
pgm_create_dummy_internal_arm_region_theglad();
|
||||
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));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user