summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/skyarmy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/skyarmy.c')
-rw-r--r--src/mame/drivers/skyarmy.c84
1 files changed, 48 insertions, 36 deletions
diff --git a/src/mame/drivers/skyarmy.c b/src/mame/drivers/skyarmy.c
index c29b24848e1..1487a130244 100644
--- a/src/mame/drivers/skyarmy.c
+++ b/src/mame/drivers/skyarmy.c
@@ -34,46 +34,59 @@ class skyarmy_state : public driver_device
public:
skyarmy_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_spriteram(*this, "spriteram"),
- m_scrollram(*this, "scrollram"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_scrollram(*this, "scrollram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_colorram;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_scrollram;
+
tilemap_t* m_tilemap;
int m_nmi;
- DECLARE_WRITE8_MEMBER(skyarmy_flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(skyarmy_flip_screen_y_w);
- DECLARE_WRITE8_MEMBER(skyarmy_videoram_w);
- DECLARE_WRITE8_MEMBER(skyarmy_colorram_w);
+
+ DECLARE_WRITE8_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE8_MEMBER(flip_screen_y_w);
+ DECLARE_WRITE8_MEMBER(videoram_w);
+ DECLARE_WRITE8_MEMBER(colorram_w);
DECLARE_WRITE8_MEMBER(nmi_enable_w);
- TILE_GET_INFO_MEMBER(get_skyarmy_tile_info);
+
+ TILE_GET_INFO_MEMBER(get_tile_info);
+
+ virtual void machine_start();
virtual void video_start();
DECLARE_PALETTE_INIT(skyarmy);
- UINT32 screen_update_skyarmy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(skyarmy_nmi_source);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ INTERRUPT_GEN_MEMBER(nmi_source);
};
-WRITE8_MEMBER(skyarmy_state::skyarmy_flip_screen_x_w)
+void skyarmy_state::machine_start()
+{
+ save_item(NAME(m_nmi));
+}
+
+WRITE8_MEMBER(skyarmy_state::flip_screen_x_w)
{
flip_screen_x_set(data & 0x01);
}
-WRITE8_MEMBER(skyarmy_state::skyarmy_flip_screen_y_w)
+WRITE8_MEMBER(skyarmy_state::flip_screen_y_w)
{
flip_screen_y_set(data & 0x01);
}
-TILE_GET_INFO_MEMBER(skyarmy_state::get_skyarmy_tile_info)
+TILE_GET_INFO_MEMBER(skyarmy_state::get_tile_info)
{
int code = m_videoram[tile_index];
int attr = BITSWAP8(m_colorram[tile_index], 7, 6, 5, 4, 3, 0, 1, 2) & 7;
@@ -81,13 +94,13 @@ TILE_GET_INFO_MEMBER(skyarmy_state::get_skyarmy_tile_info)
SET_TILE_INFO_MEMBER(0, code, attr, 0);
}
-WRITE8_MEMBER(skyarmy_state::skyarmy_videoram_w)
+WRITE8_MEMBER(skyarmy_state::videoram_w)
{
m_videoram[offset] = data;
m_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(skyarmy_state::skyarmy_colorram_w)
+WRITE8_MEMBER(skyarmy_state::colorram_w)
{
m_colorram[offset] = data;
m_tilemap->mark_tile_dirty(offset);
@@ -124,14 +137,13 @@ PALETTE_INIT_MEMBER(skyarmy_state, skyarmy)
void skyarmy_state::video_start()
{
- m_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(skyarmy_state::get_skyarmy_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(skyarmy_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_tilemap->set_scroll_cols(32);
}
-UINT32 skyarmy_state::screen_update_skyarmy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 skyarmy_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- UINT8 *spriteram = m_spriteram;
int sx, sy, flipx, flipy, offs,pal;
int i;
@@ -142,15 +154,15 @@ UINT32 skyarmy_state::screen_update_skyarmy(screen_device &screen, bitmap_ind16
for (offs = 0 ; offs < 0x40; offs+=4)
{
- pal = BITSWAP8(spriteram[offs+2], 7, 6, 5, 4, 3, 0, 1, 2) & 7;
+ pal = BITSWAP8(m_spriteram[offs+2], 7, 6, 5, 4, 3, 0, 1, 2) & 7;
- sx = spriteram[offs+3];
- sy = 240-(spriteram[offs]+1);
- flipy = (spriteram[offs+1]&0x80)>>7;
- flipx = (spriteram[offs+1]&0x40)>>6;
+ sx = m_spriteram[offs+3];
+ sy = 240-(m_spriteram[offs]+1);
+ flipy = (m_spriteram[offs+1]&0x80)>>7;
+ flipx = (m_spriteram[offs+1]&0x40)>>6;
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
- spriteram[offs+1]&0x3f,
+ m_spriteram[offs+1]&0x3f,
pal,
flipx,flipy,
sx,sy,0);
@@ -159,7 +171,7 @@ UINT32 skyarmy_state::screen_update_skyarmy(screen_device &screen, bitmap_ind16
return 0;
}
-INTERRUPT_GEN_MEMBER(skyarmy_state::skyarmy_nmi_source)
+INTERRUPT_GEN_MEMBER(skyarmy_state::nmi_source)
{
if(m_nmi) device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
@@ -174,8 +186,8 @@ WRITE8_MEMBER(skyarmy_state::nmi_enable_w)
static ADDRESS_MAP_START( skyarmy_map, AS_PROGRAM, 8, skyarmy_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
- AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(skyarmy_videoram_w) AM_SHARE("videoram") /* Video RAM */
- AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(skyarmy_colorram_w) AM_SHARE("colorram") /* Color RAM */
+ AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") /* Video RAM */
+ AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") /* Color RAM */
AM_RANGE(0x9800, 0x983f) AM_RAM AM_SHARE("spriteram") /* Sprites */
AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("scrollram") /* Scroll RAM */
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW")
@@ -183,8 +195,8 @@ static ADDRESS_MAP_START( skyarmy_map, AS_PROGRAM, 8, skyarmy_state )
AM_RANGE(0xa002, 0xa002) AM_READ_PORT("P2")
AM_RANGE(0xa003, 0xa003) AM_READ_PORT("SYSTEM")
AM_RANGE(0xa004, 0xa004) AM_WRITE(nmi_enable_w) // ???
- AM_RANGE(0xa005, 0xa005) AM_WRITE(skyarmy_flip_screen_x_w)
- AM_RANGE(0xa006, 0xa006) AM_WRITE(skyarmy_flip_screen_y_w)
+ AM_RANGE(0xa005, 0xa005) AM_WRITE(flip_screen_x_w)
+ AM_RANGE(0xa006, 0xa006) AM_WRITE(flip_screen_y_w)
AM_RANGE(0xa007, 0xa007) AM_WRITENOP
ADDRESS_MAP_END
@@ -286,7 +298,7 @@ static MACHINE_CONFIG_START( skyarmy, skyarmy_state )
MCFG_CPU_PROGRAM_MAP(skyarmy_map)
MCFG_CPU_IO_MAP(skyarmy_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", skyarmy_state, irq0_line_hold)
- MCFG_CPU_PERIODIC_INT_DRIVER(skyarmy_state, skyarmy_nmi_source, 650) /* Hz */
+ MCFG_CPU_PERIODIC_INT_DRIVER(skyarmy_state, nmi_source, 650) /* Hz */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -294,7 +306,7 @@ static MACHINE_CONFIG_START( skyarmy, skyarmy_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(32*8,32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8,32*8-1,1*8,31*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(skyarmy_state, screen_update_skyarmy)
+ MCFG_SCREEN_UPDATE_DRIVER(skyarmy_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", skyarmy)
@@ -327,4 +339,4 @@ ROM_START( skyarmy )
ROM_LOAD( "a6.bin", 0x0000, 0x0020, CRC(c721220b) SHA1(61b3320fb616c0600d56840cb6438616c7e0c6eb) )
ROM_END
-GAME( 1982, skyarmy, 0, skyarmy, skyarmy, driver_device, 0, ROT90, "Shoei", "Sky Army", GAME_NO_COCKTAIL )
+GAME( 1982, skyarmy, 0, skyarmy, skyarmy, driver_device, 0, ROT90, "Shoei", "Sky Army", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )