From 8cf43c89fdd35fa2c27d038dfe97484e1a07fd58 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 29 Mar 2023 18:09:43 +0200 Subject: - funworld/supercrd.cpp: preliminary decryption - atari/liberatr.cpp, atari/quantum.cpp: corrections to ROM naming and PCB locations [Brian Troha] --- src/mame/atari/liberatr.cpp | 82 +++++----- src/mame/atari/quantum.cpp | 44 +++--- src/mame/funworld/supercrd.cpp | 336 +++++++++++++++++++++-------------------- src/mame/mame.lst | 2 +- 4 files changed, 233 insertions(+), 231 deletions(-) diff --git a/src/mame/atari/liberatr.cpp b/src/mame/atari/liberatr.cpp index 7e39460de56..7126f80401f 100644 --- a/src/mame/atari/liberatr.cpp +++ b/src/mame/atari/liberatr.cpp @@ -173,7 +173,7 @@ public: , m_earom_control(0) { } - void liberat2(machine_config &config); + void liberatp(machine_config &config); void liberatr(machine_config &config); protected: @@ -262,7 +262,7 @@ private: void earom_w(offs_t offset, uint8_t data); void earom_control_w(uint8_t data); - void liberat2_map(address_map &map); + void liberatp_map(address_map &map); void liberatr_map(address_map &map); void init_planet(planet &liberatr_planet, uint8_t *planet_rom); @@ -704,7 +704,7 @@ void liberatr_state::liberatr_map(address_map &map) * *************************************/ -void liberatr_state::liberat2_map(address_map &map) +void liberatr_state::liberatp_map(address_map &map) { map(0x0000, 0x0000).ram().share(m_xcoord); map(0x0001, 0x0001).ram().share(m_ycoord); @@ -865,12 +865,12 @@ void liberatr_state::liberatr(machine_config &config) pokey2.add_route(ALL_OUTPUTS, "mono", 0.50); } -void liberatr_state::liberat2(machine_config &config) +void liberatr_state::liberatp(machine_config &config) { liberatr(config); // basic machine hardware - subdevice("maincpu")->set_addrmap(AS_PROGRAM, &liberatr_state::liberat2_map); + subdevice("maincpu")->set_addrmap(AS_PROGRAM, &liberatr_state::liberatp_map); } @@ -883,36 +883,36 @@ void liberatr_state::liberat2(machine_config &config) ROM_START( liberatr ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "136012.206", 0x8000, 0x1000, CRC(1a0cb4a0) SHA1(595828a07af729a84aab4e0b51e873046b56b419) ) - ROM_LOAD( "136012.205", 0x9000, 0x1000, CRC(2f071920) SHA1(8764f3e78451c4968bffb7c7f72d1ed862f4b185) ) - ROM_LOAD( "136012.204", 0xa000, 0x1000, CRC(bcc91827) SHA1(3bfbe1f1db58437ccd204a857e58695f56819649) ) - ROM_LOAD( "136012.203", 0xb000, 0x1000, CRC(b558c3d4) SHA1(0b09786d696e91b12435a9e76b127c004c32e59a) ) - ROM_LOAD( "136012.202", 0xc000, 0x1000, CRC(569ba7ea) SHA1(4812b255886204192ab999d1370550d48438ea81) ) - ROM_LOAD( "136012.201", 0xd000, 0x1000, CRC(d12cd6d0) SHA1(94474429cbcdbb406eb045152fb158e2a23cd26d) ) - ROM_LOAD( "136012.200", 0xe000, 0x1000, CRC(1e98d21a) SHA1(92c7cc033c78ae0ce8127d49debe62263404feb1) ) - ROM_RELOAD( 0xf000, 0x1000 ) // for interrupt/reset vectors + ROM_LOAD( "136012-206.j1", 0x8000, 0x1000, CRC(1a0cb4a0) SHA1(595828a07af729a84aab4e0b51e873046b56b419) ) + ROM_LOAD( "136012-205.kl1", 0x9000, 0x1000, CRC(2f071920) SHA1(8764f3e78451c4968bffb7c7f72d1ed862f4b185) ) + ROM_LOAD( "136012-204.lm1", 0xa000, 0x1000, CRC(bcc91827) SHA1(3bfbe1f1db58437ccd204a857e58695f56819649) ) + ROM_LOAD( "136012-203.n1", 0xb000, 0x1000, CRC(b558c3d4) SHA1(0b09786d696e91b12435a9e76b127c004c32e59a) ) + ROM_LOAD( "136012-202.pr1", 0xc000, 0x1000, CRC(569ba7ea) SHA1(4812b255886204192ab999d1370550d48438ea81) ) + ROM_LOAD( "136012-201.rs1", 0xd000, 0x1000, CRC(d12cd6d0) SHA1(94474429cbcdbb406eb045152fb158e2a23cd26d) ) + ROM_LOAD( "136012-200.t1", 0xe000, 0x1000, CRC(1e98d21a) SHA1(92c7cc033c78ae0ce8127d49debe62263404feb1) ) + ROM_RELOAD( 0xf000, 0x1000 ) // for interrupt/reset vectors ROM_REGION( 0x4000, "planet", 0 ) // used at runtime - ROM_LOAD( "136012.110", 0x0000, 0x1000, CRC(6eb11221) SHA1(355b71812a18cbb2ee4dc20b3622fca1c96e4570) ) - ROM_LOAD( "136012.107", 0x1000, 0x1000, CRC(8a616a63) SHA1(76794cc4e11048bb6f2628bd8b84c9a7e2e82551) ) - ROM_LOAD( "136012.108", 0x2000, 0x1000, CRC(3f8e4cf6) SHA1(a9d0feb0892f343687e00b96f05adb423ee4d659) ) - ROM_LOAD( "136012.109", 0x3000, 0x1000, CRC(dda0c0ef) SHA1(6e547c07c1abd17383a4389b0b4ced442ed65ce7) ) + ROM_LOAD( "136012-110.p8", 0x0000, 0x1000, CRC(6eb11221) SHA1(355b71812a18cbb2ee4dc20b3622fca1c96e4570) ) + ROM_LOAD( "136012-107.rs8", 0x1000, 0x1000, CRC(8a616a63) SHA1(76794cc4e11048bb6f2628bd8b84c9a7e2e82551) ) + ROM_LOAD( "136012-108.mn8", 0x2000, 0x1000, CRC(3f8e4cf6) SHA1(a9d0feb0892f343687e00b96f05adb423ee4d659) ) + ROM_LOAD( "136012-109.t8", 0x3000, 0x1000, CRC(dda0c0ef) SHA1(6e547c07c1abd17383a4389b0b4ced442ed65ce7) ) - ROM_REGION( 0x100, "latitude_scaler", 0 ) /* latitude scaler */ - ROM_LOAD_NIB_LOW ( "136012.123", 0x0000, 0x0100, CRC(b8c806e0) SHA1(19b1b9796e1e9a42899a92ec53288d17d5d15fb3) ) - ROM_LOAD_NIB_HIGH( "136012.124", 0x0000, 0x0100, CRC(e51ec78f) SHA1(224237370c418361a00d62a77d39fa494e7d8831) ) + ROM_REGION( 0x100, "latitude_scaler", 0 ) // latitude scaler + ROM_LOAD_NIB_LOW ( "136012-123.n6", 0x0000, 0x0100, CRC(b8c806e0) SHA1(19b1b9796e1e9a42899a92ec53288d17d5d15fb3) ) + ROM_LOAD_NIB_HIGH( "136012-124.p6", 0x0000, 0x0100, CRC(e51ec78f) SHA1(224237370c418361a00d62a77d39fa494e7d8831) ) - ROM_REGION( 0x100, "longitude_scaler", 0 ) /* longitude scaler */ - ROM_LOAD_NIB_LOW ( "136012.125", 0x0000, 0x0100, CRC(52ac8dd9) SHA1(125d54b562d079b974f2562e71ab7c7a0b97e709) ) - ROM_LOAD_NIB_HIGH( "136012.126", 0x0000, 0x0100, CRC(2e670aa6) SHA1(a6bcc49d0948d2dfe497c5e3ad4a834fa78f779a) ) + ROM_REGION( 0x100, "longitude_scaler", 0 ) // longitude scaler + ROM_LOAD_NIB_LOW ( "136012-125.t7", 0x0000, 0x0100, CRC(52ac8dd9) SHA1(125d54b562d079b974f2562e71ab7c7a0b97e709) ) + ROM_LOAD_NIB_HIGH( "136012-126.s7", 0x0000, 0x0100, CRC(2e670aa6) SHA1(a6bcc49d0948d2dfe497c5e3ad4a834fa78f779a) ) ROM_REGION( 0x200, "proms", 0 ) - ROM_LOAD( "136012.021", 0x0000, 0x0100, CRC(ffdcd7bc) SHA1(2ce733203d628e299ec4fb93db8be1598b49142c) ) // write protect PROM - ROM_LOAD( "136012.022", 0x0100, 0x0100, CRC(3353edce) SHA1(915308b11096fc1d02acf9b4af806a2a935dd748) ) // sync PROM + ROM_LOAD( "136012-021.c5", 0x0000, 0x0100, CRC(ffdcd7bc) SHA1(2ce733203d628e299ec4fb93db8be1598b49142c) ) // write protect PROM + ROM_LOAD( "136012-022.k8", 0x0100, 0x0100, CRC(3353edce) SHA1(915308b11096fc1d02acf9b4af806a2a935dd748) ) // sync PROM ROM_END -ROM_START( liberatr2 ) +ROM_START( liberatrp ) // no backstory text or fancy "ring of Saturn" title screen ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "l6.bin", 0x6000, 0x1000, CRC(78093d06) SHA1(0f6ca01e27b32aae384a6ab67a6f14eedd3f1d9c) ) ROM_LOAD( "l5.bin", 0x7000, 0x1000, CRC(988db636) SHA1(8fdd07b397d4bef108aafb10c06c2fd53fc1f99a) ) @@ -920,25 +920,25 @@ ROM_START( liberatr2 ) ROM_LOAD( "l3.bin", 0x9000, 0x1000, CRC(184c751f) SHA1(e020d2943be89f244c1aeeb34a28b7aa7dbc1454) ) ROM_LOAD( "l2.bin", 0xa000, 0x1000, CRC(c3f61f88) SHA1(a56ce094fe7374d3ac341d5eb9e06df083e16b1f) ) ROM_LOAD( "l1.bin", 0xb000, 0x1000, CRC(ef6e9f9e) SHA1(b1f7cc9e0a2ea08ec89428ad31161ac81e7faaaf) ) - ROM_RELOAD( 0xf000, 0x1000 ) // for interrupt/reset vectors + ROM_RELOAD( 0xf000, 0x1000 ) // for interrupt/reset vectors ROM_REGION( 0x4000, "planet", 0 ) // used at runtime - ROM_LOAD( "136012.110", 0x0000, 0x1000, CRC(6eb11221) SHA1(355b71812a18cbb2ee4dc20b3622fca1c96e4570) ) - ROM_LOAD( "136012.107", 0x1000, 0x1000, CRC(8a616a63) SHA1(76794cc4e11048bb6f2628bd8b84c9a7e2e82551) ) - ROM_LOAD( "136012.108", 0x2000, 0x1000, CRC(3f8e4cf6) SHA1(a9d0feb0892f343687e00b96f05adb423ee4d659) ) - ROM_LOAD( "136012.109", 0x3000, 0x1000, CRC(dda0c0ef) SHA1(6e547c07c1abd17383a4389b0b4ced442ed65ce7) ) + ROM_LOAD( "136012-110.p8", 0x0000, 0x1000, CRC(6eb11221) SHA1(355b71812a18cbb2ee4dc20b3622fca1c96e4570) ) + ROM_LOAD( "136012-107.rs8", 0x1000, 0x1000, CRC(8a616a63) SHA1(76794cc4e11048bb6f2628bd8b84c9a7e2e82551) ) + ROM_LOAD( "136012-108.mn8", 0x2000, 0x1000, CRC(3f8e4cf6) SHA1(a9d0feb0892f343687e00b96f05adb423ee4d659) ) + ROM_LOAD( "136012-109.t8", 0x3000, 0x1000, CRC(dda0c0ef) SHA1(6e547c07c1abd17383a4389b0b4ced442ed65ce7) ) - ROM_REGION( 0x100, "latitude_scaler", 0 ) - ROM_LOAD_NIB_LOW ( "136012.123", 0x0000, 0x0100, CRC(b8c806e0) SHA1(19b1b9796e1e9a42899a92ec53288d17d5d15fb3) ) - ROM_LOAD_NIB_HIGH( "136012.124", 0x0000, 0x0100, CRC(e51ec78f) SHA1(224237370c418361a00d62a77d39fa494e7d8831) ) + ROM_REGION( 0x100, "latitude_scaler", 0 ) // latitude scaler + ROM_LOAD_NIB_LOW ( "136012-123.n6", 0x0000, 0x0100, CRC(b8c806e0) SHA1(19b1b9796e1e9a42899a92ec53288d17d5d15fb3) ) + ROM_LOAD_NIB_HIGH( "136012-124.p6", 0x0000, 0x0100, CRC(e51ec78f) SHA1(224237370c418361a00d62a77d39fa494e7d8831) ) - ROM_REGION( 0x100, "longitude_scaler", 0 ) - ROM_LOAD_NIB_LOW ( "136012.125", 0x0000, 0x0100, CRC(52ac8dd9) SHA1(125d54b562d079b974f2562e71ab7c7a0b97e709) ) - ROM_LOAD_NIB_HIGH( "136012.126", 0x0000, 0x0100, CRC(2e670aa6) SHA1(a6bcc49d0948d2dfe497c5e3ad4a834fa78f779a) ) + ROM_REGION( 0x100, "longitude_scaler", 0 ) // longitude scaler + ROM_LOAD_NIB_LOW ( "136012-125.t7", 0x0000, 0x0100, CRC(52ac8dd9) SHA1(125d54b562d079b974f2562e71ab7c7a0b97e709) ) + ROM_LOAD_NIB_HIGH( "136012-126.s7", 0x0000, 0x0100, CRC(2e670aa6) SHA1(a6bcc49d0948d2dfe497c5e3ad4a834fa78f779a) ) ROM_REGION( 0x200, "proms", 0 ) - ROM_LOAD( "136012.021", 0x0000, 0x0100, CRC(ffdcd7bc) SHA1(2ce733203d628e299ec4fb93db8be1598b49142c) ) // write protect PROM - ROM_LOAD( "136012.022", 0x0100, 0x0100, CRC(3353edce) SHA1(915308b11096fc1d02acf9b4af806a2a935dd748) ) // sync PROM + ROM_LOAD( "136012-021.c5", 0x0000, 0x0100, CRC(ffdcd7bc) SHA1(2ce733203d628e299ec4fb93db8be1598b49142c) ) // write protect PROM + ROM_LOAD( "136012-022.k8", 0x0100, 0x0100, CRC(3353edce) SHA1(915308b11096fc1d02acf9b4af806a2a935dd748) ) // sync PROM ROM_END } // anonymous namespace @@ -950,5 +950,5 @@ ROM_END * *************************************/ -GAME( 1982, liberatr, 0, liberatr, liberatr, liberatr_state, empty_init, ROT0, "Atari", "Liberator (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) -GAME( 1982, liberatr2, liberatr, liberat2, liberatr, liberatr_state, empty_init, ROT0, "Atari", "Liberator (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1982, liberatr, 0, liberatr, liberatr, liberatr_state, empty_init, ROT0, "Atari", "Liberator (version 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1982, liberatrp, liberatr, liberatp, liberatr, liberatr_state, empty_init, ROT0, "Atari", "Liberator (prototype)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/atari/quantum.cpp b/src/mame/atari/quantum.cpp index ab6eb93a9d5..8c9b59be39f 100644 --- a/src/mame/atari/quantum.cpp +++ b/src/mame/atari/quantum.cpp @@ -354,16 +354,16 @@ void quantum_state::quantum(machine_config &config) ROM_START( quantum ) ROM_REGION( 0x014000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "136016.201", 0x000000, 0x002000, CRC(7e7be63a) SHA1(11b2d0168cdbaa7a48656b77abc0bcbe9408fe84) ) - ROM_LOAD16_BYTE( "136016.206", 0x000001, 0x002000, CRC(2d8f5759) SHA1(54b0388ef44b5d34e621b48b465566aa16887e8f) ) - ROM_LOAD16_BYTE( "136016.102", 0x004000, 0x002000, CRC(408d34f4) SHA1(9a30debd1240b9c103134701943c94d6b48b926d) ) - ROM_LOAD16_BYTE( "136016.107", 0x004001, 0x002000, CRC(63154484) SHA1(c098cdbc339c9ea291c4c4fb203c60b3284e894a) ) - ROM_LOAD16_BYTE( "136016.203", 0x008000, 0x002000, CRC(bdc52fad) SHA1(c8ede54a4f7f555adffa5b4bfea6bf646a0d02d4) ) - ROM_LOAD16_BYTE( "136016.208", 0x008001, 0x002000, CRC(dab4066b) SHA1(dbb82df8e6de4e0f9f6e7ddd5f07618864fce8f9) ) - ROM_LOAD16_BYTE( "136016.104", 0x00C000, 0x002000, CRC(bf271e5c) SHA1(012edb947f1437932b9283e49d025a7794c45669) ) - ROM_LOAD16_BYTE( "136016.109", 0x00C001, 0x002000, CRC(d2894424) SHA1(5390025136b677b66d948c8cf6ea5e20203a4bae) ) - ROM_LOAD16_BYTE( "136016.105", 0x010000, 0x002000, CRC(13ec512c) SHA1(22a0395135b83ba47eacb5129f34fc97aa1b70a1) ) - ROM_LOAD16_BYTE( "136016.110", 0x010001, 0x002000, CRC(acb50363) SHA1(9efa9ca88efdd2d5e212bd537903892b67b4fe53) ) + ROM_LOAD16_BYTE( "136016-201.2e", 0x000000, 0x002000, CRC(7e7be63a) SHA1(11b2d0168cdbaa7a48656b77abc0bcbe9408fe84) ) + ROM_LOAD16_BYTE( "136016-206.3e", 0x000001, 0x002000, CRC(2d8f5759) SHA1(54b0388ef44b5d34e621b48b465566aa16887e8f) ) + ROM_LOAD16_BYTE( "136016-102.2f", 0x004000, 0x002000, CRC(408d34f4) SHA1(9a30debd1240b9c103134701943c94d6b48b926d) ) + ROM_LOAD16_BYTE( "136016-107.3f", 0x004001, 0x002000, CRC(63154484) SHA1(c098cdbc339c9ea291c4c4fb203c60b3284e894a) ) + ROM_LOAD16_BYTE( "136016-203.2hj", 0x008000, 0x002000, CRC(bdc52fad) SHA1(c8ede54a4f7f555adffa5b4bfea6bf646a0d02d4) ) + ROM_LOAD16_BYTE( "136016-208.3hj", 0x008001, 0x002000, CRC(dab4066b) SHA1(dbb82df8e6de4e0f9f6e7ddd5f07618864fce8f9) ) + ROM_LOAD16_BYTE( "136016-104.2k", 0x00C000, 0x002000, CRC(bf271e5c) SHA1(012edb947f1437932b9283e49d025a7794c45669) ) + ROM_LOAD16_BYTE( "136016-109.3k", 0x00C001, 0x002000, CRC(d2894424) SHA1(5390025136b677b66d948c8cf6ea5e20203a4bae) ) + ROM_LOAD16_BYTE( "136016-105.2l", 0x010000, 0x002000, CRC(13ec512c) SHA1(22a0395135b83ba47eacb5129f34fc97aa1b70a1) ) + ROM_LOAD16_BYTE( "136016-110.3l", 0x010001, 0x002000, CRC(acb50363) SHA1(9efa9ca88efdd2d5e212bd537903892b67b4fe53) ) /* AVG PROM */ ROM_REGION( 0x100, "avg:prom", 0 ) ROM_LOAD( "136002-125.6h", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) @@ -375,16 +375,16 @@ ROM_END ROM_START( quantum1 ) ROM_REGION( 0x014000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "136016.101", 0x000000, 0x002000, CRC(5af0bd5b) SHA1(f6e46fbebbf52294e78ae240fe2628c6b29b8dea) ) - ROM_LOAD16_BYTE( "136016.106", 0x000001, 0x002000, CRC(f9724666) SHA1(1bb073135029c92bef9afc9ccd910e0ab3302c8a) ) - ROM_LOAD16_BYTE( "136016.102", 0x004000, 0x002000, CRC(408d34f4) SHA1(9a30debd1240b9c103134701943c94d6b48b926d) ) - ROM_LOAD16_BYTE( "136016.107", 0x004001, 0x002000, CRC(63154484) SHA1(c098cdbc339c9ea291c4c4fb203c60b3284e894a) ) - ROM_LOAD16_BYTE( "136016.103", 0x008000, 0x002000, CRC(948f228b) SHA1(878ac96173a793997cc88be469ec1ccdf833a7e8) ) - ROM_LOAD16_BYTE( "136016.108", 0x008001, 0x002000, CRC(e4c48e4e) SHA1(caaf9d20741fcb961d590b634250a44a166cc33a) ) - ROM_LOAD16_BYTE( "136016.104", 0x00C000, 0x002000, CRC(bf271e5c) SHA1(012edb947f1437932b9283e49d025a7794c45669) ) - ROM_LOAD16_BYTE( "136016.109", 0x00C001, 0x002000, CRC(d2894424) SHA1(5390025136b677b66d948c8cf6ea5e20203a4bae) ) - ROM_LOAD16_BYTE( "136016.105", 0x010000, 0x002000, CRC(13ec512c) SHA1(22a0395135b83ba47eacb5129f34fc97aa1b70a1) ) - ROM_LOAD16_BYTE( "136016.110", 0x010001, 0x002000, CRC(acb50363) SHA1(9efa9ca88efdd2d5e212bd537903892b67b4fe53) ) + ROM_LOAD16_BYTE( "136016-101.2e", 0x000000, 0x002000, CRC(5af0bd5b) SHA1(f6e46fbebbf52294e78ae240fe2628c6b29b8dea) ) + ROM_LOAD16_BYTE( "136016-106.3e", 0x000001, 0x002000, CRC(f9724666) SHA1(1bb073135029c92bef9afc9ccd910e0ab3302c8a) ) + ROM_LOAD16_BYTE( "136016-102.2f", 0x004000, 0x002000, CRC(408d34f4) SHA1(9a30debd1240b9c103134701943c94d6b48b926d) ) + ROM_LOAD16_BYTE( "136016-107.3f", 0x004001, 0x002000, CRC(63154484) SHA1(c098cdbc339c9ea291c4c4fb203c60b3284e894a) ) + ROM_LOAD16_BYTE( "136016-103.2hj", 0x008000, 0x002000, CRC(948f228b) SHA1(878ac96173a793997cc88be469ec1ccdf833a7e8) ) + ROM_LOAD16_BYTE( "136016-108.3hj", 0x008001, 0x002000, CRC(e4c48e4e) SHA1(caaf9d20741fcb961d590b634250a44a166cc33a) ) + ROM_LOAD16_BYTE( "136016-104.2k", 0x00C000, 0x002000, CRC(bf271e5c) SHA1(012edb947f1437932b9283e49d025a7794c45669) ) + ROM_LOAD16_BYTE( "136016-109.3k", 0x00C001, 0x002000, CRC(d2894424) SHA1(5390025136b677b66d948c8cf6ea5e20203a4bae) ) + ROM_LOAD16_BYTE( "136016-105.2l", 0x010000, 0x002000, CRC(13ec512c) SHA1(22a0395135b83ba47eacb5129f34fc97aa1b70a1) ) + ROM_LOAD16_BYTE( "136016-110.3l", 0x010001, 0x002000, CRC(acb50363) SHA1(9efa9ca88efdd2d5e212bd537903892b67b4fe53) ) /* AVG PROM */ ROM_REGION( 0x100, "avg:prom", 0 ) ROM_LOAD( "136002-125.6h", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) @@ -400,8 +400,8 @@ ROM_START( quantump ) ROM_LOAD16_BYTE( "quantump.3e", 0x000001, 0x002000, CRC(12fc631f) SHA1(327a44da897199536f43e5f792cb4a18d9055ac4) ) ROM_LOAD16_BYTE( "quantump.2f", 0x004000, 0x002000, CRC(b64fab48) SHA1(d5a77a367d4f652261c381e6bdd55c2175ace857) ) ROM_LOAD16_BYTE( "quantump.3f", 0x004001, 0x002000, CRC(a52a9433) SHA1(33787adb04864efebb04483353bbc96c966ec607) ) - ROM_LOAD16_BYTE( "quantump.2h", 0x008000, 0x002000, CRC(5b29cba3) SHA1(e83b68907bc397994ed51a39dfa241430a0adb0c) ) - ROM_LOAD16_BYTE( "quantump.3h", 0x008001, 0x002000, CRC(c64fc03a) SHA1(ab6cd710d01bc85432cc52021f27fd8f2a5e3168) ) + ROM_LOAD16_BYTE( "quantump.2hj", 0x008000, 0x002000, CRC(5b29cba3) SHA1(e83b68907bc397994ed51a39dfa241430a0adb0c) ) + ROM_LOAD16_BYTE( "quantump.3hj", 0x008001, 0x002000, CRC(c64fc03a) SHA1(ab6cd710d01bc85432cc52021f27fd8f2a5e3168) ) ROM_LOAD16_BYTE( "quantump.2k", 0x00C000, 0x002000, CRC(854f9c09) SHA1(d908b8c7f6837e511004cbd45a8883c6c7b155dd) ) ROM_LOAD16_BYTE( "quantump.3k", 0x00C001, 0x002000, CRC(1aac576c) SHA1(28bdb5fcbd8cccc657d6e00ace3c083c21015564) ) ROM_LOAD16_BYTE( "quantump.2l", 0x010000, 0x002000, CRC(1285b5e7) SHA1(0e01e361da2d9cf1fac1896f8f44c4c2e75a3061) ) diff --git a/src/mame/funworld/supercrd.cpp b/src/mame/funworld/supercrd.cpp index 56aea6667cd..afc9bcc3fcf 100644 --- a/src/mame/funworld/supercrd.cpp +++ b/src/mame/funworld/supercrd.cpp @@ -159,6 +159,14 @@ NOTE: The 74LS374 could be replaced by a 74HCT373. + TODO: + - merge with misc/amaticmg.cpp. Hardware is almost identical and software has + definitely a common origin. + - supercrd stops with 'ELEKTRONIK DEFEKT 5'. Problem with the decryption or missing + something in the emulation? + - fruitstr glitches after boot test and then resets itself. Problem with the decryption + or missing something in the emulation? + ***********************************************************************************/ #include "emu.h" @@ -166,6 +174,7 @@ #include "cpu/z80/z80.h" #include "machine/i8255.h" #include "machine/nvram.h" +#include "sound/ymopl.h" #include "video/mc6845.h" #include "video/resnet.h" @@ -175,6 +184,16 @@ #include "tilemap.h" +// configurable logging +#define LOG_UNKOPCODES (1U << 1) + +#define VERBOSE (LOG_GENERAL | LOG_UNKOPCODES) + +#include "logmacro.h" + +#define LOGUNKOPCODES(...) LOGMASKED(LOG_UNKOPCODES, __VA_ARGS__) + + namespace { class supercrd_state : public driver_device @@ -184,7 +203,7 @@ public: driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), - m_decrypted_opcodes(*this, "decrypted_opcodes"), + m_rombank(*this, "rombank"), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode") { } @@ -195,22 +214,27 @@ public: void init_supercrd(); protected: + virtual void machine_start() override; virtual void video_start() override; private: required_shared_ptr m_videoram; required_shared_ptr m_colorram; - required_shared_ptr m_decrypted_opcodes; + required_memory_bank m_rombank; tilemap_t *m_bg_tilemap = nullptr; required_device m_maincpu; required_device m_gfxdecode; + uint8_t m_decode_table[0x04][0x08][0x08]; + + uint8_t decrypted_opcodes_r(offs_t offset); void videoram_w(offs_t offset, uint8_t data); void colorram_w(offs_t offset, uint8_t data); TILE_GET_INFO_MEMBER(get_bg_tile_info); void palette(palette_device &palette) const; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void prg_map(address_map &map); + void io_map(address_map &map); void decrypted_opcodes_map(address_map &map); }; @@ -299,23 +323,49 @@ uint32_t supercrd_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm } +uint8_t supercrd_state::decrypted_opcodes_r(offs_t offset) +{ + uint8_t const data { m_maincpu->space(AS_PROGRAM).read_byte(offset) }; + uint8_t const row = (BIT(data, 4) + (BIT(data, 6) << 1) + (BIT(data, 7) << 2)); + uint8_t const xor_v = data & 0x07; + + if (((m_decode_table[offset & 0x03][row][xor_v]) == 0x00) && (data != 0xc5) && (data != 0xcd) && (data != 0xe5) && (data != 0xed)) + LOGUNKOPCODES("at %08x check opcode: %02x\n", offset, data); + return data ^ m_decode_table[offset & 0x03][row][xor_v]; +} + +void supercrd_state::machine_start() +{ + m_rombank->configure_entries(0, 2, memregion("maincpu")->base() + 0x8000, 0x4000); // TODO: should be more than just 2, at least for supercrd, but for now games don't run enough to reach them +} + /***************************** * Memory map information * *****************************/ void supercrd_state::prg_map(address_map &map) { - map(0x0000, 0xbfff).rom(); - map(0xc000, 0xcfff).ram().w(FUNC(supercrd_state::videoram_w)).share(m_videoram); // wrong - map(0xd000, 0xdfff).ram().w(FUNC(supercrd_state::colorram_w)).share(m_colorram); // wrong -// map(0x0000, 0x0000).ram().share("nvram"); -// map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w)); -// map(0xe001, 0xe001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); + map(0x0000, 0x7fff).rom(); + map(0x8000, 0x9fff).ram(); + map(0xa000, 0xafff).ram().w(FUNC(supercrd_state::videoram_w)).share(m_videoram); + map(0xb000, 0xbfff).ram().w(FUNC(supercrd_state::colorram_w)).share(m_colorram); + map(0xc000, 0xffff).bankr(m_rombank); +} + +void supercrd_state::io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x03).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x20, 0x23).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x40, 0x41).w("ymsnd", FUNC(ym3812_device::write)); + map(0x60, 0x60).w("crtc", FUNC(mc6845_device::address_w)); + map(0x61, 0x61).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); + map(0xc0, 0xc0).lw8(NAME([this] (uint8_t data) { m_rombank->set_entry(data); })); // TODO: mask this } void supercrd_state::decrypted_opcodes_map(address_map &map) { - map(0x0000, 0xbfff).rom().share(m_decrypted_opcodes); + map(0x0000, 0xffff).r(FUNC(supercrd_state::decrypted_opcodes_r)); } @@ -364,17 +414,7 @@ static INPUT_PORTS_START( supercrd ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M) PORT_NAME("IN3-7") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN3-8") - PORT_START("IN4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("IN4-1") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("IN4-2") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("IN4-3") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("IN4-4") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("IN4-5") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("IN4-6") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("IN4-7") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("IN4-8") - - PORT_START("DSW1") + PORT_START("SW1") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -441,14 +481,22 @@ void supercrd_state::supercrd(machine_config &config) static constexpr XTAL MASTER_CLOCK = XTAL(16'000'000); // basic machine hardware - Z80(config, m_maincpu, MASTER_CLOCK / 8); // 2MHz, guess + Z80(config, m_maincpu, MASTER_CLOCK / 4); // 4MHz, guess m_maincpu->set_addrmap(AS_PROGRAM, &supercrd_state::prg_map); + m_maincpu->set_addrmap(AS_IO, &supercrd_state::io_map); m_maincpu->set_addrmap(AS_OPCODES, &supercrd_state::decrypted_opcodes_map); // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); -// I8255(config, "ppi8255_0", 0); -// I8255(config, "ppi8255_1", 0); + i8255_device &ppi0(I8255A(config, "ppi8255_0")); + ppi0.in_pa_callback().set_ioport("IN0"); + ppi0.in_pb_callback().set_ioport("IN1"); + ppi0.in_pc_callback().set_ioport("IN2"); + + i8255_device &ppi1(I8255A(config, "ppi8255_1")); + //ppi1.out_pa_callback().set(FUNC(supercrd_state::out_a_w)); + ppi1.in_pb_callback().set_ioport("SW1"); + //ppi1.out_pc_callback().set(FUNC(supercrd_state::out_c_w)); // video hardware @@ -462,15 +510,16 @@ void supercrd_state::supercrd(machine_config &config) GFXDECODE(config, m_gfxdecode, "palette", gfx_supercrd); PALETTE(config, "palette", FUNC(supercrd_state::palette), 0x200); -// mc6845_device &crtc(MC6845(config, "crtc", MASTER_CLOCK / 8)); -// crtc.set_screen("screen"); -// crtc.set_show_border_area(false); -// crtc.set_char_width(4); + mc6845_device &crtc(MC6845(config, "crtc", MASTER_CLOCK / 8)); + crtc.set_screen("screen"); + crtc.set_show_border_area(false); + crtc.set_char_width(4); + crtc.out_vsync_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); // no NMI mask? // sound hardware SPEAKER(config, "mono").front_center(); -// .add_route(ALL_OUTPUTS, "mono", 0.75); + YM3812(config, "ymsnd", MASTER_CLOCK / 4).add_route(ALL_OUTPUTS, "mono", 0.5); // Y3014B DAC } @@ -516,7 +565,7 @@ ROM_END */ ROM_START( fruitstr ) - ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "fruitstar_t10s-i-1.ic37", 0x0000, 0x8000, CRC(cd458e9f) SHA1(3fdf59360704ae1550c108c59907067fc7c8424c) ) // 1st half: empty; 2nd half: program (1st half) ROM_CONTINUE( 0x0000, 0x8000) ROM_LOAD( "fruitstar_t10s-i-2.ic51", 0x8000, 0x8000, CRC(4536976b) SHA1(9a0ef6245e5aedfdb690df4c6d7a32ebf1b22590) ) // 1st half: program (2nd half); 2nd half: empty @@ -537,164 +586,117 @@ ROM_END /* -Preliminary encryption observations: -- only opcodes seem to be encrypted; -- there seem to be 4 XOR tables selected by bits 0 and 1 of the address; -- within a table the XOR seems to be chosen depending on bits 0, 1, 2, 3, 4, 6, 7 of the data. Only bit 5 isn't considered; -- XOR values seem to only affect bits 0, 1, 4 and 6; +Encryption observations: +- only opcodes are encrypted; +- there are 4 XOR tables selected by bits 0 and 1 of the address; +- within a table the XOR is chosen depending on bits 0, 1, 2, 3, 4, 6, 7 of the data. Only bit 5 isn't considered; +- XOR values only affect bits 0, 1, 4 and 6; - the games use different XOR tables; - code is mostly the same for both games up to 0x96e, then they start differing significantly; -- it seems the encryption concept is the same or really similar to ladylinrb,c,d,e in igs/goldstar.cpp. +- the encryption concept is the same as ladylinrb,c,d,e in igs/goldstar.cpp; +- compare to suprstar in misc/amaticmg.cpp for confirmed correctly decrypted code. */ -void supercrd_state::init_supercrd() // TODO: decrypt +void supercrd_state::init_supercrd() // TODO: check unknown opcodes { uint8_t unkn = 0x00; - static const uint8_t xor_table_00[0x08][0x08] = - { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - static const uint8_t xor_table_01[0x08][0x08] = + uint8_t xor_table[0x04][0x08][0x08] = { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - static const uint8_t xor_table_02[0x08][0x08] = - { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - static const uint8_t xor_table_03[0x08][0x08] = - { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - const uint8_t *rom = memregion("maincpu")->base(); - uint32_t const len = memregion("maincpu")->bytes(); - - for (int i = 0; i < len; i++) - { - uint8_t x = rom[i]; - - uint8_t const row = (BIT(x, 4) + (BIT(x, 6) << 1) + (BIT(x, 7) << 2)); - - uint8_t const xor_v = x & 0x07; - - switch (i & 0x03) { - case 0x00: x ^= xor_table_00[row][xor_v]; break; - case 0x01: x ^= xor_table_01[row][xor_v]; break; - case 0x02: x ^= xor_table_02[row][xor_v]; break; - case 0x03: x ^= xor_table_03[row][xor_v]; break; + { 0x13, 0x11, 0x01, 0x11, 0x02, 0x50, 0x51, 0x43 }, // 0x0x and 0x2x + { 0x11, unkn, 0x50, 0x43, 0x10, 0x43, unkn, 0x02 }, // 0x1x and 0x3x + { 0x51, 0x13, 0x02, 0x12, 0x43, 0x00, unkn, 0x51 }, // 0x4x and 0x6x + { 0x50, 0x53, 0x13, 0x00, 0x51, 0x12, 0x02, 0x11 }, // 0x5x and 0x7x + { 0x12, unkn, 0x40, 0x51, 0x03, 0x50, unkn, 0x12 }, // 0x8x and 0xax + { 0x50, 0x01, 0x53, 0x50, 0x43, 0x43, unkn, 0x00 }, // 0x9x and 0xbx + { unkn, 0x41, 0x43, 0x52, 0x42, 0x00, unkn, unkn }, // 0xcx and 0xex + { 0x43, 0x02, unkn, 0x02, unkn, 0x43, 0x10, 0x43 } // 0xdx and 0xfx + }, + { + { 0x13, 0x10, 0x02, unkn, 0x50, 0x43, 0x11, 0x51 }, // 0x0x and 0x2x + { 0x43, 0x41, 0x43, unkn, 0x50, 0x00, 0x51, 0x01 }, // 0x1x and 0x3x + { 0x52, 0x51, 0x00, 0x40, 0x40, 0x00, 0x52, 0x40 }, // 0x4x and 0x6x + { 0x52, 0x50, 0x13, 0x01, 0x52, 0x02, 0x03, 0x52 }, // 0x5x and 0x7x + { 0x43, unkn, 0x50, 0x41, 0x12, 0x51, 0x11, unkn }, // 0x8x and 0xax + { 0x43, 0x00, 0x01, 0x42, unkn, unkn, 0x40, unkn }, // 0x9x and 0xbx + { unkn, unkn, unkn, 0x52, unkn, 0x00, 0x53, 0x01 }, // 0xcx and 0xex + { 0x51, 0x10, 0x12, 0x41, 0x50, 0x00, 0x50, 0x50 } // 0xdx and 0xfx + }, + { + { 0x43, 0x51, 0x01, 0x13, 0x51, 0x42, unkn, 0x01 }, // 0x0x and 0x2x + { 0x50, 0x43, 0x13, 0x11, unkn, 0x42, 0x12, 0x01 }, // 0x1x and 0x3x + { 0x53, 0x10, 0x11, 0x52, 0x51, 0x00, 0x10, 0x13 }, // 0x4x and 0x6x + { 0x42, 0x13, unkn, 0x53, 0x40, 0x52, 0x10, 0x52 }, // 0x5x and 0x7x + { 0x40, 0x43, 0x51, 0x51, 0x51, 0x01, unkn, 0x00 }, // 0x8x and 0xax + { unkn, 0x01, 0x43, 0x02, unkn, 0x53, unkn, unkn }, // 0x9x and 0xbx + { 0x01, 0x02, unkn, 0x50, 0x51, 0x00, 0x51, 0x10 }, // 0xcx and 0xex + { 0x42, unkn, unkn, unkn, 0x00, 0x41, unkn, 0x01 } // 0xdx and 0xfx + }, + { + { 0x42, 0x00, 0x43, 0x53, 0x03, 0x53, 0x00, 0x11 }, // 0x0x and 0x2x + { 0x13, 0x02, 0x12, 0x11, 0x41, 0x02, 0x50, 0x53 }, // 0x1x and 0x3x + { 0x00, 0x12, 0x52, 0x12, 0x03, 0x00, 0x43, 0x43 }, // 0x4x and 0x6x + { 0x42, 0x40, 0x11, 0x01, unkn, 0x02, 0x02, 0x43 }, // 0x5x and 0x7x + { unkn, 0x12, 0x50, 0x43, 0x13, unkn, unkn, 0x02 }, // 0x8x and 0xax + { 0x51, 0x01, 0x10, 0x02, 0x52, unkn, 0x43, unkn }, // 0x9x and 0xbx + { 0x02, 0x02, unkn, 0x10, unkn, 0x00, 0x10, 0x40 }, // 0xcx and 0xex + { 0x01, 0x01, 0x53, 0x50, 0x41, unkn, 0x12, 0x03 } // 0xdx and 0xfx } + }; - m_decrypted_opcodes[i] = x; - } + std::copy(&xor_table[0][0][0], &xor_table[0][0][0] + 0x04 * 0x08 * 0x08, &m_decode_table[0][0][0]); } -void supercrd_state::init_fruitstr() // TODO: decrypt +void supercrd_state::init_fruitstr() // TODO: check unknown opcodes { uint8_t unkn = 0x00; - static const uint8_t xor_table_00[0x08][0x08] = - { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - static const uint8_t xor_table_01[0x08][0x08] = - { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - static const uint8_t xor_table_02[0x08][0x08] = + uint8_t xor_table[0x04][0x08][0x08] = { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - static const uint8_t xor_table_03[0x08][0x08] = - { - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x0x and 0x2x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x1x and 0x3x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x4x and 0x6x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x5x and 0x7x - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x8x and 0xax - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xcx and 0xex - { unkn, unkn, unkn, unkn, unkn, unkn, unkn, unkn }, // 0xdx and 0xfx - }; - - const uint8_t *rom = memregion("maincpu")->base(); - uint32_t const len = memregion("maincpu")->bytes(); - - for (int i = 0; i < len; i++) - { - uint8_t x = rom[i]; - - uint8_t const row = (BIT(x, 4) + (BIT(x, 6) << 1) + (BIT(x, 7) << 2)); - - uint8_t const xor_v = x & 0x07; - - switch (i & 0x03) { - case 0x00: x ^= xor_table_00[row][xor_v]; break; - case 0x01: x ^= xor_table_01[row][xor_v]; break; - case 0x02: x ^= xor_table_02[row][xor_v]; break; - case 0x03: x ^= xor_table_03[row][xor_v]; break; + { 0x40, 0x52, 0x53, 0x11, 0x40, 0x02, 0x10, 0x40 }, // 0x0x and 0x2x + { 0x11, 0x00, 0x02, 0x43, 0x40, 0x10, 0x00, 0x40 }, // 0x1x and 0x3x + { 0x40, 0x03, 0x10, 0x02, 0x02, unkn, 0x40, 0x43 }, // 0x4x and 0x6x + { 0x52, 0x12, 0x41, 0x50, 0x02, 0x00, 0x43, 0x40 }, // 0x5x and 0x7x + { unkn, unkn, 0x12, 0x42, 0x51, 0x53, unkn, unkn }, // 0x8x and 0xax + { 0x43, 0x52, 0x50, 0x01, unkn, unkn, 0x00, unkn }, // 0x9x and 0xbx + { 0x11, 0x13, 0x53, 0x50, 0x02, 0x00, 0x41, unkn }, // 0xcx and 0xex + { 0x50, 0x50, 0x12, unkn, unkn, 0x41, 0x43, 0x40 } // 0xdx and 0xfx + }, + { + { 0x42, 0x11, 0x51, 0x51, 0x51, 0x12, 0x10, unkn }, // 0x0x and 0x2x + { 0x40, 0x12, 0x13, 0x01, 0x42, 0x10, 0x51, 0x03 }, // 0x1x and 0x3x + { 0x01, 0x41, 0x11, 0x41, 0x42, unkn, 0x41, 0x01 }, // 0x4x and 0x6x + { unkn, 0x40, 0x41, 0x02, 0x41, 0x11, 0x02, 0x00 }, // 0x5x and 0x7x + { 0x12, 0x41, 0x50, 0x42, 0x00, unkn, unkn, 0x03 }, // 0x8x and 0xax + { 0x11, 0x40, 0x02, unkn, 0x52, 0x43, 0x00, 0x40 }, // 0x9x and 0xbx + { 0x51, 0x52, unkn, unkn, 0x51, 0x00, 0x00, 0x50 }, // 0xcx and 0xex + { 0x13, unkn, 0x10, 0x00, unkn, 0x01, 0x51, 0x02 } // 0xdx and 0xfx + }, + { + { unkn, 0x12, 0x50, 0x41, 0x53, 0x11, 0x03, 0x51 }, // 0x0x and 0x2x + { 0x11, 0x40, 0x10, 0x01, 0x01, 0x11, 0x42, 0x01 }, // 0x1x and 0x3x + { 0x00, 0x51, unkn, 0x40, 0x03, 0x00, unkn, 0x50 }, // 0x4x and 0x6x + { 0x03, 0x51, 0x43, 0x03, 0x01, 0x53, 0x10, 0x50 }, // 0x5x and 0x7x + { 0x51, 0x40, 0x51, 0x02, 0x02, 0x52, 0x40, 0x13 }, // 0x8x and 0xax + { unkn, unkn, 0x02, 0x41, 0x42, 0x51, unkn, 0x13 }, // 0x9x and 0xbx + { 0x51, 0x52, 0x02, 0x00, unkn, 0x00, 0x53, 0x13 }, // 0xcx and 0xex + { unkn, 0x13, unkn, 0x41, 0x53, 0x42, 0x40, 0x02 } // 0xdx and 0xfx + }, + { + { 0x41, 0x13, 0x13, 0x13, 0x42, 0x42, 0x10, 0x01 }, // 0x0x and 0x2x + { 0x52, 0x12, 0x13, 0x53, 0x41, 0x10, 0x02, 0x41 }, // 0x1x and 0x3x + { 0x11, 0x13, 0x11, 0x50, 0x40, 0x00, unkn, 0x10 }, // 0x4x and 0x6x + { 0x52, 0x01, 0x11, 0x53, 0x10, 0x01, unkn, 0x50 }, // 0x5x and 0x7x + { 0x03, unkn, 0x52, 0x02, 0x42, 0x10, 0x52, unkn }, // 0x8x and 0xax + { 0x01, 0x01, 0x52, 0x40, 0x11, unkn, unkn, unkn }, // 0x9x and 0xbx + { 0x53, 0x43, 0x13, unkn, unkn, 0x00, 0x51, 0x12 }, // 0xcx and 0xex + { 0x13, 0x03, 0x10, 0x12, 0x52, 0x03, 0x51, unkn } // 0xdx and 0xfx } + }; - m_decrypted_opcodes[i] = x; - } + std::copy(&xor_table[0][0][0], &xor_table[0][0][0] + 0x04 * 0x08 * 0x08, &m_decode_table[0][0][0]); } } // anonymous namespace diff --git a/src/mame/mame.lst b/src/mame/mame.lst index fe0af2b0fc5..53c870590e3 100755 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -1824,7 +1824,7 @@ klaxj4 // 136075 (c) 1989 (Japan) @source:atari/liberatr.cpp liberatr // 136012 (c) 1982 -liberatr2 // 136012 (c) 1982 +liberatrp // 136012 (c) 1982 @source:atari/lynx.cpp lynx // Atari Lynx Handheld -- cgit v1.2.3