summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-03-03 18:19:11 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2015-03-03 18:19:11 +0100
commit2e206903f97a1ad1b88c47a441d3dbc2cc697e18 (patch)
tree3d3b8867a356a4d755dee98c5f562a2d8d29075d
parent894e6b3aac64a548ffe2e9c77e29912ac9974aea (diff)
bbusters.c: added save state support (nw)
-rw-r--r--src/mame/drivers/bbusters.c42
-rw-r--r--src/mame/includes/bbusters.h41
-rw-r--r--src/mame/video/bbusters.c26
3 files changed, 57 insertions, 52 deletions
diff --git a/src/mame/drivers/bbusters.c b/src/mame/drivers/bbusters.c
index 6c1c306fdc7..c938e84df9f 100644
--- a/src/mame/drivers/bbusters.c
+++ b/src/mame/drivers/bbusters.c
@@ -166,7 +166,7 @@ Stephh's notes (based on the games M68000 code and some tests) :
HIGHWAYMAN's notes:
-after adding the mechanized attack u.s. roms i suspect that there is more than just a few bytes changed ;-)
+after adding the mechanized attack u.s. roms I suspect that there is more than just a few bytes changed ;-)
RansAckeR's notes:
@@ -237,6 +237,12 @@ Country :
/******************************************************************************/
+void bbusters_state::machine_start()
+{
+ save_item(NAME(m_sound_status));
+ save_item(NAME(m_gun_select));
+}
+
READ16_MEMBER(bbusters_state::sound_status_r)
{
return m_sound_status;
@@ -321,13 +327,13 @@ READ16_MEMBER(bbusters_state::mechatt_gun_r)
static ADDRESS_MAP_START( bbusters_map, AS_PROGRAM, 16, bbusters_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x080000, 0x08ffff) AM_RAM AM_SHARE("ram")
- AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(bbusters_video_w) AM_SHARE("videoram")
+ AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(video_w) AM_SHARE("videoram")
AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x0a1000, 0x0a7fff) AM_RAM /* service mode */
AM_RANGE(0x0a8000, 0x0a8fff) AM_RAM AM_SHARE("spriteram2")
AM_RANGE(0x0a9000, 0x0affff) AM_RAM /* service mode */
- AM_RANGE(0x0b0000, 0x0b1fff) AM_RAM_WRITE(bbusters_pf1_w) AM_SHARE("pf1_data")
- AM_RANGE(0x0b2000, 0x0b3fff) AM_RAM_WRITE(bbusters_pf2_w) AM_SHARE("pf2_data")
+ AM_RANGE(0x0b0000, 0x0b1fff) AM_RAM_WRITE(pf1_w) AM_SHARE("pf1_data")
+ AM_RANGE(0x0b2000, 0x0b3fff) AM_RAM_WRITE(pf2_w) AM_SHARE("pf2_data")
AM_RANGE(0x0b4000, 0x0b5fff) AM_RAM /* service mode */
AM_RANGE(0x0b8000, 0x0b8003) AM_WRITEONLY AM_SHARE("pf1_scroll_data")
AM_RANGE(0x0b8008, 0x0b800b) AM_WRITEONLY AM_SHARE("pf2_scroll_data")
@@ -351,12 +357,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( mechatt_map, AS_PROGRAM, 16, bbusters_state )
AM_RANGE(0x000000, 0x06ffff) AM_ROM
AM_RANGE(0x070000, 0x07ffff) AM_RAM AM_SHARE("ram")
- AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(bbusters_video_w) AM_SHARE("videoram")
+ AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(video_w) AM_SHARE("videoram")
AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x0a1000, 0x0a7fff) AM_WRITENOP
- AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_WRITE(bbusters_pf1_w) AM_SHARE("pf1_data")
+ AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_WRITE(pf1_w) AM_SHARE("pf1_data")
AM_RANGE(0x0b8000, 0x0b8003) AM_WRITEONLY AM_SHARE("pf1_scroll_data")
- AM_RANGE(0x0c0000, 0x0c3fff) AM_RAM_WRITE(bbusters_pf2_w) AM_SHARE("pf2_data")
+ AM_RANGE(0x0c0000, 0x0c3fff) AM_RAM_WRITE(pf2_w) AM_SHARE("pf2_data")
AM_RANGE(0x0c8000, 0x0c8003) AM_WRITEONLY AM_SHARE("pf2_scroll_data")
AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x0e0000, 0x0e0001) AM_READ_PORT("IN0")
@@ -638,12 +644,6 @@ static GFXDECODE_START( mechatt )
GFXDECODE_ENTRY( "gfx5", 0, tilelayout, 768, 16 )
GFXDECODE_END
-/******************************************************************************/
-
-WRITE_LINE_MEMBER(bbusters_state::sound_irq)
-{
- m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
-}
/******************************************************************************/
@@ -688,7 +688,7 @@ static MACHINE_CONFIG_START( bbusters, bbusters_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("ymsnd", YM2610, 8000000)
- MCFG_YM2610_IRQ_HANDLER(WRITELINE(bbusters_state, sound_irq))
+ MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(0, "rspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
@@ -727,7 +727,7 @@ static MACHINE_CONFIG_START( mechatt, bbusters_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("ymsnd", YM2608, 8000000)
- MCFG_YM2608_IRQ_HANDLER(WRITELINE(bbusters_state, sound_irq))
+ MCFG_YM2608_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
MCFG_SOUND_ROUTE(0, "rspeaker", 0.50)
MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
@@ -1018,10 +1018,10 @@ ROM_END
/******************************************************************************/
// as soon as you calibrate the guns in test mode the game refuses to boot
-GAME( 1989, bbusters, 0, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
-GAME( 1989, bbustersu,bbusters, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
+GAME( 1989, bbusters, 0, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1989, bbustersu,bbusters, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
-GAME( 1989, mechatt, 0, mechatt, mechatt, driver_device, 0, ROT0, "SNK", "Mechanized Attack (World)", 0 )
-GAME( 1989, mechattj, mechatt, mechatt, mechattj, driver_device, 0, ROT0, "SNK", "Mechanized Attack (Japan)", 0 )
-GAME( 1989, mechattu, mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US)", 0 )
-GAME( 1989, mechattu1,mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US, Version 1, Single Player)", 0 )
+GAME( 1989, mechatt, 0, mechatt, mechatt, driver_device, 0, ROT0, "SNK", "Mechanized Attack (World)", GAME_SUPPORTS_SAVE )
+GAME( 1989, mechattj, mechatt, mechatt, mechattj, driver_device, 0, ROT0, "SNK", "Mechanized Attack (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1989, mechattu, mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US)", GAME_SUPPORTS_SAVE )
+GAME( 1989, mechattu1,mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US, Version 1, Single Player)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/bbusters.h b/src/mame/includes/bbusters.h
index 38176d49df6..9e7dd060368 100644
--- a/src/mame/includes/bbusters.h
+++ b/src/mame/includes/bbusters.h
@@ -5,23 +5,26 @@ class bbusters_state : public driver_device
public:
bbusters_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_eprom_data(*this, "eeprom"),
- m_spriteram(*this, "spriteram"),
- m_spriteram2(*this, "spriteram2") ,
+ m_maincpu(*this, "maincpu"),
+ m_audiocpu(*this, "audiocpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_spriteram(*this, "spriteram"),
+ m_spriteram2(*this, "spriteram2"),
+ m_eprom_data(*this, "eeprom"),
m_ram(*this, "ram"),
m_videoram(*this, "videoram"),
m_pf1_data(*this, "pf1_data"),
m_pf2_data(*this, "pf2_data"),
m_pf1_scroll_data(*this, "pf1_scroll_data"),
- m_pf2_scroll_data(*this, "pf2_scroll_data"),
- m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
- m_gfxdecode(*this, "gfxdecode") { }
+ m_pf2_scroll_data(*this, "pf2_scroll_data") { }
- optional_shared_ptr<UINT16> m_eprom_data;
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<gfxdecode_device> m_gfxdecode;
required_device<buffered_spriteram16_device> m_spriteram;
optional_device<buffered_spriteram16_device> m_spriteram2;
-
+
+ optional_shared_ptr<UINT16> m_eprom_data;
required_shared_ptr<UINT16> m_ram;
required_shared_ptr<UINT16> m_videoram;
required_shared_ptr<UINT16> m_pf1_data;
@@ -31,14 +34,12 @@ public:
int m_sound_status;
int m_gun_select;
-
tilemap_t *m_fix_tilemap;
tilemap_t *m_pf1_tilemap;
tilemap_t *m_pf2_tilemap;
const UINT8 *m_scale_table_ptr;
UINT8 m_scale_line_count;
-
DECLARE_READ16_MEMBER(sound_status_r);
DECLARE_WRITE8_MEMBER(sound_status_w);
DECLARE_WRITE16_MEMBER(sound_cpu_w);
@@ -49,22 +50,22 @@ public:
DECLARE_WRITE16_MEMBER(three_gun_output_w);
DECLARE_READ16_MEMBER(kludge_r);
DECLARE_READ16_MEMBER(mechatt_gun_r);
- DECLARE_WRITE16_MEMBER(bbusters_video_w);
- DECLARE_WRITE16_MEMBER(bbusters_pf1_w);
- DECLARE_WRITE16_MEMBER(bbusters_pf2_w);
- TILE_GET_INFO_MEMBER(get_bbusters_tile_info);
+ DECLARE_WRITE16_MEMBER(video_w);
+ DECLARE_WRITE16_MEMBER(pf1_w);
+ DECLARE_WRITE16_MEMBER(pf2_w);
+
+ TILE_GET_INFO_MEMBER(get_tile_info);
TILE_GET_INFO_MEMBER(get_pf1_tile_info);
TILE_GET_INFO_MEMBER(get_pf2_tile_info);
+
+ virtual void machine_start();
DECLARE_VIDEO_START(bbuster);
DECLARE_VIDEO_START(mechatt);
+
UINT32 screen_update_bbuster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_mechatt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void screen_eof_bbuster(screen_device &screen, bool state);
inline const UINT8 *get_source_ptr(gfx_element *gfx, UINT32 sprite, int dx, int dy, int block);
- void bbusters_draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block);
+ void draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block);
void draw_sprites(bitmap_ind16 &bitmap, const UINT16 *source, int bank, int colval, int colmask);
- DECLARE_WRITE_LINE_MEMBER(sound_irq);
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
- required_device<gfxdecode_device> m_gfxdecode;
};
diff --git a/src/mame/video/bbusters.c b/src/mame/video/bbusters.c
index e4e992ab7c8..77c90356759 100644
--- a/src/mame/video/bbusters.c
+++ b/src/mame/video/bbusters.c
@@ -27,7 +27,7 @@
/******************************************************************************/
-TILE_GET_INFO_MEMBER(bbusters_state::get_bbusters_tile_info)
+TILE_GET_INFO_MEMBER(bbusters_state::get_tile_info)
{
UINT16 tile = m_videoram[tile_index];
@@ -48,19 +48,19 @@ TILE_GET_INFO_MEMBER(bbusters_state::get_pf2_tile_info)
SET_TILE_INFO_MEMBER(4,tile&0xfff,tile>>12,0);
}
-WRITE16_MEMBER(bbusters_state::bbusters_video_w)
+WRITE16_MEMBER(bbusters_state::video_w)
{
COMBINE_DATA(&m_videoram[offset]);
m_fix_tilemap->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(bbusters_state::bbusters_pf1_w)
+WRITE16_MEMBER(bbusters_state::pf1_w)
{
COMBINE_DATA(&m_pf1_data[offset]);
m_pf1_tilemap->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(bbusters_state::bbusters_pf2_w)
+WRITE16_MEMBER(bbusters_state::pf2_w)
{
COMBINE_DATA(&m_pf2_data[offset]);
m_pf2_tilemap->mark_tile_dirty(offset);
@@ -70,22 +70,26 @@ WRITE16_MEMBER(bbusters_state::bbusters_pf2_w)
VIDEO_START_MEMBER(bbusters_state,bbuster)
{
- m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_bbusters_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_pf1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf1_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 32);
m_pf2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf2_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 32);
m_pf1_tilemap->set_transparent_pen(15);
m_fix_tilemap->set_transparent_pen(15);
+
+ save_item(NAME(m_scale_line_count));
}
VIDEO_START_MEMBER(bbusters_state,mechatt)
{
- m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_bbusters_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_pf1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf1_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 32);
m_pf2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf2_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 32);
m_pf1_tilemap->set_transparent_pen(15);
m_fix_tilemap->set_transparent_pen(15);
+
+ save_item(NAME(m_scale_line_count));
}
/******************************************************************************/
@@ -143,7 +147,7 @@ inline const UINT8 *bbusters_state::get_source_ptr(gfx_element *gfx, UINT32 spri
return gfx->get_data((sprite+code) % gfx->elements()) + ((dy%16) * gfx->rowbytes());
}
-void bbusters_state::bbusters_draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block)
+void bbusters_state::draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block)
{
gfx_element *gfx = m_gfxdecode->gfx(bank);
pen_t pen_base = gfx->colorbase() + gfx->granularity() * (color % gfx->colors());
@@ -237,25 +241,25 @@ void bbusters_state::draw_sprites(bitmap_ind16 &bitmap, const UINT16 *source, in
scale=source[offs+0]&0x7;
m_scale_table_ptr = scale_table+0x387f+(0x80*scale);
m_scale_line_count = 0x10-scale;
- bbusters_draw_block(bitmap,x,y,16,fx,fy,sprite,colour,bank,block);
+ draw_block(bitmap,x,y,16,fx,fy,sprite,colour,bank,block);
break;
case 1: /* 2 x 2 */
scale=source[offs+0]&0xf;
m_scale_table_ptr = scale_table+0x707f+(0x80*scale);
m_scale_line_count = 0x20-scale;
- bbusters_draw_block(bitmap,x,y,32,fx,fy,sprite,colour,bank,block);
+ draw_block(bitmap,x,y,32,fx,fy,sprite,colour,bank,block);
break;
case 2: /* 64 by 64 block (2 x 2) x 2 */
scale=source[offs+0]&0x1f;
m_scale_table_ptr = scale_table+0xa07f+(0x80*scale);
m_scale_line_count = 0x40-scale;
- bbusters_draw_block(bitmap,x,y,64,fx,fy,sprite,colour,bank,block);
+ draw_block(bitmap,x,y,64,fx,fy,sprite,colour,bank,block);
break;
case 3: /* 2 x 2 x 2 x 2 */
scale=source[offs+0]&0x3f;
m_scale_table_ptr = scale_table+0xc07f+(0x80*scale);
m_scale_line_count = 0x80-scale;
- bbusters_draw_block(bitmap,x,y,128,fx,fy,sprite,colour,bank,block);
+ draw_block(bitmap,x,y,128,fx,fy,sprite,colour,bank,block);
break;
}
}