vulgus.c: added save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-02-26 18:02:46 +01:00
parent cf05cdf683
commit 3c130ba696
3 changed files with 29 additions and 21 deletions

View File

@ -47,7 +47,7 @@ All Clocks and Vsync verified by Corrado Tomaselli (August 2012)
#include "includes/vulgus.h"
INTERRUPT_GEN_MEMBER(vulgus_state::vulgus_vblank_irq)
INTERRUPT_GEN_MEMBER(vulgus_state::vblank_irq)
{
device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xd7); /* RST 10h - vblank */
}
@ -62,12 +62,12 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, vulgus_state )
AM_RANGE(0xc800, 0xc800) AM_WRITE(soundlatch_byte_w)
AM_RANGE(0xc801, 0xc801) AM_WRITENOP // ?
AM_RANGE(0xc802, 0xc803) AM_RAM AM_SHARE("scroll_low")
AM_RANGE(0xc804, 0xc804) AM_WRITE(vulgus_c804_w)
AM_RANGE(0xc805, 0xc805) AM_WRITE(vulgus_palette_bank_w)
AM_RANGE(0xc804, 0xc804) AM_WRITE(c804_w)
AM_RANGE(0xc805, 0xc805) AM_WRITE(palette_bank_w)
AM_RANGE(0xc902, 0xc903) AM_RAM AM_SHARE("scroll_high")
AM_RANGE(0xcc00, 0xcc7f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(vulgus_fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(vulgus_bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -213,7 +213,7 @@ static MACHINE_CONFIG_START( vulgus, vulgus_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz/4) /* 3 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", vulgus_state, vulgus_vblank_irq)
MCFG_CPU_VBLANK_INT_DRIVER("screen", vulgus_state, vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_12MHz/4) /* 3 MHz */
MCFG_CPU_PROGRAM_MAP(sound_map)
@ -225,7 +225,7 @@ static MACHINE_CONFIG_START( vulgus, vulgus_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(vulgus_state, screen_update_vulgus)
MCFG_SCREEN_UPDATE_DRIVER(vulgus_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", vulgus)
@ -371,6 +371,6 @@ ROM_END
GAME( 1984, vulgus, 0, vulgus, vulgus, driver_device, 0, ROT270, "Capcom", "Vulgus (set 1)", 0 )
GAME( 1984, vulgusa, vulgus, vulgus, vulgus, driver_device, 0, ROT90, "Capcom", "Vulgus (set 2)", 0 )
GAME( 1984, vulgusj, vulgus, vulgus, vulgus, driver_device, 0, ROT270, "Capcom", "Vulgus (Japan?)", 0 )
GAME( 1984, vulgus, 0, vulgus, vulgus, driver_device, 0, ROT270, "Capcom", "Vulgus (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1984, vulgusa, vulgus, vulgus, vulgus, driver_device, 0, ROT90, "Capcom", "Vulgus (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1984, vulgusj, vulgus, vulgus, vulgus, driver_device, 0, ROT270, "Capcom", "Vulgus (Japan?)", GAME_SUPPORTS_SAVE )

View File

@ -24,6 +24,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_scroll_low;
required_shared_ptr<UINT8> m_scroll_high;
required_shared_ptr<UINT8> m_spriteram;
@ -33,15 +34,20 @@ public:
int m_palette_bank;
tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap;
DECLARE_WRITE8_MEMBER(vulgus_fgvideoram_w);
DECLARE_WRITE8_MEMBER(vulgus_bgvideoram_w);
DECLARE_WRITE8_MEMBER(vulgus_c804_w);
DECLARE_WRITE8_MEMBER(vulgus_palette_bank_w);
DECLARE_WRITE8_MEMBER(fgvideoram_w);
DECLARE_WRITE8_MEMBER(bgvideoram_w);
DECLARE_WRITE8_MEMBER(c804_w);
DECLARE_WRITE8_MEMBER(palette_bank_w);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void video_start();
DECLARE_PALETTE_INIT(vulgus);
UINT32 screen_update_vulgus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vulgus_vblank_irq);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
};

View File

@ -113,6 +113,8 @@ void vulgus_state::video_start()
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(vulgus_state::get_bg_tile_info),this),TILEMAP_SCAN_COLS,16,16,32,32);
m_fg_tilemap->configure_groups(*m_gfxdecode->gfx(0), 47);
save_item(NAME(m_palette_bank));
}
@ -122,20 +124,20 @@ void vulgus_state::video_start()
***************************************************************************/
WRITE8_MEMBER(vulgus_state::vulgus_fgvideoram_w)
WRITE8_MEMBER(vulgus_state::fgvideoram_w)
{
m_fgvideoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset & 0x3ff);
}
WRITE8_MEMBER(vulgus_state::vulgus_bgvideoram_w)
WRITE8_MEMBER(vulgus_state::bgvideoram_w)
{
m_bgvideoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset & 0x3ff);
}
WRITE8_MEMBER(vulgus_state::vulgus_c804_w)
WRITE8_MEMBER(vulgus_state::c804_w)
{
/* bits 0 and 1 are coin counters */
coin_counter_w(machine(), 0, data & 0x01);
@ -146,7 +148,7 @@ WRITE8_MEMBER(vulgus_state::vulgus_c804_w)
}
WRITE8_MEMBER(vulgus_state::vulgus_palette_bank_w)
WRITE8_MEMBER(vulgus_state::palette_bank_w)
{
if (m_palette_bank != (data & 3))
{
@ -194,7 +196,7 @@ void vulgus_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
}
}
UINT32 vulgus_state::screen_update_vulgus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
UINT32 vulgus_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->set_scrollx(0, m_scroll_low[1] + 256 * m_scroll_high[1]);
m_bg_tilemap->set_scrolly(0, m_scroll_low[0] + 256 * m_scroll_high[0]);