mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
xxmissio.c: added save state support (nw)
This commit is contained in:
parent
409b0c9f6d
commit
b31244ebf6
@ -14,18 +14,18 @@ XX Mission (c) 1986 UPL
|
||||
#include "includes/xxmissio.h"
|
||||
|
||||
|
||||
WRITE8_MEMBER(xxmissio_state::xxmissio_bank_sel_w)
|
||||
WRITE8_MEMBER(xxmissio_state::bank_sel_w)
|
||||
{
|
||||
membank("bank1")->set_entry(data & 7);
|
||||
}
|
||||
|
||||
CUSTOM_INPUT_MEMBER(xxmissio_state::xxmissio_status_r)
|
||||
CUSTOM_INPUT_MEMBER(xxmissio_state::status_r)
|
||||
{
|
||||
int bit_mask = (FPTR)param;
|
||||
return (m_status & bit_mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xxmissio_state::xxmissio_status_m_w)
|
||||
WRITE8_MEMBER(xxmissio_state::status_m_w)
|
||||
{
|
||||
switch (data)
|
||||
{
|
||||
@ -44,7 +44,7 @@ WRITE8_MEMBER(xxmissio_state::xxmissio_status_m_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xxmissio_state::xxmissio_status_s_w)
|
||||
WRITE8_MEMBER(xxmissio_state::status_s_w)
|
||||
{
|
||||
switch (data)
|
||||
{
|
||||
@ -63,22 +63,24 @@ WRITE8_MEMBER(xxmissio_state::xxmissio_status_s_w)
|
||||
}
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(xxmissio_state::xxmissio_interrupt_m)
|
||||
INTERRUPT_GEN_MEMBER(xxmissio_state::interrupt_m)
|
||||
{
|
||||
m_status &= ~0x20;
|
||||
device.execute().set_input_line(0, HOLD_LINE);
|
||||
m_maincpu->set_input_line(0, HOLD_LINE);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(xxmissio_state::xxmissio_interrupt_s)
|
||||
INTERRUPT_GEN_MEMBER(xxmissio_state::interrupt_s)
|
||||
{
|
||||
m_status &= ~0x10;
|
||||
device.execute().set_input_line(0, HOLD_LINE);
|
||||
m_subcpu->set_input_line(0, HOLD_LINE);
|
||||
}
|
||||
|
||||
void xxmissio_state::machine_start()
|
||||
{
|
||||
membank("bank1")->configure_entries(0, 8, memregion("user1")->base(), 0x4000);
|
||||
membank("bank1")->set_entry(0);
|
||||
|
||||
save_item(NAME(m_status));
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
@ -92,11 +94,11 @@ static ADDRESS_MAP_START( map1, AS_PROGRAM, 8, xxmissio_state )
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xa002, 0xa002) AM_READ_PORT("STATUS")
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITE(xxmissio_status_m_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITE(xxmissio_flipscreen_w)
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITE(status_m_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITE(flipscreen_w)
|
||||
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("fgram")
|
||||
AM_RANGE(0xc800, 0xcfff) AM_READWRITE(xxmissio_bgram_r, xxmissio_bgram_w) AM_SHARE("bgram")
|
||||
AM_RANGE(0xc800, 0xcfff) AM_READWRITE(bgram_r, bgram_w) AM_SHARE("bgram")
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram")
|
||||
|
||||
AM_RANGE(0xd800, 0xdaff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
@ -112,16 +114,16 @@ static ADDRESS_MAP_START( map2, AS_PROGRAM, 8, xxmissio_state )
|
||||
|
||||
AM_RANGE(0x8000, 0x8001) AM_DEVREADWRITE("ym1", ym2203_device, read, write)
|
||||
AM_RANGE(0x8002, 0x8003) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
|
||||
AM_RANGE(0x8006, 0x8006) AM_WRITE(xxmissio_bank_sel_w)
|
||||
AM_RANGE(0x8006, 0x8006) AM_WRITE(bank_sel_w)
|
||||
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xa002, 0xa002) AM_READ_PORT("STATUS")
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITE(xxmissio_status_s_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITE(xxmissio_flipscreen_w)
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITE(status_s_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITE(flipscreen_w)
|
||||
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_SHARE("fgram") AM_RAM
|
||||
AM_RANGE(0xc800, 0xcfff) AM_SHARE("bgram") AM_READWRITE(xxmissio_bgram_r, xxmissio_bgram_w)
|
||||
AM_RANGE(0xc800, 0xcfff) AM_SHARE("bgram") AM_READWRITE(bgram_r, bgram_w)
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_SHARE("spriteram") AM_RAM
|
||||
|
||||
AM_RANGE(0xd800, 0xdaff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
@ -196,14 +198,14 @@ static INPUT_PORTS_START( xxmissio )
|
||||
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Shown as "Unused" in the manual */
|
||||
|
||||
PORT_START("STATUS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x01)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x01)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x04)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x08)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x10)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x20)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x40)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state,xxmissio_status_r, (void *)0x80)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x04)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x08)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x10)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x20)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x40)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xxmissio_state, status_r, (void *)0x80)
|
||||
INPUT_PORTS_END
|
||||
|
||||
/****************************************************************************/
|
||||
@ -258,11 +260,11 @@ static MACHINE_CONFIG_START( xxmissio, xxmissio_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80,12000000/4) /* 3.0MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(map1)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", xxmissio_state, xxmissio_interrupt_m)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", xxmissio_state, interrupt_m)
|
||||
|
||||
MCFG_CPU_ADD("sub", Z80,12000000/4) /* 3.0MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(map2)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(xxmissio_state, xxmissio_interrupt_s, 2*60)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(xxmissio_state, interrupt_s, 2*60)
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
|
||||
|
||||
@ -273,7 +275,7 @@ static MACHINE_CONFIG_START( xxmissio, xxmissio_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
||||
MCFG_SCREEN_SIZE(64*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 4*8, 28*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(xxmissio_state, screen_update_xxmissio)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(xxmissio_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", xxmissio)
|
||||
@ -293,8 +295,8 @@ static MACHINE_CONFIG_START( xxmissio, xxmissio_state )
|
||||
MCFG_SOUND_ROUTE(3, "mono", 0.40)
|
||||
|
||||
MCFG_SOUND_ADD("ym2", YM2203, 12000000/8)
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(xxmissio_state, xxmissio_scroll_x_w))
|
||||
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(xxmissio_state, xxmissio_scroll_y_w))
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(xxmissio_state, scroll_x_w))
|
||||
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(xxmissio_state, scroll_y_w))
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.15)
|
||||
MCFG_SOUND_ROUTE(1, "mono", 0.15)
|
||||
MCFG_SOUND_ROUTE(2, "mono", 0.15)
|
||||
@ -326,4 +328,4 @@ ROM_START( xxmissio )
|
||||
ROM_LOAD16_BYTE( "xx11.4b", 0x0001, 0x8000, CRC(d9dd827c) SHA1(aea3a5abd871adf7f75ad4d6cc57eff0833135c7) )
|
||||
ROM_END
|
||||
|
||||
GAME( 1986, xxmissio, 0, xxmissio, xxmissio, driver_device, 0, ROT90, "UPL", "XX Mission", 0 )
|
||||
GAME( 1986, xxmissio, 0, xxmissio, xxmissio, driver_device, 0, ROT90, "UPL", "XX Mission", GAME_SUPPORTS_SAVE )
|
||||
|
@ -3,42 +3,50 @@ class xxmissio_state : public driver_device
|
||||
public:
|
||||
xxmissio_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_bgram(*this, "bgram"),
|
||||
m_fgram(*this, "fgram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_subcpu(*this, "sub"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_palette(*this, "palette"),
|
||||
m_bgram(*this, "bgram"),
|
||||
m_fgram(*this, "fgram"),
|
||||
m_spriteram(*this, "spriteram") { }
|
||||
|
||||
UINT8 m_status;
|
||||
required_shared_ptr<UINT8> m_bgram;
|
||||
required_shared_ptr<UINT8> m_fgram;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
UINT8 m_xscroll;
|
||||
UINT8 m_yscroll;
|
||||
UINT8 m_flipscreen;
|
||||
DECLARE_WRITE8_MEMBER(xxmissio_bank_sel_w);
|
||||
DECLARE_WRITE8_MEMBER(xxmissio_status_m_w);
|
||||
DECLARE_WRITE8_MEMBER(xxmissio_status_s_w);
|
||||
DECLARE_WRITE8_MEMBER(xxmissio_flipscreen_w);
|
||||
DECLARE_WRITE8_MEMBER(xxmissio_bgram_w);
|
||||
DECLARE_READ8_MEMBER(xxmissio_bgram_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(xxmissio_status_r);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
virtual void machine_start();
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_xxmissio(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(xxmissio_interrupt_m);
|
||||
INTERRUPT_GEN_MEMBER(xxmissio_interrupt_s);
|
||||
DECLARE_WRITE8_MEMBER(xxmissio_scroll_x_w);
|
||||
DECLARE_WRITE8_MEMBER(xxmissio_scroll_y_w);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<UINT8> m_bgram;
|
||||
required_shared_ptr<UINT8> m_fgram;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
UINT8 m_status;
|
||||
UINT8 m_xscroll;
|
||||
UINT8 m_yscroll;
|
||||
UINT8 m_flipscreen;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(bank_sel_w);
|
||||
DECLARE_WRITE8_MEMBER(status_m_w);
|
||||
DECLARE_WRITE8_MEMBER(status_s_w);
|
||||
DECLARE_WRITE8_MEMBER(flipscreen_w);
|
||||
DECLARE_WRITE8_MEMBER(bgram_w);
|
||||
DECLARE_READ8_MEMBER(bgram_r);
|
||||
DECLARE_WRITE8_MEMBER(scroll_x_w);
|
||||
DECLARE_WRITE8_MEMBER(scroll_y_w);
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(status_r);
|
||||
|
||||
INTERRUPT_GEN_MEMBER(interrupt_m);
|
||||
INTERRUPT_GEN_MEMBER(interrupt_s);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
|
||||
virtual void machine_start();
|
||||
virtual void video_start();
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx);
|
||||
};
|
||||
|
@ -12,28 +12,28 @@ Video hardware driver by Uki
|
||||
#include "includes/xxmissio.h"
|
||||
|
||||
|
||||
WRITE8_MEMBER(xxmissio_state::xxmissio_scroll_x_w)
|
||||
WRITE8_MEMBER(xxmissio_state::scroll_x_w)
|
||||
{
|
||||
m_xscroll = data;
|
||||
}
|
||||
WRITE8_MEMBER(xxmissio_state::xxmissio_scroll_y_w)
|
||||
WRITE8_MEMBER(xxmissio_state::scroll_y_w)
|
||||
{
|
||||
m_yscroll = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xxmissio_state::xxmissio_flipscreen_w)
|
||||
WRITE8_MEMBER(xxmissio_state::flipscreen_w)
|
||||
{
|
||||
m_flipscreen = data & 0x01;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xxmissio_state::xxmissio_bgram_w)
|
||||
WRITE8_MEMBER(xxmissio_state::bgram_w)
|
||||
{
|
||||
int x = (offset + (m_xscroll >> 3)) & 0x1f;
|
||||
offset = (offset & 0x7e0) | x;
|
||||
|
||||
m_bgram[offset] = data;
|
||||
}
|
||||
READ8_MEMBER(xxmissio_state::xxmissio_bgram_r)
|
||||
READ8_MEMBER(xxmissio_state::bgram_r)
|
||||
{
|
||||
int x = (offset + (m_xscroll >> 3)) & 0x1f;
|
||||
offset = (offset & 0x7e0) | x;
|
||||
@ -69,6 +69,10 @@ void xxmissio_state::video_start()
|
||||
m_bg_tilemap->set_scrolldx(2, 12);
|
||||
|
||||
m_fg_tilemap->set_transparent_pen(0);
|
||||
|
||||
save_item(NAME(m_xscroll));
|
||||
save_item(NAME(m_yscroll));
|
||||
save_item(NAME(m_flipscreen));
|
||||
}
|
||||
|
||||
|
||||
@ -122,7 +126,7 @@ void xxmissio_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
}
|
||||
|
||||
|
||||
UINT32 xxmissio_state::screen_update_xxmissio(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 xxmissio_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
machine().tilemap().mark_all_dirty();
|
||||
machine().tilemap().set_flip_all(m_flipscreen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
|
||||
|
Loading…
Reference in New Issue
Block a user