(nw) simulate protection for korosuke [iq_132] and resultant cleanup [Robbbert]

This commit is contained in:
Robbbert 2018-01-14 01:31:41 +11:00
parent 210a04e72d
commit 955b50c843
2 changed files with 12 additions and 94 deletions

View File

@ -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 )

View File

@ -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<cpu_device> m_maincpu;
@ -43,7 +42,6 @@ private:
optional_shared_ptr<uint8_t> m_rocktrv2_prot_data;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_shared_ptr<uint8_t> 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);