mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
- funworld/supercrd.cpp: preliminary decryption
- atari/liberatr.cpp, atari/quantum.cpp: corrections to ROM naming and PCB locations [Brian Troha]
This commit is contained in:
parent
40c013aa27
commit
8cf43c89fd
@ -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<m6502_device>("maincpu")->set_addrmap(AS_PROGRAM, &liberatr_state::liberat2_map);
|
||||
subdevice<m6502_device>("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 )
|
||||
|
@ -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) )
|
||||
|
@ -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<uint8_t> m_videoram;
|
||||
required_shared_ptr<uint8_t> m_colorram;
|
||||
required_shared_ptr<uint8_t> m_decrypted_opcodes;
|
||||
required_memory_bank m_rombank;
|
||||
tilemap_t *m_bg_tilemap = nullptr;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_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] =
|
||||
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_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] =
|
||||
{
|
||||
{ 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] =
|
||||
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_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] =
|
||||
{
|
||||
{ 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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user