mirror of
https://github.com/holub/mame
synced 2025-05-30 17:41:47 +03:00
bbusters.c: added save state support (nw)
This commit is contained in:
parent
894e6b3aac
commit
2e206903f9
@ -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 )
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user