mirror of
https://github.com/holub/mame
synced 2025-06-07 05:13:46 +03:00
fixed layer enable at the end of stage 4 in Varth.
increased Varth CPU clock to 12MHz to reduce slowdowns (the game was released after sf2ce so the faster A-board was available). verified more gfx rom mappings against PAL dumps (thanks to Corrado Tomaselli). verified memory maps using A-board PAL dumps (thanks to Charles McDonald). separated the address ranges for CPS-A and CPS-B customs. This finally clarifies why some registers are fixed and some change with every game. identified three new unknown registers in the CPS-B-21 custom. Their purpose is unknown. all unhandled accesses to CPS-A/CPS-B registers will now be reported. There shouldn't be any left. Look out for "contact MAMDEV" popups. cleaned memory maps. Moved forgotten worlds special input mmeory handlers to DRIVER_INIT. moved extra input handlers to video/cps1.c since the extra connectors are on the C-board. added sound to Final Crash.
This commit is contained in:
parent
9dd3f691ba
commit
5782fedb11
@ -161,17 +161,16 @@ Stephh's log (2006.09.20) :
|
|||||||
|
|
||||||
#include "cps1.h" /* External CPS1 definitions */
|
#include "cps1.h" /* External CPS1 definitions */
|
||||||
|
|
||||||
READ16_HANDLER( cps1_input_r )
|
READ16_HANDLER( cps1_dsw_r )
|
||||||
{
|
{
|
||||||
static const char *const dswname[] = { "IN0", "DSWA", "DSWB", "DSWC" };
|
static const char *const dswname[] = { "IN0", "DSWA", "DSWB", "DSWC" };
|
||||||
int in = input_port_read(machine, dswname[offset]);
|
int in = input_port_read(machine, dswname[offset]);
|
||||||
return in << 8;
|
return (in << 8) | 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ16_HANDLER( cps1_in1_r )
|
READ16_HANDLER( cps1_in1_r )
|
||||||
{
|
{
|
||||||
int buttons = input_port_read(machine, "IN1");
|
return input_port_read(machine, "IN1");
|
||||||
return buttons;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
READ16_HANDLER( cps1_in2_r )
|
READ16_HANDLER( cps1_in2_r )
|
||||||
@ -213,18 +212,14 @@ static WRITE16_HANDLER( forgottn_dial_1_reset_w )
|
|||||||
static WRITE8_HANDLER( cps1_snd_bankswitch_w )
|
static WRITE8_HANDLER( cps1_snd_bankswitch_w )
|
||||||
{
|
{
|
||||||
UINT8 *RAM = memory_region(REGION_CPU2);
|
UINT8 *RAM = memory_region(REGION_CPU2);
|
||||||
int length = memory_region_length(REGION_CPU2) - 0x10000;
|
|
||||||
int bankaddr;
|
int bankaddr;
|
||||||
|
|
||||||
bankaddr = (data * 0x4000) & (length-1);
|
bankaddr = ((data & 1) * 0x4000);
|
||||||
memory_set_bankptr(1,&RAM[0x10000 + bankaddr]);
|
memory_set_bankptr(1,&RAM[0x10000 + bankaddr]);
|
||||||
|
|
||||||
if (data & 0xfe) logerror("%04x: write %02x to f004\n",activecpu_get_pc(),data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( cps1_oki_pin7_w )
|
static WRITE8_HANDLER( cps1_oki_pin7_w )
|
||||||
{
|
{
|
||||||
logerror("%04x: write %02x to f006 (Oki Pin 7)\n",activecpu_get_pc(),data);
|
|
||||||
OKIM6295_set_pin7(0, (data & 1));
|
OKIM6295_set_pin7(0, (data & 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,8 +237,6 @@ static WRITE16_HANDLER( cps1_soundlatch2_w )
|
|||||||
|
|
||||||
WRITE16_HANDLER( cps1_coinctrl_w )
|
WRITE16_HANDLER( cps1_coinctrl_w )
|
||||||
{
|
{
|
||||||
// popmessage("coinctrl %04x",data);
|
|
||||||
|
|
||||||
if (ACCESSING_BITS_8_15)
|
if (ACCESSING_BITS_8_15)
|
||||||
{
|
{
|
||||||
coin_counter_w(0,data & 0x0100);
|
coin_counter_w(0,data & 0x0100);
|
||||||
@ -253,15 +246,6 @@ WRITE16_HANDLER( cps1_coinctrl_w )
|
|||||||
|
|
||||||
// bit 15 = CPS-A custom reset?
|
// bit 15 = CPS-A custom reset?
|
||||||
}
|
}
|
||||||
|
|
||||||
// there's no trace of this in the Forgotten Worlds schematics
|
|
||||||
if (ACCESSING_BITS_0_7)
|
|
||||||
{
|
|
||||||
/* mercs sets bit 0 */
|
|
||||||
set_led_status(0,data & 0x02);
|
|
||||||
set_led_status(1,data & 0x04);
|
|
||||||
set_led_status(2,data & 0x08);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE16_HANDLER( cpsq_coinctrl2_w )
|
static WRITE16_HANDLER( cpsq_coinctrl2_w )
|
||||||
@ -278,8 +262,7 @@ static WRITE16_HANDLER( cpsq_coinctrl2_w )
|
|||||||
INTERRUPT_GEN( cps1_interrupt )
|
INTERRUPT_GEN( cps1_interrupt )
|
||||||
{
|
{
|
||||||
/* Strider also has a IRQ4 handler. It is input port related, but the game */
|
/* Strider also has a IRQ4 handler. It is input port related, but the game */
|
||||||
/* works without it (maybe it's used to multiplex controls). It is the */
|
/* works without it. It is the *only* CPS1 game to have that. */
|
||||||
/* *only* game to have that. */
|
|
||||||
cpunum_set_input_line(machine, 0, 2, HOLD_LINE);
|
cpunum_set_input_line(machine, 0, 2, HOLD_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,27 +415,142 @@ WRITE16_HANDLER( cps1_eeprom_port_w )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
PAL PRG1 (16P8B @ 12H):
|
||||||
|
|
||||||
|
I0 = AS
|
||||||
|
I1 = /BGACKB
|
||||||
|
I2 = A23
|
||||||
|
I3 = A22
|
||||||
|
I4 = A21
|
||||||
|
I5 = A20
|
||||||
|
I6 = A19
|
||||||
|
I7 = A18
|
||||||
|
I8 = A17
|
||||||
|
I9 = A16
|
||||||
|
|
||||||
|
n.c. = pin19 = ( !I0 & I1 )
|
||||||
|
n.c. = pin18 = ( !I0 & I1 )
|
||||||
|
n.c. = pin17 = ! ( I0 & I1 & (!I2 | !I3 | !I4 | !I5 | !I6 | !I7) )
|
||||||
|
n.c. = pin16 = ! ( I2 & I3 & I4 & I5 & I6 & I7 )
|
||||||
|
/IOCS = pin15 = ! ( I0 & I1 & I2 & !I3 & !I4 & !I5 )
|
||||||
|
/ONE WAIT = pin14 = ! ( I0 & I1 & ((!I2 & !I3) | ( I2 & !I3) | ( I2 & I3)) )
|
||||||
|
/databus = pin13 = ! ( I0 & I1 & (!I2 | !I3 | !I4 | !I5 | !I6 | !I7) )
|
||||||
|
/workram = pin12 = ! ( I0 & I1 & I2 & I3 & I4 & I5 & I6 & I7 )
|
||||||
|
|
||||||
|
|
||||||
|
PAL IOA1 (16P8B @ 12F):
|
||||||
|
|
||||||
|
I0 = /IOCS
|
||||||
|
I1 = /RDB
|
||||||
|
I2 = /UDSWR
|
||||||
|
I3 = /LDSWR
|
||||||
|
I4 = AB8
|
||||||
|
I5 = AB7
|
||||||
|
I6 = AB6
|
||||||
|
I7 = AB5
|
||||||
|
I8 = AB4
|
||||||
|
I9 = AB3
|
||||||
|
|
||||||
|
player input = pin19 = ! ( !I0 & !I1 & !I4 & !I5 & !I6 & !I7 & !I8 & !I9 )
|
||||||
|
system input/dips = pin18 = ! ( !I0 & !I1 & !I4 & !I5 & !I6 & !I7 & I8 & I9 )
|
||||||
|
outputs = pin17 = ! ( !I0 & !I2 & !I4 & !I5 & !I6 & I7 & I8 & !I9 )
|
||||||
|
sound 1B = pin16 = ! ( !I0 & !I3 & I4 & I5 & !I6 & !I7 & !I8 & I9 )
|
||||||
|
sound 0B = pin15 = ! ( !I0 & !I3 & I4 & I5 & !I6 & !I7 & !I8 & !I9 )
|
||||||
|
n.c. = pin14 = ( !I1 & !I2 )
|
||||||
|
/PPU1 = pin13 = ! ( !I0 & I4 & !I5 & !I6 )
|
||||||
|
n.c. = pin12 = ( !I1 & !I2 )
|
||||||
|
|
||||||
|
|
||||||
|
PAL BUF1 (16P8B @ 16H):
|
||||||
|
|
||||||
|
I0 = A23 (all address lines can come both from 68000 and CPS-A custom)
|
||||||
|
I1 = A22
|
||||||
|
I2 = A21
|
||||||
|
I3 = A20
|
||||||
|
I4 = A19
|
||||||
|
I5 = A18
|
||||||
|
I6 = A17
|
||||||
|
I7 = A16
|
||||||
|
I8 = ASB
|
||||||
|
|
||||||
|
BUF0 = pin19 = ! ( I0 & !I1 & !I2 & I3 & !I4 & !I5 & !I6 & !I7 )
|
||||||
|
BUF1 = pin18 = ! ( I0 & !I1 & !I2 & I3 & !I4 & !I5 & !I6 & I7 )
|
||||||
|
BUF2 = pin17 = ! ( I0 & !I1 & !I2 & I3 & !I4 & !I5 & I6 & !I7 )
|
||||||
|
BUF3 = pin16 = ! ( I0 & !I1 & !I2 & I3 & !I4 & !I5 & I6 & I7 )
|
||||||
|
BUF4 = pin15 = ! ( I0 & !I1 & !I2 & I3 & !I4 & I5 & !I6 & !I7 )
|
||||||
|
BUF5 = pin14 = ! ( I0 & !I1 & !I2 & I3 & !I4 & I5 & !I6 & I7 )
|
||||||
|
BUF6 = pin13 = ! ( I0 & !I1 & !I2 & I3 & !I4 & I5 & I6 & !I7 )
|
||||||
|
/RDB = pin12 = ( I0 & !I1 & !I2 & I3 & !I8 )
|
||||||
|
|
||||||
|
BUF0-BUF2 are gfxram on A-board. BUF3-BUF6 go to B-board (provision for expansion, never used)
|
||||||
|
|
||||||
|
|
||||||
|
PAL ROM1 (16P8B @ 15H):
|
||||||
|
|
||||||
|
I0 = A23 (all address lines can come both from 68000 and CPS-A custom)
|
||||||
|
I1 = A22
|
||||||
|
I2 = A21
|
||||||
|
I3 = A20
|
||||||
|
I4 = A19
|
||||||
|
I5 = A18
|
||||||
|
I6 = A17
|
||||||
|
I7 = A16
|
||||||
|
I8 = ASB
|
||||||
|
|
||||||
|
PRG0 = pin17 = ! ( !I8 & !I0 & !I1 & !I2 & !I3 & !I4 & !I5 )
|
||||||
|
PRG1 = pin16 = ! ( !I8 & !I0 & !I1 & !I2 & !I3 & !I4 & I5 )
|
||||||
|
PRG2 = pin15 = ! ( !I8 & !I0 & !I1 & !I2 & !I3 & I4 & !I5 )
|
||||||
|
PRG3 = pin14 = ! ( !I8 & !I0 & !I1 & !I2 & !I3 & I4 & I5 )
|
||||||
|
PRG4 = pin19 = ! ( !I8 & !I0 & !I1 & !I2 & I3 & !I4 )
|
||||||
|
PRG5 = pin18 = ! ( !I8 & !I0 & !I1 & !I2 & I3 & I4 )
|
||||||
|
PRG6 = pin13 = ! ( !I8 & !I0 & !I1 & I2 & !I3 & !I4 )
|
||||||
|
/RDB = pin12 = ( !I8 & !I0 & !I1 )
|
||||||
|
|
||||||
|
All PRGx go to B-board. Provision for up to 4MB of ROM space, which was never used in full.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||||
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
AM_RANGE(0x000000, 0x3fffff) AM_ROM
|
||||||
AM_RANGE(0x800000, 0x800001) AM_READ(cps1_in1_r) /* Player input ports */
|
AM_RANGE(0x800000, 0x800007) AM_READ(cps1_in1_r) /* Player input ports */
|
||||||
AM_RANGE(0x800010, 0x800011) AM_READ(cps1_in1_r) /* mirror? */
|
/* forgottn, willow, cawing, nemo, varth read from 800010. Probably debug input leftover from development */
|
||||||
AM_RANGE(0x800018, 0x80001f) AM_READ(cps1_input_r) /* System input ports / Dip Switches */
|
AM_RANGE(0x800018, 0x80001f) AM_READ(cps1_dsw_r) /* System input ports / Dip Switches */
|
||||||
AM_RANGE(0x800020, 0x800021) AM_READNOP /* ? Used by Rockman ? */
|
AM_RANGE(0x800020, 0x800021) AM_READNOP /* ? Used by Rockman ? not mapped according to PAL */
|
||||||
AM_RANGE(0x800030, 0x800031) AM_WRITE(cps1_coinctrl_w)
|
AM_RANGE(0x800030, 0x800037) AM_WRITE(cps1_coinctrl_w)
|
||||||
AM_RANGE(0x800040, 0x800041) AM_WRITE(forgottn_dial_0_reset_w)
|
/* Forgotten Worlds has dial controls on B-board mapped at 800040-80005f. See DRIVER_INIT */
|
||||||
AM_RANGE(0x800048, 0x800049) AM_WRITE(forgottn_dial_1_reset_w)
|
AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_BASE(&cps1_cps_a_regs) /* CPS-A custom */
|
||||||
AM_RANGE(0x800052, 0x800055) AM_READ(forgottn_dial_0_r) /* Forgotten Worlds */
|
AM_RANGE(0x800140, 0x80017f) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) AM_BASE(&cps1_cps_b_regs) /* CPS-B custom */
|
||||||
AM_RANGE(0x80005a, 0x80005d) AM_READ(forgottn_dial_1_r) /* Forgotten Worlds */
|
|
||||||
AM_RANGE(0x800176, 0x800177) AM_READ(cps1_in2_r) /* Extra input ports (on C-board) */
|
|
||||||
AM_RANGE(0x800178, 0x800179) AM_READ(cps1_in3_r) /* Player 4 controls (on C-board) ("Captain Commando") */
|
|
||||||
AM_RANGE(0x800180, 0x800187) AM_WRITE(cps1_soundlatch_w) /* Sound command */
|
AM_RANGE(0x800180, 0x800187) AM_WRITE(cps1_soundlatch_w) /* Sound command */
|
||||||
AM_RANGE(0x800188, 0x80018f) AM_WRITE(cps1_soundlatch2_w) /* Sound timer fade */
|
AM_RANGE(0x800188, 0x80018f) AM_WRITE(cps1_soundlatch2_w) /* Sound timer fade */
|
||||||
AM_RANGE(0x8001fc, 0x8001fd) AM_READ(cps1_in2_r) /* Extra input ports ("SF Rev E") */
|
AM_RANGE(0x8001c0, 0x8001ff) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) /* mirror (SF2 revision "E" US 910228) */
|
||||||
AM_RANGE(0x800100, 0x8001ff) AM_READWRITE(cps1_output_r, cps1_output_w) AM_BASE(&cps1_output) AM_SIZE(&cps1_output_size) /* CPS-B custom */
|
|
||||||
AM_RANGE(0x900000, 0x92ffff) AM_RAM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size) /* SF2CE executes code from here */
|
AM_RANGE(0x900000, 0x92ffff) AM_RAM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size) /* SF2CE executes code from here */
|
||||||
AM_RANGE(0xff0000, 0xffffff) AM_RAM
|
AM_RANGE(0xff0000, 0xffffff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
/*
|
||||||
|
PAL SOU1 (16P8 @ 13E):
|
||||||
|
|
||||||
|
I0 = /MREQ
|
||||||
|
I1 = A15
|
||||||
|
I2 = A14
|
||||||
|
I3 = A13
|
||||||
|
I4 = A12
|
||||||
|
I5 = bank latch
|
||||||
|
I6 = /RD
|
||||||
|
I7 = /WR
|
||||||
|
I8 = /BANK
|
||||||
|
|
||||||
|
bank latch = pin19 = ! ( !I0 & !I7 & !I8 )
|
||||||
|
/SWR = pin18 = ! ( !I0 & !I7 )
|
||||||
|
/SRD = pin17 = ! ( !I0 & !I6 )
|
||||||
|
ls138 = pin16 = ! ( !I0 & I1 & I2 & I3 & I4 )
|
||||||
|
workram = pin15 = ! ( !I0 & I1 & I2 & !I3 & I4 )
|
||||||
|
SOUNDA14 = pin14 = ! ( !I0 & ((!I1 & !I2) | ( I1 & !I2 & !I5)) )
|
||||||
|
SOUNDA15 = pin13 = ( I1 )
|
||||||
|
/SOUNDCE = pin12 = ! ( !I0 & (!I1 | ( I1 & !I2)) )
|
||||||
|
*/
|
||||||
|
|
||||||
static ADDRESS_MAP_START( sub_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( sub_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
|
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
|
||||||
@ -469,11 +567,11 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( qsound_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
static ADDRESS_MAP_START( qsound_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||||
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
||||||
AM_RANGE(0x800000, 0x800001) AM_READ(cps1_in1_r) /* Player input ports */
|
AM_RANGE(0x800000, 0x800007) AM_READ(cps1_in1_r) /* Player input ports */
|
||||||
AM_RANGE(0x800010, 0x800011) AM_READ(cps1_in1_r) /* mirror? */
|
AM_RANGE(0x800018, 0x80001f) AM_READ(cps1_dsw_r) /* System input ports / Dip Switches */
|
||||||
AM_RANGE(0x800018, 0x80001f) AM_READ(cps1_input_r) /* System input ports / Dip Switches */
|
AM_RANGE(0x800030, 0x800037) AM_WRITE(cps1_coinctrl_w)
|
||||||
AM_RANGE(0x800030, 0x800031) AM_WRITE(cps1_coinctrl_w)
|
AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_BASE(&cps1_cps_a_regs) /* CPS-A custom */
|
||||||
AM_RANGE(0x800100, 0x8001ff) AM_READWRITE(cps1_output_r, cps1_output_w) AM_BASE(&cps1_output) AM_SIZE(&cps1_output_size) /* CPS-B custom */
|
AM_RANGE(0x800140, 0x80017f) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) AM_BASE(&cps1_cps_b_regs) /* CPS-B custom */
|
||||||
AM_RANGE(0x900000, 0x92ffff) AM_RAM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size) /* SF2CE executes code from here */
|
AM_RANGE(0x900000, 0x92ffff) AM_RAM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size) /* SF2CE executes code from here */
|
||||||
AM_RANGE(0xf00000, 0xf0ffff) AM_READ(qsound_rom_r) /* Slammasters protection */
|
AM_RANGE(0xf00000, 0xf0ffff) AM_READ(qsound_rom_r) /* Slammasters protection */
|
||||||
AM_RANGE(0xf18000, 0xf19fff) AM_READWRITE(qsound_sharedram1_r, qsound_sharedram1_w) /* Q RAM */
|
AM_RANGE(0xf18000, 0xf19fff) AM_READWRITE(qsound_sharedram1_r, qsound_sharedram1_w) /* Q RAM */
|
||||||
@ -3517,7 +3615,7 @@ MACHINE_DRIVER_END
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#define CODE_SIZE 0x200000
|
#define CODE_SIZE 0x400000
|
||||||
|
|
||||||
ROM_START( forgottn )
|
ROM_START( forgottn )
|
||||||
ROM_REGION( CODE_SIZE, REGION_CPU1, 0 )
|
ROM_REGION( CODE_SIZE, REGION_CPU1, 0 )
|
||||||
@ -3845,8 +3943,8 @@ ROM_START( dynwar )
|
|||||||
ROM_CONTINUE( 0x10000, 0x08000 )
|
ROM_CONTINUE( 0x10000, 0x08000 )
|
||||||
|
|
||||||
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
||||||
ROM_LOAD( "tke19.12c", 0x20000, 0x20000, CRC(068741db) SHA1(ab48aff639a7ac218b7d5304145e10e92d61fd9f) )
|
|
||||||
ROM_LOAD( "tke18.11c", 0x00000, 0x20000, CRC(ac6e307d) SHA1(b490ce625bb7ce0904b0fd121fbfbd5252790f7a) )
|
ROM_LOAD( "tke18.11c", 0x00000, 0x20000, CRC(ac6e307d) SHA1(b490ce625bb7ce0904b0fd121fbfbd5252790f7a) )
|
||||||
|
ROM_LOAD( "tke19.12c", 0x20000, 0x20000, CRC(068741db) SHA1(ab48aff639a7ac218b7d5304145e10e92d61fd9f) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/* the content of the smaller roms in this set is 99% identical, just japanese program roms
|
/* the content of the smaller roms in this set is 99% identical, just japanese program roms
|
||||||
@ -4031,8 +4129,9 @@ ROM_START( unsquad )
|
|||||||
ROM_LOAD( "unsquad.09", 0x00000, 0x08000, CRC(f3dd1367) SHA1(09eef72e862ac6b1a5cce5a45938b45bf4e456ad) )
|
ROM_LOAD( "unsquad.09", 0x00000, 0x08000, CRC(f3dd1367) SHA1(09eef72e862ac6b1a5cce5a45938b45bf4e456ad) )
|
||||||
ROM_CONTINUE( 0x10000, 0x08000 )
|
ROM_CONTINUE( 0x10000, 0x08000 )
|
||||||
|
|
||||||
ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples */
|
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
||||||
ROM_LOAD( "unsquad.18", 0x00000, 0x20000, CRC(584b43a9) SHA1(7820815c8c67d484baf2fdad7e55d8c14b98b860) )
|
ROM_LOAD( "unsquad.18", 0x00000, 0x20000, CRC(584b43a9) SHA1(7820815c8c67d484baf2fdad7e55d8c14b98b860) )
|
||||||
|
/* 20000-3ffff empty */
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( area88 )
|
ROM_START( area88 )
|
||||||
@ -4056,8 +4155,9 @@ ROM_START( area88 )
|
|||||||
ROM_LOAD( "unsquad.09", 0x00000, 0x08000, CRC(f3dd1367) SHA1(09eef72e862ac6b1a5cce5a45938b45bf4e456ad) )
|
ROM_LOAD( "unsquad.09", 0x00000, 0x08000, CRC(f3dd1367) SHA1(09eef72e862ac6b1a5cce5a45938b45bf4e456ad) )
|
||||||
ROM_CONTINUE( 0x10000, 0x08000 )
|
ROM_CONTINUE( 0x10000, 0x08000 )
|
||||||
|
|
||||||
ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples */
|
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
||||||
ROM_LOAD( "unsquad.18", 0x00000, 0x20000, CRC(584b43a9) SHA1(7820815c8c67d484baf2fdad7e55d8c14b98b860) )
|
ROM_LOAD( "unsquad.18", 0x00000, 0x20000, CRC(584b43a9) SHA1(7820815c8c67d484baf2fdad7e55d8c14b98b860) )
|
||||||
|
/* 20000-3ffff empty */
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( ffight )
|
ROM_START( ffight )
|
||||||
@ -5288,7 +5388,6 @@ ROM_START( wonder3 )
|
|||||||
ROM_LOAD16_BYTE( "rtj42.bin", 0x00001, 0x20000, CRC(b4baa117) SHA1(44486b3d50f9b0a8c32c2c2dc5f1a046aface7b6) )
|
ROM_LOAD16_BYTE( "rtj42.bin", 0x00001, 0x20000, CRC(b4baa117) SHA1(44486b3d50f9b0a8c32c2c2dc5f1a046aface7b6) )
|
||||||
ROM_LOAD16_BYTE( "rtj37.bin", 0x40000, 0x20000, CRC(a1f677b0) SHA1(e1511ea0fa4a689d1355119ac37c075192880dde) )
|
ROM_LOAD16_BYTE( "rtj37.bin", 0x40000, 0x20000, CRC(a1f677b0) SHA1(e1511ea0fa4a689d1355119ac37c075192880dde) )
|
||||||
ROM_LOAD16_BYTE( "rtj43.bin", 0x40001, 0x20000, CRC(85337a47) SHA1(0a247aa56c5cc17b1e888df7b502f65e88715469) )
|
ROM_LOAD16_BYTE( "rtj43.bin", 0x40001, 0x20000, CRC(85337a47) SHA1(0a247aa56c5cc17b1e888df7b502f65e88715469) )
|
||||||
|
|
||||||
ROM_LOAD16_BYTE( "3wonders.28", 0x80000, 0x20000, CRC(054137c8) SHA1(e4c406e0a32198323a5931093fbaa6836510b8ad) )
|
ROM_LOAD16_BYTE( "3wonders.28", 0x80000, 0x20000, CRC(054137c8) SHA1(e4c406e0a32198323a5931093fbaa6836510b8ad) )
|
||||||
ROM_LOAD16_BYTE( "3wonders.33", 0x80001, 0x20000, CRC(7264cb1b) SHA1(b367acb9f6579569321ecaa98a14e29dd775b9db) )
|
ROM_LOAD16_BYTE( "3wonders.33", 0x80001, 0x20000, CRC(7264cb1b) SHA1(b367acb9f6579569321ecaa98a14e29dd775b9db) )
|
||||||
ROM_LOAD16_BYTE( "rtj35.bin", 0xc0000, 0x20000, CRC(e72f9ea3) SHA1(c63df200416bd61af73e8589204f7daef743041e) )
|
ROM_LOAD16_BYTE( "rtj35.bin", 0xc0000, 0x20000, CRC(e72f9ea3) SHA1(c63df200416bd61af73e8589204f7daef743041e) )
|
||||||
@ -7207,7 +7306,7 @@ ROM_START( megaman )
|
|||||||
|
|
||||||
ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* 64k for the audio CPU (+banks) */
|
ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* 64k for the audio CPU (+banks) */
|
||||||
ROM_LOAD( "rcm_09.rom", 0x00000, 0x08000, CRC(9632d6ef) SHA1(2bcb6f17005ffbc9ef8fa4478a814f24b2e6e0b6) )
|
ROM_LOAD( "rcm_09.rom", 0x00000, 0x08000, CRC(9632d6ef) SHA1(2bcb6f17005ffbc9ef8fa4478a814f24b2e6e0b6) )
|
||||||
ROM_CONTINUE( 0x10000, 0x18000 )
|
ROM_CONTINUE( 0x10000, 0x18000 ) // second half of ROM is empty, not mapped in memory
|
||||||
|
|
||||||
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
||||||
ROM_LOAD( "rcm_18.rom", 0x00000, 0x20000, CRC(80f1f8aa) SHA1(4a5b7b2a6941ad68da7472c63362c7bcd353fa54) )
|
ROM_LOAD( "rcm_18.rom", 0x00000, 0x20000, CRC(80f1f8aa) SHA1(4a5b7b2a6941ad68da7472c63362c7bcd353fa54) )
|
||||||
@ -7243,7 +7342,7 @@ ROM_START( rockmanj )
|
|||||||
|
|
||||||
ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* 64k for the audio CPU (+banks) */
|
ROM_REGION( 0x28000, REGION_CPU2, 0 ) /* 64k for the audio CPU (+banks) */
|
||||||
ROM_LOAD( "rcm_09.rom", 0x00000, 0x08000, CRC(9632d6ef) SHA1(2bcb6f17005ffbc9ef8fa4478a814f24b2e6e0b6) )
|
ROM_LOAD( "rcm_09.rom", 0x00000, 0x08000, CRC(9632d6ef) SHA1(2bcb6f17005ffbc9ef8fa4478a814f24b2e6e0b6) )
|
||||||
ROM_CONTINUE( 0x10000, 0x18000 )
|
ROM_CONTINUE( 0x10000, 0x18000 ) // second half of ROM is empty, not mapped in memory
|
||||||
|
|
||||||
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
|
||||||
ROM_LOAD( "rcm_18.rom", 0x00000, 0x20000, CRC(80f1f8aa) SHA1(4a5b7b2a6941ad68da7472c63362c7bcd353fa54) )
|
ROM_LOAD( "rcm_18.rom", 0x00000, 0x20000, CRC(80f1f8aa) SHA1(4a5b7b2a6941ad68da7472c63362c7bcd353fa54) )
|
||||||
@ -7252,6 +7351,18 @@ ROM_END
|
|||||||
|
|
||||||
|
|
||||||
#ifndef MESS
|
#ifndef MESS
|
||||||
|
|
||||||
|
static DRIVER_INIT( forgottn )
|
||||||
|
{
|
||||||
|
/* Forgotten Worlds has extra inputs on the B-board CN-MOWS connector for the dial controls. */
|
||||||
|
memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x800040, 0x800041, 0, 0, forgottn_dial_0_reset_w);
|
||||||
|
memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x800048, 0x800049, 0, 0, forgottn_dial_1_reset_w);
|
||||||
|
memory_install_read16_handler (machine, 0, ADDRESS_SPACE_PROGRAM, 0x800052, 0x800055, 0, 0, forgottn_dial_0_r);
|
||||||
|
memory_install_read16_handler (machine, 0, ADDRESS_SPACE_PROGRAM, 0x80005a, 0x80005d, 0, 0, forgottn_dial_1_r);
|
||||||
|
|
||||||
|
DRIVER_INIT_CALL(cps1);
|
||||||
|
}
|
||||||
|
|
||||||
static DRIVER_INIT( wof )
|
static DRIVER_INIT( wof )
|
||||||
{
|
{
|
||||||
wof_decode();
|
wof_decode();
|
||||||
@ -7278,7 +7389,8 @@ static DRIVER_INIT( slammast )
|
|||||||
|
|
||||||
static DRIVER_INIT( pang3 )
|
static DRIVER_INIT( pang3 )
|
||||||
{
|
{
|
||||||
/* Pang 3 EEPROM interface is at a different address */
|
/* Pang 3 is the only non-QSound game to have an EEPROM. */
|
||||||
|
/* It is mapped in the CPS-B address range so probably is on the C-board. */
|
||||||
memory_install_readwrite16_handler (machine, 0, ADDRESS_SPACE_PROGRAM, 0x80017a, 0x80017b, 0, 0, cps1_eeprom_port_r, cps1_eeprom_port_w);
|
memory_install_readwrite16_handler (machine, 0, ADDRESS_SPACE_PROGRAM, 0x80017a, 0x80017b, 0, 0, cps1_eeprom_port_r, cps1_eeprom_port_w);
|
||||||
|
|
||||||
DRIVER_INIT_CALL(cps1);
|
DRIVER_INIT_CALL(cps1);
|
||||||
@ -7310,8 +7422,8 @@ static DRIVER_INIT( pang3j )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
GAME( 1988, forgottn, 0, cps1_10MHz, forgottn, cps1, ROT0, "Capcom", "Forgotten Worlds (US)", 0 )
|
GAME( 1988, forgottn, 0, cps1_10MHz, forgottn, forgottn, ROT0, "Capcom", "Forgotten Worlds (US)", 0 )
|
||||||
GAME( 1988, lostwrld, forgottn, cps1_10MHz, forgottn, cps1, ROT0, "Capcom", "Lost Worlds (Japan)", 0 )
|
GAME( 1988, lostwrld, forgottn, cps1_10MHz, forgottn, forgottn, ROT0, "Capcom", "Lost Worlds (Japan)", 0 )
|
||||||
GAME( 1988, ghouls, 0, cps1_10MHz, ghouls, cps1, ROT0, "Capcom", "Ghouls'n Ghosts (World)" , 0) // Wed.26.10.1988 in the ROMS
|
GAME( 1988, ghouls, 0, cps1_10MHz, ghouls, cps1, ROT0, "Capcom", "Ghouls'n Ghosts (World)" , 0) // Wed.26.10.1988 in the ROMS
|
||||||
GAME( 1988, ghoulsu, ghouls, cps1_10MHz, ghoulsu, cps1, ROT0, "Capcom", "Ghouls'n Ghosts (US)" , 0) // Wed.26.10.1988 in the ROMS
|
GAME( 1988, ghoulsu, ghouls, cps1_10MHz, ghoulsu, cps1, ROT0, "Capcom", "Ghouls'n Ghosts (US)" , 0) // Wed.26.10.1988 in the ROMS
|
||||||
GAME( 1988, daimakai, ghouls, cps1_10MHz, daimakai, cps1, ROT0, "Capcom", "Dai Makai-Mura (Japan)" , 0) // Wed.26.10.1988 in the ROMS
|
GAME( 1988, daimakai, ghouls, cps1_10MHz, daimakai, cps1, ROT0, "Capcom", "Dai Makai-Mura (Japan)" , 0) // Wed.26.10.1988 in the ROMS
|
||||||
@ -7394,10 +7506,10 @@ GAME( 1992, sf2m6, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "bootleg
|
|||||||
GAME( 1992, sf2m7, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "bootleg","Street Fighter II' - Champion Edition (M7)", 0 )
|
GAME( 1992, sf2m7, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "bootleg","Street Fighter II' - Champion Edition (M7)", 0 )
|
||||||
GAME( 1992, sf2yyc, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "bootleg","Street Fighter II' - Champion Edition (YYC)", 0 )
|
GAME( 1992, sf2yyc, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "bootleg","Street Fighter II' - Champion Edition (YYC)", 0 )
|
||||||
GAME( 1992, sf2koryu, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "bootleg","Street Fighter II' - Champion Edition (Kouryu)", 0 )
|
GAME( 1992, sf2koryu, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "bootleg","Street Fighter II' - Champion Edition (Kouryu)", 0 )
|
||||||
GAME( 1992, varth, 0, cps1_10MHz, varth, cps1, ROT270, "Capcom", "Varth - Operation Thunderstorm (World 920714)" , 0) // "ETC"
|
GAME( 1992, varth, 0, cps1_12MHz, varth, cps1, ROT270, "Capcom", "Varth - Operation Thunderstorm (World 920714)" , 0) // "ETC" 12MHz not verified but game slows down at 10MHz
|
||||||
GAME( 1992, varthr1, varth, cps1_10MHz, varth, cps1, ROT270, "Capcom", "Varth - Operation Thunderstorm (World 920612)" , 0) // "ETC"
|
GAME( 1992, varthr1, varth, cps1_12MHz, varth, cps1, ROT270, "Capcom", "Varth - Operation Thunderstorm (World 920612)" , 0) // "ETC"
|
||||||
GAME( 1992, varthu, varth, cps1_10MHz, varth, cps1, ROT270, "Capcom (Romstar license)", "Varth - Operation Thunderstorm (US 920612)", 0 )
|
GAME( 1992, varthu, varth, cps1_12MHz, varth, cps1, ROT270, "Capcom (Romstar license)", "Varth - Operation Thunderstorm (US 920612)", 0 )
|
||||||
GAME( 1992, varthj, varth, cps1_10MHz, varth, cps1, ROT270, "Capcom", "Varth - Operation Thunderstorm (Japan 920714)", 0 )
|
GAME( 1992, varthj, varth, cps1_12MHz, varth, cps1, ROT270, "Capcom", "Varth - Operation Thunderstorm (Japan 920714)", 0 )
|
||||||
GAME( 1992, cworld2j, 0, cps1_10MHz, cworld2j, cps1, ROT0, "Capcom", "Capcom World 2 (Japan 920611)", 0 )
|
GAME( 1992, cworld2j, 0, cps1_10MHz, cworld2j, cps1, ROT0, "Capcom", "Capcom World 2 (Japan 920611)", 0 )
|
||||||
GAME( 1992, sf2hf, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "Capcom", "Street Fighter II' - Hyper Fighting (World 921209)", 0 )
|
GAME( 1992, sf2hf, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "Capcom", "Street Fighter II' - Hyper Fighting (World 921209)", 0 )
|
||||||
GAME( 1992, sf2t, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "Capcom", "Street Fighter II' - Hyper Fighting (US 921209)", 0 )
|
GAME( 1992, sf2t, sf2ce, cps1_12MHz, sf2, cps1, ROT0, "Capcom", "Street Fighter II' - Hyper Fighting (US 921209)", 0 )
|
||||||
@ -7421,8 +7533,8 @@ GAME( 1993, punishrj, punisher, qsound, punisher, punisher, ROT0, "Capcom"
|
|||||||
GAME( 1993, slammast, 0, qsound, slammast, slammast, ROT0, "Capcom", "Saturday Night Slam Masters (World 930713)" , 0) // "ETC"
|
GAME( 1993, slammast, 0, qsound, slammast, slammast, ROT0, "Capcom", "Saturday Night Slam Masters (World 930713)" , 0) // "ETC"
|
||||||
GAME( 1993, slammasu, slammast, qsound, slammast, slammast, ROT0, "Capcom", "Saturday Night Slam Masters (US 930713)", 0 )
|
GAME( 1993, slammasu, slammast, qsound, slammast, slammast, ROT0, "Capcom", "Saturday Night Slam Masters (US 930713)", 0 )
|
||||||
GAME( 1993, mbomberj, slammast, qsound, slammast, slammast, ROT0, "Capcom", "Muscle Bomber - The Body Explosion (Japan 930713)", 0 )
|
GAME( 1993, mbomberj, slammast, qsound, slammast, slammast, ROT0, "Capcom", "Muscle Bomber - The Body Explosion (Japan 930713)", 0 )
|
||||||
GAME( 1993, mbombrd, slammast, qsound, slammast, slammast, ROT0, "Capcom", "Muscle Bomber Duo - Ultimate Team Battle (World 931206)" , 0) // "ETC"
|
GAME( 1993, mbombrd, 0, qsound, slammast, slammast, ROT0, "Capcom", "Muscle Bomber Duo - Ultimate Team Battle (World 931206)" , 0) // "ETC"
|
||||||
GAME( 1993, mbombrdj, slammast, qsound, slammast, slammast, ROT0, "Capcom", "Muscle Bomber Duo - Heat Up Warriors (Japan 931206)", 0 )
|
GAME( 1993, mbombrdj, mbombrd, qsound, slammast, slammast, ROT0, "Capcom", "Muscle Bomber Duo - Heat Up Warriors (Japan 931206)", 0 )
|
||||||
|
|
||||||
GAME( 1994, pnickj, 0, cps1_10MHz, pnickj, cps1, ROT0, "Compile (Capcom license)", "Pnickies (Japan 940608)", 0 )
|
GAME( 1994, pnickj, 0, cps1_10MHz, pnickj, cps1, ROT0, "Compile (Capcom license)", "Pnickies (Japan 940608)", 0 )
|
||||||
/* Japanese version of Pang 3 is encrypted, Euro version is not */
|
/* Japanese version of Pang 3 is encrypted, Euro version is not */
|
||||||
|
@ -646,17 +646,17 @@ static INTERRUPT_GEN( cps2_interrupt )
|
|||||||
}
|
}
|
||||||
scancount++;
|
scancount++;
|
||||||
|
|
||||||
if(cps1_output[0x50/2] & 0x8000)
|
if (cps1_cps_b_regs[0x10/2] & 0x8000)
|
||||||
cps1_output[0x50/2] = cps1_output[0x50/2] & 0x1ff;
|
cps1_cps_b_regs[0x10/2] = cps1_cps_b_regs[0x10/2] & 0x1ff;
|
||||||
if(cps1_output[0x52/2] & 0x8000)
|
if (cps1_cps_b_regs[0x12/2] & 0x8000)
|
||||||
cps1_output[0x52/2] = cps1_output[0x52/2] & 0x1ff;
|
cps1_cps_b_regs[0x12/2] = cps1_cps_b_regs[0x12/2] & 0x1ff;
|
||||||
|
|
||||||
// popmessage("%04x %04x - %04x %04x",cps1_scanline1,cps1_scanline2,cps1_output[0x50/2],cps1_output[0x52/2]);
|
// popmessage("%04x %04x - %04x %04x",cps1_scanline1,cps1_scanline2,cps1_cps_b_regs[0x10/2],cps1_cps_b_regs[0x12/2]);
|
||||||
|
|
||||||
/* raster effects */
|
/* raster effects */
|
||||||
if(cps1_scanline1 == scancount || (cps1_scanline1 < scancount && !cps1_scancalls))
|
if(cps1_scanline1 == scancount || (cps1_scanline1 < scancount && !cps1_scancalls))
|
||||||
{
|
{
|
||||||
cps1_output[0x50/2] = 0;
|
cps1_cps_b_regs[0x10/2] = 0;
|
||||||
cpunum_set_input_line(machine, 0, 4, HOLD_LINE);
|
cpunum_set_input_line(machine, 0, 4, HOLD_LINE);
|
||||||
cps2_set_sprite_priorities();
|
cps2_set_sprite_priorities();
|
||||||
video_screen_update_partial(machine->primary_screen, 16 - 10 + scancount); /* visarea.min_y - [first visible line?] + scancount */
|
video_screen_update_partial(machine->primary_screen, 16 - 10 + scancount); /* visarea.min_y - [first visible line?] + scancount */
|
||||||
@ -667,7 +667,7 @@ static INTERRUPT_GEN( cps2_interrupt )
|
|||||||
/* raster effects */
|
/* raster effects */
|
||||||
if(cps1_scanline2 == scancount || (cps1_scanline2 < scancount && !cps1_scancalls))
|
if(cps1_scanline2 == scancount || (cps1_scanline2 < scancount && !cps1_scancalls))
|
||||||
{
|
{
|
||||||
cps1_output[0x52/2] = 0;
|
cps1_cps_b_regs[0x12/2] = 0;
|
||||||
cpunum_set_input_line(machine, 0, 4, HOLD_LINE);
|
cpunum_set_input_line(machine, 0, 4, HOLD_LINE);
|
||||||
cps2_set_sprite_priorities();
|
cps2_set_sprite_priorities();
|
||||||
video_screen_update_partial(machine->primary_screen, 16 - 10 + scancount); /* visarea.min_y - [first visible line?] + scancount */
|
video_screen_update_partial(machine->primary_screen, 16 - 10 + scancount); /* visarea.min_y - [first visible line?] + scancount */
|
||||||
@ -677,8 +677,8 @@ static INTERRUPT_GEN( cps2_interrupt )
|
|||||||
|
|
||||||
if(scancount == 256) /* VBlank */
|
if(scancount == 256) /* VBlank */
|
||||||
{
|
{
|
||||||
cps1_output[0x50/2] = cps1_scanline1;
|
cps1_cps_b_regs[0x10/2] = cps1_scanline1;
|
||||||
cps1_output[0x52/2] = cps1_scanline2;
|
cps1_cps_b_regs[0x12/2] = cps1_scanline2;
|
||||||
cpunum_set_input_line(machine, 0, 2, HOLD_LINE);
|
cpunum_set_input_line(machine, 0, 2, HOLD_LINE);
|
||||||
if(cps1_scancalls)
|
if(cps1_scancalls)
|
||||||
{
|
{
|
||||||
@ -873,13 +873,13 @@ static ADDRESS_MAP_START( cps2_readmem, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
AM_RANGE(0x70a000, 0x70bfff) AM_READ(cps2_objram2_r) /* mirror */
|
AM_RANGE(0x70a000, 0x70bfff) AM_READ(cps2_objram2_r) /* mirror */
|
||||||
AM_RANGE(0x70c000, 0x70dfff) AM_READ(cps2_objram2_r) /* mirror */
|
AM_RANGE(0x70c000, 0x70dfff) AM_READ(cps2_objram2_r) /* mirror */
|
||||||
AM_RANGE(0x70e000, 0x70ffff) AM_READ(cps2_objram2_r) /* mirror */
|
AM_RANGE(0x70e000, 0x70ffff) AM_READ(cps2_objram2_r) /* mirror */
|
||||||
AM_RANGE(0x800100, 0x8001ff) AM_READ(cps1_output_r) /* Output ports mirror (sfa) */
|
AM_RANGE(0x800140, 0x80017f) AM_READ(cps1_cps_b_r) /* mirror (sfa) */
|
||||||
AM_RANGE(0x804000, 0x804001) AM_READ_PORT("IN0") /* IN0 */
|
AM_RANGE(0x804000, 0x804001) AM_READ_PORT("IN0") /* IN0 */
|
||||||
AM_RANGE(0x804010, 0x804011) AM_READ_PORT("IN1") /* IN1 */
|
AM_RANGE(0x804010, 0x804011) AM_READ_PORT("IN1") /* IN1 */
|
||||||
AM_RANGE(0x804020, 0x804021) AM_READ_PORT("IN2") /* IN2 + EEPROM */
|
AM_RANGE(0x804020, 0x804021) AM_READ_PORT("IN2") /* IN2 + EEPROM */
|
||||||
AM_RANGE(0x804030, 0x804031) AM_READ(cps2_qsound_volume_r) /* Master volume. Also when bit 14=0 addon memory is present, when bit 15=0 network adapter present. */
|
AM_RANGE(0x804030, 0x804031) AM_READ(cps2_qsound_volume_r) /* Master volume. Also when bit 14=0 addon memory is present, when bit 15=0 network adapter present. */
|
||||||
AM_RANGE(0x8040b0, 0x8040b3) AM_READ(kludge_r) /* unknown (xmcotaj hangs if this is 0) */
|
AM_RANGE(0x8040b0, 0x8040b3) AM_READ(kludge_r) /* unknown (xmcotaj hangs if this is 0) */
|
||||||
AM_RANGE(0x804100, 0x8041ff) AM_READ(cps1_output_r) /* CPS1 Output ports */
|
AM_RANGE(0x804140, 0x80417f) AM_READ(cps1_cps_b_r) /* CPS-B custom */
|
||||||
AM_RANGE(0x900000, 0x92ffff) AM_READ(SMH_RAM) /* Video RAM */
|
AM_RANGE(0x900000, 0x92ffff) AM_READ(SMH_RAM) /* Video RAM */
|
||||||
AM_RANGE(0xff0000, 0xffffff) AM_READ(SMH_RAM) /* RAM */
|
AM_RANGE(0xff0000, 0xffffff) AM_READ(SMH_RAM) /* RAM */
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
@ -898,11 +898,13 @@ static ADDRESS_MAP_START( cps2_writemem, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
AM_RANGE(0x70a000, 0x70bfff) AM_WRITE(cps2_objram2_w) /* mirror */
|
AM_RANGE(0x70a000, 0x70bfff) AM_WRITE(cps2_objram2_w) /* mirror */
|
||||||
AM_RANGE(0x70c000, 0x70dfff) AM_WRITE(cps2_objram2_w) /* mirror */
|
AM_RANGE(0x70c000, 0x70dfff) AM_WRITE(cps2_objram2_w) /* mirror */
|
||||||
AM_RANGE(0x70e000, 0x70ffff) AM_WRITE(cps2_objram2_w) /* mirror */
|
AM_RANGE(0x70e000, 0x70ffff) AM_WRITE(cps2_objram2_w) /* mirror */
|
||||||
AM_RANGE(0x800100, 0x8001ff) AM_WRITE(cps1_output_w) /* Output ports mirror (sfa) */
|
AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_BASE(&cps1_cps_a_regs) /* mirror (sfa) */
|
||||||
|
AM_RANGE(0x800140, 0x80017f) AM_WRITE(cps1_cps_b_w) AM_BASE(&cps1_cps_b_regs) /* mirror (sfa) */
|
||||||
AM_RANGE(0x804040, 0x804041) AM_WRITE(cps2_eeprom_port_w) /* EEPROM */
|
AM_RANGE(0x804040, 0x804041) AM_WRITE(cps2_eeprom_port_w) /* EEPROM */
|
||||||
AM_RANGE(0x8040a0, 0x8040a1) AM_WRITE(SMH_NOP) /* Unknown (reset once on startup) */
|
AM_RANGE(0x8040a0, 0x8040a1) AM_WRITE(SMH_NOP) /* Unknown (reset once on startup) */
|
||||||
AM_RANGE(0x8040e0, 0x8040e1) AM_WRITE(cps2_objram_bank_w) /* bit 0 = Object ram bank swap */
|
AM_RANGE(0x8040e0, 0x8040e1) AM_WRITE(cps2_objram_bank_w) /* bit 0 = Object ram bank swap */
|
||||||
AM_RANGE(0x804100, 0x8041ff) AM_WRITE(cps1_output_w) AM_BASE(&cps1_output) AM_SIZE(&cps1_output_size) /* Output ports */
|
AM_RANGE(0x804100, 0x80413f) AM_WRITE(cps1_cps_a_w) AM_BASE(&cps1_cps_a_regs) /* CPS-A custom */
|
||||||
|
AM_RANGE(0x804140, 0x80417f) AM_WRITE(cps1_cps_b_w) AM_BASE(&cps1_cps_b_regs) /* CPS-B custom */
|
||||||
AM_RANGE(0x900000, 0x92ffff) AM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size)
|
AM_RANGE(0x900000, 0x92ffff) AM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size)
|
||||||
AM_RANGE(0xff0000, 0xffffff) AM_WRITE(SMH_RAM) /* RAM */
|
AM_RANGE(0xff0000, 0xffffff) AM_WRITE(SMH_RAM) /* RAM */
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
@ -7175,6 +7177,11 @@ GAME( 1993, ssf2jr2, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Su
|
|||||||
GAME( 1993, ssf2tb, ssf2, cps2, cps2_2p6b, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 931119)", 0 ) // works, but not in tournament mode
|
GAME( 1993, ssf2tb, ssf2, cps2, cps2_2p6b, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 931119)", 0 ) // works, but not in tournament mode
|
||||||
GAME( 1993, ssf2tbr1, ssf2, cps2, cps2_2p6b, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 930911)", 0 ) // works, but not in tournament mode
|
GAME( 1993, ssf2tbr1, ssf2, cps2, cps2_2p6b, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 930911)", 0 ) // works, but not in tournament mode
|
||||||
GAME( 1993, ssf2tbj, ssf2, cps2, cps2_2p6b, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 930911)", 0 ) // works, but not in tournament mode
|
GAME( 1993, ssf2tbj, ssf2, cps2, cps2_2p6b, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 930911)", 0 ) // works, but not in tournament mode
|
||||||
|
GAME( 1993, ecofghtr, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (World 931203)", 0 )
|
||||||
|
GAME( 1993, ecofghtu, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (USA 940215)", 0 )
|
||||||
|
GAME( 1993, ecofgtu1, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (USA 931203)", 0 )
|
||||||
|
GAME( 1993, uecology, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Ultimate Ecology (Japan 931203)", 0 )
|
||||||
|
GAME( 1993, ecofghta, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (Asia 931203)", 0 )
|
||||||
GAME( 1993, ddtod, 0, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940412)", 0 )
|
GAME( 1993, ddtod, 0, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940412)", 0 )
|
||||||
GAME( 1993, ddtodr1, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940113)", 0 )
|
GAME( 1993, ddtodr1, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Euro 940113)", 0 )
|
||||||
GAME( 1993, ddtodu, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (USA 940125)", 0 )
|
GAME( 1993, ddtodu, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (USA 940125)", 0 )
|
||||||
@ -7184,30 +7191,11 @@ GAME( 1993, ddtodjr1, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Du
|
|||||||
GAME( 1993, ddtodjr2, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940113)", 0 )
|
GAME( 1993, ddtodjr2, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Japan 940113)", 0 )
|
||||||
GAME( 1993, ddtoda, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Asia 940113)", 0 )
|
GAME( 1993, ddtoda, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Asia 940113)", 0 )
|
||||||
GAME( 1993, ddtodh, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940125)", 0 )
|
GAME( 1993, ddtodh, ddtod, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Tower of Doom (Hispanic 940125)", 0 )
|
||||||
GAME( 1993, ecofghtr, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (World 931203)", 0 )
|
|
||||||
GAME( 1993, ecofghtu, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (USA 940215)", 0 )
|
|
||||||
GAME( 1993, ecofgtu1, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (USA 931203)", 0 )
|
|
||||||
GAME( 1993, uecology, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Ultimate Ecology (Japan 931203)", 0 )
|
|
||||||
GAME( 1993, ecofghta, ecofghtr, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Eco Fighters (Asia 931203)", 0 )
|
|
||||||
GAME( 1994, ssf2t, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (World 940223)", 0 )
|
GAME( 1994, ssf2t, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (World 940223)", 0 )
|
||||||
GAME( 1994, ssf2ta, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Asia 940223)", 0 )
|
GAME( 1994, ssf2ta, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Asia 940223)", 0 )
|
||||||
GAME( 1994, ssf2tu, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940323)", 0 )
|
GAME( 1994, ssf2tu, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940323)", 0 )
|
||||||
GAME( 1994, ssf2tur1, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940223)", 0 )
|
GAME( 1994, ssf2tur1, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940223)", 0 )
|
||||||
GAME( 1994, ssf2xj, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", 0 )
|
GAME( 1994, ssf2xj, ssf2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", 0 )
|
||||||
GAME( 1994, xmcota, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Euro 950105)", 0 )
|
|
||||||
GAME( 1994, xmcotau, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (USA 950105)", 0 )
|
|
||||||
GAME( 1994, xmcotah, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Hispanic 950331)", 0 )
|
|
||||||
GAME( 1994, xmcotaj, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941222)", 0 )
|
|
||||||
GAME( 1994, xmcotaj1, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941219)", 0 )
|
|
||||||
GAME( 1994, xmcotaj2, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941217)", 0 )
|
|
||||||
GAME( 1994, xmcotajr, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941208 rent version)", 0 )
|
|
||||||
GAME( 1994, xmcotaa, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Asia 941217)", 0 )
|
|
||||||
GAME( 1994, armwar, 0, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (Euro 941024)", 0 )
|
|
||||||
GAME( 1994, armwarr1, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (Euro 941011)", 0 )
|
|
||||||
GAME( 1994, armwaru, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (USA 941024)", 0 )
|
|
||||||
GAME( 1994, pgear, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 941024)", 0 )
|
|
||||||
GAME( 1994, pgearr1, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 940916)", 0 )
|
|
||||||
GAME( 1994, armwara, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (Asia 940920)", 0 )
|
|
||||||
GAME( 1994, avsp, 0, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Alien vs. Predator (Euro 940520)", 0 )
|
GAME( 1994, avsp, 0, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Alien vs. Predator (Euro 940520)", 0 )
|
||||||
GAME( 1994, avspu, avsp, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Alien vs. Predator (USA 940520)", 0 )
|
GAME( 1994, avspu, avsp, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Alien vs. Predator (USA 940520)", 0 )
|
||||||
GAME( 1994, avspj, avsp, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Alien vs. Predator (Japan 940520)", 0 )
|
GAME( 1994, avspj, avsp, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Alien vs. Predator (Japan 940520)", 0 )
|
||||||
@ -7223,16 +7211,20 @@ GAME( 1994, vampjr1, dstlk, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Va
|
|||||||
GAME( 1994, ringdest, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Euro 940902)", 0 )
|
GAME( 1994, ringdest, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Ring of Destruction: Slammasters II (Euro 940902)", 0 )
|
||||||
GAME( 1994, smbomb, ringdest, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940831)", 0 )
|
GAME( 1994, smbomb, ringdest, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940831)", 0 )
|
||||||
GAME( 1994, smbombr1, ringdest, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940808)", 0 )
|
GAME( 1994, smbombr1, ringdest, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Super Muscle Bomber: The International Blowout (Japan 940808)", 0 )
|
||||||
GAME( 1995, cybots, 0, cps2, cybots, cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Euro 950424)", 0 )
|
GAME( 1994, armwar, 0, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (Euro 941024)", 0 )
|
||||||
GAME( 1995, cybotsu, cybots, cps2, cybots, cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (USA 950424)", 0 )
|
GAME( 1994, armwarr1, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (Euro 941011)", 0 )
|
||||||
GAME( 1995, cybotsj, cybots, cps2, cybots, cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Japan 950420)", 0 )
|
GAME( 1994, armwaru, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (USA 941024)", 0 )
|
||||||
GAME( 1995, msh, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Euro 951024)", 0 )
|
GAME( 1994, pgear, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 941024)", 0 )
|
||||||
GAME( 1995, mshu, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (USA 951024)", 0 )
|
GAME( 1994, pgearr1, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Powered Gear: Strategic Variant Armor Equipment (Japan 940916)", 0 )
|
||||||
GAME( 1995, mshj, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951117)", 0 )
|
GAME( 1994, armwara, armwar, cps2, cps2_3p3b, cps2, ROT0, "Capcom", "Armored Warriors (Asia 940920)", 0 )
|
||||||
GAME( 1995, mshjr1, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951024)", 0 )
|
GAME( 1994, xmcota, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Euro 950105)", 0 )
|
||||||
GAME( 1995, msha, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Asia 951024)", 0 )
|
GAME( 1994, xmcotau, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (USA 950105)", 0 )
|
||||||
GAME( 1995, mshh, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Hispanic 951117)", 0 )
|
GAME( 1994, xmcotah, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Hispanic 950331)", 0 )
|
||||||
GAME( 1995, mshb, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Brazil 951117)", 0 )
|
GAME( 1994, xmcotaj, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941222)", 0 )
|
||||||
|
GAME( 1994, xmcotaj1, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941219)", 0 )
|
||||||
|
GAME( 1994, xmcotaj2, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941217)", 0 )
|
||||||
|
GAME( 1994, xmcotajr, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Japan 941208 rent version)", 0 )
|
||||||
|
GAME( 1994, xmcotaa, xmcota, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men: Children of the Atom (Asia 941217)", 0 )
|
||||||
GAME( 1995, nwarr, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Euro 950316)", 0 )
|
GAME( 1995, nwarr, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Euro 950316)", 0 )
|
||||||
GAME( 1995, nwarru, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (USA 950406)", 0 )
|
GAME( 1995, nwarru, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (USA 950406)", 0 )
|
||||||
GAME( 1995, nwarrh, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Hispanic 950403)", 0 )
|
GAME( 1995, nwarrh, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Night Warriors: Darkstalkers' Revenge (Hispanic 950403)", 0 )
|
||||||
@ -7240,6 +7232,9 @@ GAME( 1995, nwarrb, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Ni
|
|||||||
GAME( 1995, vhuntj, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950316)", 0 )
|
GAME( 1995, vhuntj, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950316)", 0 )
|
||||||
GAME( 1995, vhuntjr1, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307)", 0 )
|
GAME( 1995, vhuntjr1, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307)", 0 )
|
||||||
GAME( 1995, vhuntjr2, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950302)", 0 )
|
GAME( 1995, vhuntjr2, nwarr, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter: Darkstalkers' Revenge (Japan 950302)", 0 )
|
||||||
|
GAME( 1995, cybots, 0, cps2, cybots, cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Euro 950424)", 0 )
|
||||||
|
GAME( 1995, cybotsu, cybots, cps2, cybots, cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (USA 950424)", 0 )
|
||||||
|
GAME( 1995, cybotsj, cybots, cps2, cybots, cps2, ROT0, "Capcom", "Cyberbots: Fullmetal Madness (Japan 950420)", 0 )
|
||||||
GAME( 1995, sfa, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950727)", 0 )
|
GAME( 1995, sfa, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950727)", 0 )
|
||||||
GAME( 1995, sfar1, sfa, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950718)", 0 )
|
GAME( 1995, sfar1, sfa, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950718)", 0 )
|
||||||
GAME( 1995, sfar2, sfa, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950627)", 0 )
|
GAME( 1995, sfar2, sfa, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha: Warriors' Dreams (Euro 950627)", 0 )
|
||||||
@ -7254,6 +7249,13 @@ GAME( 1995, sfzb, sfa, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "St
|
|||||||
GAME( 1995, sfzbr1, sfa, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Zero (Brazil 950727)", 0 )
|
GAME( 1995, sfzbr1, sfa, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Zero (Brazil 950727)", 0 )
|
||||||
GAME( 1995, mmancp2u, megaman, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Mega Man - The Power Battle (CPS2, USA 951006, SAMPLE Version)", 0 )
|
GAME( 1995, mmancp2u, megaman, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Mega Man - The Power Battle (CPS2, USA 951006, SAMPLE Version)", 0 )
|
||||||
GAME( 1995, rmancp2j, megaman, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Rockman: The Power Battle (CPS2, Japan 950922)", 0 )
|
GAME( 1995, rmancp2j, megaman, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Rockman: The Power Battle (CPS2, Japan 950922)", 0 )
|
||||||
|
GAME( 1995, msh, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Euro 951024)", 0 )
|
||||||
|
GAME( 1995, mshu, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (USA 951024)", 0 )
|
||||||
|
GAME( 1995, mshj, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951117)", 0 )
|
||||||
|
GAME( 1995, mshjr1, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Japan 951024)", 0 )
|
||||||
|
GAME( 1995, msha, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Asia 951024)", 0 )
|
||||||
|
GAME( 1995, mshh, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Hispanic 951117)", 0 )
|
||||||
|
GAME( 1995, mshb, msh, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes (Brazil 951117)", 0 )
|
||||||
GAME( 1996, 19xx, 0, cps2, cps2_2p2b, cps2, ROT270, "Capcom", "19XX: The War Against Destiny (USA 951207)", 0 )
|
GAME( 1996, 19xx, 0, cps2, cps2_2p2b, cps2, ROT270, "Capcom", "19XX: The War Against Destiny (USA 951207)", 0 )
|
||||||
GAME( 1996, 19xxa, 19xx, cps2, cps2_2p2b, cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Asia 951207)", 0 )
|
GAME( 1996, 19xxa, 19xx, cps2, cps2_2p2b, cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Asia 951207)", 0 )
|
||||||
GAME( 1996, 19xxj, 19xx, cps2, cps2_2p2b, cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 951225)", 0 )
|
GAME( 1996, 19xxj, 19xx, cps2, cps2_2p2b, cps2, ROT270, "Capcom", "19XX: The War Against Destiny (Japan 951225)", 0 )
|
||||||
@ -7270,10 +7272,6 @@ GAME( 1996, ddsomj, ddsom, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Du
|
|||||||
GAME( 1996, ddsomjr1, ddsom, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960206)", 0 )
|
GAME( 1996, ddsomjr1, ddsom, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Japan 960206)", 0 )
|
||||||
GAME( 1996, ddsoma, ddsom, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960619)", 0 )
|
GAME( 1996, ddsoma, ddsom, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Asia 960619)", 0 )
|
||||||
GAME( 1996, ddsomb, ddsom, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Brazil 960223)", 0 )
|
GAME( 1996, ddsomb, ddsom, cps2, cps2_4p4b, cps2, ROT0, "Capcom", "Dungeons & Dragons: Shadow over Mystara (Brazil 960223)", 0 )
|
||||||
GAME( 1996, megaman2, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (USA 960708)", 0 )
|
|
||||||
GAME( 1996, megamn2a, megaman2, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (Asia 960708)", 0 )
|
|
||||||
GAME( 1996, rckman2j, megaman2, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Rockman 2: The Power Fighters (Japan 960708)", 0 )
|
|
||||||
GAME( 1996, qndream, 0, cps2, qndream, cps2, ROT0, "Capcom", "Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826)", 0 )
|
|
||||||
GAME( 1996, sfa2, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (USA 960306)", 0 )
|
GAME( 1996, sfa2, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Alpha 2 (USA 960306)", 0 )
|
||||||
GAME( 1996, sfz2j, sfa2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Japan 960227)", 0 )
|
GAME( 1996, sfz2j, sfa2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Japan 960227)", 0 )
|
||||||
GAME( 1996, sfz2a, sfa2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Asia 960227)", 0 )
|
GAME( 1996, sfz2a, sfa2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Street Fighter Zero 2 (Asia 960227)", 0 )
|
||||||
@ -7288,6 +7286,10 @@ GAME( 1996, sfz2aa, sfa2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "St
|
|||||||
GAME( 1996, spf2t, 0, cps2, cps2_2p2b, cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (USA 960620)", 0 )
|
GAME( 1996, spf2t, 0, cps2, cps2_2p2b, cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (USA 960620)", 0 )
|
||||||
GAME( 1996, spf2xj, spf2t, cps2, cps2_2p2b, cps2, ROT0, "Capcom", "Super Puzzle Fighter II X (Japan 960531)", 0 )
|
GAME( 1996, spf2xj, spf2t, cps2, cps2_2p2b, cps2, ROT0, "Capcom", "Super Puzzle Fighter II X (Japan 960531)", 0 )
|
||||||
GAME( 1996, spf2ta, spf2t, cps2, cps2_2p2b, cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Asia 960529)", 0 )
|
GAME( 1996, spf2ta, spf2t, cps2, cps2_2p2b, cps2, ROT0, "Capcom", "Super Puzzle Fighter II Turbo (Asia 960529)", 0 )
|
||||||
|
GAME( 1996, megaman2, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (USA 960708)", 0 )
|
||||||
|
GAME( 1996, megamn2a, megaman2, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Mega Man 2: The Power Fighters (Asia 960708)", 0 )
|
||||||
|
GAME( 1996, rckman2j, megaman2, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Rockman 2: The Power Fighters (Japan 960708)", 0 )
|
||||||
|
GAME( 1996, qndream, 0, cps2, qndream, cps2, ROT0, "Capcom", "Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826)", 0 )
|
||||||
GAME( 1996, xmvsf, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 961004)", 0 )
|
GAME( 1996, xmvsf, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 961004)", 0 )
|
||||||
GAME( 1996, xmvsfr1, xmvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 960910)", 0 )
|
GAME( 1996, xmvsfr1, xmvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (Euro 960910)", 0 )
|
||||||
GAME( 1996, xmvsfu, xmvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 961023)", 0 )
|
GAME( 1996, xmvsfu, xmvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-Men Vs. Street Fighter (USA 961023)", 0 )
|
||||||
@ -7302,10 +7304,11 @@ GAME( 1996, xmvsfb, xmvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "X-
|
|||||||
GAME( 1997, batcir, 0, cps2, cps2_4p2b, cps2, ROT0, "Capcom", "Battle Circuit (Euro 970319)", 0 )
|
GAME( 1997, batcir, 0, cps2, cps2_4p2b, cps2, ROT0, "Capcom", "Battle Circuit (Euro 970319)", 0 )
|
||||||
GAME( 1997, batcira, batcir, cps2, cps2_4p2b, cps2, ROT0, "Capcom", "Battle Circuit (Asia 970319)", 0 )
|
GAME( 1997, batcira, batcir, cps2, cps2_4p2b, cps2, ROT0, "Capcom", "Battle Circuit (Asia 970319)", 0 )
|
||||||
GAME( 1997, batcirj, batcir, cps2, cps2_4p2b, cps2, ROT0, "Capcom", "Battle Circuit (Japan 970319)", 0 )
|
GAME( 1997, batcirj, batcir, cps2, cps2_4p2b, cps2, ROT0, "Capcom", "Battle Circuit (Japan 970319)", 0 )
|
||||||
GAME( 1997, csclub, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Euro 970722)", 0 )
|
GAME( 1997, vsav, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Euro 970519)", 0 )
|
||||||
GAME( 1997, cscluba, csclub, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Asia 970722)", 0 )
|
GAME( 1997, vsavu, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (USA 970519)", 0 )
|
||||||
GAME( 1997, csclubj, csclub, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Japan 970722)", 0 )
|
GAME( 1997, vsavj, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Japan 970519)", 0 )
|
||||||
GAME( 1997, csclubh, csclub, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Hispanic 970722)", 0 )
|
GAME( 1997, vsava, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Asia 970519)", 0 )
|
||||||
|
GAME( 1997, vsavh, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Hispanic 970519)", 0 )
|
||||||
GAME( 1997, mshvsf, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Euro 970625)", 0 )
|
GAME( 1997, mshvsf, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Euro 970625)", 0 )
|
||||||
GAME( 1997, mshvsfu, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970827)", 0 )
|
GAME( 1997, mshvsfu, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970827)", 0 )
|
||||||
GAME( 1997, mshvsfu1, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970625)", 0 )
|
GAME( 1997, mshvsfu1, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (USA 970625)", 0 )
|
||||||
@ -7317,17 +7320,16 @@ GAME( 1997, mshvsfa, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Ma
|
|||||||
GAME( 1997, mshvsfa1, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Asia 970620)", 0 )
|
GAME( 1997, mshvsfa1, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Asia 970620)", 0 )
|
||||||
GAME( 1997, mshvsfb, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970827)", 0 )
|
GAME( 1997, mshvsfb, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970827)", 0 )
|
||||||
GAME( 1997, mshvsfb1, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970625)", 0 )
|
GAME( 1997, mshvsfb1, mshvsf, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Super Heroes Vs. Street Fighter (Brazil 970625)", 0 )
|
||||||
|
GAME( 1997, csclub, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Euro 970722)", 0 )
|
||||||
|
GAME( 1997, cscluba, csclub, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Asia 970722)", 0 )
|
||||||
|
GAME( 1997, csclubj, csclub, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Japan 970722)", 0 )
|
||||||
|
GAME( 1997, csclubh, csclub, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Capcom Sports Club (Hispanic 970722)", 0 )
|
||||||
GAME( 1997, sgemf, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Super Gem Fighter Mini Mix (USA 970904)", 0 )
|
GAME( 1997, sgemf, 0, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Super Gem Fighter Mini Mix (USA 970904)", 0 )
|
||||||
GAME( 1997, pfghtj, sgemf, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Pocket Fighter (Japan 970904)", 0 )
|
GAME( 1997, pfghtj, sgemf, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Pocket Fighter (Japan 970904)", 0 )
|
||||||
GAME( 1997, sgemfa, sgemf, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Asia 970904)", 0 )
|
GAME( 1997, sgemfa, sgemf, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Asia 970904)", 0 )
|
||||||
GAME( 1997, sgemfh, sgemf, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Hispanic 970904)", 0 )
|
GAME( 1997, sgemfh, sgemf, cps2, cps2_2p3b, cps2, ROT0, "Capcom", "Super Gem Fighter: Mini Mix (Hispanic 970904)", 0 )
|
||||||
GAME( 1997, vhunt2, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970929)", 0 )
|
GAME( 1997, vhunt2, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970929)", 0 )
|
||||||
GAME( 1997, vhunt2r1, vhunt2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913)", 0 )
|
GAME( 1997, vhunt2r1, vhunt2, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913)", 0 )
|
||||||
GAME( 1997, vsav, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Euro 970519)", 0 )
|
|
||||||
GAME( 1997, vsavu, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (USA 970519)", 0 )
|
|
||||||
GAME( 1997, vsavj, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Japan 970519)", 0 )
|
|
||||||
GAME( 1997, vsava, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Asia 970519)", 0 )
|
|
||||||
GAME( 1997, vsavh, vsav, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior: The Lord of Vampire (Hispanic 970519)", 0 )
|
|
||||||
GAME( 1997, vsav2, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior 2: The Lord of Vampire (Japan 970913)", 0 )
|
GAME( 1997, vsav2, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Vampire Savior 2: The Lord of Vampire (Japan 970913)", 0 )
|
||||||
GAME( 1998, mvsc, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112)", 0 )
|
GAME( 1998, mvsc, 0, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112)", 0 )
|
||||||
GAME( 1998, mvscu, mvsc, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123)", 0 )
|
GAME( 1998, mvscu, mvsc, cps2, cps2_2p6b, cps2, ROT0, "Capcom", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123)", 0 )
|
||||||
|
@ -4,14 +4,13 @@
|
|||||||
|
|
||||||
Final Crash is a bootleg of Final Fight
|
Final Crash is a bootleg of Final Fight
|
||||||
|
|
||||||
Final Fight is by Capcom and runs on CPS1 hardawre
|
Final Fight is by Capcom and runs on CPS1 hardware
|
||||||
The bootleg was manufactured by Playmark of Italy
|
The bootleg was manufactured by Playmark of Italy
|
||||||
|
|
||||||
this driver depends heavily on cps1.c, but has been
|
this driver depends heavily on cps1.c, but has been
|
||||||
kept apart in an attempt to keep cps1.c clutter free
|
kept apart in an attempt to keep cps1.c clutter free
|
||||||
|
|
||||||
todo:
|
Sound is very different from CPS1.
|
||||||
Add Sound (very different to CPS1)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -36,19 +35,75 @@ from 2.bin to 9.bin program eproms
|
|||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "cpu/m68000/m68kmame.h"
|
#include "cpu/m68000/m68kmame.h"
|
||||||
#include "cps1.h"
|
#include "cps1.h"
|
||||||
|
#include "sound/2203intf.h"
|
||||||
|
#include "sound/msm5205.h"
|
||||||
|
|
||||||
|
|
||||||
|
static int sample_buffer1, sample_buffer2;
|
||||||
|
static int sample_select1, sample_select2;
|
||||||
|
|
||||||
|
static WRITE16_HANDLER( fcrash_soundlatch_w )
|
||||||
|
{
|
||||||
|
if (ACCESSING_BITS_0_7)
|
||||||
|
{
|
||||||
|
soundlatch_w(machine,0,data & 0xff);
|
||||||
|
cpunum_set_input_line(machine, 1, 0, HOLD_LINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static WRITE8_HANDLER( fcrash_snd_bankswitch_w )
|
||||||
|
{
|
||||||
|
UINT8 *RAM = memory_region(REGION_CPU2);
|
||||||
|
int bankaddr;
|
||||||
|
|
||||||
|
sndti_set_output_gain(SOUND_MSM5205, 0, 0, (data & 0x08) ? 0.0 : 1.0);
|
||||||
|
sndti_set_output_gain(SOUND_MSM5205, 1, 0, (data & 0x10) ? 0.0 : 1.0);
|
||||||
|
|
||||||
|
bankaddr = ((data & 7) * 0x4000);
|
||||||
|
memory_set_bankptr(1,&RAM[0x10000 + bankaddr]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void m5205_int1(int data)
|
||||||
|
{
|
||||||
|
MSM5205_data_w(0, sample_buffer1 & 0x0F);
|
||||||
|
sample_buffer1 >>= 4;
|
||||||
|
sample_select1 ^= 1;
|
||||||
|
if (sample_select1 == 0)
|
||||||
|
cpunum_set_input_line(Machine, 1, INPUT_LINE_NMI, PULSE_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void m5205_int2(int data)
|
||||||
|
{
|
||||||
|
MSM5205_data_w(1, sample_buffer2 & 0x0F);
|
||||||
|
sample_buffer2 >>= 4;
|
||||||
|
sample_select2 ^= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static WRITE8_HANDLER( fcrash_msm5205_0_data_w )
|
||||||
|
{
|
||||||
|
sample_buffer1 = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static WRITE8_HANDLER( fcrash_msm5205_1_data_w )
|
||||||
|
{
|
||||||
|
sample_buffer2 = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* not verified */
|
/* not verified */
|
||||||
#define CPS1_ROWSCROLL_OFFS 0x20 /* base of row scroll offsets in other RAM */
|
#define CPS1_ROWSCROLL_OFFS (0x20/2) /* base of row scroll offsets in other RAM */
|
||||||
|
|
||||||
static void fcrash_update_transmasks(void)
|
static void fcrash_update_transmasks(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int priority[4];
|
int priority[4];
|
||||||
|
|
||||||
priority[0]=0x66;
|
priority[0]=0x26;
|
||||||
priority[1]=0x70;
|
priority[1]=0x30;
|
||||||
priority[2]=0x68;
|
priority[2]=0x28;
|
||||||
priority[3]=0x72;
|
priority[3]=0x32;
|
||||||
|
|
||||||
for (i = 0;i < 4;i++)
|
for (i = 0;i < 4;i++)
|
||||||
{
|
{
|
||||||
@ -56,7 +111,7 @@ static void fcrash_update_transmasks(void)
|
|||||||
|
|
||||||
/* Get transparency registers */
|
/* Get transparency registers */
|
||||||
if (priority[i])
|
if (priority[i])
|
||||||
mask = cps1_port(priority[i]) ^ 0xffff;
|
mask = cps1_cps_b_regs[priority[i]/2] ^ 0xffff;
|
||||||
else mask = 0xffff; /* completely transparent if priority masks not defined (mercs, qad) */
|
else mask = 0xffff; /* completely transparent if priority masks not defined (mercs, qad) */
|
||||||
|
|
||||||
tilemap_set_transmask(cps1_bg_tilemap[0],i,mask,0x8000);
|
tilemap_set_transmask(cps1_bg_tilemap[0],i,mask,0x8000);
|
||||||
@ -147,12 +202,12 @@ static void fcrash_build_palette(running_machine *machine)
|
|||||||
static VIDEO_UPDATE( fcrash )
|
static VIDEO_UPDATE( fcrash )
|
||||||
{
|
{
|
||||||
int layercontrol,l0,l1,l2,l3;
|
int layercontrol,l0,l1,l2,l3;
|
||||||
int videocontrol=cps1_port(0x22);
|
int videocontrol=cps1_cps_a_regs[0x22/2];
|
||||||
|
|
||||||
|
|
||||||
flip_screen_set(videocontrol & 0x8000);
|
flip_screen_set(videocontrol & 0x8000);
|
||||||
|
|
||||||
layercontrol = cps1_output[0x60/2];
|
layercontrol = cps1_cps_b_regs[0x20/2];
|
||||||
|
|
||||||
/* Get video memory base registers */
|
/* Get video memory base registers */
|
||||||
cps1_get_video_base();
|
cps1_get_video_base();
|
||||||
@ -172,7 +227,7 @@ static VIDEO_UPDATE( fcrash )
|
|||||||
|
|
||||||
tilemap_set_scroll_rows(cps1_bg_tilemap[1],1024);
|
tilemap_set_scroll_rows(cps1_bg_tilemap[1],1024);
|
||||||
|
|
||||||
otheroffs = cps1_port(CPS1_ROWSCROLL_OFFS);
|
otheroffs = cps1_cps_a_regs[CPS1_ROWSCROLL_OFFS];
|
||||||
|
|
||||||
for (i = 0;i < 256;i++)
|
for (i = 0;i < 256;i++)
|
||||||
tilemap_set_scrollx(cps1_bg_tilemap[1],(i - scrly) & 0x3ff,cps1_scroll2x + cps1_other[(i + otheroffs) & 0x3ff]);
|
tilemap_set_scrollx(cps1_bg_tilemap[1],(i - scrly) & 0x3ff,cps1_scroll2x + cps1_other[(i + otheroffs) & 0x3ff]);
|
||||||
@ -215,23 +270,32 @@ static VIDEO_UPDATE( fcrash )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START( fcrash_readmem, ADDRESS_SPACE_PROGRAM, 16 )
|
|
||||||
AM_RANGE(0x000000, 0x1fffff) AM_READ(SMH_ROM) /* 68000 ROM */
|
static ADDRESS_MAP_START( fcrash_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||||
|
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
||||||
|
AM_RANGE(0x800030, 0x800031) AM_WRITE(cps1_coinctrl_w)
|
||||||
|
AM_RANGE(0x800100, 0x80013f) AM_RAM AM_BASE(&cps1_cps_a_regs) /* CPS-A custom */
|
||||||
|
AM_RANGE(0x800140, 0x80017f) AM_RAM AM_BASE(&cps1_cps_b_regs) /* CPS-B custom */
|
||||||
AM_RANGE(0x880000, 0x880001) AM_READ(cps1_in1_r) /* Player input ports */
|
AM_RANGE(0x880000, 0x880001) AM_READ(cps1_in1_r) /* Player input ports */
|
||||||
AM_RANGE(0x880008, 0x88000f) AM_READ(cps1_input_r) /* System input ports / Dip Switches */
|
AM_RANGE(0x880006, 0x880007) AM_WRITE(fcrash_soundlatch_w) /* Sound command */
|
||||||
AM_RANGE(0x800100, 0x8001ff) AM_READ(cps1_output_r) /* Output ports */
|
AM_RANGE(0x880008, 0x88000f) AM_READ(cps1_dsw_r) /* System input ports / Dip Switches */
|
||||||
AM_RANGE(0x900000, 0x92ffff) AM_READ(SMH_RAM) /* SF2CE executes code from here */
|
AM_RANGE(0x890000, 0x890001) AM_WRITENOP // palette related?
|
||||||
AM_RANGE(0xf1c000, 0xf1c001) AM_READ(cps1_in2_r)
|
AM_RANGE(0x900000, 0x92ffff) AM_RAM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size)
|
||||||
AM_RANGE(0xf1c002, 0xf1c003) AM_READ(cps1_in3_r)
|
AM_RANGE(0xff0000, 0xffffff) AM_RAM
|
||||||
AM_RANGE(0xff0000, 0xffffff) AM_READ(SMH_RAM) /* RAM */
|
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( fcrash_writemem, ADDRESS_SPACE_PROGRAM, 16 )
|
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x000000, 0x1fffff) AM_WRITE(SMH_ROM) /* ROM */
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x800030, 0x800031) AM_WRITE(cps1_coinctrl_w)
|
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
|
||||||
AM_RANGE(0x800100, 0x8001ff) AM_WRITE(cps1_output_w) AM_BASE(&cps1_output) AM_SIZE(&cps1_output_size) /* Output ports */
|
AM_RANGE(0xd000, 0xd7ff) AM_RAM
|
||||||
AM_RANGE(0x900000, 0x92ffff) AM_WRITE(cps1_gfxram_w) AM_BASE(&cps1_gfxram) AM_SIZE(&cps1_gfxram_size)
|
AM_RANGE(0xd800, 0xd800) AM_READWRITE(YM2203_status_port_0_r, YM2203_control_port_0_w)
|
||||||
AM_RANGE(0xff0000, 0xffffff) AM_WRITE(SMH_RAM) /* RAM */
|
AM_RANGE(0xd801, 0xd801) AM_READWRITE(YM2203_read_port_0_r, YM2203_write_port_0_w)
|
||||||
|
AM_RANGE(0xdc00, 0xdc00) AM_READWRITE(YM2203_status_port_0_r, YM2203_control_port_0_w)
|
||||||
|
AM_RANGE(0xdc01, 0xdc01) AM_READWRITE(YM2203_read_port_0_r, YM2203_write_port_0_w)
|
||||||
|
AM_RANGE(0xe000, 0xe000) AM_WRITE(fcrash_snd_bankswitch_w)
|
||||||
|
AM_RANGE(0xe400, 0xe400) AM_READ(soundlatch_r)
|
||||||
|
AM_RANGE(0xe800, 0xe800) AM_WRITE(fcrash_msm5205_0_data_w)
|
||||||
|
AM_RANGE(0xec00, 0xec00) AM_WRITE(fcrash_msm5205_1_data_w)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
@ -340,16 +404,29 @@ static INPUT_PORTS_START( fcrash )
|
|||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static const struct MSM5205interface msm5205_interface1 =
|
||||||
|
{
|
||||||
|
m5205_int1, /* interrupt function */
|
||||||
|
MSM5205_S96_4B /* 4KHz 4-bit */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct MSM5205interface msm5205_interface2 =
|
||||||
|
{
|
||||||
|
m5205_int2, /* interrupt function */
|
||||||
|
MSM5205_S96_4B /* 4KHz 4-bit */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( fcrash )
|
static MACHINE_DRIVER_START( fcrash )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD_TAG("main", M68000, 10000000)
|
MDRV_CPU_ADD_TAG("main", M68000, 10000000)
|
||||||
MDRV_CPU_PROGRAM_MAP(fcrash_readmem,fcrash_writemem)
|
MDRV_CPU_PROGRAM_MAP(fcrash_map,0)
|
||||||
MDRV_CPU_VBLANK_INT("main", cps1_interrupt)
|
MDRV_CPU_VBLANK_INT("main", cps1_interrupt)
|
||||||
|
|
||||||
// MDRV_CPU_ADD_TAG("sound", Z80, 4000000) /* ???? */
|
MDRV_CPU_ADD_TAG("sound", Z80, 24000000/6) /* ? */
|
||||||
// /* audio CPU */
|
MDRV_CPU_PROGRAM_MAP(sound_map,0)
|
||||||
// MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem)
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("main", RASTER)
|
MDRV_SCREEN_ADD("main", RASTER)
|
||||||
@ -365,6 +442,29 @@ static MACHINE_DRIVER_START( fcrash )
|
|||||||
MDRV_VIDEO_START(cps1)
|
MDRV_VIDEO_START(cps1)
|
||||||
MDRV_VIDEO_EOF(cps1)
|
MDRV_VIDEO_EOF(cps1)
|
||||||
MDRV_VIDEO_UPDATE(fcrash)
|
MDRV_VIDEO_UPDATE(fcrash)
|
||||||
|
|
||||||
|
// sound hardware
|
||||||
|
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD(YM2203, 24000000/6) /* ? */
|
||||||
|
MDRV_SOUND_ROUTE(0, "mono", 0.10)
|
||||||
|
MDRV_SOUND_ROUTE(1, "mono", 0.10)
|
||||||
|
MDRV_SOUND_ROUTE(2, "mono", 0.10)
|
||||||
|
MDRV_SOUND_ROUTE(3, "mono", 1.0)
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD(YM2203, 24000000/6) /* ? */
|
||||||
|
MDRV_SOUND_ROUTE(0, "mono", 0.10)
|
||||||
|
MDRV_SOUND_ROUTE(1, "mono", 0.10)
|
||||||
|
MDRV_SOUND_ROUTE(2, "mono", 0.10)
|
||||||
|
MDRV_SOUND_ROUTE(3, "mono", 1.0)
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD(MSM5205, 24000000/64) /* ? */
|
||||||
|
MDRV_SOUND_CONFIG(msm5205_interface1)
|
||||||
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD(MSM5205, 24000000/64) /* ? */
|
||||||
|
MDRV_SOUND_CONFIG(msm5205_interface2)
|
||||||
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
@ -405,4 +505,4 @@ ROM_START( fcrash )
|
|||||||
ROM_RELOAD( 0x10000, 0x20000 )
|
ROM_RELOAD( 0x10000, 0x20000 )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
GAME( 1990, fcrash, ffight, fcrash, fcrash, cps1, ROT0, "Playmark, bootleg [Capcom]", "Final Crash (World, bootleg)",GAME_NO_SOUND )
|
GAME( 1990, fcrash, ffight, fcrash, fcrash, cps1, ROT0, "Playmark, bootleg [Capcom]", "Final Crash (World, bootleg)", 0 )
|
||||||
|
@ -15,7 +15,7 @@ INTERRUPT_GEN( cps1_qsound_interrupt );
|
|||||||
|
|
||||||
extern const struct QSound_interface qsound_interface;
|
extern const struct QSound_interface qsound_interface;
|
||||||
|
|
||||||
READ16_HANDLER( cps1_input_r );
|
READ16_HANDLER( cps1_dsw_r );
|
||||||
READ16_HANDLER( cps1_in1_r );
|
READ16_HANDLER( cps1_in1_r );
|
||||||
READ16_HANDLER( cps1_in2_r );
|
READ16_HANDLER( cps1_in2_r );
|
||||||
READ16_HANDLER( cps1_in3_r );
|
READ16_HANDLER( cps1_in3_r );
|
||||||
@ -45,9 +45,9 @@ extern int cps1_scanline2;
|
|||||||
extern int cps1_scancalls;
|
extern int cps1_scancalls;
|
||||||
|
|
||||||
extern UINT16 *cps1_gfxram; /* Video RAM */
|
extern UINT16 *cps1_gfxram; /* Video RAM */
|
||||||
extern UINT16 *cps1_output; /* Output ports */
|
extern UINT16 *cps1_cps_a_regs;
|
||||||
|
extern UINT16 *cps1_cps_b_regs;
|
||||||
extern size_t cps1_gfxram_size;
|
extern size_t cps1_gfxram_size;
|
||||||
extern size_t cps1_output_size;
|
|
||||||
|
|
||||||
extern UINT16 *cps1_other;
|
extern UINT16 *cps1_other;
|
||||||
extern tilemap *cps1_bg_tilemap[3];
|
extern tilemap *cps1_bg_tilemap[3];
|
||||||
@ -60,9 +60,9 @@ extern UINT16 *cps2_objram1,*cps2_objram2;
|
|||||||
extern UINT16 *cps2_output;
|
extern UINT16 *cps2_output;
|
||||||
extern size_t cps2_output_size;
|
extern size_t cps2_output_size;
|
||||||
|
|
||||||
int cps1_port(int offset);
|
WRITE16_HANDLER( cps1_cps_a_w );
|
||||||
READ16_HANDLER( cps1_output_r );
|
WRITE16_HANDLER( cps1_cps_b_w );
|
||||||
WRITE16_HANDLER( cps1_output_w );
|
READ16_HANDLER( cps1_cps_b_r );
|
||||||
|
|
||||||
DRIVER_INIT( cps1 );
|
DRIVER_INIT( cps1 );
|
||||||
DRIVER_INIT( cps2_video );
|
DRIVER_INIT( cps2_video );
|
||||||
|
@ -25,17 +25,19 @@ Forgotten Worlds / Lost Worlds 1988 88618B-2 LWCHR LWI
|
|||||||
Ghouls 'n Ghosts (World / US) 1988 88620B-2 DM620 LWIO None CPS-B-01 DL-0411-10001 None
|
Ghouls 'n Ghosts (World / US) 1988 88620B-2 DM620 LWIO None CPS-B-01 DL-0411-10001 None
|
||||||
(alt B-board revision - Japan) 88622B-2 DM22A LWIO 88622-C-1 CPS-B-01 DL-0411-10001 None
|
(alt B-board revision - Japan) 88622B-2 DM22A LWIO 88622-C-1 CPS-B-01 DL-0411-10001 None
|
||||||
Strider 1989 89624B-2 ST24M1 LWIO 88622-C-1 CPS-B-01 DL-0411-10001 None
|
Strider 1989 89624B-2 ST24M1 LWIO 88622-C-1 CPS-B-01 DL-0411-10001 None
|
||||||
(alt B-board revision) 89624B-3 ST24B2 LWIO
|
(alt B-board revision) 89624B-2 ST24M2 LWIO 88622-C-2 CPS-B-01 DL-0411-10001 None
|
||||||
|
(alt B-board revision) 89624B-3 ST24B2 LWIO 88622-C-2 CPS-B-01 DL-0411-10001 None
|
||||||
(alt B-board revision) ? ST22B ?
|
(alt B-board revision) ? ST22B ?
|
||||||
Dynasty Wars 1989 88622B-3 TK22B IOB1 88622-C-2 CPS-B-02 DL-0411-10002
|
Dynasty Wars 1989 88624B-3 TK24B? ? 88622-C-2 CPS-B-02 DL-0411-10002
|
||||||
|
(alt B-board revision - Japan) 88622B-3 TK22B IOB1
|
||||||
Willow 1989 89624B-3 WL24B LWIO 88622-C-4 CPS-B-03 DL-0411-10003 None
|
Willow 1989 89624B-3 WL24B LWIO 88622-C-4 CPS-B-03 DL-0411-10003 None
|
||||||
(alt C-board revision) 88622-C-2
|
(alt C-board revision) 88622-C-2
|
||||||
UN Squadron / Area 88 1989 89624B-3 AR24B LWIO 88622-C-4 CPS-B-11 DL-0411-10004 None
|
UN Squadron / Area 88 1989 89624B-3 AR24B LWIO 88622-C-4 CPS-B-11 DL-0411-10004 None
|
||||||
(alt B-board revision - Japan) 88622B-2 AR22B LWIO
|
(alt B-board revision - Japan) 88622B-2 AR22B LWIO
|
||||||
Final Fight (first rev) 1989 89624B-3 S224B IOB1 88622-C-5 CPS-B-04 DL-0411-10005 None
|
Final Fight (first rev) 1989 89624B-3 S224B IOB1 88622-C-5 CPS-B-04 DL-0411-10005 None
|
||||||
Final Fight (US 900112) ? CPS-B-04@ DL-0411-10001 None
|
Final Fight (US 900112) ? CPS-B-04@ DL-0411-10001 None
|
||||||
Final Fight (US 900613) ? CPS-B-05 DL-0411-10006
|
Final Fight (US 900613) 88622-C-5 CPS-B-05 DL-0411-10006
|
||||||
Final Fight (Japan 900305) (alt B-board revision) ? ? ? CPS-B-02 DL-0411-10002
|
Final Fight (Japan 900305) (alt B-board revision) 88622B-2 S222B? LWIO 88622-C-5 CPS-B-02 DL-0411-10002
|
||||||
1941 1990 ? YI24B ? 88622-C-5 CPS-B-05 DL-0411-10006 ?
|
1941 1990 ? YI24B ? 88622-C-5 CPS-B-05 DL-0411-10006 ?
|
||||||
Mercs 1990 89624B-3 0224B IOB1 90628-C-1 CPS-B-12 DL-0411-10007 C628
|
Mercs 1990 89624B-3 0224B IOB1 90628-C-1 CPS-B-12 DL-0411-10007 C628
|
||||||
(alt C-board revision) 90628-C-2
|
(alt C-board revision) 90628-C-2
|
||||||
@ -44,9 +46,9 @@ Chiki Chiki Boys / Mega Twins 1990 89624B-3 CK24B IOB
|
|||||||
Nemo 1990 89624B-3 NM24B IOB1 88622-C-5 CPS-B-15 DL-0411-10010 None
|
Nemo 1990 89624B-3 NM24B IOB1 88622-C-5 CPS-B-15 DL-0411-10010 None
|
||||||
Carrier Air Wing / U.S. Navy 1990 89624B-3 CA24B IOB1 88622-C-5 CPS-B-16 DL-0411-10011 None
|
Carrier Air Wing / U.S. Navy 1990 89624B-3 CA24B IOB1 88622-C-5 CPS-B-16 DL-0411-10011 None
|
||||||
(alt B-board revision - Japan) 89625B-1 CA22B
|
(alt B-board revision - Japan) 89625B-1 CA22B
|
||||||
Street Fighter II (910214) 1991 89622B-3 STF29 IOB1 90632C-1 CPS-B-17 DL-0411-10012 C632
|
Street Fighter II (910214) 1991 90629B-2 STF29 IOB1 90632C-1 CPS-B-17 DL-0411-10012 C632
|
||||||
Street Fighter II (US 910206) CPS-B-17 DL-0411-10012
|
Street Fighter II (US 910206) CPS-B-17 DL-0411-10012
|
||||||
Street Fighter II (US 910228) ? CPS-B-18 ?
|
Street Fighter II (US 910228) CPS-B-18 DL-0411-10013 C632B
|
||||||
Street Fighter II (Japan 910306) CPS-B-12 DL-0411-10007
|
Street Fighter II (Japan 910306) CPS-B-12 DL-0411-10007
|
||||||
Street Fighter II (US 910318) CPS-B-05 DL-0411-10006
|
Street Fighter II (US 910318) CPS-B-05 DL-0411-10006
|
||||||
Street Fighter II (US 910411) CPS-B-15 DL-0411-10010
|
Street Fighter II (US 910411) CPS-B-15 DL-0411-10010
|
||||||
@ -56,6 +58,7 @@ Street Fighter II (US 911101)
|
|||||||
Street Fighter II (Japan 911210) CPS-B-13 DL-0411-10008
|
Street Fighter II (Japan 911210) CPS-B-13 DL-0411-10008
|
||||||
Three Wonders* 1991 89624B-3 RT24B IOB1 90630C-4 CPS-B-21 DL-0921-10014 IOC1
|
Three Wonders* 1991 89624B-3 RT24B IOB1 90630C-4 CPS-B-21 DL-0921-10014 IOC1
|
||||||
(alt B-board revision - Japan) 89625B-1 RT22B IOB1
|
(alt B-board revision - Japan) 89625B-1 RT22B IOB1
|
||||||
|
(alt B-board revision) 91634B-2 ? ?
|
||||||
King of Dragons* 1991 90629B-3 KD29B IOB1 90631C-5 CPS-B-21 DL-0921-10014 C632 IOC1
|
King of Dragons* 1991 90629B-3 KD29B IOB1 90631C-5 CPS-B-21 DL-0921-10014 C632 IOC1
|
||||||
Captain Commando* 1991 91635B-2 CC63B CCPRG IOB1 90631C-5 CPS-B-21 DL-0921-10014 C632 IOC1
|
Captain Commando* 1991 91635B-2 CC63B CCPRG IOB1 90631C-5 CPS-B-21 DL-0921-10014 C632 IOC1
|
||||||
Knights of the Round* 1991 91635B-2 KR63B BPRG1 IOB1 90631C-5 CPS-B-21 DL-0921-10014 C632 IOC1
|
Knights of the Round* 1991 91635B-2 KR63B BPRG1 IOB1 90631C-5 CPS-B-21 DL-0921-10014 C632 IOC1
|
||||||
@ -87,7 +90,8 @@ values as Street Fighter 2 CE/Turbo.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
OUTPUT PORTS
|
CPS-A Registers
|
||||||
|
---------------
|
||||||
0x00-0x01 OBJ RAM base (/256)
|
0x00-0x01 OBJ RAM base (/256)
|
||||||
0x02-0x03 Scroll1 (8x8) RAM base (/256)
|
0x02-0x03 Scroll1 (8x8) RAM base (/256)
|
||||||
0x04-0x05 Scroll2 (16x16) RAM base (/256)
|
0x04-0x05 Scroll2 (16x16) RAM base (/256)
|
||||||
@ -125,7 +129,7 @@ OUTPUT PORTS
|
|||||||
Mega Twins (underwater, cave)
|
Mega Twins (underwater, cave)
|
||||||
Carrier Air Wing (hazy background at beginning of mission 8, put 07 at ff8501 to jump there)
|
Carrier Air Wing (hazy background at beginning of mission 8, put 07 at ff8501 to jump there)
|
||||||
Magic Sword (fire on floor 3; screen distort after continue)
|
Magic Sword (fire on floor 3; screen distort after continue)
|
||||||
Varth (title screen)
|
Varth (title screen, end of stage 4)
|
||||||
Captain Commando (end game sequence)
|
Captain Commando (end game sequence)
|
||||||
|
|
||||||
Tests done on msword at the beginning of gameplay (many thanks to Corrado Tomaselli for these):
|
Tests done on msword at the beginning of gameplay (many thanks to Corrado Tomaselli for these):
|
||||||
@ -141,10 +145,14 @@ OUTPUT PORTS
|
|||||||
TODO:
|
TODO:
|
||||||
the scroll2/scroll3 disable bits are supported by the emulation,
|
the scroll2/scroll3 disable bits are supported by the emulation,
|
||||||
while the scroll1 weird effect is not (it doesn't seem to make a
|
while the scroll1 weird effect is not (it doesn't seem to make a
|
||||||
difference on any game).
|
difference in any game).
|
||||||
|
|
||||||
|
|
||||||
Some registers move from game to game.. following example strider
|
CPS-B Registers
|
||||||
|
---------------
|
||||||
|
Unlike CPS-A registers, which are at fixed addresses, CPS-B registers move from game to game.
|
||||||
|
Following example strider
|
||||||
|
|
||||||
0x66-0x67 Layer control register
|
0x66-0x67 Layer control register
|
||||||
bits 14-15 seem to be unused
|
bits 14-15 seem to be unused
|
||||||
ghouls sets bits 15 in service mode when you press button 2 in
|
ghouls sets bits 15 in service mode when you press button 2 in
|
||||||
@ -197,10 +205,6 @@ Some registers move from game to game.. following example strider
|
|||||||
bits 0-3 have been verified on a msword pcb, while bits 4-5 are only
|
bits 0-3 have been verified on a msword pcb, while bits 4-5 are only
|
||||||
supposed.
|
supposed.
|
||||||
|
|
||||||
Fixed registers
|
|
||||||
0x80-0x81 Sound command
|
|
||||||
0x88-0x89 Sound fade
|
|
||||||
|
|
||||||
|
|
||||||
A special note has to be made about tile/sprite codes. Even if all graphics are
|
A special note has to be made about tile/sprite codes. Even if all graphics are
|
||||||
stored together in the same ROMs, the hardware knows which part of the ROM space
|
stored together in the same ROMs, the hardware knows which part of the ROM space
|
||||||
@ -269,27 +273,22 @@ CPS2:
|
|||||||
IRQ4 is some sort of scanline interrupt used for that purpose.
|
IRQ4 is some sort of scanline interrupt used for that purpose.
|
||||||
|
|
||||||
* Its unknown what CPS2_OBJ_BASE register (0x400000) does but it is not a object base
|
* Its unknown what CPS2_OBJ_BASE register (0x400000) does but it is not a object base
|
||||||
register. All games use 0x7000 even if 0x7080 is used at this register (checked on
|
register. The base is 0x7000 for all games even if 0x7080 is written to this register
|
||||||
real HW). Maybe it sets the object bank used when cps2_objram_bank is set.
|
(checked on real HW). Maybe it sets the object bank used when cps2_objram_bank is set.
|
||||||
|
|
||||||
* Sprites are currently lagged by one frame to keep sync with backgrounds. This causes
|
* Sprites are currently lagged by one frame to keep sync with backgrounds. This causes
|
||||||
sprites to stay on screen one frame longer (visable in VSAV attract mode).
|
sprites to stay on screen one frame longer (visible in VSAV attract mode).
|
||||||
|
|
||||||
Marvel Vs. Capcom
|
Marvel Vs. Capcom
|
||||||
* Sometimes currupt gfx are displayed on the 32x32 layer as the screen flashes at the
|
* Sometimes corrupt gfx are displayed on the 32x32 layer as the screen flashes at the
|
||||||
start of super combo moves. The problem seems to be due to tiles being fetched before
|
start of super combo moves. The problem seems to be due to tiles being fetched before
|
||||||
the first 32x32 tile offset and results in data coming from 16x16 or 8x8 tiles instead.
|
the first 32x32 tile offset and results in data coming from 16x16 or 8x8 tiles instead.
|
||||||
|
|
||||||
CPS1:
|
CPS1:
|
||||||
SF2
|
SF2
|
||||||
* Missing chain in the foreground in Ken's level, and sign in Chun Li's level.
|
* Missing chain in the foreground in Ken's level, and sign in Chun Li's level.
|
||||||
Those graphics are in the backmost layer.
|
Those graphics are in the backmost layer. Probably they are leftover from game
|
||||||
|
development and aren't supposed to be visible.
|
||||||
King of Dragons (World).
|
|
||||||
* Distortion effect missing on character description screen during attract
|
|
||||||
mode. The game rapidly toggles on and off the layer enable bit.
|
|
||||||
I think this IS the correct behaviour. The Japanese version does the
|
|
||||||
distortion as expected.
|
|
||||||
|
|
||||||
3wonders
|
3wonders
|
||||||
* writes to output ports 42, 44, 46.
|
* writes to output ports 42, 44, 46.
|
||||||
@ -302,7 +301,7 @@ Unknown issues
|
|||||||
==============
|
==============
|
||||||
|
|
||||||
There are often some redundant high bits in the scroll layer's attributes.
|
There are often some redundant high bits in the scroll layer's attributes.
|
||||||
I think that these are spare bits that the game uses for to store additional
|
I think that these are spare bits that the game uses to store additional
|
||||||
information, not used by the hardware.
|
information, not used by the hardware.
|
||||||
The games seem to use them to mark platforms, kill zones and no-go areas.
|
The games seem to use them to mark platforms, kill zones and no-go areas.
|
||||||
|
|
||||||
@ -358,26 +357,27 @@ struct CPS1config
|
|||||||
int mult_result_lo;
|
int mult_result_lo;
|
||||||
int mult_result_hi;
|
int mult_result_hi;
|
||||||
|
|
||||||
|
/* unknown registers which might be related to the multiply protection */
|
||||||
|
int unknown1;
|
||||||
|
int unknown2;
|
||||||
|
int unknown3;
|
||||||
|
|
||||||
int layer_control;
|
int layer_control;
|
||||||
int priority[4];
|
int priority[4];
|
||||||
int palette_control; /* Control register? seems to be always 0x3f */
|
int palette_control;
|
||||||
|
|
||||||
/* ideally, the layer enable masks should consist of only one bit, */
|
/* ideally, the layer enable masks should consist of only one bit, */
|
||||||
/* but in many cases it is unknown which bit is which. */
|
/* but in many cases it is unknown which bit is which. */
|
||||||
int layer_enable_mask[5];
|
int layer_enable_mask[5];
|
||||||
|
|
||||||
|
/* these depend on the B-board model and PAL */
|
||||||
int bank_sizes[4];
|
int bank_sizes[4];
|
||||||
const struct gfx_range *bank_mapper;
|
const struct gfx_range *bank_mapper;
|
||||||
|
|
||||||
int bank_scroll1;
|
/* some C-boards have additional I/O for extra buttons/extra players */
|
||||||
int bank_scroll2;
|
int in2_addr;
|
||||||
int bank_scroll3;
|
int in3_addr;
|
||||||
|
int out2_addr;
|
||||||
/* Some characters aren't visible */
|
|
||||||
const int start_scroll2;
|
|
||||||
const int end_scroll2;
|
|
||||||
const int start_scroll3;
|
|
||||||
const int end_scroll3;
|
|
||||||
|
|
||||||
int bootleg_kludge;
|
int bootleg_kludge;
|
||||||
};
|
};
|
||||||
@ -385,35 +385,42 @@ struct CPS1config
|
|||||||
static const struct CPS1config *cps1_game_config;
|
static const struct CPS1config *cps1_game_config;
|
||||||
|
|
||||||
|
|
||||||
/* CPSB ID multiply protection ctrl priority masks palctrl layer enable masks */
|
#define __not_applicable__ -1,-1,-1,-1,-1,-1,-1
|
||||||
#define CPS_B_01 0x00,0x0000, 0,0,0,0, /* n/a */ 0x66,{0x68,0x6a,0x6c,0x6e},0x70, {0x02,0x04,0x08,0x30,0x30}
|
|
||||||
#define CPS_B_02 0x60,0x0002, 0,0,0,0, /* n/a */ 0x6c,{0x6a,0x68,0x66,0x64},0x62, {0x02,0x04,0x08,0x00,0x00}
|
|
||||||
#define CPS_B_03 0x00,0x0000, 0,0,0,0, /* n/a */ 0x70,{0x6e,0x6c,0x6a,0x68},0x66, {0x20,0x10,0x08,0x00,0x00}
|
|
||||||
#define CPS_B_04 0x60,0x0004, 0,0,0,0, /* n/a */ 0x6e,{0x66,0x70,0x68,0x72},0x6a, {0x02,0x0c,0x0c,0x00,0x00}
|
|
||||||
#define CPS_B_05 0x60,0x0005, 0,0,0,0, /* n/a */ 0x68,{0x6a,0x6c,0x6e,0x70},0x72, {0x02,0x08,0x20,0x14,0x14}
|
|
||||||
#define CPS_B_11 0x72,0x0401, 0,0,0,0, /* n/a */ 0x66,{0x68,0x6a,0x6c,0x6e},0x70, {0x08,0x10,0x20,0x00,0x00}
|
|
||||||
#define CPS_B_12 0x60,0x0402, 0,0,0,0, /* n/a */ 0x6c,{0x6a,0x68,0x66,0x64},0x62, {0x02,0x04,0x08,0x00,0x00}
|
|
||||||
#define CPS_B_13 0x6e,0x0403, 0,0,0,0, /* n/a */ 0x62,{0x64,0x66,0x68,0x6a},0x6c, {0x20,0x02,0x04,0x00,0x00}
|
|
||||||
#define CPS_B_14 0x5e,0x0404, 0,0,0,0, /* n/a */ 0x52,{0x54,0x56,0x58,0x5a},0x5c, {0x08,0x20,0x10,0x00,0x00}
|
|
||||||
#define CPS_B_15 0x4e,0x0405, 0,0,0,0, /* n/a */ 0x42,{0x44,0x46,0x48,0x4a},0x4c, {0x04,0x02,0x20,0x00,0x00}
|
|
||||||
#define CPS_B_16 0x40,0x0406, 0,0,0,0, /* n/a */ 0x4c,{0x4a,0x48,0x46,0x44},0x42, {0x10,0x0a,0x0a,0x00,0x00}
|
|
||||||
#define CPS_B_17 0x48,0x0407, 0,0,0,0, /* n/a */ 0x54,{0x52,0x50,0x4e,0x4c},0x4a, {0x08,0x10,0x02,0x00,0x00}
|
|
||||||
#define CPS_B_18 0xd0,0x0408, 0,0,0,0, /* n/a */ 0xdc,{0xda,0xd8,0xd6,0xd4},0xd2, {0x10,0x08,0x02,0x00,0x00}
|
|
||||||
#define NOBATTRY 0x00,0x0000, 0x40,0x42,0x44,0x46, 0x66,{0x68,0x6a,0x6c,0x6e},0x70, {0x02,0x04,0x08,0x30,0x30} // pang3 sets layer enable to 0x26 on startup
|
|
||||||
#define BATTRY_1 0x72,0x0800, 0x4e,0x4c,0x4a,0x48, 0x68,{0x66,0x64,0x62,0x60},0x70, {0x20,0x04,0x08,0x12,0x12}
|
|
||||||
#define BATTRY_2 0x00,0x0000, 0x5e,0x5c,0x5a,0x58, 0x60,{0x6e,0x6c,0x6a,0x68},0x70, {0x30,0x08,0x30,0x00,0x00}
|
|
||||||
#define BATTRY_3 0x00,0x0000, 0x46,0x44,0x42,0x40, 0x60,{0x6e,0x6c,0x6a,0x68},0x70, {0x20,0x12,0x12,0x00,0x00}
|
|
||||||
#define BATTRY_4 0x00,0x0000, 0x46,0x44,0x42,0x40, 0x68,{0x66,0x64,0x62,0x60},0x70, {0x20,0x10,0x02,0x00,0x00}
|
|
||||||
#define BATTRY_5 0x00,0x0000, 0x4e,0x4c,0x4a,0x48, 0x60,{0x6e,0x6c,0x6a,0x68},0x70, {0x20,0x06,0x06,0x00,0x00}
|
|
||||||
#define BATTRY_6 0x00,0x0000, 0x00,0x00,0x00,0x00, 0x60,{0x6e,0x6c,0x6a,0x68},0x70, {0x20,0x14,0x14,0x00,0x00}
|
|
||||||
#define BATTRY_7 0x00,0x0000, 0x00,0x00,0x00,0x00, 0x6c,{0x00,0x00,0x00,0x00},0x52, {0x14,0x02,0x14,0x00,0x00}
|
|
||||||
#define QSOUND_1 0x00,0x0000, 0x00,0x00,0x00,0x00, 0x62,{0x64,0x66,0x68,0x6a},0x6c, {0x10,0x08,0x04,0x00,0x00}
|
|
||||||
#define QSOUND_2 0x00,0x0000, 0x00,0x00,0x00,0x00, 0x4a,{0x4c,0x4e,0x40,0x42},0x44, {0x16,0x16,0x16,0x00,0x00}
|
|
||||||
#define QSOUND_3 0x4e,0x0c00, 0x00,0x00,0x00,0x00, 0x52,{0x54,0x56,0x48,0x4a},0x4c, {0x04,0x02,0x20,0x00,0x00}
|
|
||||||
#define QSOUND_4 0x6e,0x0c01, 0x00,0x00,0x00,0x00, 0x56,{0x40,0x42,0x68,0x6a},0x6c, {0x04,0x08,0x10,0x00,0x00}
|
|
||||||
#define QSOUND_5 0x5e,0x0c02, 0x00,0x00,0x00,0x00, 0x6a,{0x6c,0x6e,0x70,0x72},0x5c, {0x04,0x08,0x10,0x00,0x00}
|
|
||||||
#define HACK_B_1 0x00,0x0000, 0x00,0x00,0x00,0x00, 0x54,{0x52,0x50,0x4e,0x4c},0x5c, {0xff,0xff,0xff,0x00,0x00}
|
|
||||||
|
|
||||||
|
/* CPSB ID multiply protection unknown ctrl priority masks palctrl layer enable masks */
|
||||||
|
#define CPS_B_01 -1, 0x0000, __not_applicable__, 0x26,{0x28,0x2a,0x2c,0x2e},0x30, {0x02,0x04,0x08,0x30,0x30}
|
||||||
|
#define CPS_B_02 0x20,0x0002, __not_applicable__, 0x2c,{0x2a,0x28,0x26,0x24},0x22, {0x02,0x04,0x08,0x00,0x00}
|
||||||
|
#define CPS_B_03 -1, 0x0000, __not_applicable__, 0x30,{0x2e,0x2c,0x2a,0x28},0x26, {0x20,0x10,0x08,0x00,0x00}
|
||||||
|
#define CPS_B_04 0x20,0x0004, __not_applicable__, 0x2e,{0x26,0x30,0x28,0x32},0x2a, {0x02,0x04,0x08,0x00,0x00}
|
||||||
|
#define CPS_B_05 0x20,0x0005, __not_applicable__, 0x28,{0x2a,0x2c,0x2e,0x30},0x32, {0x02,0x08,0x20,0x14,0x14}
|
||||||
|
#define CPS_B_11 0x32,0x0401, __not_applicable__, 0x26,{0x28,0x2a,0x2c,0x2e},0x30, {0x08,0x10,0x20,0x00,0x00}
|
||||||
|
#define CPS_B_12 0x20,0x0402, __not_applicable__, 0x2c,{0x2a,0x28,0x26,0x24},0x22, {0x02,0x04,0x08,0x00,0x00}
|
||||||
|
#define CPS_B_13 0x2e,0x0403, __not_applicable__, 0x22,{0x24,0x26,0x28,0x2a},0x2c, {0x20,0x02,0x04,0x00,0x00}
|
||||||
|
#define CPS_B_14 0x1e,0x0404, __not_applicable__, 0x12,{0x14,0x16,0x18,0x1a},0x1c, {0x08,0x20,0x10,0x00,0x00}
|
||||||
|
#define CPS_B_15 0x0e,0x0405, __not_applicable__, 0x02,{0x04,0x06,0x08,0x0a},0x0c, {0x04,0x02,0x20,0x00,0x00}
|
||||||
|
#define CPS_B_16 0x00,0x0406, __not_applicable__, 0x0c,{0x0a,0x08,0x06,0x04},0x02, {0x10,0x0a,0x0a,0x00,0x00}
|
||||||
|
#define CPS_B_17 0x08,0x0407, __not_applicable__, 0x14,{0x12,0x10,0x0e,0x0c},0x0a, {0x08,0x10,0x02,0x00,0x00}
|
||||||
|
#define CPS_B_18 0x10,0x0408, __not_applicable__, 0x1c,{0x1a,0x18,0x16,0x14},0x12, {0x10,0x08,0x02,0x00,0x00}
|
||||||
|
#define CPS_B_21_DEF 0x32, -1, 0x00,0x02,0x04,0x06, 0x08, -1, -1, 0x26,{0x28,0x2a,0x2c,0x2e},0x30, {0x02,0x04,0x08,0x30,0x30} // pang3 sets layer enable to 0x26 on startup
|
||||||
|
#define CPS_B_21_BT1 0x32,0x0800, 0x0e,0x0c,0x0a,0x08, 0x06,0x04,0x02, 0x28,{0x26,0x24,0x22,0x20},0x30, {0x20,0x04,0x08,0x12,0x12}
|
||||||
|
#define CPS_B_21_BT2 -1, -1, 0x1e,0x1c,0x1a,0x18, -1, 0x0c,0x0a, 0x20,{0x2e,0x2c,0x2a,0x28},0x30, {0x30,0x08,0x30,0x00,0x00}
|
||||||
|
#define CPS_B_21_BT3 -1, -1, 0x06,0x04,0x02,0x00, 0x0e,0x0c,0x0a, 0x20,{0x2e,0x2c,0x2a,0x28},0x30, {0x20,0x12,0x12,0x00,0x00}
|
||||||
|
#define CPS_B_21_BT4 -1, -1, 0x06,0x04,0x02,0x00, 0x1e,0x1c,0x0a, 0x28,{0x26,0x24,0x22,0x20},0x30, {0x20,0x10,0x02,0x00,0x00}
|
||||||
|
#define CPS_B_21_BT5 0x32, -1, 0x0e,0x0c,0x0a,0x08, 0x1e,0x1c,0x1a, 0x20,{0x2e,0x2c,0x2a,0x28},0x30, {0x20,0x04,0x02,0x00,0x00}
|
||||||
|
#define CPS_B_21_BT6 -1, -1, -1, -1, -1, -1, -1, -1, -1, 0x20,{0x2e,0x2c,0x2a,0x28},0x30, {0x20,0x14,0x14,0x00,0x00}
|
||||||
|
#define CPS_B_21_BT7 -1, -1, -1, -1, -1, -1, -1, -1, -1, 0x2c,{ -1, -1, -1, -1 },0x12, {0x14,0x02,0x14,0x00,0x00}
|
||||||
|
#define CPS_B_21_QS1 -1, -1, -1, -1, -1, -1, -1, -1, -1, 0x22,{0x24,0x26,0x28,0x2a},0x2c, {0x10,0x08,0x04,0x00,0x00}
|
||||||
|
#define CPS_B_21_QS2 -1, -1, -1, -1, -1, -1, -1, 0x2e,0x20, 0x0a,{0x0c,0x0e,0x00,0x02},0x04, {0x16,0x16,0x16,0x00,0x00}
|
||||||
|
#define CPS_B_21_QS3 0x0e,0x0c00, -1, -1, -1, -1, 0x2c, -1, -1, 0x12,{0x14,0x16,0x08,0x0a},0x0c, {0x04,0x02,0x20,0x00,0x00}
|
||||||
|
#define CPS_B_21_QS4 0x2e,0x0c01, -1, -1, -1, -1, 0x1c,0x1e,0x08, 0x16,{0x00,0x02,0x28,0x2a},0x2c, {0x04,0x08,0x10,0x00,0x00}
|
||||||
|
#define CPS_B_21_QS5 0x1e,0x0c02, -1, -1, -1, -1, 0x0c, -1, -1, 0x2a,{0x2c,0x2e,0x30,0x32},0x1c, {0x04,0x08,0x10,0x00,0x00}
|
||||||
|
#define HACK_B_1 -1, -1, -1, -1, -1, -1, -1, -1, -1, 0x14,{0x12,0x10,0x0e,0x0c},0x1c, {0xff,0xff,0xff,0x00,0x00}
|
||||||
|
|
||||||
|
/*
|
||||||
|
CPS_B_21_DEF is CPS-B-21 at default settings (no battery)
|
||||||
|
CPS_B_21_BTx are various battery configurations
|
||||||
|
CPS_B_21_QSx are various battery configurations in Q-Sound games
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define mapper_LWCHR { 0x8000, 0x8000, 0, 0 }, mapper_LWCHR_table
|
#define mapper_LWCHR { 0x8000, 0x8000, 0, 0 }, mapper_LWCHR_table
|
||||||
@ -482,15 +489,24 @@ static const struct gfx_range mapper_ST22B_table[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define mapper_TK22B { 0x8000, 0x8000, 0, 0 }, mapper_TK22B_table
|
#define mapper_TK22B { 0x4000, 0x4000, 0x4000, 0x4000 }, mapper_TK22B_table
|
||||||
static const struct gfx_range mapper_TK22B_table[] = // unknown PAL
|
static const struct gfx_range mapper_TK22B_table[] =
|
||||||
{
|
{
|
||||||
/* type start end bank */
|
// verified from PAL dump:
|
||||||
{ GFXTYPE_SPRITES, 0x0000, 0x5fff, 0 },
|
// bank 0 = pin 19 (ROMs 1,5, 9,13,17,24,32,38)
|
||||||
{ GFXTYPE_SCROLL1, 0x6000, 0x7fff, 0 },
|
// bank 1 = pin 16 (ROMs 2,6,10,14,18,25,33,39)
|
||||||
|
// bank 2 = pin 14 (ROMs 3,7,11,15,19,21,26,28)
|
||||||
|
// bank 3 = pin 12 (ROMS 4,8,12,16,20,22,27,29)
|
||||||
|
|
||||||
{ GFXTYPE_SCROLL3, 0x0000, 0x3fff, 1 }, // 8000-bfff physical
|
/* type start end bank */
|
||||||
{ GFXTYPE_SCROLL2, 0x4000, 0x7fff, 1 }, // c000-ffff physical
|
{ GFXTYPE_SPRITES, 0x0000, 0x3fff, 0 },
|
||||||
|
|
||||||
|
{ GFXTYPE_SPRITES, 0x4000, 0x5fff, 1 },
|
||||||
|
{ GFXTYPE_SCROLL1, 0x6000, 0x7fff, 1 },
|
||||||
|
|
||||||
|
{ GFXTYPE_SCROLL3, 0x0000, 0x3fff, 2 },
|
||||||
|
|
||||||
|
{ GFXTYPE_SCROLL2, 0x4000, 0x7fff, 3 },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -703,20 +719,50 @@ static const struct gfx_range mapper_CA24B_table[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define mapper_STF29 { 0x10000, 0x8000, 0, 0 }, mapper_STF29_table
|
#define mapper_STF29 { 0x8000, 0x8000, 0x8000, 0 }, mapper_STF29_table
|
||||||
static const struct gfx_range mapper_STF29_table[] =
|
static const struct gfx_range mapper_STF29_table[] =
|
||||||
{
|
{
|
||||||
/* type start end bank */
|
// verified from PAL dump:
|
||||||
{ GFXTYPE_SPRITES, 0x00000, 0x0ffff, 0 },
|
// bank 0 = pin 19 (ROMs 5,6,7,8)
|
||||||
|
// bank 1 = pin 14 (ROMs 14,15,16,17)
|
||||||
|
// bank 2 = pin 12 (ROMS 24,25,26,27)
|
||||||
|
|
||||||
{ GFXTYPE_SPRITES, 0x10000, 0x11fff, 1 },
|
/* type start end bank */
|
||||||
{ GFXTYPE_SCROLL3, 0x02000, 0x03fff, 1 }, // 12000-13fff physical
|
{ GFXTYPE_SPRITES, 0x00000, 0x07fff, 0 },
|
||||||
{ GFXTYPE_SCROLL1, 0x04000, 0x04fff, 1 }, // 14000-14fff physical
|
|
||||||
{ GFXTYPE_SCROLL2, 0x05000, 0x07fff, 1 }, // 15000-17fff physical
|
{ GFXTYPE_SPRITES, 0x08000, 0x0ffff, 1 },
|
||||||
|
|
||||||
|
{ GFXTYPE_SPRITES, 0x10000, 0x11fff, 2 },
|
||||||
|
{ GFXTYPE_SCROLL3, 0x02000, 0x03fff, 2 },
|
||||||
|
{ GFXTYPE_SCROLL1, 0x04000, 0x04fff, 2 },
|
||||||
|
{ GFXTYPE_SCROLL2, 0x05000, 0x07fff, 2 },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// RT24B and RT22B are equivalent, but since we could dump both PALs we are
|
||||||
|
// documenting both.
|
||||||
|
|
||||||
|
#define mapper_RT24B { 0x8000, 0x8000, 0, 0 }, mapper_RT24B_table
|
||||||
|
static const struct gfx_range mapper_RT24B_table[] =
|
||||||
|
{
|
||||||
|
// verified from PAL dump:
|
||||||
|
// bank 0 = pin 16 (ROMs 1,3,5,7)
|
||||||
|
// bank 1 = pin 19 (ROMs 2,4,6,8)
|
||||||
|
// pin 12 & pin 14 are never enabled
|
||||||
|
|
||||||
|
/* type start end bank */
|
||||||
|
{ GFXTYPE_SPRITES, 0x0000, 0x53ff, 0 },
|
||||||
|
{ GFXTYPE_SCROLL1, 0x5400, 0x6fff, 0 },
|
||||||
|
{ GFXTYPE_SCROLL3, 0x7000, 0x7fff, 0 },
|
||||||
|
|
||||||
|
{ GFXTYPE_SCROLL3, 0x0000, 0x3fff, 1 },
|
||||||
|
{ GFXTYPE_SCROLL2, 0x2800, 0x7fff, 1 },
|
||||||
|
{ GFXTYPE_SPRITES, 0x5400, 0x7fff, 1 },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
|
||||||
#define mapper_RT22B { 0x4000, 0x4000, 0x4000, 0x4000 }, mapper_RT22B_table
|
#define mapper_RT22B { 0x4000, 0x4000, 0x4000, 0x4000 }, mapper_RT22B_table
|
||||||
static const struct gfx_range mapper_RT22B_table[] =
|
static const struct gfx_range mapper_RT22B_table[] =
|
||||||
{
|
{
|
||||||
@ -784,16 +830,18 @@ static const struct gfx_range mapper_KR63B_table[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define mapper_S9263B { 0x10000, 0x8000, 0, 0 }, mapper_S9263B_table
|
#define mapper_S9263B { 0x8000, 0x8000, 0x8000, 0 }, mapper_S9263B_table
|
||||||
static const struct gfx_range mapper_S9263B_table[] =
|
static const struct gfx_range mapper_S9263B_table[] =
|
||||||
{
|
{
|
||||||
/* type start end bank */
|
/* type start end bank */
|
||||||
{ GFXTYPE_SPRITES, 0x00000, 0x0ffff, 0 },
|
{ GFXTYPE_SPRITES, 0x00000, 0x07fff, 0 },
|
||||||
|
|
||||||
{ GFXTYPE_SPRITES, 0x10000, 0x11fff, 1 },
|
{ GFXTYPE_SPRITES, 0x08000, 0x0ffff, 1 },
|
||||||
{ GFXTYPE_SCROLL3, 0x02000, 0x03fff, 1 }, // 12000-13fff physical
|
|
||||||
{ GFXTYPE_SCROLL1, 0x04000, 0x04fff, 1 }, // 14000-14fff physical
|
{ GFXTYPE_SPRITES, 0x10000, 0x11fff, 2 },
|
||||||
{ GFXTYPE_SCROLL2, 0x05000, 0x07fff, 1 }, // 15000-17fff physical
|
{ GFXTYPE_SCROLL3, 0x02000, 0x03fff, 2 }, // 12000-13fff physical
|
||||||
|
{ GFXTYPE_SCROLL1, 0x04000, 0x04fff, 2 }, // 14000-14fff physical
|
||||||
|
{ GFXTYPE_SCROLL2, 0x05000, 0x07fff, 2 }, // 15000-17fff physical
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -859,15 +907,17 @@ static const struct gfx_range mapper_PS63B_table[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define mapper_MB63B { 0x10000, 0x8000, 0, 0 }, mapper_MB63B_table
|
#define mapper_MB63B { 0x8000, 0x8000, 0x8000, 0 }, mapper_MB63B_table
|
||||||
static const struct gfx_range mapper_MB63B_table[] =
|
static const struct gfx_range mapper_MB63B_table[] =
|
||||||
{
|
{
|
||||||
/* type start end bank */
|
/* type start end bank */
|
||||||
{ GFXTYPE_SCROLL1, 0x00000, 0x00fff, 0 },
|
{ GFXTYPE_SCROLL1, 0x00000, 0x00fff, 0 },
|
||||||
{ GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x01000, 0x0ffff, 0 },
|
{ GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x01000, 0x07fff, 0 },
|
||||||
|
|
||||||
{ GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x10000, 0x167ff, 1 },
|
{ GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x08000, 0x0ffff, 1 },
|
||||||
{ GFXTYPE_SCROLL3, 0x16800, 0x17fff, 1 },
|
|
||||||
|
{ GFXTYPE_SPRITES | GFXTYPE_SCROLL2, 0x10000, 0x167ff, 2 },
|
||||||
|
{ GFXTYPE_SCROLL3, 0x16800, 0x17fff, 2 },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -971,7 +1021,7 @@ static const struct gfx_range mapper_cps2_table[] =
|
|||||||
|
|
||||||
static const struct CPS1config cps1_config_table[]=
|
static const struct CPS1config cps1_config_table[]=
|
||||||
{
|
{
|
||||||
/* name CPSB gfx mapper kludge */
|
/* name CPSB gfx mapper in2 in3 out2 kludge */
|
||||||
{"forgottn", CPS_B_01, mapper_LWCHR },
|
{"forgottn", CPS_B_01, mapper_LWCHR },
|
||||||
{"lostwrld", CPS_B_01, mapper_LWCHR },
|
{"lostwrld", CPS_B_01, mapper_LWCHR },
|
||||||
{"ghouls", CPS_B_01, mapper_DM620 },
|
{"ghouls", CPS_B_01, mapper_DM620 },
|
||||||
@ -996,10 +1046,10 @@ static const struct CPS1config cps1_config_table[]=
|
|||||||
{"1941j", CPS_B_05, mapper_YI24B },
|
{"1941j", CPS_B_05, mapper_YI24B },
|
||||||
{"unsquad", CPS_B_11, mapper_AR24B }, /* CPSB ID not checked, but it's the same as sf2eg */
|
{"unsquad", CPS_B_11, mapper_AR24B }, /* CPSB ID not checked, but it's the same as sf2eg */
|
||||||
{"area88", CPS_B_11, mapper_AR24B }, /* CPSB ID not checked, but it's the same as sf2eg */
|
{"area88", CPS_B_11, mapper_AR24B }, /* CPSB ID not checked, but it's the same as sf2eg */
|
||||||
{"mercs", CPS_B_12, mapper_0224B }, /* (uses port 74) */
|
{"mercs", CPS_B_12, mapper_0224B, 0x36, 0, 0x34 },
|
||||||
{"mercsu", CPS_B_12, mapper_0224B }, /* (uses port 74) */
|
{"mercsu", CPS_B_12, mapper_0224B, 0x36, 0, 0x34 },
|
||||||
{"mercsua", CPS_B_12, mapper_0224B }, /* (uses port 74) */
|
{"mercsua", CPS_B_12, mapper_0224B, 0x36, 0, 0x34 },
|
||||||
{"mercsj", CPS_B_12, mapper_0224B }, /* (uses port 74) */
|
{"mercsj", CPS_B_12, mapper_0224B, 0x36, 0, 0x34 },
|
||||||
{"msword", CPS_B_13, mapper_MS24B }, /* CPSB ID not checked, but it's the same as sf2j */
|
{"msword", CPS_B_13, mapper_MS24B }, /* CPSB ID not checked, but it's the same as sf2j */
|
||||||
{"mswordr1", CPS_B_13, mapper_MS24B }, /* CPSB ID not checked, but it's the same as sf2j */
|
{"mswordr1", CPS_B_13, mapper_MS24B }, /* CPSB ID not checked, but it's the same as sf2j */
|
||||||
{"mswordu", CPS_B_13, mapper_MS24B }, /* CPSB ID not checked, but it's the same as sf2j */
|
{"mswordu", CPS_B_13, mapper_MS24B }, /* CPSB ID not checked, but it's the same as sf2j */
|
||||||
@ -1012,88 +1062,88 @@ static const struct CPS1config cps1_config_table[]=
|
|||||||
{"cawingr1", CPS_B_16, mapper_CA24B },
|
{"cawingr1", CPS_B_16, mapper_CA24B },
|
||||||
{"cawingu", CPS_B_16, mapper_CA24B },
|
{"cawingu", CPS_B_16, mapper_CA24B },
|
||||||
{"cawingj", CPS_B_16, mapper_CA24B },
|
{"cawingj", CPS_B_16, mapper_CA24B },
|
||||||
{"sf2", CPS_B_11, mapper_STF29 },
|
{"sf2", CPS_B_11, mapper_STF29, 0x36 },
|
||||||
{"sf2eb", CPS_B_17, mapper_STF29 },
|
{"sf2eb", CPS_B_17, mapper_STF29, 0x36 },
|
||||||
{"sf2ua", CPS_B_17, mapper_STF29 },
|
{"sf2ua", CPS_B_17, mapper_STF29, 0x36 },
|
||||||
{"sf2ub", CPS_B_17, mapper_STF29 },
|
{"sf2ub", CPS_B_17, mapper_STF29, 0x36 },
|
||||||
{"sf2ud", CPS_B_05, mapper_STF29 },
|
{"sf2ud", CPS_B_05, mapper_STF29, 0x36 },
|
||||||
{"sf2ue", CPS_B_18, mapper_STF29 },
|
{"sf2ue", CPS_B_18, mapper_STF29, 0x3c },
|
||||||
{"sf2uf", CPS_B_15, mapper_STF29 },
|
{"sf2uf", CPS_B_15, mapper_STF29, 0x36 },
|
||||||
{"sf2ui", CPS_B_14, mapper_STF29 },
|
{"sf2ui", CPS_B_14, mapper_STF29, 0x36 },
|
||||||
{"sf2uk", CPS_B_17, mapper_STF29 }, // check CPS_B
|
{"sf2uk", CPS_B_17, mapper_STF29, 0x36 }, // check CPS_B
|
||||||
{"sf2j", CPS_B_13, mapper_STF29 },
|
{"sf2j", CPS_B_13, mapper_STF29, 0x36 },
|
||||||
{"sf2ja", CPS_B_17, mapper_STF29 },
|
{"sf2ja", CPS_B_17, mapper_STF29, 0x36 },
|
||||||
{"sf2jc", CPS_B_12, mapper_STF29 },
|
{"sf2jc", CPS_B_12, mapper_STF29, 0x36 },
|
||||||
/* from here onwards the CPS-B board has suicide battery and multiply protection */
|
/* from here onwards the CPS-B board has suicide battery and multiply protection */
|
||||||
{"3wonders", BATTRY_1, mapper_RT22B },
|
{"3wonders", CPS_B_21_BT1, mapper_RT24B },
|
||||||
{"3wonderu", BATTRY_1, mapper_RT22B },
|
{"3wonderu", CPS_B_21_BT1, mapper_RT24B },
|
||||||
{"wonder3", BATTRY_1, mapper_RT22B },
|
{"wonder3", CPS_B_21_BT1, mapper_RT22B }, // equivalent to RT24B
|
||||||
{"kod", BATTRY_2, mapper_KD29B },
|
{"kod", CPS_B_21_BT2, mapper_KD29B, 0x36, 0, 0x34 },
|
||||||
{"kodu", BATTRY_2, mapper_KD29B },
|
{"kodu", CPS_B_21_BT2, mapper_KD29B, 0x36, 0, 0x34 },
|
||||||
{"kodj", BATTRY_2, mapper_KD29B },
|
{"kodj", CPS_B_21_BT2, mapper_KD29B, 0x36, 0, 0x34 },
|
||||||
{"kodb", BATTRY_2, mapper_KD29B }, /* bootleg, doesn't use multiply protection */
|
{"kodb", CPS_B_21_BT2, mapper_KD29B, 0x36, 0, 0x34 }, /* bootleg, doesn't use multiply protection */
|
||||||
{"captcomm", BATTRY_3, mapper_CC63B },
|
{"captcomm", CPS_B_21_BT3, mapper_CC63B, 0x36, 0x38, 0x34 },
|
||||||
{"captcomu", BATTRY_3, mapper_CC63B },
|
{"captcomu", CPS_B_21_BT3, mapper_CC63B, 0x36, 0x38, 0x34 },
|
||||||
{"captcomj", BATTRY_3, mapper_CC63B },
|
{"captcomj", CPS_B_21_BT3, mapper_CC63B, 0x36, 0x38, 0x34 },
|
||||||
{"knights", BATTRY_4, mapper_KR63B },
|
{"knights", CPS_B_21_BT4, mapper_KR63B, 0x36, 0, 0x34 },
|
||||||
{"knightsu", BATTRY_4, mapper_KR63B },
|
{"knightsu", CPS_B_21_BT4, mapper_KR63B, 0x36, 0, 0x34 },
|
||||||
{"knightsj", BATTRY_4, mapper_KR63B },
|
{"knightsj", CPS_B_21_BT4, mapper_KR63B, 0x36, 0, 0x34 },
|
||||||
{"sf2ce", NOBATTRY, mapper_S9263B },
|
{"sf2ce", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2ceua", NOBATTRY, mapper_S9263B },
|
{"sf2ceua", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2ceub", NOBATTRY, mapper_S9263B },
|
{"sf2ceub", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2ceuc", NOBATTRY, mapper_S9263B },
|
{"sf2ceuc", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2cej", NOBATTRY, mapper_S9263B },
|
{"sf2cej", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2rb", NOBATTRY, mapper_S9263B },
|
{"sf2rb", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2rb2", NOBATTRY, mapper_S9263B },
|
{"sf2rb2", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2red", NOBATTRY, mapper_S9263B },
|
{"sf2red", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2v004", NOBATTRY, mapper_S9263B },
|
{"sf2v004", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2accp2", NOBATTRY, mapper_S9263B },
|
{"sf2accp2", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2m1", NOBATTRY, mapper_S9263B },
|
{"sf2m1", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2m2", NOBATTRY, mapper_S9263B },
|
{"sf2m2", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2m3", NOBATTRY, mapper_S9263B },
|
{"sf2m3", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2m4", HACK_B_1, mapper_S9263B, 1 },
|
{"sf2m4", HACK_B_1, mapper_S9263B, 0x36, 0, 0, 1 },
|
||||||
{"sf2m5", NOBATTRY, mapper_S9263B, 1 },
|
{"sf2m5", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 1 },
|
||||||
{"sf2m6", NOBATTRY, mapper_S9263B, 1 },
|
{"sf2m6", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 1 },
|
||||||
{"sf2m7", NOBATTRY, mapper_S9263B, 1 },
|
{"sf2m7", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 1 },
|
||||||
{"sf2yyc", NOBATTRY, mapper_S9263B, 1 },
|
{"sf2yyc", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 1 },
|
||||||
{"sf2koryu", NOBATTRY, mapper_S9263B, 1 },
|
{"sf2koryu", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 1 },
|
||||||
{"varth", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) */
|
{"varth", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */
|
||||||
{"varthr1", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) */
|
{"varthr1", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */
|
||||||
{"varthu", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) */
|
{"varthu", CPS_B_04, mapper_VA24B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */
|
||||||
{"varthj", BATTRY_5, mapper_VA24B }, /* CPSB test has been patched out (72=0001) */
|
{"varthj", CPS_B_21_BT5, mapper_VA24B }, /* CPSB test has been patched out (72=0001) register is also written to, possibly leftover from development */
|
||||||
{"cworld2j", BATTRY_6, mapper_Q522B }, /* The 0x76 priority values are incorrect values */
|
{"cworld2j", CPS_B_21_BT6, mapper_Q522B, 0x36, 0, 0x34 }, /* (ports 36, 34 probably leftover input code from another game) */
|
||||||
{"wof", NOBATTRY, mapper_TK263B }, /* bootleg? */
|
{"wof", CPS_B_21_DEF, mapper_TK263B }, /* bootleg? */
|
||||||
{"wofa", NOBATTRY, mapper_TK263B }, /* bootleg? */
|
{"wofa", CPS_B_21_DEF, mapper_TK263B }, /* bootleg? */
|
||||||
{"wofu", QSOUND_1, mapper_TK263B },
|
{"wofu", CPS_B_21_QS1, mapper_TK263B },
|
||||||
{"wofj", QSOUND_1, mapper_TK263B },
|
{"wofj", CPS_B_21_QS1, mapper_TK263B },
|
||||||
{"dino", QSOUND_2, mapper_CD63B }, /* layer enable never used */
|
{"dino", CPS_B_21_QS2, mapper_CD63B }, /* layer enable never used */
|
||||||
{"dinou", QSOUND_2, mapper_CD63B }, /* layer enable never used */
|
{"dinou", CPS_B_21_QS2, mapper_CD63B }, /* layer enable never used */
|
||||||
{"dinoj", QSOUND_2, mapper_CD63B }, /* layer enable never used */
|
{"dinoj", CPS_B_21_QS2, mapper_CD63B }, /* layer enable never used */
|
||||||
{"punisher", QSOUND_3, mapper_PS63B },
|
{"punisher", CPS_B_21_QS3, mapper_PS63B },
|
||||||
{"punishru", QSOUND_3, mapper_PS63B },
|
{"punishru", CPS_B_21_QS3, mapper_PS63B },
|
||||||
{"punishrj", QSOUND_3, mapper_PS63B },
|
{"punishrj", CPS_B_21_QS3, mapper_PS63B },
|
||||||
{"slammast", QSOUND_4, mapper_MB63B },
|
{"slammast", CPS_B_21_QS4, mapper_MB63B },
|
||||||
{"slammasu", QSOUND_4, mapper_MB63B },
|
{"slammasu", CPS_B_21_QS4, mapper_MB63B },
|
||||||
{"mbomberj", QSOUND_4, mapper_MB63B },
|
{"mbomberj", CPS_B_21_QS4, mapper_MB63B },
|
||||||
{"mbombrd", QSOUND_5, mapper_MB63B },
|
{"mbombrd", CPS_B_21_QS5, mapper_MB63B },
|
||||||
{"mbombrdj", QSOUND_5, mapper_MB63B },
|
{"mbombrdj", CPS_B_21_QS5, mapper_MB63B },
|
||||||
{"sf2hf", NOBATTRY, mapper_S9263B },
|
{"sf2hf", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2t", NOBATTRY, mapper_S9263B },
|
{"sf2t", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"sf2tj", NOBATTRY, mapper_S9263B },
|
{"sf2tj", CPS_B_21_DEF, mapper_S9263B, 0x36 },
|
||||||
{"qad", BATTRY_7, mapper_QD22B }, /* TODO: layer enable */
|
{"qad", CPS_B_21_BT7, mapper_QD22B, 0x36 }, /* TODO: layer enable (port 36 probably leftover input code from another game) */
|
||||||
{"qadj", NOBATTRY, mapper_qadj },
|
{"qadj", CPS_B_21_DEF, mapper_qadj, 0x36, 0x38, 0x34 }, /* (ports 36, 38, 34 probably leftover input code from another game) */
|
||||||
{"qtono2", NOBATTRY, mapper_qtono2 },
|
{"qtono2", CPS_B_21_DEF, mapper_qtono2, 0x36, 0x38, 0x34 }, /* (ports 36, 38, 34 probably leftover input code from another game) */
|
||||||
{"megaman", NOBATTRY, mapper_RCM63B },
|
{"megaman", CPS_B_21_DEF, mapper_RCM63B },
|
||||||
{"rockmanj", NOBATTRY, mapper_RCM63B },
|
{"rockmanj", CPS_B_21_DEF, mapper_RCM63B },
|
||||||
{"pnickj", NOBATTRY, mapper_pnickj },
|
{"pnickj", CPS_B_21_DEF, mapper_pnickj },
|
||||||
{"pang3", NOBATTRY, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
|
{"pang3", CPS_B_21_DEF, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
|
||||||
{"pang3j", NOBATTRY, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
|
{"pang3j", CPS_B_21_DEF, mapper_pang3 }, /* EEPROM port is among the CPS registers (handled by DRIVER_INIT) */
|
||||||
#ifdef MESS
|
#ifdef MESS
|
||||||
{"sfzch", NOBATTRY, mapper_cps2 },
|
{"sfzch", CPS_B_21_DEF, mapper_cps2 },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* CPS2 games */
|
/* CPS2 games */
|
||||||
{"cps2", NOBATTRY, mapper_cps2 },
|
{"cps2", CPS_B_21_DEF, mapper_cps2 },
|
||||||
|
|
||||||
{0} /* End of table */
|
{0} /* End of table */
|
||||||
};
|
};
|
||||||
@ -1102,10 +1152,10 @@ static const struct CPS1config cps1_config_table[]=
|
|||||||
|
|
||||||
/* Public variables */
|
/* Public variables */
|
||||||
UINT16 *cps1_gfxram;
|
UINT16 *cps1_gfxram;
|
||||||
UINT16 *cps1_output;
|
UINT16 *cps1_cps_a_regs;
|
||||||
|
UINT16 *cps1_cps_b_regs;
|
||||||
|
|
||||||
size_t cps1_gfxram_size;
|
size_t cps1_gfxram_size;
|
||||||
size_t cps1_output_size;
|
|
||||||
|
|
||||||
/* Offset of each palette entry */
|
/* Offset of each palette entry */
|
||||||
#define cps1_palette_entries (32*6) /* Number colour schemes in palette */
|
#define cps1_palette_entries (32*6) /* Number colour schemes in palette */
|
||||||
@ -1136,28 +1186,25 @@ int cps1_scroll3x, cps1_scroll3y;
|
|||||||
static int stars1x, stars1y, stars2x, stars2y;
|
static int stars1x, stars1y, stars2x, stars2y;
|
||||||
|
|
||||||
|
|
||||||
/* Output ports */
|
/* CPS-A registers */
|
||||||
#define CPS1_OBJ_BASE 0x00 /* Base address of objects */
|
#define CPS1_OBJ_BASE (0x00/2) /* Base address of objects */
|
||||||
#define CPS1_SCROLL1_BASE 0x02 /* Base address of scroll 1 */
|
#define CPS1_SCROLL1_BASE (0x02/2) /* Base address of scroll 1 */
|
||||||
#define CPS1_SCROLL2_BASE 0x04 /* Base address of scroll 2 */
|
#define CPS1_SCROLL2_BASE (0x04/2) /* Base address of scroll 2 */
|
||||||
#define CPS1_SCROLL3_BASE 0x06 /* Base address of scroll 3 */
|
#define CPS1_SCROLL3_BASE (0x06/2) /* Base address of scroll 3 */
|
||||||
#define CPS1_OTHER_BASE 0x08 /* Base address of other video */
|
#define CPS1_OTHER_BASE (0x08/2) /* Base address of other video */
|
||||||
#define CPS1_PALETTE_BASE 0x0a /* Base address of palette */
|
#define CPS1_PALETTE_BASE (0x0a/2) /* Base address of palette */
|
||||||
#define CPS1_SCROLL1_SCROLLX 0x0c /* Scroll 1 X */
|
#define CPS1_SCROLL1_SCROLLX (0x0c/2) /* Scroll 1 X */
|
||||||
#define CPS1_SCROLL1_SCROLLY 0x0e /* Scroll 1 Y */
|
#define CPS1_SCROLL1_SCROLLY (0x0e/2) /* Scroll 1 Y */
|
||||||
#define CPS1_SCROLL2_SCROLLX 0x10 /* Scroll 2 X */
|
#define CPS1_SCROLL2_SCROLLX (0x10/2) /* Scroll 2 X */
|
||||||
#define CPS1_SCROLL2_SCROLLY 0x12 /* Scroll 2 Y */
|
#define CPS1_SCROLL2_SCROLLY (0x12/2) /* Scroll 2 Y */
|
||||||
#define CPS1_SCROLL3_SCROLLX 0x14 /* Scroll 3 X */
|
#define CPS1_SCROLL3_SCROLLX (0x14/2) /* Scroll 3 X */
|
||||||
#define CPS1_SCROLL3_SCROLLY 0x16 /* Scroll 3 Y */
|
#define CPS1_SCROLL3_SCROLLY (0x16/2) /* Scroll 3 Y */
|
||||||
#define CPS1_STARS1_SCROLLX 0x18 /* Stars 1 X */
|
#define CPS1_STARS1_SCROLLX (0x18/2) /* Stars 1 X */
|
||||||
#define CPS1_STARS1_SCROLLY 0x1a /* Stars 1 Y */
|
#define CPS1_STARS1_SCROLLY (0x1a/2) /* Stars 1 Y */
|
||||||
#define CPS1_STARS2_SCROLLX 0x1c /* Stars 2 X */
|
#define CPS1_STARS2_SCROLLX (0x1c/2) /* Stars 2 X */
|
||||||
#define CPS1_STARS2_SCROLLY 0x1e /* Stars 2 Y */
|
#define CPS1_STARS2_SCROLLY (0x1e/2) /* Stars 2 Y */
|
||||||
#define CPS1_ROWSCROLL_OFFS 0x20 /* base of row scroll offsets in other RAM */
|
#define CPS1_ROWSCROLL_OFFS (0x20/2) /* base of row scroll offsets in other RAM */
|
||||||
#define CPS1_VIDEOCONTROL 0x22 /* flip screen, rowscroll enable */
|
#define CPS1_VIDEOCONTROL (0x22/2) /* flip screen, rowscroll enable */
|
||||||
|
|
||||||
#define CPS1_SCROLL2_WIDTH 0x40
|
|
||||||
#define CPS1_SCROLL2_HEIGHT 0x40
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1260,14 +1307,10 @@ static MACHINE_RESET( cps )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int cps1_port(int offset)
|
|
||||||
{
|
|
||||||
return cps1_output[offset/2];
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE UINT16 *cps1_base(int offset,int boundary)
|
INLINE UINT16 *cps1_base(int offset,int boundary)
|
||||||
{
|
{
|
||||||
int base=cps1_port(offset)*256;
|
int base = cps1_cps_a_regs[offset]*256;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The scroll RAM must start on a 0x4000 boundary.
|
The scroll RAM must start on a 0x4000 boundary.
|
||||||
Some games do not do this.
|
Some games do not do this.
|
||||||
@ -1282,65 +1325,9 @@ INLINE UINT16 *cps1_base(int offset,int boundary)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
READ16_HANDLER( cps1_output_r )
|
WRITE16_HANDLER( cps1_cps_a_w )
|
||||||
{
|
{
|
||||||
if (VERBOSE && offset >= 0x18/2) logerror("PC %06x: read output port %02x\n",activecpu_get_pc(),offset*2);
|
data = COMBINE_DATA(&cps1_cps_a_regs[offset]);
|
||||||
|
|
||||||
/* Some games interrogate a couple of registers on bootup. */
|
|
||||||
/* These are CPS1 board B self test checks. They wander from game to */
|
|
||||||
/* game. */
|
|
||||||
if (offset && offset == cps1_game_config->cpsb_addr/2)
|
|
||||||
return cps1_game_config->cpsb_value;
|
|
||||||
|
|
||||||
/* some games use as a protection check the ability to do 16-bit multiplies */
|
|
||||||
/* with a 32-bit result, by writing the factors to two ports and reading the */
|
|
||||||
/* result from two other ports. */
|
|
||||||
if (offset && offset == cps1_game_config->mult_result_lo/2)
|
|
||||||
return (cps1_output[cps1_game_config->mult_factor1/2] *
|
|
||||||
cps1_output[cps1_game_config->mult_factor2/2]) & 0xffff;
|
|
||||||
if (offset && offset == cps1_game_config->mult_result_hi/2)
|
|
||||||
return (cps1_output[cps1_game_config->mult_factor1/2] *
|
|
||||||
cps1_output[cps1_game_config->mult_factor2/2]) >> 16;
|
|
||||||
|
|
||||||
return cps1_output[offset];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WRITE16_HANDLER( cps1_output_w )
|
|
||||||
{
|
|
||||||
data = COMBINE_DATA(&cps1_output[offset]);
|
|
||||||
|
|
||||||
/* To mark scanlines for raster effects */
|
|
||||||
if(offset == 0x52/2)
|
|
||||||
{
|
|
||||||
cps1_scanline2 = (data & 0x1ff);
|
|
||||||
}
|
|
||||||
if(offset == 0x50/2)
|
|
||||||
{
|
|
||||||
cps1_scanline1 = (data & 0x1ff);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef MAME_DEBUG
|
|
||||||
if (cps1_game_config->palette_control && offset == cps1_game_config->palette_control/2 && data != 0x3f)
|
|
||||||
logerror("palette_control = %04x",data);
|
|
||||||
#endif
|
|
||||||
if (VERBOSE)
|
|
||||||
{
|
|
||||||
if (offset > 0x22/2 &&
|
|
||||||
offset != cps1_game_config->layer_control/2 &&
|
|
||||||
offset != cps1_game_config->priority[0]/2 &&
|
|
||||||
offset != cps1_game_config->priority[1]/2 &&
|
|
||||||
offset != cps1_game_config->priority[2]/2 &&
|
|
||||||
offset != cps1_game_config->priority[3]/2 &&
|
|
||||||
offset != cps1_game_config->palette_control/2)
|
|
||||||
logerror("PC %06x: write %02x to output port %02x\n",activecpu_get_pc(),data,offset*2);
|
|
||||||
|
|
||||||
#ifdef MAME_DEBUG
|
|
||||||
if (cps1_game_config->priority[0] && offset == cps1_game_config->priority[0]/2 && data != 0x00)
|
|
||||||
popmessage("priority0 %04x",data);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The main CPU writes the palette to gfxram, and the CPS-B custom copies it
|
The main CPU writes the palette to gfxram, and the CPS-B custom copies it
|
||||||
@ -1350,8 +1337,112 @@ if (cps1_game_config->priority[0] && offset == cps1_game_config->priority[0]/2 &
|
|||||||
should happen. We are assuming that the copy happens immediately, since it
|
should happen. We are assuming that the copy happens immediately, since it
|
||||||
fixes glitches in the ghouls intro, but it might happen at next vblank.
|
fixes glitches in the ghouls intro, but it might happen at next vblank.
|
||||||
*/
|
*/
|
||||||
if (offset == CPS1_PALETTE_BASE/2)
|
if (offset == CPS1_PALETTE_BASE)
|
||||||
cps1_build_palette(machine, cps1_base(CPS1_PALETTE_BASE,cps1_palette_align));
|
cps1_build_palette(machine, cps1_base(CPS1_PALETTE_BASE,cps1_palette_align));
|
||||||
|
|
||||||
|
if (offset > CPS1_VIDEOCONTROL)
|
||||||
|
popmessage("write to CPS-A register %02x contact MAMEDEV", offset*2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
READ16_HANDLER( cps1_cps_b_r )
|
||||||
|
{
|
||||||
|
/* Some games interrogate a couple of registers on bootup. */
|
||||||
|
/* These are CPS1 board B self test checks. They wander from game to */
|
||||||
|
/* game. */
|
||||||
|
if (offset == cps1_game_config->cpsb_addr/2)
|
||||||
|
return cps1_game_config->cpsb_value;
|
||||||
|
|
||||||
|
/* some games use as a protection check the ability to do 16-bit multiplications */
|
||||||
|
/* with a 32-bit result, by writing the factors to two ports and reading the */
|
||||||
|
/* result from two other ports. */
|
||||||
|
if (offset == cps1_game_config->mult_result_lo/2)
|
||||||
|
return (cps1_cps_b_regs[cps1_game_config->mult_factor1/2] *
|
||||||
|
cps1_cps_b_regs[cps1_game_config->mult_factor2/2]) & 0xffff;
|
||||||
|
if (offset == cps1_game_config->mult_result_hi/2)
|
||||||
|
return (cps1_cps_b_regs[cps1_game_config->mult_factor1/2] *
|
||||||
|
cps1_cps_b_regs[cps1_game_config->mult_factor2/2]) >> 16;
|
||||||
|
|
||||||
|
if (offset == cps1_game_config->in2_addr/2) /* Extra input ports (on C-board) */
|
||||||
|
return input_port_read(machine, "IN2");
|
||||||
|
|
||||||
|
if (offset == cps1_game_config->in3_addr/2) /* Player 4 controls (on C-board) ("Captain Commando") */
|
||||||
|
return input_port_read(machine, "IN3");
|
||||||
|
|
||||||
|
if (cps_version == 2)
|
||||||
|
{
|
||||||
|
if (offset == 0x12/2)
|
||||||
|
{
|
||||||
|
return cps1_cps_b_regs[0x12/2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
popmessage("CPS-B read port %02x contact MAMEDEV", offset*2);
|
||||||
|
|
||||||
|
return 0xffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE16_HANDLER( cps1_cps_b_w )
|
||||||
|
{
|
||||||
|
data = COMBINE_DATA(&cps1_cps_b_regs[offset]);
|
||||||
|
|
||||||
|
if (cps_version == 2)
|
||||||
|
{
|
||||||
|
/* To mark scanlines for raster effects */
|
||||||
|
if (offset == 0x0e/2)
|
||||||
|
{
|
||||||
|
// UNKNOWN
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (offset == 0x10/2)
|
||||||
|
{
|
||||||
|
cps1_scanline1 = (data & 0x1ff);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (offset == 0x12/2)
|
||||||
|
{
|
||||||
|
cps1_scanline2 = (data & 0x1ff);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// additional outputs on C-board
|
||||||
|
if (offset == cps1_game_config->out2_addr/2)
|
||||||
|
{
|
||||||
|
if (ACCESSING_BITS_0_7)
|
||||||
|
{
|
||||||
|
if (cps1_game_config->cpsb_value == 0x0402) // Mercs (CN2 connector)
|
||||||
|
{
|
||||||
|
coin_lockout_w(2,~data & 0x01);
|
||||||
|
set_led_status(0,data & 0x02);
|
||||||
|
set_led_status(1,data & 0x04);
|
||||||
|
set_led_status(2,data & 0x08);
|
||||||
|
}
|
||||||
|
else // kod, captcomm, knights
|
||||||
|
{
|
||||||
|
coin_lockout_w(2,~data & 0x02);
|
||||||
|
coin_lockout_w(3,~data & 0x08);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (offset != cps1_game_config->cpsb_addr/2 && // only varth writes here
|
||||||
|
offset != cps1_game_config->mult_factor1/2 &&
|
||||||
|
offset != cps1_game_config->mult_factor2/2 &&
|
||||||
|
offset != cps1_game_config->layer_control/2 &&
|
||||||
|
offset != cps1_game_config->unknown1/2 &&
|
||||||
|
offset != cps1_game_config->unknown2/2 &&
|
||||||
|
offset != cps1_game_config->unknown3/2 &&
|
||||||
|
offset != cps1_game_config->priority[0]/2 &&
|
||||||
|
offset != cps1_game_config->priority[1]/2 &&
|
||||||
|
offset != cps1_game_config->priority[2]/2 &&
|
||||||
|
offset != cps1_game_config->priority[3]/2 &&
|
||||||
|
offset != cps1_game_config->palette_control/2 &&
|
||||||
|
offset != cps1_game_config->out2_addr/2)
|
||||||
|
popmessage("CPS-B write %04x to port %02x contact MAMEDEV", data, offset*2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1473,7 +1564,7 @@ void cps1_get_video_base(void )
|
|||||||
/* Some of the sf2 hacks use only sprite port 0x9100 and the scroll layers are offset */
|
/* Some of the sf2 hacks use only sprite port 0x9100 and the scroll layers are offset */
|
||||||
if (cps1_game_config->bootleg_kludge == 1)
|
if (cps1_game_config->bootleg_kludge == 1)
|
||||||
{
|
{
|
||||||
cps1_output[CPS1_OBJ_BASE/2] = 0x9100;
|
cps1_cps_a_regs[CPS1_OBJ_BASE] = 0x9100;
|
||||||
cps1_obj = cps1_base(CPS1_OBJ_BASE, cps1_obj_size);
|
cps1_obj = cps1_base(CPS1_OBJ_BASE, cps1_obj_size);
|
||||||
scroll1xoff = -0x0c;
|
scroll1xoff = -0x0c;
|
||||||
scroll2xoff = -0x0e;
|
scroll2xoff = -0x0e;
|
||||||
@ -1489,20 +1580,20 @@ void cps1_get_video_base(void )
|
|||||||
cps1_other = cps1_base(CPS1_OTHER_BASE,cps1_other_size);
|
cps1_other = cps1_base(CPS1_OTHER_BASE,cps1_other_size);
|
||||||
|
|
||||||
/* Get scroll values */
|
/* Get scroll values */
|
||||||
cps1_scroll1x=cps1_port(CPS1_SCROLL1_SCROLLX) + scroll1xoff;
|
cps1_scroll1x = cps1_cps_a_regs[CPS1_SCROLL1_SCROLLX] + scroll1xoff;
|
||||||
cps1_scroll1y=cps1_port(CPS1_SCROLL1_SCROLLY);
|
cps1_scroll1y = cps1_cps_a_regs[CPS1_SCROLL1_SCROLLY];
|
||||||
cps1_scroll2x=cps1_port(CPS1_SCROLL2_SCROLLX) + scroll2xoff;
|
cps1_scroll2x = cps1_cps_a_regs[CPS1_SCROLL2_SCROLLX] + scroll2xoff;
|
||||||
cps1_scroll2y=cps1_port(CPS1_SCROLL2_SCROLLY);
|
cps1_scroll2y = cps1_cps_a_regs[CPS1_SCROLL2_SCROLLY];
|
||||||
cps1_scroll3x=cps1_port(CPS1_SCROLL3_SCROLLX) + scroll3xoff;
|
cps1_scroll3x = cps1_cps_a_regs[CPS1_SCROLL3_SCROLLX] + scroll3xoff;
|
||||||
cps1_scroll3y=cps1_port(CPS1_SCROLL3_SCROLLY);
|
cps1_scroll3y = cps1_cps_a_regs[CPS1_SCROLL3_SCROLLY];
|
||||||
stars1x =cps1_port(CPS1_STARS1_SCROLLX);
|
stars1x = cps1_cps_a_regs[CPS1_STARS1_SCROLLX];
|
||||||
stars1y =cps1_port(CPS1_STARS1_SCROLLY);
|
stars1y = cps1_cps_a_regs[CPS1_STARS1_SCROLLY];
|
||||||
stars2x =cps1_port(CPS1_STARS2_SCROLLX);
|
stars2x = cps1_cps_a_regs[CPS1_STARS2_SCROLLX];
|
||||||
stars2y =cps1_port(CPS1_STARS2_SCROLLY);
|
stars2y = cps1_cps_a_regs[CPS1_STARS2_SCROLLY];
|
||||||
|
|
||||||
/* Get layer enable bits */
|
/* Get layer enable bits */
|
||||||
layercontrol=cps1_port(cps1_game_config->layer_control);
|
layercontrol = cps1_cps_b_regs[cps1_game_config->layer_control/2];
|
||||||
videocontrol=cps1_port(CPS1_VIDEOCONTROL);
|
videocontrol = cps1_cps_a_regs[CPS1_VIDEOCONTROL];
|
||||||
tilemap_set_enable(cps1_bg_tilemap[0],layercontrol & cps1_game_config->layer_enable_mask[0]);
|
tilemap_set_enable(cps1_bg_tilemap[0],layercontrol & cps1_game_config->layer_enable_mask[0]);
|
||||||
tilemap_set_enable(cps1_bg_tilemap[1],(layercontrol & cps1_game_config->layer_enable_mask[1]) && (videocontrol & 4));
|
tilemap_set_enable(cps1_bg_tilemap[1],(layercontrol & cps1_game_config->layer_enable_mask[1]) && (videocontrol & 4));
|
||||||
tilemap_set_enable(cps1_bg_tilemap[2],(layercontrol & cps1_game_config->layer_enable_mask[2]) && (videocontrol & 8));
|
tilemap_set_enable(cps1_bg_tilemap[2],(layercontrol & cps1_game_config->layer_enable_mask[2]) && (videocontrol & 8));
|
||||||
@ -1510,31 +1601,9 @@ void cps1_get_video_base(void )
|
|||||||
cps1_stars_enabled[1] = layercontrol & cps1_game_config->layer_enable_mask[4];
|
cps1_stars_enabled[1] = layercontrol & cps1_game_config->layer_enable_mask[4];
|
||||||
|
|
||||||
|
|
||||||
#ifdef MAME_DEBUG
|
|
||||||
{
|
{
|
||||||
int enablemask;
|
int enablemask;
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (input_code_pressed(KEYCODE_Z))
|
|
||||||
{
|
|
||||||
if (input_code_pressed(KEYCODE_Q)) cps1_layer_enabled[3]=0;
|
|
||||||
if (input_code_pressed(KEYCODE_W)) cps1_layer_enabled[2]=0;
|
|
||||||
if (input_code_pressed(KEYCODE_E)) cps1_layer_enabled[1]=0;
|
|
||||||
if (input_code_pressed(KEYCODE_R)) cps1_layer_enabled[0]=0;
|
|
||||||
if (input_code_pressed(KEYCODE_T))
|
|
||||||
{
|
|
||||||
popmessage("%d %d %d %d layer %02x",
|
|
||||||
(layercontrol>>0x06)&03,
|
|
||||||
(layercontrol>>0x08)&03,
|
|
||||||
(layercontrol>>0x0a)&03,
|
|
||||||
(layercontrol>>0x0c)&03,
|
|
||||||
layercontrol&0xc03f
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enablemask = 0;
|
enablemask = 0;
|
||||||
if (cps1_game_config->layer_enable_mask[0] == cps1_game_config->layer_enable_mask[1])
|
if (cps1_game_config->layer_enable_mask[0] == cps1_game_config->layer_enable_mask[1])
|
||||||
enablemask = cps1_game_config->layer_enable_mask[0];
|
enablemask = cps1_game_config->layer_enable_mask[0];
|
||||||
@ -1545,13 +1614,9 @@ if (input_code_pressed(KEYCODE_Z))
|
|||||||
if (enablemask)
|
if (enablemask)
|
||||||
{
|
{
|
||||||
if (((layercontrol & enablemask) && (layercontrol & enablemask) != enablemask))
|
if (((layercontrol & enablemask) && (layercontrol & enablemask) != enablemask))
|
||||||
popmessage("layer %02x",layercontrol&0xc03f);
|
popmessage("layer %02x contact MAMEDEV",layercontrol&0xc03f);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{
|
|
||||||
int enablemask;
|
|
||||||
enablemask = cps1_game_config->layer_enable_mask[0] | cps1_game_config->layer_enable_mask[1]
|
enablemask = cps1_game_config->layer_enable_mask[0] | cps1_game_config->layer_enable_mask[1]
|
||||||
| cps1_game_config->layer_enable_mask[2]
|
| cps1_game_config->layer_enable_mask[2]
|
||||||
| cps1_game_config->layer_enable_mask[3] | cps1_game_config->layer_enable_mask[4];
|
| cps1_game_config->layer_enable_mask[3] | cps1_game_config->layer_enable_mask[4];
|
||||||
@ -1567,11 +1632,11 @@ WRITE16_HANDLER( cps1_gfxram_w )
|
|||||||
int page = (offset >> 7) & 0x3c0;
|
int page = (offset >> 7) & 0x3c0;
|
||||||
COMBINE_DATA(&cps1_gfxram[offset]);
|
COMBINE_DATA(&cps1_gfxram[offset]);
|
||||||
|
|
||||||
if (page == (cps1_port(CPS1_SCROLL1_BASE) & 0x3c0))
|
if (page == (cps1_cps_a_regs[CPS1_SCROLL1_BASE] & 0x3c0))
|
||||||
tilemap_mark_tile_dirty(cps1_bg_tilemap[0],offset/2 & 0x0fff);
|
tilemap_mark_tile_dirty(cps1_bg_tilemap[0],offset/2 & 0x0fff);
|
||||||
if (page == (cps1_port(CPS1_SCROLL2_BASE) & 0x3c0))
|
if (page == (cps1_cps_a_regs[CPS1_SCROLL2_BASE] & 0x3c0))
|
||||||
tilemap_mark_tile_dirty(cps1_bg_tilemap[1],offset/2 & 0x0fff);
|
tilemap_mark_tile_dirty(cps1_bg_tilemap[1],offset/2 & 0x0fff);
|
||||||
if (page == (cps1_port(CPS1_SCROLL3_BASE) & 0x3c0))
|
if (page == (cps1_cps_a_regs[CPS1_SCROLL3_BASE] & 0x3c0))
|
||||||
tilemap_mark_tile_dirty(cps1_bg_tilemap[2],offset/2 & 0x0fff);
|
tilemap_mark_tile_dirty(cps1_bg_tilemap[2],offset/2 & 0x0fff);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1723,9 +1788,9 @@ static void cps1_update_transmasks(void)
|
|||||||
int mask;
|
int mask;
|
||||||
|
|
||||||
/* Get transparency registers */
|
/* Get transparency registers */
|
||||||
if (cps1_game_config->priority[i])
|
if (cps1_game_config->priority[i] != -1)
|
||||||
mask = cps1_port(cps1_game_config->priority[i]) ^ 0xffff;
|
mask = cps1_cps_b_regs[cps1_game_config->priority[i]/2] ^ 0xffff;
|
||||||
else mask = 0xffff; /* completely transparent if priority masks not defined (mercs, qad) */
|
else mask = 0xffff; /* completely transparent if priority masks not defined (qad) */
|
||||||
|
|
||||||
tilemap_set_transmask(cps1_bg_tilemap[0],i,mask,0x8000);
|
tilemap_set_transmask(cps1_bg_tilemap[0],i,mask,0x8000);
|
||||||
tilemap_set_transmask(cps1_bg_tilemap[1],i,mask,0x8000);
|
tilemap_set_transmask(cps1_bg_tilemap[1],i,mask,0x8000);
|
||||||
@ -1763,7 +1828,8 @@ static VIDEO_START( cps )
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(cps1_gfxram, 0, cps1_gfxram_size); /* Clear GFX RAM */
|
memset(cps1_gfxram, 0, cps1_gfxram_size); /* Clear GFX RAM */
|
||||||
memset(cps1_output, 0, cps1_output_size); /* Clear output ports */
|
memset(cps1_cps_a_regs, 0, 0x40); /* Clear CPS-A registers */
|
||||||
|
memset(cps1_cps_b_regs, 0, 0x40); /* Clear CPS-B registers */
|
||||||
|
|
||||||
if (cps_version == 2)
|
if (cps_version == 2)
|
||||||
{
|
{
|
||||||
@ -1772,11 +1838,11 @@ static VIDEO_START( cps )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Put in some defaults */
|
/* Put in some defaults */
|
||||||
cps1_output[CPS1_OBJ_BASE/2] = 0x9200;
|
cps1_cps_a_regs[CPS1_OBJ_BASE] = 0x9200;
|
||||||
cps1_output[CPS1_SCROLL1_BASE/2] = 0x9000;
|
cps1_cps_a_regs[CPS1_SCROLL1_BASE] = 0x9000;
|
||||||
cps1_output[CPS1_SCROLL2_BASE/2] = 0x9040;
|
cps1_cps_a_regs[CPS1_SCROLL2_BASE] = 0x9040;
|
||||||
cps1_output[CPS1_SCROLL3_BASE/2] = 0x9080;
|
cps1_cps_a_regs[CPS1_SCROLL3_BASE] = 0x9080;
|
||||||
cps1_output[CPS1_OTHER_BASE/2] = 0x9100;
|
cps1_cps_a_regs[CPS1_OTHER_BASE] = 0x9100;
|
||||||
|
|
||||||
assert_always(cps1_game_config, "cps1_game_config hasn't been set up yet");
|
assert_always(cps1_game_config, "cps1_game_config hasn't been set up yet");
|
||||||
|
|
||||||
@ -1810,7 +1876,7 @@ static void cps1_build_palette(running_machine *machine, const UINT16* const pal
|
|||||||
int offset, page;
|
int offset, page;
|
||||||
const UINT16 *palette_ram = palette_base;
|
const UINT16 *palette_ram = palette_base;
|
||||||
|
|
||||||
int ctrl = cps1_port(cps1_game_config->palette_control);
|
int ctrl = cps1_cps_b_regs[cps1_game_config->palette_control/2];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The palette is copied only for pages that are enabled in the ctrl
|
The palette is copied only for pages that are enabled in the ctrl
|
||||||
@ -2393,12 +2459,12 @@ static void cps1_render_high_layer(bitmap_t *bitmap, const rectangle *cliprect,
|
|||||||
VIDEO_UPDATE( cps1 )
|
VIDEO_UPDATE( cps1 )
|
||||||
{
|
{
|
||||||
int layercontrol,l0,l1,l2,l3;
|
int layercontrol,l0,l1,l2,l3;
|
||||||
int videocontrol=cps1_port(CPS1_VIDEOCONTROL);
|
int videocontrol = cps1_cps_a_regs[CPS1_VIDEOCONTROL];
|
||||||
|
|
||||||
|
|
||||||
flip_screen_set(videocontrol & 0x8000);
|
flip_screen_set(videocontrol & 0x8000);
|
||||||
|
|
||||||
layercontrol = cps1_output[cps1_game_config->layer_control/2];
|
layercontrol = cps1_cps_b_regs[cps1_game_config->layer_control/2];
|
||||||
|
|
||||||
/* Get video memory base registers */
|
/* Get video memory base registers */
|
||||||
cps1_get_video_base();
|
cps1_get_video_base();
|
||||||
@ -2422,7 +2488,7 @@ VIDEO_UPDATE( cps1 )
|
|||||||
|
|
||||||
tilemap_set_scroll_rows(cps1_bg_tilemap[1],1024);
|
tilemap_set_scroll_rows(cps1_bg_tilemap[1],1024);
|
||||||
|
|
||||||
otheroffs = cps1_port(CPS1_ROWSCROLL_OFFS);
|
otheroffs = cps1_cps_a_regs[CPS1_ROWSCROLL_OFFS];
|
||||||
|
|
||||||
for (i = 0;i < 256;i++)
|
for (i = 0;i < 256;i++)
|
||||||
tilemap_set_scrollx(cps1_bg_tilemap[1],(i - scrly) & 0x3ff,cps1_scroll2x + cps1_other[(i + otheroffs) & 0x3ff]);
|
tilemap_set_scrollx(cps1_bg_tilemap[1],(i - scrly) & 0x3ff,cps1_scroll2x + cps1_other[(i + otheroffs) & 0x3ff]);
|
||||||
|
Loading…
Reference in New Issue
Block a user