From 955b50c843644b6adf8b94f2b9b871508e7ed11d Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sun, 14 Jan 2018 01:31:41 +1100 Subject: [PATCH] (nw) simulate protection for korosuke [iq_132] and resultant cleanup [Robbbert] --- src/mame/drivers/pacman.cpp | 100 +++++------------------------------- src/mame/includes/pacman.h | 6 --- 2 files changed, 12 insertions(+), 94 deletions(-) diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index 2fc3cf84d96..5bd1c3c0ce0 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -624,6 +624,8 @@ READ8_MEMBER(pacman_state::maketrax_special_port2_r) case 0x04: data |= 0x40; break; case 0x05: + case 0x0e: // korosuke + case 0x10: // korosuke data |= 0xc0; break; default: data &= 0x3f; break; @@ -687,48 +689,6 @@ READ8_MEMBER(pacman_state::mbrush_prot_r) return data; } -READ8_MEMBER(pacman_state::korosuke_special_port2_r) -{ - int data = ioport("DSW1")->read(); - int pc = m_maincpu->pcbase(); - - if ((pc == 0x196e) || (pc == 0x2387)) return data | 0x40; - - switch (offset) - { - case 0x01: - case 0x04: - data |= 0x40; break; - case 0x05: - data |= 0xc0; break; - default: - data &= 0x3f; break; - } - - return data; -} - -READ8_MEMBER(pacman_state::korosuke_special_port3_r) -{ - int pc = m_maincpu->pcbase(); - - if (pc == 0x0445) return 0x20; - - if ((pc == 0x115b) || (pc == 0x3ae6)) return 0x00; - - switch (offset) - { - case 0x00: - return 0x1f; - case 0x09: - return 0x30; - case 0x0c: - return 0x00; - default: - return 0x20; - } -} - /************************************* * @@ -1060,10 +1020,6 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") ADDRESS_MAP_END -static ADDRESS_MAP_START( patched_opcodes_map, AS_OPCODES, 8, pacman_state ) - AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM AM_SHARE("patched_opcodes") -ADDRESS_MAP_END - static ADDRESS_MAP_START( birdiy_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM @@ -3585,10 +3541,7 @@ static MACHINE_CONFIG_DERIVED( maketrax, pacman ) MCFG_MACHINE_RESET_OVERRIDE(pacman_state,maketrax) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( korosuke, pacman ) - MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_DECRYPTED_OPCODES_MAP(patched_opcodes_map) - +static MACHINE_CONFIG_DERIVED( korosuke, maketrax ) MCFG_DEVICE_MODIFY("mainlatch") // 8K on original boards MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // outputs 4-7 go to protection chip at 6P MACHINE_CONFIG_END @@ -5338,7 +5291,7 @@ ROM_END ROM_START( crush ) - ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for opcode copy to hack protection */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "crushkrl.6e", 0x0000, 0x1000, CRC(a8dd8f54) SHA1(4e3a973ea74a9e145c6997513b98fc80aa478442) ) ROM_LOAD( "crushkrl.6f", 0x1000, 0x1000, CRC(91387299) SHA1(3ad8c28e02c45667e32860953b157832445a82c8) ) ROM_LOAD( "crushkrl.6h", 0x2000, 0x1000, CRC(d4455f27) SHA1(53f8ffc28be664fa8a2d756b4c70045a3f041bea) ) @@ -5359,7 +5312,7 @@ ROM_END ROM_START( crushbl ) - ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for opcode copy to hack protection */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cr1.bin", 0x0000, 0x1000, CRC(e2e84cd1) SHA1(3fc5a9aa3ee219b386a1d0622547c77aca27533d) ) ROM_LOAD( "cr2.bin", 0x1000, 0x1000, CRC(ec020e6f) SHA1(eef9008c38a68ed20c1e3596016d97d4e72de9f2) ) ROM_LOAD( "cr3.bin", 0x2000, 0x1000, CRC(d4455f27) SHA1(53f8ffc28be664fa8a2d756b4c70045a3f041bea) ) // matches original @@ -5492,7 +5445,7 @@ ROM_START( crushrlf ) ROM_END ROM_START( crush3 ) - ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for opcode copy to hack protection */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "1.6e", 0x0000, 0x1000, CRC(50a1a776) SHA1(bdd5c2b0ce76744dedc3ff527a1f4fcfa38d193a) ) ROM_LOAD( "2.6f", 0x1000, 0x1000, CRC(5b03c1f8) SHA1(11fffe37817739bfe4524278a6ec4b3555b088a0) ) ROM_LOAD( "3.6h", 0x2000, 0x1000, CRC(ae5b39fb) SHA1(bf144f14baa3db5fc407488750183749d2b1ca8d) ) @@ -5539,7 +5492,7 @@ ROM_END ROM_START( crush5 ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code+64k for decrypted code */ + ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "crtwt.2", 0x10000, 0x10000, CRC(adbd21f7) SHA1(984b005cd7a73f697715ecb7a4d806024cb7596d) ) /* banked */ ROM_REGION( 0x4000, "gfx1", 0 ) @@ -5563,7 +5516,7 @@ ROM_END ROM_START( maketrax ) - ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for opcode copy to hack protection */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "maketrax.6e", 0x0000, 0x1000, CRC(0150fb4a) SHA1(ba41582d5432670654479b4bf6d938d2168858af) ) ROM_LOAD( "maketrax.6f", 0x1000, 0x1000, CRC(77531691) SHA1(68a450bcc8d832368d0f1cb2815cb5c03451796e) ) ROM_LOAD( "maketrax.6h", 0x2000, 0x1000, CRC(a2cdc51e) SHA1(80d80235cda3ce19c1dbafacf3d47b1325ad4728) ) @@ -5584,7 +5537,7 @@ ROM_END ROM_START( maketrxb ) - ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for opcode copy to hack protection */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "maketrax.6e", 0x0000, 0x1000, CRC(0150fb4a) SHA1(ba41582d5432670654479b4bf6d938d2168858af) ) ROM_LOAD( "maketrax.6f", 0x1000, 0x1000, CRC(77531691) SHA1(68a450bcc8d832368d0f1cb2815cb5c03451796e) ) ROM_LOAD( "maketrxb.6h", 0x2000, 0x1000, CRC(6ad342c9) SHA1(5469f3952adc682725a71602b4a00a7751e48a99) ) @@ -5604,7 +5557,7 @@ ROM_START( maketrxb ) ROM_END ROM_START( korosuke ) - ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for opcode copy to hack protection */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "kr.6e", 0x0000, 0x1000, CRC(69f6e2da) SHA1(5f06523122d81a079bed080a16b44adb90aa95ad) ) ROM_LOAD( "kr.6f", 0x1000, 0x1000, CRC(abf34d23) SHA1(6ae16fb8208037fd8b752076dd97e3da09e5cb8f) ) ROM_LOAD( "kr.6h", 0x2000, 0x1000, CRC(76a2e2e2) SHA1(570aaed91279caab9274024e5a6176bdfe85bedd) ) @@ -5694,7 +5647,7 @@ Note */ ROM_START( crushs ) - ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for opcode copy to hack protection */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "11105-0.0j", 0x0000, 0x1000, CRC(dd425429) SHA1(dc3fd8b71384c25dc807caea9187a775144ad24e) ) ROM_LOAD( "11105-1.1j", 0x1000, 0x1000, CRC(f9d89eef) SHA1(4de911b68cf6044d1e50fd3f455a61327483540b) ) ROM_LOAD( "11105-2.2j", 0x2000, 0x1000, CRC(40c23a27) SHA1(b59586ec18446b866b9ef267bb876c410f2972b0) ) @@ -6905,35 +6858,6 @@ DRIVER_INIT_MEMBER(pacman_state,mbrush) m_maincpu->space(AS_PROGRAM).install_read_handler(0x5080, 0x50ff, read8_delegate(FUNC(pacman_state::mbrush_prot_r),this)); } -void pacman_state::korosuke_rom_decode() -{ - uint8_t *rom = memregion("maincpu")->base(); - - /* patch protection using a copy of the opcodes so ROM checksum */ - /* tests will not fail */ - - memcpy(m_patched_opcodes,rom,0x4000); - - m_patched_opcodes[0x044c] = 0xc9; - m_patched_opcodes[0x1973] = 0x18; - m_patched_opcodes[0x238c] = 0xc9; - m_patched_opcodes[0x3ae9] = 0xe6; /* not changed */ - m_patched_opcodes[0x3aeb] = 0x00; - m_patched_opcodes[0x3aec] = 0xc9; - m_patched_opcodes[0x3af1] = 0x86; - m_patched_opcodes[0x3af2] = 0xc0; - m_patched_opcodes[0x3af3] = 0xb0; -} - -DRIVER_INIT_MEMBER(pacman_state,korosuke) -{ - /* set up protection handlers */ - m_maincpu->space(AS_PROGRAM).install_read_handler(0x5080, 0x5080, read8_delegate(FUNC(pacman_state::korosuke_special_port2_r),this)); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x50c0, 0x50ff, read8_delegate(FUNC(pacman_state::korosuke_special_port3_r),this)); - - korosuke_rom_decode(); -} - DRIVER_INIT_MEMBER(pacman_state,ponpoko) { /* The gfx data is swapped wrt the other Pac-Man hardware games. */ @@ -7386,7 +7310,7 @@ GAME( 1981, crush4, crush, pacman, maketrax, pacman_state, eyes, ROT GAME( 1981, crush5, crush, crush4, crush4, pacman_state, 0, ROT90, "Alpha Denshi Co. / Kural TWT", "Crush Roller (set 5)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, maketrax, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, maketrxb, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, korosuke, crush, korosuke, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel? +GAME( 1981, korosuke, crush, korosuke, korosuke, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel? GAME( 1981, crushrlf, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (Famare SA PCB)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, crushbl, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, crushbl2, crush, maketrax, mbrush, pacman_state, mbrush, ROT90, "bootleg", "Crush Roller (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h index 8f0ae2d9a8d..61316d8a8f2 100644 --- a/src/mame/includes/pacman.h +++ b/src/mame/includes/pacman.h @@ -26,7 +26,6 @@ public: , m_rocktrv2_prot_data(*this, "rocktrv2_prot") , m_gfxdecode(*this, "gfxdecode") , m_palette(*this, "palette") - , m_patched_opcodes(*this, "patched_opcodes") { } required_device m_maincpu; @@ -43,7 +42,6 @@ private: optional_shared_ptr m_rocktrv2_prot_data; required_device m_gfxdecode; required_device m_palette; - optional_shared_ptr m_patched_opcodes; uint8_t m_cannonb_bit_to_read; int m_mystery; @@ -80,8 +78,6 @@ public: DECLARE_READ8_MEMBER(mbrush_prot_r); DECLARE_READ8_MEMBER(maketrax_special_port2_r); DECLARE_READ8_MEMBER(maketrax_special_port3_r); - DECLARE_READ8_MEMBER(korosuke_special_port2_r); - DECLARE_READ8_MEMBER(korosuke_special_port3_r); DECLARE_READ8_MEMBER(mschamp_kludge_r); DECLARE_WRITE8_MEMBER(bigbucks_bank_w); DECLARE_READ8_MEMBER(bigbucks_question_r); @@ -134,7 +130,6 @@ public: DECLARE_DRIVER_INIT(woodpek); DECLARE_DRIVER_INIT(cannonbp); DECLARE_DRIVER_INIT(jumpshot); - DECLARE_DRIVER_INIT(korosuke); DECLARE_DRIVER_INIT(mspacii); DECLARE_DRIVER_INIT(pacplus); DECLARE_DRIVER_INIT(rocktrv2); @@ -167,7 +162,6 @@ public: private: void init_save_state(); void jrpacman_mark_tile_dirty( int offset ); - void korosuke_rom_decode(); void eyes_decode(uint8_t *data); void mspacman_install_patches(uint8_t *ROM);