bwing.c: fix save state issue with RAM-based gfxdecode (nw)

This commit is contained in:
Alex W. Jackson 2015-05-07 15:14:44 -04:00
parent 6e273a53b5
commit 6bc5c35b87
2 changed files with 17 additions and 31 deletions

View File

@ -60,18 +60,6 @@ WRITE8_MEMBER(bwing_state::bwp3_nmiack_w)
}
READ8_MEMBER(bwing_state::bwp1_io_r)
{
if (offset == 0) return(ioport("DSW0")->read());
if (offset == 1) return(ioport("DSW1")->read());
if (offset == 2) return(ioport("IN0")->read());
if (offset == 3) return(ioport("IN1")->read());
if (offset == 4) return(ioport("IN2")->read());
return((m_bwp123_membase[0])[0x1b00 + offset]);
}
WRITE8_MEMBER(bwing_state::bwp1_ctrl_w)
{
switch (offset)
@ -130,14 +118,18 @@ WRITE8_MEMBER(bwing_state::bwp2_ctrl_w)
// Main CPU
static ADDRESS_MAP_START( bwp1_map, AS_PROGRAM, 8, bwing_state )
AM_RANGE(0x1b00, 0x1b07) AM_READ(bwp1_io_r)
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("sharedram")
AM_RANGE(0x0800, 0x0fff) AM_RAM
AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x1400, 0x17ff) AM_RAM
AM_RANGE(0x1800, 0x19ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x1a00, 0x1aff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0x1b00, 0x1b07) AM_RAM_WRITE(scrollreg_w)
AM_RANGE(0x1b00, 0x1b00) AM_READ_PORT("DSW0")
AM_RANGE(0x1b01, 0x1b01) AM_READ_PORT("DSW1")
AM_RANGE(0x1b02, 0x1b02) AM_READ_PORT("IN0")
AM_RANGE(0x1b03, 0x1b03) AM_READ_PORT("IN1")
AM_RANGE(0x1b04, 0x1b04) AM_READ_PORT("IN2")
AM_RANGE(0x1b00, 0x1b07) AM_WRITE(scrollreg_w)
AM_RANGE(0x1c00, 0x1c07) AM_RAM_WRITE(bwp1_ctrl_w)
AM_RANGE(0x2000, 0x3fff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
AM_RANGE(0x4000, 0xffff) AM_ROM // "B-Wings US" writes to 9631-9632(debug?)
@ -342,6 +334,8 @@ void bwing_state::machine_start()
save_item(NAME(m_bwp3_u8F_d));
save_item(NAME(m_sreg));
machine().save().register_postload(save_prepost_delegate(FUNC(bwing_state::bwing_postload), this));
}
void bwing_state::machine_reset()
@ -353,6 +347,13 @@ void bwing_state::machine_reset()
m_bwp3_u8F_d = 0;
}
void bwing_state::bwing_postload()
{
m_gfxdecode->gfx(2)->mark_all_dirty();
m_gfxdecode->gfx(3)->mark_all_dirty();
}
static MACHINE_CONFIG_START( bwing, bwing_state )
// basic machine hardware
@ -543,7 +544,7 @@ ROM_END
//****************************************************************************
// Initializations
void bwing_state::fix_bwp3( )
DRIVER_INIT_MEMBER(bwing_state,bwing)
{
UINT8 *rom = memregion("audiocpu")->base();
int j = memregion("audiocpu")->bytes();
@ -557,16 +558,6 @@ void bwing_state::fix_bwp3( )
rom[j - (0x10 - 0x5)] = rom[j - (0x10 - 0xa)] = rom[j - (0x10 - 0x7)];
}
DRIVER_INIT_MEMBER(bwing_state,bwing)
{
m_bwp123_membase[0] = memregion("maincpu")->base();
m_bwp123_membase[1] = memregion("sub")->base();
m_bwp123_membase[2] = memregion("audiocpu")->base();
fix_bwp3();
}
//****************************************************************************
// Game Entries

View File

@ -56,13 +56,9 @@ public:
int m_bwp3_nmimask;
int m_bwp3_u8F_d;
/* misc */
UINT8 *m_bwp123_membase[3];
DECLARE_WRITE8_MEMBER(bwp3_u8F_w);
DECLARE_WRITE8_MEMBER(bwp3_nmimask_w);
DECLARE_WRITE8_MEMBER(bwp3_nmiack_w);
DECLARE_READ8_MEMBER(bwp1_io_r);
DECLARE_WRITE8_MEMBER(bwp1_ctrl_w);
DECLARE_WRITE8_MEMBER(bwp2_ctrl_w);
DECLARE_WRITE8_MEMBER(spriteram_w);
@ -85,11 +81,10 @@ public:
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
void bwing_postload();
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( bitmap_ind16 &bmp, const rectangle &clip, UINT8 *ram, int pri );
INTERRUPT_GEN_MEMBER(bwp3_interrupt);
void fix_bwp3( );
};