summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/skylncr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/skylncr.cpp')
-rw-r--r--src/mame/drivers/skylncr.cpp62
1 files changed, 61 insertions, 1 deletions
diff --git a/src/mame/drivers/skylncr.cpp b/src/mame/drivers/skylncr.cpp
index c81da189b8a..73bdf0467fb 100644
--- a/src/mame/drivers/skylncr.cpp
+++ b/src/mame/drivers/skylncr.cpp
@@ -166,6 +166,7 @@ public:
void init_miaction();
void init_olymp();
void init_sonikfig();
+ void init_speedway();
void init_superb2k();
READ_LINE_MEMBER(mbutrfly_prot_r);
@@ -2168,6 +2169,23 @@ ROM_START( olymp )
ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(f939f3f0) SHA1(0a089f78ca66d1e660cb854bbf5b0eb38e317a19) )
ROM_END
+ROM_START( speedway ) // runs on a Rolla PCB with small sub board with main CPU, ROM and Altera EPM. Hack of Leader, extremely similar and still has Leader strings.
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "v3.bin", 0x00000, 0x10000, CRC(ef777180) SHA1(f1a554677543082eb7df2e204d0d4c987b7c6bbb) ) //TMS 27C512
+
+ ROM_REGION( 0x80000, "gfx1", 0 ) // all HN27C301AG
+ ROM_LOAD16_BYTE( "1.u29", 0x00000, 0x20000, CRC(3b360aac) SHA1(a6f31deea53deb8a7da2804c979390ed91ee9f50) ) // 1xxxxxxxxxxxxxxxx = 0xFF
+ ROM_LOAD16_BYTE( "2.u31", 0x00001, 0x20000, CRC(a491bdcf) SHA1(793faa829de50f67a44541136b66407ee9744971) )
+ ROM_LOAD16_BYTE( "3.u33", 0x40000, 0x20000, CRC(935fc941) SHA1(12e5f7fea932a86298928b70b342e0825a3caca1) )
+ ROM_LOAD16_BYTE( "4.u35", 0x40001, 0x20000, CRC(aa8164ce) SHA1(027fa9743ad9d80bd86e59d684180f75dc6d60a0) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 ) // all HN27C301AG. Still has Bordun and Butterfly GFX in here.
+ ROM_LOAD16_BYTE( "5.u52", 0x00000, 0x20000, CRC(df984dbc) SHA1(7ea27465f9fd537fbdc1e13ca5842f656cbc2897) )
+ ROM_LOAD16_BYTE( "6.u54", 0x00001, 0x20000, CRC(37fbdc4d) SHA1(8db83c43e7c43c2da5a39b86edff416c35fa275e) )
+ ROM_LOAD16_BYTE( "7.u56", 0x40000, 0x20000, CRC(328f7912) SHA1(7f05217a18cfb316972cf96711276205e8098ee6) )
+ ROM_LOAD16_BYTE( "8.u58", 0x40001, 0x20000, CRC(b93b221f) SHA1(efd6962a0f5e150c60d258fea116d726228dc39c) )
+ROM_END
+
/**********************************
* Driver Init *
**********************************/
@@ -2267,7 +2285,7 @@ void skylncr_state::init_superb2k() // TODO: very preliminary, just enough to re
// descramble addresses. At a first glance, swaps seem to change if address line bits 13 or 14 are set (possibly 15 too, but not verified yet)
// the scrambled address line bits appear to be 1, 3, 6, 9 and 12
- // it's possible XORs and are data lines swaps are involved, too, at least for opcodes
+ // it's possible XORs and data lines swaps are involved, too, at least for opcodes
for (int i = 0x00000; i < 0x10000; i++)
{
switch (i & 0x6000)
@@ -2280,6 +2298,47 @@ void skylncr_state::init_superb2k() // TODO: very preliminary, just enough to re
}
}
+void skylncr_state::init_speedway() // TODO: complete this. These XORs and ranges have been derived by comparing this dump with leader, of which it's clearly a hack.
+{
+ uint8_t *const ROM = memregion("maincpu")->base();
+
+ for (int x = 0x0000; x < 0x10000; x++)
+ m_decrypted_opcodes[x] = ROM[x];
+
+ for (int x = 0x000d; x < 0x5000; x++)
+ {
+ ROM[x] = ROM[x] ^ 0x41;
+ m_decrypted_opcodes[x] = ROM[x];
+ }
+
+ for (int x = 0x5000; x < 0x53c2; x++)
+ m_decrypted_opcodes[x] = ROM[x] ^ 0x12;
+
+ for (int x = 0x5400; x < 0x8000; x++)
+ {
+ ROM[x] = ROM[x] ^ 0x41;
+ m_decrypted_opcodes[x] = ROM[x];
+ }
+
+ for (int x = 0xc000; x < 0xc300; x++)
+ {
+ ROM[x] = ROM[x] ^ 0x08;
+ m_decrypted_opcodes[x] = ROM[x];
+ }
+
+ for (int x = 0xc300; x < 0xc368; x++)
+ m_decrypted_opcodes[x] = ROM[x] ^ 0x12;
+
+ for (int x = 0xf690; x < 0xf74f; x++)
+ m_decrypted_opcodes[x] = ROM[x] ^ 0x12;
+
+ for (int x = 0xf74f; x < 0x10000; x++)
+ {
+ ROM[x] = ROM[x] ^ 0x08;
+ m_decrypted_opcodes[x] = ROM[x];
+ }
+}
+
} // Anonymous namespace
@@ -2293,6 +2352,7 @@ GAME( 1995, butrfly, 0, skylncr, skylncr, skylncr_state, empty_init,
GAME( 1999, mbutrfly, 0, mbutrfly, mbutrfly, skylncr_state, init_mbutrfly, ROT0, "Bordun International", "Magical Butterfly (version U350C, protected)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, madzoo, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Bordun International", "Mad Zoo (version U450C)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, leader, 0, skylncr, leader, skylncr_state, empty_init, ROT0, "bootleg", "Leader (version Z 2E, Greece)", MACHINE_SUPPORTS_SAVE )
+GAME( 199?, speedway, 0, olymp, leader, skylncr_state, init_speedway, ROT0, "hack (Drivers)", "Speedway", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Incomplete decryption (?)
GAME( 199?, gallag50, 0, skylncr, gallag50, skylncr_state, empty_init, ROT0, "bootleg", "Gallag Video Game / Petalouda (Butterfly, x50)", MACHINE_SUPPORTS_SAVE )
GAME( 199?, neraidou, 0, neraidou, neraidou, skylncr_state, empty_init, ROT0, "bootleg", "Neraidoula", MACHINE_SUPPORTS_SAVE )
GAME( 199?, miaction, 0, skylncr, skylncr, skylncr_state, init_miaction, ROT0, "Vegas", "Missing In Action", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )