diff --git a/src/mame/drivers/pgm.c b/src/mame/drivers/pgm.c index 02527ee10cf..0292d5b394a 100644 --- a/src/mame/drivers/pgm.c +++ b/src/mame/drivers/pgm.c @@ -3195,7 +3195,7 @@ ROM_START( theglad ) ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ ROM_LOAD( "thegladpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP ) - ROM_LOAD( "thegladpcb_igs027a.bin", 0x0188, 0x3e78, CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // from 'thegladpcb set' + ROM_LOAD( "thegladpcb_igs027a_v100_japan.bin", 0x0188, 0x3e78, CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // from 'thegladpcb set' ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */ ROM_LOAD( "v107.u26", 0x000000, 0x200000, CRC(f7c61357) SHA1(52d31c464dfc83c5371b078cb6b73c0d0e0d57e3) ) @@ -3224,7 +3224,8 @@ ROM_START( theglad100 ) // is this actually a pre-v100 proto? ROM_LOAD16_WORD_SWAP( "u6.rom", 0x100000, 0x080000, CRC(14c85212) SHA1(8d2489708e176a2c460498a13173be01f645b79e) ) ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ - ROM_LOAD( "theglada_igs027a.bin", 0x0000, 0x4000, NO_DUMP ) // this set clearly uses a different internal rom, the pointers in the external ROM are wrong for the v100 rom. + ROM_LOAD( "thegladpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP ) + ROM_LOAD( "thegladpcb_igs027a_older.bin", 0x0188, 0x3e78, BAD_DUMP CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // this is wrong for this set, we patch it to work ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */ ROM_LOAD( "u2.rom", 0x000000, 0x200000, CRC(c7bcf2ae) SHA1(10bc012c83987f594d5375a51bc4be2e17568a81) ) @@ -3255,7 +3256,7 @@ ROM_START( theglad101 ) ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ ROM_LOAD( "thegladpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP ) - ROM_LOAD( "thegladpcb_igs027a.bin", 0x0188, 0x3e78, CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // from 'thegladpcb set' + ROM_LOAD( "thegladpcb_igs027a_v100_japan.bin", 0x0188, 0x3e78, CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // from 'thegladpcb set' ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */ ROM_LOAD( "v101.u26", 0x000000, 0x200000, CRC(23faec02) SHA1(9065d55c2a14e6889e735a452bbc32530056645a) ) @@ -3279,7 +3280,6 @@ ROM_START( theglad101 ) ROM_END - ROM_START( thegladpcb ) ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD16_WORD_SWAP( "bios.42", 0x000000, 0x020000, CRC(517cf7a2) SHA1(f5720b29e3be6ec22be03a768618cb2a1aa4ade7) ) @@ -3287,27 +3287,28 @@ ROM_START( thegladpcb ) ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ ROM_LOAD( "thegladpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP ) - ROM_LOAD( "thegladpcb_igs027a.bin", 0x0188, 0x3e78, CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // from 'thegladpcb set' + ROM_LOAD( "thegladpcb_igs027a_v100_japan.bin", 0x0188, 0x3e78, CRC(d7f06e2d) SHA1(9c3aca7a487f5329d84731e2c63d5ed591bf9d24) ) // from 'thegladpcb set' ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */ - ROM_LOAD( "igs.62", 0x000000, 0x200000, CRC(0f3f511e) SHA1(28dd8d27495cec86e968a3ea549c5b30513dbb6e) ) + ROM_LOAD( "igs_v100.62", 0x000000, 0x200000, CRC(0f3f511e) SHA1(28dd8d27495cec86e968a3ea549c5b30513dbb6e) ) ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ - PGM_VIDEO_BIOS - ROM_LOAD( "t04601.u33", 0x180000, 0x800000, CRC(e5dab371) SHA1(2e3c93958eb0326b6b84b95c2168626f26bbac76) ) + ROM_LOAD( "pgm_t01s.u72", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // standard PGM tx bios + ROM_LOAD( "t04601.u71", 0x180000, 0x800000, CRC(e5dab371) SHA1(2e3c93958eb0326b6b84b95c2168626f26bbac76) ) ROM_REGION( 0x1800000, "sprcol", 0 ) /* Sprite Colour Data */ - ROM_LOAD( "a04601.u2", 0x0000000, 0x0800000, CRC(d9b2e004) SHA1(8e1882b800fe9f12d7d49303e7417ba5b6f8ef85) ) - ROM_LOAD( "a04602.u4", 0x0800000, 0x0800000, CRC(14f22308) SHA1(7fad54704e8c97eab723f53dfb50fb3e7bb606d2) ) - ROM_LOAD( "a04603.u6", 0x1000000, 0x0800000, CRC(8f621e17) SHA1(b0f87f378e0115d0c95017ca0f1b0d508827a7c6) ) + ROM_LOAD( "a04601.u30", 0x0000000, 0x0800000, CRC(d9b2e004) SHA1(8e1882b800fe9f12d7d49303e7417ba5b6f8ef85) ) + ROM_LOAD( "a04602.u31", 0x0800000, 0x0800000, CRC(14f22308) SHA1(7fad54704e8c97eab723f53dfb50fb3e7bb606d2) ) + ROM_LOAD( "a04603.u32", 0x1000000, 0x0800000, CRC(8f621e17) SHA1(b0f87f378e0115d0c95017ca0f1b0d508827a7c6) ) ROM_REGION( 0x1000000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ - ROM_LOAD( "b04601.u11", 0x0000000, 0x0800000, CRC(ee72bccf) SHA1(73c25fe659f6c903447066e4ef83d2f580449d76) ) - ROM_LOAD( "b04602.u12", 0x0800000, 0x0400000, CRC(7dba9c38) SHA1(a03d509274e8f6a500a7ebe2da5aab8bed4e7f2f) ) + ROM_LOAD( "b04601.u40", 0x0000000, 0x0800000, CRC(ee72bccf) SHA1(73c25fe659f6c903447066e4ef83d2f580449d76) ) + ROM_LOAD( "b04602.u41", 0x0800000, 0x0400000, CRC(7dba9c38) SHA1(a03d509274e8f6a500a7ebe2da5aab8bed4e7f2f) ) ROM_REGION( 0x1000000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */ - PGM_AUDIO_BIOS - ROM_LOAD( "w04601.u1", 0x400000, 0x800000, CRC(5f15ddb3) SHA1(c38dcef8e06802a84e42a7fc9fa505475fc3ac65) ) + ROM_LOAD( "pgm_m01s.u4", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // standard PGM sample bios + ROM_LOAD( "w04601.u8", 0x400000, 0x800000, CRC(5f15ddb3) SHA1(c38dcef8e06802a84e42a7fc9fa505475fc3ac65) ) + ROM_LOAD( "igs29.bin", 0xc00000, 0x200000, CRC(51acb395) SHA1(65a2ecd3de2ff782f2aa0f0f905f9b18323aea64) ) // extra ROM on the PCB version for the Japanese music ROM_END ROM_START( oldsplus ) @@ -4159,9 +4160,9 @@ GAME( 2005, killbldp, pgm, pgm_arm_type3, pgm, pgm_arm_type3_state GAME( 2003, theglad, pgm, pgm_arm_type3, theglad, pgm_arm_type3_state, theglad, ROT0, "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V101) (ARM label V107, ROM 06/06/03 SHEN JIAN V107)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // ARM time: 16:17:27 GAME( 2003, theglad101, theglad, pgm_arm_type3, theglad, pgm_arm_type3_state, theglad, ROT0, "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // ARM time: 14:06:44 // the v100 68k ROM on this is older than the v101 set, this set also uses a different internal ROM to everything else, must be a very early release, maybe pre v100 proto with v100 strings? -GAME( 2003, theglad100, theglad, pgm_arm_type3, theglad, pgm_arm_type3_state, theglad, ROT0, "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // ARM time: 10:39:25 -// newer than ARM V100 Cart, older than ARM V101 Cart, same 68k rom as V101 Cart -GAME( 2003, thegladpcb, theglad, pgm_arm_type3, theglad, pgm_arm_type3_state, theglad, ROT0, "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )// ARM time: 16:32:21 +GAME( 2003, theglad100, theglad, pgm_arm_type3, theglad, pgm_arm_type3_state, theglada, ROT0, "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* need correct internal rom of IGS027A - we currently patch the one we have */ // ARM time: 10:39:25 +// newer than ARM V100 Cart, older than ARM V101 Cart, same 68k rom as V101 Cart. +GAME( 2003, thegladpcb, theglad, pgm_arm_type3, pgm, pgm_arm_type3_state, theglad, ROT0, "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )// ARM time: 16:32:21 /* ----------------------------------------------------------------------------------------------------------------------- diff --git a/src/mame/includes/pgm.h b/src/mame/includes/pgm.h index 7c805154462..b48b9eef131 100644 --- a/src/mame/includes/pgm.h +++ b/src/mame/includes/pgm.h @@ -80,42 +80,9 @@ public: DECLARE_WRITE8_MEMBER(z80_l3_w); DECLARE_WRITE16_MEMBER(pgm_tx_videoram_w); DECLARE_WRITE16_MEMBER(pgm_bg_videoram_w); - DECLARE_DRIVER_INIT(ket); - DECLARE_DRIVER_INIT(killbld); + DECLARE_DRIVER_INIT(pgm); - DECLARE_DRIVER_INIT(kovsh); - DECLARE_DRIVER_INIT(killbldp); - DECLARE_DRIVER_INIT(ddp2); - DECLARE_DRIVER_INIT(drgw2j); - DECLARE_DRIVER_INIT(kov2); - DECLARE_DRIVER_INIT(puzzli2); - DECLARE_DRIVER_INIT(dw2001); - DECLARE_DRIVER_INIT(martmast); - DECLARE_DRIVER_INIT(kovlsqh2); - DECLARE_DRIVER_INIT(espgal); - DECLARE_DRIVER_INIT(happy6); - DECLARE_DRIVER_INIT(oldsplus); - DECLARE_DRIVER_INIT(kovboot); - DECLARE_DRIVER_INIT(kovshp); - DECLARE_DRIVER_INIT(kovshxas); - DECLARE_DRIVER_INIT(theglad); - DECLARE_DRIVER_INIT(kov2p); - DECLARE_DRIVER_INIT(olds); - DECLARE_DRIVER_INIT(svg); - DECLARE_DRIVER_INIT(photoy2k); - DECLARE_DRIVER_INIT(svgpcb); - DECLARE_DRIVER_INIT(dmnfrnt); - DECLARE_DRIVER_INIT(dw2v100x); - DECLARE_DRIVER_INIT(kovqhsgs); - DECLARE_DRIVER_INIT(ddp3); - DECLARE_DRIVER_INIT(drgw2c); - DECLARE_DRIVER_INIT(dwpc); - DECLARE_DRIVER_INIT(kov); - DECLARE_DRIVER_INIT(py2k2); - DECLARE_DRIVER_INIT(drgw2); - DECLARE_DRIVER_INIT(drgw3); - DECLARE_DRIVER_INIT(orlegend); - DECLARE_DRIVER_INIT(pstar); + TILE_GET_INFO_MEMBER(get_pgm_tx_tilemap_tile_info); TILE_GET_INFO_MEMBER(get_pgm_bg_tilemap_tile_info); DECLARE_VIDEO_START(pgm); @@ -359,6 +326,7 @@ public: optional_device m_prot; DECLARE_DRIVER_INIT(theglad); + DECLARE_DRIVER_INIT(theglada); DECLARE_DRIVER_INIT(svg); DECLARE_DRIVER_INIT(svgpcb); DECLARE_DRIVER_INIT(killbldp); diff --git a/src/mame/machine/pgmprot_igs027a_type3.c b/src/mame/machine/pgmprot_igs027a_type3.c index d37d1fa29e6..e1f51de7dc9 100644 --- a/src/mame/machine/pgmprot_igs027a_type3.c +++ b/src/mame/machine/pgmprot_igs027a_type3.c @@ -154,8 +154,8 @@ MACHINE_RESET_MEMBER(pgm_arm_type3_state, pgm_arm_type3_reset) int base = -1; 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, "thegladpcb")) base = 0x3316; if (base != -1) { @@ -478,14 +478,74 @@ DRIVER_INIT_MEMBER(pgm_arm_type3_state,theglad) machine().device("prot")->memory().space(AS_PROGRAM).install_read_handler(0x1000000c, 0x1000000f, read32_delegate(FUNC(pgm_arm_type3_state::theglad_speedup_r),this)); } +DRIVER_INIT_MEMBER(pgm_arm_type3_state, theglada) +{ + DRIVER_INIT_CALL(theglad); + + // we don't have the correct internal ROM for this version, so insead we use the one we have and patch the jump table in the external ROM + UINT32 subroutine_addresses[] = + { + 0x00FC, 0x00E8, 0x0110, 0x0150, 0x0194, 0x06C8, 0x071C, 0x0728, + 0x0734, 0x0740, 0x0784, 0x0794, 0x07FC, 0x0840, 0x086C, 0x0988, + 0x0A54, 0x0AA8, 0x0AD4, 0x0EB8, 0x0EF8, 0x0F2C, 0x0F3C, 0x0F78, + 0x0FA8, 0x0FD8, 0x1028, 0x1038, 0x1048, 0x1058, 0x1068, 0x1070, + 0x1090, 0x10B0, 0x10D4, 0x1100, 0x113C, 0x1198, 0x1234, 0x1258, + 0x127C, 0x12A8, 0x12E4, 0x1368, 0x142C, 0x0B10, 0x0B54, 0x0B74, + 0x0C08, 0x0C90, 0x0D18, 0x0D90, 0x1570, 0x1600, 0x1640, 0x1694, + 0x1730, 0x176C, 0x17AC, 0x17D8, 0x18C4, 0x18E0, 0x1904, 0x1930, + 0x19D8, 0x1A38, 0x1950, 0x1970, 0x1990, 0x19B8, 0x19C8, 0x1A9C, + 0x1AC4, 0x1AE8, 0x1B20, 0x1B48, 0x1B70, 0x1B8C, 0x1BB4, 0x1BD8, + 0x1BFC, 0x1C10, 0x1C24, 0x1CA0, 0x1D5C, 0x1D7C, 0x1D8C, 0x1DAC, + 0x1DCC, 0x1DE0, 0x1DF4, 0x1E1C, 0x1E2C, 0x1E60, 0x1E94, 0x1EA4, + 0x1ECC, 0x1ED8, 0x1EE4, 0x1F14, 0x1F44, 0x1FB4, 0x1FC4, 0x2040, + 0x20BC, 0x2140, 0x21C4, 0x2240, 0x22BC, 0x2340, 0x23C4, 0x23D0, + 0x2400, 0x2430, 0x244C, 0x245C, 0x246C, 0x2FCC, 0x3000, 0x3028, + 0x3050, 0x30A4, 0x30F8, 0x3120, 0x249C, 0x24C0, 0x27BC, 0x2B40, + 0x2BF4, 0x2CD8, 0x2E2C + }; + UINT16 *extprot = (UINT16 *)memregion("user1")->base(); + int base = 0x82078; + /* + 0x00C8,0x00B4,0x00DC,0x011C,0x0160,0x02DC,0x0330,0x033C, + 0x0348,0x0354,0x0398,0x03A8,0x0410,0x0454,0x0480,0x059C, + 0x0668,0x06BC,0x06E8,0x0ACC,0x0B0C,0x0B40,0x0B50,0x0B8C, + 0x0BBC,0x0BEC,0x0C3C,0x0C4C,0x0C5C,0x0C6C,0x0C7C,0x0C84, + 0x0CA4,0x0CC4,0x0CE8,0x0D14,0x0D50,0x0DAC,0x0E48,0x0E6C, + 0x0E90,0x0EBC,0x0EF8,0x0F7C,0x1040,0x0724,0x0768,0x0788, + 0x081C,0x08A4,0x092C,0x09A4,0x1184,0x1214,0x1254,0x12A8, + 0x1344,0x1380,0x13C0,0x13EC,0x14D8,0x14F4,0x1518,0x1544, + 0x15EC,0x164C,0x1564,0x1584,0x15A4,0x15CC,0x15DC,0x16B0, + 0x16D8,0x16FC,0x1734,0x175C,0x1784,0x17A0,0x17C8,0x17EC, + 0x1810,0x1824,0x1838,0x18B4,0x1970,0x1990,0x19A0,0x19C0, + 0x19E0,0x19F4,0x1A08,0x1A30,0x1A40,0x1A74,0x1AA8,0x1AB8, + 0x1AE0,0x1AEC,0x1AF8,0x1B28,0x1B58,0x1BC8,0x1BD8,0x1C54, + 0x1CD0,0x1D54,0x1DD8,0x1E54,0x1ED0,0x1F54,0x1FD8,0x1FE4, + 0x2014,0x2044,0x2060,0x2070,0x2080,0x2BE0,0x2C14,0x2C3C, + 0x2C64,0x2CB8,0x2D0C,0x2D34,0x20B0,0x20D4,0x23D0,0x2754, + 0x2808,0x28EC,0x2A40 + */ + + + for (int i = 0; i < 131; i++) + { +// UINT32 addr = extprot[(base/2)] | (extprot[(base/2) + 1] << 16); + extprot[(base / 2)] = subroutine_addresses[i]; + + base += 4; +// printf("%04x (%08x)\n", subroutine_addresses[i], addr ); + } + + +} + INPUT_PORTS_START( theglad ) PORT_INCLUDE ( pgm ) PORT_START("RegionHack") /* Region - actually supplied by protection device */ - PORT_CONFNAME( 0x00ff, 0x0006, DEF_STR( Region ) ) // oddly the game has no music when set to Japan, might be an emulation bug.. hack it to another region until we figure that out + PORT_CONFNAME( 0x00ff, 0x0006, DEF_STR( Region ) ) PORT_CONFSETTING( 0x0000, DEF_STR( China ) ) PORT_CONFSETTING( 0x0001, DEF_STR( Taiwan ) ) - PORT_CONFSETTING( 0x0002, DEF_STR( Japan ) ) + //PORT_CONFSETTING( 0x0002, DEF_STR( Japan ) ) // it doesn't appear that carts of the Japanese version were released, the PCB has an extra sample ROM used in Japanese mode for the music PORT_CONFSETTING( 0x0003, DEF_STR( Korea ) ) PORT_CONFSETTING( 0x0004, DEF_STR( Hong_Kong ) ) PORT_CONFSETTING( 0x0005, "Spanish Territories" )