wc90.c: added save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-02-16 18:07:02 +01:00
parent b31244ebf6
commit 622ee31126
3 changed files with 45 additions and 41 deletions

View File

@ -55,7 +55,7 @@ Press one of the start buttons to exit.
* *
*****************************
There is known to be a Pacman hack running on this hardware. It was done by Mike C. and isn't ment
There is known to be a Pacman hack running on this hardware. It was done by Mike C. and isn't meant
for inclusion in MAME. However the roms with checksums are listed below to prevent it being added
as a newly "found" game:
@ -79,7 +79,7 @@ voice.ic82 CRC32 abc61f3d SHA1 c6f123d16a26c4d77c635617dd97bb4b906c463a
#include "includes/wc90.h"
WRITE8_MEMBER(wc90_state::wc90_bankswitch_w)
WRITE8_MEMBER(wc90_state::bankswitch_w)
{
int bankaddress;
UINT8 *RAM = memregion("maincpu")->base();
@ -89,7 +89,7 @@ WRITE8_MEMBER(wc90_state::wc90_bankswitch_w)
membank("bank1")->set_base(&RAM[bankaddress] );
}
WRITE8_MEMBER(wc90_state::wc90_bankswitch1_w)
WRITE8_MEMBER(wc90_state::bankswitch1_w)
{
int bankaddress;
UINT8 *RAM = memregion("sub")->base();
@ -99,7 +99,7 @@ WRITE8_MEMBER(wc90_state::wc90_bankswitch1_w)
membank("bank2")->set_base(&RAM[bankaddress] );
}
WRITE8_MEMBER(wc90_state::wc90_sound_command_w)
WRITE8_MEMBER(wc90_state::sound_command_w)
{
soundlatch_byte_w(space, offset, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
@ -110,11 +110,11 @@ WRITE8_MEMBER(wc90_state::wc90_sound_command_w)
static ADDRESS_MAP_START( wc90_map_1, AS_PROGRAM, 8, wc90_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_RAM /* Main RAM */
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(wc90_fgvideoram_w) AM_SHARE("fgvideoram") /* fg video ram */
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram") /* fg video ram */
AM_RANGE(0xb000, 0xbfff) AM_RAM
AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(wc90_bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
AM_RANGE(0xd000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(wc90_txvideoram_w) AM_SHARE("txvideoram") /* tx video ram */
AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") /* tx video ram */
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1")
AM_RANGE(0xf800, 0xfbff) AM_RAM AM_SHARE("share1")
AM_RANGE(0xfc00, 0xfc00) AM_READ_PORT("P1")
@ -134,9 +134,9 @@ static ADDRESS_MAP_START( wc90_map_1, AS_PROGRAM, 8, wc90_state )
AM_RANGE(0xfc43, 0xfc43) AM_WRITEONLY AM_SHARE("scroll2yhi")
AM_RANGE(0xfc46, 0xfc46) AM_WRITEONLY AM_SHARE("scroll2xlo")
AM_RANGE(0xfc47, 0xfc47) AM_WRITEONLY AM_SHARE("scroll2xhi")
AM_RANGE(0xfcc0, 0xfcc0) AM_WRITE(wc90_sound_command_w)
AM_RANGE(0xfcc0, 0xfcc0) AM_WRITE(sound_command_w)
AM_RANGE(0xfcd0, 0xfcd0) AM_WRITE(watchdog_reset_w)
AM_RANGE(0xfce0, 0xfce0) AM_WRITE(wc90_bankswitch_w)
AM_RANGE(0xfce0, 0xfce0) AM_WRITE(bankswitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( wc90_map_2, AS_PROGRAM, 8, wc90_state )
@ -147,7 +147,7 @@ static ADDRESS_MAP_START( wc90_map_2, AS_PROGRAM, 8, wc90_state )
AM_RANGE(0xe000, 0xe7ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank2")
AM_RANGE(0xf800, 0xfbff) AM_RAM AM_SHARE("share1")
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(wc90_bankswitch1_w)
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(bankswitch1_w)
AM_RANGE(0xfc01, 0xfc01) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END
@ -316,7 +316,7 @@ static MACHINE_CONFIG_START( wc90, wc90_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(wc90_state, screen_update_wc90)
MCFG_SCREEN_UPDATE_DRIVER(wc90_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", wc90)
@ -472,7 +472,7 @@ ROM_START( wc90t )
ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) )
ROM_END
GAME( 1989, wc90, 0, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (World)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL )
GAME( 1989, wc90a, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 1)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL )
GAME( 1989, wc90b, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 2)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL )
GAME( 1989, wc90t, wc90, wc90t,wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (trackball set 1)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL )
GAME( 1989, wc90, 0, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (World)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1989, wc90a, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 1)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1989, wc90b, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 2)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1989, wc90t, wc90, wc90t,wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (trackball set 1)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )

View File

@ -5,6 +5,11 @@ class wc90_state : public driver_device
public:
wc90_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_sprgen(*this, "spritegen"),
m_fgvideoram(*this, "fgvideoram"),
m_bgvideoram(*this, "bgvideoram"),
m_txvideoram(*this, "txvideoram"),
@ -20,15 +25,15 @@ public:
m_scroll1yhi(*this, "scroll1yhi"),
m_scroll2ylo(*this, "scroll2ylo"),
m_scroll2yhi(*this, "scroll2yhi"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_sprgen(*this, "spritegen")
m_spriteram(*this, "spriteram")
{ }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<tecmo_spr_device> m_sprgen;
required_shared_ptr<UINT8> m_fgvideoram;
required_shared_ptr<UINT8> m_bgvideoram;
@ -45,29 +50,28 @@ public:
required_shared_ptr<UINT8> m_scroll1yhi;
required_shared_ptr<UINT8> m_scroll2ylo;
required_shared_ptr<UINT8> m_scroll2yhi;
required_shared_ptr<UINT8> m_spriteram;
tilemap_t *m_tx_tilemap;
tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap;
required_shared_ptr<UINT8> m_spriteram;
DECLARE_WRITE8_MEMBER(wc90_bankswitch_w);
DECLARE_WRITE8_MEMBER(wc90_bankswitch1_w);
DECLARE_WRITE8_MEMBER(wc90_sound_command_w);
DECLARE_WRITE8_MEMBER(wc90_bgvideoram_w);
DECLARE_WRITE8_MEMBER(wc90_fgvideoram_w);
DECLARE_WRITE8_MEMBER(wc90_txvideoram_w);
DECLARE_WRITE8_MEMBER(bankswitch_w);
DECLARE_WRITE8_MEMBER(bankswitch1_w);
DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_WRITE8_MEMBER(bgvideoram_w);
DECLARE_WRITE8_MEMBER(fgvideoram_w);
DECLARE_WRITE8_MEMBER(txvideoram_w);
DECLARE_WRITE_LINE_MEMBER(irqhandler);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
TILE_GET_INFO_MEMBER(track_get_bg_tile_info);
TILE_GET_INFO_MEMBER(track_get_fg_tile_info);
virtual void video_start();
DECLARE_VIDEO_START(wc90t);
UINT32 screen_update_wc90(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(irqhandler);
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<tecmo_spr_device> m_sprgen;
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
};

View File

@ -94,19 +94,19 @@ VIDEO_START_MEMBER(wc90_state,wc90t)
***************************************************************************/
WRITE8_MEMBER(wc90_state::wc90_bgvideoram_w)
WRITE8_MEMBER(wc90_state::bgvideoram_w)
{
m_bgvideoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset & 0x7ff);
}
WRITE8_MEMBER(wc90_state::wc90_fgvideoram_w)
WRITE8_MEMBER(wc90_state::fgvideoram_w)
{
m_fgvideoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset & 0x7ff);
}
WRITE8_MEMBER(wc90_state::wc90_txvideoram_w)
WRITE8_MEMBER(wc90_state::txvideoram_w)
{
m_txvideoram[offset] = data;
m_tx_tilemap->mark_tile_dirty(offset & 0x7ff);
@ -121,7 +121,7 @@ WRITE8_MEMBER(wc90_state::wc90_txvideoram_w)
***************************************************************************/
UINT32 wc90_state::screen_update_wc90(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
UINT32 wc90_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->set_scrollx(0,m_scroll2xlo[0] + 256 * m_scroll2xhi[0]);
m_bg_tilemap->set_scrolly(0,m_scroll2ylo[0] + 256 * m_scroll2yhi[0]);