From: Atari Ace [mailto:atari_ace@verizon.net]

Sent: Saturday, November 01, 2008 11:29 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] State save support for toaplan2

Hi mamedev,

Attached is a small patch to add a toaplan2.h include file and save
state support for the driver.  A number of variables changed from int
to specific sizes to support this, and I also fixed a harmless typo in
the mem_mask size.

~aa
This commit is contained in:
Aaron Giles 2008-11-02 02:44:33 +00:00
parent 9e9ebc19a6
commit ae0c3e8811
3 changed files with 143 additions and 135 deletions

View File

@ -1,5 +1,6 @@
#include "driver.h"
#include "sound/okim6295.h"
#include "includes/toaplan2.h"
/****************************************************************************
The Toaplan 2 hardware with V25+ secondary CPU controls the sound through

View File

@ -252,6 +252,7 @@ To Do / Unknowns:
#include "sound/3812intf.h"
#include "sound/okim6295.h"
#include "sound/ymz280b.h"
#include "includes/toaplan2.h"
/**************** Machine stuff ******************/
@ -270,84 +271,17 @@ static UINT16 *toaplan2_shared_ram16; /* Really 8bit RAM connected to Z180 */
static UINT16 *V25_shared_ram; /* Really 8bit RAM connected to Z180 */
static UINT16 *fixeight_sec_cpu_mem;
/************ Video RAM related values ************/
extern UINT16 *toaplan2_txvideoram16;
extern UINT16 *toaplan2_txvideoram16_offs;
extern UINT16 *toaplan2_txscrollram16;
extern UINT16 *toaplan2_tx_gfxram16;
size_t toaplan2_tx_vram_size;
size_t toaplan2_tx_offs_vram_size;
size_t toaplan2_tx_scroll_vram_size;
size_t batrider_paletteram16_size;
/********** Status related values **********/
int toaplan2_sub_cpu = 0;
static int mcu_data = 0;
static int video_status;
static UINT16 mcu_data = 0;
static UINT16 video_status;
static INT8 old_p1_paddle_h; /* For Ghox */
static INT8 old_p2_paddle_h;
static int current_bank; /* Z80 bank used in Battle Garegga and Batrider */
static INT8 current_bank; /* Z80 bank used in Battle Garegga and Batrider */
static int raizing_sndirq_line; /* IRQ4 for batrider, IRQ2 for bbakraid */
static int raizing_Z80_busreq;
static UINT16 raizing_Z80_busreq;
static int bbakraid_unlimited_ver;
/**************** Video stuff ******************/
WRITE16_HANDLER( toaplan2_0_voffs_w );
WRITE16_HANDLER( toaplan2_1_voffs_w );
READ16_HANDLER ( toaplan2_0_videoram16_r );
READ16_HANDLER ( toaplan2_1_videoram16_r );
WRITE16_HANDLER( toaplan2_0_videoram16_w );
WRITE16_HANDLER( toaplan2_1_videoram16_w );
READ16_HANDLER ( toaplan2_txvideoram16_r );
WRITE16_HANDLER( toaplan2_txvideoram16_w );
READ16_HANDLER ( toaplan2_txvideoram16_offs_r );
WRITE16_HANDLER( toaplan2_txvideoram16_offs_w );
READ16_HANDLER ( toaplan2_txscrollram16_r );
WRITE16_HANDLER( toaplan2_txscrollram16_w );
READ16_HANDLER ( toaplan2_tx_gfxram16_r );
WRITE16_HANDLER( toaplan2_tx_gfxram16_w );
READ16_HANDLER ( raizing_tx_gfxram16_r );
WRITE16_HANDLER( raizing_tx_gfxram16_w );
WRITE16_HANDLER( toaplan2_0_scroll_reg_select_w );
WRITE16_HANDLER( toaplan2_1_scroll_reg_select_w );
WRITE16_HANDLER( toaplan2_0_scroll_reg_data_w );
WRITE16_HANDLER( toaplan2_1_scroll_reg_data_w );
WRITE16_HANDLER( batrider_objectbank_w );
WRITE16_HANDLER( batrider_textdata_decode );
VIDEO_EOF( toaplan2_0 );
VIDEO_EOF( toaplan2_1 );
VIDEO_START( toaplan2_0 );
VIDEO_START( toaplan2_1 );
VIDEO_START( truxton2_0 );
VIDEO_START( bgaregga_0 );
VIDEO_START( batrider_0 );
VIDEO_UPDATE( toaplan2_0 );
VIDEO_UPDATE( truxton2_0 );
VIDEO_UPDATE( dogyuun_1 );
VIDEO_UPDATE( batsugun_1 );
VIDEO_UPDATE( batrider_0 );
VIDEO_UPDATE( mahoudai_0 );
/********* Video wrappers for PIPIBIBI *********/
READ16_HANDLER ( pipibibi_videoram16_r );
WRITE16_HANDLER( pipibibi_videoram16_w );
READ16_HANDLER ( pipibibi_spriteram16_r );
WRITE16_HANDLER( pipibibi_spriteram16_w );
WRITE16_HANDLER( pipibibi_scroll_w );
/***************** Sound stuff *****************/
void dogyuun_okisnd_w(running_machine *machine, int data);
void kbash_okisnd_w(running_machine *machine, int data);
void fixeight_okisnd_w(running_machine *machine, int data);
void batsugun_okisnd_w(running_machine *machine, int data);
static MACHINE_RESET(batsugun);
#if USE_V25
static READ16_HANDLER( batsugun_share_r );
@ -412,24 +346,38 @@ static MACHINE_RESET( bgaregga )
MACHINE_RESET_CALL(toaplan2);
}
static void register_state_save(void)
{
state_save_register_global(mcu_data);
state_save_register_global(video_status);
state_save_register_global(old_p1_paddle_h);
state_save_register_global(old_p2_paddle_h);
state_save_register_global(current_bank);
state_save_register_global(raizing_Z80_busreq);
}
static DRIVER_INIT( T2_Z80 ) /* init_t2_Z80(); */
{
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( T2_Z180 )
{
toaplan2_sub_cpu = CPU_2_HD647180;
register_state_save();
}
static DRIVER_INIT( T2_V25 )
{
toaplan2_sub_cpu = CPU_2_V25;
register_state_save();
}
static DRIVER_INIT( T2_noZ80 )
{
toaplan2_sub_cpu = CPU_2_NONE;
register_state_save();
}
static DRIVER_INIT( fixeight )
@ -442,6 +390,7 @@ static DRIVER_INIT( fixeight )
#endif
toaplan2_sub_cpu = CPU_2_V25;
register_state_save();
}
static DRIVER_INIT( fixeighb )
@ -450,6 +399,7 @@ static DRIVER_INIT( fixeighb )
memory_set_bankptr(1, &bgdata[0x40000]); /* $80000 - $fffff */
toaplan2_sub_cpu = CPU_2_NONE;
register_state_save();
}
static DRIVER_INIT( pipibibi )
@ -531,12 +481,14 @@ static DRIVER_INIT( pipibibi )
}
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( batrider )
{
raizing_sndirq_line = 4;
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( bbakraid )
@ -544,6 +496,7 @@ static DRIVER_INIT( bbakraid )
bbakraid_unlimited_ver = 0;
raizing_sndirq_line = 2;
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( bbakradu )
@ -551,6 +504,7 @@ static DRIVER_INIT( bbakradu )
bbakraid_unlimited_ver = 1;
raizing_sndirq_line = 2;
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
@ -5049,37 +5003,37 @@ ROM_END
/* Whoopee init to be changed to T2_Z180 when (if) HD647180 is dumped */
/* ( YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS ) */
GAME( 1991, tekipaki, 0, tekipaki, tekipaki, T2_Z180, ROT0, "Toaplan", "Teki Paki", GAME_NO_SOUND )
GAME( 1991, ghox, 0, ghox, ghox, T2_Z180, ROT270, "Toaplan", "Ghox (Spinner with Up/Down Axis)", GAME_NO_SOUND )
GAME( 1991, ghoxj, ghox, ghox, ghox, T2_Z180, ROT270, "Toaplan", "Ghox (8-Way Joystick)", GAME_NO_SOUND )
GAME( 1992, dogyuun, 0, dogyuun, dogyuun, T2_V25, ROT270, "Toaplan", "Dogyuun", GAME_NO_SOUND )
GAME( 1993, kbash, 0, kbash, kbash, T2_V25, ROT0, "Toaplan", "Knuckle Bash", GAME_IMPERFECT_SOUND )
GAME( 1999, kbash2, 0, kbash2, kbash2, T2_noZ80, ROT0, "bootleg", "Knuckle Bash 2 (bootleg)", 0 )
GAME( 1992, truxton2, 0, truxton2, truxton2, T2_noZ80, ROT270, "Toaplan", "Truxton II / Tatsujin Oh", 0 )
GAME( 1991, pipibibs, 0, pipibibs, pipibibs, T2_Z80, ROT0, "Toaplan", "Pipi & Bibis / Whoopee!! (Z80 sound cpu)", 0 )
GAME( 1991, whoopee, pipibibs, whoopee, whoopee, T2_Z80, ROT0, "Toaplan", "Whoopee!! / Pipi & Bibis", 0 )
GAME( 1991, pipibibi, pipibibs, pipibibi, pipibibi, pipibibi, ROT0, "[Toaplan] Ryouta Kikaku", "Pipi & Bibis / Whoopee!! (bootleg ?)", 0 )
GAME( 1992, fixeight, 0, fixeight, fixeight, fixeight, ROT270, "Toaplan", "FixEight", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
GAME( 1992, fixeighb, fixeight, fixeighb, fixeighb, fixeighb, ROT270, "bootleg", "FixEight (bootleg)", 0 )
GAME( 1992, grindstm, vfive, vfive, grindstm, T2_V25, ROT270, "Toaplan", "Grind Stormer", GAME_NO_SOUND )
GAME( 1992, grindsta, vfive, vfive, grindstm, T2_V25, ROT270, "Toaplan", "Grind Stormer (older set)", GAME_NO_SOUND )
GAME( 1993, vfive, 0, vfive, vfive, T2_V25, ROT270, "Toaplan", "V-Five (Japan)", GAME_NO_SOUND )
GAME( 1993, batsugun, 0, batsugun, batsugun, T2_V25, ROT270, "Toaplan", "Batsugun (set 1)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1993, batsugna, batsugun, batsugun, batsugun, T2_V25, ROT270, "Toaplan", "Batsugun (set 2)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1993, batugnsp, batsugun, batsugun, batsugun, T2_V25, ROT270, "Toaplan", "Batsugun (Special Ver.)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1994, snowbro2, 0, snowbro2, snowbro2, T2_noZ80, ROT0, "[Toaplan] Hanafram", "Snow Bros. 2 - With New Elves / Otenki Paradise", 0 )
GAME( 1993, mahoudai, 0, mahoudai, mahoudai, T2_Z80, ROT270, "Raizing (Able license)", "Mahou Daisakusen (Japan)", 0 )
GAME( 1993, sstriker, mahoudai, mahoudai, sstriker, T2_Z80, ROT270, "Raizing", "Sorcer Striker (World)" , 0) // from korean board
GAME( 1993, sstrikra, mahoudai, mahoudai, sstriker, T2_Z80, ROT270, "Raizing", "Sorcer Striker (World, alt)" , 0) // verified on two different PCBs
GAME( 1994, shippumd, 0, shippumd, shippumd, T2_Z80, ROT270, "Raizing / Eighting", "Shippu Mahou Daisakusen (Japan)", 0 )
GAME( 1994, kingdmgp, shippumd, shippumd, kingdmgp, T2_Z80, ROT270, "Raizing / Eighting", "Kingdom Grandprix (World)" , 0) // from korean board, missing letters on credits screen but this is correct
GAME( 1996, bgaregga, 0, bgaregga, bgaregga, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga (Europe / USA / Japan / Asia) (Sat Feb 3 1996)", 0 )
GAME( 1996, bgareghk, bgaregga, bgaregga, bgareghk, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996)", 0 )
GAME( 1996, bgaregnv, bgaregga, bgaregga, bgareghk, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996)" , 0) // displays New Version only when set to HK
GAME( 1996, bgaregt2, bgaregga, bgaregga, bgaregga, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996)" , 0) // displays Type 2 only when set to Europe
GAME( 1996, bgaregcn, bgaregga, bgaregga, bgaregcn, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996)", 0 ) // displays Type 2 only when set to Denmark
GAME( 1998, batrider, 0, batrider, batrider, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider - B Version (Japan) (Fri Feb 13 1998)", 0 )
GAME( 1998, batridra, batrider, batrider, batrider, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Japan) (Mon Dec 22 1997)", 0 )
GAME( 1998, batridrk, batrider, batrider, batrider, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Korea) (Fri Feb 13 1998)", 0 )
GAME( 1999, bbakraid, 0, bbakraid, bbakraid, bbakraid, ROT270, "Eighting", "Battle Bakraid (Japan) (Wed Apr 7 1999)", 0)
GAME( 1999, bbakradu, bbakraid, bbakraid, bbakraid, bbakradu, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999)", 0)
GAME( 1991, tekipaki, 0, tekipaki, tekipaki, T2_Z180, ROT0, "Toaplan", "Teki Paki", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1991, ghox, 0, ghox, ghox, T2_Z180, ROT270, "Toaplan", "Ghox (Spinner with Up/Down Axis)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1991, ghoxj, ghox, ghox, ghox, T2_Z180, ROT270, "Toaplan", "Ghox (8-Way Joystick)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1992, dogyuun, 0, dogyuun, dogyuun, T2_V25, ROT270, "Toaplan", "Dogyuun", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1993, kbash, 0, kbash, kbash, T2_V25, ROT0, "Toaplan", "Knuckle Bash", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1999, kbash2, 0, kbash2, kbash2, T2_noZ80, ROT0, "bootleg", "Knuckle Bash 2 (bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1992, truxton2, 0, truxton2, truxton2, T2_noZ80, ROT270, "Toaplan", "Truxton II / Tatsujin Oh", GAME_SUPPORTS_SAVE )
GAME( 1991, pipibibs, 0, pipibibs, pipibibs, T2_Z80, ROT0, "Toaplan", "Pipi & Bibis / Whoopee!! (Z80 sound cpu)", GAME_SUPPORTS_SAVE )
GAME( 1991, whoopee, pipibibs, whoopee, whoopee, T2_Z80, ROT0, "Toaplan", "Whoopee!! / Pipi & Bibis", GAME_SUPPORTS_SAVE )
GAME( 1991, pipibibi, pipibibs, pipibibi, pipibibi, pipibibi, ROT0, "[Toaplan] Ryouta Kikaku", "Pipi & Bibis / Whoopee!! (bootleg ?)", GAME_SUPPORTS_SAVE )
GAME( 1992, fixeight, 0, fixeight, fixeight, fixeight, ROT270, "Toaplan", "FixEight", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1992, fixeighb, fixeight, fixeighb, fixeighb, fixeighb, ROT270, "bootleg", "FixEight (bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1992, grindstm, vfive, vfive, grindstm, T2_V25, ROT270, "Toaplan", "Grind Stormer", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1992, grindsta, vfive, vfive, grindstm, T2_V25, ROT270, "Toaplan", "Grind Stormer (older set)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1993, vfive, 0, vfive, vfive, T2_V25, ROT270, "Toaplan", "V-Five (Japan)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1993, batsugun, 0, batsugun, batsugun, T2_V25, ROT270, "Toaplan", "Batsugun (set 1)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAME( 1993, batsugna, batsugun, batsugun, batsugun, T2_V25, ROT270, "Toaplan", "Batsugun (set 2)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAME( 1993, batugnsp, batsugun, batsugun, batsugun, T2_V25, ROT270, "Toaplan", "Batsugun (Special Ver.)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAME( 1994, snowbro2, 0, snowbro2, snowbro2, T2_noZ80, ROT0, "[Toaplan] Hanafram", "Snow Bros. 2 - With New Elves / Otenki Paradise", GAME_SUPPORTS_SAVE )
GAME( 1993, mahoudai, 0, mahoudai, mahoudai, T2_Z80, ROT270, "Raizing (Able license)", "Mahou Daisakusen (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1993, sstriker, mahoudai, mahoudai, sstriker, T2_Z80, ROT270, "Raizing", "Sorcer Striker (World)" , GAME_SUPPORTS_SAVE ) // from korean board
GAME( 1993, sstrikra, mahoudai, mahoudai, sstriker, T2_Z80, ROT270, "Raizing", "Sorcer Striker (World, alt)" , GAME_SUPPORTS_SAVE ) // verified on two different PCBs
GAME( 1994, shippumd, 0, shippumd, shippumd, T2_Z80, ROT270, "Raizing / Eighting", "Shippu Mahou Daisakusen (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1994, kingdmgp, shippumd, shippumd, kingdmgp, T2_Z80, ROT270, "Raizing / Eighting", "Kingdom Grandprix (World)" , GAME_SUPPORTS_SAVE ) // from korean board, missing letters on credits screen but this is correct
GAME( 1996, bgaregga, 0, bgaregga, bgaregga, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga (Europe / USA / Japan / Asia) (Sat Feb 3 1996)", GAME_SUPPORTS_SAVE )
GAME( 1996, bgareghk, bgaregga, bgaregga, bgareghk, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996)", GAME_SUPPORTS_SAVE )
GAME( 1996, bgaregnv, bgaregga, bgaregga, bgareghk, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996)" , GAME_SUPPORTS_SAVE ) // displays New Version only when set to HK
GAME( 1996, bgaregt2, bgaregga, bgaregga, bgaregga, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996)" , GAME_SUPPORTS_SAVE ) // displays Type 2 only when set to Europe
GAME( 1996, bgaregcn, bgaregga, bgaregga, bgaregcn, T2_Z80, ROT270, "Raizing / Eighting", "Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996)", GAME_SUPPORTS_SAVE ) // displays Type 2 only when set to Denmark
GAME( 1998, batrider, 0, batrider, batrider, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider - B Version (Japan) (Fri Feb 13 1998)", GAME_SUPPORTS_SAVE )
GAME( 1998, batridra, batrider, batrider, batrider, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Japan) (Mon Dec 22 1997)", GAME_SUPPORTS_SAVE )
GAME( 1998, batridrk, batrider, batrider, batrider, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Korea) (Fri Feb 13 1998)", GAME_SUPPORTS_SAVE )
GAME( 1999, bbakraid, 0, bbakraid, bbakraid, bbakraid, ROT270, "Eighting", "Battle Bakraid (Japan) (Wed Apr 7 1999)", GAME_SUPPORTS_SAVE )
GAME( 1999, bbakradu, bbakraid, bbakraid, bbakraid, bbakradu, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999)", GAME_SUPPORTS_SAVE )

View File

@ -146,6 +146,7 @@ Pipi & Bibis | Fix Eight | V-Five | Snow Bros. 2 |
#include "driver.h"
#include "cpu/m68000/m68000.h"
#include "includes/toaplan2.h"
@ -154,10 +155,10 @@ Pipi & Bibis | Fix Eight | V-Five | Snow Bros. 2 |
#define TOAPLAN2_TOP_VRAM_SIZE 0x1000 /* Top Layer RAM size */
#define TOAPLAN2_SPRITERAM_SIZE 0x800 /* Sprite RAM size */
#define RAIZING_TX_GFXRAM_SIZE 0x8000 /* GFX data decode RAM size */
extern size_t toaplan2_tx_vram_size; /* 0x2000 Text layer RAM size */
extern size_t toaplan2_tx_offs_vram_size; /* 0x200 Text layer tile flip and positon ? */
extern size_t toaplan2_tx_scroll_vram_size; /* 0x200 Text layer scroll ? */
extern size_t batrider_paletteram16_size;
size_t toaplan2_tx_vram_size; /* 0x2000 Text layer RAM size */
size_t toaplan2_tx_offs_vram_size; /* 0x200 Text layer tile flip and positon ? */
size_t toaplan2_tx_scroll_vram_size; /* 0x200 Text layer scroll ? */
size_t batrider_paletteram16_size;
@ -181,20 +182,20 @@ UINT16 *toaplan2_txvideoram16_offs; /* Text layer tile flip and positon ? */
UINT16 *toaplan2_txscrollram16; /* Text layer scroll ? */
UINT16 *toaplan2_tx_gfxram16; /* Text Layer RAM based tiles */
static UINT16 *raizing_tx_gfxram16; /* Text Layer RAM based tiles (Batrider) */
static int toaplan2_overflow_vram; /* Teki Paki VRAM test is bugged. It goes out of range */
static UINT16 toaplan2_overflow_vram; /* Teki Paki VRAM test is bugged. It goes out of range */
static int toaplan2_scroll_reg[2];
static int toaplan2_voffs[2];
static int bg_scrollx[2];
static int bg_scrolly[2];
static int fg_scrollx[2];
static int fg_scrolly[2];
static int top_scrollx[2];
static int top_scrolly[2];
static int sprite_scrollx[2];
static int sprite_scrolly[2];
static UINT16 toaplan2_scroll_reg[2];
static UINT16 toaplan2_voffs[2];
static UINT16 bg_scrollx[2];
static UINT16 bg_scrolly[2];
static UINT16 fg_scrollx[2];
static UINT16 fg_scrolly[2];
static UINT16 top_scrollx[2];
static UINT16 top_scrolly[2];
static UINT16 sprite_scrollx[2];
static UINT16 sprite_scrolly[2];
static int objectbank_dirty = 0; /* dirty flag of object bank (for Batrider) */
static int batrider_object_bank[8]; /* Batrider object bank */
static UINT16 batrider_object_bank[8]; /* Batrider object bank */
#ifdef MAME_DEBUG
static int display_bg[2] = { 1, 1 };
@ -205,15 +206,13 @@ static int display_tx = 1;
#endif
static int display_sp[2] = { 1, 1 };
static int sprite_priority[2][16];
static int bg_flip[2] = { 0, 0 };
static int fg_flip[2] = { 0, 0 };
static int top_flip[2] = { 0, 0 };
static int sprite_flip[2] = { 0, 0 };
static int tx_flip = 0;
extern int toaplan2_sub_cpu;
static UINT8 bg_flip[2] = { 0, 0 };
static UINT8 fg_flip[2] = { 0, 0 };
static UINT8 top_flip[2] = { 0, 0 };
static UINT8 sprite_flip[2] = { 0, 0 };
static UINT8 tx_flip = 0;
static UINT8 sprite_priority[2][16];
static UINT8 top_tile_priority[2][16];
static UINT8 fg_tile_priority[2][16];
static UINT8 bg_tile_priority[2][16];
@ -492,10 +491,58 @@ static void toaplan2_vh_start(int controller)
}
}
static void register_state_save(int vrams)
{
state_save_register_global_array(toaplan2_scroll_reg);
state_save_register_global_array(toaplan2_voffs);
state_save_register_global_array(bg_scrollx);
state_save_register_global_array(bg_scrolly);
state_save_register_global_array(fg_scrollx);
state_save_register_global_array(fg_scrolly);
state_save_register_global_array(top_scrollx);
state_save_register_global_array(top_scrolly);
state_save_register_global_array(sprite_scrollx);
state_save_register_global_array(sprite_scrolly);
state_save_register_global_array(batrider_object_bank);
state_save_register_global_array(bg_flip);
state_save_register_global_array(fg_flip);
state_save_register_global_array(top_flip);
state_save_register_global_array(sprite_flip);
state_save_register_global(tx_flip);
state_save_register_global_2d_array(sprite_priority);
state_save_register_global_2d_array(top_tile_priority);
state_save_register_global_2d_array(fg_tile_priority);
state_save_register_global_2d_array(bg_tile_priority);
switch (vrams)
{
case 2:
state_save_register_global_pointer(spriteram16_new[1], TOAPLAN2_SPRITERAM_SIZE/2);
state_save_register_global_pointer(spriteram16_now[1], TOAPLAN2_SPRITERAM_SIZE/2);
state_save_register_global_pointer(topvideoram16[1], TOAPLAN2_TOP_VRAM_SIZE/2);
state_save_register_global_pointer(fgvideoram16[1], TOAPLAN2_FG_VRAM_SIZE/2);
state_save_register_global_pointer(bgvideoram16[1], TOAPLAN2_BG_VRAM_SIZE/2);
/* fall through */
case 1:
state_save_register_global_pointer(spriteram16_new[0], TOAPLAN2_SPRITERAM_SIZE/2);
state_save_register_global_pointer(spriteram16_now[0], TOAPLAN2_SPRITERAM_SIZE/2);
state_save_register_global_pointer(topvideoram16[0], TOAPLAN2_TOP_VRAM_SIZE/2);
state_save_register_global_pointer(fgvideoram16[0], TOAPLAN2_FG_VRAM_SIZE/2);
state_save_register_global_pointer(bgvideoram16[0], TOAPLAN2_BG_VRAM_SIZE/2);
/* fall through */
default:
break;
}
}
VIDEO_START( toaplan2_0 )
{
defaultOffsets();
toaplan2_vh_start(0);
register_state_save(1);
}
VIDEO_START( toaplan2_1 )
@ -503,6 +550,7 @@ VIDEO_START( toaplan2_1 )
toaplan2_vh_start(0);
toaplan2_vh_start(1);
defaultOffsets();
register_state_save(2);
}
VIDEO_START( truxton2_0 )
@ -528,6 +576,8 @@ VIDEO_START( truxton2_0 )
defaultOffsets();
tilemap_set_scrolldx(tx_tilemap, 0x1d4 +1, 0x2a);
}
register_state_save(1);
}
VIDEO_START( bgaregga_0 )
@ -536,12 +586,14 @@ VIDEO_START( bgaregga_0 )
truxton2_create_tilemaps_0();
tilemap_set_scrolldx(tx_tilemap, 0x1d4, 0x2a);
defaultOffsets();
register_state_save(1);
}
VIDEO_START( batrider_0 )
{
raizing_tx_gfxram16 = auto_malloc(RAIZING_TX_GFXRAM_SIZE);
memset(raizing_tx_gfxram16,0,RAIZING_TX_GFXRAM_SIZE);
state_save_register_global_pointer(raizing_tx_gfxram16, RAIZING_TX_GFXRAM_SIZE/2);
toaplan2_vram_alloc(0);
spriteram16_n[0] = spriteram16_new[0];
@ -550,6 +602,7 @@ VIDEO_START( batrider_0 )
tilemap_set_scrolldx(tx_tilemap, 0x1d4, 0x2a);
defaultOffsets();
register_state_save(1);
}
@ -559,7 +612,7 @@ VIDEO_START( batrider_0 )
***************************************************************************/
static void toaplan2_voffs_w(offs_t offset, UINT16 data, UINT32 mem_mask, int controller)
static void toaplan2_voffs_w(offs_t offset, UINT16 data, UINT16 mem_mask, int controller)
{
if (data >= 0x1c00)
logerror("Hmmm, unknown video controller %01x layer being selected (%08x)\n",controller,data);
@ -719,8 +772,8 @@ WRITE16_HANDLER( batrider_objectbank_w )
static int toaplan2_videoram16_r(offs_t offset, int controller)
{
static UINT16 video_data = 0;
static offs_t vram_offset;
UINT16 video_data = 0;
offs_t vram_offset;
switch (toaplan2_voffs[controller] & 0xfc00)
@ -763,7 +816,7 @@ READ16_HANDLER( toaplan2_1_videoram16_r )
return toaplan2_videoram16_r(offset, 1);
}
static void toaplan2_videoram16_w(offs_t offset, UINT16 data, UINT32 mem_mask, int controller)
static void toaplan2_videoram16_w(offs_t offset, UINT16 data, UINT16 mem_mask, int controller)
{
offs_t vram_offset;
@ -810,7 +863,7 @@ WRITE16_HANDLER( toaplan2_1_videoram16_w )
}
static void toaplan2_scroll_reg_select_w(offs_t offset, UINT16 data, UINT32 mem_mask, int controller)
static void toaplan2_scroll_reg_select_w(offs_t offset, UINT16 data, UINT16 mem_mask, int controller)
{
if (ACCESSING_BITS_0_7)
{
@ -835,7 +888,7 @@ WRITE16_HANDLER( toaplan2_1_scroll_reg_select_w )
}
static void toaplan2_scroll_reg_data_w(running_machine *machine, offs_t offset, UINT16 data, UINT32 mem_mask, int controller)
static void toaplan2_scroll_reg_data_w(running_machine *machine, offs_t offset, UINT16 data, UINT16 mem_mask, int controller)
{
/************************************************************************/
/***** layer X and Y flips can be set independantly, so emulate it ******/