From 1cdee288e55516e8d4d815862a3a2d61aabafa64 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 20 Feb 2015 19:14:28 +0100 Subject: tecmo.c, tecmo16.c, vball.c: added save state support (nw) --- src/mame/drivers/tecmo.c | 189 ++++++++++++++++++-------------------------- src/mame/drivers/tecmo16.c | 62 +++++++-------- src/mame/drivers/vball.c | 62 ++++++++------- src/mame/includes/tecmo.h | 81 ++++++++++--------- src/mame/includes/tecmo16.h | 65 ++++++++------- src/mame/includes/vball.h | 67 ++++++++-------- src/mame/video/tecmo.c | 19 +++-- src/mame/video/tecmo16.c | 44 ++++++++--- src/mame/video/vball.c | 55 ++++++------- 9 files changed, 324 insertions(+), 320 deletions(-) diff --git a/src/mame/drivers/tecmo.c b/src/mame/drivers/tecmo.c index 84d8afe05c8..1d74f1919f0 100644 --- a/src/mame/drivers/tecmo.c +++ b/src/mame/drivers/tecmo.c @@ -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 ) diff --git a/src/mame/drivers/tecmo16.c b/src/mame/drivers/tecmo16.c index 68ec03c0b9e..cba50c5fd27 100644 --- a/src/mame/drivers/tecmo16.c +++ b/src/mame/drivers/tecmo16.c @@ -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 ) diff --git a/src/mame/drivers/vball.c b/src/mame/drivers/vball.c index f70bf9902b8..c426adda602 100644 --- a/src/mame/drivers/vball.c +++ b/src/mame/drivers/vball.c @@ -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 ) diff --git a/src/mame/includes/tecmo.h b/src/mame/includes/tecmo.h index 4508b200f2b..c216e00ca54 100644 --- a/src/mame/includes/tecmo.h +++ b/src/mame/includes/tecmo.h @@ -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 m_maincpu; + required_device m_soundcpu; + optional_device m_msm; + required_device m_gfxdecode; + required_device m_palette; + required_device m_sprgen; - int m_adpcm_pos; - int m_adpcm_end; - int m_adpcm_data; - int m_video_type; required_shared_ptr m_txvideoram; required_shared_ptr m_fgvideoram; required_shared_ptr m_bgvideoram; + required_shared_ptr 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 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 m_maincpu; - required_device m_soundcpu; - required_device m_msm; - required_device m_gfxdecode; - required_device m_palette; - required_device m_sprgen; }; diff --git a/src/mame/includes/tecmo16.h b/src/mame/includes/tecmo16.h index dcae6d6b9dd..9aa9c30c168 100644 --- a/src/mame/includes/tecmo16.h +++ b/src/mame/includes/tecmo16.h @@ -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 m_maincpu; + required_device m_audiocpu; + required_device m_gfxdecode; + required_device m_screen; + required_device m_palette; + required_device m_sprgen; + required_device m_mixer; + required_shared_ptr m_videoram; required_shared_ptr m_colorram; required_shared_ptr m_videoram2; required_shared_ptr m_colorram2; required_shared_ptr m_charram; + required_shared_ptr 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 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 m_maincpu; - required_device m_audiocpu; - required_device m_gfxdecode; - required_device m_screen; - required_device m_palette; - required_device m_sprgen; - required_device m_mixer; + UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void save_state(); }; diff --git a/src/mame/includes/vball.h b/src/mame/includes/vball.h index 96866719728..ba2e340f600 100644 --- a/src/mame/includes/vball.h +++ b/src/mame/includes/vball.h @@ -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 m_vb_attribram; - required_shared_ptr m_vb_videoram; - required_shared_ptr m_vb_scrolly_lo; - int m_vb_scrollx_hi; - int m_vb_scrolly_hi; - int m_vb_scrollx_lo; + required_device m_maincpu; + required_device m_audiocpu; + required_device m_gfxdecode; + required_device m_screen; + required_device m_palette; + + required_shared_ptr m_attribram; + required_shared_ptr m_videoram; + required_shared_ptr m_scrolly_lo; + required_shared_ptr m_spriteram; + + int m_scrollx_hi; + int m_scrolly_hi; + int m_scrollx_lo; int m_gfxset; - int m_vb_scrollx[256]; - int m_vb_bgprombank; - int m_vb_spprombank; + int m_scrollx[256]; + int m_bgprombank; + int m_spprombank; tilemap_t *m_bg_tilemap; - required_shared_ptr m_spriteram; - DECLARE_WRITE8_MEMBER(vball_irq_ack_w); - DECLARE_WRITE8_MEMBER(vb_bankswitch_w); + + DECLARE_WRITE8_MEMBER(irq_ack_w); + DECLARE_WRITE8_MEMBER(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); + 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_vb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + UINT32 screen_update(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 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); - required_device m_maincpu; - required_device m_audiocpu; - required_device m_gfxdecode; - required_device m_screen; - required_device m_palette; }; diff --git a/src/mame/video/tecmo.c b/src/mame/video/tecmo.c index c5370ec31a6..eb3567294fa 100644 --- a/src/mame/video/tecmo.c +++ b/src/mame/video/tecmo.c @@ -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); diff --git a/src/mame/video/tecmo16.c b/src/mame/video/tecmo16.c index 1c2285a3671..c75422e0951 100644 --- a/src/mame/video/tecmo16.c +++ b/src/mame/video/tecmo16.c @@ -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); diff --git a/src/mame/video/vball.c b/src/mame/video/vball.c index 33a2cfc1c87..0334da1b23a 100644 --- a/src/mame/video/vball.c +++ b/src/mame/video/vball.c @@ -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); -- cgit v1.2.3