fbneo/src/burn/drv/taito/d_tnzs.cpp

2877 lines
89 KiB
C++

// FB Alpha The NewZealand Story driver module
// Based on MAME driver by Chris Moore, Brad Oliver, Nicola Salmoria, and many others
#include "tiles_generic.h"
#include "z80_intf.h"
#include "burn_ym2203.h"
#include "burn_ym2151.h"
#include "tnzs_prot.h"
#include "dac.h"
static UINT8 *AllMem;
static UINT8 *MemEnd;
static UINT8 *AllRam;
static UINT8 *RamEnd;
static UINT8 *DrvZ80ROM0;
static UINT8 *DrvZ80ROM1;
static UINT8 *DrvZ80ROM2;
static UINT8 *DrvGfxROM;
static UINT8 *DrvColPROM;
static UINT8 *DrvSndROM;
static UINT8 *DrvSprRAM;
static UINT8 *DrvShareRAM;
static UINT8 *DrvScrollRAM;
static UINT8 *DrvVidRAM;
static UINT8 *DrvPalRAM;
static UINT8 *DrvZ80RAM0;
static UINT8 *DrvZ80RAM1;
static UINT8 *DrvZ80RAM2;
static UINT8 *DrvObjCtrl;
static UINT32 *DrvPalette;
static UINT8 DrvRecalc;
static UINT8 *coin_lockout;
static UINT8 *soundlatch;
static UINT8 *tnzs_bg_flag;
static INT32 kageki_csport_sel;
static double kageki_sample_pos;
static INT32 kageki_sample_select;
static INT16 *kageki_sample_data[0x30];
static INT32 kageki_sample_size[0x30];
static double kageki_sample_gain;
static INT32 kageki_sample_output_dir;
static INT32 game_kabukiz = 0;
static INT32 cpu1_reset;
static INT32 tnzs_banks[3];
static UINT8 DrvJoy1[8];
static UINT8 DrvJoy2[8];
static UINT8 DrvJoy3[8];
static UINT8 DrvDips[2];
static UINT8 DrvInputs[3];
static UINT8 DrvReset;
static UINT16 DrvAxis[2];
static INT32 nAnalogAxis[2] = {0,0};
static INT16 *SampleBuffer = NULL;
#define A(a, b, c, d) { a, b, (UINT8*)(c), d }
static struct BurnInputInfo CommonInputList[] = {
{"P1 Coin", BIT_DIGITAL, DrvJoy3 + 4, "p1 coin" },
{"P1 Start", BIT_DIGITAL, DrvJoy1 + 7, "p1 start" },
{"P1 Up", BIT_DIGITAL, DrvJoy1 + 2, "p1 up" },
{"P1 Down", BIT_DIGITAL, DrvJoy1 + 3, "p1 down" },
{"P1 Left", BIT_DIGITAL, DrvJoy1 + 0, "p1 left" },
{"P1 Right", BIT_DIGITAL, DrvJoy1 + 1, "p1 right" },
{"P1 Button 1", BIT_DIGITAL, DrvJoy1 + 4, "p1 fire 1" },
{"P1 Button 2", BIT_DIGITAL, DrvJoy1 + 5, "p1 fire 2" },
{"P2 Coin", BIT_DIGITAL, DrvJoy3 + 5, "p2 coin" },
{"P2 Start", BIT_DIGITAL, DrvJoy2 + 7, "p2 start" },
{"P2 Up", BIT_DIGITAL, DrvJoy2 + 2, "p2 up" },
{"P2 Down", BIT_DIGITAL, DrvJoy2 + 3, "p2 down" },
{"P2 Left", BIT_DIGITAL, DrvJoy2 + 0, "p2 left" },
{"P2 Right", BIT_DIGITAL, DrvJoy2 + 1, "p2 right" },
{"P2 Button 1", BIT_DIGITAL, DrvJoy2 + 4, "p2 fire 1" },
{"P2 Button 2", BIT_DIGITAL, DrvJoy2 + 5, "p2 fire 2" },
{"Reset", BIT_DIGITAL, &DrvReset, "reset" },
{"Service", BIT_DIGITAL, DrvJoy3 + 0, "service" },
{"Tilt", BIT_DIGITAL, DrvJoy3 + 1, "tilt" },
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip" },
{"Dip B", BIT_DIPSWITCH, DrvDips + 1, "dip" },
};
STDINPUTINFO(Common)
static struct BurnInputInfo InsectxInputList[] = {
{"P1 Coin", BIT_DIGITAL, DrvJoy3 + 3, "p1 coin" },
{"P1 Start", BIT_DIGITAL, DrvJoy1 + 7, "p1 start" },
{"P1 Up", BIT_DIGITAL, DrvJoy1 + 2, "p1 up" },
{"P1 Down", BIT_DIGITAL, DrvJoy1 + 3, "p1 down" },
{"P1 Left", BIT_DIGITAL, DrvJoy1 + 0, "p1 left" },
{"P1 Right", BIT_DIGITAL, DrvJoy1 + 1, "p1 right" },
{"P1 Button 1", BIT_DIGITAL, DrvJoy1 + 4, "p1 fire 1" },
{"P1 Button 2", BIT_DIGITAL, DrvJoy1 + 5, "p1 fire 2" },
{"P2 Coin", BIT_DIGITAL, DrvJoy3 + 2, "p2 coin" },
{"P2 Start", BIT_DIGITAL, DrvJoy2 + 7, "p2 start" },
{"P2 Up", BIT_DIGITAL, DrvJoy2 + 2, "p2 up" },
{"P2 Down", BIT_DIGITAL, DrvJoy2 + 3, "p2 down" },
{"P2 Left", BIT_DIGITAL, DrvJoy2 + 0, "p2 left" },
{"P2 Right", BIT_DIGITAL, DrvJoy2 + 1, "p2 right" },
{"P2 Button 1", BIT_DIGITAL, DrvJoy2 + 4, "p2 fire 1" },
{"P2 Button 2", BIT_DIGITAL, DrvJoy2 + 5, "p2 fire 2" },
{"Reset", BIT_DIGITAL, &DrvReset, "reset" },
{"Service", BIT_DIGITAL, DrvJoy3 + 0, "service" },
{"Tilt", BIT_DIGITAL, DrvJoy3 + 1, "tilt" },
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip" },
{"Dip B", BIT_DIPSWITCH, DrvDips + 1, "dip" },
};
STDINPUTINFO(Insectx)
static struct BurnInputInfo Arknoid2InputList[] = {
{"P1 Coin", BIT_DIGITAL, DrvJoy2 + 6, "p1 coin" },
{"P1 Start", BIT_DIGITAL, DrvJoy1 + 7, "p1 start" },
{"P1 Button 1", BIT_DIGITAL, DrvJoy1 + 4, "p1 fire 1" },
A("P1 Right / left", BIT_ANALOG_REL, DrvAxis + 0, "p1 x-axis" ),
{"P2 Coin", BIT_DIGITAL, DrvJoy2 + 4, "p2 coin" },
{"P2 Start", BIT_DIGITAL, DrvJoy1 + 3, "p2 start" },
{"P2 Button 1", BIT_DIGITAL, DrvJoy1 + 0, "p2 fire 1" },
A("P2 Right / left", BIT_ANALOG_REL, DrvAxis + 1, "p2 x-axis" ),
{"Reset", BIT_DIGITAL, &DrvReset, "reset" },
{"Service", BIT_DIGITAL, DrvJoy2 + 5, "service" },
{"Tilt", BIT_DIGITAL, DrvJoy2 + 7, "tilt" },
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip" },
{"Dip B", BIT_DIPSWITCH, DrvDips + 1, "dip" },
};
STDINPUTINFO(Arknoid2)
static struct BurnInputInfo PlumppopInputList[] = {
{"P1 Coin", BIT_DIGITAL, DrvJoy3 + 4, "p1 coin" },
{"P1 Start", BIT_DIGITAL, DrvJoy1 + 7, "p1 start" },
{"P1 Button 1", BIT_DIGITAL, DrvJoy1 + 4, "p1 fire 1" },
{"P1 Button 2", BIT_DIGITAL, DrvJoy1 + 5, "p1 fire 2" },
A("P1 Right / left", BIT_ANALOG_REL, DrvAxis + 0, "p1 x-axis" ),
{"P2 Coin", BIT_DIGITAL, DrvJoy3 + 5, "p2 coin" },
{"P2 Start", BIT_DIGITAL, DrvJoy2 + 7, "p2 start" },
{"P2 Button 1", BIT_DIGITAL, DrvJoy2 + 4, "p2 fire 1" },
{"P2 Button 2", BIT_DIGITAL, DrvJoy2 + 5, "p2 fire 2" },
A("P2 Right / left", BIT_ANALOG_REL, DrvAxis + 1, "p2 x-axis" ),
{"Reset", BIT_DIGITAL, &DrvReset, "reset" },
{"Service", BIT_DIGITAL, DrvJoy3 + 0, "service" },
{"Tilt", BIT_DIGITAL, DrvJoy3 + 1, "tilt" },
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip" },
{"Dip B", BIT_DIPSWITCH, DrvDips + 1, "dip" },
};
STDINPUTINFO(Plumppop)
static struct BurnInputInfo JpopnicsInputList[] = {
{"P1 Coin", BIT_DIGITAL, DrvJoy1 + 6, "p1 coin" },
{"P1 Start", BIT_DIGITAL, DrvJoy1 + 7, "p1 start" },
{"P1 Button 1", BIT_DIGITAL, DrvJoy1 + 4, "p1 fire 1" },
{"P1 Button 2", BIT_DIGITAL, DrvJoy1 + 5, "p1 fire 2" },
A("P1 Right / left", BIT_ANALOG_REL, DrvAxis + 0, "p1 x-axis" ),
{"P2 Coin", BIT_DIGITAL, DrvJoy2 + 6, "p2 coin" },
{"P2 Start", BIT_DIGITAL, DrvJoy2 + 7, "p2 start" },
{"P2 Button 1", BIT_DIGITAL, DrvJoy2 + 4, "p2 fire 1" },
{"P2 Button 2", BIT_DIGITAL, DrvJoy2 + 5, "p2 fire 2" },
A("P2 Right / left", BIT_ANALOG_REL, DrvAxis + 1, "p2 x-axis" ),
{"Reset", BIT_DIGITAL, &DrvReset, "reset" },
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip" },
{"Dip B", BIT_DIPSWITCH, DrvDips + 1, "dip" },
};
STDINPUTINFO(Jpopnics)
static struct BurnDIPInfo ExtrmatnDIPList[]=
{
{0x13, 0xff, 0xff, 0xff, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_COINAGE_JAPAN_OLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Damage Multiplier" },
{0x14, 0x01, 0xc0, 0xc0, "*1" },
{0x14, 0x01, 0xc0, 0x80, "*1.5" },
{0x14, 0x01, 0xc0, 0x40, "*2" },
{0x14, 0x01, 0xc0, 0x00, "*3" },
};
STDDIPINFO(Extrmatn)
static struct BurnDIPInfo DrtoppelDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_COINAGE_WORLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x0c, "30k 100k 200k 100k+" },
{0x14, 0x01, 0x0c, 0x00, "50k 100k 200k 200k+" },
{0x14, 0x01, 0x0c, 0x04, "30k 100k" },
{0x14, 0x01, 0x0c, 0x08, "30k only" },
TNZS_LIVES_DIPSETTING(0x14)
};
STDDIPINFO(Drtoppel)
static struct BurnDIPInfo DrtoppluDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_COINAGE_JAPAN_OLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x0c, "30k 100k 200k 100k+" },
{0x14, 0x01, 0x0c, 0x00, "50k 100k 200k 200k+" },
{0x14, 0x01, 0x0c, 0x04, "30k 100k" },
{0x14, 0x01, 0x0c, 0x08, "30k only" },
TNZS_LIVES_DIPSETTING(0x14)
};
STDDIPINFO(Drtopplu)
static struct BurnDIPInfo ChukataiDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_COINAGE_WORLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x08, "100k 300k 440k" },
{0x14, 0x01, 0x0c, 0x00, "100k 300k 500k" },
{0x14, 0x01, 0x0c, 0x0c, "100k 400k" },
{0x14, 0x01, 0x0c, 0x04, "100k 500k" },
TNZS_LIVES_DIPSETTING(0x14)
};
STDDIPINFO(Chukatai)
static struct BurnDIPInfo ChukatauDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_COINAGE_JAPAN_OLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x08, "100k 300k 440k" },
{0x14, 0x01, 0x0c, 0x00, "100k 300k 500k" },
{0x14, 0x01, 0x0c, 0x0c, "100k 400k" },
{0x14, 0x01, 0x0c, 0x04, "100k 500k" },
TNZS_LIVES_DIPSETTING(0x14)
};
STDDIPINFO(Chukatau)
static struct BurnDIPInfo TnzsDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_COINAGE_WORLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x00, "50k 150k 150k+" },
{0x14, 0x01, 0x0c, 0x0c, "70k 200k 200k+" },
{0x14, 0x01, 0x0c, 0x04, "100k 250k 250k+" },
{0x14, 0x01, 0x0c, 0x08, "200k 300k 300k+" },
TNZS_LIVES_DIPSETTING(0x14)
TNZS_ALLOWCONTINUE_DIPSETTING(0x14, 0x40)
};
STDDIPINFO(Tnzs)
static struct BurnDIPInfo TnzsjDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_COINAGE_JAPAN_OLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x00, "50k 150k 150k+" },
{0x14, 0x01, 0x0c, 0x0c, "70k 200k 200k+" },
{0x14, 0x01, 0x0c, 0x04, "100k 250k 250k+" },
{0x14, 0x01, 0x0c, 0x08, "200k 300k 300k+" },
TNZS_LIVES_DIPSETTING(0x14)
TNZS_ALLOWCONTINUE_DIPSETTING(0x14, 0x40)
};
STDDIPINFO(Tnzsj)
static struct BurnDIPInfo TnzsjoDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
{0 , 0xfe, 0 , 4, "Invulnerability (Debug)" },
{0x14, 0x01, 0x08, 0x08, "Off" },
{0x14, 0x01, 0x08, 0x00, "On" },
TNZS_COINAGE_JAPAN_OLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x00, "50k 150k 150k+" },
{0x14, 0x01, 0x0c, 0x0c, "70k 200k 200k+" },
{0x14, 0x01, 0x0c, 0x04, "100k 250k 250k+" },
{0x14, 0x01, 0x0c, 0x08, "200k 300k 300k+" },
TNZS_LIVES_DIPSETTING(0x14)
TNZS_ALLOWCONTINUE_DIPSETTING(0x14, 0x40)
};
STDDIPINFO(Tnzsjo)
static struct BurnDIPInfo TnzsopDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_COINAGE_WORLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x00, "10k 100k 100k+" },
{0x14, 0x01, 0x0c, 0x0c, "10k 150k 150k+" },
{0x14, 0x01, 0x0c, 0x04, "10k 200k 200k+" },
{0x14, 0x01, 0x0c, 0x08, "10k 300k 300k+" },
TNZS_LIVES_DIPSETTING(0x14)
TNZS_ALLOWCONTINUE_DIPSETTING(0x14, 0x40)
};
STDDIPINFO(Tnzsop)
static struct BurnDIPInfo InsectxDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_COINAGE_WORLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x14, 0x01, 0x0c, 0x08, "100k 200k 300k 440k" },
{0x14, 0x01, 0x0c, 0x0c, "100k 400k" },
{0x14, 0x01, 0x0c, 0x04, "100k 500k" },
{0x14, 0x01, 0x0c, 0x00, "150000 Only" },
TNZS_LIVES_DIPSETTING(0x14)
};
STDDIPINFO(Insectx)
static struct BurnDIPInfo KagekiDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
// Cabinet type in Japan set only
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_COINAGE_JAPAN_OLD(0x13)
TNZS_DIFFICULTY_DIPSETTING(0x14)
TNZS_ALLOWCONTINUE_DIPSETTING(0x14, 0x80)
};
STDDIPINFO(Kageki)
static struct BurnDIPInfo Arknoid2DIPList[]=
{
{0x0b, 0xff, 0xff, 0xfe, NULL },
{0x0c, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x0b)
TNZS_DEMOSOUNDS_DIPSETTING(0x0b)
TNZS_COINAGE_WORLD(0x0b)
TNZS_DIFFICULTY_DIPSETTING(0x0c)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x0c, 0x01, 0x0c, 0x00, "50k 150k" },
{0x0c, 0x01, 0x0c, 0x0c, "100k 200k" },
{0x0c, 0x01, 0x0c, 0x04, "50k Only" },
{0x0c, 0x01, 0x0c, 0x08, "100k Only" },
TNZS_LIVES_DIPSETTING(0x0c)
TNZS_ALLOWCONTINUE_DIPSETTING(0x0c, 0x80)
};
STDDIPINFO(Arknoid2)
static struct BurnDIPInfo Arknid2uDIPList[]=
{
{0x0b, 0xff, 0xff, 0xfe, NULL },
{0x0c, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x0b)
TNZS_DEMOSOUNDS_DIPSETTING(0x0b)
TNZS_COINAGE_JAPAN_OLD(0x0b)
TNZS_DIFFICULTY_DIPSETTING(0x0c)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x0c, 0x01, 0x0c, 0x00, "50k 150k" },
{0x0c, 0x01, 0x0c, 0x0c, "100k 200k" },
{0x0c, 0x01, 0x0c, 0x04, "50k Only" },
{0x0c, 0x01, 0x0c, 0x08, "100k Only" },
TNZS_LIVES_DIPSETTING(0x0c)
TNZS_ALLOWCONTINUE_DIPSETTING(0x0c, 0x80)
};
STDDIPINFO(Arknid2u)
static struct BurnDIPInfo PlumppopDIPList[]=
{
{0x0d, 0xff, 0xff, 0xff, NULL },
{0x0e, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x0d)
TNZS_DEMOSOUNDS_DIPSETTING(0x0d)
TNZS_COINAGE_JAPAN_OLD(0x0d)
TNZS_DIFFICULTY_DIPSETTING(0x0e)
{0 , 0xfe, 0 , 4, "Bonus Life" },
{0x0e, 0x01, 0x0c, 0x08, "50k 200k 150k+" },
{0x0e, 0x01, 0x0c, 0x0c, "50k 250k 200k+" },
{0x0e, 0x01, 0x0c, 0x04, "100k 300k 200k+" },
{0x0e, 0x01, 0x0c, 0x00, "100k 400k 300k+" },
TNZS_LIVES_DIPSETTING(0x0e)
TNZS_ALLOWCONTINUE_DIPSETTING(0x0c, 0x80)
};
STDDIPINFO(Plumppop)
static struct BurnDIPInfo JpopnicsDIPList[]=
{
{0x0b, 0xff, 0xff, 0xff, NULL },
{0x0c, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x0b)
TNZS_DEMOSOUNDS_DIPSETTING(0x0b)
TNZS_DIFFICULTY_DIPSETTING(0x0c)
{0 , 0xfe, 0 , 0, "Bonus Life" },
{0x0c, 0x01, 0x0c, 0x08, "50k 200k 150k+" },
{0x0c, 0x01, 0x0c, 0x0c, "50k 250k 200k+" },
{0x0c, 0x01, 0x0c, 0x04, "100k 300k 200k+" },
{0x0c, 0x01, 0x0c, 0x00, "100k 400k 300k+" },
TNZS_LIVES_DIPSETTING(0x0c)
TNZS_ALLOWCONTINUE_DIPSETTING(0x0c, 0x80)
};
STDDIPINFO(Jpopnics)
static struct BurnDIPInfo KabukizDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_ALLOWCONTINUE_DIPSETTING(0x13, 0x80)
TNZS_DIFFICULTY_DIPSETTING(0x14)
TNZS_COINAGE_WORLD(0x14)
};
STDDIPINFO(Kabukiz)
static struct BurnDIPInfo KabukizjDIPList[]=
{
{0x13, 0xff, 0xff, 0xfe, NULL },
{0x14, 0xff, 0xff, 0xff, NULL },
TNZS_CABINET_FLIP_SERVICE_DIPSETTING(0x13)
TNZS_DEMOSOUNDS_DIPSETTING(0x13)
TNZS_ALLOWCONTINUE_DIPSETTING(0x13, 0x80)
TNZS_DIFFICULTY_DIPSETTING(0x14)
TNZS_COINAGE_JAPAN_OLD(0x14)
};
STDDIPINFO(Kabukizj)
void __fastcall bankswitch0(UINT8 data)
{
// CPU #0 expects CPU #1 to be stopped while reset line is triggered.
if ((~data & 0x10) != cpu1_reset) {
INT32 cycles = ZetTotalCycles();
ZetClose();
ZetOpen(1);
cycles -= ZetTotalCycles();
ZetIdle(cycles);
if (~data & 0x10) ZetReset();
ZetClose();
ZetOpen(0);
}
cpu1_reset = ~data & 0x10;
tnzs_banks[0] = data;
INT32 bank = (data & 7) * 0x4000;
// Low banks are RAM regions high ones are ROM.
if ((data & 6) == 0) {
ZetMapArea(0x8000, 0xbfff, 0, DrvZ80RAM0 + bank);
ZetMapArea(0x8000, 0xbfff, 1, DrvZ80RAM0 + bank);
ZetMapArea(0x8000, 0xbfff, 2, DrvZ80RAM0 + bank);
} else {
ZetMapArea(0x8000, 0xbfff, 0, DrvZ80ROM0 + 0x10000 + bank);
ZetMapArea(0x8000, 0xbfff, 1, DrvZ80ROM0 + 0x10000);
ZetMapArea(0x8000, 0xbfff, 2, DrvZ80ROM0 + 0x10000 + bank);
}
}
void __fastcall bankswitch1(UINT8 data)
{
tnzs_banks[1] = data & ~0x04;
if (data & 0x04) {
tnzs_mcu_reset();
}
*coin_lockout = ~data & 0x30;
ZetMapArea(0x8000, 0x9fff, 0, DrvZ80ROM1 + 0x08000 + 0x2000 * (data & 3));
ZetMapArea(0x8000, 0x9fff, 2, DrvZ80ROM1 + 0x08000 + 0x2000 * (data & 3));
}
void __fastcall tnzs_cpu0_write(UINT16 address, UINT8 data)
{
switch (address)
{
case 0xf400:
*tnzs_bg_flag = data;
break;
case 0xf600:
bankswitch0(data);
break;
}
if ((address & 0xff00) == 0xf300) {
DrvObjCtrl[address & 3] = data;
return;
}
}
UINT8 __fastcall tnzs_cpu0_read(UINT16 address)
{
// This is a hack to keep tnzs & clones from freezing. The sub cpu
// writes back 0xff to shared ram as an acknowledge and the main
// cpu doesn't expect it so soon. This can be fixed by an extremely
// high sync, but this hack is much less costly.
if ((address & 0xf000) == 0xe000) {
if (address == 0xef10 && DrvShareRAM[0x0f10] == 0xff) {
return 0;
}
return DrvShareRAM[address & 0xfff];
}
return 0;
}
void __fastcall tnzsb_cpu1_write(UINT16 address, UINT8 data)
{
switch (address)
{
case 0xa000:
bankswitch1(data);
break;
case 0xb004:
*soundlatch = data;
ZetClose();
ZetOpen(2);
ZetSetVector(0xff);
ZetSetIRQLine(0, CPU_IRQSTATUS_ACK);
ZetClose();
ZetOpen(1);
break;
}
}
UINT8 __fastcall tnzsb_cpu1_read(UINT16 address)
{
switch (address)
{
case 0xb002:
return DrvDips[0];
case 0xb003:
return DrvDips[1];
case 0xc000:
case 0xc001:
return DrvInputs[address & 1];
case 0xc002:
return DrvInputs[2] | *coin_lockout;
}
if (address >= 0xf000 && address <= 0xf003) {
return DrvPalRAM[address & 0x0003];
}
return 0;
}
void __fastcall tnzs_cpu1_write(UINT16 address, UINT8 data)
{
switch (address)
{
case 0xa000:
bankswitch1(data);
break;
case 0xb000:
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) {
BurnYM2151SelectRegister(data);
} else {
BurnYM2203Write(0, 0, data);
}
break;
case 0xb001:
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) {
BurnYM2151WriteRegister(data);
} else {
BurnYM2203Write(0, 1, data);
}
break;
case 0xc000:
case 0xc001:
tnzs_mcu_write(address, data);
break;
}
}
UINT8 __fastcall tnzs_cpu1_read(UINT16 address)
{
switch (address)
{
case 0xb000:
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS)
return 0;
return BurnYM2203Read(0, 0);
case 0xb001:
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS)
return BurnYM2151ReadStatus();
return BurnYM2203Read(0, 1);
case 0xc000:
case 0xc001:
return tnzs_mcu_read(address);
case 0xc002:
return DrvInputs[2];
case 0xc600:
return DrvDips[0];
case 0xc601:
return DrvDips[1];
case 0xf000:
return (~nAnalogAxis[0] >> 12) & 0xff;
case 0xf001:
return (~nAnalogAxis[0] >> 20) & 0x0f;
case 0xf002:
return (~nAnalogAxis[1] >> 12) & 0xff;
case 0xf003:
return (~nAnalogAxis[1] >> 20) & 0x0f;
}
return 0;
}
void __fastcall tnzs_cpu2_out(UINT16 port, UINT8 data)
{
switch (port & 0xff)
{
case 0x00:
BurnYM2203Write(0, 0, data);
break;
case 0x01:
BurnYM2203Write(0, 1, data);
break;
}
}
UINT8 __fastcall tnzs_cpu2_in(UINT16 port)
{
switch (port & 0xff)
{
case 0x00:
return BurnYM2203Read(0, 0);
case 0x02:
ZetSetIRQLine(0, CPU_IRQSTATUS_NONE);
return *soundlatch;
}
return 0;
}
static void kabukiz_sound_bankswitch(UINT32, UINT32 data)
{
if (data != 0xff) {
tnzs_banks[2] = data;
if (ZetGetActive() == -1) return;
ZetMapArea(0x8000, 0xbfff, 0, DrvZ80ROM2 + 0x8000 + 0x4000 * (data & 0x07));
ZetMapArea(0x8000, 0xbfff, 2, DrvZ80ROM2 + 0x8000 + 0x4000 * (data & 0x07));
}
}
static void kabukiz_dac_write(UINT32, UINT32 data)
{
if (data != 0xff) {
DACWrite(0, data);
}
}
static UINT8 tnzs_ym2203_portA(UINT32 )
{
return DrvDips[0];
}
static UINT8 tnzs_ym2203_portB(UINT32 )
{
return DrvDips[1];
}
static UINT8 kageki_ym2203_portA(UINT32)
{
INT32 dsw1 = DrvDips[0];
INT32 dsw2 = DrvDips[1];
UINT8 dsw = 0x0f;
switch (kageki_csport_sel & 3)
{
case 0x00:
dsw = (((dsw2 & 0x10) >> 1) | ((dsw2 & 0x01) << 2) | ((dsw1 & 0x10) >> 3) | ((dsw1 & 0x01) >> 0));
break;
case 0x01:
dsw = (((dsw2 & 0x40) >> 3) | ((dsw2 & 0x04) >> 0) | ((dsw1 & 0x40) >> 5) | ((dsw1 & 0x04) >> 2));
break;
case 0x02:
dsw = (((dsw2 & 0x20) >> 2) | ((dsw2 & 0x02) << 1) | ((dsw1 & 0x20) >> 4) | ((dsw1 & 0x02) >> 1));
break;
case 0x03:
dsw = (((dsw2 & 0x80) >> 4) | ((dsw2 & 0x08) >> 1) | ((dsw1 & 0x80) >> 6) | ((dsw1 & 0x08) >> 3));
break;
}
return dsw;
}
static void kageki_ym2203_write_portB(UINT32, UINT32 data)
{
if (data > 0x3f) {
kageki_csport_sel = data;
} else {
if (data > 0x2f) {
kageki_sample_select = -1;
} else {
kageki_sample_select = data;
kageki_sample_pos = 0;
}
}
}
inline static void DrvYM2203IRQHandler(INT32, INT32 nStatus)
{
Z80SetIrqLine(Z80_INPUT_LINE_NMI, nStatus & 1);
}
inline static INT32 DrvSynchroniseStream(INT32 nSoundRate)
{
return (INT64)ZetTotalCycles() * nSoundRate / 6000000;
}
inline static double DrvGetTime()
{
return (double)ZetTotalCycles() / 6000000;
}
static INT32 kabukizSyncDAC()
{
return (INT32)(float)(nBurnSoundLen * (ZetTotalCycles() / (6000000.000 / (nBurnFPS / 100.000))));
}
static INT32 DrvDoReset()
{
memset (AllRam, 0, RamEnd - AllRam);
memcpy (DrvPalRAM, DrvColPROM, 0x400);
cpu1_reset = 0;
for (INT32 i = 0; i < 3; i++) {
ZetOpen(i);
ZetReset();
if (i == 0) bankswitch0(0x12);
if (i == 1) bankswitch1(0);
if (i == 2) kabukiz_sound_bankswitch(0, 0);
ZetClose();
}
tnzs_mcu_reset();
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) {
BurnYM2151Reset();
} else {
BurnYM2203Reset();
}
DACReset();
kageki_sample_pos = 0;
kageki_sample_select = -1;
return 0;
}
static INT32 MemIndex()
{
UINT8 *Next; Next = AllMem;
DrvZ80ROM0 = Next; Next += 0x040000;
DrvZ80ROM1 = Next; Next += 0x020000;
DrvZ80ROM2 = Next; Next += 0x020000;
DrvGfxROM = Next; Next += 0x400000;
DrvColPROM = Next; Next += 0x000400;
DrvSndROM = Next; Next += 0x010000;
DrvPalette = (UINT32*)Next; Next += 0x0200 * sizeof(UINT32);
SampleBuffer = (INT16*)Next; Next += nBurnSoundLen * 2 * sizeof(INT16);
AllRam = Next;
DrvObjCtrl = Next; Next += 0x000004;
DrvPalRAM = Next; Next += 0x000400;
DrvSprRAM = Next; Next += 0x002000;
DrvShareRAM = Next; Next += 0x001000;
DrvScrollRAM = Next; Next += 0x000100;
DrvVidRAM = Next; Next += 0x000200;
DrvZ80RAM0 = Next; Next += 0x008000;
DrvZ80RAM1 = Next; Next += 0x001000;
DrvZ80RAM2 = Next; Next += 0x002000;
coin_lockout = Next; Next += 0x000001;
soundlatch = Next; Next += 0x000001;
tnzs_bg_flag = Next; Next += 0x000001;
RamEnd = Next;
MemEnd = Next;
return 0;
}
static void kageki_sample_init()
{
UINT8 *src = DrvSndROM + 0x0090;
for (INT32 i = 0; i < 0x2f; i++)
{
INT32 start = (src[(i * 2) + 1] << 8) + src[(i * 2)];
UINT8 *scan = &src[start];
INT32 size = 0;
while (1) {
if (*scan++ == 0x00) {
break;
} else {
size++;
}
}
kageki_sample_data[i] = (INT16*)BurnMalloc(size * sizeof(INT16));
kageki_sample_size[i] = size;
if (start < 0x100) start = size = 0;
INT16 *dest = kageki_sample_data[i];
scan = &src[start];
for (INT32 n = 0; n < size; n++)
{
*dest++ = ((*scan++) ^ 0x80) << 8;
}
}
kageki_sample_gain = 0.45;
kageki_sample_output_dir = BURN_SND_ROUTE_BOTH;
}
void kageki_sample_set_route(double nVolume, INT32 nRouteDir)
{
kageki_sample_gain = nVolume;
kageki_sample_output_dir = nRouteDir;
}
static void kageki_sample_exit()
{
for (INT32 i = 0; i < 0x30; i++) {
BurnFree (kageki_sample_data[i]);
}
}
static INT32 tnzs_gfx_decode()
{
UINT8 *tmp = (UINT8*)BurnMalloc(0x200000);
if (tmp == NULL) {
return 1;
}
memcpy (tmp, DrvGfxROM, 0x200000);
static INT32 Plane[4] = { 0xc00000, 0x800000, 0x400000, 0x000000 };
static INT32 XOffs[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 64, 65, 66, 67, 68, 69, 70, 71 };
static INT32 YOffs[16] = { 0, 8, 16, 24, 32, 40, 48, 56, 128, 136, 144, 152, 160, 168, 176, 184 };
GfxDecode(0x4000, 4, 16, 16, Plane, XOffs, YOffs, 0x100, tmp, DrvGfxROM);
// the drawing routines allow for 0x4000 tiles, but some (most) games
// only have 0x2000. Mirroring the second half is cheaper and easier than
// masking the tile code.
if (memcmp (DrvGfxROM + 0x200000, DrvGfxROM + 0x300000, 0x100000) == 0) {
memcpy (DrvGfxROM + 0x200000, DrvGfxROM + 0x000000, 0x200000);
}
BurnFree (tmp);
return 0;
}
static INT32 insectx_gfx_decode()
{
UINT8 *tmp = (UINT8*)BurnMalloc(0x100000);
if (tmp == NULL) {
return 1;
}
memcpy (tmp, DrvGfxROM, 0x100000);
static INT32 Plane[4] = { 0x000008, 0x000000, 0x400008, 0x400000 };
static INT32 XOffs[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 128, 129, 130, 131, 132, 133, 134, 135 };
static INT32 YOffs[16] = { 0, 16, 32, 48, 64, 80, 96, 112, 256, 272, 288, 304, 320, 336, 352, 368 };
GfxDecode(0x2000, 4, 16, 16, Plane, XOffs, YOffs, 0x200, tmp, DrvGfxROM);
memcpy (DrvGfxROM + 0x200000, DrvGfxROM + 0x000000, 0x200000);
BurnFree (tmp);
return 0;
}
static INT32 Type1Init(INT32 mcutype)
{
AllMem = NULL;
MemIndex();
INT32 nLen = MemEnd - (UINT8 *)0;
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
memset(AllMem, 0, nLen);
MemIndex();
switch (mcutype)
{
case MCU_CHUKATAI:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM0 + 0x20000, 1, 1)) return 1;
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x020000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x0a0000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x120000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 10, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x1a0000, 11, 1)) return 1;
if (tnzs_gfx_decode()) return 1;
}
break;
case MCU_TNZS:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 1, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x020000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x0a0000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x120000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x1a0000, 10, 1)) return 1;
if (tnzs_gfx_decode()) return 1;
}
break;
case MCU_DRTOPPEL:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM0 + 0x20000, 1, 1)) return 1;
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x020000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x0a0000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x120000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 10, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x1a0000, 11, 1)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00001, 12, 2)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00000, 13, 2)) return 1;
if (tnzs_gfx_decode()) return 1;
}
break;
case MCU_EXTRMATN:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM0 + 0x20000, 1, 1)) return 1;
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 7, 1)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00001, 8, 2)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00000, 9, 2)) return 1;
if (tnzs_gfx_decode()) return 1;
}
break;
case MCU_NONE_INSECTX:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 1, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 3, 1)) return 1;
insectx_gfx_decode();
}
break;
case MCU_ARKANOID:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 1, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 6, 1)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00001, 7, 2)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00000, 8, 2)) return 1;
if (tnzs_gfx_decode()) return 1;
}
break;
case MCU_PLUMPOP:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM0 + 0x20000, 1, 1)) return 1;
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x010000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x020000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x030000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x090000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x0a0000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x0b0000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x110000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x120000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x130000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 10, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x190000, 10, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x1a0000, 11, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x1b0000, 11, 1)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00001, 12, 2)) return 1;
if (BurnLoadRom(DrvColPROM + 0x00000, 13, 2)) return 1;
if (tnzs_gfx_decode()) return 1;
}
break;
case MCU_NONE_KAGEKI:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM0 + 0x20000, 1, 1)) return 1;
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x020000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x0a0000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x120000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x1a0000, 10, 1)) return 1;
if (BurnLoadRom(DrvSndROM + 0x000000, 11, 1)) return 1;
if (tnzs_gfx_decode()) return 1;
kageki_sample_init();
}
break;
case MCU_NONE_JPOPNICS:
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0 + 0x00000, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 1, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x000000, 2, 1)) return 1;
memcpy (DrvGfxROM + 0x020000, DrvGfxROM + 0x010000, 0x010000);
if (BurnLoadRom(DrvGfxROM + 0x080000, 3, 1)) return 1;
memcpy (DrvGfxROM + 0x0a0000, DrvGfxROM + 0x090000, 0x010000);
if (BurnLoadRom(DrvGfxROM + 0x100000, 4, 1)) return 1;
memcpy (DrvGfxROM + 0x120000, DrvGfxROM + 0x110000, 0x010000);
if (BurnLoadRom(DrvGfxROM + 0x180000, 5, 1)) return 1;
memcpy (DrvGfxROM + 0x1a0000, DrvGfxROM + 0x190000, 0x010000);
if (tnzs_gfx_decode()) return 1;
}
break;
}
ZetInit(0);
ZetOpen(0);
ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM0);
ZetMapArea(0x0000, 0x7fff, 2, DrvZ80ROM0);
ZetMapArea(0x8000, 0xbfff, 0, DrvZ80ROM0 + 0x18000);
ZetMapArea(0x8000, 0xbfff, 2, DrvZ80ROM0 + 0x18000);
ZetMapArea(0xc000, 0xdfff, 0, DrvSprRAM);
ZetMapArea(0xc000, 0xdfff, 1, DrvSprRAM);
ZetMapArea(0xe000, 0xeeff, 0, DrvShareRAM);
if (mcutype != MCU_TNZS) {
ZetMapArea(0xef00, 0xefff, 0, DrvShareRAM + 0x0f00);
}
ZetMapArea(0xe000, 0xefff, 1, DrvShareRAM);
ZetMapArea(0xe000, 0xefff, 2, DrvShareRAM);
ZetMapArea(0xf000, 0xf1ff, 0, DrvVidRAM);
ZetMapArea(0xf000, 0xf1ff, 1, DrvVidRAM);
ZetMapArea(0xf200, 0xf2ff, 1, DrvScrollRAM);
if (mcutype != MCU_DRTOPPEL) {
ZetMapArea(0xf800, 0xfbff, 0, DrvPalRAM);
ZetMapArea(0xf800, 0xfbff, 1, DrvPalRAM);
}
ZetSetWriteHandler(tnzs_cpu0_write);
ZetSetReadHandler(tnzs_cpu0_read);
ZetClose();
ZetInit(1);
ZetOpen(1);
ZetMapArea(0x0000, 0x9fff, 0, DrvZ80ROM1);
ZetMapArea(0x0000, 0x9fff, 2, DrvZ80ROM1);
ZetMapArea(0xd000, 0xdfff, 0, DrvZ80RAM1);
ZetMapArea(0xd000, 0xdfff, 1, DrvZ80RAM1);
ZetMapArea(0xd000, 0xdfff, 2, DrvZ80RAM1);
ZetMapArea(0xe000, 0xefff, 0, DrvShareRAM);
ZetMapArea(0xe000, 0xefff, 1, DrvShareRAM);
ZetMapArea(0xe000, 0xefff, 2, DrvShareRAM);
ZetSetWriteHandler(tnzs_cpu1_write);
ZetSetReadHandler(tnzs_cpu1_read);
ZetClose();
ZetInit(2); // For common reset routine
tnzs_mcu_init(mcutype);
if (mcutype == MCU_NONE_JPOPNICS) {
BurnYM2151Init(3000000); // jpopnics
BurnYM2151SetAllRoutes(0.30, BURN_SND_ROUTE_BOTH);
} else {
BurnYM2203Init(1, 3000000, NULL, DrvSynchroniseStream, DrvGetTime, 0);
BurnYM2203SetAllRoutes(0, 0.30, BURN_SND_ROUTE_BOTH);
if (mcutype == MCU_EXTRMATN || mcutype == MCU_DRTOPPEL) {
BurnYM2203SetPSGVolume(0, 0.10);
}
if (mcutype == MCU_NONE_KAGEKI) {
BurnYM2203SetPorts(0, &kageki_ym2203_portA, NULL, NULL, &kageki_ym2203_write_portB);
BurnYM2203SetRoute(0, BURN_SND_YM2203_YM2203_ROUTE, 0.35, BURN_SND_ROUTE_BOTH);
BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_1, 0.15, BURN_SND_ROUTE_BOTH);
BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_2, 0.15, BURN_SND_ROUTE_BOTH);
BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_3, 0.15, BURN_SND_ROUTE_BOTH);
} else {
BurnYM2203SetPorts(0, &tnzs_ym2203_portA, &tnzs_ym2203_portB, NULL, NULL);
}
}
DACInit(0, 0, 1, kabukizSyncDAC); // kabukiz
DACSetRoute(0, 0.10, BURN_SND_ROUTE_BOTH);
GenericTilesInit();
DrvDoReset();
return 0;
}
static INT32 Type2Init()
{
AllMem = NULL;
MemIndex();
INT32 nLen = MemEnd - (UINT8 *)0;
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
memset(AllMem, 0, nLen);
MemIndex();
game_kabukiz = (strncmp(BurnDrvGetTextA(DRV_NAME), "kabukiz", 7) == 0);
{
if (BurnLoadRom(DrvZ80ROM0 + 0x10000, 0, 1)) return 1;
memcpy (DrvZ80ROM0, DrvZ80ROM0 + 0x10000, 0x08000);
if (BurnLoadRom(DrvZ80ROM1 + 0x00000, 1, 1)) return 1;
if (BurnLoadRom(DrvZ80ROM2 + 0x00000, 2, 1)) return 1;
if (game_kabukiz) {
if (BurnLoadRom(DrvGfxROM + 0x000000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 6, 1)) return 1;
} else {
if (BurnLoadRom(DrvGfxROM + 0x000000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x020000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x080000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x0a0000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x100000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x120000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x180000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM + 0x1a0000, 10, 1)) return 1;
}
if (tnzs_gfx_decode()) return 1;
}
ZetInit(0);
ZetOpen(0);
ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM0);
ZetMapArea(0x0000, 0x7fff, 2, DrvZ80ROM0);
ZetMapArea(0x8000, 0xbfff, 0, DrvZ80ROM0 + 0x18000);
ZetMapArea(0x8000, 0xbfff, 1, DrvZ80ROM0 + 0x18000);
ZetMapArea(0x8000, 0xbfff, 2, DrvZ80ROM0 + 0x18000);
ZetMapArea(0xc000, 0xdfff, 0, DrvSprRAM);
ZetMapArea(0xc000, 0xdfff, 1, DrvSprRAM);
ZetMapArea(0xc000, 0xdfff, 2, DrvSprRAM);
ZetMapArea(0xe000, 0xeeff, 0, DrvShareRAM);
if (game_kabukiz) {
ZetMapArea(0xef00, 0xefff, 0, DrvShareRAM + 0x0f00);
}
ZetMapArea(0xe000, 0xefff, 1, DrvShareRAM);
ZetMapArea(0xe000, 0xefff, 2, DrvShareRAM);
ZetMapArea(0xf000, 0xf1ff, 0, DrvVidRAM);
ZetMapArea(0xf000, 0xf1ff, 1, DrvVidRAM);
ZetMapArea(0xf000, 0xf1ff, 2, DrvVidRAM);
ZetMapArea(0xf200, 0xf2ff, 0, DrvScrollRAM);
ZetMapArea(0xf200, 0xf2ff, 1, DrvScrollRAM);
ZetSetWriteHandler(tnzs_cpu0_write);
ZetSetReadHandler(tnzs_cpu0_read);
ZetClose();
ZetInit(1);
ZetOpen(1);
ZetMapArea(0x0000, 0x9fff, 0, DrvZ80ROM1);
ZetMapArea(0x0000, 0x9fff, 2, DrvZ80ROM1);
ZetMapArea(0xd000, 0xdfff, 0, DrvZ80RAM1);
ZetMapArea(0xd000, 0xdfff, 1, DrvZ80RAM1);
ZetMapArea(0xd000, 0xdfff, 2, DrvZ80RAM1);
ZetMapArea(0xe000, 0xefff, 0, DrvShareRAM);
ZetMapArea(0xe000, 0xefff, 1, DrvShareRAM);
ZetMapArea(0xe000, 0xefff, 2, DrvShareRAM);
ZetMapArea(0xf000, 0xf3ff, 1, DrvPalRAM); // tnzsb
ZetMapArea(0xf800, 0xfbff, 1, DrvPalRAM); // kabukiz
ZetSetWriteHandler(tnzsb_cpu1_write);
ZetSetReadHandler(tnzsb_cpu1_read);
ZetClose();
ZetInit(2);
ZetOpen(2);
ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM2 + 0x0000);
ZetMapArea(0x0000, 0x7fff, 2, DrvZ80ROM2 + 0x0000);
ZetMapArea(0xc000, 0xdfff, 0, DrvZ80RAM2); // tnzsb
ZetMapArea(0xc000, 0xdfff, 1, DrvZ80RAM2);
ZetMapArea(0xc000, 0xdfff, 2, DrvZ80RAM2);
ZetMapArea(0xe000, 0xffff, 0, DrvZ80RAM2); // kabukiz
ZetMapArea(0xe000, 0xffff, 1, DrvZ80RAM2);
ZetMapArea(0xe000, 0xffff, 2, DrvZ80RAM2);
ZetSetOutHandler(tnzs_cpu2_out);
ZetSetInHandler(tnzs_cpu2_in);
ZetClose();
BurnYM2203Init(1, 3000000, &DrvYM2203IRQHandler, DrvSynchroniseStream, DrvGetTime, 0);
BurnYM2203SetPorts(0, NULL, NULL, &kabukiz_sound_bankswitch, &kabukiz_dac_write);
BurnTimerAttachZet(6000000);
BurnYM2203SetAllRoutes(0, 0.30, BURN_SND_ROUTE_BOTH);
if (game_kabukiz || strncmp(BurnDrvGetTextA(DRV_NAME), "tnzs", 5) == 0) {
BurnYM2203SetRoute(0, BURN_SND_YM2203_YM2203_ROUTE, 2.00, BURN_SND_ROUTE_BOTH);
BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_1, 1.00, BURN_SND_ROUTE_BOTH);
BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_2, 1.00, BURN_SND_ROUTE_BOTH);
BurnYM2203SetRoute(0, BURN_SND_YM2203_AY8910_ROUTE_3, 1.00, BURN_SND_ROUTE_BOTH);
}
DACInit(0, 0, 1, kabukizSyncDAC); // kabukiz
DACSetRoute(0, 0.10, BURN_SND_ROUTE_BOTH);
GenericTilesInit();
DrvDoReset();
return 0;
}
static INT32 DrvExit()
{
GenericTilesExit();
ZetExit();
if (tnzs_mcu_type() != MCU_NONE_JPOPNICS) BurnYM2203Exit();
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) BurnYM2151Exit();
DACExit();
BurnFree (AllMem);
if (tnzs_mcu_type() == MCU_NONE_KAGEKI) {
kageki_sample_exit();
}
tnzs_mcu_init(0);
game_kabukiz = 0;
return 0;
}
// Stolen from TMNT. Thanks to Barry. :)
static void kageki_sample_render(INT16 *pSoundBuf, INT32 nLength)
{
memset(pSoundBuf, 0, nLength * sizeof(INT16) * 2);
if (kageki_sample_select == -1) return;
double Addr = kageki_sample_pos;
double Step = (double)7000 / nBurnSoundRate;
double size = kageki_sample_size[kageki_sample_select];
INT16 *ptr = kageki_sample_data[kageki_sample_select];
for (INT32 i = 0; i < nLength; i += 2) {
if (Addr >= size) break;
INT16 Sample = ptr[(INT32)Addr];
INT16 nLeftSample = 0, nRightSample = 0;
if ((kageki_sample_output_dir & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) {
nLeftSample += (INT32)(Sample * kageki_sample_gain);
}
if ((kageki_sample_output_dir & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) {
nRightSample += (INT32)(Sample * kageki_sample_gain);
}
pSoundBuf[i + 0] += nLeftSample;
pSoundBuf[i + 1] += nRightSample;
Addr += Step;
}
kageki_sample_pos = Addr;
if (Addr >= size) kageki_sample_select = -1;
}
static void draw_16x16(INT32 sx, INT32 sy, INT32 code, INT32 color, INT32 flipx, INT32 flipy, INT32 transp)
{
if (transp) {
if (flipy) {
if (flipx) {
Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, code, sx, sy, color, 4, 0, 0, DrvGfxROM);
} else {
Render16x16Tile_Mask_FlipY_Clip(pTransDraw, code, sx, sy, color, 4, 0, 0, DrvGfxROM);
}
} else {
if (flipx) {
Render16x16Tile_Mask_FlipX_Clip(pTransDraw, code, sx, sy, color, 4, 0, 0, DrvGfxROM);
} else {
Render16x16Tile_Mask_Clip(pTransDraw, code, sx, sy, color, 4, 0, 0, DrvGfxROM);
}
}
} else {
if (flipy) {
if (flipx) {
Render16x16Tile_FlipXY_Clip(pTransDraw, code, sx, sy, color, 4, 0, DrvGfxROM);
} else {
Render16x16Tile_FlipY_Clip(pTransDraw, code, sx, sy, color, 4, 0, DrvGfxROM);
}
} else {
if (flipx) {
Render16x16Tile_FlipX_Clip(pTransDraw, code, sx, sy, color, 4, 0, DrvGfxROM);
} else {
Render16x16Tile_Clip(pTransDraw, code, sx, sy, color, 4, 0, DrvGfxROM);
}
}
}
}
static void draw_background(INT32 ctrl, INT32 flipscreen)
{
INT32 scrollx, scrolly;
UINT8 *m = DrvSprRAM + 0x400;
if ((ctrl ^ (ctrl << 1)) & 0x40)
{
m += 0x800;
}
INT32 transpen = (*tnzs_bg_flag & 0x80) ^ 0x80;
INT32 tot = DrvObjCtrl[1] & 0x1f;
if (tot == 1) tot = 16;
UINT32 upperbits = DrvObjCtrl[2] | (DrvObjCtrl[3] << 8);
for (INT32 column = 0; column < tot; column++)
{
scrollx = DrvScrollRAM[(column << 4) | 4] - ((upperbits & 0x01) << 8);
if (flipscreen)
scrolly = DrvScrollRAM[column << 4] + 1 - 256;
else
scrolly = -DrvScrollRAM[column << 4] + 1;
for (INT32 y = 0; y < 16; y++)
{
for (INT32 x = 0; x < 2; x++)
{
INT32 i = ((column ^ 8) << 5) | (y << 1) | x;
INT32 code = m[i + 0x0000] | ((m[i + 0x1000] & 0x3f) << 8);
INT32 color = m[i + 0x1200] >> 3;
INT32 flipx = m[i + 0x1000] & 0x80;
INT32 flipy = m[i + 0x1000] & 0x40;
INT32 sx = x << 4;
INT32 sy = y << 4;
if (flipscreen)
{
sy = 240 - sy;
flipx = !flipx;
flipy = !flipy;
}
sy = (sy + scrolly) & 0xff;
sx += scrollx;
if (sx >= nScreenWidth || sx < -15 || sy >= nScreenHeight + 16 || sy < 1) continue;
draw_16x16(sx, sy - 16, code, color, flipx, flipy, transpen);
}
}
upperbits >>= 1;
}
}
static void draw_foreground(INT32 ctrl, INT32 flipscreen)
{
UINT8 *char_pointer = DrvSprRAM + 0x0000;
UINT8 *x_pointer = DrvSprRAM + 0x0200;
UINT8 *y_pointer = DrvVidRAM + 0x0000;
UINT8 *ctrl_pointer = DrvSprRAM + 0x1000;
UINT8 *color_pointer = DrvSprRAM + 0x1200;
if ((ctrl ^ (ctrl << 1)) & 0x40)
{
char_pointer += 0x800;
x_pointer += 0x800;
ctrl_pointer += 0x800;
color_pointer += 0x800;
}
for (INT32 i = 0x1ff; i >= 0; i--)
{
INT32 code = char_pointer[i] + ((ctrl_pointer[i] & 0x3f) << 8);
INT32 color = (color_pointer[i] & 0xf8) >> 3;
INT32 sx = x_pointer[i] - ((color_pointer[i] & 1) << 8);
INT32 sy = 240 - y_pointer[i];
INT32 flipx = ctrl_pointer[i] & 0x80;
INT32 flipy = ctrl_pointer[i] & 0x40;
if (flipscreen)
{
sy = 240 - sy;
flipx = !flipx;
flipy = !flipy;
if ((sy == 0) && (code == 0)) sy += 240;
}
if (sx >= nScreenWidth || sx < -15) continue;
draw_16x16(sx, sy - 14, code, color, flipx, flipy, 1);
}
}
static inline void DrvRecalcPalette()
{
UINT8 r,g,b;
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) {
for (INT32 i = 0; i < 0x400; i+=2) {
UINT16 pal = (DrvPalRAM[i] << 8) | DrvPalRAM[i | 1];
r = (pal >> 4) & 0x0f;
g = (pal >> 12) & 0x0f;
b = (pal >> 8) & 0x0f;
r |= r << 4;
g |= g << 4;
b |= b << 4;
DrvPalette[i / 2] = BurnHighCol(r, g, b, 0);
}
} else {
for (INT32 i = 0; i < 0x400; i+=2) {
UINT16 pal = (DrvPalRAM[i | 1] << 8) | DrvPalRAM[i];
r = (pal >> 10) & 0x1f;
g = (pal >> 5) & 0x1f;
b = (pal >> 0) & 0x1f;
r = (r << 3) | (r >> 2);
g = (g << 3) | (g >> 2);
b = (b << 3) | (b >> 2);
DrvPalette[i / 2] = BurnHighCol(r, g, b, 0);
}
}
}
static void sprite_buffer(INT32 ctrl)
{
if (~ctrl & 0x20)
{
if (ctrl & 0x40) {
memcpy (DrvSprRAM + 0x0000, DrvSprRAM + 0x0800, 0x0400);
memcpy (DrvSprRAM + 0x1000, DrvSprRAM + 0x1800, 0x0400);
} else {
memcpy (DrvSprRAM + 0x0800, DrvSprRAM + 0x0000, 0x0400);
memcpy (DrvSprRAM + 0x1800, DrvSprRAM + 0x1000, 0x0400);
}
memcpy (DrvSprRAM + 0x0400, DrvSprRAM + 0x0c00, 0x0400);
memcpy (DrvSprRAM + 0x1400, DrvSprRAM + 0x1c00, 0x0400);
}
}
static void bgsprite_buffer_kabukiz(INT32 ctrl)
{
if (~ctrl & 0x20)
{
memcpy (DrvSprRAM + 0x0400, DrvSprRAM + 0x0c00, 0x0400);
memcpy (DrvSprRAM + 0x1400, DrvSprRAM + 0x1c00, 0x0400);
}
}
static INT32 DrvDraw()
{
DrvRecalcPalette();
INT32 flip = DrvObjCtrl[0] & 0x40;
INT32 ctrl = (DrvObjCtrl[1] & 0x60) ^ 0x20;
for (INT32 i = 0; i < nScreenWidth * nScreenHeight; i++) {
pTransDraw[i] = 0x1f0;
}
draw_background(ctrl, flip);
draw_foreground(ctrl, flip);
BurnTransferCopy(DrvPalette);
return 0;
}
static void assemble_inputs()
{
tnzs_mcu_inputs = DrvInputs;
memset (DrvInputs, 0xff, 3);
for (INT32 i = 0; i < 8; i++) {
DrvInputs[0] ^= DrvJoy1[i] << i;
DrvInputs[1] ^= DrvJoy2[i] << i;
DrvInputs[2] ^= DrvJoy3[i] << i;
}
nAnalogAxis[0] -= DrvAxis[0] << 7;
nAnalogAxis[1] -= DrvAxis[1] << 7;
}
static INT32 DrvFrame()
{
if (DrvReset) {
DrvDoReset();
}
ZetNewFrame();
assemble_inputs();
INT32 nInterleave = 256;
if (tnzs_mcu_type() == MCU_NONE_KAGEKI) nInterleave = nBurnSoundLen;
INT32 nSoundBufferPos = 0;
INT32 nCyclesSegment;
INT32 nCyclesDone[3], nCyclesTotal[3];
nCyclesTotal[0] = 6000000 / 60;
nCyclesTotal[1] = 6000000 / 60;
nCyclesTotal[2] = 6000000 / 60;
nCyclesDone[0] = nCyclesDone[1] = nCyclesDone[2] = 0;
for (INT32 i = 0; i < nInterleave; i++) {
INT32 nCurrentCPU, nNext;
if (game_kabukiz && i == 1)
bgsprite_buffer_kabukiz(DrvObjCtrl[1]);
// Run Z80 #0
nCurrentCPU = 0;
ZetOpen(nCurrentCPU);
nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave;
nCyclesSegment = nNext - nCyclesDone[nCurrentCPU];
nCyclesDone[nCurrentCPU] += ZetRun(nCyclesSegment);
if (i == nInterleave - 2) {
tnzs_mcu_interrupt();
ZetSetIRQLine(0, CPU_IRQSTATUS_HOLD);
}
ZetClose();
// Run Z80 #1
nCurrentCPU = 1;
ZetOpen(nCurrentCPU);
nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave;
nCyclesSegment = nNext - nCyclesDone[nCurrentCPU];
if (cpu1_reset == 0) {
nCyclesDone[nCurrentCPU] += ZetRun(nCyclesSegment);
} else {
nCyclesDone[nCurrentCPU] += nCyclesSegment;
}
if (i == nInterleave - 2)
ZetSetIRQLine(0, CPU_IRQSTATUS_HOLD);
ZetClose();
// Run Z80 #2
if (tnzs_mcu_type() == MCU_NONE)
{
nCurrentCPU = 2;
ZetOpen(nCurrentCPU);
BurnTimerUpdate((i + 1) * (nCyclesTotal[nCurrentCPU] / nInterleave));
ZetClose();
}
if (pBurnSoundOut) {
INT32 nSegmentLength = nBurnSoundLen / nInterleave;
INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
INT16* pSoundBuf2 = SampleBuffer + (nSoundBufferPos << 1);
ZetOpen(2);
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) {
BurnYM2151Render(pSoundBuf, nSegmentLength);
}
kageki_sample_render(pSoundBuf2, nSegmentLength);
ZetClose();
nSoundBufferPos += nSegmentLength;
}
}
ZetOpen(2);
if (tnzs_mcu_type() == MCU_NONE) {
BurnTimerEndFrame(nCyclesTotal[2]);
}
if (pBurnSoundOut) {
INT32 nSegmentLength = nBurnSoundLen - nSoundBufferPos;
INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
INT16* pSoundBuf2 = SampleBuffer + (nSoundBufferPos << 1);
if (nSegmentLength) {
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) {
BurnYM2151Render(pSoundBuf, nSegmentLength);
}
kageki_sample_render(pSoundBuf2, nSegmentLength);
}
}
if (tnzs_mcu_type() != MCU_NONE_JPOPNICS) {
if (pBurnSoundOut) {
BurnYM2203Update(pBurnSoundOut, nBurnSoundLen);
DACUpdate(pBurnSoundOut, nBurnSoundLen);
for (INT32 i = 0; i < nBurnSoundLen; i++) {
pBurnSoundOut[(i << 1) + 0] += SampleBuffer[(i << 1) + 0];
pBurnSoundOut[(i << 1) + 1] += SampleBuffer[(i << 1) + 1];
}
}
}
ZetClose();
if (pBurnDraw) {
DrvDraw();
}
sprite_buffer(DrvObjCtrl[1]);
return 0;
}
static INT32 DrvScan(INT32 nAction,INT32 *pnMin)
{
struct BurnArea ba;
if (pnMin) {
*pnMin = 0x029730;
}
if (nAction & ACB_VOLATILE) {
ba.Data = AllRam;
ba.nLen = RamEnd - AllRam;
ba.szName = "All Ram";
BurnAcb(&ba);
ZetScan(nAction);
if (tnzs_mcu_type() == MCU_NONE_JPOPNICS) {
BurnYM2151Scan(nAction);
} else {
BurnYM2203Scan(nAction, pnMin);
}
DACScan(nAction, pnMin);
tnzs_mcu_scan();
SCAN_VAR(tnzs_banks);
SCAN_VAR(cpu1_reset);
SCAN_VAR(nAnalogAxis);
SCAN_VAR(kageki_csport_sel);
SCAN_VAR(kageki_sample_pos);
SCAN_VAR(kageki_sample_select);
}
if (nAction & ACB_WRITE) {
ZetOpen(0);
bankswitch0(tnzs_banks[0]);
ZetClose();
ZetOpen(1);
bankswitch1(tnzs_banks[1]);
ZetClose();
ZetOpen(2);
kabukiz_sound_bankswitch(0,tnzs_banks[2]);
ZetClose();
}
return 0;
}
// Plump Pop (Japan)
static struct BurnRomInfo plumppopRomDesc[] = {
{ "a98-09.bin", 0x10000, 0x107f9e06, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "a98-10.bin", 0x10000, 0xdf6e6af2, 1 | BRF_PRG | BRF_ESS }, // 1
{ "a98-11.bin", 0x10000, 0xbc56775c, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "plmp8742.bin", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "a98-01.bin", 0x10000, 0xf3033dca, 4 | BRF_GRA }, // 4 Graphics
{ "a98-02.bin", 0x10000, 0xf2d17b0c, 4 | BRF_GRA }, // 5
{ "a98-03.bin", 0x10000, 0x1a519b0a, 4 | BRF_GRA }, // 6
{ "a98-04.bin", 0x10000, 0xb64501a1, 4 | BRF_GRA }, // 7
{ "a98-05.bin", 0x10000, 0x45c36963, 4 | BRF_GRA }, // 8
{ "a98-06.bin", 0x10000, 0xe075341b, 4 | BRF_GRA }, // 9
{ "a98-07.bin", 0x10000, 0x8e16cd81, 4 | BRF_GRA }, // 10
{ "a98-08.bin", 0x10000, 0xbfa7609a, 4 | BRF_GRA }, // 11
{ "a98-13.bpr", 0x00200, 0x7cde2da5, 5 | BRF_GRA }, // 12 Color PROMs
{ "a98-12.bpr", 0x00200, 0x90dc9da7, 5 | BRF_GRA }, // 13
};
STD_ROM_PICK(plumppop)
STD_ROM_FN(plumppop)
static INT32 PlumppopInit()
{
return Type1Init(MCU_PLUMPOP);
}
struct BurnDriver BurnDrvPlumppop = {
"plumppop", NULL, NULL, NULL, "1987",
"Plump Pop (Japan)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
NULL, plumppopRomInfo, plumppopRomName, NULL, NULL, PlumppopInputInfo, PlumppopDIPInfo,
PlumppopInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// Extermination (World)
static struct BurnRomInfo extrmatnRomDesc[] = {
{ "b06-05.11c", 0x10000, 0x918e1fe3, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b06-06.9c", 0x10000, 0x8842e105, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b06-19.4e", 0x10000, 0x8de43ed9, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "extr8742.4f", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "b06-01.13a", 0x20000, 0xd2afbf7e, 4 | BRF_GRA }, // 4 Graphics
{ "b06-02.10a", 0x20000, 0xe0c2757a, 4 | BRF_GRA }, // 5
{ "b06-03.7a", 0x20000, 0xee80ab9d, 4 | BRF_GRA }, // 6
{ "b06-04.4a", 0x20000, 0x3697ace4, 4 | BRF_GRA }, // 7
{ "b06-09.15f", 0x00200, 0xf388b361, 5 | BRF_GRA }, // 8 Color PROMs
{ "b06-08.17f", 0x00200, 0x10c9aac3, 5 | BRF_GRA }, // 9
};
STD_ROM_PICK(extrmatn)
STD_ROM_FN(extrmatn)
static INT32 ExtrmatnInit()
{
return Type1Init(MCU_EXTRMATN);
}
struct BurnDriver BurnDrvExtrmatn = {
"extrmatn", NULL, NULL, NULL, "1987",
"Extermination (World)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_SHOOT, 0,
NULL, extrmatnRomInfo, extrmatnRomName, NULL, NULL, CommonInputInfo, ExtrmatnDIPInfo,
ExtrmatnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Extermination (US)
static struct BurnRomInfo extrmatuRomDesc[] = {
{ "b06-20.11c", 0x10000, 0x04e3fc1f, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b06-21.9c", 0x10000, 0x1614d6a2, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b06-22.4e", 0x10000, 0x744f2c84, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "extr8742.4f", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "b06-01.13a", 0x20000, 0xd2afbf7e, 4 | BRF_GRA }, // 4 Graphics
{ "b06-02.10a", 0x20000, 0xe0c2757a, 4 | BRF_GRA }, // 5
{ "b06-03.7a", 0x20000, 0xee80ab9d, 4 | BRF_GRA }, // 6
{ "b06-04.4a", 0x20000, 0x3697ace4, 4 | BRF_GRA }, // 7
{ "b06-09.15f", 0x00200, 0xf388b361, 5 | BRF_GRA }, // 8 Color PROMs
{ "b06-08.17f", 0x00200, 0x10c9aac3, 5 | BRF_GRA }, // 9
};
STD_ROM_PICK(extrmatu)
STD_ROM_FN(extrmatu)
struct BurnDriver BurnDrvExtrmatu = {
"extrmatnu", "extrmatn", NULL, NULL, "1987",
"Extermination (US)\0", NULL, "[Taito] World Games", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_SHOOT, 0,
NULL, extrmatuRomInfo, extrmatuRomName, NULL, NULL, CommonInputInfo, ExtrmatnDIPInfo,
ExtrmatnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Extermination (Japan)
static struct BurnRomInfo extrmatjRomDesc[] = {
{ "b06-05.11c", 0x10000, 0x918e1fe3, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b06-06.9c", 0x10000, 0x8842e105, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b06-07.4e", 0x10000, 0xb37fb8b3, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "extr8742.4f", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "b06-01.13a", 0x20000, 0xd2afbf7e, 4 | BRF_GRA }, // 4 Graphics
{ "b06-02.10a", 0x20000, 0xe0c2757a, 4 | BRF_GRA }, // 5
{ "b06-03.7a", 0x20000, 0xee80ab9d, 4 | BRF_GRA }, // 6
{ "b06-04.4a", 0x20000, 0x3697ace4, 4 | BRF_GRA }, // 7
{ "b06-09.15f", 0x00200, 0xf388b361, 5 | BRF_GRA }, // 8 Color PROMs
{ "b06-08.17f", 0x00200, 0x10c9aac3, 5 | BRF_GRA }, // 9
};
STD_ROM_PICK(extrmatj)
STD_ROM_FN(extrmatj)
struct BurnDriver BurnDrvExtrmatj = {
"extrmatnj", "extrmatn", NULL, NULL, "1987",
"Extermination (Japan)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_SHOOT, 0,
NULL, extrmatjRomInfo, extrmatjRomName, NULL, NULL, CommonInputInfo, ExtrmatnDIPInfo,
ExtrmatnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Arkanoid - Revenge of DOH (World)
static struct BurnRomInfo arknoid2RomDesc[] = {
{ "b08_05.11c", 0x10000, 0x136edf9d, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b08_13.3e", 0x10000, 0xe8035ef1, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "ark28742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 2 I8742 MCU
{ "b08-01.13a", 0x20000, 0x2ccc86b4, 4 | BRF_GRA }, // 3 Graphics
{ "b08-02.10a", 0x20000, 0x056a985f, 4 | BRF_GRA }, // 4
{ "b08-03.7a", 0x20000, 0x274a795f, 4 | BRF_GRA }, // 5
{ "b08-04.4a", 0x20000, 0x9754f703, 4 | BRF_GRA }, // 6
{ "b08-08.15f", 0x00200, 0xa4f7ebd9, 5 | BRF_GRA }, // 7 Color PROMs
{ "b08-07.16f", 0x00200, 0xea34d9f7, 5 | BRF_GRA }, // 8
};
STD_ROM_PICK(arknoid2)
STD_ROM_FN(arknoid2)
static INT32 Arknoid2Init()
{
return Type1Init(MCU_ARKANOID);
}
struct BurnDriver BurnDrvArknoid2 = {
"arknoid2", NULL, NULL, NULL, "1987",
"Arkanoid - Revenge of DOH (World)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
NULL, arknoid2RomInfo, arknoid2RomName, NULL, NULL, Arknoid2InputInfo, Arknoid2DIPInfo,
Arknoid2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Arkanoid - Revenge of DOH (US)
static struct BurnRomInfo arknid2uRomDesc[] = {
{ "b08_11.11c", 0x10000, 0x99555231, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b08_12.3e", 0x10000, 0xdc84e27d, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "ark28742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 2 I8742 MCU
{ "b08-01.13a", 0x20000, 0x2ccc86b4, 4 | BRF_GRA }, // 3 Graphics
{ "b08-02.10a", 0x20000, 0x056a985f, 4 | BRF_GRA }, // 4
{ "b08-03.7a", 0x20000, 0x274a795f, 4 | BRF_GRA }, // 5
{ "b08-04.4a", 0x20000, 0x9754f703, 4 | BRF_GRA }, // 6
{ "b08-08.15f", 0x00200, 0xa4f7ebd9, 5 | BRF_GRA }, // 7 Color PROMs
{ "b08-07.16f", 0x00200, 0xea34d9f7, 5 | BRF_GRA }, // 8
};
STD_ROM_PICK(arknid2u)
STD_ROM_FN(arknid2u)
struct BurnDriver BurnDrvArknid2u = {
"arknoid2u", "arknoid2", NULL, NULL, "1987",
"Arkanoid - Revenge of DOH (US)\0", NULL, "Taito America Corporation (Romstar license)", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
NULL, arknid2uRomInfo, arknid2uRomName, NULL, NULL, Arknoid2InputInfo, Arknid2uDIPInfo,
Arknoid2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Arkanoid - Revenge of DOH (Japan)
static struct BurnRomInfo arknid2jRomDesc[] = {
{ "b08_05.11c", 0x10000, 0x136edf9d, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b08_06.3e", 0x10000, 0xadfcd40c, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "ark28742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 2 I8742 MCU
{ "b08-01.13a", 0x20000, 0x2ccc86b4, 4 | BRF_GRA }, // 3 Graphics
{ "b08-02.10a", 0x20000, 0x056a985f, 4 | BRF_GRA }, // 4
{ "b08-03.7a", 0x20000, 0x274a795f, 4 | BRF_GRA }, // 5
{ "b08-04.4a", 0x20000, 0x9754f703, 4 | BRF_GRA }, // 6
{ "b08-08.15f", 0x00200, 0xa4f7ebd9, 5 | BRF_GRA }, // 7 Color PROMs
{ "b08-07.16f", 0x00200, 0xea34d9f7, 5 | BRF_GRA }, // 8
};
STD_ROM_PICK(arknid2j)
STD_ROM_FN(arknid2j)
struct BurnDriver BurnDrvArknid2j = {
"arknoid2j", "arknoid2", NULL, NULL, "1987",
"Arkanoid - Revenge of DOH (Japan)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
NULL, arknid2jRomInfo, arknid2jRomName, NULL, NULL, Arknoid2InputInfo, Arknid2uDIPInfo,
Arknoid2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Arkanoid - Revenge of DOH (Japan bootleg)
static struct BurnRomInfo arknid2bRomDesc[] = {
{ "boot.11c", 0x10000, 0x3847dfb0, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b08_13.3e", 0x10000, 0xe8035ef1, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "ark28742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 2 I8742 MCU
{ "b08-01.13a", 0x20000, 0x2ccc86b4, 4 | BRF_GRA }, // 3 Graphics
{ "b08-02.10a", 0x20000, 0x056a985f, 4 | BRF_GRA }, // 4
{ "b08-03.7a", 0x20000, 0x274a795f, 4 | BRF_GRA }, // 5
{ "b08-04.4a", 0x20000, 0x9754f703, 4 | BRF_GRA }, // 6
{ "b08-08.15f", 0x00200, 0xa4f7ebd9, 5 | BRF_GRA }, // 7 Color PROMs
{ "b08-07.16f", 0x00200, 0xea34d9f7, 5 | BRF_GRA }, // 8
};
STD_ROM_PICK(arknid2b)
STD_ROM_FN(arknid2b)
struct BurnDriver BurnDrvArknid2b = {
"arknoid2b", "arknoid2", NULL, NULL, "1987",
"Arkanoid - Revenge of DOH (Japan bootleg)\0", NULL, "bootleg", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
NULL, arknid2bRomInfo, arknid2bRomName, NULL, NULL, Arknoid2InputInfo, Arknid2uDIPInfo,
Arknoid2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Dr. Toppel's Adventure (World)
static struct BurnRomInfo drtoppelRomDesc[] = {
{ "b19-09.11c", 0x10000, 0x3e654f82, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b19-10.9c", 0x10000, 0x7e72fd25, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b19-15.3e", 0x10000, 0x37a0d3fb, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "drt8742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "b19-01.13a", 0x20000, 0xa7e8a0c1, 4 | BRF_GRA }, // 4 Graphics
{ "b19-02.12a", 0x20000, 0x790ae654, 4 | BRF_GRA }, // 5
{ "b19-03.10a", 0x20000, 0x495c4c5a, 4 | BRF_GRA }, // 6
{ "b19-04.8a", 0x20000, 0x647007a0, 4 | BRF_GRA }, // 7
{ "b19-05.7a", 0x20000, 0x49f2b1a5, 4 | BRF_GRA }, // 8
{ "b19-06.5a", 0x20000, 0x2d39f1d0, 4 | BRF_GRA }, // 9
{ "b19-07.4a", 0x20000, 0x8bb06f41, 4 | BRF_GRA }, // 10
{ "b19-08.2a", 0x20000, 0x3584b491, 4 | BRF_GRA }, // 11
{ "b19-13.15f", 0x00200, 0x6a547980, 5 | BRF_GRA }, // 12 Color PROMs
{ "b19-12.16f", 0x00200, 0x5754e9d8, 5 | BRF_GRA }, // 13
};
STD_ROM_PICK(drtoppel)
STD_ROM_FN(drtoppel)
static INT32 DrtoppelInit()
{
return Type1Init(MCU_DRTOPPEL);
}
struct BurnDriver BurnDrvDrtoppel = {
"drtoppel", NULL, NULL, NULL, "1987",
"Dr. Toppel's Adventure (World)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
NULL, drtoppelRomInfo, drtoppelRomName, NULL, NULL, CommonInputInfo, DrtoppelDIPInfo,
DrtoppelInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Dr. Toppel's Adventure (World, alt?)
// one byte different (db8f : 39 instead of 37) - possible of bad and/or hacked rom
static struct BurnRomInfo drtoppelaRomDesc[] = {
{ "b19-09.bin", 0x10000, 0x6364a970, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b19-10.9c", 0x10000, 0x7e72fd25, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b19-15.3e", 0x10000, 0x37a0d3fb, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "drt8742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "b19-01.13a", 0x20000, 0xa7e8a0c1, 4 | BRF_GRA }, // 4 Graphics
{ "b19-02.12a", 0x20000, 0x790ae654, 4 | BRF_GRA }, // 5
{ "b19-03.10a", 0x20000, 0x495c4c5a, 4 | BRF_GRA }, // 6
{ "b19-04.8a", 0x20000, 0x647007a0, 4 | BRF_GRA }, // 7
{ "b19-05.7a", 0x20000, 0x49f2b1a5, 4 | BRF_GRA }, // 8
{ "b19-06.5a", 0x20000, 0x2d39f1d0, 4 | BRF_GRA }, // 9
{ "b19-07.4a", 0x20000, 0x8bb06f41, 4 | BRF_GRA }, // 10
{ "b19-08.2a", 0x20000, 0x3584b491, 4 | BRF_GRA }, // 11
{ "b19-13.15f", 0x00200, 0x6a547980, 5 | BRF_GRA }, // 12 Color PROMs
{ "b19-12.16f", 0x00200, 0x5754e9d8, 5 | BRF_GRA }, // 13
};
STD_ROM_PICK(drtoppela)
STD_ROM_FN(drtoppela)
struct BurnDriver BurnDrvDrtoppela = {
"drtoppela", "drtoppel", NULL, NULL, "1987",
"Dr. Toppel's Adventure (World, alt?)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
NULL, drtoppelaRomInfo, drtoppelaRomName, NULL, NULL, CommonInputInfo, DrtoppelDIPInfo,
DrtoppelInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Dr. Toppel's Adventure (US)
static struct BurnRomInfo drtoppluRomDesc[] = {
{ "b19-09.11c", 0x10000, 0x3e654f82, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b19-10.9c", 0x10000, 0x7e72fd25, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b19-14.3e", 0x10000, 0x05565b22, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "drt8742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "b19-01.13a", 0x20000, 0xa7e8a0c1, 4 | BRF_GRA }, // 4 Graphics
{ "b19-02.12a", 0x20000, 0x790ae654, 4 | BRF_GRA }, // 5
{ "b19-03.10a", 0x20000, 0x495c4c5a, 4 | BRF_GRA }, // 6
{ "b19-04.8a", 0x20000, 0x647007a0, 4 | BRF_GRA }, // 7
{ "b19-05.7a", 0x20000, 0x49f2b1a5, 4 | BRF_GRA }, // 8
{ "b19-06.5a", 0x20000, 0x2d39f1d0, 4 | BRF_GRA }, // 9
{ "b19-07.4a", 0x20000, 0x8bb06f41, 4 | BRF_GRA }, // 10
{ "b19-08.2a", 0x20000, 0x3584b491, 4 | BRF_GRA }, // 11
{ "b19-13.15f", 0x00200, 0x6a547980, 5 | BRF_GRA }, // 12 Color PROMs
{ "b19-12.16f", 0x00200, 0x5754e9d8, 5 | BRF_GRA }, // 13
};
STD_ROM_PICK(drtopplu)
STD_ROM_FN(drtopplu)
struct BurnDriver BurnDrvDrtopplu = {
"drtoppelu", "drtoppel", NULL, NULL, "1987",
"Dr. Toppel's Adventure (US)\0", NULL, "Taito America Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
NULL, drtoppluRomInfo, drtoppluRomName, NULL, NULL, CommonInputInfo, DrtoppluDIPInfo,
DrtoppelInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Dr. Toppel's Tankentai (Japan)
static struct BurnRomInfo drtoppljRomDesc[] = {
{ "b19-09.11c", 0x10000, 0x3e654f82, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b19-10.9c", 0x10000, 0x7e72fd25, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b19-11.3e", 0x10000, 0x524dc249, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "drt8742.3g", 0x00800, 0x00000000, 3 | BRF_NODUMP }, // 3 I8742 MCU
{ "b19-01.13a", 0x20000, 0xa7e8a0c1, 4 | BRF_GRA }, // 4 Graphics
{ "b19-02.12a", 0x20000, 0x790ae654, 4 | BRF_GRA }, // 5
{ "b19-03.10a", 0x20000, 0x495c4c5a, 4 | BRF_GRA }, // 6
{ "b19-04.8a", 0x20000, 0x647007a0, 4 | BRF_GRA }, // 7
{ "b19-05.7a", 0x20000, 0x49f2b1a5, 4 | BRF_GRA }, // 8
{ "b19-06.5a", 0x20000, 0x2d39f1d0, 4 | BRF_GRA }, // 9
{ "b19-07.4a", 0x20000, 0x8bb06f41, 4 | BRF_GRA }, // 10
{ "b19-08.2a", 0x20000, 0x3584b491, 4 | BRF_GRA }, // 11
{ "b19-13.15f", 0x00200, 0x6a547980, 5 | BRF_GRA }, // 12 Color PROMs
{ "b19-12.16f", 0x00200, 0x5754e9d8, 5 | BRF_GRA }, // 13
};
STD_ROM_PICK(drtopplj)
STD_ROM_FN(drtopplj)
struct BurnDriver BurnDrvDrtopplj = {
"drtoppelj", "drtoppel", NULL, NULL, "1987",
"Dr. Toppel's Tankentai (Japan)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
NULL, drtoppljRomInfo, drtoppljRomName, NULL, NULL, CommonInputInfo, DrtoppluDIPInfo,
DrtoppelInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Kageki (US)
static struct BurnRomInfo kagekiRomDesc[] = {
{ "b35-16.11c", 0x10000, 0xa4e6fd58, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b35-10.9c", 0x10000, 0xb150457d, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b35-17.43e", 0x10000, 0xfdd9c246, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "b35-01.13a", 0x20000, 0x01d83a69, 4 | BRF_GRA }, // 3 Graphics
{ "b35-02.12a", 0x20000, 0xd8af47ac, 4 | BRF_GRA }, // 4
{ "b35-03.10a", 0x20000, 0x3cb68797, 4 | BRF_GRA }, // 5
{ "b35-04.8a", 0x20000, 0x71c03f91, 4 | BRF_GRA }, // 6
{ "b35-05.7a", 0x20000, 0xa4e20c08, 4 | BRF_GRA }, // 7
{ "b35-06.5a", 0x20000, 0x3f8ab658, 4 | BRF_GRA }, // 8
{ "b35-07.4a", 0x20000, 0x1b4af049, 4 | BRF_GRA }, // 9
{ "b35-08.2a", 0x20000, 0xdeb2268c, 4 | BRF_GRA }, // 10
{ "b35-15.98g", 0x10000, 0xe6212a0f, 6 | BRF_SND }, // 11 Samples
};
STD_ROM_PICK(kageki)
STD_ROM_FN(kageki)
static INT32 KagekiInit()
{
return Type1Init(MCU_NONE_KAGEKI);
}
struct BurnDriver BurnDrvKageki = {
"kageki", NULL, NULL, NULL, "1988",
"Kageki (US)\0", NULL, "Taito America Corporation (Romstar license)", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
NULL, kagekiRomInfo, kagekiRomName, NULL, NULL, CommonInputInfo, KagekiDIPInfo,
KagekiInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Kageki (Japan)
static struct BurnRomInfo kagekijRomDesc[] = {
{ "b35-09.11c", 0x10000, 0x829637d5, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b35-10.9c", 0x10000, 0xb150457d, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b35-11.43e", 0x10000, 0x64d093fc, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "b35-01.13a", 0x20000, 0x01d83a69, 4 | BRF_GRA }, // 3 Graphics
{ "b35-02.12a", 0x20000, 0xd8af47ac, 4 | BRF_GRA }, // 4
{ "b35-03.10a", 0x20000, 0x3cb68797, 4 | BRF_GRA }, // 5
{ "b35-04.8a", 0x20000, 0x71c03f91, 4 | BRF_GRA }, // 6
{ "b35-05.7a", 0x20000, 0xa4e20c08, 4 | BRF_GRA }, // 7
{ "b35-06.5a", 0x20000, 0x3f8ab658, 4 | BRF_GRA }, // 8
{ "b35-07.4a", 0x20000, 0x1b4af049, 4 | BRF_GRA }, // 9
{ "b35-08.2a", 0x20000, 0xdeb2268c, 4 | BRF_GRA }, // 10
{ "b35-12.98g", 0x10000, 0x184409f1, 6 | BRF_SND }, // 11 Samples
};
STD_ROM_PICK(kagekij)
STD_ROM_FN(kagekij)
struct BurnDriver BurnDrvKagekij = {
"kagekij", "kageki", NULL, NULL, "1988",
"Kageki (Japan)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
NULL, kagekijRomInfo, kagekijRomName, NULL, NULL, CommonInputInfo, KagekiDIPInfo,
KagekiInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Kageki (hack)
static struct BurnRomInfo kagekihRomDesc[] = {
{ "b35_16.11c", 0x10000, 0x1cf67603, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b35-10.9c", 0x10000, 0xb150457d, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b35-11.43e", 0x10000, 0x64d093fc, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "b35-01.13a", 0x20000, 0x01d83a69, 4 | BRF_GRA }, // 3 Graphics
{ "b35-02.12a", 0x20000, 0xd8af47ac, 4 | BRF_GRA }, // 4
{ "b35-03.10a", 0x20000, 0x3cb68797, 4 | BRF_GRA }, // 5
{ "b35-04.8a", 0x20000, 0x71c03f91, 4 | BRF_GRA }, // 6
{ "b35-05.7a", 0x20000, 0xa4e20c08, 4 | BRF_GRA }, // 7
{ "b35-06.5a", 0x20000, 0x3f8ab658, 4 | BRF_GRA }, // 8
{ "b35-07.4a", 0x20000, 0x1b4af049, 4 | BRF_GRA }, // 9
{ "b35-08.2a", 0x20000, 0xdeb2268c, 4 | BRF_GRA }, // 10
{ "b35-12.98g", 0x10000, 0x184409f1, 6 | BRF_SND }, // 11 Samples
};
STD_ROM_PICK(kagekih)
STD_ROM_FN(kagekih)
struct BurnDriver BurnDrvKagekih = {
"kagekih", "kageki", NULL, NULL, "1992",
"Kageki (hack)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
NULL, kagekihRomInfo, kagekihRomName, NULL, NULL, CommonInputInfo, KagekiDIPInfo,
KagekiInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
224, 256, 3, 4
};
// Chuka Taisen (World)
static struct BurnRomInfo chukataiRomDesc[] = {
{ "b44-10", 0x10000, 0x8c69e008, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b44-11", 0x10000, 0x32484094, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b44-12w", 0x10000, 0xe80ecdca, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "b44-8742.mcu", 0x00800, 0x7dff3f9f, 3 | BRF_PRG | BRF_OPT }, // 3 I8742 MCU
{ "b44-01.a13", 0x20000, 0xaae7b3d5, 4 | BRF_GRA }, // 4 Graphics
{ "b44-02.a12", 0x20000, 0x7f0b9568, 4 | BRF_GRA }, // 5
{ "b44-03.a10", 0x20000, 0x5a54a3b9, 4 | BRF_GRA }, // 6
{ "b44-04.a08", 0x20000, 0x3c5f544b, 4 | BRF_GRA }, // 7
{ "b44-05.a07", 0x20000, 0xd1b7e314, 4 | BRF_GRA }, // 8
{ "b44-06.a05", 0x20000, 0x269978a8, 4 | BRF_GRA }, // 9
{ "b44-07.a04", 0x20000, 0x3e0e737e, 4 | BRF_GRA }, // 10
{ "b44-08.a02", 0x20000, 0x6cb1e8fc, 4 | BRF_GRA }, // 11
};
STD_ROM_PICK(chukatai)
STD_ROM_FN(chukatai)
static INT32 ChukataiInit()
{
return Type1Init(MCU_CHUKATAI);
}
struct BurnDriver BurnDrvChukatai = {
"chukatai", NULL, NULL, NULL, "1988",
"Chuka Taisen (World)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
NULL, chukataiRomInfo, chukataiRomName, NULL, NULL, CommonInputInfo, ChukataiDIPInfo,
ChukataiInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// Chuka Taisen (US)
static struct BurnRomInfo chukatauRomDesc[] = {
{ "b44-10", 0x10000, 0x8c69e008, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b44-11", 0x10000, 0x32484094, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b44-12u", 0x10000, 0x9f09fd5c, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "b44-8742.mcu", 0x00800, 0x7dff3f9f, 3 | BRF_PRG | BRF_OPT }, // 3 I8742 MCU
{ "b44-01.a13", 0x20000, 0xaae7b3d5, 4 | BRF_GRA }, // 4 Graphics
{ "b44-02.a12", 0x20000, 0x7f0b9568, 4 | BRF_GRA }, // 5
{ "b44-03.a10", 0x20000, 0x5a54a3b9, 4 | BRF_GRA }, // 6
{ "b44-04.a08", 0x20000, 0x3c5f544b, 4 | BRF_GRA }, // 7
{ "b44-05.a07", 0x20000, 0xd1b7e314, 4 | BRF_GRA }, // 8
{ "b44-06.a05", 0x20000, 0x269978a8, 4 | BRF_GRA }, // 9
{ "b44-07.a04", 0x20000, 0x3e0e737e, 4 | BRF_GRA }, // 10
{ "b44-08.a02", 0x20000, 0x6cb1e8fc, 4 | BRF_GRA }, // 11
};
STD_ROM_PICK(chukatau)
STD_ROM_FN(chukatau)
struct BurnDriver BurnDrvChukatau = {
"chukataiu", "chukatai", NULL, NULL, "1988",
"Chuka Taisen (US)\0", NULL, "Taito America Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
NULL, chukatauRomInfo, chukatauRomName, NULL, NULL, CommonInputInfo, ChukatauDIPInfo,
ChukataiInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// Chuka Taisen (Japan)
static struct BurnRomInfo chukatajRomDesc[] = {
{ "b44-10", 0x10000, 0x8c69e008, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b44-11", 0x10000, 0x32484094, 1 | BRF_PRG | BRF_ESS }, // 1
{ "b44-12", 0x10000, 0x0600ace6, 2 | BRF_PRG | BRF_ESS }, // 2 Z80 #1 Code
{ "b44-8742.mcu", 0x00800, 0x7dff3f9f, 3 | BRF_PRG | BRF_OPT }, // 3 I8742 MCU
{ "b44-01.a13", 0x20000, 0xaae7b3d5, 4 | BRF_GRA }, // 4 Graphics
{ "b44-02.a12", 0x20000, 0x7f0b9568, 4 | BRF_GRA }, // 5
{ "b44-03.a10", 0x20000, 0x5a54a3b9, 4 | BRF_GRA }, // 6
{ "b44-04.a08", 0x20000, 0x3c5f544b, 4 | BRF_GRA }, // 7
{ "b44-05.a07", 0x20000, 0xd1b7e314, 4 | BRF_GRA }, // 8
{ "b44-06.a05", 0x20000, 0x269978a8, 4 | BRF_GRA }, // 9
{ "b44-07.a04", 0x20000, 0x3e0e737e, 4 | BRF_GRA }, // 10
{ "b44-08.a02", 0x20000, 0x6cb1e8fc, 4 | BRF_GRA }, // 11
};
STD_ROM_PICK(chukataj)
STD_ROM_FN(chukataj)
struct BurnDriver BurnDrvChukataj = {
"chukataij", "chukatai", NULL, NULL, "1988",
"Chuka Taisen (Japan)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
NULL, chukatajRomInfo, chukatajRomName, NULL, NULL, CommonInputInfo, ChukatauDIPInfo,
ChukataiInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// The NewZealand Story (World, newer)
static struct BurnRomInfo tnzsRomDesc[] = {
{ "b53-24.1", 0x20000, 0xd66824c6, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b53-25.3", 0x10000, 0xd6ac4e71, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b53-26.34", 0x10000, 0xcfd5649c, 3 | BRF_PRG | BRF_ESS }, // 2 Z80 #2 Code
{ "b53-16.8", 0x20000, 0xc3519c2a, 4 | BRF_GRA }, // 3 Graphics
{ "b53-17.7", 0x20000, 0x2bf199e8, 4 | BRF_GRA }, // 4
{ "b53-18.6", 0x20000, 0x92f35ed9, 4 | BRF_GRA }, // 5
{ "b53-19.5", 0x20000, 0xedbb9581, 4 | BRF_GRA }, // 6
{ "b53-22.4", 0x20000, 0x59d2aef6, 4 | BRF_GRA }, // 7
{ "b53-23.3", 0x20000, 0x74acfb9b, 4 | BRF_GRA }, // 8
{ "b53-20.2", 0x20000, 0x095d0dc0, 4 | BRF_GRA }, // 9
{ "b53-21.1", 0x20000, 0x9800c54d, 4 | BRF_GRA }, // 10
{ "b53-15.pal16l8a.subpcb.ic6.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 11 Pal
};
STD_ROM_PICK(tnzs)
STD_ROM_FN(tnzs)
struct BurnDriver BurnDrvtnzs = {
"tnzs", NULL, NULL, NULL, "1988",
"The NewZealand Story (World, newer)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
NULL, tnzsRomInfo, tnzsRomName, NULL, NULL, CommonInputInfo, TnzsDIPInfo,
Type2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// The NewZealand Story (Japan, newer)
static struct BurnRomInfo tnzsjRomDesc[] = {
{ "b53-24.1", 0x20000, 0xd66824c6, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b53-27.u3", 0x10000, 0xb3415fc3, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b53-26.34", 0x10000, 0xcfd5649c, 3 | BRF_PRG | BRF_ESS }, // 2 Z80 #2 Code
{ "b53-16.8", 0x20000, 0xc3519c2a, 4 | BRF_GRA }, // 3 Graphics
{ "b53-17.7", 0x20000, 0x2bf199e8, 4 | BRF_GRA }, // 4
{ "b53-18.6", 0x20000, 0x92f35ed9, 4 | BRF_GRA }, // 5
{ "b53-19.5", 0x20000, 0xedbb9581, 4 | BRF_GRA }, // 6
{ "b53-22.4", 0x20000, 0x59d2aef6, 4 | BRF_GRA }, // 7
{ "b53-23.3", 0x20000, 0x74acfb9b, 4 | BRF_GRA }, // 8
{ "b53-20.2", 0x20000, 0x095d0dc0, 4 | BRF_GRA }, // 9
{ "b53-21.1", 0x20000, 0x9800c54d, 4 | BRF_GRA }, // 10
{ "b53-15.pal16l8a.subpcb.ic6.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 11 Pal
};
STD_ROM_PICK(tnzsj)
STD_ROM_FN(tnzsj)
struct BurnDriver BurnDrvtnzsj = {
"tnzsj", "tnzs", NULL, NULL, "1988",
"The NewZealand Story (Japan, new version, newer PCB)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
NULL, tnzsjRomInfo, tnzsjRomName, NULL, NULL, CommonInputInfo, TnzsjDIPInfo,
Type2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// The NewZealand Story (Japan, old version) (older PCB)
static struct BurnRomInfo tnzsjoRomDesc[] = {
{ "b53-10.u32", 0x20000, 0xa73745c6, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b53-11.u38", 0x10000, 0x9784d443, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b53-09.u46", 0x00800, 0xa4bfce19, 3 | BRF_PRG | BRF_OPT }, // 2 I8742 MCU
{ "b53-08.8", 0x20000, 0xc3519c2a, 4 | BRF_GRA }, // 3 Graphics
{ "b53-07.7", 0x20000, 0x2bf199e8, 4 | BRF_GRA }, // 4
{ "b53-06.6", 0x20000, 0x92f35ed9, 4 | BRF_GRA }, // 5
{ "b53-05.5", 0x20000, 0xedbb9581, 4 | BRF_GRA }, // 6
{ "b53-04.4", 0x20000, 0x59d2aef6, 4 | BRF_GRA }, // 7
{ "b53-03.3", 0x20000, 0x74acfb9b, 4 | BRF_GRA }, // 8
{ "b53-02.2", 0x20000, 0x095d0dc0, 4 | BRF_GRA }, // 9
{ "b53-01.1", 0x20000, 0x9800c54d, 4 | BRF_GRA }, // 10
/* these are marked b06 and so are probably shared with extermination */
{ "b06-12.pal16l8a.ic26.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 11 Pal
{ "b06-13.pal16l8a.ic25.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 12
{ "b06-14.pal16x8a.icxx.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 13 // does this chip exist?
};
STD_ROM_PICK(tnzsjo)
STD_ROM_FN(tnzsjo)
static INT32 TnzsoInit()
{
return Type1Init(MCU_TNZS);
}
struct BurnDriver BurnDrvTnzsjo = {
"tnzsjo", "tnzs", NULL, NULL, "1988",
"The NewZealand Story (Japan, old version) (older PCB)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
NULL, tnzsjoRomInfo, tnzsjoRomName, NULL, NULL, CommonInputInfo, TnzsjoDIPInfo,
TnzsoInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// The NewZealand Story (World, old version) (older PCB)
static struct BurnRomInfo tnzsoRomDesc[] = {
{ "u32", 0x20000, 0xedf3b39e, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "u38", 0x10000, 0x60340d63, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b53-09.u46", 0x00800, 0xa4bfce19, 3 | BRF_PRG | BRF_OPT }, // 2 I8742 MCU
{ "b53-08.8", 0x20000, 0xc3519c2a, 4 | BRF_GRA }, // 3 Graphics
{ "b53-07.7", 0x20000, 0x2bf199e8, 4 | BRF_GRA }, // 4
{ "b53-06.6", 0x20000, 0x92f35ed9, 4 | BRF_GRA }, // 5
{ "b53-05.5", 0x20000, 0xedbb9581, 4 | BRF_GRA }, // 6
{ "b53-04.4", 0x20000, 0x59d2aef6, 4 | BRF_GRA }, // 7
{ "b53-03.3", 0x20000, 0x74acfb9b, 4 | BRF_GRA }, // 8
{ "b53-02.2", 0x20000, 0x095d0dc0, 4 | BRF_GRA }, // 9
{ "b53-01.1", 0x20000, 0x9800c54d, 4 | BRF_GRA }, // 10
/* PALS not directly observed on this board but assumed to exist */
/* these are marked b06 and so are probably shared with extermination */
{ "b06-12.pal16l8a.ic26.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 11 Pal
{ "b06-13.pal16l8a.ic25.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 12
{ "b06-14.pal16x8a.icxx.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 13 // does this chip exist?
};
STD_ROM_PICK(tnzso)
STD_ROM_FN(tnzso)
struct BurnDriver BurnDrvTnzso = {
"tnzso", "tnzs", NULL, NULL, "1988",
"The NewZealand Story (World, old version) (older PCB)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
NULL, tnzsoRomInfo, tnzsoRomName, NULL, NULL, CommonInputInfo, TnzsopDIPInfo,
TnzsoInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// The NewZealand Story (World, prototype?) (older PCB)
static struct BurnRomInfo tnzsopRomDesc[] = {
{ "ns_c-11.rom", 0x20000, 0x3c1dae7b, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "ns_e-3.rom", 0x10000, 0xc7662e96, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b53-09.u46", 0x00800, 0xa4bfce19, 3 | BRF_PRG | BRF_OPT }, // 2 I8742 MCU
{ "ns_a13.rom", 0x20000, 0x7e0bd5bb, 4 | BRF_GRA }, // 3 Graphics
{ "ns_a12.rom", 0x20000, 0x95880726, 4 | BRF_GRA }, // 4
{ "ns_a10.rom", 0x20000, 0x2bc4c053, 4 | BRF_GRA }, // 5
{ "ns_a08.rom", 0x20000, 0x8ff8d88c, 4 | BRF_GRA }, // 6
{ "ns_a07.rom", 0x20000, 0x291bcaca, 4 | BRF_GRA }, // 7
{ "ns_a05.rom", 0x20000, 0x6e762e20, 4 | BRF_GRA }, // 8
{ "ns_a04.rom", 0x20000, 0xe1fd1b9d, 4 | BRF_GRA }, // 9
{ "ns_a02.rom", 0x20000, 0x2ab06bda, 4 | BRF_GRA }, // 10
/* PALS not directly observed on this board but assumed to exist */
/* these are marked b06 and so are probably shared with extermination */
{ "b06-12.pal16l8a.ic26.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 11 Pal
{ "b06-13.pal16l8a.ic25.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 12
{ "b06-14.pal16x8a.icxx.jed", 0x01000, 0x00000000, 5 | BRF_OPT | BRF_NODUMP }, // 13 // does this chip exist?
};
STD_ROM_PICK(tnzsop)
STD_ROM_FN(tnzsop)
struct BurnDriver BurnDrvTnzsop = {
"tnzsop", "tnzs", NULL, NULL, "1988",
"The NewZealand Story (World, prototype?) (older PCB)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
NULL, tnzsopRomInfo, tnzsopRomName, NULL, NULL, CommonInputInfo, TnzsopDIPInfo,
TnzsoInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// Kabuki-Z (World)
static struct BurnRomInfo kabukizRomDesc[] = {
{ "b50-05.u1", 0x20000, 0x9cccb129, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b50-08.1e", 0x10000, 0xcb92d34c, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b50-07.u34", 0x20000, 0xbf7fc2ed, 3 | BRF_PRG | BRF_ESS }, // 2 Z80 #2 Code
{ "b50-04.u35", 0x80000, 0x04829aa9, 4 | BRF_GRA }, // 3 Graphics
{ "b50-03.u39", 0x80000, 0x31489a4c, 4 | BRF_GRA }, // 4
{ "b50-02.u43", 0x80000, 0x90b8a8e7, 4 | BRF_GRA }, // 5
{ "b50-01.u46", 0x80000, 0xf4277751, 4 | BRF_GRA }, // 6
};
STD_ROM_PICK(kabukiz)
STD_ROM_FN(kabukiz)
struct BurnDriverD BurnDrvKabukiz = {
"kabukiz", NULL, NULL, NULL, "1988",
"Kabuki-Z (World)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
NULL, kabukizRomInfo, kabukizRomName, NULL, NULL, CommonInputInfo, KabukizDIPInfo,
Type2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// Kabuki-Z (Japan)
static struct BurnRomInfo kabukizjRomDesc[] = {
{ "b50-05.u1", 0x20000, 0x9cccb129, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b50-06.u3", 0x10000, 0x45650aab, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b50-07.u34", 0x20000, 0xbf7fc2ed, 3 | BRF_PRG | BRF_ESS }, // 2 Z80 #2 Code
{ "b50-04.u35", 0x80000, 0x04829aa9, 4 | BRF_GRA }, // 3 Graphics
{ "b50-03.u39", 0x80000, 0x31489a4c, 4 | BRF_GRA }, // 4
{ "b50-02.u43", 0x80000, 0x90b8a8e7, 4 | BRF_GRA }, // 5
{ "b50-01.u46", 0x80000, 0xf4277751, 4 | BRF_GRA }, // 6
};
STD_ROM_PICK(kabukizj)
STD_ROM_FN(kabukizj)
struct BurnDriverD BurnDrvKabukizj = {
"kabukizj", "kabukiz", NULL, NULL, "1988",
"Kabuki-Z (Japan)\0", NULL, "Taito Corporation", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
NULL, kabukizjRomInfo, kabukizjRomName, NULL, NULL, CommonInputInfo, KabukizjDIPInfo,
Type2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// Insector X (World)
static struct BurnRomInfo insectxRomDesc[] = {
{ "b97-03.u32", 0x20000, 0x18eef387, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "b97-07.u38", 0x10000, 0x324b28c9, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "b97-01.u1", 0x80000, 0xd00294b1, 4 | BRF_GRA }, // 2 Graphics
{ "b97-02.u2", 0x80000, 0xdb5a7434, 4 | BRF_GRA }, // 3
};
STD_ROM_PICK(insectx)
STD_ROM_FN(insectx)
static INT32 InsectxInit()
{
return Type1Init(MCU_NONE_INSECTX);
}
struct BurnDriver BurnDrvInsectx = {
"insectx", NULL, NULL, NULL, "1989",
"Insector X (World)\0", NULL, "Taito Corporation Japan", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
NULL, insectxRomInfo, insectxRomName, NULL, NULL, InsectxInputInfo, InsectxDIPInfo,
InsectxInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};
// Jumping Pop (Nics, Korean bootleg of Plump Pop)
static struct BurnRomInfo jpopnicsRomDesc[] = {
{ "u96cpu2", 0x20000, 0x649e951c, 1 | BRF_PRG | BRF_ESS }, // 0 Z80 #0 Code
{ "u124cpu1", 0x10000, 0x8453e8e4, 2 | BRF_PRG | BRF_ESS }, // 1 Z80 #1 Code
{ "u94gfx", 0x20000, 0xe49f2fdd, 4 | BRF_GRA }, // 2 Graphics
{ "u93gfx", 0x20000, 0xa7791b5b, 4 | BRF_GRA }, // 3
{ "u92gfx", 0x20000, 0xb30caac7, 4 | BRF_GRA }, // 4
{ "u91gfx", 0x20000, 0x18ada5f2, 4 | BRF_GRA }, // 5
};
STD_ROM_PICK(jpopnics)
STD_ROM_FN(jpopnics)
static INT32 JpopnicsInit()
{
return Type1Init(MCU_NONE_JPOPNICS);
}
struct BurnDriver BurnDrvJpopnics = {
"jpopnics", NULL, NULL, NULL, "1992",
"Jumping Pop (Nics, Korean bootleg of Plump Pop)\0", NULL, "Nics", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
NULL, jpopnicsRomInfo, jpopnicsRomName, NULL, NULL, JpopnicsInputInfo, JpopnicsDIPInfo,
JpopnicsInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x200,
256, 224, 4, 3
};