powerins.c, ppmast93.c: added save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-03-25 19:00:50 +01:00
parent 0eda7abf20
commit 10a48e95da
4 changed files with 109 additions and 106 deletions

View File

@ -43,7 +43,7 @@ TODO:
***************************************************************************/ ***************************************************************************/
WRITE16_MEMBER(powerins_state::powerins_okibank_w) WRITE16_MEMBER(powerins_state::okibank_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
@ -58,7 +58,7 @@ WRITE16_MEMBER(powerins_state::powerins_okibank_w)
} }
} }
WRITE16_MEMBER(powerins_state::powerins_soundlatch_w) WRITE16_MEMBER(powerins_state::soundlatch_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
soundlatch_byte_w(space, 0, data & 0xff); soundlatch_byte_w(space, 0, data & 0xff);
@ -76,16 +76,16 @@ static ADDRESS_MAP_START( powerins_map, AS_PROGRAM, 16, powerins_state )
AM_RANGE(0x100002, 0x100003) AM_READ_PORT("P1_P2") AM_RANGE(0x100002, 0x100003) AM_READ_PORT("P1_P2")
AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1") AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1")
AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2") AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2")
AM_RANGE(0x100014, 0x100015) AM_WRITE(powerins_flipscreen_w) // Flip Screen AM_RANGE(0x100014, 0x100015) AM_WRITE(flipscreen_w) // Flip Screen
AM_RANGE(0x100016, 0x100017) AM_WRITENOP // ? always 1 AM_RANGE(0x100016, 0x100017) AM_WRITENOP // ? always 1
AM_RANGE(0x100018, 0x100019) AM_WRITE(powerins_tilebank_w) // Tiles Banking (VRAM 0) AM_RANGE(0x100018, 0x100019) AM_WRITE(tilebank_w) // Tiles Banking (VRAM 0)
AM_RANGE(0x10001e, 0x10001f) AM_WRITE(powerins_soundlatch_w) // Sound Latch AM_RANGE(0x10001e, 0x10001f) AM_WRITE(soundlatch_w) // Sound Latch
AM_RANGE(0x100030, 0x100031) AM_WRITE(powerins_okibank_w) // Sound AM_RANGE(0x100030, 0x100031) AM_WRITE(okibank_w) // Sound
AM_RANGE(0x120000, 0x120fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette AM_RANGE(0x120000, 0x120fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette
AM_RANGE(0x130000, 0x130007) AM_RAM AM_SHARE("vctrl_0") // VRAM 0 Control AM_RANGE(0x130000, 0x130007) AM_RAM AM_SHARE("vctrl_0") // VRAM 0 Control
AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(powerins_vram_0_w) AM_SHARE("vram_0") // VRAM 0 AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // VRAM 0
AM_RANGE(0x170000, 0x170fff) AM_RAM_WRITE(powerins_vram_1_w) AM_SHARE("vram_1") // VRAM 1 AM_RANGE(0x170000, 0x170fff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // VRAM 1
AM_RANGE(0x171000, 0x171fff) AM_WRITE(powerins_vram_1_w) // Mirror of VRAM 1? AM_RANGE(0x171000, 0x171fff) AM_WRITE(vram_1_w) // Mirror of VRAM 1?
AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_SHARE("spriteram") // RAM + Sprites AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_SHARE("spriteram") // RAM + Sprites
ADDRESS_MAP_END ADDRESS_MAP_END
@ -96,17 +96,17 @@ static ADDRESS_MAP_START( powerina_map, AS_PROGRAM, 16, powerins_state )
AM_RANGE(0x100002, 0x100003) AM_READ_PORT("P1_P2") AM_RANGE(0x100002, 0x100003) AM_READ_PORT("P1_P2")
AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1") AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1")
AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2") AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2")
AM_RANGE(0x100014, 0x100015) AM_WRITE(powerins_flipscreen_w) // Flip Screen AM_RANGE(0x100014, 0x100015) AM_WRITE(flipscreen_w) // Flip Screen
AM_RANGE(0x100016, 0x100017) AM_WRITENOP // ? always 1 AM_RANGE(0x100016, 0x100017) AM_WRITENOP // ? always 1
AM_RANGE(0x100018, 0x100019) AM_WRITE(powerins_tilebank_w) // Tiles Banking (VRAM 0) AM_RANGE(0x100018, 0x100019) AM_WRITE(tilebank_w) // Tiles Banking (VRAM 0)
AM_RANGE(0x10001e, 0x10001f) AM_WRITENOP // Sound Latch, NOPed since there is no sound cpu AM_RANGE(0x10001e, 0x10001f) AM_WRITENOP // Sound Latch, NOPed since there is no sound cpu
AM_RANGE(0x100030, 0x100031) AM_WRITE(powerins_okibank_w) // Sound AM_RANGE(0x100030, 0x100031) AM_WRITE(okibank_w) // Sound
AM_RANGE(0x10003e, 0x10003f) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff) // (used by powerina) AM_RANGE(0x10003e, 0x10003f) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff) // (used by powerina)
AM_RANGE(0x120000, 0x120fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette AM_RANGE(0x120000, 0x120fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette
AM_RANGE(0x130000, 0x130007) AM_RAM AM_SHARE("vctrl_0") // VRAM 0 Control AM_RANGE(0x130000, 0x130007) AM_RAM AM_SHARE("vctrl_0") // VRAM 0 Control
AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(powerins_vram_0_w) AM_SHARE("vram_0") // VRAM 0 AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // VRAM 0
AM_RANGE(0x170000, 0x170fff) AM_RAM_WRITE(powerins_vram_1_w) AM_SHARE("vram_1") // VRAM 1 AM_RANGE(0x170000, 0x170fff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // VRAM 1
AM_RANGE(0x171000, 0x171fff) AM_WRITE(powerins_vram_1_w) // Mirror of VRAM 1? AM_RANGE(0x171000, 0x171fff) AM_WRITE(vram_1_w) // Mirror of VRAM 1?
AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_SHARE("spriteram") // RAM + Sprites AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_SHARE("spriteram") // RAM + Sprites
ADDRESS_MAP_END ADDRESS_MAP_END
@ -311,14 +311,14 @@ GFXDECODE_END
***************************************************************************/ ***************************************************************************/
void powerins_state::machine_reset() void powerins_state::machine_start()
{ {
m_oki_bank = -1; // samples bank "unitialised" save_item(NAME(m_oki_bank));
} }
WRITE_LINE_MEMBER(powerins_state::irqhandler) void powerins_state::machine_reset()
{ {
m_soundcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); m_oki_bank = -1; // samples bank "uninitialised"
} }
static MACHINE_CONFIG_START( powerins, powerins_state ) static MACHINE_CONFIG_START( powerins, powerins_state )
@ -339,7 +339,7 @@ static MACHINE_CONFIG_START( powerins, powerins_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(320, 256) MCFG_SCREEN_SIZE(320, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0+16, 256-16-1) MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0+16, 256-16-1)
MCFG_SCREEN_UPDATE_DRIVER(powerins_state, screen_update_powerins) MCFG_SCREEN_UPDATE_DRIVER(powerins_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", powerins) MCFG_GFXDECODE_ADD("gfxdecode", "palette", powerins)
@ -357,7 +357,7 @@ static MACHINE_CONFIG_START( powerins, powerins_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
MCFG_SOUND_ADD("ym2203", YM2203, 12000000 / 8) MCFG_SOUND_ADD("ym2203", YM2203, 12000000 / 8)
MCFG_YM2203_IRQ_HANDLER(WRITELINE(powerins_state, irqhandler)) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0)
MCFG_DEVICE_ADD("nmk112", NMK112, 0) MCFG_DEVICE_ADD("nmk112", NMK112, 0)
@ -701,7 +701,7 @@ ROM_END
/* all supported sets give a 93.10.20 date */ /* all supported sets give a 93.10.20 date */
GAME( 1993, powerins, 0, powerins, powerins, driver_device, 0, ROT0, "Atlus", "Power Instinct (USA)", 0 ) GAME( 1993, powerins, 0, powerins, powerins, driver_device, 0, ROT0, "Atlus", "Power Instinct (USA)", GAME_SUPPORTS_SAVE )
GAME( 1993, powerinsj, powerins, powerins, powerinj, driver_device, 0, ROT0, "Atlus", "Gouketsuji Ichizoku (Japan)", 0 ) GAME( 1993, powerinsj, powerins, powerins, powerinj, driver_device, 0, ROT0, "Atlus", "Gouketsuji Ichizoku (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1993, powerinsa, powerins, powerina, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 1)", 0 ) GAME( 1993, powerinsa, powerins, powerina, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 1)", GAME_SUPPORTS_SAVE )
GAME( 1993, powerinsb, powerins, powerinb, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 2)", 0 ) GAME( 1993, powerinsb, powerins, powerinb, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 2)", GAME_SUPPORTS_SAVE )

View File

@ -131,7 +131,6 @@ Dip locations added based on the notes above.
#include "emu.h" #include "emu.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "sound/3812intf.h"
#include "sound/2413intf.h" #include "sound/2413intf.h"
#include "sound/dac.h" #include "sound/dac.h"
@ -141,75 +140,80 @@ class ppmast93_state : public driver_device
public: public:
ppmast93_state(const machine_config &mconfig, device_type type, const char *tag) ppmast93_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_bgram(*this, "bgram"),
m_fgram(*this, "fgram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_dac(*this, "dac"), m_dac(*this, "dac"),
m_gfxdecode(*this, "gfxdecode") { } m_ymsnd(*this, "ymsnd"),
m_gfxdecode(*this, "gfxdecode"),
m_bgram(*this, "bgram"),
m_fgram(*this, "fgram") { }
required_device<cpu_device> m_maincpu;
required_device<dac_device> m_dac;
required_device<ym2413_device> m_ymsnd;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<UINT8> m_bgram;
required_shared_ptr<UINT8> m_fgram;
tilemap_t *m_fg_tilemap; tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
required_shared_ptr<UINT8> m_bgram;
required_shared_ptr<UINT8> m_fgram; DECLARE_WRITE8_MEMBER(fgram_w);
DECLARE_WRITE8_MEMBER(ppmast93_fgram_w); DECLARE_WRITE8_MEMBER(bgram_w);
DECLARE_WRITE8_MEMBER(ppmast93_bgram_w); DECLARE_WRITE8_MEMBER(port4_w);
DECLARE_WRITE8_MEMBER(ppmast93_port4_w); DECLARE_WRITE8_MEMBER(sound_w);
DECLARE_WRITE8_MEMBER(ppmast_sound_w);
TILE_GET_INFO_MEMBER(get_ppmast93_bg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_ppmast93_fg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info);
virtual void machine_start();
virtual void video_start(); virtual void video_start();
UINT32 screen_update_ppmast93(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu; UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<dac_device> m_dac;
required_device<gfxdecode_device> m_gfxdecode;
}; };
void ppmast93_state::machine_start()
{
membank("cpubank")->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
}
WRITE8_MEMBER(ppmast93_state::fgram_w)
WRITE8_MEMBER(ppmast93_state::ppmast93_fgram_w)
{ {
m_fgram[offset] = data; m_fgram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset/2); m_fg_tilemap->mark_tile_dirty(offset/2);
} }
WRITE8_MEMBER(ppmast93_state::ppmast93_bgram_w) WRITE8_MEMBER(ppmast93_state::bgram_w)
{ {
m_bgram[offset] = data; m_bgram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset/2); m_bg_tilemap->mark_tile_dirty(offset/2);
} }
WRITE8_MEMBER(ppmast93_state::ppmast93_port4_w) WRITE8_MEMBER(ppmast93_state::port4_w)
{ {
UINT8 *rom = memregion("maincpu")->base();
int bank;
coin_counter_w(machine(), 0, data & 0x08); coin_counter_w(machine(), 0, data & 0x08);
coin_counter_w(machine(), 1, data & 0x10); coin_counter_w(machine(), 1, data & 0x10);
bank = data & 0x07; membank("cpubank")->set_entry(data & 0x07);
membank("bank1")->set_base(&rom[0x10000+(bank*0x4000)]);
} }
static ADDRESS_MAP_START( ppmast93_cpu1_map, AS_PROGRAM, 8, ppmast93_state ) static ADDRESS_MAP_START( ppmast93_cpu1_map, AS_PROGRAM, 8, ppmast93_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP AM_REGION("maincpu", 0x10000) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("cpubank")
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(ppmast93_bgram_w) AM_SHARE("bgram") AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(bgram_w) AM_SHARE("bgram")
AM_RANGE(0xd800, 0xdfff) AM_WRITENOP AM_RANGE(0xd800, 0xdfff) AM_WRITENOP
AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(ppmast93_fgram_w) AM_SHARE("fgram") AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(fgram_w) AM_SHARE("fgram")
AM_RANGE(0xf800, 0xffff) AM_RAM AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( ppmast93_cpu1_io, AS_IO, 8, ppmast93_state ) static ADDRESS_MAP_START( ppmast93_cpu1_io, AS_IO, 8, ppmast93_state )
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_WRITE(soundlatch_byte_w)
AM_RANGE(0x02, 0x02) AM_READ_PORT("P2") AM_RANGE(0x02, 0x02) AM_READ_PORT("P2")
AM_RANGE(0x04, 0x04) AM_READ_PORT("SYSTEM") AM_RANGE(0x04, 0x04) AM_READ_PORT("SYSTEM") AM_WRITE(port4_w)
AM_RANGE(0x06, 0x06) AM_READ_PORT("DSW1") AM_RANGE(0x06, 0x06) AM_READ_PORT("DSW1")
AM_RANGE(0x08, 0x08) AM_READ_PORT("DSW2") AM_RANGE(0x08, 0x08) AM_READ_PORT("DSW2")
AM_RANGE(0x00, 0x00) AM_WRITE(soundlatch_byte_w)
AM_RANGE(0x04, 0x04) AM_WRITE(ppmast93_port4_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( ppmast93_cpu2_map, AS_PROGRAM, 8, ppmast93_state ) static ADDRESS_MAP_START( ppmast93_cpu2_map, AS_PROGRAM, 8, ppmast93_state )
@ -219,19 +223,19 @@ static ADDRESS_MAP_START( ppmast93_cpu2_map, AS_PROGRAM, 8, ppmast93_state )
ADDRESS_MAP_END ADDRESS_MAP_END
WRITE8_MEMBER(ppmast93_state::ppmast_sound_w) WRITE8_MEMBER(ppmast93_state::sound_w)
{ {
switch(offset&0xff) switch(offset&0xff)
{ {
case 0: case 0:
case 1: machine().device<ym2413_device>("ymsnd")->write(space,offset,data); break; case 1: m_ymsnd->write(space,offset,data); break;
case 2: m_dac->write_unsigned8(data);break; case 2: m_dac->write_unsigned8(data);break;
default: logerror("%x %x - %x\n",offset,data,space.device().safe_pcbase()); default: logerror("%x %x - %x\n",offset,data,space.device().safe_pcbase());
} }
} }
static ADDRESS_MAP_START( ppmast93_cpu2_io, AS_IO, 8, ppmast93_state ) static ADDRESS_MAP_START( ppmast93_cpu2_io, AS_IO, 8, ppmast93_state )
AM_RANGE(0x0000, 0xffff) AM_ROM AM_WRITE(ppmast_sound_w) AM_REGION("sub", 0x20000) AM_RANGE(0x0000, 0xffff) AM_ROM AM_WRITE(sound_w) AM_REGION("sub", 0x20000)
ADDRESS_MAP_END ADDRESS_MAP_END
static INPUT_PORTS_START( ppmast93 ) static INPUT_PORTS_START( ppmast93 )
@ -332,7 +336,7 @@ static GFXDECODE_START( ppmast93 )
GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 16 ) GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 16 )
GFXDECODE_END GFXDECODE_END
TILE_GET_INFO_MEMBER(ppmast93_state::get_ppmast93_bg_tile_info) TILE_GET_INFO_MEMBER(ppmast93_state::get_bg_tile_info)
{ {
int code = (m_bgram[tile_index*2+1] << 8) | m_bgram[tile_index*2]; int code = (m_bgram[tile_index*2+1] << 8) | m_bgram[tile_index*2];
SET_TILE_INFO_MEMBER(0, SET_TILE_INFO_MEMBER(0,
@ -341,7 +345,7 @@ TILE_GET_INFO_MEMBER(ppmast93_state::get_ppmast93_bg_tile_info)
0); 0);
} }
TILE_GET_INFO_MEMBER(ppmast93_state::get_ppmast93_fg_tile_info) TILE_GET_INFO_MEMBER(ppmast93_state::get_fg_tile_info)
{ {
int code = (m_fgram[tile_index*2+1] << 8) | m_fgram[tile_index*2]; int code = (m_fgram[tile_index*2+1] << 8) | m_fgram[tile_index*2];
SET_TILE_INFO_MEMBER(0, SET_TILE_INFO_MEMBER(0,
@ -352,13 +356,13 @@ TILE_GET_INFO_MEMBER(ppmast93_state::get_ppmast93_fg_tile_info)
void ppmast93_state::video_start() void ppmast93_state::video_start()
{ {
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(ppmast93_state::get_ppmast93_bg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,32, 32); m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(ppmast93_state::get_bg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,32, 32);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(ppmast93_state::get_ppmast93_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,32, 32); m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(ppmast93_state::get_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,32, 32);
m_fg_tilemap->set_transparent_pen(0); m_fg_tilemap->set_transparent_pen(0);
} }
UINT32 ppmast93_state::screen_update_ppmast93(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 ppmast93_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0); m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
@ -370,7 +374,7 @@ static MACHINE_CONFIG_START( ppmast93, ppmast93_state )
MCFG_CPU_ADD("maincpu", Z80,5000000) /* 5 MHz */ MCFG_CPU_ADD("maincpu", Z80,5000000) /* 5 MHz */
MCFG_CPU_PROGRAM_MAP(ppmast93_cpu1_map) MCFG_CPU_PROGRAM_MAP(ppmast93_cpu1_map)
MCFG_CPU_IO_MAP(ppmast93_cpu1_io) MCFG_CPU_IO_MAP(ppmast93_cpu1_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", ppmast93_state, irq0_line_hold) MCFG_CPU_VBLANK_INT_DRIVER("screen", ppmast93_state, irq0_line_hold)
MCFG_CPU_ADD("sub", Z80,5000000) /* 5 MHz */ MCFG_CPU_ADD("sub", Z80,5000000) /* 5 MHz */
MCFG_CPU_PROGRAM_MAP(ppmast93_cpu2_map) MCFG_CPU_PROGRAM_MAP(ppmast93_cpu2_map)
@ -383,7 +387,7 @@ static MACHINE_CONFIG_START( ppmast93, ppmast93_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_SIZE(256, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 256-1) MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 256-1)
MCFG_SCREEN_UPDATE_DRIVER(ppmast93_state, screen_update_ppmast93) MCFG_SCREEN_UPDATE_DRIVER(ppmast93_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ppmast93) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ppmast93)
@ -402,8 +406,8 @@ static MACHINE_CONFIG_START( ppmast93, ppmast93_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
ROM_START( ppmast93 ) ROM_START( ppmast93 )
ROM_REGION( 0x30000, "maincpu", 0 ) ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "2.up7", 0x10000, 0x20000, CRC(8854d8db) SHA1(9d93ddfb44d533772af6519747a6cb50b42065cd) ) ROM_LOAD( "2.up7", 0x00000, 0x20000, CRC(8854d8db) SHA1(9d93ddfb44d533772af6519747a6cb50b42065cd) )
ROM_REGION( 0x30000, "sub", 0 ) ROM_REGION( 0x30000, "sub", 0 )
ROM_LOAD( "1.ue7", 0x10000, 0x20000, CRC(8e26939e) SHA1(e62441e523f5be6a3889064cc5e0f44545260e93) ) ROM_LOAD( "1.ue7", 0x10000, 0x20000, CRC(8e26939e) SHA1(e62441e523f5be6a3889064cc5e0f44545260e93) )
@ -418,4 +422,4 @@ ROM_START( ppmast93 )
ROM_LOAD( "prom1.ug26", 0x200, 0x100, CRC(d979c64e) SHA1(172c9579013d58e35a5b4f732e360811ac36295e) ) ROM_LOAD( "prom1.ug26", 0x200, 0x100, CRC(d979c64e) SHA1(172c9579013d58e35a5b4f732e360811ac36295e) )
ROM_END ROM_END
GAME( 1993, ppmast93, 0, ppmast93, ppmast93, driver_device, 0, ROT0, "Electronic Devices S.R.L.", "Ping Pong Masters '93", GAME_IMPERFECT_SOUND ) GAME( 1993, ppmast93, 0, ppmast93, ppmast93, driver_device, 0, ROT0, "Electronic Devices S.R.L.", "Ping Pong Masters '93", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )

View File

@ -6,45 +6,46 @@ public:
powerins_state(const machine_config &mconfig, device_type type, const char *tag) powerins_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"), m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_vctrl_0(*this, "vctrl_0"), m_vctrl_0(*this, "vctrl_0"),
m_vram_0(*this, "vram_0"), m_vram_0(*this, "vram_0"),
m_vram_1(*this, "vram_1"), m_vram_1(*this, "vram_1"),
m_spriteram(*this, "spriteram"), m_spriteram(*this, "spriteram") { }
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette")
{ }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_soundcpu;
required_shared_ptr<UINT16> m_vctrl_0;
required_shared_ptr<UINT16> m_vram_0;
required_shared_ptr<UINT16> m_vram_1;
required_shared_ptr<UINT16> m_spriteram;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen; required_device<screen_device> m_screen;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
UINT16 *m_vctrl_1; required_shared_ptr<UINT16> m_vctrl_0;
required_shared_ptr<UINT16> m_vram_0;
required_shared_ptr<UINT16> m_vram_1;
required_shared_ptr<UINT16> m_spriteram;
tilemap_t *m_tilemap_0; tilemap_t *m_tilemap_0;
tilemap_t *m_tilemap_1; tilemap_t *m_tilemap_1;
int m_oki_bank; int m_oki_bank;
int m_tile_bank; int m_tile_bank;
DECLARE_WRITE16_MEMBER(powerins_okibank_w);
DECLARE_WRITE16_MEMBER(powerins_soundlatch_w); DECLARE_WRITE16_MEMBER(okibank_w);
DECLARE_WRITE16_MEMBER(soundlatch_w);
DECLARE_WRITE16_MEMBER(flipscreen_w);
DECLARE_WRITE16_MEMBER(tilebank_w);
DECLARE_WRITE16_MEMBER(vram_0_w);
DECLARE_WRITE16_MEMBER(vram_1_w);
DECLARE_READ8_MEMBER(powerinb_fake_ym2203_r); DECLARE_READ8_MEMBER(powerinb_fake_ym2203_r);
DECLARE_WRITE16_MEMBER(powerins_flipscreen_w);
DECLARE_WRITE16_MEMBER(powerins_tilebank_w);
DECLARE_WRITE16_MEMBER(powerins_vram_0_w);
DECLARE_WRITE16_MEMBER(powerins_vram_1_w);
TILE_GET_INFO_MEMBER(get_tile_info_0); TILE_GET_INFO_MEMBER(get_tile_info_0);
TILEMAP_MAPPER_MEMBER(powerins_get_memory_offset_0);
TILE_GET_INFO_MEMBER(get_tile_info_1); TILE_GET_INFO_MEMBER(get_tile_info_1);
TILEMAP_MAPPER_MEMBER(get_memory_offset_0);
virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start(); virtual void video_start();
UINT32 screen_update_powerins(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(irqhandler);
}; };

View File

@ -12,7 +12,7 @@ Note: if MAME_DEBUG is defined, pressing Z with:
W shows layer 2 W shows layer 2
A shows the sprites A shows the sprites
Keys can be used togheter! Keys can be used together!
[ 2 Scrolling Layers ] [ 2 Scrolling Layers ]
@ -48,12 +48,12 @@ Note: if MAME_DEBUG is defined, pressing Z with:
***************************************************************************/ ***************************************************************************/
WRITE16_MEMBER(powerins_state::powerins_flipscreen_w) WRITE16_MEMBER(powerins_state::flipscreen_w)
{ {
if (ACCESSING_BITS_0_7) flip_screen_set(data & 1 ); if (ACCESSING_BITS_0_7) flip_screen_set(data & 1 );
} }
WRITE16_MEMBER(powerins_state::powerins_tilebank_w) WRITE16_MEMBER(powerins_state::tilebank_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
@ -105,13 +105,13 @@ TILE_GET_INFO_MEMBER(powerins_state::get_tile_info_0)
0); 0);
} }
WRITE16_MEMBER(powerins_state::powerins_vram_0_w) WRITE16_MEMBER(powerins_state::vram_0_w)
{ {
COMBINE_DATA(&m_vram_0[offset]); COMBINE_DATA(&m_vram_0[offset]);
m_tilemap_0->mark_tile_dirty(offset); m_tilemap_0->mark_tile_dirty(offset);
} }
TILEMAP_MAPPER_MEMBER(powerins_state::powerins_get_memory_offset_0) TILEMAP_MAPPER_MEMBER(powerins_state::get_memory_offset_0)
{ {
return (col * TILES_PER_PAGE_Y) + return (col * TILES_PER_PAGE_Y) +
@ -144,7 +144,7 @@ TILE_GET_INFO_MEMBER(powerins_state::get_tile_info_1)
0); 0);
} }
WRITE16_MEMBER(powerins_state::powerins_vram_1_w) WRITE16_MEMBER(powerins_state::vram_1_w)
{ {
COMBINE_DATA(&m_vram_1[offset]); COMBINE_DATA(&m_vram_1[offset]);
m_tilemap_1->mark_tile_dirty(offset); m_tilemap_1->mark_tile_dirty(offset);
@ -157,14 +157,14 @@ WRITE16_MEMBER(powerins_state::powerins_vram_1_w)
/*************************************************************************** /***************************************************************************
Vh_Start video_start
***************************************************************************/ ***************************************************************************/
void powerins_state::video_start() void powerins_state::video_start()
{ {
m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(powerins_state::powerins_get_memory_offset_0),this),16,16,DIM_NX_0, DIM_NY_0 ); m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(powerins_state::get_memory_offset_0),this),16,16,DIM_NX_0, DIM_NY_0 );
m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_1),this),TILEMAP_SCAN_COLS,8,8,DIM_NX_1, DIM_NY_1 ); m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(powerins_state::get_tile_info_1),this),TILEMAP_SCAN_COLS,8,8,DIM_NX_1, DIM_NY_1 );
m_tilemap_0->set_scroll_rows(1); m_tilemap_0->set_scroll_rows(1);
@ -173,13 +173,11 @@ void powerins_state::video_start()
m_tilemap_1->set_scroll_rows(1); m_tilemap_1->set_scroll_rows(1);
m_tilemap_1->set_scroll_cols(1); m_tilemap_1->set_scroll_cols(1);
m_tilemap_1->set_transparent_pen(15); m_tilemap_1->set_transparent_pen(15);
save_item(NAME(m_tile_bank));
} }
/*************************************************************************** /***************************************************************************
@ -300,7 +298,7 @@ void powerins_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect
***************************************************************************/ ***************************************************************************/
UINT32 powerins_state::screen_update_powerins(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 powerins_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int layers_ctrl = -1; int layers_ctrl = -1;