diff options
author | 2015-03-03 18:19:11 +0100 | |
---|---|---|
committer | 2015-03-03 18:19:11 +0100 | |
commit | 2e206903f97a1ad1b88c47a441d3dbc2cc697e18 (patch) | |
tree | 3d3b8867a356a4d755dee98c5f562a2d8d29075d /src | |
parent | 894e6b3aac64a548ffe2e9c77e29912ac9974aea (diff) |
bbusters.c: added save state support (nw)
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/bbusters.c | 42 | ||||
-rw-r--r-- | src/mame/includes/bbusters.h | 41 | ||||
-rw-r--r-- | src/mame/video/bbusters.c | 26 |
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; } } |