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 "cpu/z80/z80.h"
#include "sound/3812intf.h"
#include "sound/msm5205.h"
#include "includes/tecmo.h"
WRITE8_MEMBER(tecmo_state::tecmo_bankswitch_w)
WRITE8_MEMBER(tecmo_state::bankswitch_w)
{
int bankaddress;
UINT8 *RAM = memregion("maincpu")->base();
@ -65,34 +64,34 @@ WRITE8_MEMBER(tecmo_state::tecmo_bankswitch_w)
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);
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);
}
WRITE8_MEMBER(tecmo_state::tecmo_adpcm_start_w)
WRITE8_MEMBER(tecmo_state::adpcm_start_w)
{
m_adpcm_pos = data << 8;
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;
}
WRITE8_MEMBER(tecmo_state::tecmo_adpcm_vol_w)
WRITE8_MEMBER(tecmo_state::adpcm_vol_w)
{
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 ||
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 */
READ8_MEMBER(tecmo_state::tecmo_dswa_l_r)
READ8_MEMBER(tecmo_state::dswa_l_r)
{
UINT8 port = ioport("DSWA")->read();
port &= 0x0f;
return port;
}
READ8_MEMBER(tecmo_state::tecmo_dswa_h_r)
READ8_MEMBER(tecmo_state::dswa_h_r)
{
UINT8 port = ioport("DSWA")->read();
port &= 0xf0;
return port>>4;
}
READ8_MEMBER(tecmo_state::tecmo_dswb_l_r)
READ8_MEMBER(tecmo_state::dswb_l_r)
{
UINT8 port = ioport("DSWB")->read();
port &= 0x0f;
return port;
}
READ8_MEMBER(tecmo_state::tecmo_dswb_h_r)
READ8_MEMBER(tecmo_state::dswb_h_r)
{
UINT8 port = ioport("DSWB")->read();
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 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
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(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(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ(tecmo_dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(tecmo_dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(tecmo_dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(tecmo_dswb_h_r)
AM_RANGE(0xf806, 0xf806) AM_READ(dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(dswb_h_r)
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w)
AM_RANGE(0xf800, 0xf802) AM_WRITE(fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(bankswitch_w)
AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( gemini_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
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(0xe800, 0xefff) AM_RAM AM_SHARE("spriteram")
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(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ(tecmo_dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(tecmo_dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(tecmo_dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(tecmo_dswb_h_r)
AM_RANGE(0xf806, 0xf806) AM_READ(dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(dswb_h_r)
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w)
AM_RANGE(0xf800, 0xf802) AM_WRITE(fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(bankswitch_w)
AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( silkworm_map, AS_PROGRAM, 8, tecmo_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
AM_RANGE(0xd000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("spriteram")
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(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ(tecmo_dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(tecmo_dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(tecmo_dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(tecmo_dswb_h_r)
AM_RANGE(0xf806, 0xf806) AM_READ(dswa_l_r)
AM_RANGE(0xf807, 0xf807) AM_READ(dswa_h_r)
AM_RANGE(0xf808, 0xf808) AM_READ(dswb_l_r)
AM_RANGE(0xf809, 0xf809) AM_READ(dswb_h_r)
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w)
AM_RANGE(0xf800, 0xf802) AM_WRITE(fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(bankswitch_w)
AM_RANGE(0xf809, 0xf809) AM_WRITENOP /* ? */
AM_RANGE(0xf80b, 0xf80b) AM_WRITENOP /* ? if mapped to watchdog like in the others, causes reset */
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(0x4000, 0x47ff) AM_RAM
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(0xd000, 0xd000) AM_WRITE(tecmo_adpcm_end_w)
AM_RANGE(0xe000, 0xe000) AM_WRITE(tecmo_adpcm_vol_w)
AM_RANGE(0xf000, 0xf000) AM_WRITE(tecmo_nmi_ack_w)
AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(adpcm_start_w)
AM_RANGE(0xd000, 0xd000) AM_WRITE(adpcm_end_w)
AM_RANGE(0xe000, 0xe000) AM_WRITE(adpcm_vol_w)
AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_ack_w)
ADDRESS_MAP_END
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(0x8000, 0x87ff) AM_RAM
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(0xc400, 0xc400) AM_WRITE(tecmo_adpcm_end_w)
AM_RANGE(0xc800, 0xc800) AM_WRITE(tecmo_adpcm_vol_w)
AM_RANGE(0xcc00, 0xcc00) AM_WRITE(tecmo_nmi_ack_w)
AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(adpcm_start_w)
AM_RANGE(0xc400, 0xc400) AM_WRITE(adpcm_end_w)
AM_RANGE(0xc800, 0xc800) AM_WRITE(adpcm_vol_w)
AM_RANGE(0xcc00, 0xcc00) AM_WRITE(nmi_ack_w)
ADDRESS_MAP_END
@ -600,7 +599,14 @@ static GFXDECODE_START( tecmo )
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_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_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_UPDATE_DRIVER(tecmo_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
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_VIDEO_START_OVERRIDE(tecmo_state,tecmo)
MCFG_MACHINE_RESET_OVERRIDE(tecmo_state, rygar )
/* sound hardware */
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_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_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
@ -671,47 +673,11 @@ static MACHINE_CONFIG_DERIVED( silkworm, gemini )
MCFG_CPU_PROGRAM_MAP(silkworm_map)
MACHINE_CONFIG_END
#ifdef UNUSED_CODE
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 */
static MACHINE_CONFIG_DERIVED( backfirt, gemini )
/* this pcb has no MSM5205 */
MCFG_DEVICE_REMOVE("msm")
MACHINE_CONFIG_END
#endif
/***************************************************************************
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( "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_REGION( 0x8000, "adpcm", ROMREGION_ERASE00 ) /* ADPCM samples */
// ROM_LOAD( "silkworm.1", 0x0000, 0x8000, CRC(5b553644) SHA1(5d39d2251094c17f7b732b4861401b3516fce9b1) )
ROM_END
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, rygar2, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 2)", 0 )
GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", 0 )
GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", 0 )
GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", 0 ) /* 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, silkwormj, silkworm, silkworm, silkworm, tecmo_state, silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", 0 ) /* Japan regional warning screen */
GAME( 1988, backfirt, 0, gemini, backfirt, tecmo_state, backfirt, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", 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)", GAME_SUPPORTS_SAVE )
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)", GAME_SUPPORTS_SAVE )
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)", 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)", GAME_SUPPORTS_SAVE ) /* Japan regional warning screen */
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)
{
@ -46,49 +46,49 @@ WRITE16_MEMBER(tecmo16_state::tecmo16_sound_command_w)
static ADDRESS_MAP_START( fstarfrc_map, AS_PROGRAM, 16, tecmo16_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM /* Main RAM */
AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(tecmo16_charram_w) AM_SHARE("charram")
AM_RANGE(0x120000, 0x1207ff) AM_RAM_WRITE(tecmo16_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x120800, 0x120fff) AM_RAM_WRITE(tecmo16_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x121000, 0x1217ff) AM_RAM_WRITE(tecmo16_videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0x121800, 0x121fff) AM_RAM_WRITE(tecmo16_colorram2_w) AM_SHARE("colorram2")
AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x120000, 0x1207ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x120800, 0x120fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x121000, 0x1217ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0x121800, 0x121fff) AM_RAM_WRITE(colorram2_w) AM_SHARE("colorram2")
AM_RANGE(0x122000, 0x127fff) AM_RAM /* work area */
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(0x150000, 0x150001) AM_WRITE(tecmo16_flipscreen_w)
AM_RANGE(0x150010, 0x150011) AM_WRITE(tecmo16_sound_command_w)
AM_RANGE(0x150000, 0x150001) AM_WRITE(flipscreen_w)
AM_RANGE(0x150010, 0x150011) AM_WRITE(sound_command_w)
AM_RANGE(0x150030, 0x150031) AM_READ_PORT("DSW2") AM_WRITENOP /* ??? */
AM_RANGE(0x150040, 0x150041) AM_READ_PORT("DSW1")
AM_RANGE(0x150050, 0x150051) AM_READ_PORT("P1_P2")
AM_RANGE(0x160000, 0x160001) AM_WRITE(tecmo16_scroll_char_x_w)
AM_RANGE(0x16000c, 0x16000d) AM_WRITE(tecmo16_scroll_x_w)
AM_RANGE(0x160012, 0x160013) AM_WRITE(tecmo16_scroll_y_w)
AM_RANGE(0x160018, 0x160019) AM_WRITE(tecmo16_scroll2_x_w)
AM_RANGE(0x16001e, 0x16001f) AM_WRITE(tecmo16_scroll2_y_w)
AM_RANGE(0x160000, 0x160001) AM_WRITE(scroll_char_x_w)
AM_RANGE(0x16000c, 0x16000d) AM_WRITE(scroll_x_w)
AM_RANGE(0x160012, 0x160013) AM_WRITE(scroll_y_w)
AM_RANGE(0x160018, 0x160019) AM_WRITE(scroll2_x_w)
AM_RANGE(0x16001e, 0x16001f) AM_WRITE(scroll2_y_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ginkun_map, AS_PROGRAM, 16, tecmo16_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM /* Main RAM */
AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(tecmo16_charram_w) AM_SHARE("charram")
AM_RANGE(0x120000, 0x120fff) AM_RAM_WRITE(tecmo16_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x121000, 0x121fff) AM_RAM_WRITE(tecmo16_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x122000, 0x122fff) AM_RAM_WRITE(tecmo16_videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0x123000, 0x123fff) AM_RAM_WRITE(tecmo16_colorram2_w) AM_SHARE("colorram2")
AM_RANGE(0x110000, 0x110fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x120000, 0x120fff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x121000, 0x121fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x122000, 0x122fff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0x123000, 0x123fff) AM_RAM_WRITE(colorram2_w) AM_SHARE("colorram2")
AM_RANGE(0x124000, 0x124fff) AM_RAM /* extra RAM for Riot */
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(0x150000, 0x150001) AM_WRITE(tecmo16_flipscreen_w)
AM_RANGE(0x150010, 0x150011) AM_WRITE(tecmo16_sound_command_w)
AM_RANGE(0x150000, 0x150001) AM_WRITE(flipscreen_w)
AM_RANGE(0x150010, 0x150011) AM_WRITE(sound_command_w)
AM_RANGE(0x150020, 0x150021) AM_READ_PORT("EXTRA") AM_WRITENOP /* ??? */
AM_RANGE(0x150030, 0x150031) AM_READ_PORT("DSW2") AM_WRITENOP /* ??? */
AM_RANGE(0x150040, 0x150041) AM_READ_PORT("DSW1")
AM_RANGE(0x150050, 0x150051) AM_READ_PORT("P1_P2")
AM_RANGE(0x160000, 0x160001) AM_WRITE(tecmo16_scroll_char_x_w)
AM_RANGE(0x160006, 0x160007) AM_WRITE(tecmo16_scroll_char_y_w)
AM_RANGE(0x16000c, 0x16000d) AM_WRITE(tecmo16_scroll_x_w)
AM_RANGE(0x160012, 0x160013) AM_WRITE(tecmo16_scroll_y_w)
AM_RANGE(0x160018, 0x160019) AM_WRITE(tecmo16_scroll2_x_w)
AM_RANGE(0x16001e, 0x16001f) AM_WRITE(tecmo16_scroll2_y_w)
AM_RANGE(0x160000, 0x160001) AM_WRITE(scroll_char_x_w)
AM_RANGE(0x160006, 0x160007) AM_WRITE(scroll_char_y_w)
AM_RANGE(0x16000c, 0x16000d) AM_WRITE(scroll_x_w)
AM_RANGE(0x160012, 0x160013) AM_WRITE(scroll_y_w)
AM_RANGE(0x160018, 0x160019) AM_WRITE(scroll2_x_w)
AM_RANGE(0x16001e, 0x16001f) AM_WRITE(scroll2_y_w)
ADDRESS_MAP_END
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_SIZE(32*8, 32*8)
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_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, fstarfrcj, fstarfrc, fstarfrc, fstarfrc, driver_device, 0, ROT90, "Tecmo", "Final Star Force (Japan)", 0 )
GAME( 1992, riot, 0, riot, riot, driver_device, 0, ROT0, "NMK", "Riot", 0 )
GAME( 1995, ginkun, 0, ginkun, ginkun, driver_device, 0, ROT0, "Tecmo", "Ganbare Ginkun", 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)", GAME_SUPPORTS_SAVE )
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", 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
-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),
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 */
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)
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 7 = ?
*/
WRITE8_MEMBER(vball_state::vb_bankswitch_w)
WRITE8_MEMBER(vball_state::bankswitch_w)
{
UINT8 *RAM = memregion("maincpu")->base();
membank("bank1")->set_base(&RAM[0x10000 + (0x4000 * (data & 1))]);
membank("mainbank")->set_entry(data & 1);
if (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 */
@ -184,19 +183,19 @@ WRITE8_MEMBER(vball_state::cpu_sound_command_w)
bit 6 = 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);
m_vb_scrollx_hi = (data & 0x02) << 7;
vb_bgprombank_w((data >> 2) & 0x07);
vb_spprombank_w((data >> 5) & 0x07);
//logerror("%04x: vb_scrollx_hi = %d\n", space.device().safe_pcbase(), m_vb_scrollx_hi);
m_scrollx_hi = (data & 0x02) << 7;
bgprombank_w((data >> 2) & 0x07);
spprombank_w((data >> 5) & 0x07);
//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;
//logerror("%04x: vb_scrollx_lo =%d\n", space.device().safe_pcbase(), m_vb_scrollx_lo);
m_scrollx_lo = data;
//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(0x1005, 0x1005) AM_READ_PORT("P3")
AM_RANGE(0x1006, 0x1006) AM_READ_PORT("P4")
AM_RANGE(0x1008, 0x1008) AM_WRITE(vb_scrollx_hi_w)
AM_RANGE(0x1009, 0x1009) AM_WRITE(vb_bankswitch_w)
AM_RANGE(0x100a, 0x100b) AM_WRITE(vball_irq_ack_w) /* is there a scanline counter here? */
AM_RANGE(0x100c, 0x100c) AM_WRITE(vb_scrollx_lo_w)
AM_RANGE(0x1008, 0x1008) AM_WRITE(scrollx_hi_w)
AM_RANGE(0x1009, 0x1009) AM_WRITE(bankswitch_w)
AM_RANGE(0x100a, 0x100b) AM_WRITE(irq_ack_w) /* is there a scanline counter here? */
AM_RANGE(0x100c, 0x100c) AM_WRITE(scrollx_lo_w)
AM_RANGE(0x100d, 0x100d) AM_WRITE(cpu_sound_command_w)
AM_RANGE(0x100e, 0x100e) AM_WRITEONLY AM_SHARE("vb_scrolly_lo")
AM_RANGE(0x2000, 0x2fff) AM_WRITE(vb_videoram_w) AM_SHARE("vb_videoram")
AM_RANGE(0x3000, 0x3fff) AM_WRITE(vb_attrib_w) AM_SHARE("vb_attribram")
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
AM_RANGE(0x100e, 0x100e) AM_WRITEONLY AM_SHARE("scrolly_lo")
AM_RANGE(0x2000, 0x2fff) AM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x3000, 0x3fff) AM_WRITE(attrib_w) AM_SHARE("attribram")
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank")
AM_RANGE(0x8000, 0xffff) AM_ROM
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 */
INPUT_PORTS_END
void vball_state::machine_start()
{
membank("mainbank")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
}
static const gfx_layout charlayout =
{
@ -407,7 +411,7 @@ static MACHINE_CONFIG_START( vball, vball_state )
MCFG_SCREEN_ADD("screen", RASTER)
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_UPDATE_DRIVER(vball_state, screen_update_vb)
MCFG_SCREEN_UPDATE_DRIVER(vball_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", vb)
@ -557,7 +561,7 @@ ROM_START( vball2pjb ) /* bootleg of the Japan set with unmoddified program rom
ROM_END
GAME( 1988, vball, 0, vball, vball, driver_device, 0, ROT0, "Technos Japan", "U.S. Championship V'ball (US)", 0 )
GAME( 1988, vball2pj, vball, vball, vball2pj, driver_device, 0, ROT0, "Technos Japan", "U.S. Championship V'ball (Japan)", 0 )
GAME( 1988, vballb, vball, vball, vball, driver_device, 0, ROT0, "bootleg", "U.S. Championship V'ball (bootleg of US set)", 0 )
GAME( 1988, vball2pjb,vball, vball, vball, driver_device, 0, ROT0, "bootleg", "U.S. Championship V'ball (bootleg of Japan set)", 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)", GAME_SUPPORTS_SAVE )
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)", GAME_SUPPORTS_SAVE )

View File

@ -6,65 +6,72 @@ class tecmo_state : public driver_device
public:
tecmo_state(const machine_config &mconfig, device_type type, const char *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_soundcpu(*this, "soundcpu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
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_fgvideoram;
required_shared_ptr<UINT8> m_bgvideoram;
required_shared_ptr<UINT8> m_spriteram;
tilemap_t *m_tx_tilemap;
tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap;
UINT8 m_fgscroll[3];
UINT8 m_bgscroll[3];
required_shared_ptr<UINT8> m_spriteram;
DECLARE_WRITE8_MEMBER(tecmo_bankswitch_w);
DECLARE_WRITE8_MEMBER(tecmo_sound_command_w);
DECLARE_WRITE8_MEMBER(tecmo_nmi_ack_w);
DECLARE_WRITE8_MEMBER(tecmo_adpcm_end_w);
DECLARE_READ8_MEMBER(tecmo_dswa_l_r);
DECLARE_READ8_MEMBER(tecmo_dswa_h_r);
DECLARE_READ8_MEMBER(tecmo_dswb_l_r);
DECLARE_READ8_MEMBER(tecmo_dswb_h_r);
DECLARE_WRITE8_MEMBER(tecmo_txvideoram_w);
DECLARE_WRITE8_MEMBER(tecmo_fgvideoram_w);
DECLARE_WRITE8_MEMBER(tecmo_bgvideoram_w);
DECLARE_WRITE8_MEMBER(tecmo_fgscroll_w);
DECLARE_WRITE8_MEMBER(tecmo_bgscroll_w);
DECLARE_WRITE8_MEMBER(tecmo_flipscreen_w);
DECLARE_WRITE8_MEMBER(tecmo_adpcm_start_w);
DECLARE_WRITE8_MEMBER(tecmo_adpcm_vol_w);
int m_adpcm_pos;
int m_adpcm_end;
int m_adpcm_data;
int m_video_type;
DECLARE_WRITE8_MEMBER(bankswitch_w);
DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_WRITE8_MEMBER(nmi_ack_w);
DECLARE_WRITE8_MEMBER(adpcm_end_w);
DECLARE_READ8_MEMBER(dswa_l_r);
DECLARE_READ8_MEMBER(dswa_h_r);
DECLARE_READ8_MEMBER(dswb_l_r);
DECLARE_READ8_MEMBER(dswb_h_r);
DECLARE_WRITE8_MEMBER(txvideoram_w);
DECLARE_WRITE8_MEMBER(fgvideoram_w);
DECLARE_WRITE8_MEMBER(bgvideoram_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(rygar);
DECLARE_DRIVER_INIT(backfirt);
DECLARE_DRIVER_INIT(gemini);
TILE_GET_INFO_MEMBER(get_bg_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_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
DECLARE_MACHINE_RESET(rygar);
DECLARE_VIDEO_START(tecmo);
UINT32 screen_update_tecmo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
virtual void machine_start();
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);
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:
tecmo16_state(const machine_config &mconfig, device_type type, const char *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_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
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_colorram;
required_shared_ptr<UINT16> m_videoram2;
required_shared_ptr<UINT16> m_colorram2;
required_shared_ptr<UINT16> m_charram;
required_shared_ptr<UINT16> m_spriteram;
tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap;
tilemap_t *m_tx_tilemap;
@ -40,33 +50,30 @@ public:
UINT16 m_scroll2_y_w;
UINT16 m_scroll_char_x_w;
UINT16 m_scroll_char_y_w;
required_shared_ptr<UINT16> m_spriteram;
DECLARE_WRITE16_MEMBER(tecmo16_sound_command_w);
DECLARE_WRITE16_MEMBER(tecmo16_videoram_w);
DECLARE_WRITE16_MEMBER(tecmo16_colorram_w);
DECLARE_WRITE16_MEMBER(tecmo16_videoram2_w);
DECLARE_WRITE16_MEMBER(tecmo16_colorram2_w);
DECLARE_WRITE16_MEMBER(tecmo16_charram_w);
DECLARE_WRITE16_MEMBER(tecmo16_flipscreen_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_x_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_y_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll2_x_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll2_y_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_char_x_w);
DECLARE_WRITE16_MEMBER(tecmo16_scroll_char_y_w);
DECLARE_WRITE16_MEMBER(sound_command_w);
DECLARE_WRITE16_MEMBER(videoram_w);
DECLARE_WRITE16_MEMBER(colorram_w);
DECLARE_WRITE16_MEMBER(videoram2_w);
DECLARE_WRITE16_MEMBER(colorram2_w);
DECLARE_WRITE16_MEMBER(charram_w);
DECLARE_WRITE16_MEMBER(flipscreen_w);
DECLARE_WRITE16_MEMBER(scroll_x_w);
DECLARE_WRITE16_MEMBER(scroll_y_w);
DECLARE_WRITE16_MEMBER(scroll2_x_w);
DECLARE_WRITE16_MEMBER(scroll2_y_w);
DECLARE_WRITE16_MEMBER(scroll_char_x_w);
DECLARE_WRITE16_MEMBER(scroll_char_y_w);
TILE_GET_INFO_MEMBER(fg_get_tile_info);
TILE_GET_INFO_MEMBER(bg_get_tile_info);
TILE_GET_INFO_MEMBER(tx_get_tile_info);
virtual void video_start();
DECLARE_VIDEO_START(ginkun);
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:
vball_state(const machine_config &mconfig, device_type type, const char *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_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
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_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
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 */
{
@ -94,6 +94,9 @@ VIDEO_START_MEMBER(tecmo_state,tecmo)
m_bg_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_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_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_bg_tilemap->mark_tile_dirty(offset & 0x1ff);
}
WRITE8_MEMBER(tecmo_state::tecmo_fgscroll_w)
WRITE8_MEMBER(tecmo_state::fgscroll_w)
{
m_fgscroll[offset] = data;
@ -130,7 +133,7 @@ WRITE8_MEMBER(tecmo_state::tecmo_fgscroll_w)
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;
@ -138,7 +141,7 @@ WRITE8_MEMBER(tecmo_state::tecmo_bgscroll_w)
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);
}
@ -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);
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)
{
int tile = m_videoram[tile_index] & 0x1fff;
@ -70,6 +82,8 @@ void tecmo16_state::video_start()
m_tx_tilemap->set_scrolly(0,-16);
m_flipscreen = 0;
m_game_is_riot = 0;
save_state();
}
VIDEO_START_MEMBER(tecmo16_state,ginkun)
@ -90,6 +104,8 @@ VIDEO_START_MEMBER(tecmo16_state,ginkun)
m_tx_tilemap->set_transparent_pen(0);
m_flipscreen = 0;
m_game_is_riot = 0;
save_state();
}
VIDEO_START_MEMBER(tecmo16_state,riot)
@ -111,42 +127,44 @@ VIDEO_START_MEMBER(tecmo16_state,riot)
m_tx_tilemap->set_scrolldy(-16,-16);
m_flipscreen = 0;
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]);
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]);
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]);
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]);
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]);
m_tx_tilemap->mark_tile_dirty(offset);
}
WRITE16_MEMBER(tecmo16_state::tecmo16_flipscreen_w)
WRITE16_MEMBER(tecmo16_state::flipscreen_w)
{
m_flipscreen = data & 0x01;
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);
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);
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);
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);
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);
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);
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_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)
{
UINT8 code = m_vb_videoram[tile_index];
UINT8 attr = m_vb_attribram[tile_index];
UINT8 code = m_videoram[tile_index];
UINT8 attr = m_attribram[tile_index];
SET_TILE_INFO_MEMBER(0,
code + ((attr & 0x1f) << 8) + (m_gfxset<<8),
(attr >> 5) & 0x7,
@ -42,63 +42,60 @@ void vball_state::video_start()
m_bg_tilemap->set_scroll_rows(32);
m_gfxset=0;
m_vb_bgprombank=0xff;
m_vb_spprombank=0xff;
m_bgprombank=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);
}
#ifdef UNUSED_FUNCTION
READ8_MEMBER(vball_state::vb_attrib_r)
WRITE8_MEMBER(vball_state::attrib_w)
{
return m_vb_attribram[offset];
}
#endif
WRITE8_MEMBER(vball_state::vb_attrib_w)
{
m_vb_attribram[offset] = data;
m_attribram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void vball_state::vb_bgprombank_w( int bank )
void vball_state::bgprombank_w( int bank )
{
int i;
UINT8* color_prom;
if (bank==m_vb_bgprombank) return;
if (bank==m_bgprombank) return;
color_prom = memregion("proms")->base() + bank*0x80;
for (i=0;i<128;i++, color_prom++) {
m_palette->set_pen_color(i,pal4bit(color_prom[0] >> 0),pal4bit(color_prom[0] >> 4),
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;
UINT8* color_prom;
if (bank==m_vb_spprombank) return;
if (bank==m_spprombank) return;
color_prom = memregion("proms")->base()+0x400 + bank*0x80;
for (i=128;i<256;i++,color_prom++) {
m_palette->set_pen_color(i,pal4bit(color_prom[0] >> 0),pal4bit(color_prom[0] >> 4),
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,\
cliprect, \
@ -150,16 +147,16 @@ void vball_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
#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;
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 */
for (i = 2; i < 256; i++) {
m_bg_tilemap->set_scrollx(i,m_vb_scrollx[i-2]);
//logerror("scrollx[%d] = %d\n",i,m_vb_scrollx[i]);
m_bg_tilemap->set_scrollx(i,m_scrollx[i-2]);
//logerror("scrollx[%d] = %d\n",i,m_scrollx[i]);
}
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap,cliprect);