3954 lines
111 KiB
C++
3954 lines
111 KiB
C++
|
|
/*
|
|
known bugs:
|
|
violent storm:
|
|
background layer #2 on intro (bad guy on motorcycle), bottom clipped??
|
|
|
|
metamorphic force
|
|
(possible) rotation/zoom layer offsets ok? circle stuff on second area part of zoom/rot? offset wrong?
|
|
background in lava level is too fast. (irq?)
|
|
|
|
martial champ
|
|
why are the sprite positions messed up? protection?
|
|
|
|
unkown bugs.
|
|
probably a lot! go ahead and fix it!
|
|
|
|
to do:
|
|
fix bugs
|
|
clean up
|
|
optimize
|
|
save states - done(dink)
|
|
*/
|
|
|
|
#include "tiles_generic.h"
|
|
#include "m68000_intf.h"
|
|
#include "z80_intf.h"
|
|
#include "konamiic.h"
|
|
#include "burn_ym2151.h"
|
|
#include "k054539.h"
|
|
#include "eeprom.h"
|
|
|
|
#if defined _MSC_VER
|
|
#define _USE_MATH_DEFINES
|
|
#include <cmath>
|
|
#endif
|
|
|
|
static UINT8 *AllMem;
|
|
static UINT8 *Drv68KROM;
|
|
static UINT8 *DrvZ80ROM;
|
|
static UINT8 *DrvGfxROM0;
|
|
static UINT8 *DrvGfxROM1;
|
|
static UINT8 *DrvGfxROM2;
|
|
static UINT8 *DrvGfxROM3;
|
|
static UINT8 *DrvGfxROMExp0;
|
|
static UINT8 *DrvGfxROMExp1;
|
|
static UINT8 *DrvGfxROMExp2;
|
|
static UINT8 *DrvSndROM;
|
|
static UINT8 *DrvEeprom;
|
|
static UINT8 *AllRam;
|
|
static UINT8 *Drv68KRAM;
|
|
static UINT8 *DrvSpriteRam;
|
|
static UINT8 *DrvZ80RAM;
|
|
static UINT8 *DrvPalRAM;
|
|
static UINT8 *DrvK053936Ctrl;
|
|
static UINT8 *DrvK053936RAM;
|
|
static UINT8 *RamEnd;
|
|
static UINT8 *MemEnd;
|
|
|
|
static UINT16 *pMystwarrRozBitmap = NULL;
|
|
|
|
static UINT8 *soundlatch;
|
|
static UINT8 *soundlatch2;
|
|
static UINT8 *soundlatch3;
|
|
|
|
static UINT32 *DrvPalette;
|
|
static UINT8 DrvRecalc;
|
|
|
|
static INT32 layer_colorbase[4];
|
|
static INT32 sprite_colorbase = 0;
|
|
static INT32 sub1_colorbase;
|
|
static INT32 cbparam;
|
|
static INT32 oinprion;
|
|
|
|
static UINT8 DrvJoy1[16];
|
|
static UINT8 DrvJoy2[16];
|
|
static UINT8 DrvJoy3[16];
|
|
static UINT8 DrvJoy4[16];
|
|
static UINT8 DrvJoy5[16];
|
|
static UINT8 DrvReset;
|
|
static UINT16 DrvInputs[6];
|
|
static UINT8 DrvDips[1];
|
|
|
|
static INT32 sound_nmi_enable = 0;
|
|
static UINT8 sound_control = 0;
|
|
static UINT16 control_data = 0;
|
|
static UINT8 mw_irq_control = 0;
|
|
static INT32 z80_bank;
|
|
|
|
static INT32 nGame = 0;
|
|
|
|
static struct BurnInputInfo MystwarrInputList[] = {
|
|
{"P1 Coin", BIT_DIGITAL, DrvJoy1 + 0, "p1 coin"},
|
|
{"P1 Start", BIT_DIGITAL, DrvJoy3 + 7, "p1 start"},
|
|
{"P1 Up", BIT_DIGITAL, DrvJoy3 + 2, "p1 up"},
|
|
{"P1 Down", BIT_DIGITAL, DrvJoy3 + 3, "p1 down"},
|
|
{"P1 Left", BIT_DIGITAL, DrvJoy3 + 0, "p1 left"},
|
|
{"P1 Right", BIT_DIGITAL, DrvJoy3 + 1, "p1 right"},
|
|
{"P1 Button 1", BIT_DIGITAL, DrvJoy3 + 4, "p1 fire 1"},
|
|
{"P1 Button 2", BIT_DIGITAL, DrvJoy3 + 5, "p1 fire 2"},
|
|
{"P1 Button 3", BIT_DIGITAL, DrvJoy3 + 6, "p1 fire 3"},
|
|
|
|
{"P2 Coin", BIT_DIGITAL, DrvJoy1 + 1, "p2 coin"},
|
|
{"P2 Start", BIT_DIGITAL, DrvJoy4 + 7, "p2 start"},
|
|
{"P2 Up", BIT_DIGITAL, DrvJoy4 + 2, "p2 up"},
|
|
{"P2 Down", BIT_DIGITAL, DrvJoy4 + 3, "p2 down"},
|
|
{"P2 Left", BIT_DIGITAL, DrvJoy4 + 0, "p2 left"},
|
|
{"P2 Right", BIT_DIGITAL, DrvJoy4 + 1, "p2 right"},
|
|
{"P2 Button 1", BIT_DIGITAL, DrvJoy4 + 4, "p2 fire 1"},
|
|
{"P2 Button 2", BIT_DIGITAL, DrvJoy4 + 5, "p2 fire 2"},
|
|
{"P2 Button 3", BIT_DIGITAL, DrvJoy4 + 6, "p2 fire 3"},
|
|
|
|
{"P3 Coin", BIT_DIGITAL, DrvJoy1 + 2, "p3 coin"},
|
|
{"P3 Start", BIT_DIGITAL, DrvJoy3 + 15, "p3 start"},
|
|
{"P3 Up", BIT_DIGITAL, DrvJoy3 + 10, "p3 up"},
|
|
{"P3 Down", BIT_DIGITAL, DrvJoy3 + 11, "p3 down"},
|
|
{"P3 Left", BIT_DIGITAL, DrvJoy3 + 8, "p3 left"},
|
|
{"P3 Right", BIT_DIGITAL, DrvJoy3 + 9, "p3 right"},
|
|
{"P3 Button 1", BIT_DIGITAL, DrvJoy3 + 12, "p3 fire 1"},
|
|
{"P3 Button 2", BIT_DIGITAL, DrvJoy3 + 13, "p3 fire 2"},
|
|
{"P3 Button 3", BIT_DIGITAL, DrvJoy3 + 14, "p3 fire 3"},
|
|
|
|
{"P4 Coin", BIT_DIGITAL, DrvJoy1 + 3, "p4 coin"},
|
|
{"P4 Start", BIT_DIGITAL, DrvJoy4 + 15, "p4 start"},
|
|
{"P4 Up", BIT_DIGITAL, DrvJoy4 + 10, "p4 up"},
|
|
{"P4 Down", BIT_DIGITAL, DrvJoy4 + 11, "p4 down"},
|
|
{"P4 Left", BIT_DIGITAL, DrvJoy4 + 8, "p4 left"},
|
|
{"P4 Right", BIT_DIGITAL, DrvJoy4 + 9, "p4 right"},
|
|
{"P4 Button 1", BIT_DIGITAL, DrvJoy4 + 12, "p4 fire 1"},
|
|
{"P4 Button 2", BIT_DIGITAL, DrvJoy4 + 13, "p4 fire 2"},
|
|
{"P4 Button 3", BIT_DIGITAL, DrvJoy4 + 14, "p4 fire 3"},
|
|
|
|
{"Reset", BIT_DIGITAL, &DrvReset, "reset"},
|
|
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip"},
|
|
};
|
|
|
|
STDINPUTINFO(Mystwarr)
|
|
|
|
static struct BurnInputInfo MetamrphInputList[] = {
|
|
{"P1 Coin", BIT_DIGITAL, DrvJoy1 + 0, "p1 coin"},
|
|
{"P1 Start", BIT_DIGITAL, DrvJoy3 + 7, "p1 start"},
|
|
{"P1 Up", BIT_DIGITAL, DrvJoy3 + 2, "p1 up"},
|
|
{"P1 Down", BIT_DIGITAL, DrvJoy3 + 3, "p1 down"},
|
|
{"P1 Left", BIT_DIGITAL, DrvJoy3 + 0, "p1 left"},
|
|
{"P1 Right", BIT_DIGITAL, DrvJoy3 + 1, "p1 right"},
|
|
{"P1 Button 1", BIT_DIGITAL, DrvJoy3 + 4, "p1 fire 1"},
|
|
{"P1 Button 2", BIT_DIGITAL, DrvJoy3 + 5, "p1 fire 2"},
|
|
{"P1 Button 3", BIT_DIGITAL, DrvJoy3 + 6, "p1 fire 3"},
|
|
|
|
{"P2 Coin", BIT_DIGITAL, DrvJoy1 + 1, "p2 coin"},
|
|
{"P2 Start", BIT_DIGITAL, DrvJoy4 + 7, "p2 start"},
|
|
{"P2 Up", BIT_DIGITAL, DrvJoy4 + 2, "p2 up"},
|
|
{"P2 Down", BIT_DIGITAL, DrvJoy4 + 3, "p2 down"},
|
|
{"P2 Left", BIT_DIGITAL, DrvJoy4 + 0, "p2 left"},
|
|
{"P2 Right", BIT_DIGITAL, DrvJoy4 + 1, "p2 right"},
|
|
{"P2 Button 1", BIT_DIGITAL, DrvJoy4 + 4, "p2 fire 1"},
|
|
{"P2 Button 2", BIT_DIGITAL, DrvJoy4 + 5, "p2 fire 2"},
|
|
{"P2 Button 3", BIT_DIGITAL, DrvJoy4 + 6, "p2 fire 3"},
|
|
|
|
{"P3 Start", BIT_DIGITAL, DrvJoy3 + 15, "p3 start"},
|
|
{"P3 Up", BIT_DIGITAL, DrvJoy3 + 10, "p3 up"},
|
|
{"P3 Down", BIT_DIGITAL, DrvJoy3 + 11, "p3 down"},
|
|
{"P3 Left", BIT_DIGITAL, DrvJoy3 + 8, "p3 left"},
|
|
{"P3 Right", BIT_DIGITAL, DrvJoy3 + 9, "p3 right"},
|
|
{"P3 Button 1", BIT_DIGITAL, DrvJoy3 + 12, "p3 fire 1"},
|
|
{"P3 Button 2", BIT_DIGITAL, DrvJoy3 + 13, "p3 fire 2"},
|
|
{"P3 Button 3", BIT_DIGITAL, DrvJoy3 + 14, "p3 fire 3"},
|
|
|
|
{"P4 Start", BIT_DIGITAL, DrvJoy4 + 15, "p4 start"},
|
|
{"P4 Up", BIT_DIGITAL, DrvJoy4 + 10, "p4 up"},
|
|
{"P4 Down", BIT_DIGITAL, DrvJoy4 + 11, "p4 down"},
|
|
{"P4 Left", BIT_DIGITAL, DrvJoy4 + 8, "p4 left"},
|
|
{"P4 Right", BIT_DIGITAL, DrvJoy4 + 9, "p4 right"},
|
|
{"P4 Button 1", BIT_DIGITAL, DrvJoy4 + 12, "p4 fire 1"},
|
|
{"P4 Button 2", BIT_DIGITAL, DrvJoy4 + 13, "p4 fire 2"},
|
|
{"P4 Button 3", BIT_DIGITAL, DrvJoy4 + 14, "p4 fire 3"},
|
|
|
|
{"Reset", BIT_DIGITAL, &DrvReset, "reset"},
|
|
{"Service 1", BIT_DIGITAL, DrvJoy1 + 4, "service"},
|
|
{"Service 2", BIT_DIGITAL, DrvJoy1 + 5, "service"},
|
|
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip"},
|
|
};
|
|
|
|
STDINPUTINFO(Metamrph)
|
|
|
|
static struct BurnInputInfo ViostormInputList[] = {
|
|
{"P1 Coin", BIT_DIGITAL, DrvJoy1 + 0, "p1 coin"},
|
|
{"P1 Start", BIT_DIGITAL, DrvJoy3 + 7, "p1 start"},
|
|
{"P1 Up", BIT_DIGITAL, DrvJoy3 + 2, "p1 up"},
|
|
{"P1 Down", BIT_DIGITAL, DrvJoy3 + 3, "p1 down"},
|
|
{"P1 Left", BIT_DIGITAL, DrvJoy3 + 0, "p1 left"},
|
|
{"P1 Right", BIT_DIGITAL, DrvJoy3 + 1, "p1 right"},
|
|
{"P1 Button 1", BIT_DIGITAL, DrvJoy3 + 4, "p1 fire 1"},
|
|
{"P1 Button 2", BIT_DIGITAL, DrvJoy3 + 5, "p1 fire 2"},
|
|
{"P1 Button 3", BIT_DIGITAL, DrvJoy3 + 6, "p1 fire 3"},
|
|
|
|
{"P2 Coin", BIT_DIGITAL, DrvJoy1 + 1, "p2 coin"},
|
|
{"P2 Start", BIT_DIGITAL, DrvJoy4 + 7, "p2 start"},
|
|
{"P2 Up", BIT_DIGITAL, DrvJoy4 + 2, "p2 up"},
|
|
{"P2 Down", BIT_DIGITAL, DrvJoy4 + 3, "p2 down"},
|
|
{"P2 Left", BIT_DIGITAL, DrvJoy4 + 0, "p2 left"},
|
|
{"P2 Right", BIT_DIGITAL, DrvJoy4 + 1, "p2 right"},
|
|
{"P2 Button 1", BIT_DIGITAL, DrvJoy4 + 4, "p2 fire 1"},
|
|
{"P2 Button 2", BIT_DIGITAL, DrvJoy4 + 5, "p2 fire 2"},
|
|
{"P2 Button 3", BIT_DIGITAL, DrvJoy4 + 6, "p2 fire 3"},
|
|
|
|
{"P3 Start", BIT_DIGITAL, DrvJoy3 + 15, "p3 start"},
|
|
{"P3 Up", BIT_DIGITAL, DrvJoy3 + 10, "p3 up"},
|
|
{"P3 Down", BIT_DIGITAL, DrvJoy3 + 11, "p3 down"},
|
|
{"P3 Left", BIT_DIGITAL, DrvJoy3 + 8, "p3 left"},
|
|
{"P3 Right", BIT_DIGITAL, DrvJoy3 + 9, "p3 right"},
|
|
{"P3 Button 1", BIT_DIGITAL, DrvJoy3 + 12, "p3 fire 1"},
|
|
{"P3 Button 2", BIT_DIGITAL, DrvJoy3 + 13, "p3 fire 2"},
|
|
{"P3 Button 3", BIT_DIGITAL, DrvJoy3 + 14, "p3 fire 3"},
|
|
|
|
{"P4 Start", BIT_DIGITAL, DrvJoy4 + 15, "p4 start"},
|
|
{"P4 Up", BIT_DIGITAL, DrvJoy4 + 10, "p4 up"},
|
|
{"P4 Down", BIT_DIGITAL, DrvJoy4 + 11, "p4 down"},
|
|
{"P4 Left", BIT_DIGITAL, DrvJoy4 + 8, "p4 left"},
|
|
{"P4 Right", BIT_DIGITAL, DrvJoy4 + 9, "p4 right"},
|
|
{"P4 Button 1", BIT_DIGITAL, DrvJoy4 + 12, "p4 fire 1"},
|
|
{"P4 Button 2", BIT_DIGITAL, DrvJoy4 + 13, "p4 fire 2"},
|
|
{"P4 Button 3", BIT_DIGITAL, DrvJoy4 + 14, "p4 fire 3"},
|
|
|
|
{"Reset", BIT_DIGITAL, &DrvReset, "reset"},
|
|
{"Service 1", BIT_DIGITAL, DrvJoy1 + 4, "service"},
|
|
{"Service 2", BIT_DIGITAL, DrvJoy1 + 5, "service"},
|
|
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip"},
|
|
};
|
|
|
|
STDINPUTINFO(Viostorm)
|
|
|
|
static struct BurnInputInfo DadandrnInputList[] = {
|
|
{"P1 Coin", BIT_DIGITAL, DrvJoy1 + 8, "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"},
|
|
{"P1 Button 3", BIT_DIGITAL, DrvJoy1 + 6, "p1 fire 3"},
|
|
|
|
{"P2 Coin", BIT_DIGITAL, DrvJoy1 + 9, "p2 coin"},
|
|
{"P2 Start", BIT_DIGITAL, DrvJoy3 + 7, "p2 start"},
|
|
{"P2 Up", BIT_DIGITAL, DrvJoy3 + 2, "p2 up"},
|
|
{"P2 Down", BIT_DIGITAL, DrvJoy3 + 3, "p2 down"},
|
|
{"P2 Left", BIT_DIGITAL, DrvJoy3 + 0, "p2 left"},
|
|
{"P2 Right", BIT_DIGITAL, DrvJoy3 + 1, "p2 right"},
|
|
{"P2 Button 1", BIT_DIGITAL, DrvJoy3 + 4, "p2 fire 1"},
|
|
{"P2 Button 2", BIT_DIGITAL, DrvJoy3 + 5, "p2 fire 2"},
|
|
{"P2 Button 3", BIT_DIGITAL, DrvJoy3 + 6, "p2 fire 3"},
|
|
|
|
{"P3 Start", BIT_DIGITAL, DrvJoy4 + 7, "p3 start"},
|
|
{"P3 Up", BIT_DIGITAL, DrvJoy4 + 2, "p3 up"},
|
|
{"P3 Down", BIT_DIGITAL, DrvJoy4 + 3, "p3 down"},
|
|
{"P3 Left", BIT_DIGITAL, DrvJoy4 + 0, "p3 left"},
|
|
{"P3 Right", BIT_DIGITAL, DrvJoy4 + 1, "p3 right"},
|
|
{"P3 Button 1", BIT_DIGITAL, DrvJoy4 + 4, "p3 fire 1"},
|
|
{"P3 Button 2", BIT_DIGITAL, DrvJoy4 + 5, "p3 fire 2"},
|
|
{"P3 Button 3", BIT_DIGITAL, DrvJoy4 + 6, "p3 fire 3"},
|
|
|
|
{"P4 Start", BIT_DIGITAL, DrvJoy5 + 7, "p4 start"},
|
|
{"P4 Up", BIT_DIGITAL, DrvJoy5 + 2, "p4 up"},
|
|
{"P4 Down", BIT_DIGITAL, DrvJoy5 + 3, "p4 down"},
|
|
{"P4 Left", BIT_DIGITAL, DrvJoy5 + 0, "p4 left"},
|
|
{"P4 Right", BIT_DIGITAL, DrvJoy5 + 1, "p4 right"},
|
|
{"P4 Button 1", BIT_DIGITAL, DrvJoy5 + 4, "p4 fire 1"},
|
|
{"P4 Button 2", BIT_DIGITAL, DrvJoy5 + 5, "p4 fire 2"},
|
|
{"P4 Button 3", BIT_DIGITAL, DrvJoy5 + 6, "p4 fire 3"},
|
|
|
|
{"Reset", BIT_DIGITAL, &DrvReset, "reset"},
|
|
{"Service 1", BIT_DIGITAL, DrvJoy1 + 12, "service"},
|
|
{"Service 2", BIT_DIGITAL, DrvJoy1 + 13, "service"},
|
|
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip"},
|
|
};
|
|
|
|
STDINPUTINFO(Dadandrn)
|
|
|
|
static struct BurnInputInfo MartchmpInputList[] = {
|
|
{"P1 Coin", BIT_DIGITAL, DrvJoy1 + 0, "p1 coin"},
|
|
{"P1 Start", BIT_DIGITAL, DrvJoy3 + 7, "p1 start"},
|
|
{"P1 Up", BIT_DIGITAL, DrvJoy3 + 2, "p1 up"},
|
|
{"P1 Down", BIT_DIGITAL, DrvJoy3 + 3, "p1 down"},
|
|
{"P1 Left", BIT_DIGITAL, DrvJoy3 + 0, "p1 left"},
|
|
{"P1 Right", BIT_DIGITAL, DrvJoy3 + 1, "p1 right"},
|
|
{"P1 Button 1", BIT_DIGITAL, DrvJoy3 + 4, "p1 fire 1"},
|
|
{"P1 Button 2", BIT_DIGITAL, DrvJoy3 + 5, "p1 fire 2"},
|
|
{"P1 Button 3", BIT_DIGITAL, DrvJoy3 + 6, "p1 fire 3"},
|
|
|
|
{"P2 Coin", BIT_DIGITAL, DrvJoy1 + 1, "p2 coin"},
|
|
{"P2 Start", BIT_DIGITAL, DrvJoy4 + 7, "p2 start"},
|
|
{"P2 Up", BIT_DIGITAL, DrvJoy4 + 2, "p2 up"},
|
|
{"P2 Down", BIT_DIGITAL, DrvJoy4 + 3, "p2 down"},
|
|
{"P2 Left", BIT_DIGITAL, DrvJoy4 + 0, "p2 left"},
|
|
{"P2 Right", BIT_DIGITAL, DrvJoy4 + 1, "p2 right"},
|
|
{"P2 Button 1", BIT_DIGITAL, DrvJoy4 + 4, "p2 fire 1"},
|
|
{"P2 Button 2", BIT_DIGITAL, DrvJoy4 + 5, "p2 fire 2"},
|
|
{"P2 Button 3", BIT_DIGITAL, DrvJoy4 + 6, "p2 fire 3"},
|
|
|
|
{"P3 Start", BIT_DIGITAL, DrvJoy3 + 15, "p3 start"},
|
|
{"P3 Up", BIT_DIGITAL, DrvJoy3 + 10, "p3 up"},
|
|
{"P3 Down", BIT_DIGITAL, DrvJoy3 + 11, "p3 down"},
|
|
{"P3 Left", BIT_DIGITAL, DrvJoy3 + 8, "p3 left"},
|
|
{"P3 Right", BIT_DIGITAL, DrvJoy3 + 9, "p3 right"},
|
|
{"P3 Button 1", BIT_DIGITAL, DrvJoy3 + 12, "p3 fire 1"},
|
|
{"P3 Button 2", BIT_DIGITAL, DrvJoy3 + 13, "p3 fire 2"},
|
|
{"P3 Button 3", BIT_DIGITAL, DrvJoy3 + 14, "p3 fire 3"},
|
|
|
|
{"P4 Start", BIT_DIGITAL, DrvJoy4 + 15, "p4 start"},
|
|
{"P4 Up", BIT_DIGITAL, DrvJoy4 + 10, "p4 up"},
|
|
{"P4 Down", BIT_DIGITAL, DrvJoy4 + 11, "p4 down"},
|
|
{"P4 Left", BIT_DIGITAL, DrvJoy4 + 8, "p4 left"},
|
|
{"P4 Right", BIT_DIGITAL, DrvJoy4 + 9, "p4 right"},
|
|
{"P4 Button 1", BIT_DIGITAL, DrvJoy4 + 12, "p4 fire 1"},
|
|
{"P4 Button 2", BIT_DIGITAL, DrvJoy4 + 13, "p4 fire 2"},
|
|
{"P4 Button 3", BIT_DIGITAL, DrvJoy4 + 14, "p4 fire 3"},
|
|
|
|
{"Reset", BIT_DIGITAL, &DrvReset, "reset"},
|
|
{"Service 1", BIT_DIGITAL, DrvJoy1 + 4, "service"},
|
|
{"Service 2", BIT_DIGITAL, DrvJoy1 + 5, "service"},
|
|
{"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip"},
|
|
};
|
|
|
|
STDINPUTINFO(Martchmp)
|
|
|
|
static struct BurnDIPInfo MystwarrDIPList[]=
|
|
{
|
|
{0x25, 0xff, 0xff, 0xe4, NULL },
|
|
|
|
{0 , 0xfe, 0 , 2, "Service Mode" },
|
|
{0x25, 0x01, 0x04, 0x04, "Off" },
|
|
{0x25, 0x01, 0x04, 0x00, "On" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Sound Output" },
|
|
{0x25, 0x01, 0x10, 0x10, "Mono" },
|
|
{0x25, 0x01, 0x10, 0x00, "Stereo" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Coin Mechanism" },
|
|
{0x25, 0x01, 0x20, 0x20, "Common" },
|
|
{0x25, 0x01, 0x20, 0x00, "Independent" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Number of Players" },
|
|
{0x25, 0x01, 0x40, 0x00, "4" },
|
|
{0x25, 0x01, 0x40, 0x40, "2" },
|
|
};
|
|
|
|
STDDIPINFO(Mystwarr)
|
|
|
|
static struct BurnDIPInfo MetamrphDIPList[]=
|
|
{
|
|
{0x25, 0xff, 0xff, 0xe8, NULL },
|
|
|
|
{0 , 0xfe, 0 , 2, "Service Mode" },
|
|
{0x25, 0x01, 0x08, 0x08, "Off" },
|
|
{0x25, 0x01, 0x08, 0x00, "On" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Sound Output" },
|
|
{0x25, 0x01, 0x10, 0x10, "Mono" },
|
|
{0x25, 0x01, 0x10, 0x00, "Stereo" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Coin Mechanism" },
|
|
{0x25, 0x01, 0x20, 0x20, "Common" },
|
|
{0x25, 0x01, 0x20, 0x00, "Independent" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Number of Players" },
|
|
{0x25, 0x01, 0x40, 0x00, "4" },
|
|
{0x25, 0x01, 0x40, 0x40, "2" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Continuous Energy Increment" },
|
|
{0x25, 0x01, 0x80, 0x80, "No" },
|
|
{0x25, 0x01, 0x80, 0x00, "Yes" },
|
|
};
|
|
|
|
STDDIPINFO(Metamrph)
|
|
|
|
|
|
static struct BurnDIPInfo ViostormDIPList[]=
|
|
{
|
|
{0x25, 0xff, 0xff, 0xe8, NULL },
|
|
|
|
{0 , 0xfe, 0 , 2, "Service Mode" },
|
|
{0x25, 0x01, 0x08, 0x08, "Off" },
|
|
{0x25, 0x01, 0x08, 0x00, "On" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Sound Output" },
|
|
{0x25, 0x01, 0x10, 0x10, "Mono" },
|
|
{0x25, 0x01, 0x10, 0x00, "Stereo" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Flip Screen" },
|
|
{0x25, 0x01, 0x20, 0x20, "Off" },
|
|
{0x25, 0x01, 0x20, 0x00, "On" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Coin Mechanism" },
|
|
{0x25, 0x01, 0x40, 0x40, "Common" },
|
|
{0x25, 0x01, 0x40, 0x00, "Independent" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Number of Players" },
|
|
{0x25, 0x01, 0x80, 0x00, "3" },
|
|
{0x25, 0x01, 0x80, 0x80, "2" },
|
|
};
|
|
|
|
STDDIPINFO(Viostorm)
|
|
|
|
static struct BurnDIPInfo DadandrnDIPList[]=
|
|
{
|
|
{0x25, 0xff, 0xff, 0xe8, NULL },
|
|
|
|
{0 , 0xfe, 0 , 2, "Service Mode" },
|
|
{0x25, 0x01, 0x08, 0x08, "Off" },
|
|
{0x25, 0x01, 0x08, 0x00, "On" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Sound Output" },
|
|
{0x25, 0x01, 0x10, 0x10, "Mono" },
|
|
{0x25, 0x01, 0x10, 0x00, "Stereo" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Flip Screen" },
|
|
{0x25, 0x01, 0x20, 0x20, "Off" },
|
|
{0x25, 0x01, 0x20, 0x00, "On" },
|
|
};
|
|
|
|
STDDIPINFO(Dadandrn)
|
|
|
|
static struct BurnDIPInfo MartchmpDIPList[]=
|
|
{
|
|
{0x25, 0xff, 0xff, 0xe4, NULL },
|
|
|
|
{0 , 0xfe, 0 , 2, "Service Mode" },
|
|
{0x25, 0x01, 0x04, 0x04, "Off" },
|
|
{0x25, 0x01, 0x04, 0x00, "On" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Sound Output" },
|
|
{0x25, 0x01, 0x10, 0x10, "Mono" },
|
|
{0x25, 0x01, 0x10, 0x00, "Stereo" },
|
|
|
|
{0 , 0xfe, 0 , 2, "Flip Screen" },
|
|
{0x25, 0x01, 0x20, 0x20, "Off" },
|
|
{0x25, 0x01, 0x20, 0x00, "On" },
|
|
};
|
|
|
|
STDDIPINFO(Martchmp)
|
|
|
|
static void __fastcall mystwarr_main_write_word(UINT32 address, UINT16 data)
|
|
{
|
|
if ((address & 0xff0000) == 0x400000) {
|
|
if ((address & 0xf0) == 0)
|
|
K053247WriteWord(((address & 0x000e) | ((address & 0xff00) >> 4)), data);
|
|
|
|
*((UINT16*)(DrvSpriteRam + (address & 0xfffe))) = data;
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x480000) {
|
|
K055555WordWrite(address, data >> 8);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x482010) {
|
|
K053247WriteRegsWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x484000) {
|
|
K053246Write((address & 0x06) + 0, data >> 8);
|
|
K053246Write((address & 0x06) + 1, data&0xff);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x48a000) {
|
|
K054338WriteWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x48c000) {
|
|
K056832WordWrite(address & 0x3e, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x49c000) {
|
|
// k053252
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x600000) {
|
|
K056832RamWriteWord(address, data);
|
|
return;
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x49e004: // rom read enable
|
|
K056832WritebRegsWord(address & 0x0f, data);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void __fastcall mystwarr_main_write_byte(UINT32 address, UINT8 data)
|
|
{
|
|
if ((address & 0xff0000) == 0x400000) {
|
|
if ((address & 0xf0) == 0)
|
|
K053247Write(((address & 0x000e) | ((address & 0xff00) >> 4) | (address & 1))^1, data);
|
|
|
|
DrvSpriteRam[(address & 0xffff)^1] = data;
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x480000) {
|
|
K055555ByteWrite(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x482010) {
|
|
K053247WriteRegsByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x484000) {
|
|
K053246Write((address & 0x7)^0, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x48a000) {
|
|
K054338WriteByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x48c000) {
|
|
K056832ByteWrite(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x49c000) {
|
|
// k053252
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x600000) {
|
|
K056832RamWriteByte(address, data);
|
|
return;
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x490000:
|
|
EEPROMWrite((data & 0x04), (data & 0x02), (data & 0x01));
|
|
return;
|
|
|
|
case 0x492000:
|
|
return; // watchdog
|
|
|
|
case 0x49800c:
|
|
case 0x49800d:
|
|
*soundlatch = data;
|
|
return;
|
|
|
|
case 0x49800e:
|
|
case 0x49800f:
|
|
*soundlatch2 = data;
|
|
return;
|
|
|
|
case 0x49a000:
|
|
case 0x49a001:
|
|
ZetSetIRQLine(0, ZET_IRQSTATUS_ACK);
|
|
return;
|
|
|
|
case 0x49e004:
|
|
case 0x49e005: // rom read enable
|
|
K056832WritebRegsByte(address & 0x0f, data);
|
|
break;
|
|
|
|
case 0x49e007:
|
|
mw_irq_control = data; // correct!
|
|
return;
|
|
}
|
|
}
|
|
|
|
static UINT16 __fastcall mystwarr_main_read_word(UINT32 address)
|
|
{
|
|
if ((address & 0xffc000) == 0x600000) {
|
|
return K056832RamReadWord(address);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x494000:
|
|
return DrvInputs[2];
|
|
|
|
case 0x494002:
|
|
return DrvInputs[3];
|
|
|
|
case 0x496000:
|
|
return DrvInputs[0] & 0xff;
|
|
|
|
case 0x496002:
|
|
return (DrvInputs[1] & 0xf4) | 2 | (EEPROMRead() ? 0x01 : 0);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
static UINT8 __fastcall mystwarr_main_read_byte(UINT32 address)
|
|
{
|
|
if ((address & 0xffc000) == 0x600000) {
|
|
return K056832RamReadByte(address);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x494000:
|
|
return DrvInputs[2] >> 8;
|
|
|
|
case 0x494001:
|
|
return DrvInputs[2];
|
|
|
|
case 0x494002:
|
|
return DrvInputs[3] >> 8;
|
|
|
|
case 0x494003:
|
|
return DrvInputs[3];
|
|
|
|
case 0x496000:
|
|
return DrvInputs[0] >> 8;
|
|
|
|
case 0x496001:
|
|
return DrvInputs[0];
|
|
|
|
case 0x496002:
|
|
return DrvInputs[1] >> 8;
|
|
|
|
case 0x496003:
|
|
return ((DrvInputs[1]) & 0xf4) | 2 | (EEPROMRead() ? 0x01 : 0);
|
|
|
|
case 0x498015:
|
|
if ((*soundlatch3 & 0xf) == 0xe) return *soundlatch3 | 1;
|
|
return *soundlatch3;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
static UINT16 prot_data[0x20];
|
|
|
|
static UINT16 K055550_word_read(INT32 offset)
|
|
{
|
|
return prot_data[(offset/2)&0x1f];
|
|
}
|
|
|
|
static void K055550_word_write(INT32 offset, UINT16 data, UINT16 mask)
|
|
{
|
|
offset = (offset & 0x3e) / 2;
|
|
|
|
UINT32 adr, bsize, count, i, lim;
|
|
INT32 src, tgt, srcend, tgtend, skip, cx1, sx1, wx1, cy1, sy1, wy1, cz1, sz1, wz1, c2, s2, w2;
|
|
INT32 dx, dy, angle;
|
|
|
|
if (offset == 0 && (mask & 0x00ff))
|
|
{
|
|
if (mask == 0xffff) data >>= 8;
|
|
|
|
switch (data)
|
|
{
|
|
case 0x97: // memset() (Dadandarn at 0x639dc)
|
|
case 0x9f: // memset() (Violent Storm at 0x989c)
|
|
adr = (prot_data[7] << 16) | prot_data[8];
|
|
bsize = (prot_data[10] << 16) | prot_data[11];
|
|
count = (prot_data[0] & 0xff) + 1;
|
|
|
|
lim = adr+bsize*count;
|
|
|
|
for(i=adr; i<lim; i+=2)
|
|
SekWriteWord(i, prot_data[0x1a/2]);
|
|
break;
|
|
|
|
// WARNING: The following cases are speculation based with questionable accuracy!(AAT)
|
|
|
|
case 0x87: // unknown memory write (Violent Storm at 0x00b6ea)
|
|
// Violent Storm writes the following data to the 55550 in mode 0x87.
|
|
// All values are hardcoded and the write happens each frame during
|
|
// gameplay. It refers to a 32x8-word list at 0x210e00 and seems to
|
|
// be tied with another 13x128-byte table at 0x205080.
|
|
// Both tables appear "check-only" and have little effect on gameplay.
|
|
count =(prot_data[0] & 0xff) + 1; // unknown ( byte 0x00)
|
|
i = prot_data[1]; // unknown ( byte 0x1f)
|
|
adr = prot_data[7]<<16 | prot_data[8]; // address (dword 0x210e00)
|
|
lim = prot_data[9]; // unknown ( word 0x0010)
|
|
src = prot_data[10]<<16 | prot_data[11]; // unknown (dword zero)
|
|
tgt = prot_data[12]<<16 | prot_data[13]; // unknown (dword zero)
|
|
break;
|
|
|
|
case 0xa0: // update collision detection table (Violent Storm at 0x018b42)
|
|
count = prot_data[0] & 0xff; // number of objects - 1
|
|
skip = prot_data[1]>>(8-1); // words to skip in each entry to reach the "hit list"
|
|
adr = prot_data[2]<<16 | prot_data[3]; // where the table is located
|
|
bsize = prot_data[5]<<16 | prot_data[6]; // object entry size in bytes
|
|
|
|
srcend = adr + bsize * count;
|
|
tgtend = srcend + bsize;
|
|
|
|
// let's hope GCC will inline the mem24bew calls
|
|
for (src=adr; src<srcend; src+=bsize)
|
|
{
|
|
cx1 = (INT16)SekReadWord(src);
|
|
sx1 = (INT16)SekReadWord(src + 2);
|
|
wx1 = (INT16)SekReadWord(src + 4);
|
|
|
|
cy1 = (INT16)SekReadWord(src + 6);
|
|
sy1 = (INT16)SekReadWord(src + 8);
|
|
wy1 = (INT16)SekReadWord(src +10);
|
|
|
|
cz1 = (INT16)SekReadWord(src +12);
|
|
sz1 = (INT16)SekReadWord(src +14);
|
|
wz1 = (INT16)SekReadWord(src +16);
|
|
|
|
count = i = src + skip;
|
|
tgt = src + bsize;
|
|
|
|
for (; count<(UINT32)tgt; count++) SekWriteByte(count, 0);
|
|
|
|
for (; tgt<tgtend; i++, tgt+=bsize)
|
|
{
|
|
c2 = (INT16)SekReadWord(tgt);
|
|
s2 = (INT16)SekReadWord(tgt + 2);
|
|
w2 = (INT16)SekReadWord(tgt + 4);
|
|
if (abs((cx1+sx1)-(c2+s2))>=wx1+w2) continue; // X rejection
|
|
|
|
c2 = (INT16)SekReadWord(tgt + 6);
|
|
s2 = (INT16)SekReadWord(tgt + 8);
|
|
w2 = (INT16)SekReadWord(tgt +10);
|
|
if (abs((cy1+sy1)-(c2+s2))>=wy1+w2) continue; // Y rejection
|
|
|
|
c2 = (INT16)SekReadWord(tgt +12);
|
|
s2 = (INT16)SekReadWord(tgt +14);
|
|
w2 = (INT16)SekReadWord(tgt +16);
|
|
if (abs((cz1+sz1)-(c2+s2))>=wz1+w2) continue; // Z rejection
|
|
|
|
SekWriteByte(i, 0x80); // collision confirmed
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 0xc0: // calculate object "homes-in" vector (Violent Storm at 0x03da9e)
|
|
dx = (INT16)prot_data[0xc];
|
|
dy = (INT16)prot_data[0xd];
|
|
|
|
// it's not necessary to use lookup tables because Violent Storm
|
|
// only calls the service once per enemy per frame.
|
|
if (dx)
|
|
{
|
|
if (dy)
|
|
{
|
|
angle = (INT32)((atan((double)dy / dx) * 128.0) / M_PI);
|
|
if (dx < 0) angle += 128;
|
|
i = (angle - 0x40) & 0xff;
|
|
}
|
|
else
|
|
i = (dx > 0) ? 0xc0 : 0x40;
|
|
}
|
|
else
|
|
if (dy > 0) i = 0;
|
|
else
|
|
if (dy < 0) i = 0x80;
|
|
else
|
|
i = rand() & 0xff; // vector direction indeterminate
|
|
|
|
prot_data[0x10] = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void __fastcall metamrph_main_write_word(UINT32 address, UINT16 data)
|
|
{
|
|
if ((address & 0xfff000) == 0x210000) {
|
|
K053247Write(address & 0xffe, data | (1<<16));
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x240000) {
|
|
K053246Write((address & 0x06) + 0, data >> 8);
|
|
K053246Write((address & 0x06) + 1, data&0xff);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x244010) {
|
|
K053247WriteRegsWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x250000) {
|
|
K053250RegWrite(0, address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x254000) {
|
|
K054338WriteWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x258000) {
|
|
// bprintf (0, _T("WW %5.5x, %2.2x\n"), address, data);
|
|
K055555WordWrite(address, data >> 8);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x260000) {
|
|
// bprintf (0, _T("k053252 word wo: %5.5x, %4.4x\n"), address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x26c000) {
|
|
// AM_RANGE(0x26c000, 0x26c007) AM_DEVWRITE("k056832", k056832_device,b_word_w)
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x270000) {
|
|
K056832WordWrite(address & 0x3e, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x300000) {
|
|
K056832RamWriteWord(address & 0x1fff, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x25c000) {
|
|
prot_data[(address & 0x3f)/2] = data;
|
|
K055550_word_write(address, data, 0xffff);
|
|
return;
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x264000:
|
|
case 0x264001:
|
|
ZetSetIRQLine(0, ZET_IRQSTATUS_ACK);
|
|
return;
|
|
|
|
case 0x26800c:
|
|
case 0x26800d:
|
|
*soundlatch = data;
|
|
return;
|
|
|
|
case 0x26800e:
|
|
case 0x26800f:
|
|
*soundlatch2 = data;
|
|
return;
|
|
|
|
case 0x27c000:
|
|
case 0x27c001:
|
|
EEPROMWrite((data & 0x04), (data & 0x02), (data & 0x01));
|
|
return;
|
|
}
|
|
}
|
|
|
|
static void __fastcall metamrph_main_write_byte(UINT32 address, UINT8 data)
|
|
{
|
|
if ((address & 0xfff000) == 0x210000) {
|
|
K053247Write((address & 0xfff) ^ 1, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x240000) {
|
|
K053246Write((address & 0x07) ^ 0, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x244010) {
|
|
K053247WriteRegsByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x250000) {
|
|
K053250RegWrite(0, address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x254000) {
|
|
K054338WriteByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x258000) {
|
|
K055555ByteWrite(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x260000) {
|
|
//bprintf (0, _T("k053252 byte wo: %5.5x, %4.4x\n"), address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x26c000) {
|
|
// AM_RANGE(0x26c000, 0x26c007) AM_DEVWRITE("k056832", k056832_device,b_word_w)
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x270000) {
|
|
K056832ByteWrite(address & 0x3f, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x300000) {
|
|
K056832RamWriteByte(address & 0x1fff, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x25c000) {
|
|
UINT8 *prot = (UINT8*)prot_data;
|
|
prot[(address & 0x3f) ^ 1] = data;
|
|
K055550_word_write(address, data, 0xff << ((address & 1) * 8));
|
|
return;
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x264000:
|
|
case 0x264001:
|
|
ZetSetIRQLine(0, ZET_IRQSTATUS_ACK);
|
|
return;
|
|
|
|
case 0x26800c:
|
|
case 0x26800d:
|
|
*soundlatch = data;
|
|
return;
|
|
|
|
case 0x26800e:
|
|
case 0x26800f:
|
|
*soundlatch2 = data;
|
|
return;
|
|
|
|
case 0x27c000:
|
|
case 0x27c001:
|
|
EEPROMWrite((data & 0x04), (data & 0x02), (data & 0x01));
|
|
return;
|
|
}
|
|
}
|
|
|
|
static UINT16 __fastcall metamrph_main_read_word(UINT32 address)
|
|
{
|
|
if ((address & 0xfff000) == 0x210000) {
|
|
return K053247Read((address & 0xffe)|1)*256+K053247Read((address & 0xffe)|0);
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x250000) {
|
|
return K053250RegRead(0, address);
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x260000) {
|
|
// bprintf (0, _T("k053252 word ro: %5.5x\n"), address);
|
|
return 0;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x300000) {
|
|
return K056832RamReadWord(address & 0x1fff);
|
|
}
|
|
|
|
if ((address & 0xffe000) == 0x310000) {
|
|
return 0; // mw_rom_word_r
|
|
}
|
|
|
|
if ((address & 0xffe000) == 0x320000) {
|
|
return K053250RomRead(0, address);
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x25c000) {
|
|
return K055550_word_read(address);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x274000:
|
|
case 0x274001:
|
|
return DrvInputs[2];
|
|
|
|
case 0x274002:
|
|
case 0x274003:
|
|
return DrvInputs[3];
|
|
|
|
case 0x278000:
|
|
case 0x278001:
|
|
return DrvInputs[0];
|
|
|
|
case 0x278002:
|
|
case 0x278003:
|
|
return (DrvInputs[1] & 0xfff8) | 2 | (EEPROMRead() ? 0x0001 : 0);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static UINT8 __fastcall metamrph_main_read_byte(UINT32 address)
|
|
{
|
|
if ((address & 0xfff000) == 0x210000) {
|
|
return K053247Read((address & 0xfff)^1);
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x250000) {
|
|
return K053250RegRead(0, address) >> ((~address & 1) * 8);
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x260000) {
|
|
bprintf (0, _T("k053252 word ro: %5.5x\n"), address);
|
|
return 0;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x300000) {
|
|
return K056832RamReadByte(address & 0x1fff);
|
|
}
|
|
|
|
if ((address & 0xffe000) == 0x310000) {
|
|
return 0; // mw_rom_word_r
|
|
}
|
|
|
|
if ((address & 0xffe000) == 0x320000) {
|
|
return K053250RomRead(0, address) >> ((~address & 1) * 8);
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x25c000) {
|
|
return K055550_word_read(address) >> ((~address & 1) * 8);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x268014:
|
|
case 0x268015:
|
|
if ((*soundlatch3 & 0xf)==0xe) return *soundlatch3|1;
|
|
return *soundlatch3;
|
|
|
|
case 0x274000:
|
|
return DrvInputs[2] >> 8;
|
|
|
|
case 0x274001:
|
|
return DrvInputs[2];
|
|
|
|
case 0x274002:
|
|
return DrvInputs[3] >> 8;
|
|
|
|
case 0x274003:
|
|
return DrvInputs[3];
|
|
|
|
case 0x278000:
|
|
return DrvInputs[0] >> 8;
|
|
|
|
case 0x278001:
|
|
return DrvInputs[0];
|
|
|
|
case 0x278002:
|
|
return DrvInputs[1] >> 8;
|
|
|
|
case 0x278003:
|
|
return (DrvInputs[1] & 0xfff8) | 2 | (EEPROMRead() ? 0x01 : 0);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
|
|
static void K053990_word_write(INT32 offset, UINT16 /*data*/, UINT16 mask)
|
|
{
|
|
offset = (offset & 0x3e) / 2;
|
|
|
|
INT32 src_addr, src_count, src_skip;
|
|
INT32 dst_addr, /*dst_count,*/ dst_skip;
|
|
INT32 mod_addr, mod_count, mod_skip, mod_offs;
|
|
INT32 mode, i, element_size = 1;
|
|
UINT16 mod_val, mod_data;
|
|
|
|
if (offset == 0x0c && (mask & 0x00ff))
|
|
{
|
|
mode = ((prot_data[0x0d]<<8) & 0xff00) | (prot_data[0x0f] & 0xff);
|
|
|
|
switch (mode)
|
|
{
|
|
case 0xffff: // word copy
|
|
element_size = 2;
|
|
case 0xff00: // byte copy
|
|
src_addr = prot_data[0x0];
|
|
src_addr |= prot_data[0x1]<<16 & 0xff0000;
|
|
dst_addr = prot_data[0x2];
|
|
dst_addr |= prot_data[0x3]<<16 & 0xff0000;
|
|
src_count = prot_data[0x8]>>8;
|
|
//dst_count = prot_data[0x9]>>8;
|
|
src_skip = prot_data[0xa] & 0xff;
|
|
dst_skip = prot_data[0xb] & 0xff;
|
|
|
|
if ((prot_data[0x8] & 0xff) == 2) src_count <<= 1;
|
|
src_skip += element_size;
|
|
dst_skip += element_size;
|
|
|
|
if (element_size == 1)
|
|
for (i=src_count; i; i--)
|
|
{
|
|
SekWriteByte(dst_addr, SekReadByte(src_addr));
|
|
src_addr += src_skip;
|
|
dst_addr += dst_skip;
|
|
}
|
|
else for (i=src_count; i; i--)
|
|
{
|
|
SekWriteWord(dst_addr, SekReadWord(src_addr));
|
|
src_addr += src_skip;
|
|
dst_addr += dst_skip;
|
|
}
|
|
break;
|
|
|
|
case 0x00ff: // sprite list modifier
|
|
src_addr = prot_data[0x0];
|
|
src_addr |= prot_data[0x1]<<16 & 0xff0000;
|
|
src_skip = prot_data[0x1]>>8;
|
|
dst_addr = prot_data[0x2];
|
|
dst_addr |= prot_data[0x3]<<16 & 0xff0000;
|
|
dst_skip = prot_data[0x3]>>8;
|
|
mod_addr = prot_data[0x4];
|
|
mod_addr |= prot_data[0x5]<<16 & 0xff0000;
|
|
mod_skip = prot_data[0x5]>>8;
|
|
mod_offs = prot_data[0x8] & 0xff;
|
|
mod_offs<<= 1;
|
|
mod_count = 0x100;
|
|
|
|
src_addr += mod_offs;
|
|
dst_addr += mod_offs;
|
|
|
|
for (i=mod_count; i; i--)
|
|
{
|
|
mod_val = SekReadWord(mod_addr);
|
|
mod_addr += mod_skip;
|
|
|
|
mod_data = SekReadWord(src_addr);
|
|
src_addr += src_skip;
|
|
|
|
mod_data += mod_val;
|
|
|
|
SekWriteWord(dst_addr, mod_data);
|
|
dst_addr += dst_skip;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
|
|
static void __fastcall martchmp_main_write_word(UINT32 address, UINT16 data)
|
|
{
|
|
if ((address & 0xffff00) == 0x400000) {
|
|
K055555WordWrite(address, data >> 8);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x402010) {
|
|
K053247WriteRegsWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x404000) {
|
|
K053246Write((address & 0x06) + 0, data >> 8);
|
|
K053246Write((address & 0x06) + 1, data&0xff);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x40a000) {
|
|
K054338WriteWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x40c000) {
|
|
K056832WordWrite(address & 0x3e, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x40e000) {
|
|
prot_data[(address & 0x3e)/2] = data;
|
|
K053990_word_write(address, data, 0xffff);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x41c000) {
|
|
// k053252
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x41e000) {
|
|
// k056832 b_word_w
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x480000) {
|
|
if ((address & 0x30) == 0)
|
|
K053247WriteWord(((address & 0x000e) | ((address & 0x3FC0) >> 2)), data);
|
|
|
|
*((UINT16*)(DrvSpriteRam + (address & 0x3ffe))) = data;
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x680000) {
|
|
K056832RamWriteWord(address & 0x1fff, data);
|
|
return;
|
|
}
|
|
}
|
|
|
|
static void __fastcall martchmp_main_write_byte(UINT32 address, UINT8 data)
|
|
{
|
|
if ((address & 0xffff00) == 0x400000) {
|
|
K055555ByteWrite(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x402010) {
|
|
K053247WriteRegsByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x404000) {
|
|
K053246Write((address & 0x07) ^ 0, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x40a000) {
|
|
K054338WriteByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x40c000) {
|
|
K056832ByteWrite(address & 0x3f, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x40e000) {
|
|
UINT8 *prot = (UINT8*)prot_data;
|
|
prot[(address & 0x3f) ^ 1] = data;
|
|
K053990_word_write(address, data, 0xff << ((address & 1) * 8));
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x41c000) {
|
|
// k053252
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x41e000) {
|
|
// k056832 b_word_w
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x480000) {
|
|
if ((address & 0x30) == 0)
|
|
K053247Write(((address & 0x000e) | ((address & 0x3FC0) >> 2) | (address & 1))^1, data);
|
|
|
|
DrvSpriteRam[(address & 0x3fff)^1] = data;
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x680000) {
|
|
K056832RamWriteByte(address & 0x1fff, data);
|
|
return;
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x410000:
|
|
EEPROMWrite((data & 0x04), (data & 0x02), (data & 0x01));
|
|
return;
|
|
|
|
case 0x412000:
|
|
mw_irq_control = data;
|
|
return;
|
|
|
|
case 0x412001:
|
|
K053246_set_OBJCHA_line(data & 0x04);
|
|
return;
|
|
|
|
case 0x41800c:
|
|
case 0x41800d:
|
|
*soundlatch = data;
|
|
return;
|
|
|
|
case 0x41800e:
|
|
case 0x41800f:
|
|
*soundlatch2 = data;
|
|
return;
|
|
|
|
case 0x41a000:
|
|
case 0x41a001:
|
|
ZetSetIRQLine(0, ZET_IRQSTATUS_ACK);
|
|
return;
|
|
}
|
|
}
|
|
|
|
static UINT16 __fastcall martchmp_main_read_word(UINT32 address)
|
|
{
|
|
if ((address & 0xffc000) == 0x680000) {
|
|
return K056832RamReadWord(address);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x414000:
|
|
return DrvInputs[2];
|
|
|
|
case 0x414002:
|
|
return DrvInputs[3];
|
|
|
|
case 0x416000:
|
|
return DrvInputs[0] & 0xff;
|
|
|
|
case 0x416002:
|
|
return (DrvInputs[1] & 0xf4) | 2 | (EEPROMRead() ? 0x01 : 0);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static UINT8 __fastcall martchmp_main_read_byte(UINT32 address)
|
|
{
|
|
if ((address & 0xffc000) == 0x680000) {
|
|
return K056832RamReadByte(address);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x412000:
|
|
return mw_irq_control;
|
|
|
|
case 0x414000:
|
|
return DrvInputs[2] >> 8;
|
|
|
|
case 0x414001:
|
|
return DrvInputs[2];
|
|
|
|
case 0x414002:
|
|
return DrvInputs[3] >> 8;
|
|
|
|
case 0x414003:
|
|
return DrvInputs[3];
|
|
|
|
case 0x416000:
|
|
return DrvInputs[0] >> 8;
|
|
|
|
case 0x416001:
|
|
return DrvInputs[0];
|
|
|
|
case 0x416002:
|
|
return DrvInputs[1] >> 8;
|
|
|
|
case 0x416003:
|
|
return ((DrvInputs[1]) & 0xf4) | 2 | (EEPROMRead() ? 0x01 : 0);
|
|
|
|
case 0x418015:
|
|
if ((*soundlatch3 & 0xf) == 0xe) return *soundlatch3 | 1;
|
|
return *soundlatch3;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
|
|
static void __fastcall dadandrn_main_write_word(UINT32 address, UINT16 data)
|
|
{
|
|
if ((address & 0xff0000) == 0x400000) {
|
|
if ((address & 0xf0) == 0)
|
|
K053247WriteWord(((address & 0x000e) | ((address & 0xff00) >> 4)), data);
|
|
|
|
*((UINT16*)(DrvSpriteRam + (address & 0xfffe))) = data;
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x410000) {
|
|
K056832RamWriteWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x430000) {
|
|
K053246Write((address & 0x06) + 0, data >> 8);
|
|
K053246Write((address & 0x06) + 1, data&0xff);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x450010) {
|
|
K053247WriteRegsWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x480000) {
|
|
K056832WordWrite(address & 0x3e, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x482000) {
|
|
// k056832 b regs
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffffe) == 0x484000) {
|
|
INT32 sizetab[4] = { 4, 4, 2, 1 };
|
|
INT32 clip[4] = { 0, 0, 0, 0 };
|
|
|
|
clip[0] = (data >> 0) & 0x3f; // min (clip) x
|
|
clip[1] = (data >> 6) & 0x3f; // min (clip) y
|
|
clip[2] = sizetab[(data >> 12) & 0x03]; // size x
|
|
clip[3] = sizetab[(data >> 14) & 0x03]; // size y
|
|
|
|
clip[2] = ((clip[0] + clip[2]) << 7) - 1;
|
|
clip[3] = ((clip[1] + clip[3]) << 7) - 1;
|
|
clip[0] <<= 7;
|
|
clip[1] <<= 7;
|
|
|
|
K053936GP_set_cliprect(0, clip[0], clip[2], clip[1], clip[3]);
|
|
|
|
// 053939_clip
|
|
//bprintf (0, _T("ClipW: %2.2x, %4.4x\n"), address & 3, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffffe) == 0x484002) {
|
|
//bprintf (0, _T("clipw enable %2.2x\n"), data);
|
|
K053936GP_clip_enable(0, (data >> 8) & 1);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x486000) {
|
|
// k053252
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x488000) {
|
|
K055555WordWrite(address, data >> 8);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x48c000) {
|
|
K054338WriteWord(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x660000) {
|
|
K054000Write((address/2)&0xff, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x680000) {
|
|
prot_data[(address & 0x3f)/2] = data;
|
|
K055550_word_write(address, data, 0xffff);
|
|
return;
|
|
}
|
|
}
|
|
|
|
static void __fastcall dadandrn_main_write_byte(UINT32 address, UINT8 data)
|
|
{
|
|
if ((address & 0xff0000) == 0x400000) {
|
|
if ((address & 0xf0) == 0)
|
|
K053247Write(((address & 0x000e) | ((address & 0xff00) >> 4) | (address & 1))^1, data);
|
|
|
|
DrvSpriteRam[(address & 0xffff)^1] = data;
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffc000) == 0x410000) {
|
|
K056832RamWriteByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x430000) {
|
|
K053246Write((address & 0x7)^0, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff0) == 0x450010) {
|
|
K053247WriteRegsByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x480000) {
|
|
K056832ByteWrite(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xfffff8) == 0x482000) {
|
|
// k056832 b regs
|
|
return;
|
|
}
|
|
|
|
//if ((address & 0xfffffc) == 0x484000) {
|
|
// bprintf (0, _T("ClipB: %2.2x, %4.4x\n"), address & 3, data);
|
|
// return;
|
|
//}
|
|
|
|
if ((address & 0xffffe0) == 0x486000) {
|
|
// k053252
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x488000) {
|
|
K055555ByteWrite(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffe0) == 0x48c000) {
|
|
K054338WriteByte(address, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x660000) {
|
|
K054000Write((address/2)&0xff, data);
|
|
return;
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x680000) {
|
|
UINT8 *prot = (UINT8*)prot_data;
|
|
prot[(address & 0x3f) ^ 1] = data;
|
|
K055550_word_write(address, data, 0xff << ((address & 1) * 8));
|
|
return;
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x484002:
|
|
//bprintf (0, _T("clipb enable %2.2x\n"), data);
|
|
K053936GP_clip_enable(0, data & 0x01);
|
|
return;
|
|
|
|
case 0x48a00c:
|
|
*soundlatch = data;
|
|
return;
|
|
|
|
case 0x48a00e:
|
|
*soundlatch2 = data;
|
|
return;
|
|
|
|
case 0x6a0001:
|
|
EEPROMWrite((data & 0x04), (data & 0x02), (data & 0x01));
|
|
return;
|
|
|
|
case 0x6c0000:
|
|
case 0x6c0001:
|
|
K053936GP_enable(0, data & 0x01);
|
|
// 053936_enable
|
|
// bprintf (0, _T("'936b enable %2.2x\n"), data);
|
|
return;
|
|
|
|
case 0x6e0000:
|
|
ZetSetIRQLine(0, ZET_IRQSTATUS_ACK);
|
|
return;
|
|
|
|
case 0xe00000:
|
|
return; // watchdog
|
|
}
|
|
}
|
|
|
|
static UINT16 __fastcall dadandrn_main_read_word(UINT32 address)
|
|
{
|
|
if ((address & 0xffc000) == 0x410000) {
|
|
return K056832RamReadWord(address & 0x1fff);
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x680000) {
|
|
return K055550_word_read(address);
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x660000) {
|
|
return K054000Read((address / 2) & 0xff);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x480a14:
|
|
if ((*soundlatch3 & 0xf)==0xe) return *soundlatch3|1;
|
|
return *soundlatch3;
|
|
|
|
case 0x48e000:
|
|
return DrvInputs[0];
|
|
|
|
case 0x48e020:
|
|
return (DrvInputs[1] << 8) | (DrvInputs[2] & 0xff); // ????
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static UINT8 __fastcall dadandrn_main_read_byte(UINT32 address)
|
|
{
|
|
if ((address & 0xffc000) == 0x410000) {
|
|
return K056832RamReadByte(address & 0x1fff);
|
|
}
|
|
|
|
if ((address & 0xffffc0) == 0x680000) {
|
|
return K055550_word_read(address) >> ((~address & 1) * 8);
|
|
}
|
|
|
|
if ((address & 0xffff00) == 0x660000) {
|
|
return K054000Read((address / 2) & 0xff);
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0x480a14:
|
|
case 0x48a014:
|
|
if ((*soundlatch3 & 0xf)==0xe) return *soundlatch3|1;
|
|
return *soundlatch3;
|
|
|
|
case 0x48e000:
|
|
return DrvInputs[0] >> 8;
|
|
|
|
case 0x48e001:
|
|
return DrvInputs[0];
|
|
|
|
case 0x48e020:
|
|
return (DrvInputs[1] & 0xf8) | 2 | (EEPROMRead() ? 0x0001 : 0);
|
|
|
|
case 0x48e021:
|
|
return (DrvInputs[2] >> 8);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
|
|
static void bankswitch(INT32 data)
|
|
{
|
|
z80_bank = data;
|
|
ZetMapMemory(DrvZ80ROM + ((data & 0x0f) * 0x4000), 0x8000, 0xbfff, ZET_ROM);
|
|
}
|
|
|
|
static void __fastcall mystwarr_sound_write(UINT16 address, UINT8 data)
|
|
{
|
|
switch (address)
|
|
{
|
|
case 0xf000:
|
|
*soundlatch3 = data;
|
|
return;
|
|
|
|
case 0xf800:
|
|
sound_control = data & 0x10;
|
|
bankswitch(data);
|
|
// if (!sound_control) ZetSetIRQLine(0x20, ZET_IRQSTATUS_NONE); // CLEAR NMI LINE!
|
|
return;
|
|
}
|
|
|
|
if (address >= 0xe000 && address <= 0xe22f) {
|
|
K054539Write(0, address - 0xe000, data);
|
|
}
|
|
|
|
if (address >= 0xe400 && address <= 0xe62f) {
|
|
K054539Write(1, address - 0xe400, data);
|
|
}
|
|
|
|
if (address >= 0xe000 && address <= 0xe7ff) {
|
|
DrvZ80RAM[0x2000 + (address & 0x7ff)] = data;
|
|
}
|
|
|
|
}
|
|
|
|
static UINT8 __fastcall mystwarr_sound_read(UINT16 address)
|
|
{
|
|
if (address >= 0xe000 && address <= 0xe22f) {
|
|
return K054539Read(0, address - 0xe000);
|
|
}
|
|
|
|
if (address >= 0xe400 && address <= 0xe62f) {
|
|
return K054539Read(1, address - 0xe400);
|
|
}
|
|
|
|
if (address >= 0xe000 && address <= 0xe7ff) {
|
|
return DrvZ80RAM[0x2000 + (address & 0x7ff)];
|
|
}
|
|
|
|
switch (address)
|
|
{
|
|
case 0xf002:
|
|
ZetSetIRQLine(0, ZET_IRQSTATUS_NONE);
|
|
return *soundlatch;
|
|
|
|
case 0xf003:
|
|
ZetSetIRQLine(0, ZET_IRQSTATUS_NONE);
|
|
return *soundlatch2;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
|
|
static void mystwarr_tile_callback(int layer, int *code, int *color, int */*flags*/)
|
|
{
|
|
if (layer == 1) {if ((*code & 0xff00) + (*color) == 0x4101) cbparam++; else cbparam--;} //* water hack (TEMPORARY)
|
|
|
|
*color = layer_colorbase[layer] | ((*color >> 1) & 0x1e);
|
|
}
|
|
|
|
static void metamrph_tile_callback(int layer, int */*code*/, int *color, int */*flags*/)
|
|
{
|
|
*color = layer_colorbase[layer] | (*color >> 2 & 0x0f);
|
|
}
|
|
|
|
static void game5bpp_tile_callback(int layer, int */*code*/, int *color, int */*flags*/)
|
|
{
|
|
*color = layer_colorbase[layer] | ((*color >> 1) & 0x1e);
|
|
}
|
|
static void mystwarr_sprite_callback(INT32 */*code*/, INT32 *color, INT32 *priority)
|
|
{
|
|
int c = *color;
|
|
*color = sprite_colorbase | (c & 0x001f);
|
|
*priority = c & 0x00f0;
|
|
}
|
|
|
|
static void metamrph_sprite_callback(INT32 */*code*/, INT32 *color, INT32 *priority)
|
|
{
|
|
INT32 c = *color;
|
|
INT32 attr = c;
|
|
|
|
c = (c & 0x1f) | sprite_colorbase;
|
|
|
|
if ((attr & 0x300) != 0x300)
|
|
{
|
|
*color = c;
|
|
*priority = (attr & 0xe0) >> 2;
|
|
}
|
|
else
|
|
{
|
|
*color = c | 3<<K055555_MIXSHIFT | K055555_SKIPSHADOW;
|
|
*priority = 0x1c;
|
|
}
|
|
}
|
|
|
|
static void martchmp_sprite_callback(INT32 */*code*/, INT32 *color, INT32 *priority)
|
|
{
|
|
int c = *color;
|
|
|
|
if ((c & 0x3ff) == 0x11f)
|
|
*color = K055555_FULLSHADOW;
|
|
else
|
|
*color = sprite_colorbase | (c & 0x1f);
|
|
|
|
if (oinprion & 0xf0)
|
|
*priority = cbparam;
|
|
else
|
|
*priority = c & 0xf0;
|
|
}
|
|
|
|
static void gaiapolis_sprite_callback(INT32 */*code*/, INT32 *color, INT32 *priority)
|
|
{
|
|
int c = *color;
|
|
|
|
*color = sprite_colorbase | (c>>4 & 0x20) | (c & 0x001f);
|
|
*priority = c & 0x00e0;
|
|
}
|
|
|
|
static const eeprom_interface mystwarr_eeprom_interface =
|
|
{
|
|
7, /* address bits */
|
|
8, /* data bits */
|
|
"011000", /* read command */
|
|
"011100", /* write command */
|
|
"0100100000000",/* erase command */
|
|
"0100000000000",/* lock command */
|
|
"0100110000000", /* unlock command */
|
|
0,
|
|
0
|
|
};
|
|
|
|
static const eeprom_interface gaiapolis_eeprom_interface =
|
|
{
|
|
7, /* address bits */
|
|
8, /* data bits */
|
|
"011000", /* read command */
|
|
"010100", /* write command */
|
|
"0100100000000",/* erase command */
|
|
"0100000000000",/* lock command */
|
|
"0100110000000",/* unlock command */
|
|
0,
|
|
0
|
|
};
|
|
|
|
static INT32 DrvDoReset()
|
|
{
|
|
memset (AllRam, 0, RamEnd - AllRam);
|
|
|
|
SekOpen(0);
|
|
SekReset();
|
|
SekClose();
|
|
|
|
ZetOpen(0);
|
|
ZetReset();
|
|
bankswitch(2);
|
|
ZetClose();
|
|
|
|
KonamiICReset();
|
|
|
|
K054539Reset(0);
|
|
K054539Reset(1);
|
|
|
|
EEPROMReset();
|
|
|
|
if (EEPROMAvailable() == 0) {
|
|
EEPROMFill(DrvEeprom, 0, 128);
|
|
}
|
|
|
|
control_data = 0;
|
|
|
|
for (INT32 i = 0; i < 4; i++)
|
|
{
|
|
layer_colorbase[i] = 0;
|
|
}
|
|
|
|
sprite_colorbase = 0;
|
|
cbparam = 0;
|
|
oinprion = 0;
|
|
sound_nmi_enable = 0;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static INT32 MemIndex()
|
|
{
|
|
UINT8 *Next; Next = AllMem;
|
|
|
|
Drv68KROM = Next; Next += 0x300000;
|
|
DrvZ80ROM = Next; Next += 0x040000;
|
|
|
|
DrvGfxROM0 = Next; Next += 0x600000;
|
|
DrvGfxROM1 = Next; Next += 0xa00000;
|
|
DrvGfxROM2 = Next; Next += 0x500000;
|
|
DrvGfxROM3 = Next; Next += 0x100000;
|
|
|
|
DrvGfxROMExp0 = Next; Next += 0xc00000;
|
|
DrvGfxROMExp1 = Next; Next += 0x1000000;
|
|
DrvGfxROMExp2 = Next; Next += 0x800000;
|
|
|
|
DrvSndROM = Next; Next += 0x400000;
|
|
|
|
DrvEeprom = Next; Next += 0x000080;
|
|
|
|
konami_palette32 = (UINT32*)Next;
|
|
DrvPalette = (UINT32*)Next; Next += 0x0800 * sizeof(UINT32);
|
|
|
|
AllRam = Next;
|
|
|
|
Drv68KRAM = Next; Next += 0x010000;
|
|
DrvSpriteRam = Next; Next += 0x010000;
|
|
DrvPalRAM = Next; Next += 0x002000;
|
|
|
|
DrvK053936Ctrl = Next; Next += 0x000400;
|
|
DrvK053936RAM = Next; Next += 0x001000;
|
|
|
|
DrvZ80RAM = Next; Next += 0x002800;
|
|
|
|
soundlatch = Next; Next += 0x000001;
|
|
soundlatch2 = Next; Next += 0x000001;
|
|
soundlatch3 = Next; Next += 0x000001;
|
|
|
|
RamEnd = Next;
|
|
MemEnd = Next;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void decode_gfx1(UINT8 *src, UINT8 *d, INT32 len)
|
|
{
|
|
UINT8 *s = src;
|
|
UINT8 *pFinish = s+len-3;
|
|
|
|
while (s < pFinish)
|
|
{
|
|
int d0 = ((s[0]&0x80)<<0)|((s[0]&0x08)<<3)|((s[1]&0x80)>>2)|((s[1]&0x08)<<1)|((s[2]&0x80)>>4)|((s[2]&0x08)>>1)|((s[3]&0x80)>>6)|((s[3]&0x08)>>3);
|
|
int d1 = ((s[0]&0x40)<<1)|((s[0]&0x04)<<4)|((s[1]&0x40)>>1)|((s[1]&0x04)<<2)|((s[2]&0x40)>>3)|((s[2]&0x04)>>0)|((s[3]&0x40)>>5)|((s[3]&0x04)>>2);
|
|
int d2 = ((s[0]&0x20)<<2)|((s[0]&0x02)<<5)|((s[1]&0x20)<<0)|((s[1]&0x02)<<3)|((s[2]&0x20)>>2)|((s[2]&0x02)<<1)|((s[3]&0x20)>>4)|((s[3]&0x02)>>1);
|
|
int d3 = ((s[0]&0x10)<<3)|((s[0]&0x01)<<6)|((s[1]&0x10)<<1)|((s[1]&0x01)<<4)|((s[2]&0x10)>>1)|((s[2]&0x01)<<2)|((s[3]&0x10)>>3)|((s[3]&0x01)>>0);
|
|
|
|
d[0] = d3;
|
|
d[1] = d1;
|
|
d[2] = d2;
|
|
d[3] = d0;
|
|
d[4] = s[4];
|
|
|
|
s += 5;
|
|
d += 5;
|
|
}
|
|
|
|
INT32 nLen = len;
|
|
INT32 Plane[5] = { 32, 24, 8, 16, 0 };
|
|
INT32 XOffs[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
|
|
INT32 YOffs[8] = { 0, 5*8, 5*8*2, 5*8*3, 5*8*4, 5*8*5, 5*8*6, 5*8*7 };
|
|
|
|
UINT8 *tmp = (UINT8*)BurnMalloc(nLen);
|
|
|
|
memcpy (tmp, DrvGfxROMExp0, nLen);
|
|
|
|
GfxDecode(((nLen * 8) / 5) / 0x40, 5, 8, 8, Plane, XOffs, YOffs, 8*8*5, tmp, DrvGfxROMExp0);
|
|
|
|
BurnFree (tmp);
|
|
}
|
|
|
|
static void DecodeSprites(UINT8 *rom, UINT8 *exprom, INT32 len)
|
|
{
|
|
INT32 Plane[5] = { 32, 24, 16, 8, 0 };
|
|
INT32 XOffs[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 40, 41, 42, 43, 44, 45, 46, 47 };
|
|
INT32 YOffs[16] = { 0, 10*8, 10*8*2, 10*8*3, 10*8*4, 10*8*5, 10*8*6, 10*8*7, 10*8*8,
|
|
10*8*9, 10*8*10, 10*8*11, 10*8*12, 10*8*13, 10*8*14, 10*8*15 };
|
|
|
|
INT32 size4 = (len/(1024*1024))/5;
|
|
size4 *= 4*1024*1024;
|
|
|
|
UINT8 *tmp = (UINT8*)BurnMalloc(size4 * 5);
|
|
|
|
UINT8 *d = tmp;
|
|
UINT8 *s1 = rom;
|
|
UINT8 *s2 = rom + (size4);
|
|
|
|
for (INT32 i = 0; i < size4; i+=4)
|
|
{
|
|
*d++ = *s1++;
|
|
*d++ = *s1++;
|
|
*d++ = *s1++;
|
|
*d++ = *s1++;
|
|
*d++ = *s2++;
|
|
}
|
|
|
|
GfxDecode(size4 / 128, 5, 16, 16, Plane, XOffs, YOffs, 16*16*5, tmp, exprom);
|
|
|
|
BurnFree (tmp);
|
|
}
|
|
|
|
static void Metamrph_sprite_decode()
|
|
{
|
|
INT32 Plane[4] = { 24, 16, 8, 0 };
|
|
INT32 XOffs[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 32, 33, 34, 35, 36, 37, 38, 39 };
|
|
INT32 YOffs[16] = { 0, 64, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960 };
|
|
|
|
GfxDecode(0x10000, 4, 16, 16, Plane, XOffs, YOffs, 16*16*4, DrvGfxROM1, DrvGfxROMExp1);
|
|
}
|
|
|
|
static INT32 MystwarrInit()
|
|
{
|
|
nGame = 1;
|
|
|
|
GenericTilesInit();
|
|
|
|
AllMem = NULL;
|
|
MemIndex();
|
|
INT32 nLen = MemEnd - (UINT8 *)0;
|
|
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
|
|
memset(AllMem, 0, nLen);
|
|
MemIndex();
|
|
|
|
{
|
|
if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x000000, 1, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100001, 2, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100000, 3, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvZ80ROM + 0x000000, 4, 1)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000000, 5, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000002, 6, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM0 + 0x000004, 7, 5)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000000, 8, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000002, 9, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000004, 10, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000006, 11, 8, 2)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM1 + 0x400000, 12, 2)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM1 + 0x400001, 13, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvSndROM + 0x000000, 14, 1)) return 1;
|
|
if (BurnLoadRom(DrvSndROM + 0x200000, 15, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvEeprom + 0x000000, 16, 1)) return 1;
|
|
|
|
decode_gfx1(DrvGfxROM0, DrvGfxROMExp0, 0x500000);
|
|
DecodeSprites(DrvGfxROM1, DrvGfxROMExp1, 0x500000);
|
|
}
|
|
|
|
K055555Init();
|
|
K054338Init();
|
|
|
|
K056832Init(DrvGfxROM0, DrvGfxROMExp0, 0x400000, mystwarr_tile_callback);
|
|
K056832SetGlobalOffsets(24, 16);
|
|
K056832SetLayerOffsets(0, -2-4, 0);
|
|
K056832SetLayerOffsets(1, 0-4, 0);
|
|
K056832SetLayerOffsets(2, 2-4, 0);
|
|
K056832SetLayerOffsets(3, 3-4, 0);
|
|
|
|
K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x7fffff, mystwarr_sprite_callback, 1);
|
|
K053247SetSpriteOffset(-24-48, -16-24);
|
|
K053247SetBpp(5);
|
|
|
|
konamigx_mixer_init(0);
|
|
|
|
SekInit(0, 0x68000);
|
|
SekOpen(0);
|
|
SekMapMemory(Drv68KROM, 0x000000, 0x1fffff, SM_ROM);
|
|
SekMapMemory(Drv68KRAM, 0x200000, 0x20ffff, SM_RAM);
|
|
SekMapMemory(DrvSpriteRam, 0x400000, 0x40ffff, SM_ROM);
|
|
SekMapMemory(DrvPalRAM, 0x700000, 0x701fff, SM_RAM);
|
|
SekSetWriteWordHandler(0, mystwarr_main_write_word);
|
|
SekSetWriteByteHandler(0, mystwarr_main_write_byte);
|
|
SekSetReadWordHandler(0, mystwarr_main_read_word);
|
|
SekSetReadByteHandler(0, mystwarr_main_read_byte);
|
|
SekClose();
|
|
|
|
ZetInit(0);
|
|
ZetOpen(0);
|
|
ZetMapMemory(DrvZ80ROM, 0x0000, 0x7fff, ZET_ROM);
|
|
ZetMapMemory(DrvZ80RAM, 0xc000, 0xdfff, ZET_RAM);
|
|
ZetSetWriteHandler(mystwarr_sound_write);
|
|
ZetSetReadHandler(mystwarr_sound_read);
|
|
ZetClose();
|
|
|
|
EEPROMInit(&mystwarr_eeprom_interface);
|
|
|
|
K054539Init(0, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(0, 0, 0.80);
|
|
K054539_set_gain(0, 1, 0.80);
|
|
K054539_set_gain(0, 2, 0.80);
|
|
K054539_set_gain(0, 3, 0.80);
|
|
K054539_set_gain(0, 4, 2.00);
|
|
K054539_set_gain(0, 5, 2.00);
|
|
K054539_set_gain(0, 6, 2.00);
|
|
K054539_set_gain(0, 7, 2.00);
|
|
|
|
K054539Init(1, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(1, 0, 0.50);
|
|
K054539_set_gain(1, 1, 0.50);
|
|
K054539_set_gain(1, 2, 0.50);
|
|
K054539_set_gain(1, 3, 0.50);
|
|
K054539_set_gain(1, 4, 0.50);
|
|
K054539_set_gain(1, 5, 0.50);
|
|
K054539_set_gain(1, 6, 0.50);
|
|
K054539_set_gain(1, 7, 0.50);
|
|
|
|
DrvDoReset();
|
|
|
|
return 0;
|
|
}
|
|
|
|
static INT32 MetamrphInit()
|
|
{
|
|
nGame = 2;
|
|
|
|
GenericTilesInit();
|
|
|
|
AllMem = NULL;
|
|
MemIndex();
|
|
INT32 nLen = MemEnd - (UINT8 *)0;
|
|
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
|
|
memset(AllMem, 0, nLen);
|
|
MemIndex();
|
|
|
|
{
|
|
if (BurnLoadRom(Drv68KROM + 0x000000, 0, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x000001, 1, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100000, 2, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100001, 3, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvZ80ROM + 0x000000, 4, 1)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000000, 5, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000002, 6, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000000, 7, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000002, 8, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000004, 9, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000006, 10, 8, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvGfxROM2 + 0x000000, 11, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvSndROM + 0x000000, 12, 1)) return 1;
|
|
if (BurnLoadRom(DrvSndROM + 0x200000, 13, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvEeprom + 0x000000, 14, 1)) return 1;
|
|
|
|
decode_gfx1(DrvGfxROM0, DrvGfxROMExp0, 0x500000);
|
|
|
|
Metamrph_sprite_decode();
|
|
}
|
|
|
|
K055555Init();
|
|
K054338Init();
|
|
|
|
K056832Init(DrvGfxROM0, DrvGfxROMExp0, 0x200000, metamrph_tile_callback);
|
|
K056832SetGlobalOffsets(24, 15);
|
|
K056832SetLayerOffsets(0, -2+4, 2);
|
|
K056832SetLayerOffsets(1, 0+4, 0);
|
|
K056832SetLayerOffsets(2, 2+4, 2);
|
|
K056832SetLayerOffsets(3, 3+4, 0);
|
|
|
|
K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x7fffff, metamrph_sprite_callback, 1);
|
|
K053247SetSpriteOffset(-51-24, -24-15);
|
|
|
|
K053250Init(0, DrvGfxROM2, DrvGfxROMExp2, 0x40000);
|
|
K053250SetOffsets(0, -7, 0); // verify
|
|
|
|
konamigx_mixer_init(0);
|
|
|
|
SekInit(0, 0x68000);
|
|
SekOpen(0);
|
|
SekMapMemory(Drv68KROM, 0x000000, 0x1fffff, SM_ROM);
|
|
SekMapMemory(Drv68KRAM, 0x200000, 0x20ffff, SM_RAM);
|
|
SekMapMemory(DrvSpriteRam, 0x211000, 0x21ffff, SM_RAM);
|
|
SekMapMemory((UINT8*)K053250Ram, 0x24c000, 0x24ffff, SM_RAM);
|
|
SekMapMemory(DrvPalRAM, 0x330000, 0x331fff, SM_RAM);
|
|
SekSetWriteWordHandler(0, metamrph_main_write_word);
|
|
SekSetWriteByteHandler(0, metamrph_main_write_byte);
|
|
SekSetReadWordHandler(0, metamrph_main_read_word);
|
|
SekSetReadByteHandler(0, metamrph_main_read_byte);
|
|
SekClose();
|
|
|
|
ZetInit(0);
|
|
ZetOpen(0);
|
|
ZetMapMemory(DrvZ80ROM, 0x0000, 0x7fff, ZET_ROM);
|
|
ZetMapMemory(DrvZ80RAM, 0xc000, 0xdfff, ZET_RAM);
|
|
ZetSetWriteHandler(mystwarr_sound_write);
|
|
ZetSetReadHandler(mystwarr_sound_read);
|
|
ZetClose();
|
|
|
|
EEPROMInit(&mystwarr_eeprom_interface);
|
|
|
|
K054539Init(0, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(0, 0, 0.80);
|
|
K054539_set_gain(0, 1, 0.80);
|
|
K054539_set_gain(0, 2, 0.80);
|
|
K054539_set_gain(0, 3, 0.80);
|
|
K054539_set_gain(0, 4, 1.80);
|
|
K054539_set_gain(0, 5, 1.80);
|
|
K054539_set_gain(0, 6, 1.80);
|
|
K054539_set_gain(0, 7, 1.80);
|
|
|
|
K054539Init(1, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(1, 0, 0.80);
|
|
K054539_set_gain(1, 1, 0.80);
|
|
K054539_set_gain(1, 2, 0.80);
|
|
K054539_set_gain(1, 3, 0.80);
|
|
K054539_set_gain(1, 4, 0.80);
|
|
K054539_set_gain(1, 5, 0.80);
|
|
K054539_set_gain(1, 6, 0.80);
|
|
K054539_set_gain(1, 7, 0.80);
|
|
|
|
DrvDoReset();
|
|
|
|
return 0;
|
|
}
|
|
|
|
static INT32 ViostormInit()
|
|
{
|
|
nGame = 3;
|
|
|
|
GenericTilesInit();
|
|
|
|
AllMem = NULL;
|
|
MemIndex();
|
|
INT32 nLen = MemEnd - (UINT8 *)0;
|
|
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
|
|
memset(AllMem, 0, nLen);
|
|
MemIndex();
|
|
|
|
{
|
|
if (BurnLoadRom(Drv68KROM + 0x000000, 0, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x000001, 1, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvZ80ROM + 0x000000, 2, 1)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000000, 3, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000002, 4, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000000, 5, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000002, 6, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000004, 7, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000006, 8, 8, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvSndROM + 0x000000, 9, 1)) return 1;
|
|
if (BurnLoadRom(DrvSndROM + 0x200000, 10, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvEeprom + 0x000000, 11, 1)) return 1;
|
|
|
|
decode_gfx1(DrvGfxROM0, DrvGfxROMExp0, 0x600000);
|
|
|
|
Metamrph_sprite_decode();
|
|
}
|
|
|
|
K055555Init();
|
|
K054338Init();
|
|
|
|
K056832Init(DrvGfxROM0, DrvGfxROMExp0, 0x200000, metamrph_tile_callback);
|
|
K056832SetGlobalOffsets(40, 16);
|
|
K056832SetLayerOffsets(0, -2+1, 0);
|
|
K056832SetLayerOffsets(1, 0+1, 0);
|
|
K056832SetLayerOffsets(2, 2+1, 0);
|
|
K056832SetLayerOffsets(3, 3+1, 0);
|
|
|
|
K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x7fffff, metamrph_sprite_callback, 1);
|
|
K053247SetSpriteOffset(-62-40, -23-16);
|
|
|
|
K053250Init(0, DrvGfxROM2, DrvGfxROMExp2, 1); // doesn't exist on this hardware
|
|
|
|
konamigx_mixer_init(0);
|
|
|
|
SekInit(0, 0x68000);
|
|
SekOpen(0);
|
|
SekMapMemory(Drv68KROM, 0x000000, 0x1fffff, SM_ROM);
|
|
SekMapMemory(Drv68KRAM, 0x200000, 0x20ffff, SM_RAM);
|
|
SekMapMemory(DrvSpriteRam, 0x211000, 0x21ffff, SM_RAM);
|
|
SekMapMemory((UINT8*)K053250Ram, 0x24c000, 0x24ffff, SM_RAM);
|
|
SekMapMemory(DrvPalRAM, 0x330000, 0x331fff, SM_RAM);
|
|
SekSetWriteWordHandler(0, metamrph_main_write_word);
|
|
SekSetWriteByteHandler(0, metamrph_main_write_byte);
|
|
SekSetReadWordHandler(0, metamrph_main_read_word);
|
|
SekSetReadByteHandler(0, metamrph_main_read_byte);
|
|
SekClose();
|
|
|
|
ZetInit(0);
|
|
ZetOpen(0);
|
|
ZetMapMemory(DrvZ80ROM, 0x0000, 0x7fff, ZET_ROM);
|
|
ZetMapMemory(DrvZ80RAM, 0xc000, 0xdfff, ZET_RAM);
|
|
ZetSetWriteHandler(mystwarr_sound_write);
|
|
ZetSetReadHandler(mystwarr_sound_read);
|
|
ZetClose();
|
|
|
|
EEPROMInit(&mystwarr_eeprom_interface);
|
|
|
|
K054539Init(0, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(0, 0, 2.00);
|
|
K054539_set_gain(0, 1, 2.00);
|
|
K054539_set_gain(0, 2, 2.00);
|
|
K054539_set_gain(0, 3, 2.00);
|
|
K054539_set_gain(0, 4, 2.00);
|
|
K054539_set_gain(0, 5, 2.00);
|
|
K054539_set_gain(0, 6, 2.00);
|
|
K054539_set_gain(0, 7, 2.00);
|
|
|
|
K054539Init(1, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
|
|
DrvDoReset();
|
|
|
|
return 0;
|
|
}
|
|
|
|
static INT32 MartchmpInit()
|
|
{
|
|
nGame = 4;
|
|
|
|
GenericTilesInit();
|
|
|
|
AllMem = NULL;
|
|
MemIndex();
|
|
INT32 nLen = MemEnd - (UINT8 *)0;
|
|
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
|
|
memset(AllMem, 0, nLen);
|
|
MemIndex();
|
|
|
|
{
|
|
if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x000000, 1, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100001, 2, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100000, 3, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvZ80ROM + 0x000000, 4, 1)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000000, 5, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000002, 6, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM0 + 0x000004, 7, 5)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000000, 8, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000002, 9, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000004, 10, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000006, 11, 8, 2)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM1 + 0x800000, 12, 2)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM1 + 0x800001, 13, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvSndROM + 0x000000, 14, 1)) return 1;
|
|
if (BurnLoadRom(DrvSndROM + 0x200000, 15, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvEeprom + 0x000000, 16, 1)) return 1;
|
|
|
|
decode_gfx1(DrvGfxROM0, DrvGfxROMExp0, 0x500000);
|
|
|
|
DecodeSprites(DrvGfxROM1, DrvGfxROMExp1, 0xa00000);
|
|
}
|
|
|
|
K055555Init();
|
|
K054338Init();
|
|
|
|
K056832Init(DrvGfxROM0, DrvGfxROMExp0, 0x400000, game5bpp_tile_callback);
|
|
K056832SetGlobalOffsets(32, 16);
|
|
K056832SetLayerOffsets(0, -2-4, 0);
|
|
K056832SetLayerOffsets(1, 0-4, 0);
|
|
K056832SetLayerOffsets(2, 2-4, 0);
|
|
K056832SetLayerOffsets(3, 3-4, 0);
|
|
|
|
K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x7fffff, martchmp_sprite_callback, 1);
|
|
K053247SetSpriteOffset(-23-58, -16-23);
|
|
K053247SetBpp(5);
|
|
|
|
konamigx_mixer_init(0);
|
|
|
|
SekInit(0, 0x68000);
|
|
SekOpen(0);
|
|
SekMapMemory(Drv68KROM + 0x000000, 0x000000, 0x0fffff, SM_ROM);
|
|
SekMapMemory(Drv68KRAM, 0x100000, 0x10ffff, SM_RAM);
|
|
SekMapMemory(Drv68KROM + 0x100000, 0x300000, 0x3fffff, SM_ROM);
|
|
SekMapMemory(DrvSpriteRam, 0x480000, 0x483fff, SM_ROM); // should be written through handler
|
|
SekMapMemory(DrvPalRAM, 0x600000, 0x601fff, SM_RAM);
|
|
SekSetWriteWordHandler(0, martchmp_main_write_word);
|
|
SekSetWriteByteHandler(0, martchmp_main_write_byte);
|
|
SekSetReadWordHandler(0, martchmp_main_read_word);
|
|
SekSetReadByteHandler(0, martchmp_main_read_byte);
|
|
SekClose();
|
|
|
|
ZetInit(0);
|
|
ZetOpen(0);
|
|
ZetMapMemory(DrvZ80ROM, 0x0000, 0x7fff, ZET_ROM);
|
|
ZetMapMemory(DrvZ80RAM, 0xc000, 0xdfff, ZET_RAM);
|
|
ZetSetWriteHandler(mystwarr_sound_write);
|
|
ZetSetReadHandler(mystwarr_sound_read);
|
|
ZetClose();
|
|
|
|
EEPROMInit(&mystwarr_eeprom_interface);
|
|
|
|
K054539Init(0, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(0, 0, 1.40);
|
|
K054539_set_gain(0, 1, 1.40);
|
|
K054539_set_gain(0, 2, 1.40);
|
|
K054539_set_gain(0, 3, 1.40);
|
|
K054539_set_gain(0, 4, 1.40);
|
|
K054539_set_gain(0, 5, 1.40);
|
|
K054539_set_gain(0, 6, 1.40);
|
|
K054539_set_gain(0, 7, 1.40);
|
|
|
|
K054539Init(1, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(1, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
|
|
DrvDoReset();
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void DrvGfxExpand(UINT8 *src, INT32 nLen)
|
|
{
|
|
for (INT32 i = (nLen - 1) * 2; i >= 0; i-=2) {
|
|
src[i+0] = src[(i/2)] >> 4;
|
|
src[i+1] = src[(i/2)] & 0xf;
|
|
}
|
|
}
|
|
|
|
// pre-draw the whole roz tilemap... needs a ton of ram!
|
|
static void GaiapolisRozTilemapdraw()
|
|
{
|
|
UINT8 *dat1 = DrvGfxROM3;
|
|
UINT8 *dat2 = DrvGfxROM3 + 0x20000;
|
|
UINT8 *dat3 = DrvGfxROM3 + 0x60000;
|
|
|
|
K053936_external_bitmap = pMystwarrRozBitmap;
|
|
|
|
for (INT32 offs = 0; offs < 512 * 512; offs++)
|
|
{
|
|
INT32 sx = (offs & 0x1ff) * 16;
|
|
INT32 sy = (offs / 0x200) * 16;
|
|
|
|
INT32 code = dat3[offs] | ((dat2[offs]&0x3f)<<8);
|
|
INT32 color = 0;
|
|
|
|
if (offs & 1)
|
|
color = dat1[offs>>1]&0xf;
|
|
else
|
|
color = dat1[offs>>1]>>4;
|
|
|
|
if (dat2[offs] & 0x80) color |= 0x10;
|
|
|
|
UINT8 *gfx = DrvGfxROM2 + (code * 0x100);
|
|
color <<= 4;
|
|
|
|
UINT16 *dst = pMystwarrRozBitmap + sy * 0x2000 + sx;
|
|
|
|
for (INT32 y = 0; y < 16; y++) {
|
|
for (INT32 x = 0; x < 16; x++, gfx++) {
|
|
dst[x] = gfx[0] + color;
|
|
}
|
|
dst += 0x2000;
|
|
}
|
|
}
|
|
}
|
|
|
|
static INT32 GaiapolisInit()
|
|
{
|
|
nGame = 5;
|
|
|
|
GenericTilesInit();
|
|
|
|
AllMem = NULL;
|
|
MemIndex();
|
|
INT32 nLen = MemEnd - (UINT8 *)0;
|
|
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
|
|
memset(AllMem, 0, nLen);
|
|
MemIndex();
|
|
|
|
{
|
|
if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x000000, 1, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x200001, 2, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x200000, 3, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvZ80ROM + 0x000000, 4, 1)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000000, 5, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000002, 6, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000000, 7, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000002, 8, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000004, 9, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000006, 10, 8, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvGfxROM2 + 0x000000, 11, 1)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM2 + 0x080000, 12, 1)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM2 + 0x100000, 13, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvGfxROM3 + 0x000000, 14, 1)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM3 + 0x020000, 15, 1)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM3 + 0x060000, 16, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvSndROM + 0x000000, 17, 1)) return 1;
|
|
if (BurnLoadRom(DrvSndROM + 0x200000, 18, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvEeprom + 0x000000, 19, 1)) return 1;
|
|
|
|
decode_gfx1(DrvGfxROM0, DrvGfxROMExp0, 0x500000);
|
|
|
|
Metamrph_sprite_decode();
|
|
}
|
|
|
|
K055555Init();
|
|
K054338Init();
|
|
|
|
K056832Init(DrvGfxROM0, DrvGfxROMExp0, 0x400000, metamrph_tile_callback);
|
|
K056832SetGlobalOffsets(32, 16);
|
|
K056832SetLayerOffsets(0, -2, 0);
|
|
K056832SetLayerOffsets(1, 0, 0);
|
|
K056832SetLayerOffsets(2, 2, 0);
|
|
K056832SetLayerOffsets(3, 3, 0);
|
|
|
|
K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x7fffff, gaiapolis_sprite_callback, 1);
|
|
K053247SetSpriteOffset(-24-79, -16-24);
|
|
|
|
konamigx_mixer_init(0);
|
|
K054338_invert_alpha(0); // otherwise alpha blended roz is too light
|
|
|
|
SekInit(0, 0x68000);
|
|
SekOpen(0);
|
|
SekMapMemory(Drv68KROM, 0x000000, 0x2fffff, SM_ROM);
|
|
SekMapMemory(DrvSpriteRam, 0x400000, 0x40ffff, SM_ROM);
|
|
SekMapMemory(DrvPalRAM, 0x420000, 0x421fff, SM_RAM);
|
|
SekMapMemory(DrvK053936Ctrl, 0x460000, 0x46001f, SM_RAM);
|
|
SekMapMemory(DrvK053936RAM, 0x470000, 0x470fff, SM_RAM);
|
|
SekMapMemory(Drv68KRAM, 0x600000, 0x60ffff, SM_RAM);
|
|
SekSetWriteWordHandler(0, dadandrn_main_write_word);
|
|
SekSetWriteByteHandler(0, dadandrn_main_write_byte);
|
|
SekSetReadWordHandler(0, dadandrn_main_read_word);
|
|
SekSetReadByteHandler(0, dadandrn_main_read_byte);
|
|
SekClose();
|
|
|
|
ZetInit(0);
|
|
ZetOpen(0);
|
|
ZetMapMemory(DrvZ80ROM, 0x0000, 0x7fff, ZET_ROM);
|
|
ZetMapMemory(DrvZ80RAM, 0xc000, 0xdfff, ZET_RAM);
|
|
ZetSetWriteHandler(mystwarr_sound_write);
|
|
ZetSetReadHandler(mystwarr_sound_read);
|
|
ZetClose();
|
|
|
|
EEPROMInit(&gaiapolis_eeprom_interface);
|
|
|
|
{
|
|
DrvGfxExpand(DrvGfxROM2 , 0x180000);
|
|
pMystwarrRozBitmap = (UINT16*)BurnMalloc(((512 * 16) * 2) * (512 * 16) * 2);
|
|
GaiapolisRozTilemapdraw();
|
|
|
|
m_k053936_0_ctrl = (UINT16*)DrvK053936Ctrl;
|
|
m_k053936_0_linectrl = (UINT16*)DrvK053936RAM;
|
|
K053936GP_set_offset(0, -44, -17);
|
|
}
|
|
|
|
K054539Init(0, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(0, 0, 0.80);
|
|
K054539_set_gain(0, 1, 0.80);
|
|
K054539_set_gain(0, 2, 0.80);
|
|
K054539_set_gain(0, 3, 0.80);
|
|
K054539_set_gain(0, 4, 2.00);
|
|
K054539_set_gain(0, 5, 2.00);
|
|
K054539_set_gain(0, 6, 2.00);
|
|
K054539_set_gain(0, 7, 2.00);
|
|
|
|
K054539Init(1, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(1, 0, 0.50);
|
|
K054539_set_gain(1, 1, 0.50);
|
|
K054539_set_gain(1, 2, 0.50);
|
|
K054539_set_gain(1, 3, 0.50);
|
|
K054539_set_gain(1, 4, 0.50);
|
|
K054539_set_gain(1, 5, 0.50);
|
|
K054539_set_gain(1, 6, 0.50);
|
|
K054539_set_gain(1, 7, 0.50);
|
|
|
|
DrvDoReset();
|
|
|
|
return 0;
|
|
}
|
|
|
|
// pre-draw the whole roz tilemap... needs a ton of ram!
|
|
static void DadandrnRozTilemapdraw()
|
|
{
|
|
UINT8 *dat1 = DrvGfxROM3;
|
|
UINT8 *dat2 = DrvGfxROM3 + 0x40000;
|
|
|
|
K053936_external_bitmap = pMystwarrRozBitmap;
|
|
|
|
for (INT32 offs = 0; offs < 512 * 512; offs++)
|
|
{
|
|
INT32 sx = (offs & 0x1ff) * 16;
|
|
INT32 sy = (offs / 0x200) * 16;
|
|
|
|
INT32 code = dat2[offs] | ((dat1[offs]&0x1f)<<8);
|
|
INT32 flipx = (dat1[offs] & 0x40) ? 0x0f : 0;
|
|
|
|
UINT8 *gfx = DrvGfxROM2 + (code * 0x100);
|
|
|
|
UINT16 *dst = pMystwarrRozBitmap + sy * 0x2000 + sx;
|
|
|
|
for (INT32 y = 0; y < 16; y++) {
|
|
for (INT32 x = 0; x < 16; x++, gfx++) {
|
|
dst[x^flipx] = gfx[0];
|
|
}
|
|
dst += 0x2000;
|
|
}
|
|
}
|
|
}
|
|
|
|
static INT32 DadandrnInit()
|
|
{
|
|
nGame = 6;
|
|
|
|
GenericTilesInit();
|
|
|
|
AllMem = NULL;
|
|
MemIndex();
|
|
INT32 nLen = MemEnd - (UINT8 *)0;
|
|
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
|
|
memset(AllMem, 0, nLen);
|
|
MemIndex();
|
|
|
|
{
|
|
if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x000000, 1, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100001, 2, 2)) return 1;
|
|
if (BurnLoadRom(Drv68KROM + 0x100000, 3, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvZ80ROM + 0x000000, 4, 1)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000000, 5, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM0 + 0x000002, 6, 5, LD_GROUP(2) | LD_REVERSE)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM0 + 0x000004, 7, 5)) return 1;
|
|
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000000, 8, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000002, 9, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000004, 10, 8, 2)) return 1;
|
|
if (BurnLoadRomExt(DrvGfxROM1 + 0x000006, 11, 8, 2)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM1 + 0x800000, 12, 2)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM1 + 0x800001, 13, 2)) return 1;
|
|
|
|
if (BurnLoadRom(DrvGfxROM2 + 0x000000, 14, 1)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM2 + 0x080000, 15, 1)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM2 + 0x100000, 16, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvGfxROM3 + 0x000000, 17, 1)) return 1;
|
|
if (BurnLoadRom(DrvGfxROM3 + 0x040000, 18, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvSndROM + 0x000000, 19, 1)) return 1;
|
|
if (BurnLoadRom(DrvSndROM + 0x200000, 20, 1)) return 1;
|
|
|
|
if (BurnLoadRom(DrvEeprom + 0x000000, 21, 1)) return 1;
|
|
|
|
decode_gfx1(DrvGfxROM0, DrvGfxROMExp0, 0x500000);
|
|
|
|
DecodeSprites(DrvGfxROM1, DrvGfxROMExp1, 0xa00000);
|
|
}
|
|
|
|
K055555Init();
|
|
K054338Init();
|
|
|
|
K056832Init(DrvGfxROM0, DrvGfxROMExp0, 0x400000, game5bpp_tile_callback);
|
|
K056832SetGlobalOffsets(24, 17);
|
|
K056832SetLayerOffsets(0, -2+4, 0);
|
|
K056832SetLayerOffsets(1, 0+4, 0);
|
|
K056832SetLayerOffsets(2, 2+4, 0);
|
|
K056832SetLayerOffsets(3, 3+4, 0);
|
|
|
|
K053247Init(DrvGfxROM1, DrvGfxROMExp1, 0x7fffff, gaiapolis_sprite_callback, 1);
|
|
K053247SetSpriteOffset(-24-42, -17-22);
|
|
K053247SetBpp(5);
|
|
|
|
konamigx_mixer_init(0);
|
|
konamigx_mixer_primode(1);
|
|
|
|
SekInit(0, 0x68000);
|
|
SekOpen(0);
|
|
SekMapMemory(Drv68KROM, 0x000000, 0x1fffff, SM_ROM);
|
|
SekMapMemory(DrvSpriteRam, 0x400000, 0x40ffff, SM_ROM);
|
|
SekMapMemory(DrvPalRAM, 0x420000, 0x421fff, SM_RAM);
|
|
SekMapMemory(DrvK053936Ctrl, 0x460000, 0x46001f, SM_RAM);
|
|
SekMapMemory(DrvK053936RAM, 0x470000, 0x470fff, SM_RAM);
|
|
SekMapMemory(Drv68KRAM, 0x600000, 0x60ffff, SM_RAM);
|
|
SekSetWriteWordHandler(0, dadandrn_main_write_word);
|
|
SekSetWriteByteHandler(0, dadandrn_main_write_byte);
|
|
SekSetReadWordHandler(0, dadandrn_main_read_word);
|
|
SekSetReadByteHandler(0, dadandrn_main_read_byte);
|
|
SekClose();
|
|
|
|
ZetInit(0);
|
|
ZetOpen(0);
|
|
ZetMapMemory(DrvZ80ROM, 0x0000, 0x7fff, ZET_ROM);
|
|
ZetMapMemory(DrvZ80RAM, 0xc000, 0xdfff, ZET_RAM);
|
|
ZetSetWriteHandler(mystwarr_sound_write);
|
|
ZetSetReadHandler(mystwarr_sound_read);
|
|
ZetClose();
|
|
|
|
EEPROMInit(&mystwarr_eeprom_interface);
|
|
|
|
{
|
|
pMystwarrRozBitmap = (UINT16*)BurnMalloc(((512 * 16) * 2) * (512 * 16) * 2);
|
|
DadandrnRozTilemapdraw();
|
|
|
|
m_k053936_0_ctrl = (UINT16*)DrvK053936Ctrl;
|
|
m_k053936_0_linectrl = (UINT16*)DrvK053936RAM;
|
|
K053936GP_set_offset(0, -24-8, -17);
|
|
}
|
|
|
|
K054539Init(0, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(0, 0, 1.00);
|
|
K054539_set_gain(0, 1, 1.00);
|
|
K054539_set_gain(0, 2, 1.00);
|
|
K054539_set_gain(0, 3, 1.00);
|
|
K054539_set_gain(0, 4, 2.00);
|
|
K054539_set_gain(0, 5, 2.00);
|
|
K054539_set_gain(0, 6, 2.00);
|
|
K054539_set_gain(0, 7, 2.00);
|
|
|
|
K054539Init(1, 48000, DrvSndROM, 0x400000);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
|
K054539SetRoute(0, BURN_SND_K054539_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
|
K054539_set_gain(1, 0, 1.00);
|
|
K054539_set_gain(1, 1, 1.00);
|
|
K054539_set_gain(1, 2, 1.00);
|
|
K054539_set_gain(1, 3, 1.00);
|
|
K054539_set_gain(1, 4, 1.00);
|
|
K054539_set_gain(1, 5, 1.00);
|
|
K054539_set_gain(1, 6, 1.00);
|
|
K054539_set_gain(1, 7, 1.00);
|
|
|
|
DrvDoReset();
|
|
|
|
return 0;
|
|
}
|
|
|
|
static INT32 DrvExit()
|
|
{
|
|
GenericTilesExit();
|
|
|
|
KonamiICExit();
|
|
|
|
konamigx_mixer_exit();
|
|
|
|
SekExit();
|
|
ZetExit();
|
|
|
|
EEPROMExit();
|
|
|
|
K054539Exit();
|
|
|
|
BurnFree (AllMem);
|
|
if (pMystwarrRozBitmap) {
|
|
BurnFree (pMystwarrRozBitmap);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static void DrvPaletteRecalc()
|
|
{
|
|
UINT16 *pal = (UINT16*)DrvPalRAM;
|
|
|
|
for (INT32 i = 0; i < 0x2000/2; i+=2)
|
|
{
|
|
INT32 r = pal[i+0] & 0xff;
|
|
INT32 g = pal[i+1] >> 8;
|
|
INT32 b = pal[i+1] & 0xff;
|
|
|
|
DrvPalette[i/2] = (r << 16) + (g << 8) + b;
|
|
}
|
|
}
|
|
|
|
static INT32 DrvDraw()
|
|
{
|
|
DrvPaletteRecalc();
|
|
|
|
KonamiClearBitmaps(0);
|
|
|
|
for (INT32 i = 0; i < 4; i++) {
|
|
layer_colorbase[i] = K055555GetPaletteIndex(i)<<4;
|
|
}
|
|
|
|
INT32 blendmode = 0, enable_sub = 0;
|
|
|
|
if (nGame == 1) { // mystwarr
|
|
blendmode = 0;
|
|
sprite_colorbase = K055555GetPaletteIndex(4)<<5;
|
|
}
|
|
|
|
if (nGame == 2 || nGame == 3) { // viostorm / metamrph
|
|
blendmode = GXSUB_K053250 | GXSUB_4BPP;
|
|
sprite_colorbase = K055555GetPaletteIndex(4)<<4;
|
|
}
|
|
|
|
if (nGame == 4) { // mtlchamp
|
|
cbparam = K055555ReadRegister(K55_PRIINP_8);
|
|
oinprion = K055555ReadRegister(K55_OINPRI_ON);
|
|
|
|
blendmode = (oinprion==0xef && K054338_read_register(K338_REG_PBLEND)) ? ((1<<16|GXMIX_BLEND_FORCE)<<2) : 0;
|
|
sprite_colorbase = K055555GetPaletteIndex(4)<<5;
|
|
}
|
|
|
|
if (nGame == 5) // gaiapolis
|
|
{
|
|
sprite_colorbase = (K055555GetPaletteIndex(4)<<4)&0x7f;
|
|
sub1_colorbase = (K055555GetPaletteIndex(5)<<8)&0x700;
|
|
blendmode = GXSUB_4BPP;
|
|
K053936GP_set_colorbase(0, sub1_colorbase);
|
|
enable_sub = 1;
|
|
}
|
|
|
|
if (nGame == 6) // dadandrn
|
|
{
|
|
sprite_colorbase = (K055555GetPaletteIndex(4)<<3)&0x7f;
|
|
sub1_colorbase = (K055555GetPaletteIndex(5)<<8)&0x700;
|
|
blendmode = GXSUB_8BPP;
|
|
K053936GP_set_colorbase(0, sub1_colorbase);
|
|
enable_sub = 1;
|
|
}
|
|
|
|
konamigx_mixer(enable_sub, blendmode, 0, 0, 0, 0, 0);
|
|
|
|
KonamiBlendCopy(DrvPalette);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static INT32 DrvFrame()
|
|
{
|
|
if (DrvReset) {
|
|
DrvDoReset();
|
|
}
|
|
|
|
{
|
|
memset (DrvInputs, 0xff, 5 * sizeof(INT16));
|
|
for (INT32 i = 0; i < 16; i++) {
|
|
DrvInputs[0] ^= (DrvJoy1[i] & 1) << i;
|
|
DrvInputs[1] ^= (DrvJoy2[i] & 1) << i;
|
|
DrvInputs[2] ^= (DrvJoy3[i] & 1) << i;
|
|
DrvInputs[3] ^= (DrvJoy4[i] & 1) << i;
|
|
DrvInputs[4] ^= (DrvJoy5[i] & 1) << i;
|
|
}
|
|
|
|
DrvInputs[1] = DrvDips[0] | (DrvInputs[1] & 0xff00) | 2;
|
|
}
|
|
|
|
SekNewFrame();
|
|
ZetNewFrame();
|
|
|
|
INT32 nInterleave = nBurnSoundLen / 4;
|
|
INT32 nSoundBufferPos = 0;
|
|
INT32 nCyclesTotal[2] = { 16000000 / 60, 8000000 / 60 };
|
|
INT32 nCyclesDone[2] = { 0, 0 };
|
|
|
|
SekOpen(0);
|
|
ZetOpen(0);
|
|
|
|
for (INT32 i = 0; i < nInterleave; i++) {
|
|
INT32 nNext, nCyclesSegment;
|
|
|
|
nNext = (i + 1) * nCyclesTotal[0] / nInterleave;
|
|
nCyclesSegment = nNext - nCyclesDone[0];
|
|
nCyclesSegment = SekRun(nCyclesSegment);
|
|
nCyclesDone[0] += nCyclesSegment;
|
|
|
|
if (nGame == 1)
|
|
{
|
|
if (mw_irq_control & 1)
|
|
{
|
|
if (i == 0)
|
|
SekSetIRQLine(4, SEK_IRQSTATUS_AUTO);
|
|
|
|
if (i == ((nInterleave * 240)/256))
|
|
SekSetIRQLine(2, SEK_IRQSTATUS_AUTO);
|
|
}
|
|
}
|
|
|
|
if (nGame == 2 || nGame == 3)
|
|
{
|
|
if (i == ((nInterleave * 24) / 256))
|
|
SekSetIRQLine(6, SEK_IRQSTATUS_AUTO);
|
|
|
|
if (i == ((nInterleave * 248) / 256) && K053246_is_IRQ_enabled())
|
|
SekSetIRQLine(5, SEK_IRQSTATUS_AUTO);
|
|
}
|
|
|
|
if (nGame == 4) // martchmp
|
|
{
|
|
if (mw_irq_control & 2)
|
|
{
|
|
if (i == ((nInterleave * 23) / 256))
|
|
SekSetIRQLine(2, SEK_IRQSTATUS_AUTO);
|
|
|
|
if (i == ((nInterleave * 247) / 256) && K053246_is_IRQ_enabled())
|
|
SekSetIRQLine(6, SEK_IRQSTATUS_AUTO);
|
|
}
|
|
}
|
|
|
|
if (nGame == 5 || nGame == 6)
|
|
{
|
|
if (i == (nInterleave - 1))
|
|
SekSetIRQLine(5, SEK_IRQSTATUS_AUTO);
|
|
}
|
|
|
|
nNext = (i + 1) * nCyclesTotal[1] / nInterleave;
|
|
nCyclesSegment = nNext - nCyclesDone[1];
|
|
nCyclesSegment = ZetRun(nCyclesSegment);
|
|
nCyclesDone[1] += nCyclesSegment;
|
|
|
|
if ((i % (nInterleave / 8)) == ((nInterleave / 8) - 1)) {// && sound_nmi_enable && sound_control) { // iq_132
|
|
ZetNmi(); //ZetSetIRQLine(0x20, ZET_IRQSTATUS_ACK);
|
|
}
|
|
|
|
if (pBurnSoundOut) {
|
|
INT32 nSegmentLength = nBurnSoundLen / nInterleave;
|
|
INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
|
|
memset(pSoundBuf, 0, nSegmentLength * 2 * 2);
|
|
K054539Update(0, pSoundBuf, nSegmentLength);
|
|
K054539Update(1, pSoundBuf, nSegmentLength);
|
|
nSoundBufferPos += nSegmentLength;
|
|
}
|
|
}
|
|
|
|
if (pBurnSoundOut) {
|
|
INT32 nSegmentLength = nBurnSoundLen - nSoundBufferPos;
|
|
INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
|
|
if (nSegmentLength) {
|
|
memset(pSoundBuf, 0, nSegmentLength * 2 * 2);
|
|
K054539Update(0, pSoundBuf, nSegmentLength);
|
|
K054539Update(1, pSoundBuf, nSegmentLength);
|
|
}
|
|
}
|
|
|
|
ZetClose();
|
|
SekClose();
|
|
|
|
if (pBurnDraw) {
|
|
DrvDraw();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static INT32 DrvScan(INT32 nAction,INT32 *pnMin)
|
|
{
|
|
struct BurnArea ba;
|
|
|
|
if (pnMin) {
|
|
*pnMin = 0x029732;
|
|
}
|
|
|
|
if (nAction & ACB_VOLATILE) {
|
|
memset(&ba, 0, sizeof(ba));
|
|
|
|
ba.Data = AllRam;
|
|
ba.nLen = RamEnd - AllRam;
|
|
ba.szName = "All Ram";
|
|
BurnAcb(&ba);
|
|
|
|
SekScan(nAction);
|
|
ZetScan(nAction);
|
|
|
|
K054539Scan(nAction);
|
|
KonamiICScan(nAction);
|
|
|
|
SCAN_VAR(sound_nmi_enable);
|
|
SCAN_VAR(sound_control);
|
|
SCAN_VAR(control_data);
|
|
SCAN_VAR(mw_irq_control);
|
|
SCAN_VAR(prot_data);
|
|
SCAN_VAR(layer_colorbase);
|
|
SCAN_VAR(sprite_colorbase);
|
|
SCAN_VAR(sub1_colorbase);
|
|
SCAN_VAR(cbparam);
|
|
SCAN_VAR(oinprion);
|
|
SCAN_VAR(z80_bank);
|
|
}
|
|
|
|
if (nAction & ACB_WRITE) {
|
|
ZetOpen(0);
|
|
bankswitch(z80_bank);
|
|
ZetClose();
|
|
}
|
|
|
|
EEPROMScan(nAction, pnMin);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
// Mystic Warriors (ver EAA)
|
|
|
|
static struct BurnRomInfo mystwarrRomDesc[] = {
|
|
{ "128eaa01.20f", 0x040000, 0x508f249c, 1 }, // 0 maincpu
|
|
{ "128eaa02.20g", 0x040000, 0xf8ffa352, 1 }, // 1
|
|
{ "128a03.19f", 0x080000, 0xe98094f3, 1 }, // 2
|
|
{ "128a04.19g", 0x080000, 0x88c6a3e4, 1 }, // 3
|
|
|
|
{ "128a05.6b", 0x020000, 0x0e5194e0, 2 }, // 4 soundcpu
|
|
|
|
{ "128a08.1h", 0x100000, 0x63d6cfa0, 3 }, // 5 gfx1
|
|
{ "128a09.1k", 0x100000, 0x573a7725, 3 }, // 6
|
|
{ "128a10.3h", 0x080000, 0x558e545a, 3 }, // 7
|
|
|
|
{ "128a16.22k", 0x100000, 0x459b6407, 4 }, // 8 gfx2
|
|
{ "128a15.20k", 0x100000, 0x6bbfedf4, 4 }, // 9
|
|
{ "128a14.19k", 0x100000, 0xf7bd89dd, 4 }, // 10
|
|
{ "128a13.17k", 0x100000, 0xe89b66a2, 4 }, // 11
|
|
{ "128a12.12k", 0x080000, 0x63de93e2, 4 }, // 12
|
|
{ "128a11.10k", 0x080000, 0x4eac941a, 4 }, // 13
|
|
|
|
{ "128a06.2d", 0x200000, 0x88ed598c, 5 }, // 14 shared
|
|
{ "128a07.1d", 0x200000, 0xdb79a66e, 5 }, // 15
|
|
|
|
{ "mystwarr.nv", 0x000080, 0x28df2269, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mystwarr)
|
|
STD_ROM_FN(mystwarr)
|
|
|
|
struct BurnDriver BurnDrvMystwarr = {
|
|
"mystwarr", NULL, NULL, NULL, "1993",
|
|
"Mystic Warriors (ver EAA)\0", NULL, "Konami", "GX128",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, mystwarrRomInfo, mystwarrRomName, NULL, NULL, MystwarrInputInfo, MystwarrDIPInfo,
|
|
MystwarrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x0800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Mystic Warriors (ver UAA)
|
|
|
|
static struct BurnRomInfo mystwarruRomDesc[] = {
|
|
{ "128uaa01.20f", 0x040000, 0x3a89aafd, 1 }, // 0 maincpu
|
|
{ "128uaa02.20g", 0x040000, 0xde07410f, 1 }, // 1
|
|
{ "128a03.19f", 0x080000, 0xe98094f3, 1 }, // 2
|
|
{ "128a04.19g", 0x080000, 0x88c6a3e4, 1 }, // 3
|
|
|
|
{ "128a05.6b", 0x020000, 0x0e5194e0, 2 }, // 4 soundcpu
|
|
|
|
{ "128a08.1h", 0x100000, 0x63d6cfa0, 3 }, // 5 gfx1
|
|
{ "128a09.1k", 0x100000, 0x573a7725, 3 }, // 6
|
|
{ "128a10.3h", 0x080000, 0x558e545a, 3 }, // 7
|
|
|
|
{ "128a16.22k", 0x100000, 0x459b6407, 4 }, // 8 gfx2
|
|
{ "128a15.20k", 0x100000, 0x6bbfedf4, 4 }, // 9
|
|
{ "128a14.19k", 0x100000, 0xf7bd89dd, 4 }, // 10
|
|
{ "128a13.17k", 0x100000, 0xe89b66a2, 4 }, // 11
|
|
{ "128a12.12k", 0x080000, 0x63de93e2, 4 }, // 12
|
|
{ "128a11.10k", 0x080000, 0x4eac941a, 4 }, // 13
|
|
|
|
{ "128a06.2d", 0x200000, 0x88ed598c, 5 }, // 14 shared
|
|
{ "128a07.1d", 0x200000, 0xdb79a66e, 5 }, // 15
|
|
|
|
{ "mystwarru.nv", 0x000080, 0x1a2597c7, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mystwarru)
|
|
STD_ROM_FN(mystwarru)
|
|
|
|
struct BurnDriver BurnDrvMystwarru = {
|
|
"mystwarru", "mystwarr", NULL, NULL, "1993",
|
|
"Mystic Warriors (ver UAA)\0", NULL, "Konami", "GX128",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, mystwarruRomInfo, mystwarruRomName, NULL, NULL, MystwarrInputInfo, MystwarrDIPInfo,
|
|
MystwarrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x0800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Mystic Warriors (ver JAA)
|
|
|
|
static struct BurnRomInfo mystwarrjRomDesc[] = {
|
|
{ "128jaa01.20f", 0x040000, 0x49c37bfe, 1 }, // 0 maincpu
|
|
{ "128jaa02.20g", 0x040000, 0xe39fb3bb, 1 }, // 1
|
|
{ "128a03.19f", 0x080000, 0xe98094f3, 1 }, // 2
|
|
{ "128a04.19g", 0x080000, 0x88c6a3e4, 1 }, // 3
|
|
|
|
{ "128a05.6b", 0x020000, 0x0e5194e0, 2 }, // 4 soundcpu
|
|
|
|
{ "128a08.1h", 0x100000, 0x63d6cfa0, 3 }, // 5 gfx1
|
|
{ "128a09.1k", 0x100000, 0x573a7725, 3 }, // 6
|
|
{ "128a10.3h", 0x080000, 0x558e545a, 3 }, // 7
|
|
|
|
{ "128a16.22k", 0x100000, 0x459b6407, 4 }, // 8 gfx2
|
|
{ "128a15.20k", 0x100000, 0x6bbfedf4, 4 }, // 9
|
|
{ "128a14.19k", 0x100000, 0xf7bd89dd, 4 }, // 10
|
|
{ "128a13.17k", 0x100000, 0xe89b66a2, 4 }, // 11
|
|
{ "128a12.12k", 0x080000, 0x63de93e2, 4 }, // 12
|
|
{ "128a11.10k", 0x080000, 0x4eac941a, 4 }, // 13
|
|
|
|
{ "128a06.2d", 0x200000, 0x88ed598c, 5 }, // 14 shared
|
|
{ "128a07.1d", 0x200000, 0xdb79a66e, 5 }, // 15
|
|
|
|
{ "mystwarrj.nv", 0x000080, 0x8e259918, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mystwarrj)
|
|
STD_ROM_FN(mystwarrj)
|
|
|
|
struct BurnDriver BurnDrvMystwarrj = {
|
|
"mystwarrj", "mystwarr", NULL, NULL, "1993",
|
|
"Mystic Warriors (ver JAA)\0", NULL, "Konami", "GX128",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, mystwarrjRomInfo, mystwarrjRomName, NULL, NULL, MystwarrInputInfo, MystwarrDIPInfo,
|
|
MystwarrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x0800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Mystic Warriors (ver AAA)
|
|
|
|
static struct BurnRomInfo mystwarraRomDesc[] = {
|
|
{ "128aaa01.20f", 0x040000, 0x633ead86, 1 }, // 0 maincpu
|
|
{ "128aaa02.20g", 0x040000, 0x69ab81a2, 1 }, // 1
|
|
{ "128a03.19f", 0x080000, 0xe98094f3, 1 }, // 2
|
|
{ "128a04.19g", 0x080000, 0x88c6a3e4, 1 }, // 3
|
|
|
|
{ "128a05.6b", 0x020000, 0x0e5194e0, 2 }, // 4 soundcpu
|
|
|
|
{ "128a08.1h", 0x100000, 0x63d6cfa0, 3 }, // 5 gfx1
|
|
{ "128a09.1k", 0x100000, 0x573a7725, 3 }, // 6
|
|
{ "128a10.3h", 0x080000, 0x558e545a, 3 }, // 7
|
|
|
|
{ "128a16.22k", 0x100000, 0x459b6407, 4 }, // 8 gfx2
|
|
{ "128a15.20k", 0x100000, 0x6bbfedf4, 4 }, // 9
|
|
{ "128a14.19k", 0x100000, 0xf7bd89dd, 4 }, // 10
|
|
{ "128a13.17k", 0x100000, 0xe89b66a2, 4 }, // 11
|
|
{ "128a12.12k", 0x080000, 0x63de93e2, 4 }, // 12
|
|
{ "128a11.10k", 0x080000, 0x4eac941a, 4 }, // 13
|
|
|
|
{ "128a06.2d", 0x200000, 0x88ed598c, 5 }, // 14 shared
|
|
{ "128a07.1d", 0x200000, 0xdb79a66e, 5 }, // 15
|
|
|
|
{ "mystwarra.nv", 0x000080, 0x38951263, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mystwarra)
|
|
STD_ROM_FN(mystwarra)
|
|
|
|
struct BurnDriver BurnDrvMystwarra = {
|
|
"mystwarra", "mystwarr", NULL, NULL, "1993",
|
|
"Mystic Warriors (ver AAA)\0", NULL, "Konami", "GX128",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, mystwarraRomInfo, mystwarraRomName, NULL, NULL, MystwarrInputInfo, MystwarrDIPInfo,
|
|
MystwarrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x0800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Violent Storm (ver EAC)
|
|
|
|
static struct BurnRomInfo viostormRomDesc[] = {
|
|
{ "168eac01.15h", 0x080000, 0x9f6b5c81, 1 }, // 0 maincpu
|
|
{ "168eac02.15f", 0x080000, 0x126ecf03, 1 }, // 1
|
|
|
|
{ "168a05.7c", 0x020000, 0x507fb3eb, 2 }, // 2 soundcpu
|
|
|
|
{ "168a09.1h", 0x200000, 0x1b34a881, 3 }, // 3 gfx1
|
|
{ "168a08.1k", 0x200000, 0xdb0ce743, 3 }, // 4
|
|
|
|
{ "168a10.22k", 0x200000, 0xbd2bbdea, 4 }, // 5 gfx2
|
|
{ "168a11.19k", 0x200000, 0x7a57c9e7, 4 }, // 6
|
|
{ "168a12.20k", 0x200000, 0xb6b1c4ef, 4 }, // 7
|
|
{ "168a13.17k", 0x200000, 0xcdec3650, 4 }, // 8
|
|
|
|
{ "168a06.1c", 0x200000, 0x25404fd7, 5 }, // 9 shared
|
|
{ "168a07.1e", 0x200000, 0xfdbbf8cc, 5 }, // 10
|
|
|
|
{ "viostorm.nv", 0x000080, 0x3cb1c96c, 6 }, // 11 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(viostorm)
|
|
STD_ROM_FN(viostorm)
|
|
|
|
struct BurnDriver BurnDrvViostorm = {
|
|
"viostorm", NULL, NULL, NULL, "1993",
|
|
"Violent Storm (ver EAC)\0", NULL, "Konami", "GX224",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, viostormRomInfo, viostormRomName, NULL, NULL, ViostormInputInfo, ViostormDIPInfo,
|
|
ViostormInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Violent Storm (ver EAB)
|
|
|
|
static struct BurnRomInfo viostormebRomDesc[] = {
|
|
{ "168eab01.15h", 0x080000, 0x4eee6a8e, 1 }, // 0 maincpu
|
|
{ "168eab02.15f", 0x080000, 0x8dd8aa4c, 1 }, // 1
|
|
|
|
{ "168a05.7c", 0x020000, 0x507fb3eb, 2 }, // 2 soundcpu
|
|
|
|
{ "168a09.1h", 0x200000, 0x1b34a881, 3 }, // 3 gfx1
|
|
{ "168a08.1k", 0x200000, 0xdb0ce743, 3 }, // 4
|
|
|
|
{ "168a10.22k", 0x200000, 0xbd2bbdea, 4 }, // 5 gfx2
|
|
{ "168a11.19k", 0x200000, 0x7a57c9e7, 4 }, // 6
|
|
{ "168a12.20k", 0x200000, 0xb6b1c4ef, 4 }, // 7
|
|
{ "168a13.17k", 0x200000, 0xcdec3650, 4 }, // 8
|
|
|
|
{ "168a06.1c", 0x200000, 0x25404fd7, 5 }, // 9 shared
|
|
{ "168a07.1e", 0x200000, 0xfdbbf8cc, 5 }, // 10
|
|
|
|
{ "viostormeb.nv", 0x000080, 0x28b5fe49, 6 }, // 11 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(viostormeb)
|
|
STD_ROM_FN(viostormeb)
|
|
|
|
struct BurnDriver BurnDrvViostormeb = {
|
|
"viostormeb", "viostorm", NULL, NULL, "1993",
|
|
"Violent Storm (ver EAB)\0", NULL, "Konami", "GX168",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, viostormebRomInfo, viostormebRomName, NULL, NULL, ViostormInputInfo, ViostormDIPInfo,
|
|
ViostormInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Violent Storm (ver UAC)
|
|
|
|
static struct BurnRomInfo viostormuRomDesc[] = {
|
|
{ "168uac01.15h", 0x080000, 0x49853530, 1 }, // 0 maincpu
|
|
{ "168uac02.15f", 0x080000, 0x055ca6fe, 1 }, // 1
|
|
|
|
{ "168a05.7c", 0x020000, 0x507fb3eb, 2 }, // 2 soundcpu
|
|
|
|
{ "168a09.1h", 0x200000, 0x1b34a881, 3 }, // 3 gfx1
|
|
{ "168a08.1k", 0x200000, 0xdb0ce743, 3 }, // 4
|
|
|
|
{ "168a10.22k", 0x200000, 0xbd2bbdea, 4 }, // 5 gfx2
|
|
{ "168a11.19k", 0x200000, 0x7a57c9e7, 4 }, // 6
|
|
{ "168a12.20k", 0x200000, 0xb6b1c4ef, 4 }, // 7
|
|
{ "168a13.17k", 0x200000, 0xcdec3650, 4 }, // 8
|
|
|
|
{ "168a06.1c", 0x200000, 0x25404fd7, 5 }, // 9 shared
|
|
{ "168a07.1e", 0x200000, 0xfdbbf8cc, 5 }, // 10
|
|
|
|
{ "viostormu.nv", 0x000080, 0x797042a1, 6 }, // 11 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(viostormu)
|
|
STD_ROM_FN(viostormu)
|
|
|
|
struct BurnDriver BurnDrvViostormu = {
|
|
"viostormu", "viostorm", NULL, NULL, "1993",
|
|
"Violent Storm (ver UAC)\0", NULL, "Konami", "GX168",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, viostormuRomInfo, viostormuRomName, NULL, NULL, ViostormInputInfo, ViostormDIPInfo,
|
|
ViostormInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Violent Storm (ver UAB)
|
|
|
|
static struct BurnRomInfo viostormubRomDesc[] = {
|
|
{ "168uab01.15h", 0x080000, 0x2d6a9fa3, 1 }, // 0 maincpu
|
|
{ "168uab02.15f", 0x080000, 0x0e75f7cc, 1 }, // 1
|
|
|
|
{ "168a05.7c", 0x020000, 0x507fb3eb, 2 }, // 2 soundcpu
|
|
|
|
{ "168a09.1h", 0x200000, 0x1b34a881, 3 }, // 3 gfx1
|
|
{ "168a08.1k", 0x200000, 0xdb0ce743, 3 }, // 4
|
|
|
|
{ "168a10.22k", 0x200000, 0xbd2bbdea, 4 }, // 5 gfx2
|
|
{ "168a11.19k", 0x200000, 0x7a57c9e7, 4 }, // 6
|
|
{ "168a12.20k", 0x200000, 0xb6b1c4ef, 4 }, // 7
|
|
{ "168a13.17k", 0x200000, 0xcdec3650, 4 }, // 8
|
|
|
|
{ "168a06.1c", 0x200000, 0x25404fd7, 5 }, // 9 shared
|
|
{ "168a07.1e", 0x200000, 0xfdbbf8cc, 5 }, // 10
|
|
|
|
{ "viostormub.nv", 0x000080, 0xb6937413, 6 }, // 11 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(viostormub)
|
|
STD_ROM_FN(viostormub)
|
|
|
|
struct BurnDriver BurnDrvViostormub = {
|
|
"viostormub", "viostorm", NULL, NULL, "1993",
|
|
"Violent Storm (ver UAB)\0", NULL, "Konami", "GX168",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, viostormubRomInfo, viostormubRomName, NULL, NULL, ViostormInputInfo, ViostormDIPInfo,
|
|
ViostormInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Violent Storm (ver AAC)
|
|
|
|
static struct BurnRomInfo viostormaRomDesc[] = {
|
|
{ "168aac01.15h", 0x080000, 0x3620635c, 1 }, // 0 maincpu
|
|
{ "168aac02.15f", 0x080000, 0xdb679aec, 1 }, // 1
|
|
|
|
{ "168a05.7c", 0x020000, 0x507fb3eb, 2 }, // 2 soundcpu
|
|
|
|
{ "168a09.1h", 0x200000, 0x1b34a881, 3 }, // 3 gfx1
|
|
{ "168a08.1k", 0x200000, 0xdb0ce743, 3 }, // 4
|
|
|
|
{ "168a10.22k", 0x200000, 0xbd2bbdea, 4 }, // 5 gfx2
|
|
{ "168a11.19k", 0x200000, 0x7a57c9e7, 4 }, // 6
|
|
{ "168a12.20k", 0x200000, 0xb6b1c4ef, 4 }, // 7
|
|
{ "168a13.17k", 0x200000, 0xcdec3650, 4 }, // 8
|
|
|
|
{ "168a06.1c", 0x200000, 0x25404fd7, 5 }, // 9 shared
|
|
{ "168a07.1e", 0x200000, 0xfdbbf8cc, 5 }, // 10
|
|
|
|
{ "viostorma.nv", 0x000080, 0x2cfbf966, 6 }, // 11 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(viostorma)
|
|
STD_ROM_FN(viostorma)
|
|
|
|
struct BurnDriver BurnDrvViostorma = {
|
|
"viostorma", "viostorm", NULL, NULL, "1993",
|
|
"Violent Storm (ver AAC)\0", NULL, "Konami", "GX168",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, viostormaRomInfo, viostormaRomName, NULL, NULL, ViostormInputInfo, ViostormDIPInfo,
|
|
ViostormInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Violent Storm (ver AAB)
|
|
|
|
static struct BurnRomInfo viostormabRomDesc[] = {
|
|
{ "168aab01.15h", 0x080000, 0x14f78423, 1 }, // 0 maincpu
|
|
{ "168aab02.15f", 0x080000, 0x3dd1cc83, 1 }, // 1
|
|
|
|
{ "168a05.7c", 0x020000, 0x507fb3eb, 2 }, // 2 soundcpu
|
|
|
|
{ "168a09.1h", 0x200000, 0x1b34a881, 3 }, // 3 gfx1
|
|
{ "168a08.1k", 0x200000, 0xdb0ce743, 3 }, // 4
|
|
|
|
{ "168a10.22k", 0x200000, 0xbd2bbdea, 4 }, // 5 gfx2
|
|
{ "168a11.19k", 0x200000, 0x7a57c9e7, 4 }, // 6
|
|
{ "168a12.20k", 0x200000, 0xb6b1c4ef, 4 }, // 7
|
|
{ "168a13.17k", 0x200000, 0xcdec3650, 4 }, // 8
|
|
|
|
{ "168a06.1c", 0x200000, 0x25404fd7, 5 }, // 9 shared
|
|
{ "168a07.1e", 0x200000, 0xfdbbf8cc, 5 }, // 10
|
|
|
|
{ "viostormab.nv", 0x000080, 0x38ffce43, 6 }, // 11 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(viostormab)
|
|
STD_ROM_FN(viostormab)
|
|
|
|
struct BurnDriver BurnDrvViostormab = {
|
|
"viostormab", "viostorm", NULL, NULL, "1993",
|
|
"Violent Storm (ver AAB)\0", NULL, "Konami", "GX168",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, viostormabRomInfo, viostormabRomName, NULL, NULL, ViostormInputInfo, ViostormDIPInfo,
|
|
ViostormInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Violent Storm (ver JAC)
|
|
|
|
static struct BurnRomInfo viostormjRomDesc[] = {
|
|
{ "168jac01.b01", 0x080000, 0xf8be1225, 1 }, // 0 maincpu
|
|
{ "168jac02.b02", 0x080000, 0xf42fd1e5, 1 }, // 1
|
|
|
|
{ "168a05.7c", 0x020000, 0x507fb3eb, 2 }, // 2 soundcpu
|
|
|
|
{ "168a09.1h", 0x200000, 0x1b34a881, 3 }, // 3 gfx1
|
|
{ "168a08.1k", 0x200000, 0xdb0ce743, 3 }, // 4
|
|
|
|
{ "168a10.22k", 0x200000, 0xbd2bbdea, 4 }, // 5 gfx2
|
|
{ "168a11.19k", 0x200000, 0x7a57c9e7, 4 }, // 6
|
|
{ "168a12.20k", 0x200000, 0xb6b1c4ef, 4 }, // 7
|
|
{ "168a13.17k", 0x200000, 0xcdec3650, 4 }, // 8
|
|
|
|
{ "168a06.1c", 0x200000, 0x25404fd7, 5 }, // 9 shared
|
|
{ "168a07.1e", 0x200000, 0xfdbbf8cc, 5 }, // 10
|
|
|
|
{ "viostormj.nv", 0x000080, 0x32f5d8bc, 6 }, // 11 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(viostormj)
|
|
STD_ROM_FN(viostormj)
|
|
|
|
struct BurnDriver BurnDrvViostormj = {
|
|
"viostormj", "viostorm", NULL, NULL, "1993",
|
|
"Violent Storm (ver JAC)\0", NULL, "Konami", "GX168",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, viostormjRomInfo, viostormjRomName, NULL, NULL, ViostormInputInfo, ViostormDIPInfo,
|
|
ViostormInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Metamorphic Force (ver EAA)
|
|
|
|
static struct BurnRomInfo metamrphRomDesc[] = {
|
|
{ "224eaa01.15h", 0x040000, 0x30962c2b, 1 }, // 0 maincpu
|
|
{ "224eaa02.15f", 0x040000, 0xe314330a, 1 }, // 1
|
|
{ "224a03", 0x080000, 0xa5bedb01, 1 }, // 2
|
|
{ "224a04", 0x080000, 0xada53ba4, 1 }, // 3
|
|
|
|
{ "224a05", 0x040000, 0x4b4c985c, 2 }, // 4 soundcpu
|
|
|
|
{ "224a09", 0x100000, 0x1931afce, 3 }, // 5 gfx1
|
|
{ "224a08", 0x100000, 0xdc94d53a, 3 }, // 6
|
|
|
|
{ "224a10", 0x200000, 0x161287f0, 4 }, // 7 gfx2
|
|
{ "224a11", 0x200000, 0xdf5960e1, 4 }, // 8
|
|
{ "224a12", 0x200000, 0xca72a4b3, 4 }, // 9
|
|
{ "224a13", 0x200000, 0x86b58feb, 4 }, // 10
|
|
|
|
{ "224a14", 0x040000, 0x3c79b404, 5 }, // 11 k053250_1
|
|
|
|
{ "224a06", 0x200000, 0x972f6abe, 6 }, // 12 shared
|
|
{ "224a07", 0x100000, 0x61b2f97a, 6 }, // 13
|
|
|
|
{ "metamrph.nv", 0x000080, 0x2c51229a, 7 }, // 14 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(metamrph)
|
|
STD_ROM_FN(metamrph)
|
|
|
|
struct BurnDriver BurnDrvMetamrph = {
|
|
"metamrph", NULL, NULL, NULL, "1993",
|
|
"Metamorphic Force (ver EAA)\0", NULL, "Konami", "GX224",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, metamrphRomInfo, metamrphRomName, NULL, NULL, MetamrphInputInfo, MetamrphDIPInfo,
|
|
MetamrphInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x0800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Metamorphic Force (ver UAA)
|
|
|
|
static struct BurnRomInfo metamrphuRomDesc[] = {
|
|
{ "224uaa01.15h", 0x040000, 0xe1d9b516, 1 }, // 0 maincpu
|
|
{ "224uaa02.15f", 0x040000, 0x289c926b, 1 }, // 1
|
|
{ "224a03", 0x080000, 0xa5bedb01, 1 }, // 2
|
|
{ "224a04", 0x080000, 0xada53ba4, 1 }, // 3
|
|
|
|
{ "224a05", 0x040000, 0x4b4c985c, 2 }, // 4 soundcpu
|
|
|
|
{ "224a09", 0x100000, 0x1931afce, 3 }, // 5 gfx1
|
|
{ "224a08", 0x100000, 0xdc94d53a, 3 }, // 6
|
|
|
|
{ "224a10", 0x200000, 0x161287f0, 4 }, // 7 gfx2
|
|
{ "224a11", 0x200000, 0xdf5960e1, 4 }, // 8
|
|
{ "224a12", 0x200000, 0xca72a4b3, 4 }, // 9
|
|
{ "224a13", 0x200000, 0x86b58feb, 4 }, // 10
|
|
|
|
{ "224a14", 0x040000, 0x3c79b404, 5 }, // 11 k053250_1
|
|
|
|
{ "224a06", 0x200000, 0x972f6abe, 6 }, // 12 shared
|
|
{ "224a07", 0x100000, 0x61b2f97a, 6 }, // 13
|
|
|
|
{ "metamrphu.nv", 0x000080, 0x1af2f855, 7 }, // 14 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(metamrphu)
|
|
STD_ROM_FN(metamrphu)
|
|
|
|
struct BurnDriver BurnDrvMetamrphu = {
|
|
"metamrphu", "metamrph", NULL, NULL, "1993",
|
|
"Metamorphic Force (ver UAA)\0", NULL, "Konami", "GX224",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, metamrphuRomInfo, metamrphuRomName, NULL, NULL, MetamrphInputInfo, MetamrphDIPInfo,
|
|
MetamrphInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x0800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Metamorphic Force (ver JAA)
|
|
|
|
static struct BurnRomInfo metamrphjRomDesc[] = {
|
|
{ "224jaa01.15h", 0x040000, 0x558d2602, 1 }, // 0 maincpu
|
|
{ "224jaa02.15f", 0x040000, 0x9b252ace, 1 }, // 1
|
|
{ "224a03", 0x080000, 0xa5bedb01, 1 }, // 2
|
|
{ "224a04", 0x080000, 0xada53ba4, 1 }, // 3
|
|
|
|
{ "224a05", 0x040000, 0x4b4c985c, 2 }, // 4 soundcpu
|
|
|
|
{ "224a09", 0x100000, 0x1931afce, 3 }, // 5 gfx1
|
|
{ "224a08", 0x100000, 0xdc94d53a, 3 }, // 6
|
|
|
|
{ "224a10", 0x200000, 0x161287f0, 4 }, // 7 gfx2
|
|
{ "224a11", 0x200000, 0xdf5960e1, 4 }, // 8
|
|
{ "224a12", 0x200000, 0xca72a4b3, 4 }, // 9
|
|
{ "224a13", 0x200000, 0x86b58feb, 4 }, // 10
|
|
|
|
{ "224a14", 0x040000, 0x3c79b404, 5 }, // 11 k053250_1
|
|
|
|
{ "224a06", 0x200000, 0x972f6abe, 6 }, // 12 shared
|
|
{ "224a07", 0x100000, 0x61b2f97a, 6 }, // 13
|
|
|
|
{ "metamrphj.nv", 0x000080, 0x30497478, 7 }, // 14 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(metamrphj)
|
|
STD_ROM_FN(metamrphj)
|
|
|
|
struct BurnDriver BurnDrvMetamrphj = {
|
|
"metamrphj", "metamrph", NULL, NULL, "1993",
|
|
"Metamorphic Force (ver JAA)\0", NULL, "Konami", "GX224",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, metamrphjRomInfo, metamrphjRomName, NULL, NULL, MetamrphInputInfo, MetamrphDIPInfo,
|
|
MetamrphInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x0800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Martial Champion (ver EAB)
|
|
|
|
static struct BurnRomInfo mtlchampRomDesc[] = {
|
|
{ "234eab01.20f", 0x040000, 0x7c4d1e50, 1 }, // 0 maincpu
|
|
{ "234eab02.20g", 0x040000, 0xd8bc85c9, 1 }, // 1
|
|
{ "234_d03.19f", 0x080000, 0xabb577c6, 1 }, // 2
|
|
{ "234_d04.19g", 0x080000, 0x030a1925, 1 }, // 3
|
|
|
|
{ "234_d05.6b", 0x020000, 0xefb6bcaa, 2 }, // 4 soundcpu
|
|
|
|
{ "234a08.1h", 0x100000, 0x27e94288, 3 }, // 5 gfx1
|
|
{ "234a09.1k", 0x100000, 0x03aad28f, 3 }, // 6
|
|
{ "234a10.3h", 0x080000, 0x51f50fe2, 3 }, // 7
|
|
|
|
{ "234a16.22k", 0x200000, 0x14d909a5, 4 }, // 8 gfx2
|
|
{ "234a15.20k", 0x200000, 0xa5028418, 4 }, // 9
|
|
{ "234a14.19k", 0x200000, 0xd7921f47, 4 }, // 10
|
|
{ "234a13.17k", 0x200000, 0x5974392e, 4 }, // 11
|
|
{ "234a12.12k", 0x100000, 0xc7f2b099, 4 }, // 12
|
|
{ "234a11.10k", 0x100000, 0x82923713, 4 }, // 13
|
|
|
|
{ "234a06.2d", 0x200000, 0x12d32384, 5 }, // 14 shared
|
|
{ "234a07.1d", 0x200000, 0x05ee239f, 5 }, // 15
|
|
|
|
{ "mtlchamp.nv", 0x000080, 0xcd47858e, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mtlchamp)
|
|
STD_ROM_FN(mtlchamp)
|
|
|
|
struct BurnDriver BurnDrvMtlchamp = {
|
|
"mtlchamp", NULL, NULL, NULL, "1993",
|
|
"Martial Champion (ver EAB)\0", NULL, "Konami", "GX234",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING, 2, HARDWARE_PREFIX_KONAMI, GBF_VSFIGHT, 0,
|
|
NULL, mtlchampRomInfo, mtlchampRomName, NULL, NULL, MartchmpInputInfo, MartchmpDIPInfo,
|
|
MartchmpInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Martial Champion (ver EAA)
|
|
|
|
static struct BurnRomInfo mtlchamp1RomDesc[] = {
|
|
{ "234eaa01.20f", 0x040000, 0x8fa731db, 1 }, // 0 maincpu
|
|
{ "234eaa02.20g", 0x040000, 0xe7b50b54, 1 }, // 1
|
|
{ "234_d03.19f", 0x080000, 0xabb577c6, 1 }, // 2
|
|
{ "234_d04.19g", 0x080000, 0x030a1925, 1 }, // 3
|
|
|
|
{ "234_d05.6b", 0x020000, 0xefb6bcaa, 2 }, // 4 soundcpu
|
|
|
|
{ "234a08.1h", 0x100000, 0x27e94288, 3 }, // 5 gfx1
|
|
{ "234a09.1k", 0x100000, 0x03aad28f, 3 }, // 6
|
|
{ "234a10.3h", 0x080000, 0x51f50fe2, 3 }, // 7
|
|
|
|
{ "234a16.22k", 0x200000, 0x14d909a5, 4 }, // 8 gfx2
|
|
{ "234a15.20k", 0x200000, 0xa5028418, 4 }, // 9
|
|
{ "234a14.19k", 0x200000, 0xd7921f47, 4 }, // 10
|
|
{ "234a13.17k", 0x200000, 0x5974392e, 4 }, // 11
|
|
{ "234a12.12k", 0x100000, 0xc7f2b099, 4 }, // 12
|
|
{ "234a11.10k", 0x100000, 0x82923713, 4 }, // 13
|
|
|
|
{ "234a06.2d", 0x200000, 0x12d32384, 5 }, // 14 shared
|
|
{ "234a07.1d", 0x200000, 0x05ee239f, 5 }, // 15
|
|
|
|
{ "mtlchamp1.nv", 0x000080, 0x202f6968, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mtlchamp1)
|
|
STD_ROM_FN(mtlchamp1)
|
|
|
|
struct BurnDriver BurnDrvMtlchamp1 = {
|
|
"mtlchamp1", "mtlchamp", NULL, NULL, "1993",
|
|
"Martial Champion (ver EAA)\0", NULL, "Konami", "GX234",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_VSFIGHT, 0,
|
|
NULL, mtlchamp1RomInfo, mtlchamp1RomName, NULL, NULL, MartchmpInputInfo, MartchmpDIPInfo,
|
|
MartchmpInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Martial Champion (ver AAA)
|
|
|
|
static struct BurnRomInfo mtlchampaRomDesc[] = {
|
|
{ "234aaa01.20f", 0x040000, 0x32c70e65, 1 }, // 0 maincpu
|
|
{ "234aaa02.20g", 0x040000, 0x2f666d52, 1 }, // 1
|
|
{ "234_d03.19f", 0x080000, 0xabb577c6, 1 }, // 2
|
|
{ "234_d04.19g", 0x080000, 0x030a1925, 1 }, // 3
|
|
|
|
{ "234_d05.6b", 0x020000, 0xefb6bcaa, 2 }, // 4 soundcpu
|
|
|
|
{ "234a08.1h", 0x100000, 0x27e94288, 3 }, // 5 gfx1
|
|
{ "234a09.1k", 0x100000, 0x03aad28f, 3 }, // 6
|
|
{ "234a10.3h", 0x080000, 0x51f50fe2, 3 }, // 7
|
|
|
|
{ "234a16.22k", 0x200000, 0x14d909a5, 4 }, // 8 gfx2
|
|
{ "234a15.20k", 0x200000, 0xa5028418, 4 }, // 9
|
|
{ "234a14.19k", 0x200000, 0xd7921f47, 4 }, // 10
|
|
{ "234a13.17k", 0x200000, 0x5974392e, 4 }, // 11
|
|
{ "234a12.12k", 0x100000, 0xc7f2b099, 4 }, // 12
|
|
{ "234a11.10k", 0x100000, 0x82923713, 4 }, // 13
|
|
|
|
{ "234a06.2d", 0x200000, 0x12d32384, 5 }, // 14 shared
|
|
{ "234a07.1d", 0x200000, 0x05ee239f, 5 }, // 15
|
|
|
|
{ "mtlchampa.nv", 0x000080, 0x79a6f420, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mtlchampa)
|
|
STD_ROM_FN(mtlchampa)
|
|
|
|
struct BurnDriver BurnDrvMtlchampa = {
|
|
"mtlchampa", "mtlchamp", NULL, NULL, "1993",
|
|
"Martial Champion (ver AAA)\0", NULL, "Konami", "GX234",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_VSFIGHT, 0,
|
|
NULL, mtlchampaRomInfo, mtlchampaRomName, NULL, NULL, MartchmpInputInfo, MartchmpDIPInfo,
|
|
MartchmpInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Martial Champion (ver JAA)
|
|
|
|
static struct BurnRomInfo mtlchampjRomDesc[] = {
|
|
{ "234jaa01.20f", 0x040000, 0x76c3c568, 1 }, // 0 maincpu
|
|
{ "234jaa02.20g", 0x040000, 0x95eec0aa, 1 }, // 1
|
|
{ "234_d03.19f", 0x080000, 0xabb577c6, 1 }, // 2
|
|
{ "234_d04.19g", 0x080000, 0x030a1925, 1 }, // 3
|
|
|
|
{ "234_d05.6b", 0x020000, 0xefb6bcaa, 2 }, // 4 soundcpu
|
|
|
|
{ "234a08.1h", 0x100000, 0x27e94288, 3 }, // 5 gfx1
|
|
{ "234a09.1k", 0x100000, 0x03aad28f, 3 }, // 6
|
|
{ "234a10.3h", 0x080000, 0x51f50fe2, 3 }, // 7
|
|
|
|
{ "234a16.22k", 0x200000, 0x14d909a5, 4 }, // 8 gfx2
|
|
{ "234a15.20k", 0x200000, 0xa5028418, 4 }, // 9
|
|
{ "234a14.19k", 0x200000, 0xd7921f47, 4 }, // 10
|
|
{ "234a13.17k", 0x200000, 0x5974392e, 4 }, // 11
|
|
{ "234a12.12k", 0x100000, 0xc7f2b099, 4 }, // 12
|
|
{ "234a11.10k", 0x100000, 0x82923713, 4 }, // 13
|
|
|
|
{ "234a06.2d", 0x200000, 0x12d32384, 5 }, // 14 shared
|
|
{ "234a07.1d", 0x200000, 0x05ee239f, 5 }, // 15
|
|
|
|
{ "mtlchampj.nv", 0x000080, 0xe311816f, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mtlchampj)
|
|
STD_ROM_FN(mtlchampj)
|
|
|
|
struct BurnDriver BurnDrvMtlchampj = {
|
|
"mtlchampj", "mtlchamp", NULL, NULL, "1993",
|
|
"Martial Champion (ver JAA)\0", NULL, "Konami", "GX234",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_VSFIGHT, 0,
|
|
NULL, mtlchampjRomInfo, mtlchampjRomName, NULL, NULL, MartchmpInputInfo, MartchmpDIPInfo,
|
|
MartchmpInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Martial Champion (ver UAE)
|
|
|
|
static struct BurnRomInfo mtlchampuRomDesc[] = {
|
|
{ "234uae01.20f", 0x040000, 0xacecfec9, 1 }, // 0 maincpu
|
|
{ "234uae02.20g", 0x040000, 0xc54ccf65, 1 }, // 1
|
|
{ "234_d03.19f", 0x080000, 0xabb577c6, 1 }, // 2
|
|
{ "234_d04.19g", 0x080000, 0x030a1925, 1 }, // 3
|
|
|
|
{ "234_d05.6b", 0x020000, 0xefb6bcaa, 2 }, // 4 soundcpu
|
|
|
|
{ "234a08.1h", 0x100000, 0x27e94288, 3 }, // 5 gfx1
|
|
{ "234a09.1k", 0x100000, 0x03aad28f, 3 }, // 6
|
|
{ "234a10.3h", 0x080000, 0x51f50fe2, 3 }, // 7
|
|
|
|
{ "234a16.22k", 0x200000, 0x14d909a5, 4 }, // 8 gfx2
|
|
{ "234a15.20k", 0x200000, 0xa5028418, 4 }, // 9
|
|
{ "234a14.19k", 0x200000, 0xd7921f47, 4 }, // 10
|
|
{ "234a13.17k", 0x200000, 0x5974392e, 4 }, // 11
|
|
{ "234a12.12k", 0x100000, 0xc7f2b099, 4 }, // 12
|
|
{ "234a11.10k", 0x100000, 0x82923713, 4 }, // 13
|
|
|
|
{ "234a06.2d", 0x200000, 0x12d32384, 5 }, // 14 shared
|
|
{ "234a07.1d", 0x200000, 0x05ee239f, 5 }, // 15
|
|
|
|
{ "mtlchampu.nv", 0x000080, 0x182f146a, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mtlchampu)
|
|
STD_ROM_FN(mtlchampu)
|
|
|
|
struct BurnDriver BurnDrvMtlchampu = {
|
|
"mtlchampu", "mtlchamp", NULL, NULL, "1993",
|
|
"Martial Champion (ver UAE)\0", NULL, "Konami", "GX234",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_VSFIGHT, 0,
|
|
NULL, mtlchampuRomInfo, mtlchampuRomName, NULL, NULL, MartchmpInputInfo, MartchmpDIPInfo,
|
|
MartchmpInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Martial Champion (ver UAD)
|
|
|
|
static struct BurnRomInfo mtlchampu1RomDesc[] = {
|
|
{ "234uad01.20f", 0x040000, 0x5f6c8d09, 1 }, // 0 maincpu
|
|
{ "234uad02.20g", 0x040000, 0x15ca4fb2, 1 }, // 1
|
|
{ "234_d03.19f", 0x080000, 0xabb577c6, 1 }, // 2
|
|
{ "234_d04.19g", 0x080000, 0x030a1925, 1 }, // 3
|
|
|
|
{ "234_d05.6b", 0x020000, 0xefb6bcaa, 2 }, // 4 soundcpu
|
|
|
|
{ "234a08.1h", 0x100000, 0x27e94288, 3 }, // 5 gfx1
|
|
{ "234a09.1k", 0x100000, 0x03aad28f, 3 }, // 6
|
|
{ "234a10.3h", 0x080000, 0x51f50fe2, 3 }, // 7
|
|
|
|
{ "234a16.22k", 0x200000, 0x14d909a5, 4 }, // 8 gfx2
|
|
{ "234a15.20k", 0x200000, 0xa5028418, 4 }, // 9
|
|
{ "234a14.19k", 0x200000, 0xd7921f47, 4 }, // 10
|
|
{ "234a13.17k", 0x200000, 0x5974392e, 4 }, // 11
|
|
{ "234a12.12k", 0x100000, 0xc7f2b099, 4 }, // 12
|
|
{ "234a11.10k", 0x100000, 0x82923713, 4 }, // 13
|
|
|
|
{ "234a06.2d", 0x200000, 0x12d32384, 5 }, // 14 shared
|
|
{ "234a07.1d", 0x200000, 0x05ee239f, 5 }, // 15
|
|
|
|
{ "mtlchampu1.nv", 0x000080, 0xf5d84df7, 6 }, // 16 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mtlchampu1)
|
|
STD_ROM_FN(mtlchampu1)
|
|
|
|
struct BurnDriver BurnDrvMtlchampu1 = {
|
|
"mtlchampu1", "mtlchamp", NULL, NULL, "1993",
|
|
"Martial Champion (ver UAD)\0", NULL, "Konami", "GX234",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_VSFIGHT, 0,
|
|
NULL, mtlchampu1RomInfo, mtlchampu1RomName, NULL, NULL, MartchmpInputInfo, MartchmpDIPInfo,
|
|
MartchmpInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
384, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Gaiapolis (ver EAF)
|
|
|
|
static struct BurnRomInfo gaiapolsRomDesc[] = {
|
|
{ "123e07.24m", 0x100000, 0xf1a1db0f, 1 }, // 0 maincpu
|
|
{ "123e09.19l", 0x100000, 0x4b3b57e7, 1 }, // 1
|
|
{ "123eaf11.19p", 0x040000, 0x9c324ade, 1 }, // 2
|
|
{ "123eaf12.17p", 0x040000, 0x1dfa14c5, 1 }, // 3
|
|
|
|
{ "123e13.9c", 0x040000, 0xe772f822, 2 }, // 4 soundcpu
|
|
|
|
{ "123e16.2t", 0x100000, 0xa3238200, 3 }, // 5 gfx1
|
|
{ "123e17.2x", 0x100000, 0xbd0b9fb9, 3 }, // 6
|
|
|
|
{ "123e19.34u", 0x200000, 0x219a7c26, 4 }, // 7 gfx2
|
|
{ "123e21.34y", 0x200000, 0x1888947b, 4 }, // 8
|
|
{ "123e18.36u", 0x200000, 0x3719b6d4, 4 }, // 9
|
|
{ "123e20.36y", 0x200000, 0x490a6f64, 4 }, // 10
|
|
|
|
{ "123e04.32n", 0x080000, 0x0d4d5b8b, 5 }, // 11 gfx3
|
|
{ "123e05.29n", 0x080000, 0x7d123f3e, 5 }, // 12
|
|
{ "123e06.26n", 0x080000, 0xfa50121e, 5 }, // 13
|
|
|
|
{ "123e01.36j", 0x020000, 0x9dbc9678, 6 }, // 14 gfx4
|
|
{ "123e02.34j", 0x040000, 0xb8e3f500, 6 }, // 15
|
|
{ "123e03.36m", 0x040000, 0xfde4749f, 6 }, // 16
|
|
|
|
{ "123e14.2g", 0x200000, 0x65dfd3ff, 7 }, // 17 shared
|
|
{ "123e15.2m", 0x200000, 0x7017ff07, 7 }, // 18
|
|
|
|
{ "gaiapols.nv", 0x000080, 0x44c78184, 8 }, // 19 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(gaiapols)
|
|
STD_ROM_FN(gaiapols)
|
|
|
|
struct BurnDriver BurnDrvGaiapols = {
|
|
"gaiapols", NULL, NULL, NULL, "1993",
|
|
"Gaiapolis (ver EAF)\0", NULL, "Konami", "GX123",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, gaiapolsRomInfo, gaiapolsRomName, NULL, NULL, DadandrnInputInfo, DadandrnDIPInfo,
|
|
GaiapolisInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
224, 376, 3, 4
|
|
};
|
|
|
|
|
|
// Gaiapolis (ver UAF)
|
|
|
|
static struct BurnRomInfo gaiapolsuRomDesc[] = {
|
|
{ "123e07.24m", 0x100000, 0xf1a1db0f, 1 }, // 0 maincpu
|
|
{ "123e09.19l", 0x100000, 0x4b3b57e7, 1 }, // 1
|
|
{ "123uaf11.19p", 0x040000, 0x39dc1298, 1 }, // 2
|
|
{ "123uaf12.17p", 0x040000, 0xc633cf52, 1 }, // 3
|
|
|
|
{ "123e13.9c", 0x040000, 0xe772f822, 2 }, // 4 soundcpu
|
|
|
|
{ "123e16.2t", 0x100000, 0xa3238200, 3 }, // 5 gfx1
|
|
{ "123e17.2x", 0x100000, 0xbd0b9fb9, 3 }, // 6
|
|
|
|
{ "123e19.34u", 0x200000, 0x219a7c26, 4 }, // 7 gfx2
|
|
{ "123e21.34y", 0x200000, 0x1888947b, 4 }, // 8
|
|
{ "123e18.36u", 0x200000, 0x3719b6d4, 4 }, // 9
|
|
{ "123e20.36y", 0x200000, 0x490a6f64, 4 }, // 10
|
|
|
|
{ "123e04.32n", 0x080000, 0x0d4d5b8b, 5 }, // 11 gfx3
|
|
{ "123e05.29n", 0x080000, 0x7d123f3e, 5 }, // 12
|
|
{ "123e06.26n", 0x080000, 0xfa50121e, 5 }, // 13
|
|
|
|
{ "123e01.36j", 0x020000, 0x9dbc9678, 6 }, // 14 gfx4
|
|
{ "123e02.34j", 0x040000, 0xb8e3f500, 6 }, // 15
|
|
{ "123e03.36m", 0x040000, 0xfde4749f, 6 }, // 16
|
|
|
|
{ "123e14.2g", 0x200000, 0x65dfd3ff, 7 }, // 17 shared
|
|
{ "123e15.2m", 0x200000, 0x7017ff07, 7 }, // 18
|
|
|
|
{ "gaiapolsu.nv", 0x000080, 0x7ece27b6, 8 }, // 19 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(gaiapolsu)
|
|
STD_ROM_FN(gaiapolsu)
|
|
|
|
struct BurnDriver BurnDrvGaiapolsu = {
|
|
"gaiapolsu", "gaiapols", NULL, NULL, "1993",
|
|
"Gaiapolis (ver UAF)\0", NULL, "Konami", "GX123",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, gaiapolsuRomInfo, gaiapolsuRomName, NULL, NULL, DadandrnInputInfo, DadandrnDIPInfo,
|
|
GaiapolisInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
224, 376, 3, 4
|
|
};
|
|
|
|
|
|
// Gaiapolis (ver JAF)
|
|
|
|
static struct BurnRomInfo gaiapolsjRomDesc[] = {
|
|
{ "123e07.24m", 0x100000, 0xf1a1db0f, 1 }, // 0 maincpu
|
|
{ "123e09.19l", 0x100000, 0x4b3b57e7, 1 }, // 1
|
|
{ "123jaf11.19p", 0x040000, 0x19919571, 1 }, // 2
|
|
{ "123jaf12.17p", 0x040000, 0x4246e595, 1 }, // 3
|
|
|
|
{ "123e13.9c", 0x040000, 0xe772f822, 2 }, // 4 soundcpu
|
|
|
|
{ "123e16.2t", 0x100000, 0xa3238200, 3 }, // 5 gfx1
|
|
{ "123e17.2x", 0x100000, 0xbd0b9fb9, 3 }, // 6
|
|
|
|
{ "123e19.34u", 0x200000, 0x219a7c26, 4 }, // 7 gfx2
|
|
{ "123e21.34y", 0x200000, 0x1888947b, 4 }, // 8
|
|
{ "123e18.36u", 0x200000, 0x3719b6d4, 4 }, // 9
|
|
{ "123e20.36y", 0x200000, 0x490a6f64, 4 }, // 10
|
|
|
|
{ "123e04.32n", 0x080000, 0x0d4d5b8b, 5 }, // 11 gfx3
|
|
{ "123e05.29n", 0x080000, 0x7d123f3e, 5 }, // 12
|
|
{ "123e06.26n", 0x080000, 0xfa50121e, 5 }, // 13
|
|
|
|
{ "123e01.36j", 0x020000, 0x9dbc9678, 6 }, // 14 gfx4
|
|
{ "123e02.34j", 0x040000, 0xb8e3f500, 6 }, // 15
|
|
{ "123e03.36m", 0x040000, 0xfde4749f, 6 }, // 16
|
|
|
|
{ "123e14.2g", 0x200000, 0x65dfd3ff, 7 }, // 17 shared
|
|
{ "123e15.2m", 0x200000, 0x7017ff07, 7 }, // 18
|
|
|
|
{ "gaiapolsj.nv", 0x000080, 0xc4b970df, 8 }, // 19 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(gaiapolsj)
|
|
STD_ROM_FN(gaiapolsj)
|
|
|
|
struct BurnDriver BurnDrvGaiapolsj = {
|
|
"gaiapolsj", "gaiapols", NULL, NULL, "1993",
|
|
"Gaiapolis (ver JAF)\0", NULL, "Konami", "GX123",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, gaiapolsjRomInfo, gaiapolsjRomName, NULL, NULL, DadandrnInputInfo, DadandrnDIPInfo,
|
|
GaiapolisInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
224, 376, 3, 4
|
|
};
|
|
|
|
|
|
// Monster Maulers (ver EAA)
|
|
|
|
static struct BurnRomInfo mmaulersRomDesc[] = {
|
|
{ "170eaa07.24m", 0x080000, 0x5458bd93, 1 }, // 0 maincpu
|
|
{ "170eaa09.19l", 0x080000, 0x99c95c7b, 1 }, // 1
|
|
{ "170a08.21m", 0x040000, 0x03c59ba2, 1 }, // 2
|
|
{ "170a10.17l", 0x040000, 0x8a340909, 1 }, // 3
|
|
|
|
{ "170a13.9c", 0x040000, 0x2ebf4d1c, 2 }, // 4 soundcpu
|
|
|
|
{ "170a16.2t", 0x100000, 0x41fee912, 3 }, // 5 gfx1
|
|
{ "170a17.2x", 0x100000, 0x96957c91, 3 }, // 6
|
|
{ "170a24.5r", 0x080000, 0x562ad4bd, 3 }, // 7
|
|
|
|
{ "170a19.34u", 0x200000, 0xbe835141, 4 }, // 8 gfx2
|
|
{ "170a21.34y", 0x200000, 0xbcb68136, 4 }, // 9
|
|
{ "170a18.36u", 0x200000, 0xe1e3c8d2, 4 }, // 10
|
|
{ "170a20.36y", 0x200000, 0xccb4d88c, 4 }, // 11
|
|
{ "170a23.29y", 0x100000, 0x6b5390e4, 4 }, // 12
|
|
{ "170a22.32y", 0x100000, 0x21628106, 4 }, // 13
|
|
|
|
{ "170a04.33n", 0x080000, 0x64b9a73b, 5 }, // 14 gfx3
|
|
{ "170a05.30n", 0x080000, 0xf2c101d0, 5 }, // 15
|
|
{ "170a06.27n", 0x080000, 0xb032e59b, 5 }, // 16
|
|
|
|
{ "170a02.34j", 0x040000, 0xb040cebf, 6 }, // 17 gfx4
|
|
{ "170a03.36m", 0x040000, 0x7fb412b2, 6 }, // 18
|
|
|
|
{ "170a14.2g", 0x200000, 0x83317cda, 7 }, // 19 shared
|
|
{ "170a15.2m", 0x200000, 0xd4113ae9, 7 }, // 20
|
|
|
|
{ "mmaulers.nv", 0x000080, 0x8324f517, 8 }, // 21 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(mmaulers)
|
|
STD_ROM_FN(mmaulers)
|
|
|
|
struct BurnDriver BurnDrvMmaulers = {
|
|
"mmaulers", NULL, NULL, NULL, "1993",
|
|
"Monster Maulers (ver EAA)\0", NULL, "Konami", "GX170",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, mmaulersRomInfo, mmaulersRomName, NULL, NULL, DadandrnInputInfo, DadandrnDIPInfo,
|
|
DadandrnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
288, 224, 4, 3
|
|
};
|
|
|
|
|
|
// Kyukyoku Sentai Dadandarn (ver JAA)
|
|
|
|
static struct BurnRomInfo dadandrnRomDesc[] = {
|
|
{ "170jaa07.24m", 0x080000, 0x6a55e828, 1 }, // 0 maincpu
|
|
{ "170jaa09.19l", 0x080000, 0x9e821cd8, 1 }, // 1
|
|
{ "170a08.21m", 0x040000, 0x03c59ba2, 1 }, // 2
|
|
{ "170a10.17l", 0x040000, 0x8a340909, 1 }, // 3
|
|
|
|
{ "170a13.9c", 0x040000, 0x2ebf4d1c, 2 }, // 4 soundcpu
|
|
|
|
{ "170a16.2t", 0x100000, 0x41fee912, 3 }, // 5 gfx1
|
|
{ "170a17.2x", 0x100000, 0x96957c91, 3 }, // 6
|
|
{ "170a24.5r", 0x080000, 0x562ad4bd, 3 }, // 7
|
|
|
|
{ "170a19.34u", 0x200000, 0xbe835141, 4 }, // 8 gfx2
|
|
{ "170a21.34y", 0x200000, 0xbcb68136, 4 }, // 9
|
|
{ "170a18.36u", 0x200000, 0xe1e3c8d2, 4 }, // 10
|
|
{ "170a20.36y", 0x200000, 0xccb4d88c, 4 }, // 11
|
|
{ "170a23.29y", 0x100000, 0x6b5390e4, 4 }, // 12
|
|
{ "170a22.32y", 0x100000, 0x21628106, 4 }, // 13
|
|
|
|
{ "170a04.33n", 0x080000, 0x64b9a73b, 5 }, // 14 gfx3
|
|
{ "170a05.30n", 0x080000, 0xf2c101d0, 5 }, // 15
|
|
{ "170a06.27n", 0x080000, 0xb032e59b, 5 }, // 16
|
|
|
|
{ "170a02.34j", 0x040000, 0xb040cebf, 6 }, // 17 gfx4
|
|
{ "170a03.36m", 0x040000, 0x7fb412b2, 6 }, // 18
|
|
|
|
{ "170a14.2g", 0x200000, 0x83317cda, 7 }, // 19 shared
|
|
{ "170a15.2m", 0x200000, 0xd4113ae9, 7 }, // 20
|
|
|
|
{ "dadandrn.nv", 0x000080, 0x346ae0cf, 8 }, // 21 eeprom
|
|
};
|
|
|
|
STD_ROM_PICK(dadandrn)
|
|
STD_ROM_FN(dadandrn)
|
|
|
|
struct BurnDriver BurnDrvDadandrn = {
|
|
"dadandrn", "mmaulers", NULL, NULL, "1993",
|
|
"Kyukyoku Sentai Dadandarn (ver JAA)\0", NULL, "Konami", "GX170",
|
|
NULL, NULL, NULL, NULL,
|
|
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_PREFIX_KONAMI, GBF_SCRFIGHT, 0,
|
|
NULL, dadandrnRomInfo, dadandrnRomName, NULL, NULL, DadandrnInputInfo, DadandrnDIPInfo,
|
|
DadandrnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x800,
|
|
288, 224, 4, 3
|
|
};
|