summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/astrcorp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/astrcorp.cpp')
-rw-r--r--src/mame/drivers/astrcorp.cpp63
1 files changed, 54 insertions, 9 deletions
diff --git a/src/mame/drivers/astrcorp.cpp b/src/mame/drivers/astrcorp.cpp
index 41e68138c6d..08e62a88a1e 100644
--- a/src/mame/drivers/astrcorp.cpp
+++ b/src/mame/drivers/astrcorp.cpp
@@ -34,11 +34,11 @@ TODO:
- Find source of level 2 interrupt (sprite DMA end?);
- magibomb: fix timings;
-- astoneag, magibombd: currently stop during with 'ROM error'. The first few hundred bytes don't decrypt correctly,
- it it suspected there's a ROM overlay provided by the protection device;
+- astoneag, magibombd: currently stop with 'ROM error'. The first few hundred bytes don't decrypt correctly,
+ it is suspected there's a ROM overlay provided by the protection device;
- winbingo and clones, zulu: these should be at the same state of the two above, but don't show anything on screen;
- magibomba, westvent: need a redump of one of the program ROMs;
-- dinodino: not decrypted yet.
+- dinodino: decryption should be on par with the others but code jumps early into the weeds after RTE.
*************************************************************************************************************/
@@ -154,6 +154,7 @@ public:
void astoneage(machine_config &config);
void magibombd(machine_config &config);
void init_astoneage();
+ void init_dinodino();
void init_magibombd();
void init_winbingo();
void init_zulu();
@@ -185,6 +186,7 @@ private:
};
static const decryption_info astoneag_table;
+ static const decryption_info dinodino_table;
static const decryption_info magibombd_table;
static const decryption_info winbingo_table;
static const decryption_info zulu_table;
@@ -1757,6 +1759,49 @@ void astoneage_state::init_zulu()
rom[0x006/2] = 0x0400;
}
+const astoneage_state::decryption_info astoneage_state::dinodino_table = {
+ {
+ {
+ { 8, 11, 9 },
+ {
+ { { 7, 5, 4, 6, 0, 3, 2, 1 }, 0x00 },
+ { { 1, 4, 6, 0, 2, 5, 3, 7 }, 0xd0 },
+ { { 1, 7, 4, 3, 6, 5, 0, 2 }, 0x88 },
+ { { 6, 5, 2, 3, 7, 1, 0, 4 }, 0xd1 },
+ { { 6, 1, 7, 2, 4, 0, 3, 5 }, 0x64 },
+ { { 1, 7, 2, 6, 5, 4, 3, 0 }, 0x83 },
+ { { 6, 7, 4, 2, 5, 0, 1, 3 }, 0x81 },
+ { { 7, 5, 1, 0, 2, 4, 6, 3 }, 0xea },
+ }
+ },
+ {
+ { 12, 11, 10 },
+ {
+ { { 6, 5, 4, 3, 2, 1, 0, 7 }, 0x90 },
+ { { 2, 4, 0, 7, 5, 6, 3, 1 }, 0x32 },
+ { { 7, 1, 0, 6, 5, 2, 3, 4 }, 0xa9 },
+ { { 2, 0, 3, 5, 1, 4, 6, 7 }, 0xa2 },
+ { { 3, 0, 6, 5, 2, 1, 4, 7 }, 0x02 },
+ { { 0, 1, 6, 4, 5, 2, 7, 3 }, 0x30 },
+ { { 3, 5, 2, 7, 6, 1, 4, 0 }, 0x0a },
+ { { 0, 6, 4, 2, 7, 3, 1, 5 }, 0x81 },
+ }
+ },
+ },
+ { 12, 9, 8, 10, 11, 7, 2, 6, 3, 5, 4 } // 3, 4, 5, 6 ok
+};
+
+void astoneage_state::init_dinodino()
+{
+ decrypt_rom(dinodino_table);
+
+ // TODO: There's more stuff happening for addresses < 0x400...
+ // override reset vector for now
+ u16 *rom = (u16 *)memregion("maincpu")->base();
+ rom[0x004/2] = 0x0000;
+ rom[0x006/2] = 0x0446;
+}
+
void magibomb_state::init_magibomb()
{
// decrypt data
@@ -1808,11 +1853,11 @@ GAME( 2001, magibombc, magibomb, magibombb, magibomb, magibomb_state, init_mag
GAME( 2001?, magibombe, magibomb, magibombb, magibomb, magibomb_state, init_magibomb, ROT0, "Astro Corp.", "Magic Bomb (Ver. A3.1A)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
// Heavier encryption
-GAME( 2003?, dinodino, 0, skilldrp, skilldrp, astrocorp_state, empty_init, ROT0, "Astro Corp.", "Dino Dino", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 2004?, astoneag, 0, astoneage, skilldrp, astoneage_state, init_astoneage, ROT0, "Astro Corp.", "Stone Age (Astro, Ver. ENG.03.A)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 2005, dinodino, 0, magibombd, skilldrp, astoneage_state, init_dinodino, ROT0, "Astro Corp.", "Dino Dino (Ver. A1.1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 13/01.2005 10:59
+GAME( 2005, astoneag, 0, astoneage, skilldrp, astoneage_state, init_astoneage, ROT0, "Astro Corp.", "Stone Age (Astro, Ver. ENG.03.A)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 2005/02/21
GAME( 2005, magibombd, magibomb, magibombd, skilldrp, astoneage_state, init_magibombd, ROT0, "Astro Corp.", "Magic Bomb (Ver. AA.72D, 14/11/05)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 2006, winbingo, 0, astoneage, skilldrp, astoneage_state, init_winbingo, ROT0, "Astro Corp.", "Win Win Bingo (set 1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 15:47:48 Feb 23 2006
-GAME( 2006, winbingoa, winbingo, astoneage, skilldrp, astoneage_state, init_winbingo, ROT0, "Astro Corp.", "Win Win Bingo (set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 11:02:07 May 11 2006
-GAME( 2005, hacher, winbingo, astoneage, skilldrp, astoneage_state, init_winbingo, ROT0, "bootleg (Gametron)", "Hacher (hack of Win Win Bingo)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 14:25:46 Mar 10 2005
-GAME( 2004, zulu, 0, astoneage, skilldrp, astoneage_state, init_zulu, ROT0, "Astro Corp.", "Zulu (Ver. ZO.02.D)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 10:53:44 Aug 27 2004
+GAME( 2006, winbingo, 0, magibombd, skilldrp, astoneage_state, init_winbingo, ROT0, "Astro Corp.", "Win Win Bingo (set 1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 15:47:48 Feb 23 2006
+GAME( 2006, winbingoa, winbingo, magibombd, skilldrp, astoneage_state, init_winbingo, ROT0, "Astro Corp.", "Win Win Bingo (set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 11:02:07 May 11 2006
+GAME( 2005, hacher, winbingo, magibombd, skilldrp, astoneage_state, init_winbingo, ROT0, "bootleg (Gametron)", "Hacher (hack of Win Win Bingo)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 14:25:46 Mar 10 2005
+GAME( 2004, zulu, 0, magibombd, skilldrp, astoneage_state, init_zulu, ROT0, "Astro Corp.", "Zulu (Ver. ZO.02.D)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 10:53:44 Aug 27 2004
GAME( 2007?, westvent, 0, skilldrp, skilldrp, astrocorp_state, empty_init, ROT0, "Astro Corp.", "Western Venture (Ver. AA.02.D)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )