diff --git a/src/mame/drivers/qix.c b/src/mame/drivers/qix.c index 5bdf1f3bae0..ec599689ade 100644 --- a/src/mame/drivers/qix.c +++ b/src/mame/drivers/qix.c @@ -225,6 +225,7 @@ Interrupts: #include "rendlay.h" #include "machine/6821pia.h" #include "qix.h" +#include "cpu/m6809/m6809.h" #include "elecyoyo.lh" @@ -542,6 +543,11 @@ INPUT_PORTS_END * *************************************/ +static const m6809_config encryption_config = +{ + TRUE, /* encrypt only the first byte in 10 xx and 11 xx opcodes */ +}; + static MACHINE_DRIVER_START( qix ) MDRV_DRIVER_DATA(qix_state) @@ -549,6 +555,7 @@ static MACHINE_DRIVER_START( qix ) /* basic machine hardware */ MDRV_CPU_ADD("main", M6809, MAIN_CLOCK_OSC/4/4) /* 1.25 MHz */ MDRV_CPU_PROGRAM_MAP(main_map,0) + MDRV_CPU_CONFIG(encryption_config) // for kram3 /* high interleave needed to ensure correct text in service mode */ /* Zookeeper settings and high score table seem especially sensitive to this */ @@ -738,23 +745,23 @@ ROM_END ROM_START( elecyoyo ) ROM_REGION( 0x10000, "main", 0 ) - ROM_LOAD( "yy14", 0xa000, 0x1000, CRC(0d2edcb9) SHA1(36e1a1aa81111f38e1c06a8174e7de406478cc67) ) - ROM_LOAD( "yy15", 0xb000, 0x1000, CRC(a91f01e3) SHA1(7818299d25a0816b856e83fae02d8019e5e8b4a3) ) - ROM_LOAD( "yy16-1", 0xc000, 0x1000, CRC(2710f360) SHA1(4a6210b07618fba261c38b7bf9a779598dd6bb3c) ) - ROM_LOAD( "yy17", 0xd000, 0x1000, CRC(25fd489d) SHA1(ca7b8d1bcbc223fc0706c8f2e9f02821519b75e4) ) - ROM_LOAD( "yy18", 0xe000, 0x1000, CRC(0b6661c0) SHA1(3e24acbfea1a3b83223d780ea34c83759a751175) ) - ROM_LOAD( "yy19-1", 0xf000, 0x1000, CRC(95b8b244) SHA1(2852dcfc6a638118ee7fe60b957d8aa9a5a8984c) ) + ROM_LOAD( "yy14", 0xa000, 0x1000, CRC(0d2edcb9) SHA1(36e1a1aa81111f38e1c06a8174e7de406478cc67) ) + ROM_LOAD( "yy15", 0xb000, 0x1000, CRC(a91f01e3) SHA1(7818299d25a0816b856e83fae02d8019e5e8b4a3) ) + ROM_LOAD( "yy16-1", 0xc000, 0x1000, CRC(2710f360) SHA1(4a6210b07618fba261c38b7bf9a779598dd6bb3c) ) + ROM_LOAD( "yy17", 0xd000, 0x1000, CRC(25fd489d) SHA1(ca7b8d1bcbc223fc0706c8f2e9f02821519b75e4) ) + ROM_LOAD( "yy18", 0xe000, 0x1000, CRC(0b6661c0) SHA1(3e24acbfea1a3b83223d780ea34c83759a751175) ) + ROM_LOAD( "yy19-1", 0xf000, 0x1000, CRC(95b8b244) SHA1(2852dcfc6a638118ee7fe60b957d8aa9a5a8984c) ) ROM_REGION( 0x10000, "video", 0 ) - ROM_LOAD( "yy5", 0xa000, 0x1000, CRC(3793fec5) SHA1(d31f3ba6364755c98beb814b5e7d5541e8b4e1a0) ) - ROM_LOAD( "yy6", 0xb000, 0x1000, CRC(2e8b1265) SHA1(6fb67b6a5b627bcbd10c72ac8c9e4d9f4dd7860f) ) - ROM_LOAD( "yy7", 0xc000, 0x1000, CRC(20f93411) SHA1(126c27442a4e35d054a236c41930603241d08ccf) ) - ROM_LOAD( "yy8", 0xd000, 0x1000, CRC(926f90c8) SHA1(dbdfc0e9184a4d9d44d04fdb8fed19b35a8edadc) ) - ROM_LOAD( "yy9", 0xe000, 0x1000, CRC(2f999480) SHA1(582baf285cadf8431ff80f5b63a02fbbefb62e45) ) - ROM_LOAD( "yy10", 0xf000, 0x1000, CRC(b31d20e2) SHA1(e2ba4e6b81a02c3c02353774eb63a72cdfe5f2c3) ) + ROM_LOAD( "yy5", 0xa000, 0x1000, CRC(3793fec5) SHA1(d31f3ba6364755c98beb814b5e7d5541e8b4e1a0) ) + ROM_LOAD( "yy6", 0xb000, 0x1000, CRC(2e8b1265) SHA1(6fb67b6a5b627bcbd10c72ac8c9e4d9f4dd7860f) ) + ROM_LOAD( "yy7", 0xc000, 0x1000, CRC(20f93411) SHA1(126c27442a4e35d054a236c41930603241d08ccf) ) + ROM_LOAD( "yy8", 0xd000, 0x1000, CRC(926f90c8) SHA1(dbdfc0e9184a4d9d44d04fdb8fed19b35a8edadc) ) + ROM_LOAD( "yy9", 0xe000, 0x1000, CRC(2f999480) SHA1(582baf285cadf8431ff80f5b63a02fbbefb62e45) ) + ROM_LOAD( "yy10", 0xf000, 0x1000, CRC(b31d20e2) SHA1(e2ba4e6b81a02c3c02353774eb63a72cdfe5f2c3) ) ROM_REGION( 0x10000, "audio", 0 ) - ROM_LOAD( "yy27", 0xf800, 0x0800, CRC(5a2aa0f3) SHA1(16c7c2db39f33ea3506e07312352ccbfe5528fbd) ) + ROM_LOAD( "yy27", 0xf800, 0x0800, CRC(5a2aa0f3) SHA1(16c7c2db39f33ea3506e07312352ccbfe5528fbd) ) ROM_REGION( 0x0800, "mcu", 0 ) ROM_LOAD( "yy101", 0x0000, 0x0800, CRC(3cf13038) SHA1(29c1b309d9046087a50ca78a5f7cba694271af26) ) @@ -763,23 +770,23 @@ ROM_END ROM_START( elecyoy2 ) ROM_REGION( 0x10000, "main", 0 ) - ROM_LOAD( "yy14", 0xa000, 0x1000, CRC(0d2edcb9) SHA1(36e1a1aa81111f38e1c06a8174e7de406478cc67) ) - ROM_LOAD( "yy15", 0xb000, 0x1000, CRC(a91f01e3) SHA1(7818299d25a0816b856e83fae02d8019e5e8b4a3) ) - ROM_LOAD( "yy16", 0xc000, 0x1000, CRC(cab19f3a) SHA1(df41649a800b77f046edb6623f65d100f6a8ef5f) ) - ROM_LOAD( "yy17", 0xd000, 0x1000, CRC(25fd489d) SHA1(ca7b8d1bcbc223fc0706c8f2e9f02821519b75e4) ) - ROM_LOAD( "yy18", 0xe000, 0x1000, CRC(0b6661c0) SHA1(3e24acbfea1a3b83223d780ea34c83759a751175) ) - ROM_LOAD( "yy19", 0xf000, 0x1000, CRC(d0215d2e) SHA1(816131bc272252df6cea1b84a42750a71ce4f427) ) + ROM_LOAD( "yy14", 0xa000, 0x1000, CRC(0d2edcb9) SHA1(36e1a1aa81111f38e1c06a8174e7de406478cc67) ) + ROM_LOAD( "yy15", 0xb000, 0x1000, CRC(a91f01e3) SHA1(7818299d25a0816b856e83fae02d8019e5e8b4a3) ) + ROM_LOAD( "yy16", 0xc000, 0x1000, CRC(cab19f3a) SHA1(df41649a800b77f046edb6623f65d100f6a8ef5f) ) + ROM_LOAD( "yy17", 0xd000, 0x1000, CRC(25fd489d) SHA1(ca7b8d1bcbc223fc0706c8f2e9f02821519b75e4) ) + ROM_LOAD( "yy18", 0xe000, 0x1000, CRC(0b6661c0) SHA1(3e24acbfea1a3b83223d780ea34c83759a751175) ) + ROM_LOAD( "yy19", 0xf000, 0x1000, CRC(d0215d2e) SHA1(816131bc272252df6cea1b84a42750a71ce4f427) ) ROM_REGION( 0x10000, "video", 0 ) - ROM_LOAD( "yy5", 0xa000, 0x1000, CRC(3793fec5) SHA1(d31f3ba6364755c98beb814b5e7d5541e8b4e1a0) ) - ROM_LOAD( "yy6", 0xb000, 0x1000, CRC(2e8b1265) SHA1(6fb67b6a5b627bcbd10c72ac8c9e4d9f4dd7860f) ) - ROM_LOAD( "yy7", 0xc000, 0x1000, CRC(20f93411) SHA1(126c27442a4e35d054a236c41930603241d08ccf) ) - ROM_LOAD( "yy8", 0xd000, 0x1000, CRC(926f90c8) SHA1(dbdfc0e9184a4d9d44d04fdb8fed19b35a8edadc) ) - ROM_LOAD( "yy9", 0xe000, 0x1000, CRC(2f999480) SHA1(582baf285cadf8431ff80f5b63a02fbbefb62e45) ) - ROM_LOAD( "yy10", 0xf000, 0x1000, CRC(b31d20e2) SHA1(e2ba4e6b81a02c3c02353774eb63a72cdfe5f2c3) ) + ROM_LOAD( "yy5", 0xa000, 0x1000, CRC(3793fec5) SHA1(d31f3ba6364755c98beb814b5e7d5541e8b4e1a0) ) + ROM_LOAD( "yy6", 0xb000, 0x1000, CRC(2e8b1265) SHA1(6fb67b6a5b627bcbd10c72ac8c9e4d9f4dd7860f) ) + ROM_LOAD( "yy7", 0xc000, 0x1000, CRC(20f93411) SHA1(126c27442a4e35d054a236c41930603241d08ccf) ) + ROM_LOAD( "yy8", 0xd000, 0x1000, CRC(926f90c8) SHA1(dbdfc0e9184a4d9d44d04fdb8fed19b35a8edadc) ) + ROM_LOAD( "yy9", 0xe000, 0x1000, CRC(2f999480) SHA1(582baf285cadf8431ff80f5b63a02fbbefb62e45) ) + ROM_LOAD( "yy10", 0xf000, 0x1000, CRC(b31d20e2) SHA1(e2ba4e6b81a02c3c02353774eb63a72cdfe5f2c3) ) ROM_REGION( 0x10000, "audio", 0 ) - ROM_LOAD( "yy27", 0xf800, 0x0800, CRC(5a2aa0f3) SHA1(16c7c2db39f33ea3506e07312352ccbfe5528fbd) ) + ROM_LOAD( "yy27", 0xf800, 0x0800, CRC(5a2aa0f3) SHA1(16c7c2db39f33ea3506e07312352ccbfe5528fbd) ) ROM_REGION( 0x0800, "mcu", 0 ) ROM_LOAD( "yy101", 0x0000, 0x0800, CRC(3cf13038) SHA1(29c1b309d9046087a50ca78a5f7cba694271af26) ) @@ -788,23 +795,23 @@ ROM_END ROM_START( kram ) ROM_REGION( 0x10000, "main", 0 ) - ROM_LOAD( "ks14-1", 0xa000, 0x1000, CRC(fe69ac79) SHA1(6df0f98e6c0901c058123988bf22a6dd9f0a1fac) ) - ROM_LOAD( "ks15", 0xb000, 0x1000, CRC(4b2c175e) SHA1(4f9d4dcc78a12e994d499b182c8229d5fa63b805) ) - ROM_LOAD( "ks16", 0xc000, 0x1000, CRC(9500a05d) SHA1(18e0107111f79ba5dc6d568e3a6e7e7778955d0b) ) - ROM_LOAD( "ks17", 0xd000, 0x1000, CRC(c752a3a1) SHA1(1d03ea97b9ca6fa3d4c43ac867ab737439d987af) ) - ROM_LOAD( "ks18", 0xe000, 0x1000, CRC(79158b03) SHA1(0d4873471b5b7ace0de8ec421ff3d74650790f7e) ) - ROM_LOAD( "ks19-1", 0xf000, 0x1000, CRC(759ea6ce) SHA1(7962f713dd93c73475fa1f64635d8e965336484b) ) + ROM_LOAD( "ks14-1", 0xa000, 0x1000, CRC(fe69ac79) SHA1(6df0f98e6c0901c058123988bf22a6dd9f0a1fac) ) + ROM_LOAD( "ks15", 0xb000, 0x1000, CRC(4b2c175e) SHA1(4f9d4dcc78a12e994d499b182c8229d5fa63b805) ) + ROM_LOAD( "ks16", 0xc000, 0x1000, CRC(9500a05d) SHA1(18e0107111f79ba5dc6d568e3a6e7e7778955d0b) ) + ROM_LOAD( "ks17", 0xd000, 0x1000, CRC(c752a3a1) SHA1(1d03ea97b9ca6fa3d4c43ac867ab737439d987af) ) + ROM_LOAD( "ks18", 0xe000, 0x1000, CRC(79158b03) SHA1(0d4873471b5b7ace0de8ec421ff3d74650790f7e) ) + ROM_LOAD( "ks19-1", 0xf000, 0x1000, CRC(759ea6ce) SHA1(7962f713dd93c73475fa1f64635d8e965336484b) ) ROM_REGION( 0x10000, "video", 0 ) - ROM_LOAD( "ks5", 0xa000, 0x1000, CRC(1c472080) SHA1(a85400be562ef6b817f8a654f29d966d3a198ab4) ) - ROM_LOAD( "ks6", 0xb000, 0x1000, CRC(b8926622) SHA1(e25a8b2ff192f6ab0328fd7b3c58d638342f79e2) ) - ROM_LOAD( "ks7", 0xc000, 0x1000, CRC(c98a7485) SHA1(e310d53ae65d456e12a2475e9ac578592b0e82ba) ) - ROM_LOAD( "ks8", 0xd000, 0x1000, CRC(1127c4e4) SHA1(d78a8a964aac29fb71a55acf7956355724a234eb) ) - ROM_LOAD( "ks9", 0xe000, 0x1000, CRC(d3bc8b5e) SHA1(2c5b882c54bdb48f9a76abfe734b99390b89d76c) ) - ROM_LOAD( "ks10", 0xf000, 0x1000, CRC(e0426444) SHA1(3c4ea66f8ee907452e67aeb7cfaa15bee02b004b) ) + ROM_LOAD( "ks5", 0xa000, 0x1000, CRC(1c472080) SHA1(a85400be562ef6b817f8a654f29d966d3a198ab4) ) + ROM_LOAD( "ks6", 0xb000, 0x1000, CRC(b8926622) SHA1(e25a8b2ff192f6ab0328fd7b3c58d638342f79e2) ) + ROM_LOAD( "ks7", 0xc000, 0x1000, CRC(c98a7485) SHA1(e310d53ae65d456e12a2475e9ac578592b0e82ba) ) + ROM_LOAD( "ks8", 0xd000, 0x1000, CRC(1127c4e4) SHA1(d78a8a964aac29fb71a55acf7956355724a234eb) ) + ROM_LOAD( "ks9", 0xe000, 0x1000, CRC(d3bc8b5e) SHA1(2c5b882c54bdb48f9a76abfe734b99390b89d76c) ) + ROM_LOAD( "ks10", 0xf000, 0x1000, CRC(e0426444) SHA1(3c4ea66f8ee907452e67aeb7cfaa15bee02b004b) ) ROM_REGION( 0x10000, "audio", 0 ) - ROM_LOAD( "ks27", 0xf800, 0x0800, CRC(c46530c8) SHA1(d2df3f2228a5cff7d7b04b5bbbc4820d2fe84d8d) ) + ROM_LOAD( "ks27", 0xf800, 0x0800, CRC(c46530c8) SHA1(d2df3f2228a5cff7d7b04b5bbbc4820d2fe84d8d) ) ROM_REGION( 0x0800, "mcu", 0 ) ROM_LOAD( "ks101.dat", 0x0000, 0x0800, CRC(e53d97b7) SHA1(acfc3a5c5e73bd2d37e04ac357043b708d1982de) ) @@ -813,23 +820,23 @@ ROM_END ROM_START( kram2 ) ROM_REGION( 0x10000, "main", 0 ) - ROM_LOAD( "ks14", 0xa000, 0x1000, CRC(a2eac1ff) SHA1(128f83b1760492cbb272828ad8c67ea9a5db862a) ) - ROM_LOAD( "ks15", 0xb000, 0x1000, CRC(4b2c175e) SHA1(4f9d4dcc78a12e994d499b182c8229d5fa63b805) ) - ROM_LOAD( "ks16", 0xc000, 0x1000, CRC(9500a05d) SHA1(18e0107111f79ba5dc6d568e3a6e7e7778955d0b) ) - ROM_LOAD( "ks17", 0xd000, 0x1000, CRC(c752a3a1) SHA1(1d03ea97b9ca6fa3d4c43ac867ab737439d987af) ) - ROM_LOAD( "ks18", 0xe000, 0x1000, CRC(79158b03) SHA1(0d4873471b5b7ace0de8ec421ff3d74650790f7e) ) - ROM_LOAD( "ks19", 0xf000, 0x1000, CRC(053c5e09) SHA1(cd6e5b54abf73c1ccf318ca18fceb56b51a3847f) ) + ROM_LOAD( "ks14", 0xa000, 0x1000, CRC(a2eac1ff) SHA1(128f83b1760492cbb272828ad8c67ea9a5db862a) ) + ROM_LOAD( "ks15", 0xb000, 0x1000, CRC(4b2c175e) SHA1(4f9d4dcc78a12e994d499b182c8229d5fa63b805) ) + ROM_LOAD( "ks16", 0xc000, 0x1000, CRC(9500a05d) SHA1(18e0107111f79ba5dc6d568e3a6e7e7778955d0b) ) + ROM_LOAD( "ks17", 0xd000, 0x1000, CRC(c752a3a1) SHA1(1d03ea97b9ca6fa3d4c43ac867ab737439d987af) ) + ROM_LOAD( "ks18", 0xe000, 0x1000, CRC(79158b03) SHA1(0d4873471b5b7ace0de8ec421ff3d74650790f7e) ) + ROM_LOAD( "ks19", 0xf000, 0x1000, CRC(053c5e09) SHA1(cd6e5b54abf73c1ccf318ca18fceb56b51a3847f) ) ROM_REGION( 0x10000, "video", 0 ) - ROM_LOAD( "ks5", 0xa000, 0x1000, CRC(1c472080) SHA1(a85400be562ef6b817f8a654f29d966d3a198ab4) ) - ROM_LOAD( "ks6", 0xb000, 0x1000, CRC(b8926622) SHA1(e25a8b2ff192f6ab0328fd7b3c58d638342f79e2) ) - ROM_LOAD( "ks7", 0xc000, 0x1000, CRC(c98a7485) SHA1(e310d53ae65d456e12a2475e9ac578592b0e82ba) ) - ROM_LOAD( "ks8", 0xd000, 0x1000, CRC(1127c4e4) SHA1(d78a8a964aac29fb71a55acf7956355724a234eb) ) - ROM_LOAD( "ks9", 0xe000, 0x1000, CRC(d3bc8b5e) SHA1(2c5b882c54bdb48f9a76abfe734b99390b89d76c) ) - ROM_LOAD( "ks10", 0xf000, 0x1000, CRC(e0426444) SHA1(3c4ea66f8ee907452e67aeb7cfaa15bee02b004b) ) + ROM_LOAD( "ks5", 0xa000, 0x1000, CRC(1c472080) SHA1(a85400be562ef6b817f8a654f29d966d3a198ab4) ) + ROM_LOAD( "ks6", 0xb000, 0x1000, CRC(b8926622) SHA1(e25a8b2ff192f6ab0328fd7b3c58d638342f79e2) ) + ROM_LOAD( "ks7", 0xc000, 0x1000, CRC(c98a7485) SHA1(e310d53ae65d456e12a2475e9ac578592b0e82ba) ) + ROM_LOAD( "ks8", 0xd000, 0x1000, CRC(1127c4e4) SHA1(d78a8a964aac29fb71a55acf7956355724a234eb) ) + ROM_LOAD( "ks9", 0xe000, 0x1000, CRC(d3bc8b5e) SHA1(2c5b882c54bdb48f9a76abfe734b99390b89d76c) ) + ROM_LOAD( "ks10", 0xf000, 0x1000, CRC(e0426444) SHA1(3c4ea66f8ee907452e67aeb7cfaa15bee02b004b) ) ROM_REGION( 0x10000, "audio", 0 ) - ROM_LOAD( "ks27", 0xf800, 0x0800, CRC(c46530c8) SHA1(d2df3f2228a5cff7d7b04b5bbbc4820d2fe84d8d) ) + ROM_LOAD( "ks27", 0xf800, 0x0800, CRC(c46530c8) SHA1(d2df3f2228a5cff7d7b04b5bbbc4820d2fe84d8d) ) ROM_REGION( 0x0800, "mcu", 0 ) ROM_LOAD( "ks101.dat", 0x0000, 0x0800, CRC(e53d97b7) SHA1(acfc3a5c5e73bd2d37e04ac357043b708d1982de) ) @@ -838,29 +845,23 @@ ROM_END ROM_START( kram3 ) ROM_REGION( 0x10000, "main", 0 ) /* encrypted */ - ROM_LOAD( "kr-u14", 0xa000, 0x1000, CRC(02c1bd1e) SHA1(5f13f32ca2da0e93ed43b052c8c33af9ac67cb6c) ) - ROM_LOAD( "kr-u15", 0xb000, 0x1000, CRC(46b3ff33) SHA1(7db45971972df144a21fee4cc015b0190b502e12) ) - ROM_LOAD( "kr-u16", 0xc000, 0x1000, CRC(f202b9cf) SHA1(baf27507611c3029e2dfb1a4ff86e6fe17171246) ) - ROM_LOAD( "kr-u17", 0xd000, 0x1000, CRC(257cea23) SHA1(f9503c4a0f94d35a55033c02dda4d03737eedb90) ) - ROM_LOAD( "kr-u18", 0xe000, 0x1000, CRC(da3aed8c) SHA1(0107d58fa006a39b47513381aead760190abef35) ) - ROM_LOAD( "kr-u19", 0xf000, 0x1000, CRC(496ab571) SHA1(30e12b31ffd70a8a1ce23c845e89170ca3cabaa5) ) + ROM_LOAD( "kr-u14", 0xa000, 0x1000, CRC(02c1bd1e) SHA1(5f13f32ca2da0e93ed43b052c8c33af9ac67cb6c) ) + ROM_LOAD( "kr-u15", 0xb000, 0x1000, CRC(46b3ff33) SHA1(7db45971972df144a21fee4cc015b0190b502e12) ) + ROM_LOAD( "kr-u16", 0xc000, 0x1000, CRC(f202b9cf) SHA1(baf27507611c3029e2dfb1a4ff86e6fe17171246) ) + ROM_LOAD( "kr-u17", 0xd000, 0x1000, CRC(257cea23) SHA1(f9503c4a0f94d35a55033c02dda4d03737eedb90) ) + ROM_LOAD( "kr-u18", 0xe000, 0x1000, CRC(da3aed8c) SHA1(0107d58fa006a39b47513381aead760190abef35) ) + ROM_LOAD( "kr-u19", 0xf000, 0x1000, CRC(496ab571) SHA1(30e12b31ffd70a8a1ce23c845e89170ca3cabaa5) ) ROM_REGION( 2*0x10000, "video", 0 ) /* encrypted */ - ROM_LOAD( "kr-u5", 0xa000, 0x1000, CRC(9e63c2bc) SHA1(f61a2b93ed322b62818f31fddb324c666380eff7) ) - ROM_LOAD( "kr-u6", 0xb000, 0x1000, CRC(a0ff1244) SHA1(5bc3f3f8caac0dfc8c1381d34e5b8ef5c8202982) ) - ROM_LOAD( "kr-u7", 0xc000, 0x1000, CRC(20a15024) SHA1(094951c4cd06e32af2cb2faec04c31d55ade6b7b) ) - ROM_LOAD( "ks8", 0xd000, 0x1000, CRC(1127c4e4) SHA1(d78a8a964aac29fb71a55acf7956355724a234eb) ) - ROM_LOAD( "ks9", 0xe000, 0x1000, CRC(d3bc8b5e) SHA1(2c5b882c54bdb48f9a76abfe734b99390b89d76c) ) - ROM_LOAD( "kr-u10", 0xf000, 0x1000, CRC(0a8adbd8) SHA1(8ab806108c68aa2740d9e157dd215b371e81c482) ) + ROM_LOAD( "kr-u5", 0xa000, 0x1000, CRC(9e63c2bc) SHA1(f61a2b93ed322b62818f31fddb324c666380eff7) ) + ROM_LOAD( "kr-u6", 0xb000, 0x1000, CRC(a0ff1244) SHA1(5bc3f3f8caac0dfc8c1381d34e5b8ef5c8202982) ) + ROM_LOAD( "kr-u7", 0xc000, 0x1000, CRC(20a15024) SHA1(094951c4cd06e32af2cb2faec04c31d55ade6b7b) ) + ROM_LOAD( "ks8", 0xd000, 0x1000, CRC(1127c4e4) SHA1(d78a8a964aac29fb71a55acf7956355724a234eb) ) + ROM_LOAD( "ks9", 0xe000, 0x1000, CRC(d3bc8b5e) SHA1(2c5b882c54bdb48f9a76abfe734b99390b89d76c) ) + ROM_LOAD( "kr-u10", 0xf000, 0x1000, CRC(0a8adbd8) SHA1(8ab806108c68aa2740d9e157dd215b371e81c482) ) ROM_REGION( 0x10000, "audio", 0 ) - ROM_LOAD( "ks27", 0xf800, 0x0800, CRC(c46530c8) SHA1(d2df3f2228a5cff7d7b04b5bbbc4820d2fe84d8d) ) - - ROM_REGION( 0x5474, "user1", 0) /* decryption table */ - ROM_LOAD( "krampatch1.bin", 0, 0x5474, CRC(962dabc9) SHA1(0be692597aa895f298d8c7c6acbf84431ab1412a) ) - - ROM_REGION( 0x2764, "user2", 0) /* decryption table */ - ROM_LOAD( "krampatch2.bin", 0, 0x2764, CRC(ea26b72a) SHA1(c4f6aaf9c2ab22ef8305b57728c602e1d4d74980) ) + ROM_LOAD( "ks27", 0xf800, 0x0800, CRC(c46530c8) SHA1(d2df3f2228a5cff7d7b04b5bbbc4820d2fe84d8d) ) ROM_END @@ -1025,6 +1026,202 @@ ROM_END * *************************************/ +// 99 means the value is unknown +static int xor1_table[] = +{ + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 12, 3,15, 7,12, 7,99, 7,12,11,11,11,12, 8, 7, 8, 3,13,11,11, 4,15, 8, 6,12,99, 3, 3, 0,12, 7,13, + 3,13, 3, 3,12, 7, 8,99,13,99,11, 3,99, 8, 7, 8,13,11,11, 3, 3,15, 8, 6,12, 3, 3, 3, 0,12, 7,13, + 13,10,10,10,13, 7, 8, 7, 2, 3,13, 3, 2, 8, 7, 8, 2, 2, 2, 2,13,15, 8, 6,13,10, 6, 0, 3,12, 7,13, + 13, 2, 2, 2, 2, 7, 8, 7,13, 0,14, 0,13, 8, 7, 8,13, 0, 6,10,13,15, 8, 6,12, 3, 3, 3,12,12, 7,13, + 13,11,11,11, 4, 7, 8, 7,12, 3, 3, 3,12, 8, 7, 8,13,11,11,11, 4,15, 8, 6, 4,11,11,11, 0,12, 7,13, + 3, 3,13, 3, 3, 7, 8, 7,13, 2, 2, 2,13, 8, 7, 8,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99, 3, 3,13, 2,99, 7,99, 6, 0,13, 0, 6,15, 8, 6,10,10,10,10,10,12, 7,13, + 10,14, 8,10,10, 7, 8, 7,14, 6, 6, 6,14, 8, 7, 8,14, 6, 6, 6,10,15, 8, 6,14, 6, 6, 6, 6,12, 7,13, + 14, 6, 6, 6,10, 7, 8, 7,14, 6, 6, 6, 6, 8, 7, 8,14, 6, 6, 6, 6,15, 8, 6,14, 6, 6, 6, 6, 8, 7, 8, + 14, 2, 2, 2,14, 7, 8, 7, 2, 6,14, 6, 2, 8, 7, 8, 2, 2, 2, 2,14,15, 8, 6,14, 2, 2,10, 6,12, 7,13, + 14, 2, 2, 2, 2, 7, 8, 7,14, 6,14, 6,14, 8, 7, 8,14,10, 2, 2,14,15, 8, 6,14, 6, 6, 6,14,12, 7,13, + 14, 6,99, 6,14, 7, 8, 7,14, 6, 6,14, 2, 8,99, 8,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 2, 3,99, 1, 7, 5, 4,10, 6, 2, 8,11, 0, 1,12, 6, 6,10,12, 7, 7, 6,99, 1,14,10,12, 0,99, 8, 1, 9, + 3,15,12, 4,99, 0,11, 3,13, 1, 9, 5,11,15,10, 2, 8, 5,15, 4, 2, 9, 3,14,13,11,12,15, 6,11, 5,13, + 2,15, 2, 1, 7, 4,12, 8, 6,11, 8,10, 0, 3, 7, 6, 6,10,12, 7, 7, 6, 9, 1,14,10,12, 0,14, 8, 5, 2, + 14,15,12, 4, 0, 0,11, 3,13, 1,14, 5,15,15,10, 2, 8, 5, 9, 4, 2, 8, 3,14,13,11,12,13, 6,11,13, 2, + 13, 9, 9,12,13,12, 9,12,12,15,15, 8, 8,15,12,12,13,15,14,15,14, 2,13,12, 2,14,14,13,14,14,14,14, + 2, 2, 6, 1,10, 6, 7, 6, 9,11, 5, 0, 5, 9, 0,10,11, 3, 0, 1,10, 6, 4, 7, 5, 9, 7, 7, 2, 0, 4,10, + 0, 5, 9, 5, 7, 6, 1, 3,11, 4, 2, 4,10, 3, 0,10, 6, 4, 7,11, 2, 1, 1, 9, 3,11, 8, 3, 3, 3, 3, 9, + 5, 5, 9, 5, 7, 6, 1, 3,11, 4, 2, 4,10, 3, 0,10, 6, 4, 7,11, 2, 1, 1, 9, 3,11, 8, 3, 3,99, 3,99, + 2, 3,99, 1, 6,99, 4, 5,10, 2, 8, 1, 2, 5,15, 0,11, 3, 4, 1, 6, 7, 4, 6,10,11, 8, 9, 6, 7,12, 8, + 2,13, 1, 6, 7, 4, 5,10,11,11,14,14, 7,13,12,13, 8, 3, 0, 1, 6, 8, 5, 9,10,11, 8, 9,14, 7, 4, 5, + 15, 8, 9,14,15,12,13, 2, 3, 3,15, 6, 8,11, 9,12, 0, 3, 0, 1,15, 7,10, 5,99,11, 0,13,14,15,12,13, + 15,12, 1,99, 7, 4, 5,10,11, 3, 0, 1, 6, 7, 4, 5, 8,13, 0, 1, 6, 7, 4, 5,10, 2, 6, 7, 4, 5,10,11, + 4, 3,99, 1,99, 7, 4, 5,10,10, 9,12,99,10, 9, 3,11,99,99, 1,14,99,99,13,99,15,12, 9,14,15,12,13, + 9, 3, 0,99, 6, 7, 4, 5,10, 1, 6, 7, 4, 5,10,11,11, 2, 3, 0, 1, 6,99, 4, 5, 2,10,11, 8, 9,14,15, + 14, 8, 9,14,15,12,13, 2, 3, 8, 9,14,15,12,13, 2, 0,11, 8, 9,14,15,12,13,99, 2,12,13, 2, 3, 0, 1, + 8,11, 8, 9,14,15,12,13, 2,10, 0, 1, 6, 7, 4, 5, 3, 9,14,15,12,13, 2, 3, 0, 2, 8, 9,14,15,12,13, + 11, 3, 0, 1, 5,99,12,13,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,13, 5,99,15,12,13, + 2,13,13, 9, 9,14, 2,15,15,15,14,12, 9, 2, 9, 3, 2, 3, 0, 1, 6, 7, 4, 5,10, 2, 8,12,14,12,12,13, + 14, 3, 0, 1, 6, 7, 4, 5,10, 2, 3, 0, 1, 6, 7, 4, 5,10, 2, 0, 1, 6, 7, 4, 5,10, 2, 8, 8, 8,13,15, + 11, 3, 0, 1, 6, 7, 4, 5,10, 2, 3, 0, 1, 6, 7, 4, 5,10, 2, 0, 1, 6, 7, 4, 5,10,99, 2, 2, 2, 3, 5, + 2, 3, 0, 1, 2,11, 2,13,99, 2, 2, 9,14,15,12,13, 2,99,99, 1, 2,14,99, 2,10,11, 2, 2,14,15,12,99, + 2, 2, 2, 2, 2, 8, 5,99, 2, 2, 2, 2, 2, 7, 4, 5,99,99,99,99,99, 6,99,99, 2, 2, 2, 2, 2, 7,99, 8, + 2,99, 2,99,99, 2, 2, 2,99,99,99,99,99,99,99,99, 4, 2, 2,99, 2, 2,99, 2, 2, 2, 3, 6, 8,11, 9,12, + 15,13, 2, 2, 2, 2,99, 2, 2, 2, 2,14, 7,13,12,13, 2, 2, 2, 2, 2, 2,99, 2, 2, 2, 8, 1, 2, 5,15, 0, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 2, 8, 9,14,15,12,13, 2, 3, 0, 2,15, 2, 2, 2, 2, + 2, 2, 1, 6, 7, 4, 5,10,11, 8, 2, 2, 2, 9, 2, 2,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, +}; + +static int xor2_table[] = +{ + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 9,99,15, 7,15, 7,99, 7, 5,10, 2,10, 5,99, 7, 8,14, 5, 6,14, 1, 7,10, 0, 1,14,14, 6, 8, 8, 5,15, + 14, 5,14, 6, 9, 7, 8,99, 5,99, 6, 6, 6, 8, 7, 8,13, 2, 2,10, 2, 7,10, 0, 1,14,14, 7,13, 8, 5,15, + 13, 2,10, 2,13, 7, 8, 7, 2,14, 5,14, 2, 8, 7, 8, 8, 6, 6,14, 1, 7,10, 0, 5,10,11, 0,14, 8,99,15, + 13, 6,14, 6,14, 7, 8, 7, 5,10, 2,10, 5, 8, 7, 8,13, 2, 2,10, 5, 7,10, 0, 1,14,14, 6, 9, 8, 5,15, + 13, 2,10, 2,10, 7, 8, 7, 1,14, 7, 8, 7, 8, 7, 8,13, 2, 3, 8, 6, 7,10, 0, 0,14,14, 6, 9, 8, 5,15, + 10, 2,13, 2,99, 7, 8, 7, 1,14,99,14, 1, 8, 7, 8,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,14,99,13, 2,99, 7,99,10, 2, 5,10, 2, 7,10, 0, 2,10,10, 2,10, 8, 5,15, + 10, 3, 8, 2,10, 7, 8, 7, 5,11, 3,11, 5, 8, 7, 8,13, 7, 7,15, 0, 7,10, 0, 5,14,14, 6,14, 8, 5,15, + 13, 6,14, 6, 9, 7, 8, 7, 5,15, 7,14, 6, 8, 7, 8,13, 3, 3,10, 2, 7,10, 0, 5,14,14, 7,13, 8, 7, 8, + 13, 3,11, 3,13, 7, 8, 7, 2,14, 5,14, 2, 8, 7, 8,12, 6, 6,14, 5, 7,10, 0, 5,11,11, 0,14, 8, 5,15, + 13, 6,14, 6,14, 7, 8, 7, 5,10, 3,10, 5, 8, 7, 8,13, 2, 3, 8, 5, 7,10, 0, 5,14,14, 6,13, 8, 5,15, + 13, 3,11, 3,11, 7, 8, 7, 5,99, 6,13, 6, 8, 7, 8,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 8,99, 9, 1, 1, 9, 1, 9, 9, 1,13, 1, 3,11,10,10, 5, 5,12,13, 4,12,12, 4,99,12, 3,12,11, 2, 2, 3, + 0,12, 0,13, 0, 5, 4,12, 4,13,10, 5,11,10, 2, 2, 4,12, 9, 4,13, 9, 5, 8, 8,13, 3, 0, 3, 2,10,13, + 8, 5,14, 8, 8, 8, 9, 8, 0, 8, 7, 0, 3, 3, 2,10,15,15, 6, 7,14, 6, 6,14,14, 6, 3, 6,11, 2, 3,11, + 1, 6, 0, 7, 0,15,14, 6,99, 7, 2,15, 3,10,10, 2,14, 6, 0,14, 7, 1,15, 8, 1, 7, 3, 7, 3, 2, 2, 2, + 8, 3,10, 3, 2, 6, 9, 9, 0, 9, 3, 8, 4, 0,10, 5, 7, 6, 2,10, 1, 8, 4,15, 8, 8,11,11, 7, 4, 4, 7, + 2, 8,12,14, 6, 6,14, 0, 6,14, 6, 5, 9, 9,12, 9, 2,10,10, 2,10,10, 2, 2,10,10,13, 1, 4, 9,14, 5, + 6,12,15,15, 7,15,13, 5, 7, 4,13, 7,15,12,15,12, 5,13, 4, 4, 7, 7, 4,12,15,13,14, 6, 6, 6, 6, 5, + 5, 0,99, 3,11, 3,99, 9,11, 8, 1,11, 3,99, 3, 0, 9,99, 8, 8,11,11, 8, 0, 3, 1, 2, 6, 6, 6, 6,99, + 99, 1,99, 1, 1, 1, 1, 1, 1, 4,99, 0, 6, 0, 1, 0, 1,11, 3,11,11,11,11, 2,11,11,11,11, 3, 3,11, 3, + 1, 0, 7, 7, 7, 7, 7, 7, 7, 9, 7, 0, 0, 7, 1, 1, 7,10,10,10,10, 2, 3, 3,10,10,10,10,10, 2, 2, 2, + 0, 6, 6, 6, 6, 6, 6, 7, 7, 9, 7, 0, 0, 0, 1, 7, 7, 3, 3, 3,11,10, 2,10,99, 3,11,10,99, 3, 3, 3, + 5, 5, 5, 5, 5, 5, 5, 5, 5,15,15,15,15,15,15,15, 5,11, 9, 9, 9, 9, 9, 9, 9,10,13,13,13,13,13,13, + 99, 6,99, 6, 6, 6,99, 6, 6, 8, 7, 0,99, 0, 0, 0, 6,99,99, 2,99,99,99,99,11,10,10, 2, 2, 2, 2, 2, + 5, 4, 4, 4, 4, 4, 4, 4, 4,14,14,14,14,14,14,14, 4, 8, 8, 8, 8, 8, 8, 8, 8,99,12,12,12,12,12,12, + 5, 4, 4, 4, 4, 4, 4, 5, 5,14,14,14,14, 0,14,15, 5, 8, 8, 8, 8, 8, 8, 8, 9, 2,12,12,13,13,13,13, + 9,15,15,15,15,15,15,15,12,15,12,12,12,12,12,12,12, 9, 9, 9, 9, 9,14,14,14,11,13,13,13,13,13,13, + 99,11,11,11,99,14,99,14,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 8,10,99, 8, 8, 8,99, + 2, 3, 2, 2, 0, 6, 3, 2,99, 0,99, 3, 6, 0,99, 6, 6, 2,99, 2, 2, 2, 2, 2, 2,10, 2, 0,99, 2, 6, 6, + 2, 3, 3, 3, 3, 3, 3, 3, 3,11, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 6, 6, 6, 6, 6,14, 3, 6, 0,99, 6, + 2, 7, 7, 7, 7, 7, 7, 7, 7,15, 1, 1, 1, 1, 1, 1, 1, 1, 9, 4, 4, 4, 4, 4, 4, 4,99, 7, 1, 4, 4,11, + 2, 2, 2, 2, 2, 2, 2, 5,99, 2, 2, 2,99, 2, 2,99, 3,99, 3,99,12,15, 2, 2, 3, 3,99, 2, 3, 3, 3,99, + 99, 2, 2,99, 2, 2, 3,99,99, 2, 2, 2, 2, 2, 2,99,99,99,99,99,99, 3,99, 2, 2, 2, 2, 2,99, 3, 2, 3, + 8,99,99, 2, 2,99, 2,99,99,99,99,99,99,99,99,99, 8,99, 2, 2,99, 2,99, 2, 2, 2, 8, 8, 8, 8, 9,15, + 8, 8, 2, 2, 2, 2, 2, 2, 2,99,99, 8, 8,15, 9, 9, 2, 2, 2, 2, 2, 2,99, 2, 2, 2, 9, 8,14, 8,99, 8, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 2,12,12,12,12,12,12,13,13,13, 2,13, 2, 2, 2, 2, + 2, 2,13,13,13,13,13,13,13,13, 2, 2, 2,99, 2, 2,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,11, 6,99, +}; + +static int kram3_permut1(int idx, int value) +{ + switch (idx) + { + default: + case 0: return BITSWAP8(value, 7,6,5,4, 3,2,1,0); + case 1: return BITSWAP8(value, 7,6,5,4, 0,3,2,1); + case 2: return BITSWAP8(value, 7,6,5,4, 1,0,3,2); + case 3: return BITSWAP8(value, 7,6,5,4, 2,3,0,1); + } +} + +static int kram3_permut2(int tbl_index, int idx, int *xor_table) +{ + int xor = 0; + + if (idx == 0 || idx == 3) + { + xor = xor_table[tbl_index]; + + // handle missing values in table + if (xor == 99) + return xor; + } + + xor ^= 0x02; + + if (idx == 3) + xor = BITSWAP8(xor, 7,6,5,4, 0,2,3,1); + + return xor; +} + +static int kram3_decrypt(int address, int value) +{ + int indx1 = (BIT(address,1) << 1) | BIT(address,5); + int indx2 = (BIT(address,7) << 1) | BIT(address,3); + + int bits1 = ((value & 0x10) >> 1) | ((value & 0x07) >> 0); + int bits2 = ((value & 0xe0) >> 4) | ((value & 0x08) >> 3); + + int tbl_index = ((address & 0x7f00) >> 4) | (BIT(address,6) << 3) | (BIT(address,4) << 2) | (BIT(address,2) << 1) | (BIT(address,0) << 0); + + int xor1 = kram3_permut2(tbl_index, indx1, xor1_table); + int xor2 = kram3_permut2(tbl_index, indx2, xor2_table); + + // handle missing values in table + if (xor1 == 99 || xor2 == 99) + return 99; + + bits1 = kram3_permut1(indx1, bits1); + bits2 = kram3_permut1(indx2, bits2); + + bits1 ^= xor1; + bits2 ^= xor2; + + return ((bits2 & 0xe) << 4) | ((bits1 & 0x8) << 1) | ((bits2 & 0x1) << 3) | ((bits1 & 0x7) << 0); +} + static DRIVER_INIT( kram3 ) { const UINT8 *patch; @@ -1033,13 +1230,10 @@ static DRIVER_INIT( kram3 ) /******************************** - The encryption algorithm is not known. + The encryption algorithm is only partially understood. - I kept the two tables separate, but the two CPUs are encrypted identically. - Addresses that are present in both tables show that when the encrypted value - is the same, the decrypted value is the same. When one bit changes in the - encrypted value, one bit changes in the decrypted value, and so on. - I couldn't find any obvious relationship between values at different addresses. + We are currently using two incomplete 2048-nibble tables to get a address + dependant xor. One important thing to note is that for 6809 instructions that take two opcodes (that is, 10 xx and 11 xx) only the first opcode is encrypted, not the @@ -1050,22 +1244,15 @@ static DRIVER_INIT( kram3 ) i = 0; patch = memory_region(machine, "user1"); - size = memory_region_length(machine, "user1"); rom = memory_region(machine, "main"); decrypted = auto_malloc(0x6000); memory_set_decrypted_region(0, 0xa000, 0xffff, decrypted); memcpy(decrypted,&rom[0xa000],0x6000); - while (i < size) + for (i = 0xa000; i < 0x10000; ++i) { - int a = patch[i] + (patch[i+1] << 8); - if (rom[a] != patch[i+2]) - logerror("error in patch data at address %04x\n",a); - else - decrypted[a-0xa000] = patch[i+3]; - - i += 4; + decrypted[i-0xa000] = kram3_decrypt(i, rom[i]); } i = 0; @@ -1077,15 +1264,9 @@ static DRIVER_INIT( kram3 ) memory_set_decrypted_region(1, 0xa000, 0xffff, decrypted); memcpy(decrypted,&rom[0xa000],0x6000); - while (i < size) + for (i = 0xa000; i < 0x10000; ++i) { - int a = patch[i] + (patch[i+1] << 8); - if (rom[a] != patch[i+2]) - logerror("error in patch data at address %04x\n",a); - else - decrypted[a-0xa000] = patch[i+3]; - - i += 4; + decrypted[i-0xa000] = kram3_decrypt(i, rom[i]); } } diff --git a/src/mame/video/qix.c b/src/mame/video/qix.c index 70e1c893afe..7148ef49598 100644 --- a/src/mame/video/qix.c +++ b/src/mame/video/qix.c @@ -9,6 +9,7 @@ #include "driver.h" #include "video/mc6845.h" #include "qix.h" +#include "cpu/m6809/m6809.h" @@ -440,9 +441,16 @@ static const mc6845_interface mc6845_intf = }; +static const m6809_config encryption_config = +{ + TRUE, /* encrypt only the first byte in 10 xx and 11 xx opcodes */ +}; + + MACHINE_DRIVER_START( qix_video ) MDRV_CPU_ADD("video", M6809, MAIN_CLOCK_OSC/4/4) /* 1.25 MHz */ MDRV_CPU_PROGRAM_MAP(qix_video_map,0) + MDRV_CPU_CONFIG(encryption_config) // for kram3 MDRV_VIDEO_START(qix) MDRV_VIDEO_UPDATE(qix)