mirror of
https://github.com/holub/mame
synced 2025-06-06 04:43:45 +03:00
hvyunit.c: added save state support, moved to configured banking (nw)
This commit is contained in:
parent
1d12e0e909
commit
dae60116d6
@ -78,17 +78,26 @@ class hvyunit_state : public driver_device
|
||||
public:
|
||||
hvyunit_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_colorram(*this, "colorram"),
|
||||
m_mastercpu(*this, "master"),
|
||||
m_slavecpu(*this, "slave"),
|
||||
m_mermaid(*this, "mermaid"),
|
||||
m_soundcpu(*this, "soundcpu"),
|
||||
m_pandora(*this, "pandora"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette")
|
||||
m_palette(*this, "palette"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_colorram(*this, "colorram")
|
||||
{ }
|
||||
|
||||
/* Devices */
|
||||
required_device<cpu_device> m_mastercpu;
|
||||
required_device<cpu_device> m_slavecpu;
|
||||
required_device<cpu_device> m_mermaid;
|
||||
required_device<cpu_device> m_soundcpu;
|
||||
required_device<kaneko_pandora_device> m_pandora;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
/* Video */
|
||||
required_shared_ptr<UINT8> m_videoram;
|
||||
required_shared_ptr<UINT8> m_colorram;
|
||||
@ -105,15 +114,6 @@ public:
|
||||
UINT8 m_mermaid_int0_l;
|
||||
UINT8 m_mermaid_p[4];
|
||||
|
||||
/* Devices */
|
||||
required_device<cpu_device> m_mastercpu;
|
||||
required_device<cpu_device> m_slavecpu;
|
||||
required_device<cpu_device> m_mermaid;
|
||||
required_device<cpu_device> m_soundcpu;
|
||||
required_device<kaneko_pandora_device> m_pandora;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(trigger_nmi_on_slave_cpu);
|
||||
DECLARE_WRITE8_MEMBER(master_bankswitch_w);
|
||||
DECLARE_WRITE8_MEMBER(mermaid_data_w);
|
||||
@ -135,13 +135,17 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(mermaid_p2_w);
|
||||
DECLARE_READ8_MEMBER(mermaid_p3_r);
|
||||
DECLARE_WRITE8_MEMBER(mermaid_p3_w);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_hvyunit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void screen_eof_hvyunit(screen_device &screen, bool state);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(hvyunit_scanline);
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void screen_eof(screen_device &screen, bool state);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
|
||||
};
|
||||
|
||||
|
||||
@ -153,7 +157,16 @@ public:
|
||||
|
||||
void hvyunit_state::machine_start()
|
||||
{
|
||||
// TODO: Save state
|
||||
membank("master_bank")->configure_entries(0, 8, memregion("master")->base(), 0x4000);
|
||||
membank("slave_bank")->configure_entries(0, 4, memregion("slave")->base(), 0x4000);
|
||||
membank("sound_bank")->configure_entries(0, 4, memregion("soundcpu")->base(), 0x4000);
|
||||
|
||||
save_item(NAME(m_data_to_mermaid));
|
||||
save_item(NAME(m_data_to_z80));
|
||||
save_item(NAME(m_mermaid_to_z80_full));
|
||||
save_item(NAME(m_z80_to_mermaid_full));
|
||||
save_item(NAME(m_mermaid_int0_l));
|
||||
save_item(NAME(m_mermaid_p));
|
||||
}
|
||||
|
||||
void hvyunit_state::machine_reset()
|
||||
@ -182,9 +195,13 @@ TILE_GET_INFO_MEMBER(hvyunit_state::get_bg_tile_info)
|
||||
void hvyunit_state::video_start()
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(hvyunit_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
|
||||
|
||||
save_item(NAME(m_scrollx));
|
||||
save_item(NAME(m_scrolly));
|
||||
save_item(NAME(m_port0_data));
|
||||
}
|
||||
|
||||
UINT32 hvyunit_state::screen_update_hvyunit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 hvyunit_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
#define SX_POS 96
|
||||
#define SY_POS 0
|
||||
@ -198,7 +215,7 @@ UINT32 hvyunit_state::screen_update_hvyunit(screen_device &screen, bitmap_ind16
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hvyunit_state::screen_eof_hvyunit(screen_device &screen, bool state)
|
||||
void hvyunit_state::screen_eof(screen_device &screen, bool state)
|
||||
{
|
||||
// rising edge
|
||||
if (state)
|
||||
@ -221,10 +238,7 @@ WRITE8_MEMBER(hvyunit_state::trigger_nmi_on_slave_cpu)
|
||||
|
||||
WRITE8_MEMBER(hvyunit_state::master_bankswitch_w)
|
||||
{
|
||||
unsigned char *ROM = memregion("master")->base();
|
||||
int bank = data & 7;
|
||||
ROM = &ROM[0x4000 * bank];
|
||||
membank("bank1")->set_base(ROM);
|
||||
membank("master_bank")->set_entry(data & 7);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(hvyunit_state::mermaid_data_w)
|
||||
@ -273,12 +287,8 @@ WRITE8_MEMBER(hvyunit_state::hu_colorram_w)
|
||||
|
||||
WRITE8_MEMBER(hvyunit_state::slave_bankswitch_w)
|
||||
{
|
||||
unsigned char *ROM = memregion("slave")->base();
|
||||
int bank = (data & 0x03);
|
||||
m_port0_data = data;
|
||||
ROM = &ROM[0x4000 * bank];
|
||||
|
||||
membank("bank2")->set_base(ROM);
|
||||
membank("slave_bank")->set_entry(data & 3);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(hvyunit_state::hu_scrollx_w)
|
||||
@ -306,11 +316,7 @@ WRITE8_MEMBER(hvyunit_state::coin_count_w)
|
||||
|
||||
WRITE8_MEMBER(hvyunit_state::sound_bankswitch_w)
|
||||
{
|
||||
unsigned char *ROM = memregion("soundcpu")->base();
|
||||
int bank = data & 0x3;
|
||||
ROM = &ROM[0x4000 * bank];
|
||||
|
||||
membank("bank3")->set_base(ROM);
|
||||
membank("sound_bank")->set_entry(data & 3);
|
||||
}
|
||||
|
||||
|
||||
@ -407,7 +413,7 @@ WRITE8_MEMBER(hvyunit_state::mermaid_p3_w)
|
||||
|
||||
static ADDRESS_MAP_START( master_memory, AS_PROGRAM, 8, hvyunit_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("master_bank")
|
||||
AM_RANGE(0xc000, 0xcfff) AM_DEVREADWRITE("pandora", kaneko_pandora_device, spriteram_r, spriteram_w)
|
||||
AM_RANGE(0xd000, 0xdfff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("share1")
|
||||
@ -423,7 +429,7 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( slave_memory, AS_PROGRAM, 8, hvyunit_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2")
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("slave_bank")
|
||||
AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(hu_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(hu_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xd000, 0xd1ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
||||
@ -449,7 +455,7 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_memory, AS_PROGRAM, 8, hvyunit_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank3")
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("sound_bank")
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -615,7 +621,7 @@ GFXDECODE_END
|
||||
*************************************/
|
||||
|
||||
/* Main Z80 uses IM2 */
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(hvyunit_state::hvyunit_scanline)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(hvyunit_state::scanline)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
@ -638,7 +644,7 @@ static MACHINE_CONFIG_START( hvyunit, hvyunit_state )
|
||||
MCFG_CPU_ADD("master", Z80, 6000000)
|
||||
MCFG_CPU_PROGRAM_MAP(master_memory)
|
||||
MCFG_CPU_IO_MAP(master_io)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", hvyunit_state, hvyunit_scanline, "screen", 0, 1)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", hvyunit_state, scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_CPU_ADD("slave", Z80, 6000000)
|
||||
MCFG_CPU_PROGRAM_MAP(slave_memory)
|
||||
@ -660,8 +666,8 @@ static MACHINE_CONFIG_START( hvyunit, hvyunit_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(256, 256)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 240-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hvyunit_state, screen_update_hvyunit)
|
||||
MCFG_SCREEN_VBLANK_DRIVER(hvyunit_state, screen_eof_hvyunit)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hvyunit_state, screen_update)
|
||||
MCFG_SCREEN_VBLANK_DRIVER(hvyunit_state, screen_eof)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", hvyunit)
|
||||
@ -803,7 +809,7 @@ ROM_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAME( 1988, hvyunit, 0, hvyunit, hvyunit, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit (World)", GAME_NO_COCKTAIL )
|
||||
GAME( 1988, hvyunitj, hvyunit, hvyunit, hvyunitj, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit (Japan, Newer)", GAME_NO_COCKTAIL )
|
||||
GAME( 1988, hvyunitjo,hvyunit, hvyunit, hvyunitj, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit (Japan, Older)", GAME_NO_COCKTAIL )
|
||||
GAME( 1988, hvyunitu, hvyunit, hvyunit, hvyunitj, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit -U.S.A. Version- (US)", GAME_NO_COCKTAIL )
|
||||
GAME( 1988, hvyunit, 0, hvyunit, hvyunit, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit (World)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1988, hvyunitj, hvyunit, hvyunit, hvyunitj, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit (Japan, Newer)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1988, hvyunitjo,hvyunit, hvyunit, hvyunitj, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit (Japan, Older)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1988, hvyunitu, hvyunit, hvyunit, hvyunitj, driver_device, 0, ROT0, "Kaneko / Taito", "Heavy Unit -U.S.A. Version- (US)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user