astrcorp.cpp: dinodino gets to the ROM error screen, too

This commit is contained in:
Ivan Vangelista 2021-08-20 05:16:05 +02:00
parent 68ac1b2cf0
commit eb13e799d0

View File

@ -38,7 +38,6 @@ TODO:
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: decryption should be on par with the others but code jumps early into the weeds after RTE.
*************************************************************************************************************/
@ -97,6 +96,7 @@ protected:
// memory pointers
required_shared_ptr<u16> m_spriteram;
TIMER_DEVICE_CALLBACK_MEMBER(skilldrp_scanline_cb);
void draw_sprites_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void eeprom_w(u8 data);
void showhand_outputs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
@ -107,7 +107,6 @@ protected:
u8 m_screen_enable;
private:
// video-related
bitmap_ind16 m_bitmap;
u16 m_sprite_dma;
@ -115,7 +114,6 @@ private:
output_finder<7> m_lamps;
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(skilldrp_scanline_cb);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -152,6 +150,7 @@ public:
{ }
void astoneage(machine_config &config);
void dinodino(machine_config &config);
void magibombd(machine_config &config);
void init_astoneage();
void init_dinodino();
@ -167,6 +166,7 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER(astoneage_scanline_cb);
void astoneage_map(address_map &map);
void dinodino_map(address_map &map);
void magibombd_map(address_map &map);
void ramdac_map(address_map &map);
@ -523,6 +523,23 @@ void astoneage_state::astoneage_map(address_map &map)
map(0xe00001, 0xe00001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
}
void astoneage_state::dinodino_map(address_map &map)
{
map(0x000000, 0x03ffff).rom().mirror(0x800000); // POST checks for ROM crc at mirror
map(0x900000, 0x903fff).ram().share("nvram"); // battery
map(0xb00000, 0xb00fff).ram().share("spriteram");
map(0xb02000, 0xb02001).w(FUNC(astoneage_state::draw_sprites_w));
map(0xb04000, 0xb04001).portr("INPUTS");
map(0xb08001, 0xb08001).w(FUNC(astoneage_state::eeprom_w));
map(0xb0a000, 0xb0a001).w(FUNC(astoneage_state::skilldrp_outputs_w));
map(0xb0e000, 0xb0e001).portr("EEPROMIN");
map(0xc80000, 0xc801ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
// unknown location
// map(0x500001, 0x500001).w(FUNC(astoneage_state::screen_enable_w));
map(0x580001, 0x580001).w(FUNC(astoneage_state::oki_bank_w));
map(0xe00001, 0xe00001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
}
void astoneage_state::magibombd_map(address_map &map) // seems to use old style palette instead of ramdac
{
map(0x000000, 0x03ffff).rom().mirror(0x800000);
@ -816,6 +833,14 @@ void astoneage_state::magibombd(machine_config &config)
config.device_remove("ramdac");
}
void astoneage_state::dinodino(machine_config &config)
{
magibombd(config);
m_maincpu->set_addrmap(AS_PROGRAM, &astoneage_state::dinodino_map);
TIMER(config.replace(), "scantimer").configure_scanline(FUNC(astoneage_state::skilldrp_scanline_cb), "screen", 0, 1);
}
/***************************************************************************
ROMs Loading
***************************************************************************/
@ -1857,7 +1882,7 @@ 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( 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, dinodino, 0, dinodino, 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, 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