mirror of
https://github.com/holub/mame
synced 2025-05-30 17:41:47 +03:00
Make MC-8123 into a device
This commit is contained in:
parent
f8e84c8bea
commit
70e38e83ed
@ -85,7 +85,7 @@ public:
|
||||
DECLARE_PALETTE_INIT(chinsan);
|
||||
uint32_t screen_update_chinsan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(chin_adpcm_int);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<mc8123_device> m_maincpu;
|
||||
required_device<msm5205_device> m_adpcm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
@ -597,7 +597,7 @@ void chinsan_state::machine_reset()
|
||||
static MACHINE_CONFIG_START( chinsan, chinsan_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80,10000000/2) /* ? MHz */
|
||||
MCFG_CPU_ADD("maincpu", MC8123, 10000000/2) /* ? MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(chinsan_map)
|
||||
MCFG_CPU_IO_MAP(chinsan_io)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
@ -650,7 +650,7 @@ ROM_START( chinsan )
|
||||
ROM_CONTINUE( 0x00000, 0x08000 ) // first half is blank
|
||||
ROM_LOAD( "mm01.8d", 0x08000, 0x10000, CRC(c69ddbf5) SHA1(9533365c1761b113174d53a2e23ce6a7baca7dfe) )
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-5012.key", 0x0000, 0x2000, CRC(2ecfb132) SHA1(3110ef82080dd7d908cc6bf34c6643f187f90b29) )
|
||||
|
||||
ROM_REGION( 0x30000, "gfx1", 0 )
|
||||
@ -680,7 +680,7 @@ ROM_END
|
||||
DRIVER_INIT_MEMBER(chinsan_state,chinsan)
|
||||
{
|
||||
m_decrypted_opcodes = std::make_unique<uint8_t[]>(0x18000);
|
||||
mc8123_decode(memregion("maincpu")->base(), m_decrypted_opcodes.get(), memregion("user1")->base(), 0x18000);
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(memregion("maincpu")->base(), m_decrypted_opcodes.get(), 0x18000);
|
||||
}
|
||||
|
||||
|
||||
|
@ -709,7 +709,7 @@ MACHINE_RESET_MEMBER(freekick_state,oigas)
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( omega, freekick_state )
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) // unknown divisor
|
||||
MCFG_CPU_ADD("maincpu", MC8123, XTAL_18_432MHz/6) // unknown divisor
|
||||
MCFG_CPU_PROGRAM_MAP(omega_map)
|
||||
MCFG_CPU_IO_MAP(omega_io_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
@ -782,8 +782,11 @@ static MACHINE_CONFIG_DERIVED( pbillrd, base )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( pbillrdm, pbillrd )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_REPLACE("maincpu", MC8123, XTAL_12MHz/4)
|
||||
MCFG_CPU_PROGRAM_MAP(pbillrd_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( freekickb, base )
|
||||
@ -827,6 +830,22 @@ static MACHINE_CONFIG_DERIVED( gigas, base )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(freekick_state, screen_update_gigas)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( gigasm, base )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_REPLACE("maincpu", MC8123, XTAL_12MHz/4)
|
||||
MCFG_CPU_PROGRAM_MAP(gigas_map)
|
||||
MCFG_CPU_IO_MAP(gigas_io_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_UPDATE_DRIVER(freekick_state, screen_update_gigas)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( oigas, gigas )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -876,7 +895,7 @@ ROM_START( pbillrds ) /* Encrytped with a Sega MC-8123 (317-0030) CPU module */
|
||||
ROM_LOAD( "10625.8r", 0x4000, 0x8000, CRC(8977c724) SHA1(f00835a04dc6fa7d8c1e382dace515f2aa7d6f44) ) /* encrypted */
|
||||
ROM_LOAD( "10627.10n", 0xc000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0030.key", 0x0000, 0x2000, CRC(9223f06d) SHA1(51a22a4c80fe273526bde68918c13c6476cec383) )
|
||||
|
||||
ROM_REGION( 0xc000, "gfx1", 0 ) /* GFX */
|
||||
@ -904,7 +923,7 @@ ROM_START( pbillrdsa ) /* all ROMs were HN4827128G-25, except 17, HN27256G-25, C
|
||||
ROM_LOAD( "17", 0x4000, 0x8000, CRC(9bb3d467) SHA1(5d61c80c920363cbcb548f4a08434e2a05b3d5f3) ) /* encrypted */
|
||||
ROM_LOAD( "19", 0xc000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0030.key", 0x0000, 0x2000, CRC(9223f06d) SHA1(51a22a4c80fe273526bde68918c13c6476cec383) )
|
||||
|
||||
ROM_REGION( 0xc000, "gfx1", 0 ) /* GFX */
|
||||
@ -1178,7 +1197,7 @@ ROM_START( gigas ) /* From an actual Sega board 834-6167 with mc-8123: 317-5002
|
||||
ROM_LOAD( "8.8n", 0x00000, 0x4000, CRC(34ea8262) SHA1(a71c865ffccfc79455402c53639c4fa77a746cf1) )
|
||||
ROM_LOAD( "7.8r", 0x04000, 0x8000, CRC(43653909) SHA1(30f6666ba5c0f016299f462c4c07c81ee4832808) ) /* 27256 */
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-5002.key", 0x0000, 0x2000, CRC(86a7e5f6) SHA1(3ff3a17c02eb5610182b6febfada4e8eca0c5eea) )
|
||||
|
||||
ROM_REGION( 0xc000, "gfx1", 0 ) /* GFX */
|
||||
@ -1304,7 +1323,7 @@ ROM_START( omega )
|
||||
ROM_LOAD("17.m10", 0x0000, 0x4000, CRC(c7de0993) SHA1(35ecd464935faba1dc7d0dbf48e1b17153626bfd)) // 27128
|
||||
ROM_LOAD("8.n10", 0x4000, 0x8000, CRC(9bb61910) SHA1(f8a1210dbf93e901e246e6adf4cd905acc3ef376)) // 27256
|
||||
|
||||
ROM_REGION(0x2000, "user1", 0) // MC8123 key
|
||||
ROM_REGION(0x2000, "maincpu:key", 0) // MC8123 key
|
||||
ROM_LOAD("omega.key", 0x0000, 0x2000, CRC(0a63943f) SHA1(9e581ea0c5bf6c0ed5d402d3bab053766b8e44c2))
|
||||
|
||||
ROM_REGION(0xc000, "gfx1", 0)
|
||||
@ -1350,7 +1369,7 @@ DRIVER_INIT_MEMBER(freekick_state,gigasb)
|
||||
DRIVER_INIT_MEMBER(freekick_state,pbillrds)
|
||||
{
|
||||
uint8_t *decrypted_opcodes = auto_alloc_array(machine(), uint8_t, 0x10000);
|
||||
mc8123_decode(memregion("maincpu")->base(), decrypted_opcodes, memregion("user1")->base(), 0x10000);
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(memregion("maincpu")->base(), decrypted_opcodes, 0x10000);
|
||||
membank("bank0d")->set_base(decrypted_opcodes);
|
||||
m_bank1d->configure_entries(0, 2, decrypted_opcodes + 0x8000, 0x4000);
|
||||
}
|
||||
@ -1358,7 +1377,7 @@ DRIVER_INIT_MEMBER(freekick_state,pbillrds)
|
||||
DRIVER_INIT_MEMBER(freekick_state,gigas)
|
||||
{
|
||||
uint8_t *decrypted_opcodes = auto_alloc_array(machine(), uint8_t, 0xc000);
|
||||
mc8123_decode(memregion("maincpu")->base(), decrypted_opcodes, memregion("user1")->base(), 0xc000);
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(memregion("maincpu")->base(), decrypted_opcodes, 0xc000);
|
||||
membank("bank0d")->set_base(decrypted_opcodes);
|
||||
m_bank1d->set_base(decrypted_opcodes + 0x8000);
|
||||
}
|
||||
@ -1371,7 +1390,7 @@ DRIVER_INIT_MEMBER(freekick_state,gigas)
|
||||
*
|
||||
*************************************/
|
||||
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
|
||||
GAME( 1986, gigas, 0, gigas, gigas, freekick_state, gigas, ROT270, "Sega", "Gigas (MC-8123, 317-5002)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, gigas, 0, gigasm, gigas, freekick_state, gigas, ROT270, "Sega", "Gigas (MC-8123, 317-5002)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, gigasb, gigas, gigas, gigas, freekick_state, gigasb, ROT270, "bootleg", "Gigas (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, oigas, gigas , oigas, gigas, freekick_state, gigasb, ROT270, "bootleg", "Oigas (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, gigasm2b, 0, gigas, gigasm2, freekick_state, gigasb, ROT270, "bootleg", "Gigas Mark II (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -977,7 +977,14 @@ static MACHINE_CONFIG_START( ninjakd2_core, ninjakd2_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ninjakd2, ninjakd2_core )
|
||||
MCFG_CPU_REPLACE("soundcpu", MC8123, MAIN_CLOCK_5) /* verified */
|
||||
MCFG_CPU_PROGRAM_MAP(ninjakd2_sound_cpu)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ninjakd2b, ninjakd2_core )
|
||||
MCFG_CPU_MODIFY("soundcpu")
|
||||
MCFG_CPU_PROGRAM_MAP(ninjakd2_sound_cpu)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -1070,7 +1077,7 @@ ROM_START( ninjakd2 )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "nk2_06.rom", 0x00000, 0x10000, CRC(d3a18a79) SHA1(e4df713f89d8a8b43ef831b14864c50ec9b53f0b) ) // encrypted
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "ninjakd2.key", 0x0000, 0x2000, CRC(ec25318f) SHA1(619da3f69f9919e1457f79ee1d38e7ec80c4ebb0) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 ) // fg tiles (need lineswapping)
|
||||
@ -1153,7 +1160,7 @@ ROM_START( ninjakd2c )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "nk2_06.rom", 0x00000, 0x10000, CRC(d3a18a79) SHA1(e4df713f89d8a8b43ef831b14864c50ec9b53f0b) ) // encrypted
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "ninjakd2.key", 0x0000, 0x2000, CRC(ec25318f) SHA1(619da3f69f9919e1457f79ee1d38e7ec80c4ebb0) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 ) // fg tiles (need lineswapping)
|
||||
@ -1182,7 +1189,7 @@ ROM_START( rdaction )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "nk2_06.rom", 0x0000, 0x10000, CRC(d3a18a79) SHA1(e4df713f89d8a8b43ef831b14864c50ec9b53f0b) ) // 6.3h encrypted
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "ninjakd2.key", 0x0000, 0x2000, CRC(ec25318f) SHA1(619da3f69f9919e1457f79ee1d38e7ec80c4ebb0) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 ) // fg tiles (need lineswapping)
|
||||
@ -1222,7 +1229,7 @@ ROM_START( jt104 ) // identical to radaction set with different gfx rom and decr
|
||||
ROM_LOAD( "nk2_06.bin", 0x10000, 0x8000, CRC(7bfe6c9e) SHA1(aef8cbeb0024939bf65f77113a5cf777f6613722) ) // decrypted opcodes
|
||||
ROM_CONTINUE( 0x00000, 0x8000 ) // decrypted data
|
||||
|
||||
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "ninjakd2.key", 0x0000, 0x2000, CRC(ec25318f) SHA1(619da3f69f9919e1457f79ee1d38e7ec80c4ebb0) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 ) // fg tiles (need lineswapping)
|
||||
@ -1628,7 +1635,7 @@ void ninjakd2_state::gfx_unscramble()
|
||||
|
||||
DRIVER_INIT_MEMBER(ninjakd2_state,ninjakd2)
|
||||
{
|
||||
mc8123_decode(memregion("soundcpu")->base(), m_decrypted_opcodes, memregion("user1")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_soundcpu).decode(memregion("soundcpu")->base(), m_decrypted_opcodes, 0x8000);
|
||||
|
||||
gfx_unscramble();
|
||||
}
|
||||
@ -1691,8 +1698,8 @@ DRIVER_INIT_MEMBER(ninjakd2_state,robokidj)
|
||||
|
||||
// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS
|
||||
GAME( 1987, ninjakd2, 0, ninjakd2, ninjakd2, ninjakd2_state, ninjakd2, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, ninjakd2a, ninjakd2, ninjakd2, ninjakd2, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, ninjakd2b, ninjakd2, ninjakd2, rdaction, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, ninjakd2a, ninjakd2, ninjakd2b, ninjakd2, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, ninjakd2b, ninjakd2, ninjakd2b, rdaction, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, ninjakd2c, ninjakd2, ninjakd2, rdaction, ninjakd2_state, ninjakd2, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 4)", MACHINE_SUPPORTS_SAVE ) // close to set 3
|
||||
GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2_state, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, jt104, ninjakd2, ninjakd2, rdaction, ninjakd2_state, bootleg, ROT0, "UPL (United Amusements license)", "JT-104 (title screen modification of Rad Action)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -960,7 +960,7 @@ ROM_START( fantzn2 )
|
||||
ROM_LOAD( "epr-11414.ic4", 0x30000, 0x10000, CRC(6f7a9f5f) SHA1(b53aa2eded781c80466a79b7d81383b9a875d0be) )
|
||||
ROM_LOAD( "epr-11412.ic2", 0x40000, 0x10000, CRC(b14db5af) SHA1(04c7fb659385438b3d8f9fb66800eb7b6373bda9) )
|
||||
|
||||
ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0057.key", 0x0000, 0x2000, CRC(ee43d0f0) SHA1(72cb75a4d8352fe372db12046a59ea044360d5c3) )
|
||||
ROM_END
|
||||
|
||||
@ -975,7 +975,7 @@ ROM_START( opaopa )
|
||||
ROM_LOAD( "epr-11051.ic3", 0x20000, 0x08000, CRC(4ca132a2) SHA1(cb4e4c01b6ab070eef37c0603190caafe6236ccd) ) /* encrypted */
|
||||
ROM_LOAD( "epr-11050.ic2", 0x28000, 0x08000, CRC(a165e2ef) SHA1(498ff4c5d3a2658567393378c56be6ed86ac0384) ) /* encrypted */
|
||||
|
||||
ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0042.key", 0x0000, 0x2000, CRC(d6312538) SHA1(494ac7f080775c21dc7d369e6ea78f3299e6975a) )
|
||||
ROM_END
|
||||
|
||||
@ -1052,7 +1052,9 @@ MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( systemex, systeme )
|
||||
MCFG_DEVICE_MODIFY("maincpu")
|
||||
MCFG_CPU_REPLACE("maincpu", MC8123, XTAL_10_738635MHz/2) /* Z80B @ 5.3693Mhz */
|
||||
MCFG_CPU_PROGRAM_MAP(systeme_map)
|
||||
MCFG_CPU_IO_MAP(io_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -1065,7 +1067,9 @@ static MACHINE_CONFIG_DERIVED( systemex_315_5177, systeme )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( systemeb, systeme )
|
||||
MCFG_DEVICE_MODIFY("maincpu")
|
||||
MCFG_CPU_REPLACE("maincpu", MC8123, XTAL_10_738635MHz/2) /* Z80B @ 5.3693Mhz */
|
||||
MCFG_CPU_PROGRAM_MAP(systeme_map)
|
||||
MCFG_CPU_IO_MAP(io_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(banked_decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -1073,7 +1077,7 @@ MACHINE_CONFIG_END
|
||||
DRIVER_INIT_MEMBER(systeme_state, opaopa)
|
||||
{
|
||||
uint8_t *banked_decrypted_opcodes = auto_alloc_array(machine(), uint8_t, m_maincpu_region->bytes());
|
||||
mc8123_decode(m_maincpu_region->base(), banked_decrypted_opcodes, memregion("key")->base(), m_maincpu_region->bytes());
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(m_maincpu_region->base(), banked_decrypted_opcodes, m_maincpu_region->bytes());
|
||||
|
||||
m_bank0d->set_base(banked_decrypted_opcodes);
|
||||
m_bank1d->configure_entries(0, 16, banked_decrypted_opcodes + 0x10000, 0x4000);
|
||||
@ -1082,7 +1086,7 @@ DRIVER_INIT_MEMBER(systeme_state, opaopa)
|
||||
|
||||
DRIVER_INIT_MEMBER(systeme_state, fantzn2)
|
||||
{
|
||||
mc8123_decode(m_maincpu_region->base(), m_decrypted_opcodes, memregion("key")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3638,7 +3638,9 @@ static MACHINE_CONFIG_START( system16b, segas16b_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( system16b_mc8123, system16b )
|
||||
MCFG_CPU_MODIFY("soundcpu")
|
||||
MCFG_CPU_REPLACE("soundcpu", MC8123, MASTER_CLOCK_10MHz/2)
|
||||
MCFG_CPU_PROGRAM_MAP(sound_map)
|
||||
MCFG_CPU_IO_MAP(sound_portmap)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(sound_decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -3987,7 +3989,7 @@ ROM_START( aliensyn7 )
|
||||
ROM_LOAD( "epr-10725.a9", 0x20000, 0x8000, CRC(6a50e08f) SHA1(d34b2ccadb8b07d5ad99cab5c5b5b79642c65574) )
|
||||
ROM_LOAD( "epr-10726.a10", 0x30000, 0x8000, CRC(d50b7736) SHA1(b1f8e3b0cf2ffee5382098100cfabe21b383cd51) )
|
||||
|
||||
ROM_REGION( 0x2000, "mc8123", 0 ) // MC8123 key
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) // MC8123 key
|
||||
ROM_LOAD( "317-00xx.key", 0x0000, 0x2000, CRC(76b370cd) SHA1(996a4a24dec085caf93cbe614d3b0888379c91dd) )
|
||||
ROM_END
|
||||
|
||||
@ -4279,7 +4281,7 @@ ROM_START( altbeast4 )
|
||||
ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) )
|
||||
ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) )
|
||||
|
||||
ROM_REGION( 0x2000, "mc8123", 0 ) // MC8123 key
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) // MC8123 key
|
||||
ROM_LOAD( "317-0066.key", 0x0000, 0x2000, CRC(ed85a054) SHA1(dcc84ec077a8a489f45abfd2bf4a9ba377da28a5) )
|
||||
ROM_END
|
||||
|
||||
@ -4395,7 +4397,7 @@ ROM_START( altbeast2 )
|
||||
ROM_LOAD( "opr-11672.a11", 0x10000, 0x20000, CRC(bbd7f460) SHA1(bbc5c2219cb3a827d84062b19affd9780da2a3cf) )
|
||||
ROM_LOAD( "opr-11673.a12", 0x30000, 0x20000, CRC(400c4a36) SHA1(de4bdfa91734410e0a7f6a16bf8336db172f458a) )
|
||||
|
||||
ROM_REGION( 0x2000, "mc8123", 0 ) // MC8123 key
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) // MC8123 key
|
||||
ROM_LOAD( "317-0066.key", 0x0000, 0x2000, CRC(ed85a054) SHA1(dcc84ec077a8a489f45abfd2bf4a9ba377da28a5) )
|
||||
ROM_END
|
||||
|
||||
@ -7055,7 +7057,7 @@ ROM_START( cencourt )
|
||||
ROM_LOAD( "epr-a-10.a10", 0x30000, 0x08000, CRC(10263746) SHA1(1f981fb185c6a9795208ecdcfba36cf892a99ed5) ) // == epr-11860.a10
|
||||
ROM_LOAD( "epr-a-11.a11", 0x40000, 0x08000, CRC(38b54a71) SHA1(68ec4ef5b115844214ff2213be1ce6678904fbd2) ) // == epr-11861.a11
|
||||
|
||||
ROM_REGION( 0x2000, "mc8123", 0 ) // MC8123 key
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) // MC8123 key
|
||||
ROM_LOAD( "mc-8123b_center_court.key", 0x0000, 0x2000, CRC(2be5c90b) SHA1(e98d989237f2b001950b876efdb21c1507162830) ) // No official 317-xxxx number
|
||||
ROM_END
|
||||
|
||||
@ -7487,7 +7489,7 @@ ROM_START( shinobi4 )
|
||||
ROM_LOAD( "epr-11377.a10", 0x00000, 0x08000, CRC(0fb6af34) SHA1(ae9da18bd2db317ed96c5f642f90cc1eba60ba99) ) // MC8123B (317-0054) encrypted version of epr-11361.a10 above
|
||||
ROM_LOAD( "epr-11362.a11", 0x10000, 0x20000, CRC(256af749) SHA1(041bd007ea7708c6d69f07865828b9bd17a139f5) )
|
||||
|
||||
ROM_REGION( 0x2000, "mc8123", 0 ) // MC8123 key
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) // MC8123 key
|
||||
ROM_LOAD( "317-0054.key", 0x0000, 0x2000, CRC(39fd4535) SHA1(93bbb139d2d5acc6a1e338d92077e79a5e880b2e) )
|
||||
ROM_END
|
||||
|
||||
@ -7525,7 +7527,7 @@ ROM_START( shinobi3 )
|
||||
ROM_LOAD( "epr-11288.a8", 0x10000, 0x8000, CRC(c8df8460) SHA1(0aeb41a493df155edb5f600f53ec43b798927dff) )
|
||||
ROM_LOAD( "epr-11289.a9", 0x20000, 0x8000, CRC(e5a4cf30) SHA1(d1982da7a550c11ab2253f5d64ac6ab847da0a04) )
|
||||
|
||||
ROM_REGION( 0x2000, "mc8123", 0 ) // MC8123 key
|
||||
ROM_REGION( 0x2000, "soundcpu:key", 0 ) // MC8123 key
|
||||
ROM_LOAD( "317-0054.key", 0x0000, 0x2000, CRC(39fd4535) SHA1(93bbb139d2d5acc6a1e338d92077e79a5e880b2e) )
|
||||
ROM_END
|
||||
|
||||
@ -8631,7 +8633,7 @@ DRIVER_INIT_MEMBER(segas16b_state,aceattac_5358)
|
||||
DRIVER_INIT_MEMBER(segas16b_state,aliensyn7_5358_small)
|
||||
{
|
||||
DRIVER_INIT_CALL(generic_5358_small);
|
||||
mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mc8123")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_soundcpu).decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, 0x8000);
|
||||
}
|
||||
|
||||
|
||||
@ -8650,7 +8652,7 @@ DRIVER_INIT_MEMBER(segas16b_state,altbeas5_5521)
|
||||
DRIVER_INIT_MEMBER(segas16b_state,altbeas4_5521)
|
||||
{
|
||||
DRIVER_INIT_CALL(generic_5521);
|
||||
mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mc8123")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_soundcpu).decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, 0x8000);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(segas16b_state,ddux_5704)
|
||||
@ -8699,7 +8701,7 @@ DRIVER_INIT_MEMBER(segas16b_state,passshtj_5358)
|
||||
DRIVER_INIT_MEMBER(segas16b_state,cencourt_5358)
|
||||
{
|
||||
DRIVER_INIT_CALL(passshtj_5358);
|
||||
mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mc8123")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_soundcpu).decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, 0x8000);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(segas16b_state,sdi_5358_small)
|
||||
@ -8724,13 +8726,13 @@ DRIVER_INIT_MEMBER(segas16b_state,defense_5358_small)
|
||||
DRIVER_INIT_MEMBER(segas16b_state,shinobi4_5521)
|
||||
{
|
||||
DRIVER_INIT_CALL(generic_5521);
|
||||
mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mc8123")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_soundcpu).decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, 0x8000);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(segas16b_state,shinobi3_5358)
|
||||
{
|
||||
DRIVER_INIT_CALL(generic_5358);
|
||||
mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mc8123")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_soundcpu).decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, 0x8000);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(segas16b_state,sjryuko_5358_small)
|
||||
|
@ -2215,11 +2215,6 @@ static MACHINE_CONFIG_DERIVED( sys1pio, sys1ppi )
|
||||
MCFG_Z80PIO_OUT_PB_CB(WRITE8(system1_state, videomode_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sys1piox, sys1pio )
|
||||
MCFG_DEVICE_MODIFY("maincpu")
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
#define ENCRYPTED_SYS1PPI_MAPS \
|
||||
MCFG_CPU_PROGRAM_MAP(system1_map) \
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) \
|
||||
@ -2232,6 +2227,17 @@ MACHINE_CONFIG_END
|
||||
MCFG_CPU_IO_MAP(system1_pio_io_map) \
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", system1_state, irq0_line_hold)
|
||||
|
||||
#define ENCRYPTED_SYS2_MC8123_MAPS \
|
||||
MCFG_CPU_PROGRAM_MAP(system1_map) \
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(banked_decrypted_opcodes_map) \
|
||||
MCFG_CPU_IO_MAP(system1_ppi_io_map) \
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", system1_state, irq0_line_hold)
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sys1pioxb, sys1pio )
|
||||
MCFG_CPU_REPLACE("maincpu", MC8123, MASTER_CLOCK)
|
||||
ENCRYPTED_SYS1PIO_MAPS
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sys1ppix_315_5178, sys1ppi )
|
||||
MCFG_CPU_REPLACE("maincpu", SEGA_315_5178, MASTER_CLOCK)
|
||||
@ -2463,7 +2469,12 @@ MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sys2xb, sys2 )
|
||||
MCFG_DEVICE_MODIFY("maincpu")
|
||||
MCFG_CPU_REPLACE("maincpu", MC8123, MASTER_CLOCK)
|
||||
ENCRYPTED_SYS2_MC8123_MAPS
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sys2xboot, sys2 )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(banked_decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2480,7 +2491,12 @@ static MACHINE_CONFIG_DERIVED( sys2row, sys2 )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sys2rowxb, sys2row )
|
||||
MCFG_DEVICE_MODIFY("maincpu")
|
||||
MCFG_CPU_REPLACE("maincpu", MC8123, MASTER_CLOCK)
|
||||
ENCRYPTED_SYS2_MC8123_MAPS
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sys2rowxboot, sys2row )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(banked_decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -4533,7 +4549,7 @@ ROM_START( wbml )
|
||||
ROM_LOAD( "epr11032.91", 0x10000, 0x8000, CRC(9d03bdb2) SHA1(7dbab23e7c7972d9b51a0d3d046374720b7d6af5) ) /* encrypted */
|
||||
ROM_LOAD( "epr11033.92", 0x18000, 0x8000, CRC(7076905c) SHA1(562fbd9bd60851f7e4e60b725193395b4f193479) ) /* encrypted */
|
||||
|
||||
ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0043.key", 0x0000, 0x2000, CRC(e354abfc) SHA1(07b0d3c51301ebb25909234b6220a3ed20dbcc7d) )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
@ -4565,7 +4581,7 @@ ROM_START( wbmljo )
|
||||
ROM_LOAD( "epr11032.91", 0x10000, 0x8000, CRC(9d03bdb2) SHA1(7dbab23e7c7972d9b51a0d3d046374720b7d6af5) ) /* encrypted */
|
||||
ROM_LOAD( "epr11033.92", 0x18000, 0x8000, CRC(7076905c) SHA1(562fbd9bd60851f7e4e60b725193395b4f193479) ) /* encrypted */
|
||||
|
||||
ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0043.key", 0x0000, 0x2000, CRC(e354abfc) SHA1(07b0d3c51301ebb25909234b6220a3ed20dbcc7d) )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
@ -4847,7 +4863,7 @@ ROM_START( dakkochn )
|
||||
ROM_LOAD( "epr-11225.ic91", 0x10000, 0x8000, CRC(c540f9e2) SHA1(dbda9355e8b796bcfaee2789714d248c4d7ad58c) ) /* encrypted */
|
||||
/* 18000-1ffff empty */
|
||||
|
||||
ROM_REGION( 0x2000, "key", 0 ) /* MC8123B key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123B key */
|
||||
ROM_LOAD( "317-5014.key", 0x0000, 0x2000, CRC(bb9df5ad) SHA1(7e7b7255149ae01d19883ecf4a88989f8a9bf4c6) )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
@ -4883,7 +4899,7 @@ ROM_START( ufosensi )
|
||||
ROM_LOAD( "epr11662.91", 0x10000, 0x8000, CRC(0c2e4120) SHA1(d81fbefa95868e3efd29ef3bacf108329781ca17) ) /* encrypted */
|
||||
ROM_LOAD( "epr11663.92", 0x18000, 0x8000, CRC(4515ebae) SHA1(9b823f10999746292762c2f0a1ca9039efa22506) ) /* encrypted */
|
||||
|
||||
ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0064.key", 0x0000, 0x2000, CRC(da326f36) SHA1(0871b351379a094ac578e0eca5cb17797f9085aa) )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
@ -4959,7 +4975,7 @@ ROM_START( blockgal )
|
||||
ROM_LOAD( "bg.109", 0x4000, 0x4000, CRC(a6b573d5) SHA1(33547a3895bbe65d5a6c40453eeb93e1fedad6de) ) /* encrypted */
|
||||
/* 0x8000-0xbfff empty (was same as My Hero) */
|
||||
|
||||
ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
|
||||
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
|
||||
ROM_LOAD( "317-0029.key", 0x0000, 0x2000, CRC(350d7f93) SHA1(7ef12d63b2c7150f8e74f65ec8340471d72b1c03) )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
@ -5233,7 +5249,7 @@ DRIVER_INIT_MEMBER(system1_state,myherok)
|
||||
DRIVER_INIT_MEMBER(system1_state,blockgal)
|
||||
{
|
||||
DRIVER_INIT_CALL(bank00);
|
||||
mc8123_decode(m_maincpu_region->base(), m_decrypted_opcodes, memregion("key")->base(), 0x8000);
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000);
|
||||
}
|
||||
|
||||
|
||||
@ -5245,14 +5261,14 @@ DRIVER_INIT_MEMBER(system1_state,wbml)
|
||||
{
|
||||
DRIVER_INIT_CALL(bank0c);
|
||||
m_banked_decrypted_opcodes = std::make_unique<uint8_t[]>(m_maincpu_region->bytes());
|
||||
mc8123_decode(m_maincpu_region->base(), m_banked_decrypted_opcodes.get(), memregion("key")->base(), m_maincpu_region->bytes());
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(m_maincpu_region->base(), m_banked_decrypted_opcodes.get(), m_maincpu_region->bytes());
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(system1_state,ufosensi)
|
||||
{
|
||||
DRIVER_INIT_CALL(bank0c);
|
||||
m_banked_decrypted_opcodes = std::make_unique<uint8_t[]>(m_maincpu_region->bytes());
|
||||
mc8123_decode(m_maincpu_region->base(), m_banked_decrypted_opcodes.get(), memregion("key")->base(), m_maincpu_region->bytes());
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(m_maincpu_region->base(), m_banked_decrypted_opcodes.get(), m_maincpu_region->bytes());
|
||||
}
|
||||
|
||||
|
||||
@ -5261,7 +5277,7 @@ DRIVER_INIT_MEMBER(system1_state,dakkochn)
|
||||
{
|
||||
m_videomode_custom = &system1_state::dakkochn_custom_w;
|
||||
m_banked_decrypted_opcodes = std::make_unique<uint8_t[]>(m_maincpu_region->bytes());
|
||||
mc8123_decode(m_maincpu_region->base(), m_banked_decrypted_opcodes.get(), memregion("key")->base(), m_maincpu_region->bytes());
|
||||
downcast<mc8123_device &>(*m_maincpu).decode(m_maincpu_region->base(), m_banked_decrypted_opcodes.get(), m_maincpu_region->bytes());
|
||||
}
|
||||
|
||||
|
||||
@ -5430,7 +5446,7 @@ GAME( 1986, wboy4, wboy, sys1piox_315_5162, wboy, system1_state, b
|
||||
GAME( 1986, wboyu, wboy, sys1pio, wboyu, system1_state, bank00, ROT0, "Escape (Sega license)", "Wonder Boy (prototype?)", MACHINE_SUPPORTS_SAVE ) // appears to be a very early / unfinished version.
|
||||
GAME( 1986, wboy5, wboy, sys1piox_315_5135, wboy3, system1_state, bank00, ROT0, "bootleg", "Wonder Boy (set 5, bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, wboyub, wboy, sys1piox_315_5177, wboy, system1_state, bank00, ROT0, "bootleg", "Wonder Boy (US bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, blockgal, 0, sys1piox, blockgal, system1_state, blockgal, ROT90, "Sega / Vic Tokai","Block Gal (MC-8123B, 317-0029)", MACHINE_SUPPORTS_SAVE)
|
||||
GAME( 1987, blockgal, 0, sys1pioxb, blockgal, system1_state, blockgal, ROT90, "Sega / Vic Tokai","Block Gal (MC-8123B, 317-0029)", MACHINE_SUPPORTS_SAVE)
|
||||
|
||||
/* PIO-based System 1 with ROM banking */
|
||||
GAME( 1985, hvymetal, 0, sys1piox_315_5135, hvymetal, system1_state, bank44, ROT0, "Sega", "Heavy Metal (315-5135)", MACHINE_SUPPORTS_SAVE )
|
||||
@ -5450,15 +5466,15 @@ GAME( 1986, wboysys2a, wboy, sys2_315_5176, wboysys2, system1_state, b
|
||||
GAME( 1987, tokisens, 0, sys2, tokisens, system1_state, bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbml, 0, sys2xb, wbml, system1_state, wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmljo, wbml, sys2xb, wbml, system1_state, wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmljb, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (Japan bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmlb, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (English bootleg set 1)", MACHINE_SUPPORTS_SAVE)
|
||||
GAME( 1987, wbmlbg, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy in Monster Land (English bootleg set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmlbge, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy in Monster Land (English bootleg set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2009, wbmlvc, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "Sega", "Wonder Boy in Monster Land (English, Virtual Console)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2009, wbmlvcd, wbml, sys2xb, wbml, system1_state, bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy in Monster Land (decrypted bootleg of English, Virtual Console release)", MACHINE_SUPPORTS_SAVE ) // fully decrypted version
|
||||
GAME( 1987, wbmld, wbml, sys2xb, wbml, system1_state, bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy in Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmljod, wbml, sys2xb, wbml, system1_state, bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy in Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmljb, wbml, sys2xboot, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (Japan bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmlb, wbml, sys2xboot, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (English bootleg set 1)", MACHINE_SUPPORTS_SAVE)
|
||||
GAME( 1987, wbmlbg, wbml, sys2xboot, wbml, system1_state, bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy in Monster Land (English bootleg set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmlbge, wbml, sys2xboot, wbml, system1_state, bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy in Monster Land (English bootleg set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2009, wbmlvc, wbml, sys2xboot, wbml, system1_state, bootsys2, ROT0, "Sega", "Wonder Boy in Monster Land (English, Virtual Console)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2009, wbmlvcd, wbml, sys2xboot, wbml, system1_state, bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy in Monster Land (decrypted bootleg of English, Virtual Console release)", MACHINE_SUPPORTS_SAVE ) // fully decrypted version
|
||||
GAME( 1987, wbmld, wbml, sys2xboot, wbml, system1_state, bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy in Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wbmljod, wbml, sys2xboot, wbml, system1_state, bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy in Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, dakkochn, 0, sys2xb, dakkochn, system1_state, dakkochn, ROT0, "White Board", "DakkoChan House (MC-8123B, 317-5014)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, blockgalb, blockgal, sys2x, blockgal, system1_state, bootleg, ROT90, "bootleg", "Block Gal (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, ufosensi, 0, sys2rowxb, ufosensi, system1_state, ufosensi, ROT0, "Sega", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, ufosensib, ufosensi, sys2rowxb, ufosensi, system1_state, bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, ufosensib, ufosensi, sys2rowxboot, ufosensi, system1_state, bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -80,12 +80,27 @@ CPU # Game Notes Seed Upper Limit
|
||||
#include "mc8123.h"
|
||||
|
||||
|
||||
const device_type MC8123 = device_creator<mc8123_device>;
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc8123_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
mc8123_device::mc8123_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: z80_device(mconfig, MC8123, "MC-8123", tag, owner, clock, "mc8123", __FILE__),
|
||||
m_key(*this, "key", 0x2000)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename T> constexpr u8 BITS(T b) { return u8(1) << b; }
|
||||
template <typename T, typename... U> constexpr u8 BITS(T b, U... c) { return (u8(1) << b) | BITS(c...); }
|
||||
|
||||
u8 decrypt_type0(u8 val, u8 param, unsigned swap)
|
||||
} // anonymous namespace
|
||||
|
||||
u8 mc8123_device::decrypt_type0(u8 val, u8 param, unsigned swap)
|
||||
{
|
||||
if (swap == 0) val = BITSWAP8(val,7,5,3,1,2,0,6,4);
|
||||
if (swap == 1) val = BITSWAP8(val,5,3,7,2,1,0,4,6);
|
||||
@ -117,7 +132,7 @@ u8 decrypt_type0(u8 val, u8 param, unsigned swap)
|
||||
}
|
||||
|
||||
|
||||
u8 decrypt_type1a(u8 val, u8 param, unsigned swap)
|
||||
u8 mc8123_device::decrypt_type1a(u8 val, u8 param, unsigned swap)
|
||||
{
|
||||
if (swap == 0) val = BITSWAP8(val,4,2,6,5,3,7,1,0);
|
||||
if (swap == 1) val = BITSWAP8(val,6,0,5,4,3,2,1,7);
|
||||
@ -145,7 +160,7 @@ u8 decrypt_type1a(u8 val, u8 param, unsigned swap)
|
||||
return val;
|
||||
}
|
||||
|
||||
u8 decrypt_type1b(u8 val, u8 param, unsigned swap)
|
||||
u8 mc8123_device::decrypt_type1b(u8 val, u8 param, unsigned swap)
|
||||
{
|
||||
if (swap == 0) val = BITSWAP8(val,1,0,3,2,5,6,4,7);
|
||||
if (swap == 1) val = BITSWAP8(val,2,0,5,1,7,4,6,3);
|
||||
@ -173,7 +188,7 @@ u8 decrypt_type1b(u8 val, u8 param, unsigned swap)
|
||||
return val;
|
||||
}
|
||||
|
||||
u8 decrypt_type2a(u8 val, u8 param, unsigned swap)
|
||||
u8 mc8123_device::decrypt_type2a(u8 val, u8 param, unsigned swap)
|
||||
{
|
||||
if (swap == 0) val = BITSWAP8(val,0,1,4,3,5,6,2,7);
|
||||
if (swap == 1) val = BITSWAP8(val,6,3,0,5,7,4,1,2);
|
||||
@ -208,7 +223,7 @@ u8 decrypt_type2a(u8 val, u8 param, unsigned swap)
|
||||
return val;
|
||||
}
|
||||
|
||||
u8 decrypt_type2b(u8 val, u8 param, unsigned swap)
|
||||
u8 mc8123_device::decrypt_type2b(u8 val, u8 param, unsigned swap)
|
||||
{
|
||||
// only 0x20 possible encryptions for this method - all others have 0x40
|
||||
// this happens because BIT(param,2) cancels the other three
|
||||
@ -246,7 +261,7 @@ u8 decrypt_type2b(u8 val, u8 param, unsigned swap)
|
||||
return val;
|
||||
}
|
||||
|
||||
u8 decrypt_type3a(u8 val, u8 param, unsigned swap)
|
||||
u8 mc8123_device::decrypt_type3a(u8 val, u8 param, unsigned swap)
|
||||
{
|
||||
if (swap == 0) val = BITSWAP8(val,5,3,1,7,0,2,6,4);
|
||||
if (swap == 1) val = BITSWAP8(val,3,1,2,5,4,7,0,6);
|
||||
@ -276,7 +291,7 @@ u8 decrypt_type3a(u8 val, u8 param, unsigned swap)
|
||||
return val;
|
||||
}
|
||||
|
||||
u8 decrypt_type3b(u8 val, u8 param, unsigned swap)
|
||||
u8 mc8123_device::decrypt_type3b(u8 val, u8 param, unsigned swap)
|
||||
{
|
||||
if (swap == 0) val = BITSWAP8(val,3,7,5,4,0,6,2,1);
|
||||
if (swap == 1) val = BITSWAP8(val,7,5,4,6,1,2,0,3);
|
||||
@ -314,7 +329,7 @@ u8 decrypt_type3b(u8 val, u8 param, unsigned swap)
|
||||
return val;
|
||||
}
|
||||
|
||||
u8 decrypt(u8 val, u8 key, bool opcode)
|
||||
u8 mc8123_device::decrypt_internal(u8 val, u8 key, bool opcode)
|
||||
{
|
||||
unsigned type = 0;
|
||||
unsigned swap = 0;
|
||||
@ -372,18 +387,16 @@ u8 decrypt(u8 val, u8 key, bool opcode)
|
||||
}
|
||||
|
||||
|
||||
u8 mc8123_decrypt(offs_t addr, u8 val, u8 const *key, bool opcode)
|
||||
u8 mc8123_device::decrypt(offs_t addr, u8 val, bool opcode)
|
||||
{
|
||||
// pick the translation table from bits fd57 of the address
|
||||
offs_t const tbl_num = bitswap<12>(addr,15,14,13,12,11,10,8,6,4,2,1,0);
|
||||
|
||||
return decrypt(val, key[tbl_num | (opcode ? 0x0000 : 0x1000)], opcode);
|
||||
return decrypt_internal(val, m_key[tbl_num | (opcode ? 0x0000 : 0x1000)], opcode);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
void mc8123_decode(u8 *rom, u8 *opcodes, u8 const *key, unsigned length)
|
||||
void mc8123_device::decode(u8 *rom, u8 *opcodes, unsigned length)
|
||||
{
|
||||
for (unsigned i = 0; i < length; i++)
|
||||
{
|
||||
@ -391,9 +404,9 @@ void mc8123_decode(u8 *rom, u8 *opcodes, u8 const *key, unsigned length)
|
||||
u8 const src = rom[i];
|
||||
|
||||
// decode the opcodes
|
||||
opcodes[i] = mc8123_decrypt(adr, src, key, true);
|
||||
opcodes[i] = decrypt(adr, src, true);
|
||||
|
||||
// decode the data
|
||||
rom[i] = mc8123_decrypt(adr, src, key, false);
|
||||
rom[i] = decrypt(adr, src, false);
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,38 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// this function assumes a fixed portion of ROM at 0000-7FFF, and
|
||||
// an arbitrary amount of banks at 8000-BFFF.
|
||||
#pragma once
|
||||
|
||||
void mc8123_decode(u8 *rom, u8 *opcodes, u8 const *key, unsigned length);
|
||||
#ifndef MAME_MACHINE_MC8123
|
||||
#define MAME_MACHINE_MC8123 1
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
|
||||
class mc8123_device : public z80_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
mc8123_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// this function assumes a fixed portion of ROM at 0000-7FFF, and
|
||||
// an arbitrary amount of banks at 8000-BFFF.
|
||||
void decode(u8 *rom, u8 *opcodes, unsigned length);
|
||||
|
||||
private:
|
||||
static u8 decrypt_type0(u8 val, u8 param, unsigned swap);
|
||||
static u8 decrypt_type1a(u8 val, u8 param, unsigned swap);
|
||||
static u8 decrypt_type1b(u8 val, u8 param, unsigned swap);
|
||||
static u8 decrypt_type2a(u8 val, u8 param, unsigned swap);
|
||||
static u8 decrypt_type2b(u8 val, u8 param, unsigned swap);
|
||||
static u8 decrypt_type3a(u8 val, u8 param, unsigned swap);
|
||||
static u8 decrypt_type3b(u8 val, u8 param, unsigned swap);
|
||||
static u8 decrypt_internal(u8 val, u8 key, bool opcode);
|
||||
|
||||
u8 decrypt(offs_t addr, u8 val, bool opcode);
|
||||
|
||||
required_region_ptr<u8> m_key;
|
||||
};
|
||||
|
||||
extern const device_type MC8123;
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user