tecmo.c, tecmo16.c, vball.c: added save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-02-20 19:14:28 +01:00
parent 1ecab6f443
commit 1cdee288e5
9 changed files with 328 additions and 324 deletions

View File

@ -51,11 +51,10 @@ f80b ????
#include "emu.h" #include "emu.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "sound/3812intf.h" #include "sound/3812intf.h"
#include "sound/msm5205.h"
#include "includes/tecmo.h" #include "includes/tecmo.h"
WRITE8_MEMBER(tecmo_state::tecmo_bankswitch_w) WRITE8_MEMBER(tecmo_state::bankswitch_w)
{ {
int bankaddress; int bankaddress;
UINT8 *RAM = memregion("maincpu")->base(); UINT8 *RAM = memregion("maincpu")->base();
@ -65,34 +64,34 @@ WRITE8_MEMBER(tecmo_state::tecmo_bankswitch_w)
membank("bank1")->set_base(&RAM[bankaddress]); membank("bank1")->set_base(&RAM[bankaddress]);
} }
WRITE8_MEMBER(tecmo_state::tecmo_sound_command_w) WRITE8_MEMBER(tecmo_state::sound_command_w)
{ {
soundlatch_byte_w(space, offset, data); soundlatch_byte_w(space, offset, data);
m_soundcpu->set_input_line(INPUT_LINE_NMI,ASSERT_LINE); m_soundcpu->set_input_line(INPUT_LINE_NMI,ASSERT_LINE);
} }
WRITE8_MEMBER(tecmo_state::tecmo_nmi_ack_w) WRITE8_MEMBER(tecmo_state::nmi_ack_w)
{ {
m_soundcpu->set_input_line(INPUT_LINE_NMI,CLEAR_LINE); m_soundcpu->set_input_line(INPUT_LINE_NMI,CLEAR_LINE);
} }
WRITE8_MEMBER(tecmo_state::tecmo_adpcm_start_w) WRITE8_MEMBER(tecmo_state::adpcm_start_w)
{ {
m_adpcm_pos = data << 8; m_adpcm_pos = data << 8;
m_msm->reset_w(0); m_msm->reset_w(0);
} }
WRITE8_MEMBER(tecmo_state::tecmo_adpcm_end_w) WRITE8_MEMBER(tecmo_state::adpcm_end_w)
{ {
m_adpcm_end = (data + 1) << 8; m_adpcm_end = (data + 1) << 8;
} }
WRITE8_MEMBER(tecmo_state::tecmo_adpcm_vol_w) WRITE8_MEMBER(tecmo_state::adpcm_vol_w)
{ {
m_msm->set_volume((data & 0x0f) * 100 / 15); m_msm->set_volume((data & 0x0f) * 100 / 15);
} }
WRITE_LINE_MEMBER(tecmo_state::tecmo_adpcm_int) WRITE_LINE_MEMBER(tecmo_state::adpcm_int)
{ {
if (m_adpcm_pos >= m_adpcm_end || if (m_adpcm_pos >= m_adpcm_end ||
m_adpcm_pos >= memregion("adpcm")->bytes()) m_adpcm_pos >= memregion("adpcm")->bytes())
@ -112,28 +111,28 @@ WRITE_LINE_MEMBER(tecmo_state::tecmo_adpcm_int)
} }
/* the 8-bit dipswitches are split across addresses */ /* the 8-bit dipswitches are split across addresses */
READ8_MEMBER(tecmo_state::tecmo_dswa_l_r) READ8_MEMBER(tecmo_state::dswa_l_r)
{ {
UINT8 port = ioport("DSWA")->read(); UINT8 port = ioport("DSWA")->read();
port &= 0x0f; port &= 0x0f;
return port; return port;
} }
READ8_MEMBER(tecmo_state::tecmo_dswa_h_r) READ8_MEMBER(tecmo_state::dswa_h_r)
{ {
UINT8 port = ioport("DSWA")->read(); UINT8 port = ioport("DSWA")->read();
port &= 0xf0; port &= 0xf0;
return port>>4; return port>>4;
} }
READ8_MEMBER(tecmo_state::tecmo_dswb_l_r) READ8_MEMBER(tecmo_state::dswb_l_r)
{ {
UINT8 port = ioport("DSWB")->read(); UINT8 port = ioport("DSWB")->read();
port &= 0x0f; port &= 0x0f;
return port; return port;
} }
READ8_MEMBER(tecmo_state::tecmo_dswb_h_r) READ8_MEMBER(tecmo_state::dswb_h_r)
{ {
UINT8 port = ioport("DSWB")->read(); UINT8 port = ioport("DSWB")->read();
port &= 0xf0; port &= 0xf0;
@ -144,9 +143,9 @@ READ8_MEMBER(tecmo_state::tecmo_dswb_h_r)
static ADDRESS_MAP_START( rygar_map, AS_PROGRAM, 8, tecmo_state ) static ADDRESS_MAP_START( rygar_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM AM_RANGE(0xc000, 0xcfff) AM_RAM
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_SHARE("fgvideoram") AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_SHARE("bgvideoram") AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xe800, 0xefff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0xe800, 0xefff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1") AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1")
@ -156,25 +155,25 @@ static ADDRESS_MAP_START( rygar_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2") AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2")
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0") AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1") AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ(tecmo_dswa_l_r) AM_RANGE(0xf806, 0xf806) AM_READ(dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(tecmo_dswa_h_r) AM_RANGE(0xf807, 0xf807) AM_READ(dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(tecmo_dswb_l_r) AM_RANGE(0xf808, 0xf808) AM_READ(dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(tecmo_dswb_h_r) AM_RANGE(0xf809, 0xf809) AM_READ(dswb_h_r)
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2") AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w) AM_RANGE(0xf800, 0xf802) AM_WRITE(fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w) AM_RANGE(0xf803, 0xf805) AM_WRITE(bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w) AM_RANGE(0xf806, 0xf806) AM_WRITE(sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w) AM_RANGE(0xf807, 0xf807) AM_WRITE(flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w) AM_RANGE(0xf808, 0xf808) AM_WRITE(bankswitch_w)
AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w) AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( gemini_map, AS_PROGRAM, 8, tecmo_state ) static ADDRESS_MAP_START( gemini_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM AM_RANGE(0xc000, 0xcfff) AM_RAM
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_SHARE("fgvideoram") AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_SHARE("bgvideoram") AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xe000, 0xe7ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0xe000, 0xe7ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0xe800, 0xefff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xe800, 0xefff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1") AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1")
@ -184,24 +183,24 @@ static ADDRESS_MAP_START( gemini_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2") AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2")
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0") AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1") AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ(tecmo_dswa_l_r) AM_RANGE(0xf806, 0xf806) AM_READ(dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(tecmo_dswa_h_r) AM_RANGE(0xf807, 0xf807) AM_READ(dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(tecmo_dswb_l_r) AM_RANGE(0xf808, 0xf808) AM_READ(dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(tecmo_dswb_h_r) AM_RANGE(0xf809, 0xf809) AM_READ(dswb_h_r)
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2") AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w) AM_RANGE(0xf800, 0xf802) AM_WRITE(fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w) AM_RANGE(0xf803, 0xf805) AM_WRITE(bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w) AM_RANGE(0xf806, 0xf806) AM_WRITE(sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w) AM_RANGE(0xf807, 0xf807) AM_WRITE(flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w) AM_RANGE(0xf808, 0xf808) AM_WRITE(bankswitch_w)
AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w) AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( silkworm_map, AS_PROGRAM, 8, tecmo_state ) static ADDRESS_MAP_START( silkworm_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_SHARE("bgvideoram") AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_SHARE("fgvideoram") AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd000, 0xdfff) AM_RAM AM_RANGE(0xd000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xe800, 0xefff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0xe800, 0xefff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
@ -212,16 +211,16 @@ static ADDRESS_MAP_START( silkworm_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2") AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2")
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0") AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1") AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ(tecmo_dswa_l_r) AM_RANGE(0xf806, 0xf806) AM_READ(dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(tecmo_dswa_h_r) AM_RANGE(0xf807, 0xf807) AM_READ(dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(tecmo_dswb_l_r) AM_RANGE(0xf808, 0xf808) AM_READ(dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(tecmo_dswb_h_r) AM_RANGE(0xf809, 0xf809) AM_READ(dswb_h_r)
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2") AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w) AM_RANGE(0xf800, 0xf802) AM_WRITE(fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w) AM_RANGE(0xf803, 0xf805) AM_WRITE(bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w) AM_RANGE(0xf806, 0xf806) AM_WRITE(sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w) AM_RANGE(0xf807, 0xf807) AM_WRITE(flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w) AM_RANGE(0xf808, 0xf808) AM_WRITE(bankswitch_w)
AM_RANGE(0xf809, 0xf809) AM_WRITENOP /* ? */ AM_RANGE(0xf809, 0xf809) AM_WRITENOP /* ? */
AM_RANGE(0xf80b, 0xf80b) AM_WRITENOP /* ? if mapped to watchdog like in the others, causes reset */ AM_RANGE(0xf80b, 0xf80b) AM_WRITENOP /* ? if mapped to watchdog like in the others, causes reset */
ADDRESS_MAP_END ADDRESS_MAP_END
@ -230,10 +229,10 @@ static ADDRESS_MAP_START( rygar_sound_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_RANGE(0x4000, 0x47ff) AM_RAM
AM_RANGE(0x8000, 0x8001) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0x8000, 0x8001) AM_DEVWRITE("ymsnd", ym3812_device, write)
AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(tecmo_adpcm_start_w) AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(adpcm_start_w)
AM_RANGE(0xd000, 0xd000) AM_WRITE(tecmo_adpcm_end_w) AM_RANGE(0xd000, 0xd000) AM_WRITE(adpcm_end_w)
AM_RANGE(0xe000, 0xe000) AM_WRITE(tecmo_adpcm_vol_w) AM_RANGE(0xe000, 0xe000) AM_WRITE(adpcm_vol_w)
AM_RANGE(0xf000, 0xf000) AM_WRITE(tecmo_nmi_ack_w) AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_ack_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( tecmo_sound_map, AS_PROGRAM, 8, tecmo_state ) static ADDRESS_MAP_START( tecmo_sound_map, AS_PROGRAM, 8, tecmo_state )
@ -242,10 +241,10 @@ static ADDRESS_MAP_START( tecmo_sound_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ymsnd", ym3812_device, write)
AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(tecmo_adpcm_start_w) AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(adpcm_start_w)
AM_RANGE(0xc400, 0xc400) AM_WRITE(tecmo_adpcm_end_w) AM_RANGE(0xc400, 0xc400) AM_WRITE(adpcm_end_w)
AM_RANGE(0xc800, 0xc800) AM_WRITE(tecmo_adpcm_vol_w) AM_RANGE(0xc800, 0xc800) AM_WRITE(adpcm_vol_w)
AM_RANGE(0xcc00, 0xcc00) AM_WRITE(tecmo_nmi_ack_w) AM_RANGE(0xcc00, 0xcc00) AM_WRITE(nmi_ack_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -600,7 +599,14 @@ static GFXDECODE_START( tecmo )
GFXDECODE_END GFXDECODE_END
MACHINE_RESET_MEMBER(tecmo_state,rygar) void tecmo_state::machine_start()
{
save_item(NAME(m_adpcm_pos));
save_item(NAME(m_adpcm_end));
save_item(NAME(m_adpcm_data));
}
void tecmo_state::machine_reset()
{ {
m_adpcm_pos = 0; m_adpcm_pos = 0;
m_adpcm_end = 0; m_adpcm_end = 0;
@ -623,7 +629,7 @@ static MACHINE_CONFIG_START( rygar, tecmo_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0) /* frames per second, vblank duration */) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0) /* frames per second, vblank duration */)
MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(tecmo_state, screen_update_tecmo) MCFG_SCREEN_UPDATE_DRIVER(tecmo_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tecmo) MCFG_GFXDECODE_ADD("gfxdecode", "palette", tecmo)
@ -633,10 +639,6 @@ static MACHINE_CONFIG_START( rygar, tecmo_state )
MCFG_DEVICE_ADD("spritegen", TECMO_SPRITE, 0) MCFG_DEVICE_ADD("spritegen", TECMO_SPRITE, 0)
MCFG_VIDEO_START_OVERRIDE(tecmo_state,tecmo)
MCFG_MACHINE_RESET_OVERRIDE(tecmo_state, rygar )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -645,7 +647,7 @@ static MACHINE_CONFIG_START( rygar, tecmo_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) /* verified on pcb, even if schematics shows a 384khz resonator */ MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) /* verified on pcb, even if schematics shows a 384khz resonator */
MCFG_MSM5205_VCLK_CB(WRITELINE(tecmo_state, tecmo_adpcm_int)) /* interrupt function */ MCFG_MSM5205_VCLK_CB(WRITELINE(tecmo_state, adpcm_int)) /* interrupt function */
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8KHz */ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8KHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -671,47 +673,11 @@ static MACHINE_CONFIG_DERIVED( silkworm, gemini )
MCFG_CPU_PROGRAM_MAP(silkworm_map) MCFG_CPU_PROGRAM_MAP(silkworm_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
#ifdef UNUSED_CODE static MACHINE_CONFIG_DERIVED( backfirt, gemini )
static MACHINE_CONFIG_START( backfirt, tecmo_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_24MHz/4)
MCFG_CPU_PROGRAM_MAP(rygar_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", tecmo_state, irq0_line_hold)
MCFG_CPU_ADD("soundcpu", Z80, XTAL_8MHz/2)
MCFG_CPU_PROGRAM_MAP(rygar_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0) /* frames per second, vblank duration */)
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(tecmo_state, screen_update_tecmo)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tecmo)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xxxxBBBBRRRRGGGG)
MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG)
MCFG_VIDEO_START_OVERRIDE(tecmo_state,tecmo)
MCFG_MACHINE_RESET_OVERRIDE(tecmo_state, rygar )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_4MHz) /* verified on pcb */
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* no MSM on this PCB */
/* this pcb has no MSM5205 */
MCFG_DEVICE_REMOVE("msm")
MACHINE_CONFIG_END MACHINE_CONFIG_END
#endif
/*************************************************************************** /***************************************************************************
Game driver(s) Game driver(s)
@ -1065,9 +1031,6 @@ ROM_START( backfirt )
ROM_LOAD( "b16-s2.bin", 0x10000, 0x10000, CRC(6e4052c9) SHA1(e2e3d7221b75cb044449a25a076a93c3def1f11b) ) /* tiles #2 */ ROM_LOAD( "b16-s2.bin", 0x10000, 0x10000, CRC(6e4052c9) SHA1(e2e3d7221b75cb044449a25a076a93c3def1f11b) ) /* tiles #2 */
ROM_LOAD( "b15-s2.bin", 0x20000, 0x10000, CRC(2b6cc20e) SHA1(4815819288753400935836cc1b0b69f4c4b43ddc) ) /* tiles #2 */ ROM_LOAD( "b15-s2.bin", 0x20000, 0x10000, CRC(2b6cc20e) SHA1(4815819288753400935836cc1b0b69f4c4b43ddc) ) /* tiles #2 */
ROM_LOAD( "b14-s3.bin", 0x30000, 0x08000, CRC(4d29637a) SHA1(28e85925138256b8ce5a1c4a5df5b219b1b6b197) ) /* tiles #2 */ // half size is correct, rom type 27256 ROM_LOAD( "b14-s3.bin", 0x30000, 0x08000, CRC(4d29637a) SHA1(28e85925138256b8ce5a1c4a5df5b219b1b6b197) ) /* tiles #2 */ // half size is correct, rom type 27256
ROM_REGION( 0x8000, "adpcm", ROMREGION_ERASE00 ) /* ADPCM samples */
// ROM_LOAD( "silkworm.1", 0x0000, 0x8000, CRC(5b553644) SHA1(5d39d2251094c17f7b732b4861401b3516fce9b1) )
ROM_END ROM_END
ROM_START( gemini ) ROM_START( gemini )
@ -1138,11 +1101,11 @@ DRIVER_INIT_MEMBER(tecmo_state,backfirt)
GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 1)", 0 ) GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 1)", GAME_SUPPORTS_SAVE )
GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 2)", 0 ) GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 2)", GAME_SUPPORTS_SAVE )
GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", 0 ) GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", GAME_SUPPORTS_SAVE )
GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", 0 ) GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", 0 ) /* Japan regional warning screen */ GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", GAME_SUPPORTS_SAVE ) /* Japan regional warning screen */
GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, silkworm, ROT0, "Tecmo", "Silk Worm (World)", 0 ) /* No regional "Warning, if you are playing ..." screen */ GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, silkworm, ROT0, "Tecmo", "Silk Worm (World)", GAME_SUPPORTS_SAVE ) /* No regional "Warning, if you are playing ..." screen */
GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", 0 ) /* Japan regional warning screen */ GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", GAME_SUPPORTS_SAVE ) /* Japan regional warning screen */
GAME( 1988, backfirt, 0, gemini, backfirt, tecmo_state, backfirt, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", 0 ) GAME( 1988, backfirt, 0, backfirt, backfirt, tecmo_state, backfirt, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", GAME_SUPPORTS_SAVE )

View File

@ -32,7 +32,7 @@ Notes:
/******************************************************************************/ /******************************************************************************/
WRITE16_MEMBER(tecmo16_state::tecmo16_sound_command_w) WRITE16_MEMBER(tecmo16_state::sound_command_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
@ -46,49 +46,49 @@ WRITE16_MEMBER(tecmo16_state::tecmo16_sound_command_w)
static ADDRESS_MAP_START( fstarfrc_map, AS_PROGRAM, 16, tecmo16_state ) static ADDRESS_MAP_START( fstarfrc_map, AS_PROGRAM, 16, tecmo16_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM /* Main RAM */ AM_RANGE(0x100000, 0x103fff) AM_RAM /* Main RAM */
AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(tecmo16_charram_w) AM_SHARE("charram") AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x120000, 0x1207ff) AM_RAM_WRITE(tecmo16_videoram_w) AM_SHARE("videoram") AM_RANGE(0x120000, 0x1207ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x120800, 0x120fff) AM_RAM_WRITE(tecmo16_colorram_w) AM_SHARE("colorram") AM_RANGE(0x120800, 0x120fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x121000, 0x1217ff) AM_RAM_WRITE(tecmo16_videoram2_w) AM_SHARE("videoram2") AM_RANGE(0x121000, 0x1217ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0x121800, 0x121fff) AM_RAM_WRITE(tecmo16_colorram2_w) AM_SHARE("colorram2") AM_RANGE(0x121800, 0x121fff) AM_RAM_WRITE(colorram2_w) AM_SHARE("colorram2")
AM_RANGE(0x122000, 0x127fff) AM_RAM /* work area */ AM_RANGE(0x122000, 0x127fff) AM_RAM /* work area */
AM_RANGE(0x130000, 0x130fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x130000, 0x130fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x140000, 0x141fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x140000, 0x141fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x150000, 0x150001) AM_WRITE(tecmo16_flipscreen_w) AM_RANGE(0x150000, 0x150001) AM_WRITE(flipscreen_w)
AM_RANGE(0x150010, 0x150011) AM_WRITE(tecmo16_sound_command_w) AM_RANGE(0x150010, 0x150011) AM_WRITE(sound_command_w)
AM_RANGE(0x150030, 0x150031) AM_READ_PORT("DSW2") AM_WRITENOP /* ??? */ AM_RANGE(0x150030, 0x150031) AM_READ_PORT("DSW2") AM_WRITENOP /* ??? */
AM_RANGE(0x150040, 0x150041) AM_READ_PORT("DSW1") AM_RANGE(0x150040, 0x150041) AM_READ_PORT("DSW1")
AM_RANGE(0x150050, 0x150051) AM_READ_PORT("P1_P2") AM_RANGE(0x150050, 0x150051) AM_READ_PORT("P1_P2")
AM_RANGE(0x160000, 0x160001) AM_WRITE(tecmo16_scroll_char_x_w) AM_RANGE(0x160000, 0x160001) AM_WRITE(scroll_char_x_w)
AM_RANGE(0x16000c, 0x16000d) AM_WRITE(tecmo16_scroll_x_w) AM_RANGE(0x16000c, 0x16000d) AM_WRITE(scroll_x_w)
AM_RANGE(0x160012, 0x160013) AM_WRITE(tecmo16_scroll_y_w) AM_RANGE(0x160012, 0x160013) AM_WRITE(scroll_y_w)
AM_RANGE(0x160018, 0x160019) AM_WRITE(tecmo16_scroll2_x_w) AM_RANGE(0x160018, 0x160019) AM_WRITE(scroll2_x_w)
AM_RANGE(0x16001e, 0x16001f) AM_WRITE(tecmo16_scroll2_y_w) AM_RANGE(0x16001e, 0x16001f) AM_WRITE(scroll2_y_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( ginkun_map, AS_PROGRAM, 16, tecmo16_state ) static ADDRESS_MAP_START( ginkun_map, AS_PROGRAM, 16, tecmo16_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM /* Main RAM */ AM_RANGE(0x100000, 0x103fff) AM_RAM /* Main RAM */
AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(tecmo16_charram_w) AM_SHARE("charram") AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x120000, 0x120fff) AM_RAM_WRITE(tecmo16_videoram_w) AM_SHARE("videoram") AM_RANGE(0x120000, 0x120fff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x121000, 0x121fff) AM_RAM_WRITE(tecmo16_colorram_w) AM_SHARE("colorram") AM_RANGE(0x121000, 0x121fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x122000, 0x122fff) AM_RAM_WRITE(tecmo16_videoram2_w) AM_SHARE("videoram2") AM_RANGE(0x122000, 0x122fff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0x123000, 0x123fff) AM_RAM_WRITE(tecmo16_colorram2_w) AM_SHARE("colorram2") AM_RANGE(0x123000, 0x123fff) AM_RAM_WRITE(colorram2_w) AM_SHARE("colorram2")
AM_RANGE(0x124000, 0x124fff) AM_RAM /* extra RAM for Riot */ AM_RANGE(0x124000, 0x124fff) AM_RAM /* extra RAM for Riot */
AM_RANGE(0x130000, 0x130fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x130000, 0x130fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x140000, 0x141fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x140000, 0x141fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x150000, 0x150001) AM_WRITE(tecmo16_flipscreen_w) AM_RANGE(0x150000, 0x150001) AM_WRITE(flipscreen_w)
AM_RANGE(0x150010, 0x150011) AM_WRITE(tecmo16_sound_command_w) AM_RANGE(0x150010, 0x150011) AM_WRITE(sound_command_w)
AM_RANGE(0x150020, 0x150021) AM_READ_PORT("EXTRA") AM_WRITENOP /* ??? */ AM_RANGE(0x150020, 0x150021) AM_READ_PORT("EXTRA") AM_WRITENOP /* ??? */
AM_RANGE(0x150030, 0x150031) AM_READ_PORT("DSW2") AM_WRITENOP /* ??? */ AM_RANGE(0x150030, 0x150031) AM_READ_PORT("DSW2") AM_WRITENOP /* ??? */
AM_RANGE(0x150040, 0x150041) AM_READ_PORT("DSW1") AM_RANGE(0x150040, 0x150041) AM_READ_PORT("DSW1")
AM_RANGE(0x150050, 0x150051) AM_READ_PORT("P1_P2") AM_RANGE(0x150050, 0x150051) AM_READ_PORT("P1_P2")
AM_RANGE(0x160000, 0x160001) AM_WRITE(tecmo16_scroll_char_x_w) AM_RANGE(0x160000, 0x160001) AM_WRITE(scroll_char_x_w)
AM_RANGE(0x160006, 0x160007) AM_WRITE(tecmo16_scroll_char_y_w) AM_RANGE(0x160006, 0x160007) AM_WRITE(scroll_char_y_w)
AM_RANGE(0x16000c, 0x16000d) AM_WRITE(tecmo16_scroll_x_w) AM_RANGE(0x16000c, 0x16000d) AM_WRITE(scroll_x_w)
AM_RANGE(0x160012, 0x160013) AM_WRITE(tecmo16_scroll_y_w) AM_RANGE(0x160012, 0x160013) AM_WRITE(scroll_y_w)
AM_RANGE(0x160018, 0x160019) AM_WRITE(tecmo16_scroll2_x_w) AM_RANGE(0x160018, 0x160019) AM_WRITE(scroll2_x_w)
AM_RANGE(0x16001e, 0x16001f) AM_WRITE(tecmo16_scroll2_y_w) AM_RANGE(0x16001e, 0x16001f) AM_WRITE(scroll2_y_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tecmo16_state ) static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tecmo16_state )
@ -382,7 +382,7 @@ static MACHINE_CONFIG_START( fstarfrc, tecmo16_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(tecmo16_state, screen_update_tecmo16) MCFG_SCREEN_UPDATE_DRIVER(tecmo16_state, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tecmo16) MCFG_GFXDECODE_ADD("gfxdecode", "palette", tecmo16)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 4096) MCFG_PALETTE_ADD_INIT_BLACK("palette", 4096)
@ -629,7 +629,7 @@ ROM_END
/******************************************************************************/ /******************************************************************************/
GAME( 1992, fstarfrc, 0, fstarfrc, fstarfrc, driver_device, 0, ROT90, "Tecmo", "Final Star Force (US)", 0 ) GAME( 1992, fstarfrc, 0, fstarfrc, fstarfrc, driver_device, 0, ROT90, "Tecmo", "Final Star Force (US)", GAME_SUPPORTS_SAVE )
GAME( 1992, fstarfrcj, fstarfrc, fstarfrc, fstarfrc, driver_device, 0, ROT90, "Tecmo", "Final Star Force (Japan)", 0 ) GAME( 1992, fstarfrcj, fstarfrc, fstarfrc, fstarfrc, driver_device, 0, ROT90, "Tecmo", "Final Star Force (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1992, riot, 0, riot, riot, driver_device, 0, ROT0, "NMK", "Riot", 0 ) GAME( 1992, riot, 0, riot, riot, driver_device, 0, ROT0, "NMK", "Riot", GAME_SUPPORTS_SAVE )
GAME( 1995, ginkun, 0, ginkun, ginkun, driver_device, 0, ROT0, "Tecmo", "Ganbare Ginkun", 0 ) GAME( 1995, ginkun, 0, ginkun, ginkun, driver_device, 0, ROT0, "Tecmo", "Ganbare Ginkun", GAME_SUPPORTS_SAVE )

View File

@ -31,7 +31,7 @@ VBlank = 58Hz
-2) X Line Scrolling doesn't work 100% when Flip Screen Dip is set -2) X Line Scrolling doesn't work 100% when Flip Screen Dip is set
-3) 2 Player Version - Dips for difficulty don't seem to work or just need more testing -3) 2 Player Version - Dips for difficulty don't seem to work or just need more testing
-4) 2 Player Version - sound ROM is different and the adpmc chip is addressed differently -4) 2 Player Version - sound ROM is different and the adpcm chip is addressed differently
Changed it to use a rom that was dumped from original PCB (readme below), Changed it to use a rom that was dumped from original PCB (readme below),
this makes the non-working ROM not used - i don't know where it come from. this makes the non-working ROM not used - i don't know where it come from.
@ -131,11 +131,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(vball_state::vball_scanline)
/* Save the scroll x register value */ /* Save the scroll x register value */
if (scanline < 256) if (scanline < 256)
{ {
m_vb_scrollx[255 - scanline] = (m_vb_scrollx_hi + m_vb_scrollx_lo + 4); m_scrollx[255 - scanline] = (m_scrollx_hi + m_scrollx_lo + 4);
} }
} }
WRITE8_MEMBER(vball_state::vball_irq_ack_w) WRITE8_MEMBER(vball_state::irq_ack_w)
{ {
if (offset == 0) if (offset == 0)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
@ -154,17 +154,16 @@ WRITE8_MEMBER(vball_state::vball_irq_ack_w)
bit 6 = scroll y hi bit 6 = scroll y hi
bit 7 = ? bit 7 = ?
*/ */
WRITE8_MEMBER(vball_state::vb_bankswitch_w) WRITE8_MEMBER(vball_state::bankswitch_w)
{ {
UINT8 *RAM = memregion("maincpu")->base(); membank("mainbank")->set_entry(data & 1);
membank("bank1")->set_base(&RAM[0x10000 + (0x4000 * (data & 1))]);
if (m_gfxset != ((data & 0x20) ^ 0x20)) if (m_gfxset != ((data & 0x20) ^ 0x20))
{ {
m_gfxset = (data & 0x20) ^ 0x20; m_gfxset = (data & 0x20) ^ 0x20;
vb_mark_all_dirty(); m_bg_tilemap->mark_all_dirty();
} }
m_vb_scrolly_hi = (data & 0x40) << 2; m_scrolly_hi = (data & 0x40) << 2;
} }
/* The sound system comes all but verbatim from Double Dragon */ /* The sound system comes all but verbatim from Double Dragon */
@ -184,19 +183,19 @@ WRITE8_MEMBER(vball_state::cpu_sound_command_w)
bit 6 = sp prom bank bit 6 = sp prom bank
bit 7 = sp prom bank bit 7 = sp prom bank
*/ */
WRITE8_MEMBER(vball_state::vb_scrollx_hi_w) WRITE8_MEMBER(vball_state::scrollx_hi_w)
{ {
flip_screen_set(~data&1); flip_screen_set(~data&1);
m_vb_scrollx_hi = (data & 0x02) << 7; m_scrollx_hi = (data & 0x02) << 7;
vb_bgprombank_w((data >> 2) & 0x07); bgprombank_w((data >> 2) & 0x07);
vb_spprombank_w((data >> 5) & 0x07); spprombank_w((data >> 5) & 0x07);
//logerror("%04x: vb_scrollx_hi = %d\n", space.device().safe_pcbase(), m_vb_scrollx_hi); //logerror("%04x: scrollx_hi = %d\n", space.device().safe_pcbase(), m_scrollx_hi);
} }
WRITE8_MEMBER(vball_state::vb_scrollx_lo_w) WRITE8_MEMBER(vball_state::scrollx_lo_w)
{ {
m_vb_scrollx_lo = data; m_scrollx_lo = data;
//logerror("%04x: vb_scrollx_lo =%d\n", space.device().safe_pcbase(), m_vb_scrollx_lo); //logerror("%04x: scrollx_lo =%d\n", space.device().safe_pcbase(), m_scrollx_lo);
} }
@ -211,15 +210,15 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, vball_state )
AM_RANGE(0x1004, 0x1004) AM_READ_PORT("DSW2") AM_RANGE(0x1004, 0x1004) AM_READ_PORT("DSW2")
AM_RANGE(0x1005, 0x1005) AM_READ_PORT("P3") AM_RANGE(0x1005, 0x1005) AM_READ_PORT("P3")
AM_RANGE(0x1006, 0x1006) AM_READ_PORT("P4") AM_RANGE(0x1006, 0x1006) AM_READ_PORT("P4")
AM_RANGE(0x1008, 0x1008) AM_WRITE(vb_scrollx_hi_w) AM_RANGE(0x1008, 0x1008) AM_WRITE(scrollx_hi_w)
AM_RANGE(0x1009, 0x1009) AM_WRITE(vb_bankswitch_w) AM_RANGE(0x1009, 0x1009) AM_WRITE(bankswitch_w)
AM_RANGE(0x100a, 0x100b) AM_WRITE(vball_irq_ack_w) /* is there a scanline counter here? */ AM_RANGE(0x100a, 0x100b) AM_WRITE(irq_ack_w) /* is there a scanline counter here? */
AM_RANGE(0x100c, 0x100c) AM_WRITE(vb_scrollx_lo_w) AM_RANGE(0x100c, 0x100c) AM_WRITE(scrollx_lo_w)
AM_RANGE(0x100d, 0x100d) AM_WRITE(cpu_sound_command_w) AM_RANGE(0x100d, 0x100d) AM_WRITE(cpu_sound_command_w)
AM_RANGE(0x100e, 0x100e) AM_WRITEONLY AM_SHARE("vb_scrolly_lo") AM_RANGE(0x100e, 0x100e) AM_WRITEONLY AM_SHARE("scrolly_lo")
AM_RANGE(0x2000, 0x2fff) AM_WRITE(vb_videoram_w) AM_SHARE("vb_videoram") AM_RANGE(0x2000, 0x2fff) AM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x3000, 0x3fff) AM_WRITE(vb_attrib_w) AM_SHARE("vb_attribram") AM_RANGE(0x3000, 0x3fff) AM_WRITE(attrib_w) AM_SHARE("attribram")
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank")
AM_RANGE(0x8000, 0xffff) AM_ROM AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -361,6 +360,11 @@ static INPUT_PORTS_START (vball2pj)
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) /* Used in 4 player mode, not supported in 2 player set */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) /* Used in 4 player mode, not supported in 2 player set */
INPUT_PORTS_END INPUT_PORTS_END
void vball_state::machine_start()
{
membank("mainbank")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
}
static const gfx_layout charlayout = static const gfx_layout charlayout =
{ {
@ -407,7 +411,7 @@ static MACHINE_CONFIG_START( vball, vball_state )
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 8, 248) /* based on ddragon driver */ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 8, 248) /* based on ddragon driver */
MCFG_SCREEN_UPDATE_DRIVER(vball_state, screen_update_vb) MCFG_SCREEN_UPDATE_DRIVER(vball_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", vb) MCFG_GFXDECODE_ADD("gfxdecode", "palette", vb)
@ -557,7 +561,7 @@ ROM_START( vball2pjb ) /* bootleg of the Japan set with unmoddified program rom
ROM_END ROM_END
GAME( 1988, vball, 0, vball, vball, driver_device, 0, ROT0, "Technos Japan", "U.S. Championship V'ball (US)", 0 ) GAME( 1988, vball, 0, vball, vball, driver_device, 0, ROT0, "Technos Japan", "U.S. Championship V'ball (US)", GAME_SUPPORTS_SAVE )
GAME( 1988, vball2pj, vball, vball, vball2pj, driver_device, 0, ROT0, "Technos Japan", "U.S. Championship V'ball (Japan)", 0 ) GAME( 1988, vball2pj, vball, vball, vball2pj, driver_device, 0, ROT0, "Technos Japan", "U.S. Championship V'ball (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1988, vballb, vball, vball, vball, driver_device, 0, ROT0, "bootleg", "U.S. Championship V'ball (bootleg of US set)", 0 ) GAME( 1988, vballb, vball, vball, vball, driver_device, 0, ROT0, "bootleg", "U.S. Championship V'ball (bootleg of US set)", GAME_SUPPORTS_SAVE )
GAME( 1988, vball2pjb,vball, vball, vball, driver_device, 0, ROT0, "bootleg", "U.S. Championship V'ball (bootleg of Japan set)", 0 ) GAME( 1988, vball2pjb,vball, vball, vball, driver_device, 0, ROT0, "bootleg", "U.S. Championship V'ball (bootleg of Japan set)", GAME_SUPPORTS_SAVE )

View File

@ -6,65 +6,72 @@ class tecmo_state : public driver_device
public: public:
tecmo_state(const machine_config &mconfig, device_type type, const char *tag) tecmo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_txvideoram(*this, "txvideoram"),
m_fgvideoram(*this, "fgvideoram"),
m_bgvideoram(*this, "bgvideoram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"), m_soundcpu(*this, "soundcpu"),
m_msm(*this, "msm"), m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_sprgen(*this, "spritegen") m_sprgen(*this, "spritegen"),
{ } m_txvideoram(*this, "txvideoram"),
m_fgvideoram(*this, "fgvideoram"),
m_bgvideoram(*this, "bgvideoram"),
m_spriteram(*this, "spriteram") { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
optional_device<msm5205_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<tecmo_spr_device> m_sprgen;
int m_adpcm_pos;
int m_adpcm_end;
int m_adpcm_data;
int m_video_type;
required_shared_ptr<UINT8> m_txvideoram; required_shared_ptr<UINT8> m_txvideoram;
required_shared_ptr<UINT8> m_fgvideoram; required_shared_ptr<UINT8> m_fgvideoram;
required_shared_ptr<UINT8> m_bgvideoram; required_shared_ptr<UINT8> m_bgvideoram;
required_shared_ptr<UINT8> m_spriteram;
tilemap_t *m_tx_tilemap; tilemap_t *m_tx_tilemap;
tilemap_t *m_fg_tilemap; tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
UINT8 m_fgscroll[3]; UINT8 m_fgscroll[3];
UINT8 m_bgscroll[3]; UINT8 m_bgscroll[3];
required_shared_ptr<UINT8> m_spriteram; int m_adpcm_pos;
DECLARE_WRITE8_MEMBER(tecmo_bankswitch_w); int m_adpcm_end;
DECLARE_WRITE8_MEMBER(tecmo_sound_command_w); int m_adpcm_data;
DECLARE_WRITE8_MEMBER(tecmo_nmi_ack_w); int m_video_type;
DECLARE_WRITE8_MEMBER(tecmo_adpcm_end_w);
DECLARE_READ8_MEMBER(tecmo_dswa_l_r); DECLARE_WRITE8_MEMBER(bankswitch_w);
DECLARE_READ8_MEMBER(tecmo_dswa_h_r); DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_READ8_MEMBER(tecmo_dswb_l_r); DECLARE_WRITE8_MEMBER(nmi_ack_w);
DECLARE_READ8_MEMBER(tecmo_dswb_h_r); DECLARE_WRITE8_MEMBER(adpcm_end_w);
DECLARE_WRITE8_MEMBER(tecmo_txvideoram_w); DECLARE_READ8_MEMBER(dswa_l_r);
DECLARE_WRITE8_MEMBER(tecmo_fgvideoram_w); DECLARE_READ8_MEMBER(dswa_h_r);
DECLARE_WRITE8_MEMBER(tecmo_bgvideoram_w); DECLARE_READ8_MEMBER(dswb_l_r);
DECLARE_WRITE8_MEMBER(tecmo_fgscroll_w); DECLARE_READ8_MEMBER(dswb_h_r);
DECLARE_WRITE8_MEMBER(tecmo_bgscroll_w); DECLARE_WRITE8_MEMBER(txvideoram_w);
DECLARE_WRITE8_MEMBER(tecmo_flipscreen_w); DECLARE_WRITE8_MEMBER(fgvideoram_w);
DECLARE_WRITE8_MEMBER(tecmo_adpcm_start_w); DECLARE_WRITE8_MEMBER(bgvideoram_w);
DECLARE_WRITE8_MEMBER(tecmo_adpcm_vol_w); DECLARE_WRITE8_MEMBER(fgscroll_w);
DECLARE_WRITE8_MEMBER(bgscroll_w);
DECLARE_WRITE8_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(adpcm_start_w);
DECLARE_WRITE8_MEMBER(adpcm_vol_w);
DECLARE_WRITE_LINE_MEMBER(adpcm_int);
DECLARE_DRIVER_INIT(silkworm); DECLARE_DRIVER_INIT(silkworm);
DECLARE_DRIVER_INIT(rygar); DECLARE_DRIVER_INIT(rygar);
DECLARE_DRIVER_INIT(backfirt); DECLARE_DRIVER_INIT(backfirt);
DECLARE_DRIVER_INIT(gemini); DECLARE_DRIVER_INIT(gemini);
TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(gemini_get_bg_tile_info); TILE_GET_INFO_MEMBER(gemini_get_bg_tile_info);
TILE_GET_INFO_MEMBER(gemini_get_fg_tile_info); TILE_GET_INFO_MEMBER(gemini_get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info); TILE_GET_INFO_MEMBER(get_tx_tile_info);
DECLARE_MACHINE_RESET(rygar);
DECLARE_VIDEO_START(tecmo); virtual void machine_start();
UINT32 screen_update_tecmo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); virtual void machine_reset();
virtual void video_start();
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(tecmo_adpcm_int);
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
required_device<msm5205_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<tecmo_spr_device> m_sprgen;
}; };

View File

@ -6,26 +6,36 @@ class tecmo16_state : public driver_device
public: public:
tecmo16_state(const machine_config &mconfig, device_type type, const char *tag) tecmo16_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_videoram2(*this, "videoram2"),
m_colorram2(*this, "colorram2"),
m_charram(*this, "charram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"), m_screen(*this, "screen"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_sprgen(*this, "spritegen"), m_sprgen(*this, "spritegen"),
m_mixer(*this, "mixer") m_mixer(*this, "mixer"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_videoram2(*this, "videoram2"),
m_colorram2(*this, "colorram2"),
m_charram(*this, "charram"),
m_spriteram(*this, "spriteram")
{ } { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<tecmo_spr_device> m_sprgen;
required_device<tecmo_mix_device> m_mixer;
required_shared_ptr<UINT16> m_videoram; required_shared_ptr<UINT16> m_videoram;
required_shared_ptr<UINT16> m_colorram; required_shared_ptr<UINT16> m_colorram;
required_shared_ptr<UINT16> m_videoram2; required_shared_ptr<UINT16> m_videoram2;
required_shared_ptr<UINT16> m_colorram2; required_shared_ptr<UINT16> m_colorram2;
required_shared_ptr<UINT16> m_charram; required_shared_ptr<UINT16> m_charram;
required_shared_ptr<UINT16> m_spriteram;
tilemap_t *m_fg_tilemap; tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
tilemap_t *m_tx_tilemap; tilemap_t *m_tx_tilemap;
@ -40,33 +50,30 @@ public:
UINT16 m_scroll2_y_w; UINT16 m_scroll2_y_w;
UINT16 m_scroll_char_x_w; UINT16 m_scroll_char_x_w;
UINT16 m_scroll_char_y_w; UINT16 m_scroll_char_y_w;
required_shared_ptr<UINT16> m_spriteram;
DECLARE_WRITE16_MEMBER(tecmo16_sound_command_w); DECLARE_WRITE16_MEMBER(sound_command_w);
DECLARE_WRITE16_MEMBER(tecmo16_videoram_w); DECLARE_WRITE16_MEMBER(videoram_w);
DECLARE_WRITE16_MEMBER(tecmo16_colorram_w); DECLARE_WRITE16_MEMBER(colorram_w);
DECLARE_WRITE16_MEMBER(tecmo16_videoram2_w); DECLARE_WRITE16_MEMBER(videoram2_w);
DECLARE_WRITE16_MEMBER(tecmo16_colorram2_w); DECLARE_WRITE16_MEMBER(colorram2_w);
DECLARE_WRITE16_MEMBER(tecmo16_charram_w); DECLARE_WRITE16_MEMBER(charram_w);
DECLARE_WRITE16_MEMBER(tecmo16_flipscreen_w); DECLARE_WRITE16_MEMBER(flipscreen_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_x_w); DECLARE_WRITE16_MEMBER(scroll_x_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_y_w); DECLARE_WRITE16_MEMBER(scroll_y_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll2_x_w); DECLARE_WRITE16_MEMBER(scroll2_x_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll2_y_w); DECLARE_WRITE16_MEMBER(scroll2_y_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_char_x_w); DECLARE_WRITE16_MEMBER(scroll_char_x_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_char_y_w); DECLARE_WRITE16_MEMBER(scroll_char_y_w);
TILE_GET_INFO_MEMBER(fg_get_tile_info); TILE_GET_INFO_MEMBER(fg_get_tile_info);
TILE_GET_INFO_MEMBER(bg_get_tile_info); TILE_GET_INFO_MEMBER(bg_get_tile_info);
TILE_GET_INFO_MEMBER(tx_get_tile_info); TILE_GET_INFO_MEMBER(tx_get_tile_info);
virtual void video_start(); virtual void video_start();
DECLARE_VIDEO_START(ginkun); DECLARE_VIDEO_START(ginkun);
DECLARE_VIDEO_START(riot); DECLARE_VIDEO_START(riot);
UINT32 screen_update_tecmo16(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<tecmo_spr_device> m_sprgen;
required_device<tecmo_mix_device> m_mixer;
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void save_state();
}; };

View File

@ -3,49 +3,54 @@ class vball_state : public driver_device
public: public:
vball_state(const machine_config &mconfig, device_type type, const char *tag) vball_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_vb_attribram(*this, "vb_attribram"),
m_vb_videoram(*this, "vb_videoram"),
m_vb_scrolly_lo(*this, "vb_scrolly_lo"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"), m_screen(*this, "screen"),
m_palette(*this, "palette"){ } m_palette(*this, "palette"),
m_attribram(*this, "attribram"),
m_videoram(*this, "videoram"),
m_scrolly_lo(*this, "scrolly_lo"),
m_spriteram(*this, "spriteram") { }
required_shared_ptr<UINT8> m_vb_attribram;
required_shared_ptr<UINT8> m_vb_videoram;
required_shared_ptr<UINT8> m_vb_scrolly_lo;
int m_vb_scrollx_hi;
int m_vb_scrolly_hi;
int m_vb_scrollx_lo;
int m_gfxset;
int m_vb_scrollx[256];
int m_vb_bgprombank;
int m_vb_spprombank;
tilemap_t *m_bg_tilemap;
required_shared_ptr<UINT8> m_spriteram;
DECLARE_WRITE8_MEMBER(vball_irq_ack_w);
DECLARE_WRITE8_MEMBER(vb_bankswitch_w);
DECLARE_WRITE8_MEMBER(cpu_sound_command_w);
DECLARE_WRITE8_MEMBER(vb_scrollx_hi_w);
DECLARE_WRITE8_MEMBER(vb_scrollx_lo_w);
DECLARE_WRITE8_MEMBER(vb_videoram_w);
DECLARE_READ8_MEMBER(vb_attrib_r);
DECLARE_WRITE8_MEMBER(vb_attrib_w);
TILEMAP_MAPPER_MEMBER(background_scan);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void video_start();
UINT32 screen_update_vb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(vball_scanline);
void vb_bgprombank_w( int bank );
void vb_spprombank_w( int bank );
void vb_mark_all_dirty( );
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
inline int scanline_to_vcount(int scanline);
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
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;
required_shared_ptr<UINT8> m_attribram;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_scrolly_lo;
required_shared_ptr<UINT8> m_spriteram;
int m_scrollx_hi;
int m_scrolly_hi;
int m_scrollx_lo;
int m_gfxset;
int m_scrollx[256];
int m_bgprombank;
int m_spprombank;
tilemap_t *m_bg_tilemap;
DECLARE_WRITE8_MEMBER(irq_ack_w);
DECLARE_WRITE8_MEMBER(bankswitch_w);
DECLARE_WRITE8_MEMBER(cpu_sound_command_w);
DECLARE_WRITE8_MEMBER(scrollx_hi_w);
DECLARE_WRITE8_MEMBER(scrollx_lo_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(attrib_w);
TILEMAP_MAPPER_MEMBER(background_scan);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void machine_start();
virtual void video_start();
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(vball_scanline);
void bgprombank_w(int bank);
void spprombank_w(int bank);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
inline int scanline_to_vcount(int scanline);
}; };

View File

@ -74,7 +74,7 @@ TILE_GET_INFO_MEMBER(tecmo_state::get_tx_tile_info)
***************************************************************************/ ***************************************************************************/
VIDEO_START_MEMBER(tecmo_state,tecmo) void tecmo_state::video_start()
{ {
if (m_video_type == 2) /* gemini */ if (m_video_type == 2) /* gemini */
{ {
@ -94,6 +94,9 @@ VIDEO_START_MEMBER(tecmo_state,tecmo)
m_bg_tilemap->set_scrolldx(-48,256+48); m_bg_tilemap->set_scrolldx(-48,256+48);
m_fg_tilemap->set_scrolldx(-48,256+48); m_fg_tilemap->set_scrolldx(-48,256+48);
save_item(NAME(m_fgscroll));
save_item(NAME(m_bgscroll));
} }
@ -104,25 +107,25 @@ VIDEO_START_MEMBER(tecmo_state,tecmo)
***************************************************************************/ ***************************************************************************/
WRITE8_MEMBER(tecmo_state::tecmo_txvideoram_w) WRITE8_MEMBER(tecmo_state::txvideoram_w)
{ {
m_txvideoram[offset] = data; m_txvideoram[offset] = data;
m_tx_tilemap->mark_tile_dirty(offset & 0x3ff); m_tx_tilemap->mark_tile_dirty(offset & 0x3ff);
} }
WRITE8_MEMBER(tecmo_state::tecmo_fgvideoram_w) WRITE8_MEMBER(tecmo_state::fgvideoram_w)
{ {
m_fgvideoram[offset] = data; m_fgvideoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset & 0x1ff); m_fg_tilemap->mark_tile_dirty(offset & 0x1ff);
} }
WRITE8_MEMBER(tecmo_state::tecmo_bgvideoram_w) WRITE8_MEMBER(tecmo_state::bgvideoram_w)
{ {
m_bgvideoram[offset] = data; m_bgvideoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset & 0x1ff); m_bg_tilemap->mark_tile_dirty(offset & 0x1ff);
} }
WRITE8_MEMBER(tecmo_state::tecmo_fgscroll_w) WRITE8_MEMBER(tecmo_state::fgscroll_w)
{ {
m_fgscroll[offset] = data; m_fgscroll[offset] = data;
@ -130,7 +133,7 @@ WRITE8_MEMBER(tecmo_state::tecmo_fgscroll_w)
m_fg_tilemap->set_scrolly(0, m_fgscroll[2]); m_fg_tilemap->set_scrolly(0, m_fgscroll[2]);
} }
WRITE8_MEMBER(tecmo_state::tecmo_bgscroll_w) WRITE8_MEMBER(tecmo_state::bgscroll_w)
{ {
m_bgscroll[offset] = data; m_bgscroll[offset] = data;
@ -138,7 +141,7 @@ WRITE8_MEMBER(tecmo_state::tecmo_bgscroll_w)
m_bg_tilemap->set_scrolly(0, m_bgscroll[2]); m_bg_tilemap->set_scrolly(0, m_bgscroll[2]);
} }
WRITE8_MEMBER(tecmo_state::tecmo_flipscreen_w) WRITE8_MEMBER(tecmo_state::flipscreen_w)
{ {
flip_screen_set(data & 1); flip_screen_set(data & 1);
} }
@ -153,7 +156,7 @@ WRITE8_MEMBER(tecmo_state::tecmo_flipscreen_w)
UINT32 tecmo_state::screen_update_tecmo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 tecmo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
screen.priority().fill(0, cliprect); screen.priority().fill(0, cliprect);
bitmap.fill(0x100, cliprect); bitmap.fill(0x100, cliprect);

View File

@ -14,6 +14,18 @@
/******************************************************************************/ /******************************************************************************/
void tecmo16_state::save_state()
{
save_item(NAME(m_flipscreen));
save_item(NAME(m_scroll_x_w));
save_item(NAME(m_scroll_y_w));
save_item(NAME(m_scroll2_x_w));
save_item(NAME(m_scroll2_y_w));
save_item(NAME(m_scroll_char_x_w));
save_item(NAME(m_scroll_char_y_w));
}
TILE_GET_INFO_MEMBER(tecmo16_state::fg_get_tile_info) TILE_GET_INFO_MEMBER(tecmo16_state::fg_get_tile_info)
{ {
int tile = m_videoram[tile_index] & 0x1fff; int tile = m_videoram[tile_index] & 0x1fff;
@ -70,6 +82,8 @@ void tecmo16_state::video_start()
m_tx_tilemap->set_scrolly(0,-16); m_tx_tilemap->set_scrolly(0,-16);
m_flipscreen = 0; m_flipscreen = 0;
m_game_is_riot = 0; m_game_is_riot = 0;
save_state();
} }
VIDEO_START_MEMBER(tecmo16_state,ginkun) VIDEO_START_MEMBER(tecmo16_state,ginkun)
@ -90,6 +104,8 @@ VIDEO_START_MEMBER(tecmo16_state,ginkun)
m_tx_tilemap->set_transparent_pen(0); m_tx_tilemap->set_transparent_pen(0);
m_flipscreen = 0; m_flipscreen = 0;
m_game_is_riot = 0; m_game_is_riot = 0;
save_state();
} }
VIDEO_START_MEMBER(tecmo16_state,riot) VIDEO_START_MEMBER(tecmo16_state,riot)
@ -111,42 +127,44 @@ VIDEO_START_MEMBER(tecmo16_state,riot)
m_tx_tilemap->set_scrolldy(-16,-16); m_tx_tilemap->set_scrolldy(-16,-16);
m_flipscreen = 0; m_flipscreen = 0;
m_game_is_riot = 1; m_game_is_riot = 1;
save_state();
} }
/******************************************************************************/ /******************************************************************************/
WRITE16_MEMBER(tecmo16_state::tecmo16_videoram_w) WRITE16_MEMBER(tecmo16_state::videoram_w)
{ {
COMBINE_DATA(&m_videoram[offset]); COMBINE_DATA(&m_videoram[offset]);
m_fg_tilemap->mark_tile_dirty(offset); m_fg_tilemap->mark_tile_dirty(offset);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_colorram_w) WRITE16_MEMBER(tecmo16_state::colorram_w)
{ {
COMBINE_DATA(&m_colorram[offset]); COMBINE_DATA(&m_colorram[offset]);
m_fg_tilemap->mark_tile_dirty(offset); m_fg_tilemap->mark_tile_dirty(offset);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_videoram2_w) WRITE16_MEMBER(tecmo16_state::videoram2_w)
{ {
COMBINE_DATA(&m_videoram2[offset]); COMBINE_DATA(&m_videoram2[offset]);
m_bg_tilemap->mark_tile_dirty(offset); m_bg_tilemap->mark_tile_dirty(offset);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_colorram2_w) WRITE16_MEMBER(tecmo16_state::colorram2_w)
{ {
COMBINE_DATA(&m_colorram2[offset]); COMBINE_DATA(&m_colorram2[offset]);
m_bg_tilemap->mark_tile_dirty(offset); m_bg_tilemap->mark_tile_dirty(offset);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_charram_w) WRITE16_MEMBER(tecmo16_state::charram_w)
{ {
COMBINE_DATA(&m_charram[offset]); COMBINE_DATA(&m_charram[offset]);
m_tx_tilemap->mark_tile_dirty(offset); m_tx_tilemap->mark_tile_dirty(offset);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_flipscreen_w) WRITE16_MEMBER(tecmo16_state::flipscreen_w)
{ {
m_flipscreen = data & 0x01; m_flipscreen = data & 0x01;
flip_screen_set(m_flipscreen); flip_screen_set(m_flipscreen);
@ -154,37 +172,37 @@ WRITE16_MEMBER(tecmo16_state::tecmo16_flipscreen_w)
/******************************************************************************/ /******************************************************************************/
WRITE16_MEMBER(tecmo16_state::tecmo16_scroll_x_w) WRITE16_MEMBER(tecmo16_state::scroll_x_w)
{ {
COMBINE_DATA(&m_scroll_x_w); COMBINE_DATA(&m_scroll_x_w);
m_fg_tilemap->set_scrollx(0,m_scroll_x_w); m_fg_tilemap->set_scrollx(0,m_scroll_x_w);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_scroll_y_w) WRITE16_MEMBER(tecmo16_state::scroll_y_w)
{ {
COMBINE_DATA(&m_scroll_y_w); COMBINE_DATA(&m_scroll_y_w);
m_fg_tilemap->set_scrolly(0,m_scroll_y_w); m_fg_tilemap->set_scrolly(0,m_scroll_y_w);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_scroll2_x_w) WRITE16_MEMBER(tecmo16_state::scroll2_x_w)
{ {
COMBINE_DATA(&m_scroll2_x_w); COMBINE_DATA(&m_scroll2_x_w);
m_bg_tilemap->set_scrollx(0,m_scroll2_x_w); m_bg_tilemap->set_scrollx(0,m_scroll2_x_w);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_scroll2_y_w) WRITE16_MEMBER(tecmo16_state::scroll2_y_w)
{ {
COMBINE_DATA(&m_scroll2_y_w); COMBINE_DATA(&m_scroll2_y_w);
m_bg_tilemap->set_scrolly(0,m_scroll2_y_w); m_bg_tilemap->set_scrolly(0,m_scroll2_y_w);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_scroll_char_x_w) WRITE16_MEMBER(tecmo16_state::scroll_char_x_w)
{ {
COMBINE_DATA(&m_scroll_char_x_w); COMBINE_DATA(&m_scroll_char_x_w);
m_tx_tilemap->set_scrollx(0,m_scroll_char_x_w); m_tx_tilemap->set_scrollx(0,m_scroll_char_x_w);
} }
WRITE16_MEMBER(tecmo16_state::tecmo16_scroll_char_y_w) WRITE16_MEMBER(tecmo16_state::scroll_char_y_w)
{ {
COMBINE_DATA(&m_scroll_char_y_w); COMBINE_DATA(&m_scroll_char_y_w);
m_tx_tilemap->set_scrolly(0,m_scroll_char_y_w-16); m_tx_tilemap->set_scrolly(0,m_scroll_char_y_w-16);
@ -195,7 +213,7 @@ WRITE16_MEMBER(tecmo16_state::tecmo16_scroll_char_y_w)
/******************************************************************************/ /******************************************************************************/
UINT32 tecmo16_state::screen_update_tecmo16(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) UINT32 tecmo16_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{ {
m_tile_bitmap_bg.fill(0, cliprect); m_tile_bitmap_bg.fill(0, cliprect);
m_tile_bitmap_fg.fill(0, cliprect); m_tile_bitmap_fg.fill(0, cliprect);

View File

@ -27,8 +27,8 @@ TILEMAP_MAPPER_MEMBER(vball_state::background_scan)
TILE_GET_INFO_MEMBER(vball_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(vball_state::get_bg_tile_info)
{ {
UINT8 code = m_vb_videoram[tile_index]; UINT8 code = m_videoram[tile_index];
UINT8 attr = m_vb_attribram[tile_index]; UINT8 attr = m_attribram[tile_index];
SET_TILE_INFO_MEMBER(0, SET_TILE_INFO_MEMBER(0,
code + ((attr & 0x1f) << 8) + (m_gfxset<<8), code + ((attr & 0x1f) << 8) + (m_gfxset<<8),
(attr >> 5) & 0x7, (attr >> 5) & 0x7,
@ -42,63 +42,60 @@ void vball_state::video_start()
m_bg_tilemap->set_scroll_rows(32); m_bg_tilemap->set_scroll_rows(32);
m_gfxset=0; m_gfxset=0;
m_vb_bgprombank=0xff; m_bgprombank=0xff;
m_vb_spprombank=0xff; m_spprombank=0xff;
save_item(NAME(m_scrollx_hi));
save_item(NAME(m_scrolly_hi));
save_item(NAME(m_scrollx_lo));
save_item(NAME(m_gfxset));
save_item(NAME(m_scrollx));
save_item(NAME(m_bgprombank));
save_item(NAME(m_spprombank));
} }
WRITE8_MEMBER(vball_state::vb_videoram_w) WRITE8_MEMBER(vball_state::videoram_w)
{ {
m_vb_videoram[offset] = data; m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset); m_bg_tilemap->mark_tile_dirty(offset);
} }
#ifdef UNUSED_FUNCTION WRITE8_MEMBER(vball_state::attrib_w)
READ8_MEMBER(vball_state::vb_attrib_r)
{ {
return m_vb_attribram[offset]; m_attribram[offset] = data;
}
#endif
WRITE8_MEMBER(vball_state::vb_attrib_w)
{
m_vb_attribram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset); m_bg_tilemap->mark_tile_dirty(offset);
} }
void vball_state::vb_bgprombank_w( int bank ) void vball_state::bgprombank_w( int bank )
{ {
int i; int i;
UINT8* color_prom; UINT8* color_prom;
if (bank==m_vb_bgprombank) return; if (bank==m_bgprombank) return;
color_prom = memregion("proms")->base() + bank*0x80; color_prom = memregion("proms")->base() + bank*0x80;
for (i=0;i<128;i++, color_prom++) { for (i=0;i<128;i++, color_prom++) {
m_palette->set_pen_color(i,pal4bit(color_prom[0] >> 0),pal4bit(color_prom[0] >> 4), m_palette->set_pen_color(i,pal4bit(color_prom[0] >> 0),pal4bit(color_prom[0] >> 4),
pal4bit(color_prom[0x800] >> 0)); pal4bit(color_prom[0x800] >> 0));
} }
m_vb_bgprombank=bank; m_bgprombank=bank;
} }
void vball_state::vb_spprombank_w( int bank ) void vball_state::spprombank_w( int bank )
{ {
int i; int i;
UINT8* color_prom; UINT8* color_prom;
if (bank==m_vb_spprombank) return; if (bank==m_spprombank) return;
color_prom = memregion("proms")->base()+0x400 + bank*0x80; color_prom = memregion("proms")->base()+0x400 + bank*0x80;
for (i=128;i<256;i++,color_prom++) { for (i=128;i<256;i++,color_prom++) {
m_palette->set_pen_color(i,pal4bit(color_prom[0] >> 0),pal4bit(color_prom[0] >> 4), m_palette->set_pen_color(i,pal4bit(color_prom[0] >> 0),pal4bit(color_prom[0] >> 4),
pal4bit(color_prom[0x800] >> 0)); pal4bit(color_prom[0x800] >> 0));
} }
m_vb_spprombank=bank; m_spprombank=bank;
} }
void vball_state::vb_mark_all_dirty( )
{
m_bg_tilemap->mark_all_dirty();
}
#define DRAW_SPRITE( order, sx, sy ) gfx->transpen(bitmap,\ #define DRAW_SPRITE( order, sx, sy ) gfx->transpen(bitmap,\
cliprect, \ cliprect, \
@ -150,16 +147,16 @@ void vball_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
#undef DRAW_SPRITE #undef DRAW_SPRITE
UINT32 vball_state::screen_update_vb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 vball_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int i; int i;
m_bg_tilemap->set_scrolly(0,m_vb_scrolly_hi + *m_vb_scrolly_lo); m_bg_tilemap->set_scrolly(0,m_scrolly_hi + *m_scrolly_lo);
/*To get linescrolling to work properly, we must ignore the 1st two scroll values, no idea why! -SJE */ /*To get linescrolling to work properly, we must ignore the 1st two scroll values, no idea why! -SJE */
for (i = 2; i < 256; i++) { for (i = 2; i < 256; i++) {
m_bg_tilemap->set_scrollx(i,m_vb_scrollx[i-2]); m_bg_tilemap->set_scrollx(i,m_scrollx[i-2]);
//logerror("scrollx[%d] = %d\n",i,m_vb_scrollx[i]); //logerror("scrollx[%d] = %d\n",i,m_scrollx[i]);
} }
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap,cliprect); draw_sprites(bitmap,cliprect);