Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
1 recent contributor

Users who have contributed to this file recently

5999 lines (4868 sloc) 317 KB
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
/***************************************************************************
Sega System 32/Multi 32 hardware
****************************************************************************
Still to do:
* fix protection
* fix jpark correctly
* priorities in multi32 appear wrong - stadium cross map screen
and title fight ingame backgrounds
* should f1lap be set up as a twin cabinet / direct link or can it
be operated as a single screen, unlike f1en/air rescue
****************************************************************************
Slip Stream (Hispanic 950515)
Sega, 1995
This game runs on Sega System 32 hardware.
PCB Layout
----------
837-7428 171-5964E (C) SEGA 1990
|-------------------------------------------------------------------------------------------|
| TDA1518 8464 8464 |
| HM65256 8464 8464 |
| TL064 HM65256 |---------| |---------| |
| LC7881 |-----| |SEGA | |SEGA | |
| |ASSP | |315-5385 | |315-5388 | |
|CND |5C105| | | | | |
| |1FD07| | | |---------| | | |
| |-----| |---------| CNF |SEGA | |---------| |
| |315-5242 | |
|-| TL062 TL064 84256 | | |
| 84256 | | CNI|
|-| |---------| |---------| |
| YM3438 |SEGA | |
| |-----------| |315-5387 | |
| YM3438 |NEC | 315-5441 | | |
| |D70616R-16 | | | |
|J BAT_5.5V |9105M9 V60 | |---------| |
|A BAT_3.3V |(C)NEC 1986| |
|M | | D42264 |
|M 8464 |-----------| D42264 |
|A D42264 |
| Z80 D42264 |
| HM53461ZP-12 HM53461ZP-12 |
| HM53461ZP-12 HM53461ZP-12 |
| HM53461ZP-12 HM53461ZP-12 |
| HM53461ZP-12 HM53461ZP-12 |-----------| |
|-| HM53461ZP-12 HM53461ZP-12 | SEGA | CNE|
| |-------| HM53461ZP-12 HM53461ZP-12 | 315-5386A | |
|-| |SEGA | HM53461ZP-12 HM53461ZP-12 | | |
| |315- | HM53461ZP-12 HM53461ZP-12 | | |
| |5296 | | | |
| |-------| 3771 3771 |-----------| |
| 93C46 D42264 |
|CNB SW2 D42264 |
| SW1 D42264 |
| CNA DSW1 32MHz 50MHz D42264 |
|-------------------------------------------------------------------------------------------|
Notes:
V60 CPU running at 16.00MHz [32/2]
Z80 CPU running at 8.000MHz [32/4]
YM3438 running at 8.000MHz [32/4]
CNE/F/I - Multi-pin connectors for connection of ROM Board
CND - 4 pin connector for 2nd Speaker for Stereo Output
CNA - 30 pin connector for extra controls PCB
CNB - 26 pin connector (purpose unknown)
SW1 - push-button TEST switch
SW2 - push button SERVICE switch
DSW1 - 4-position DIP Switch
HM53461 - Hitachi 256k Dual Port RAM
D42264 - NEC 256k Dual Port RAM
SEGA Custom ICs:
315-5441 Lattice GAL16V8A (DIP20)
315-5386A (QFP184)
315-5388 (QFP160)
315-5387 (QFP160)
315-5242 (custom ceramic DIP32 containing a small QFP IC and some capacitors/resistors etc)
315-5296 (QFP100)
ASSP 5C105 (QFP80)
315-5385 (QFP128)
ROM Board
---------
837-7429-01
|-------------------------------------------------------------------------------------------|
|JP10-JP27 CNJ CNH JP1-JP9 |
| IC6 |
| IC7 |
| IC13 |
| IC14 |
| 315-5442 |
| IC22 IC25 IC24 IC23 |
| |
| IC26 IC29 IC28 IC27 |
| |
| IC31 CNK IC34 IC23 IC32 |
| |
| IC35 IC38 IC37 IC36 |
| CNG JP28-JP32 |
|-------------------------------------------------------------------------------------------|
Notes:
CNG/H/J - Multi-pin connectors (below PCB) for connection of ROM Board to Main Board
CNK - Custom Sega connector for connection of protection daughterboard (not used)
315-5442 - MMI PAL16L8ACN (DIP20)
Jumpers: (to configure ROM sizes used on Slip Stream. Other games)
(may vary depending on ROM types used)
JP1: 2-3 JP17: 1-2
JP2: 2-3 JP18: 2-3
JP3: 2-3 JP19: 1-2
JP4: 1-2 JP20: 2-3
JP5: 2-3 JP21: 1-2
JP6: 2-3 JP22: 2-3
JP7: 1-2 JP23: 1-2
JP8: 2-3 JP24: 1-2
JP9: 1-2 JP25: 2-3
JP10: 2-3 JP26: 1-2
JP11: 1-2 JP27: 1-2
JP12: 1-2 JP28: 2-3
JP13: 1-2 JP29: 1-2
JP14: 2-3 JP30: 2-3
JP15: 2-3 JP31: 1-2
JP16: 2-3 JP32: 1-2
ROM Locations
-------------
PCB Label CPU P0 CPU P1 CPU D0 CPU D1 SND0 SND1 SND2 SND3 SCR0 SCR1 SCR2 SCR3 OBJ0 OBJ1 OBJ2 OBJ3 OBJ4 OBJ5 OBJ6 OBJ7
IC# IC13 IC6 IC7 IC14 IC35 IC31 - - IC38 IC34 IC29 IC25 IC36 IC32 IC27 IC23 IC37 IC33 IC28 IC24
IC Type - 27C4002 27C4000 27C4000 27C010 27C4000 - - 27C4000 27C4000 27C4000 27C4000 27C4000 27C4000 27C4000 27C4000 27C4000 27C4000 27C4000 27C4000
ROM Label - S32HPRG01 S32DAT00 S32DAT01 S32SND00 S32SND01 - - S32SCR00 S32SCR01 S32SCR02 S32SCR03 S32OBJ00 S32OBJ01 S32OBJ02 S32OBJ03 S32OBJ04 S32OBJ05 S32OBJ06 S32OBJ07
Extra Controls PCB
------------------
837-7536
837-7536-91 (sticker)
|------------------------|
| |
| 74HC74 |
| OKI_M6253 |
| 74HC4053 |
| DAP601 74HC139|
| DAN601 |
|CN2 CN1 |
|------------------------|
Notes:
CN2 - Multi-pin connector for controls
CN1 - Connector joining to CNA on main PCB
*********************************************************************************************
Title Fight (Export Revision)
Sega, 1992
This game runs on Sega System Multi32 hardware.
PCB Layout
----------
837-8676 171-6253C (C) SEGA 1992
834-9324-02 (STICKER)
|-------------------------------------------------------------------------------------------|
| CNF CNH 8464 |
|8464 HM53461ZP-12 (x16) |-----------| HM53461ZP-12 (x16) 8464 |
|8464 | SEGA | 8464 |
|8464 | 315-5386A | 8464 |
|8464 | | |
| | | |
| | | |
| |---------| |---------| |-----------| |---------| |---------| |
| |SEGA | |SEGA | |SEGA | |SEGA | |
| |315-5388 | |315-5387 | HM53461ZP-12 (x8) |315-5388 | |315-5242 | |
| | | | | | | | | |
| | | | | | | | | |
| |---------| |---------| |---------| |---------| |
| CND CNE |
| |---------| MB3771 MB3771 315-5596 |-------| M5M5278P-25|
| |SEGA | |SEGA | |
| |315-5242 | 8464 |315- | M5M5278P-25|
| | |BAT_3.3V |5591 | |
| | |BAT_5.5V |---------| |-------| M5M5278P-25|
| |---------| Z80 50MHz |SEGA | |-----------| DSW1|
| 32MHz |315-5385 | |NEC | M5M5278P-25|
| |------| | | |D70632R-20 | SW4 |
| |SEGA | |-------| | | |9314X9 V70 | 40MHz SW3 |
| |315- | |SEGA | |---------| |(C)NEC 1986| |
| |5560 | YM3438 |315- | | | |
| |------| LC78820 |5296 | |-----------| 93C45 |
|TDA1518 |-------| |-------| |
| SW1 SW2 |SEGA | CNM|
| VOL |315- | |
| |5296 | |
| UPC844 UPC4064 |-------| |
| |
|CNC LED |
--| JAMMA |----| CNJ |----| JAMMA |--|
|------------------------------| |--------------| |------------------------------|
Notes:
V70 CPU running at 20.00MHz [40/2]
Z80 CPU running at 8.000MHz [32/4]
YM3438 running at 8.000MHz [32/4]
315-5560 running at 8.000MHz [32/4]
CND/E/F/H: Multi-pin connectors for connection of ROM Board
CNC : 4 pin connector for 2nd Speaker for Stereo Output
CNJ : 32 pin connector (purpose unknown)
CNM : 30 pin connector (purpose unknown)
SW1 : push-button TEST switch
SW2 : push button SERVICE switch
SW3/4 : push button switches (purpose unknown)
DSW1 : 4-position DIP Switch
SEGA Custom ICs:
315-5596 Lattice GAL16V8A (DIP20)
315-5386A (QFP184)
315-5388 (x2, QFP160)
315-5387 (QFP160)
315-5242 (x2, custom ceramic DIP32 containing a small QFP IC and some capacitors/resistors etc)
315-5296 (x2, QFP100)
315-5560 (QFP80)
315-5385 (QFP128)
315-5591 (QFP100)
ROM Board
---------
837-8890
|-------------------------------------------------------------------------------------------|
| CN3 CN4 |
| |
| IC3 IC14 IC15 IC10 |
| IC1 IC2 JP1-5 |
| |
| IC11 JP6-10 IC22 IC23 IC18 |
| |
| |
| IC36 IC37 |
| 315-5598 IC38 |
| CN5 |
| IC30 IC31 IC39 IC40 |
| CN6 IC41 |
|JP11-16 CN1 CN2 |
|-------------------------------------------------------------------------------------------|
Notes:
CN1/2/3/4 : Multi-pin connectors (below PCB) for connection of ROM Board to Main Board
CN5 : Custom Sega connector for connection of protection daughterboard (not used)
CN6 : Custom Sega connector (purpose unknown)
315-5598 : Lattice GAL16V8A (DIP20)
Jumpers: (to configure ROM sizes used on Title Fight. Other games may vary depending on ROM types used.)
JP1: 1-2
JP2: 1-2
JP3: 2-3
JP4: 2-3
JP5: 2-3
JP6: 1-2
JP7: 2-3
JP8: 2-3
JP9: 1-2
JP10: 1-2
JP11: OPEN
JP12: OPEN
JP13: OPEN
JP14: OPEN
JP15: 1-2
JP16: 2-3
ROM Locations (All known System Multi32 games shown for reference)
-------------
PCB Label CPU P0 CPU P1 CPU D0 CPU D1 SOUND SCR0 SCR1 OBJ0 OBJ1 OBJ2 OBJ3 OBJ4 OBJ5 OBJ6 OBJ7 PCM D0 PCM D1 PCM EP/S
IC# IC37 IC40 IC36 IC39 IC31 IC3 IC11 IC14 IC22 IC15 IC23 IC10 IC18 IC38 IC41 IC1 IC2 IC30
IC Type 27C2048 27C2048 - - 27C1000 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 - -
Title Fight EPR15388 EPR15389 - - EPR15384 MPR15381 MPR15382 MPR15379 MPR15380 MPR15375 MPR15376 MPR15371 MPR15372 MPR15373 MPR15374 MPR15385 - -
IC Type 27C1024 27C1024 27C4200 27C4200 27C040 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 -
OutRunners EPR15618 EPR15619 EPR15538 EPR15539 EPR15550 MPR15548 MPR15549 MPR15540 MPR15541 MPR15542 MPR15543 MPR15544 MPR15545 MPR15546 MPR15547 MPR15551 MPR15552 -
IC Type 27C2048 27C2048 - - 27C1000 534200 534200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 8316200 -
Hard Dunk EPR16512 EPR16509 - - EPR16505 MPR16503 MPR16504 MPR16495 MPR16496 MPR16497 MPR16498 MPR16499 MPR16500 MPR16501 MPR16502 MPR16506 MPR16507 -
Hard Dunk (J) EPR16508 EPR16509 - - EPR16505 MPR16503 MPR16504 MPR16495 MPR16496 MPR16497 MPR16498 MPR16499 MPR16500 MPR16501 MPR16502 MPR16506 MPR16507 -
IC Type 27C2048 27C2048 27C4200 27C4200 27C1000 27C160 27C160 27C160 27C160 27C160 27C160 27C160 27C160 27C160 27C160 27C160 27C160 -
Stadium Cross EPR15093 EPR15094 EPR15018 EPR15019 EPR15192 EPR15020 EPR15021 EPR15022 EPR15023 EPR15024 EPR15025 EPR15026 EPR15027 EPR15028 EPR15029 EPR15031 EPR15032 -
System 32 Multi COMM board
--------------------------
SEGA 1992 837-8792
sticker: 837-9016-03
|--------------------------------------------------------|
| CN3 CN4 |
| |
| 32MHz JP1(1-2) |
| Z80 MB89374 MB89237A MB8421 |
| |
| JP2(1-2) |
| EPR-15033.IC17 |
| JP3(2-3) |
| JP4(1-2) |
| 8464 GAL16V8 GAL16V8 |
| (315-5610) (315-5506) |
| CN1 CN2 |
| CN8 CN9 |
|--------------------------------------------------------|
EPR-15033 - AM27C100 EPROM found on Stadium Cross
MB89374 - Fujitsu MB89374 Data Link Controller. Clock input 8MHz [32/4]
MB89237A - Fujitsu MB89237A DMA Controller
8464 - Fujitsu MB8464 8k x8 SRAM
CN8 - TX connector
CN9 - RX connector
CN1-4 - Joins to Main Board. Connections on top allow plugging in the ROM PCB
*********************************************************************************************
Alien 3 The Gun
The PCB number is 837-7428-03 171-5964-02B
The board matches the documented one for Slipstream in all aspects except
the Sega PCM sound chip is numbered 315-5476A (on Slipstream it's ASSP 5C105)
The EEPROM is a 93C45 at location IC76
The ROM PCB number is 'SYSTEM32 837-8393-01 16M ROM BD'
and the sticker number is '837-9878-02'
The PAL on the ROM board is a GAL16V8 at IC23 and marked '315-5552'
The correct ROM names are....
EPR-15943.IC17 - Main Program
EPR-15942.IC8 |
MPR-15855.IC18 |
MPR-15854.IC9 /
EPR-15859.IC36 - Sound Program
MPR-15858.IC35 - Sound Data
MPR-15857.IC34 |
MPR-15856.IC24 /
MPR-15863.IC14 - Tiles
MPR-15862.IC5 /
MPR-15864.IC32 - Sprites
MPR-15866.IC30 |
MPR-15868.IC28 |
MPR-15870.IC26 |
MPR-15865.IC31 |
MPR-15867.IC29 |
MPR-15869.IC27 |
MPR-15871.IC25 /
93C45_EEPROM.IC76
Alien 3 The Gun Jumpers:
JP1: 2-3
JP2: 2-3
JP3: 1-2
JP4: 1-2
JP5: 1-2
JP6: 1-2
JP7: 1-2
JP8: 1-2
JP9: 2-3
JP10: 2-3
JP11: 2-3
JP12: 1-2
JP13: 2-3
JP14: 1-2
JP15: 2-3
JP16: 1-2
JP17: 2-3
JP18: 1-2
JP19: 1-2
JP20: 2-3
JP21: 1-2
JP22: 2-3
JP23: 2-3
JP24: 1-2
The main board uses the standard I/O board 837-7536 for the gun controls.
*********************************************************************************************
Dark Edge
The PCB number is 171-5964-02B-K (i.e. manufactured in Korea)
The board matches the documented one for Slipstream in all aspects except
the Sega PCM sound chip is numbered 315-5476A (on Slipstream it's ASSP 5C105)
The EEPROM is a 93C45 at location IC76
The ROM PCB number is 'SYSTEM32 837-8393 16M ROM BD'
No game sticker is present.
The PAL on the ROM board is a GAL16V8 at IC23 and marked '315-5552'
The only difference between this board and Alien 3 The Gun is the sockets at
IC9, IC17 & IC18 are not populated. And of course there's a FD1149 security
module 317-0204.
Note the battery is easily accessible from underneath the module. The module is not
sealed and the lower cover snaps off easily.
The battery can not be changed but it is easy to solder wires to the plus/minus terminals
and then wire in a new 3V coin battery and the module will keep going for a few more years.
If the battery needs updating again do not remove any of the existing batteries otherwise
the PCB will die instantly. Just solder in a new battery to the same wires.
Always solder the battery plus to plus and minus to minus. If it's wired in plus to minus
the voltage will double to 6V.
If you have a System 32 board with an FD1149 add another new battery now!
ROM Types:
Main program ROM at IC8 is 27C240
Sound Program at IC36 is 27C100
Sound Data at IC35,34,24 are 838000
Tiles are 834200
Sprites are 8316200
Dark Edge Jumpers:
JP1: 2-3
JP2: 2-3
JP3: 1-2
JP4: 1-2
JP5: 2-3
JP6: 2-3
JP7: 1-2
JP8: 1-2
JP9: 1-2
JP10: 1-2
JP11: 2-3
JP12: 1-2
JP13: 2-3
JP14: 1-2
JP15: 2-3
JP16: 1-2
JP17: 1-2
JP18: 2-3
JP19: 1-2
JP20: 2-3
JP21: 1-2
JP22: 2-3
JP23: 2-3
JP24: 2-3
Extra Controls PCB
------------------
837-7968
|------------------------|
|CN2 PC817(x5) |
| |
| CN3 MB89255B|
| |
| 74F139|
|CN4 A1603C JP1234|
|CN5 CN1 |
|------------------------|
Notes:
CN3 - Multi-pin connector for extra controls (most likely for buttons only)
CN2/4/5 - Purpose unknown (not used on Dark Edge)
CN1 - Connector joining to CNA on main PCB
MB89255B - Fujitsu MB89255B Parallel Data I/O Interface (8-bit data bus & 3x 8-bit parallel I/O ports)
This chip is very small and is a SSOP40 package. The chip is functionally compatible with Intel 8255A.
(The equivalent TMP82C55AM-10 sometimes replaces this on other games using the 837-7968 board.)
A1603C - NEC uPA1603C Quad Monolithic N-Channel Power MOS FET Array
JP1234 - Four 2-pin jumpers. JP3 is shorted, the others are not shorted
JP1/2/3/4 are tied to the 74F139 pins 4,5,6,7 respectively. The 74F139 is tied to CN1 and the MB89255B
Pin 1 of the jumpers is common to all and is tied to pin 6 of the MB89255B (Chip Select)
*********************************************************************************************
On "Super Visual Football: European Sega Cup" and "JLEAGUE" :
JLEAGUE was the original code developed and released in early
1994 in Japan which than got translated and updated to be
released as the European Sega Cup.
So, JLEAGUE is the Original.
and
"Super Visual Football: European Sega Cup" is the clone.
My source of information?
I wrote the simulation ( in assembly ) while working in the SEGA
Haneda ( Tokyo ) office in 1993. We even filed a patent on the
team/individual player task synchronization. After I finished JLEAGE,
we handed it off to the satellite groups for localization.
Cheers,
MIB.42
***************************************************************************
Output Notes:
All outputs are hooked up properly with the following exceptions:
radm: Motors aren't hooked up, as the board isn't emulated. Also the 2nd and 3rd lamps "die" when the cabinet dip is set to deluxe.
They probably get moved over to the motor driver board.
radr: See radm
kokoroj: This driver isn't finished enough to flesh out the outputs, but a space has been reserved in the output functions.
jpark: Since the piston driver board isn't fully emulated, they aren't hooked up. offset 0c of the common chip function seems to have something to do with it.
orunners: Interleaved with the dj and << >> buttons is the data the drives the lcd display.
****************************************************************************/
#include "emu.h"
#include "includes/segas32.h"
#include "bus/scsi/scsi.h"
#include "bus/scsi/scsicd.h"
#include "cpu/z80/z80.h"
#include "cpu/v60/v60.h"
#include "cpu/nec/v25.h"
#include "cpu/upd7725/upd7725.h"
#include "machine/cxd1095.h"
#include "machine/eepromser.h"
#include "machine/i8255.h"
#include "machine/mb8421.h"
#include "machine/mb89352.h"
#include "machine/msm6253.h"
#include "machine/upd4701.h"
#include "machine/315_5296.h"
#include "sound/2612intf.h"
#include "sound/rf5c68.h"
#include "rendlay.h"
#include "speaker.h"
#include "radr.lh"
/*
* TODO: Kokoroji hangs if CD comms are handled with current mb89352 core.
* We currently hide this behind a compile switch to aid development
*/
#define S32_KOKOROJI_TEST_CD 0
DEFINE_DEVICE_TYPE(SEGA_S32_PCB, segas32_state, "segas32_pcb", "Sega System 32 PCB")
segas32_state::segas32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_state(mconfig, SEGA_S32_PCB, tag, owner, clock, false)
{
}
segas32_state::segas32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool is_multi32)
: device_t(mconfig, type, tag, owner, clock)
, m_z80_shared_ram(*this,"z80_shared_ram")
, m_system32_workram(*this,"workram")
, m_videoram(*this,"videoram", 0)
, m_spriteram(*this,"spriteram", 0)
, m_soundram(*this, "soundram")
, m_paletteram(*this,"paletteram.%u", 0, uint8_t(0))
, m_maincpu(*this, "maincpu")
, m_soundcpu(*this, "soundcpu")
, m_multipcm(*this, "sega")
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_irq_timer_0(*this, "v60_irq0")
, m_irq_timer_1(*this, "v60_irq1")
, m_s32comm(*this, "s32comm")
, m_sprite_region(*this, "sprites")
, m_maincpu_region(*this, "maincpu")
, m_soundrom_bank(*this, "soundbank")
, m_multipcm_bank_hi(*this, "multipcmbankhi")
, m_multipcm_bank_lo(*this, "multipcmbanklo")
, m_is_multi32(is_multi32)
{
}
/*************************************
*
* Constants
*
*************************************/
#define MASTER_CLOCK 32215900
#define RFC_CLOCK XTAL(50'000'000)
#define MULTI32_CLOCK XTAL(40'000'000)
#define TIMER_0_CLOCK ((MASTER_CLOCK/2)/2048) /* confirmed */
#define TIMER_1_CLOCK ((RFC_CLOCK/16)/256) /* confirmed */
#define MAIN_IRQ_VBSTART 0
#define MAIN_IRQ_VBSTOP 1
#define MAIN_IRQ_SOUND 2
#define MAIN_IRQ_TIMER0 3
#define MAIN_IRQ_TIMER1 4
#define SOUND_IRQ_YM3438 0
#define SOUND_IRQ_V60 1
/*************************************
*
* Machine init
*
*************************************/
void segas32_v25_state::device_start()
{
segas32_4player_state::device_start();
decrypt_protrom();
}
void segas32_cd_state::device_start()
{
segas32_state::device_start();
m_lamps.resolve();
}
void sega_multi32_analog_state::device_start()
{
sega_multi32_state::device_start();
m_analog_bank = 0;
}
void segas32_state::device_reset()
{
/* initialize the interrupt controller */
memset(m_v60_irq_control, 0xff, sizeof(m_v60_irq_control));
/* allocate timers */
m_v60_irq_timer[0] = m_irq_timer_0;
m_v60_irq_timer[1] = m_irq_timer_1;
/* clear IRQ lines */
m_maincpu->set_input_line(0, CLEAR_LINE);
}
/*************************************
*
* Interrupt controller
*
*************************************/
void segas32_state::update_irq_state()
{
uint8_t effirq = m_v60_irq_control[7] & ~m_v60_irq_control[6] & 0x1f;
int vector;
/* loop over interrupt vectors, finding the highest priority one with */
/* an unmasked interrupt pending */
for (vector = 0; vector < 5; vector++)
if (effirq & (1 << vector))
{
m_maincpu->set_input_line_and_vector(0, ASSERT_LINE, vector); // V60
break;
}
/* if we didn't find any, clear the interrupt line */
if (vector == 5)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
void segas32_state::signal_v60_irq(int which)
{
int i;
/* see if this interrupt input is mapped to any vectors; if so, mark them */
for (i = 0; i < 5; i++)
if (m_v60_irq_control[i] == which)
m_v60_irq_control[7] |= 1 << i;
update_irq_state();
}
TIMER_DEVICE_CALLBACK_MEMBER(segas32_state::signal_v60_irq_callback)
{
signal_v60_irq(param);
}
READ8_MEMBER(segas32_state::int_control_r)
{
switch (offset)
{
case 8:
/* fix me - should return timer count down value */
break;
case 10:
/* fix me - should return timer count down value */
break;
}
/* return all F's for everything except timer values */
return 0xff;
}
WRITE8_MEMBER(segas32_state::int_control_w)
{
int duration;
// logerror("%06X:int_control_w(%X) = %02X\n", m_maincpu->pc(), offset, data);
switch (offset)
{
case 0:
case 1:
case 2:
case 3:
case 4: /* vectors */
m_v60_irq_control[offset] = data;
break;
case 5: /* unknown */
m_v60_irq_control[offset] = data;
break;
case 6: /* mask */
m_v60_irq_control[offset] = data;
update_irq_state();
break;
case 7: /* acknowledge */
m_v60_irq_control[offset] &= data;
update_irq_state();
break;
case 8:
case 9: /* timer 0 count */
m_v60_irq_control[offset] = data;
duration = m_v60_irq_control[8] + ((m_v60_irq_control[9] << 8) & 0xf00);
if (duration)
{
attotime period = attotime::from_hz(TIMER_0_CLOCK) * duration;
m_v60_irq_timer[0]->adjust(period, MAIN_IRQ_TIMER0);
}
break;
case 10:
case 11: /* timer 1 count */
m_v60_irq_control[offset] = data;
duration = m_v60_irq_control[10] + ((m_v60_irq_control[11] << 8) & 0xf00);
if (duration)
{
attotime period = attotime::from_hz(TIMER_1_CLOCK) * duration;
m_v60_irq_timer[1]->adjust(period, MAIN_IRQ_TIMER1);
}
break;
case 12:
case 13:
case 14:
case 15: /* signal IRQ to sound CPU */
signal_sound_irq(SOUND_IRQ_V60);
break;
}
}
TIMER_CALLBACK_MEMBER(segas32_state::end_of_vblank_int)
{
signal_v60_irq(MAIN_IRQ_VBSTOP);
system32_set_vblank(0);
}
INTERRUPT_GEN_MEMBER(segas32_state::start_of_vblank_int)
{
signal_v60_irq(MAIN_IRQ_VBSTART);
system32_set_vblank(1);
m_vblank_end_int_timer->adjust(m_screen->time_until_pos(0));
if (m_system32_prot_vblank)
(this->*m_system32_prot_vblank)();
if (m_s32comm != nullptr)
m_s32comm->check_vint_irq();
}
/*************************************
*
* I/O chip
*
*************************************/
WRITE8_MEMBER(segas32_state::misc_output_0_w)
{
if (m_sw1_output)
(this->*m_sw1_output)(0, data);
//machine().bookkeeping().coin_lockout_w(1 + 2*0, data & 0x08);
//machine().bookkeeping().coin_lockout_w(0 + 2*0, data & 0x04);
machine().bookkeeping().coin_counter_w(1 + 2*0, data & 0x02);
machine().bookkeeping().coin_counter_w(0 + 2*0, data & 0x01);
}
WRITE8_MEMBER(segas32_state::misc_output_1_w)
{
if (m_sw1_output)
(this->*m_sw1_output)(1, data);
//machine().bookkeeping().coin_lockout_w(1 + 2*1, data & 0x08);
//machine().bookkeeping().coin_lockout_w(0 + 2*1, data & 0x04);
machine().bookkeeping().coin_counter_w(1 + 2*1, data & 0x02);
machine().bookkeeping().coin_counter_w(0 + 2*1, data & 0x01);
}
WRITE8_MEMBER(segas32_state::sw2_output_0_w)
{
if (m_sw2_output)
(this->*m_sw2_output)(0, data);
}
WRITE8_MEMBER(segas32_state::sw2_output_1_w)
{
if (m_sw2_output)
(this->*m_sw2_output)(1, data);
}
WRITE8_MEMBER(segas32_state::tilebank_external_w)
{
m_system32_tilebank_external = data;
}
template<int Which>
WRITE_LINE_MEMBER(segas32_state::display_enable_w)
{
m_system32_displayenable[Which] = state;
}
/*************************************
*
* Random number generator
*
*************************************/
WRITE16_MEMBER(segas32_state::random_number_w)
{
// osd_printf_debug("%06X:random_seed_w(%04X) = %04X & %04X\n", m_maincpu->pc(), offset*2, data, mem_mask);
}
READ16_MEMBER(segas32_state::random_number_r)
{
return machine().rand();
}
/*************************************
*
* Sound communications
*
*************************************/
READ8_MEMBER(segas32_state::shared_ram_r)
{
return m_z80_shared_ram[offset];
}
WRITE8_MEMBER(segas32_state::shared_ram_w)
{
m_z80_shared_ram[offset] = data;
}
/*************************************
*
* Sound interrupt controller
*
*************************************/
void segas32_state::update_sound_irq_state()
{
uint8_t effirq = m_sound_irq_input & ~m_sound_irq_control[3] & 0x07;
int vector;
/* loop over interrupt vectors, finding the highest priority one with */
/* an unmasked interrupt pending */
for (vector = 0; vector < 3; vector++)
if (effirq & (1 << vector))
{
m_soundcpu->set_input_line_and_vector(0, ASSERT_LINE, 2 * vector); // Z80
break;
}
/* if we didn't find any, clear the interrupt line */
if (vector == 3)
m_soundcpu->set_input_line(0, CLEAR_LINE);
}
void segas32_state::signal_sound_irq(int which)
{
/* see if this interrupt input is mapped to any vectors; if so, mark them */
for (int i = 0; i < 3; i++)
if (m_sound_irq_control[i] == which)
m_sound_irq_input |= 1 << i;
update_sound_irq_state();
}
void segas32_state::clear_sound_irq(int which)
{
for (int i = 0; i < 3; i++)
if (m_sound_irq_control[i] == which)
m_sound_irq_input &= ~(1 << i);
update_sound_irq_state();
}
WRITE8_MEMBER(segas32_state::sound_int_control_lo_w)
{
/* odd offsets are interrupt acks */
if (offset & 1)
{
m_sound_irq_input &= data;
update_sound_irq_state();
}
/* high offsets signal an IRQ to the v60 */
if (offset & 4)
signal_v60_irq(MAIN_IRQ_SOUND);
}
WRITE8_MEMBER(segas32_state::sound_int_control_hi_w)
{
m_sound_irq_control[offset] = data;
update_sound_irq_state();
}
WRITE_LINE_MEMBER(segas32_state::ym3438_irq_handler)
{
if (state)
signal_sound_irq(SOUND_IRQ_YM3438);
else
clear_sound_irq(SOUND_IRQ_YM3438);
}
/*************************************
*
* Sound banking
*
*************************************/
WRITE8_MEMBER(segas32_state::sound_bank_lo_w)
{
m_sound_bank = (m_sound_bank & ~0x3f) | (data & 0x3f);
m_soundrom_bank->set_entry(m_sound_bank);
}
WRITE8_MEMBER(segas32_state::sound_bank_hi_w)
{
m_sound_bank = (m_sound_bank & 0x3f) | ((data & 0x04) << 4) | ((data & 0x03) << 7);
m_soundrom_bank->set_entry(m_sound_bank);
}
WRITE8_MEMBER(segas32_state::multipcm_bank_w)
{
m_multipcm_bank_hi->set_entry((data >> 3) & 7);
m_multipcm_bank_lo->set_entry(data & 7);
}
WRITE8_MEMBER(segas32_state::scross_bank_w)
{
m_multipcm_bank_hi->set_entry(data & 7);
m_multipcm_bank_lo->set_entry(data & 7);
}
/*************************************
*
* Sound hack (not protection)
*
*************************************/
READ8_MEMBER(segas32_state::sound_dummy_r)
{
return m_sound_dummy_value;
}
WRITE8_MEMBER(segas32_state::sound_dummy_w)
{
m_sound_dummy_value = data;
}
/*************************************
*
* Common palette handling
*
*************************************/
inline uint16_t segas32_state::xBBBBBGGGGGRRRRR_to_xBGRBBBBGGGGRRRR(uint16_t value)
{
int r = (value >> 0) & 0x1f;
int g = (value >> 5) & 0x1f;
int b = (value >> 10) & 0x1f;
value = (value & 0x8000) | ((b & 0x01) << 14) | ((g & 0x01) << 13) | ((r & 0x01) << 12);
value |= ((b & 0x1e) << 7) | ((g & 0x1e) << 3) | ((r & 0x1e) >> 1);
return value;
}
inline uint16_t segas32_state::xBGRBBBBGGGGRRRR_to_xBBBBBGGGGGRRRRR(uint16_t value)
{
int r = ((value >> 12) & 0x01) | ((value << 1) & 0x1e);
int g = ((value >> 13) & 0x01) | ((value >> 3) & 0x1e);
int b = ((value >> 14) & 0x01) | ((value >> 7) & 0x1e);
return (value & 0x8000) | (b << 10) | (g << 5) | (r << 0);
}
inline void segas32_state::update_color(int offset, uint16_t data)
{
/* note that since we use this RAM directly, we don't technically need */
/* to call palette_set_color() at all; however, it does give us that */
/* nice display when you hit F4, which is useful for debugging */
/* set the color */
m_palette->set_pen_color(offset, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10));
}
/*************************************
*
* Palette RAM access
*
*************************************/
template<int Which>
READ16_MEMBER(segas32_state::paletteram_r)
{
int convert;
/* the lower half of palette RAM is formatted xBBBBBGGGGGRRRRR */
/* the upper half of palette RAM is formatted xBGRBBBBGGGGRRRR */
/* we store everything if the first format, and convert accesses to the other format */
/* on the fly */
convert = (offset & 0x4000);
offset &= 0x3fff;
if (!convert)
return m_paletteram[Which][offset];
else
return xBBBBBGGGGGRRRRR_to_xBGRBBBBGGGGRRRR(m_paletteram[Which][offset]);
}
template<int Which>
WRITE16_MEMBER(segas32_state::paletteram_w)
{
uint16_t value;
int convert;
/* the lower half of palette RAM is formatted xBBBBBGGGGGRRRRR */
/* the upper half of palette RAM is formatted xBGRBBBBGGGGRRRR */
/* we store everything if the first format, and convert accesses to the other format */
/* on the fly */
convert = (offset & 0x4000);
offset &= 0x3fff;
/* read, modify, and write the new value, updating the palette */
value = m_paletteram[Which][offset];
if (convert) value = xBBBBBGGGGGRRRRR_to_xBGRBBBBGGGGRRRR(value);
COMBINE_DATA(&value);
if (convert) value = xBGRBBBBGGGGRRRR_to_xBBBBBGGGGGRRRRR(value);
m_paletteram[Which][offset] = value;
update_color(0x4000*Which + offset, value);
/* if blending is enabled, writes go to both halves of palette RAM */
if (m_mixer_control[Which][0x4e/2] & 0x0880)
{
offset ^= 0x2000;
/* read, modify, and write the new value, updating the palette */
value = m_paletteram[Which][offset];
if (convert) value = xBBBBBGGGGGRRRRR_to_xBGRBBBBGGGGRRRR(value);
COMBINE_DATA(&value);
if (convert) value = xBGRBBBBGGGGRRRR_to_xBBBBBGGGGGRRRRR(value);
m_paletteram[Which][offset] = value;
update_color(0x4000*Which + offset, value);
}
}
/*************************************
*
* Mixer control registers
*
*************************************/
template<int Which>
READ16_MEMBER(segas32_state::mixer_r)
{
return m_mixer_control[Which][offset];
}
template<int Which>
WRITE16_MEMBER(segas32_state::mixer_w)
{
COMBINE_DATA(&m_mixer_control[Which][offset]);
}
/*************************************
*
* Main CPU memory handlers
*
*************************************/
void segas32_state::system32_map(address_map &map)
{
map.unmap_value_high();
map(0x000000, 0x1fffff).rom();
map(0x200000, 0x20ffff).mirror(0x0f0000).ram().share("workram");
map(0x300000, 0x31ffff).mirror(0x0e0000).rw(FUNC(segas32_state::videoram_r), FUNC(segas32_state::videoram_w)).share("videoram");
map(0x400000, 0x41ffff).mirror(0x0e0000).rw(FUNC(segas32_state::spriteram_r), FUNC(segas32_state::spriteram_w)).share("spriteram");
map(0x500000, 0x50000f).mirror(0x0ffff0).rw(FUNC(segas32_state::sprite_control_r), FUNC(segas32_state::sprite_control_w)).umask16(0x00ff);
map(0x600000, 0x60ffff).mirror(0x0e0000).rw(FUNC(segas32_state::paletteram_r<0>), FUNC(segas32_state::paletteram_w<0>)).share("paletteram.0");
map(0x610000, 0x61007f).mirror(0x0eff80).rw(FUNC(segas32_state::mixer_r<0>), FUNC(segas32_state::mixer_w<0>));
map(0x700000, 0x701fff).mirror(0x0fe000).rw(FUNC(segas32_state::shared_ram_r), FUNC(segas32_state::shared_ram_w));
map(0x800000, 0x800fff).rw("s32comm", FUNC(s32comm_device::share_r), FUNC(s32comm_device::share_w)).umask16(0x00ff);
map(0x801000, 0x801000).rw("s32comm", FUNC(s32comm_device::cn_r), FUNC(s32comm_device::cn_w));
map(0x801002, 0x801002).rw("s32comm", FUNC(s32comm_device::fg_r), FUNC(s32comm_device::fg_w));
map(0xc00000, 0xc0001f).mirror(0x0fff80).rw("io_chip", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
// 0xc00040-0xc0007f - I/O expansion area
map(0xd00000, 0xd0000f).mirror(0x07fff0).rw(FUNC(segas32_state::int_control_r), FUNC(segas32_state::int_control_w));
map(0xd80000, 0xdfffff).rw(FUNC(segas32_state::random_number_r), FUNC(segas32_state::random_number_w));
map(0xf00000, 0xffffff).rom().region("maincpu", 0);
}
void segas32_state::multi32_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xffffff);
map(0x000000, 0x1fffff).rom();
map(0x200000, 0x21ffff).mirror(0x0e0000).ram();
map(0x300000, 0x31ffff).mirror(0x0e0000).rw(FUNC(segas32_state::videoram_r), FUNC(segas32_state::videoram_w)).share("videoram");
map(0x400000, 0x41ffff).mirror(0x0e0000).rw(FUNC(segas32_state::spriteram_r), FUNC(segas32_state::spriteram_w)).share("spriteram");
map(0x500000, 0x50000f).mirror(0x0ffff0).rw(FUNC(segas32_state::sprite_control_r), FUNC(segas32_state::sprite_control_w)).umask32(0x00ff00ff);
map(0x600000, 0x60ffff).mirror(0x060000).rw(FUNC(segas32_state::paletteram_r<0>), FUNC(segas32_state::paletteram_w<0>)).share("paletteram.0");
map(0x610000, 0x61007f).mirror(0x06ff80).w(FUNC(segas32_state::mixer_w<0>));
map(0x680000, 0x68ffff).mirror(0x060000).rw(FUNC(segas32_state::paletteram_r<1>), FUNC(segas32_state::paletteram_w<1>)).share("paletteram.1");
map(0x690000, 0x69007f).mirror(0x06ff80).w(FUNC(segas32_state::mixer_w<1>));
map(0x700000, 0x701fff).mirror(0x0fe000).rw(FUNC(segas32_state::shared_ram_r), FUNC(segas32_state::shared_ram_w));
map(0x800000, 0x800fff).rw("s32comm", FUNC(s32comm_device::share_r), FUNC(s32comm_device::share_w)).umask32(0x00ff00ff);
map(0x801000, 0x801000).rw("s32comm", FUNC(s32comm_device::cn_r), FUNC(s32comm_device::cn_w));
map(0x801002, 0x801002).rw("s32comm", FUNC(s32comm_device::fg_r), FUNC(s32comm_device::fg_w));
map(0xc00000, 0xc0001f).mirror(0x07ff80).rw("io_chip_0", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask32(0x00ff00ff);
// 0xc00040-0xc0007f - I/O expansion area 0
map(0xc80000, 0xc8001f).mirror(0x07ff80).rw("io_chip_1", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask32(0x00ff00ff);
// 0xc80040-0xc8007f - I/O expansion area 1
map(0xd00000, 0xd0000f).mirror(0x07fff0).rw(FUNC(segas32_state::int_control_r), FUNC(segas32_state::int_control_w));
map(0xd80000, 0xdfffff).rw(FUNC(segas32_state::random_number_r), FUNC(segas32_state::random_number_w));
map(0xf00000, 0xffffff).rom().region("maincpu", 0);
}
/*************************************
*
* Sound CPU memory handlers
*
*************************************/
void segas32_state::system32_sound_map(address_map &map)
{
map(0x0000, 0x9fff).rom().region("soundcpu", 0);
map(0xa000, 0xbfff).bankr("soundbank");
map(0xc000, 0xc00f).mirror(0x0ff0).w("rfsnd", FUNC(rf5c68_device::rf5c68_w));
map(0xd000, 0xdfff).rw("rfsnd", FUNC(rf5c68_device::rf5c68_mem_r), FUNC(rf5c68_device::rf5c68_mem_w));
map(0xe000, 0xffff).ram().share("z80_shared_ram");
}
void segas32_state::system32_sound_portmap(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
map(0x80, 0x83).mirror(0x0c).rw("ym1", FUNC(ym3438_device::read), FUNC(ym3438_device::write));
map(0x90, 0x93).mirror(0x0c).rw("ym2", FUNC(ym3438_device::read), FUNC(ym3438_device::write));
map(0xa0, 0xaf).w(FUNC(segas32_state::sound_bank_lo_w));
map(0xb0, 0xbf).w(FUNC(segas32_state::sound_bank_hi_w));
map(0xc0, 0xcf).w(FUNC(segas32_state::sound_int_control_lo_w));
map(0xd0, 0xd3).mirror(0x04).w(FUNC(segas32_state::sound_int_control_hi_w));
map(0xf1, 0xf1).rw(FUNC(segas32_state::sound_dummy_r), FUNC(segas32_state::sound_dummy_w));
}
void segas32_state::rf5c68_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0xffff).ram().share("soundram");
}
void segas32_state::multi32_sound_map(address_map &map)
{
map(0x0000, 0x9fff).rom().region("soundcpu", 0);
map(0xa000, 0xbfff).bankr("soundbank");
map(0xc000, 0xdfff).rw("sega", FUNC(multipcm_device::read), FUNC(multipcm_device::write));
map(0xe000, 0xffff).ram().share("z80_shared_ram");
}
void segas32_state::multi32_sound_portmap(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
map(0x80, 0x83).mirror(0x0c).rw("ymsnd", FUNC(ym3438_device::read), FUNC(ym3438_device::write));
map(0xa0, 0xaf).w(FUNC(segas32_state::sound_bank_lo_w));
map(0xb0, 0xbf).w(FUNC(segas32_state::multipcm_bank_w));
map(0xc0, 0xcf).w(FUNC(segas32_state::sound_int_control_lo_w));
map(0xd0, 0xd3).mirror(0x04).w(FUNC(segas32_state::sound_int_control_hi_w));
map(0xf1, 0xf1).rw(FUNC(segas32_state::sound_dummy_r), FUNC(segas32_state::sound_dummy_w));
}
void segas32_state::multipcm_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x17ffff).bankr("multipcmbanklo");
map(0x180000, 0x1fffff).bankr("multipcmbankhi");
}
/*************************************
*
* V25 Protection CPU memory handlers
*
*************************************/
void segas32_state::v25_map(address_map &map)
{
map(0x00000, 0x0ffff).rom().region("mcu", 0);
map(0x10000, 0x1ffff).rw("dpram", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w));
map(0xf0000, 0xfffff).rom().region("mcu", 0);
}
/*************************************
*
* UPD7725 DSP memory handlers
*
*************************************/
void segas32_state::upd7725_prg_map(address_map &map)
{
map(0x0000, 0x07ff).rom().region("dspprg", 0);
}
void segas32_state::upd7725_data_map(address_map &map)
{
map(0x0000, 0x03ff).rom().region("dspdata", 0);
}
/*************************************
*
* Generic port definitions
*
*************************************/
static INPUT_PORTS_START( system32_generic )
PORT_START("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_START("mainpcb:P2_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_START("mainpcb:PORTC_A")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:SERVICE12_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_LOW )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("mainpcb:SERVICE34_A")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Push SW1 (Service)") // on PCB
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Push SW2 (Test)") // on PCB
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("mainpcb:eeprom", eeprom_serial_93cxx_device, do_read)
INPUT_PORTS_END
static INPUT_PORTS_START( system32_generic_slave )
PORT_START("slavepcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_START("slavepcb:P2_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_START("slavepcb:PORTC_A")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("slavepcb:SERVICE12_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F1) PORT_NAME("slavepcb:Service Mode")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("slavepcb:SERVICE34_A")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("slavepcb:Push SW1 (Service)") PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("slavepcb:Push SW2 (Test)") PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("slavepcb:eeprom", eeprom_serial_93cxx_device, do_read)
INPUT_PORTS_END
static INPUT_PORTS_START( multi32_generic )
PORT_INCLUDE( system32_generic )
PORT_START("mainpcb:P1_B")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:P2_B")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:PORTC_B")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:SERVICE12_B")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F1) PORT_NAME("Service Mode 2")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("mainpcb:SERVICE34_B")
PORT_BIT( 0x4f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Push SW3 (Service)") PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Push SW4 (Test)") PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("mainpcb:eeprom", eeprom_serial_93cxx_device, do_read)
INPUT_PORTS_END
/*************************************
*
* Game-specific port definitions
*
*************************************/
static INPUT_PORTS_START( arescue )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE34_A")
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_REVERSE
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_INCLUDE( system32_generic_slave )
PORT_MODIFY("slavepcb:P1_A")
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_MODIFY("slavepcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("slavepcb:SERVICE12_A")
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("slavepcb:SERVICE34_A")
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("slavepcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(2)
PORT_START("slavepcb:ANALOG2")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_START("slavepcb:ANALOG3")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( alien3 )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5)
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_PLAYER(2)
PORT_START("mainpcb:ANALOG4")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( arabfgt )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:EXTRA1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_START("mainpcb:EXTRA2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_START("mainpcb:EXTRA3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( arabfgtu )
PORT_INCLUDE( arabfgt )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_MODIFY("mainpcb:EXTRA3")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
INPUT_PORTS_END
static INPUT_PORTS_START( brival )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:EXTRA1")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:EXTRA2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1)
PORT_START("mainpcb:EXTRA3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( darkedge )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_START("mainpcb:EXTRA1")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:EXTRA2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
PORT_START("mainpcb:EXTRA3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( dbzvrvs )
PORT_INCLUDE( system32_generic )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0xff, IPT_UNKNOWN )
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0xff, IPT_UNKNOWN )
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0xff, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( f1en )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("mainpcb:Gear Up")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("mainpcb:Gear Down")
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE34_A")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("mainpcb:Steering Wheel")
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("mainpcb:Gas Pedal")
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("mainpcb:Brake Pedal")
PORT_INCLUDE( system32_generic_slave )
PORT_MODIFY("slavepcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("slavepcb:Gear Up") PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("slavepcb:Gear Down") PORT_PLAYER(2)
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("slavepcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("slavepcb:SERVICE12_A")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("slavepcb:SERVICE34_A")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("slavepcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("slavepcb:Steering Wheel") PORT_PLAYER(2)
PORT_START("slavepcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("slavepcb:Gas Pedal") PORT_PLAYER(2)
PORT_START("slavepcb:ANALOG3")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("slavepcb:Brake Pedal") PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( f1lap )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("mainpcb:Gear Up")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("mainpcb:Gear Down")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_Z) PORT_NAME("mainpcb:Overtake")
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE34_A")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(20) PORT_NAME("mainpcb:Steering Wheel")
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(20) PORT_NAME("mainpcb:Gas Pedal")
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(50) PORT_KEYDELTA(20) PORT_NAME("mainpcb:Brake Pedal")
INPUT_PORTS_END
static INPUT_PORTS_START( ga2 )
PORT_INCLUDE( system32_generic )
PORT_START("mainpcb:EXTRA1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_START("mainpcb:EXTRA2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_START("mainpcb:EXTRA3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( ga2u )
PORT_INCLUDE( ga2 )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_MODIFY("mainpcb:EXTRA3")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
INPUT_PORTS_END
static INPUT_PORTS_START( harddunk )
PORT_INCLUDE( multi32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("mainpcb:P1_B")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_MODIFY("mainpcb:P2_B")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(5)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(5)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(5)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(5)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(5)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(5)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(5)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(5)
PORT_MODIFY("mainpcb:SERVICE12_B")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START5 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("mainpcb:EXTRA1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_START("mainpcb:EXTRA2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(6)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(6)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(6)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(6)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(6)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(6)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(6)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(6)
PORT_START("mainpcb:EXTRA3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START6 )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( holo )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( jpark )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:PORTC_A")
PORT_BIT( 0x07, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT ) PORT_NAME("Emergency") // recognized in input test only?
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5)
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_PLAYER(2)
PORT_START("mainpcb:ANALOG4")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( kokoroj2 )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
PORT_MODIFY("mainpcb:SERVICE34_A")
PORT_DIPNAME( 0x08, 0x00, "CD & Printer" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( orunners )
PORT_INCLUDE( multi32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_SPACE) /* shift up */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_LSHIFT) /* shift down */
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_Z) /* DJ/music */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_X) /* << */
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_C) /* >> */
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("mainpcb:P1_B")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_Q) /* shift up */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_W) /* shift down */
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("mainpcb:P2_B")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_R) /* DJ/music */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_T) /* << */
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_Y) /* >> */
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_START("mainpcb:ANALOG4")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_START("mainpcb:ANALOG7")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_START("mainpcb:ANALOG8")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( radm )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("mainpcb:Light")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("mainpcb:Wiper")
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE34_A")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
INPUT_PORTS_END
static INPUT_PORTS_START( radr )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("mainpcb:Gear Change") PORT_TOGGLE
PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE34_A")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "Transmission" )
PORT_DIPSETTING( 0x08, "Manual" )
PORT_DIPSETTING( 0x00, "Automatic" )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
INPUT_PORTS_END
static INPUT_PORTS_START( scross )
PORT_INCLUDE( multi32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_SPACE) /* P1 Attack */
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_LSHIFT) /* P1 Wheelie */
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_CODE(KEYCODE_LALT) /* P1 Brake */
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("mainpcb:P1_B")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_Q) /* P2 Attack */
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_W) /* P2 Wheelie */
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_CODE(KEYCODE_S) /* P2 Brake */
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(1)
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(2)
PORT_START("mainpcb:ANALOG4")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( slipstrm )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("mainpcb:Gear Change") PORT_TOGGLE
PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE34_A")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("mainpcb:ANALOG1")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_START("mainpcb:ANALOG2")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
PORT_START("mainpcb:ANALOG3")
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
INPUT_PORTS_END
static INPUT_PORTS_START( sonic )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
PORT_START("mainpcb:TRACKX1")
PORT_BIT( 0xfff, 0, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_REVERSE PORT_PLAYER(1)
PORT_START("mainpcb:TRACKY1")
PORT_BIT( 0xfff, 0, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_PLAYER(1)
PORT_START("mainpcb:TRACKX2")
PORT_BIT( 0xfff, 0, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_REVERSE PORT_PLAYER(2)
PORT_START("mainpcb:TRACKY2")
PORT_BIT( 0xfff, 0, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_PLAYER(2)
PORT_START("mainpcb:TRACKX3")
PORT_BIT( 0xfff, 0, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_REVERSE PORT_PLAYER(3)
PORT_START("mainpcb:TRACKY3")
PORT_BIT( 0xfff, 0, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_PLAYER(3)
INPUT_PORTS_END
static INPUT_PORTS_START( spidman )
PORT_INCLUDE( system32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("mainpcb:EXTRA1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_START("mainpcb:EXTRA2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_START("mainpcb:EXTRA3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( spidmanu )
PORT_INCLUDE( spidman )
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_MODIFY("mainpcb:EXTRA3")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
INPUT_PORTS_END
static INPUT_PORTS_START( svf )
PORT_INCLUDE( system32_generic )
INPUT_PORTS_END
static INPUT_PORTS_START( titlef )
PORT_INCLUDE( multi32_generic )
PORT_MODIFY("mainpcb:P1_A")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_PLAYER(1)
PORT_MODIFY("mainpcb:P2_A")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT ) PORT_PLAYER(1)
PORT_MODIFY("mainpcb:SERVICE12_A")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("mainpcb:P1_B")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_PLAYER(2)
PORT_MODIFY("mainpcb:P2_B")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT ) PORT_PLAYER(2)
PORT_MODIFY("mainpcb:SERVICE12_B")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/*************************************
*
* Graphics definitions
*
*************************************/
static const gfx_layout bgcharlayout =
{
16,16,
RGN_FRAC(1,1),
4,
{ STEP4(0,1) },
{ 0, 4, 16, 20, 8, 12, 24, 28, 32, 36, 48, 52, 40, 44, 56, 60 },
{ STEP16(0,4*16) },
16*64
};
static GFXDECODE_START( gfx_segas32 )
GFXDECODE_ENTRY( "gfx1", 0, bgcharlayout, 0x00, 0x3ff )
GFXDECODE_END
/*************************************
*
* Machine driver
*
*************************************/
void segas32_state::device_add_mconfig(machine_config &config)
{
/* basic machine hardware */
V60(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_state::system32_map);
m_maincpu->set_vblank_int("screen", FUNC(segas32_state::start_of_vblank_int));
Z80(config, m_soundcpu, MASTER_CLOCK/4);
m_soundcpu->set_addrmap(AS_PROGRAM, &segas32_state::system32_sound_map);
m_soundcpu->set_addrmap(AS_IO, &segas32_state::system32_sound_portmap);
sega_315_5296_device &io_chip(SEGA_315_5296(config, "io_chip", 0)); // unknown clock
io_chip.in_pa_callback().set_ioport("P1_A");
io_chip.in_pb_callback().set_ioport("P2_A");
io_chip.in_pc_callback().set_ioport("PORTC_A");
io_chip.out_pd_callback().set(FUNC(segas32_state::misc_output_0_w));
io_chip.out_pd_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(7);
io_chip.out_pd_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(5);
io_chip.out_pd_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(6);
io_chip.in_pe_callback().set_ioport("SERVICE12_A");
io_chip.in_pf_callback().set_ioport("SERVICE34_A");
io_chip.out_pg_callback().set(FUNC(segas32_state::sw2_output_0_w));
io_chip.out_ph_callback().set(FUNC(segas32_state::tilebank_external_w));
io_chip.out_cnt1_callback().set(FUNC(segas32_state::display_enable_w<0>));
io_chip.out_cnt2_callback().set_inputline(m_soundcpu, INPUT_LINE_RESET).invert();
EEPROM_93C46_16BIT(config, "eeprom");
TIMER(config, "v60_irq0").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
TIMER(config, "v60_irq1").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
/* video hardware */
GFXDECODE(config, m_gfxdecode, m_palette, gfx_segas32);
PALETTE(config, m_palette).set_entries(0x4000);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_size(52*8, 262);
m_screen->set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
m_screen->set_screen_update(FUNC(segas32_state::screen_update_system32));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
ym3438_device &ym1(YM3438(config, "ym1", MASTER_CLOCK/4));
ym1.irq_handler().set(FUNC(segas32_state::ym3438_irq_handler));
ym1.add_route(0, "lspeaker", 0.40);
ym1.add_route(1, "rspeaker", 0.40);
ym3438_device &ym2(YM3438(config, "ym2", MASTER_CLOCK/4));
ym2.add_route(0, "lspeaker", 0.40);
ym2.add_route(1, "rspeaker", 0.40);
rf5c68_device &rfsnd(RF5C68(config, "rfsnd", RFC_CLOCK/4));
rfsnd.add_route(0, "lspeaker", 0.55);
rfsnd.add_route(1, "rspeaker", 0.55);
rfsnd.set_addrmap(0, &segas32_state::rf5c68_map);
S32COMM(config, m_s32comm, 0);
}
DEFINE_DEVICE_TYPE(SEGA_S32_REGULAR_DEVICE, segas32_regular_state, "segas32_pcb_regular", "Sega System 32 regular PCB")
segas32_regular_state::segas32_regular_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_state(mconfig, SEGA_S32_REGULAR_DEVICE, tag, owner, clock, false)
{
}
void segas32_state::system32_analog_map(address_map &map)
{
map.unmap_value_high();
system32_map(map);
map(0xc00050, 0xc00057).mirror(0x0fff80).rw("adc", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::address_w)).umask16(0x00ff);
}
void segas32_analog_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_analog_state::system32_analog_map);
msm6253_device &adc(MSM6253(config, "adc", 0));
adc.set_input_tag<0>("ANALOG1");
adc.set_input_tag<1>("ANALOG2");
adc.set_input_tag<2>("ANALOG3");
adc.set_input_tag<3>("ANALOG4");
}
DEFINE_DEVICE_TYPE(SEGA_S32_ANALOG_DEVICE, segas32_analog_state, "segas32_pcb_analog", "Sega System 32 analog PCB")
segas32_analog_state::segas32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_analog_state(mconfig, SEGA_S32_ANALOG_DEVICE, tag, owner, clock)
{
}
segas32_analog_state::segas32_analog_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: segas32_state(mconfig, type, tag, owner, clock, false)
{
}
void segas32_trackball_state::system32_trackball_map(address_map &map)
{
map.unmap_value_high();
system32_map(map);
//map(0xc00040, 0xc0005f).mirror(0x0fff80).rw(FUNC(segas32_trackball_state::sonic_custom_io_r), FUNC(segas32_trackball_state::sonic_custom_io_w)).umask16(0x00ff);
map(0xc00040, 0xc00047).mirror(0x0fff80).rw("upd1", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
map(0xc00048, 0xc0004f).mirror(0x0fff80).rw("upd2", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
map(0xc00050, 0xc00057).mirror(0x0fff80).rw("upd3", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
}
void segas32_trackball_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_trackball_state::system32_trackball_map);
upd4701_device &upd1(UPD4701A(config, "upd1"));
upd1.set_portx_tag("TRACKX1");
upd1.set_porty_tag("TRACKY1");
upd4701_device &upd2(UPD4701A(config, "upd2"));
upd2.set_portx_tag("TRACKX2");
upd2.set_porty_tag("TRACKY2");
upd4701_device &upd3(UPD4701A(config, "upd3"));
upd3.set_portx_tag("TRACKX3");
upd3.set_porty_tag("TRACKY3");
// 837-8685 I/O board has an unpopulated space for a fourth UPD4701A
}
DEFINE_DEVICE_TYPE(SEGA_S32_TRACKBALL_DEVICE, segas32_trackball_state, "segas32_pcb_trackball", "Sega System 32 trackball PCB")
segas32_trackball_state::segas32_trackball_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_state(mconfig, SEGA_S32_TRACKBALL_DEVICE, tag, owner, clock, false)
{
}
void segas32_state::system32_4player_map(address_map &map)
{
map.unmap_value_high();
system32_map(map);
map(0xc00060, 0xc00067).mirror(0x0fff80).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff);
}
void segas32_4player_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_4player_state::system32_4player_map);
i8255_device &ppi(I8255A(config, "ppi"));
ppi.in_pa_callback().set_ioport("EXTRA1");
ppi.in_pb_callback().set_ioport("EXTRA2");
ppi.in_pc_callback().set_ioport("EXTRA3");
}
DEFINE_DEVICE_TYPE(SEGA_S32_4PLAYER_DEVICE, segas32_4player_state, "segas32_pcb_4player", "Sega System 32 4-player/fighting PCB")
segas32_4player_state::segas32_4player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_4player_state(mconfig, SEGA_S32_4PLAYER_DEVICE, tag, owner, clock)
{
}
segas32_4player_state::segas32_4player_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: segas32_state(mconfig, type, tag, owner, clock, false)
{
}
void segas32_state::ga2_main_map(address_map &map)
{
map.unmap_value_high();
system32_4player_map(map);
map(0xa00000, 0xa00fff).rw("dpram", FUNC(mb8421_device::right_r), FUNC(mb8421_device::right_w)).umask16(0x00ff);
}
void segas32_v25_state::device_add_mconfig(machine_config &config)
{
segas32_4player_state::device_add_mconfig(config);
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_v25_state::ga2_main_map);
MB8421(config, "dpram", 0);
/* add a V25 for protection */
v25_device &mcu(V25(config, "mcu", 10000000));
mcu.set_addrmap(AS_PROGRAM, &segas32_v25_state::v25_map);
}
DEFINE_DEVICE_TYPE(SEGA_S32_V25_DEVICE, segas32_v25_state, "segas32_pcb_v25", "Sega System 32 V25 PCB")
segas32_v25_state::segas32_v25_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_4player_state(mconfig, SEGA_S32_V25_DEVICE, tag, owner, clock)
{
}
void segas32_upd7725_state::device_add_mconfig(machine_config &config)
{
segas32_analog_state::device_add_mconfig(config);
/* add a upd7725; this is on the 837-8341 daughterboard which plugs into the socket on the master pcb's ROM board where an fd1149 could go */
upd7725_device &dsp(UPD7725(config, "dsp", 8000000)); // TODO: Find real clock speed for the upd7725; this is a canned oscillator on the 837-8341 pcb
dsp.set_addrmap(AS_PROGRAM, &segas32_upd7725_state::upd7725_prg_map);
dsp.set_addrmap(AS_DATA, &segas32_upd7725_state::upd7725_data_map);
dsp.set_disable(); // TODO: disable for now, needs DMA pins and interrupts implemented in upd7725 core
// TODO: find /INT source for upd7725
// TODO: figure out how the p0 and p1 lines from the upd7725 affect the mainboard; do they select one of four (or 8) latches to/from the mainboard?
// TODO: trace out the 837-8341 pcb
// See HLE of this dsp in /src/mame/machine/segas32.cpp : arescue_dsp_r and arescue_dsp_w
}
DEFINE_DEVICE_TYPE(SEGA_S32_UPD7725_DEVICE, segas32_upd7725_state, "segas32_pcb_upd7725", "Sega System 32 uPD7725 PCB")
segas32_upd7725_state::segas32_upd7725_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_analog_state(mconfig, SEGA_S32_UPD7725_DEVICE, tag, owner, clock)
{
}
WRITE8_MEMBER(segas32_cd_state::lamps1_w)
{
for (int i = 0; i < 8; i++)
m_lamps[i] = BIT(data, i);
}
WRITE8_MEMBER(segas32_cd_state::lamps2_w)
{
for (int i = 0; i < 8; i++)
m_lamps[8 + i] = BIT(data, i);
}
WRITE_LINE_MEMBER(segas32_cd_state::scsi_irq_w)
{
printf("%02x IRQ\n",state);
// TODO: sent!
}
WRITE_LINE_MEMBER(segas32_cd_state::scsi_drq_w)
{
printf("%02x DRQ\n",state);
}
void segas32_state::system32_cd_map(address_map &map)
{
map.unmap_value_high();
system32_map(map);
#if S32_KOKOROJI_TEST_CD
map(0xc00040, 0xc0005f).mirror(0x0fff80).rw("mb89352", FUNC(mb89352_device::mb89352_r), FUNC(mb89352_device::mb89352_w)).umask16(0x00ff);
#else
map(0xc00040, 0xc0005f).mirror(0x0fff80).noprw();
#endif
map(0xc00060, 0xc0006f).mirror(0x0fff80).rw("cxdio", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff);
}
void segas32_cd_state::cdrom_config(device_t *device)
{
cdda_device *cdda = device->subdevice<cdda_device>("cdda");
cdda->add_route(0, "^^lspeaker", 1.0);
cdda->add_route(1, "^^rspeaker", 1.0);
}
void segas32_cd_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_cd_state::system32_cd_map);
mb89352_device &scsictrl(MB89352A(config, "mb89352", 8000000));
scsictrl.set_scsi_port("scsi");
scsictrl.irq_cb().set(FUNC(segas32_cd_state::scsi_irq_w));
scsictrl.drq_cb().set(FUNC(segas32_cd_state::scsi_drq_w));
scsi_port_device &scsi(SCSI_PORT(config, "scsi"));
scsi.set_slot_device(1, "cdrom", SCSICD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
scsi.slot(1).set_option_machine_config("cdrom", cdrom_config);
cxd1095_device &cxdio(CXD1095(config, "cxdio", 0));
cxdio.out_porta_cb().set(FUNC(segas32_cd_state::lamps1_w));
cxdio.out_portb_cb().set(FUNC(segas32_cd_state::lamps2_w));
cxdio.in_portd_cb().set_constant(0xff); // Ports C-E used for IEEE-488 printer interface
}
DEFINE_DEVICE_TYPE(SEGA_S32_CD_DEVICE, segas32_cd_state, "segas32_pcb_cd", "Sega System 32 CD PCB")
segas32_cd_state::segas32_cd_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: segas32_state(mconfig, SEGA_S32_CD_DEVICE, tag, owner, clock, false)
, m_lamps(*this, "lamp%u", 0U)
{
}
void sega_multi32_state::device_add_mconfig(machine_config &config)
{
/* basic machine hardware */
V70(config, m_maincpu, MULTI32_CLOCK/2);
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_state::multi32_map);
m_maincpu->set_vblank_int("screen", FUNC(segas32_state::start_of_vblank_int));
Z80(config, m_soundcpu, MASTER_CLOCK/4);
m_soundcpu->set_addrmap(AS_PROGRAM, &sega_multi32_state::multi32_sound_map);
m_soundcpu->set_addrmap(AS_IO, &sega_multi32_state::multi32_sound_portmap);
sega_315_5296_device &io_chip_0(SEGA_315_5296(config, "io_chip_0", 0)); // unknown clock
io_chip_0.in_pa_callback().set_ioport("P1_A");
io_chip_0.in_pb_callback().set_ioport("P2_A");
io_chip_0.in_pc_callback().set_ioport("PORTC_A");
io_chip_0.out_pd_callback().set(FUNC(segas32_state::misc_output_0_w));
io_chip_0.in_pe_callback().set_ioport("SERVICE12_A");
io_chip_0.in_pf_callback().set_ioport("SERVICE34_A");
io_chip_0.out_pg_callback().set(FUNC(segas32_state::sw2_output_0_w));
io_chip_0.out_ph_callback().set(FUNC(segas32_state::tilebank_external_w));
io_chip_0.out_cnt1_callback().set(FUNC(segas32_state::display_enable_w<0>));
io_chip_0.out_cnt2_callback().set_inputline(m_soundcpu, INPUT_LINE_RESET).invert();
sega_315_5296_device &io_chip_1(SEGA_315_5296(config, "io_chip_1", 0)); // unknown clock
io_chip_1.in_pa_callback().set_ioport("P1_B");
io_chip_1.in_pb_callback().set_ioport("P2_B");
io_chip_1.in_pc_callback().set_ioport("PORTC_B");
io_chip_1.out_pd_callback().set(FUNC(segas32_state::misc_output_1_w));
io_chip_1.in_pe_callback().set_ioport("SERVICE12_B");
io_chip_1.in_pf_callback().set_ioport("SERVICE34_B");
io_chip_1.out_pg_callback().set(FUNC(segas32_state::sw2_output_1_w));
io_chip_1.out_ph_callback().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(7);
io_chip_1.out_ph_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(5);
io_chip_1.out_ph_callback().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(6);
io_chip_1.out_cnt1_callback().set(FUNC(segas32_state::display_enable_w<1>));
EEPROM_93C46_16BIT(config, "eeprom");
TIMER(config, "v60_irq0").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
TIMER(config, "v60_irq1").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
/* video hardware */
GFXDECODE(config, m_gfxdecode, m_palette, gfx_segas32);
PALETTE(config, m_palette).set_entries(0x8000);
config.set_default_layout(layout_dualhsxs);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_size(52*8, 262);
m_screen->set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
m_screen->set_screen_update(FUNC(segas32_state::screen_update_multi32_left));
screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER));
screen2.set_refresh_hz(60);
screen2.set_size(52*8, 262);
screen2.set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
screen2.set_screen_update(FUNC(segas32_state::screen_update_multi32_right));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
ym3438_device &ymsnd(YM3438(config, "ymsnd", MASTER_CLOCK/4));
ymsnd.irq_handler().set(FUNC(segas32_state::ym3438_irq_handler));
ymsnd.add_route(1, "lspeaker", 0.40);
ymsnd.add_route(0, "rspeaker", 0.40);
MULTIPCM(config, m_multipcm, MASTER_CLOCK/4);
m_multipcm->set_addrmap(0, &sega_multi32_state::multipcm_map);
m_multipcm->add_route(1, "lspeaker", 1.0);
m_multipcm->add_route(0, "rspeaker", 1.0);
S32COMM(config, m_s32comm, 0);
}
DEFINE_DEVICE_TYPE(SEGA_MULTI32_DEVICE, sega_multi32_state, "segas32_pcb_multi", "Sega Multi 32")
sega_multi32_state::sega_multi32_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: sega_multi32_state(mconfig, SEGA_MULTI32_DEVICE, tag, owner, clock)
{
}
sega_multi32_state::sega_multi32_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: segas32_state(mconfig, type, tag, owner, clock, true)
{
}
void sega_multi32_analog_state::multi32_analog_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xffffff);
multi32_map(map);
map(0xc00050, 0xc00057).mirror(0x07ff80).rw("adc", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::address_w)).umask32(0x00ff00ff);
map(0xc00060, 0xc00060).mirror(0x07ff80).w(FUNC(sega_multi32_analog_state::analog_bank_w));
}
void sega_multi32_analog_state::device_add_mconfig(machine_config &config)
{
sega_multi32_state::device_add_mconfig(config);
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_analog_state::multi32_analog_map);
msm6253_device &adc(MSM6253(config, "adc", 0));
adc.set_input_tag<0>("ANALOG1");
adc.set_input_tag<1>("ANALOG2");
adc.set_input_cb<2>(FUNC(sega_multi32_analog_state::in2_analog_read));
adc.set_input_cb<3>(FUNC(sega_multi32_analog_state::in3_analog_read));
}
ioport_value sega_multi32_analog_state::in2_analog_read()
{
return m_analog_ports[m_analog_bank * 4 + 2].read_safe(0);
}
ioport_value sega_multi32_analog_state::in3_analog_read()
{
return m_analog_ports[m_analog_bank * 4 + 3].read_safe(0);
}
WRITE8_MEMBER(sega_multi32_analog_state::analog_bank_w)
{
m_analog_bank = data & 1;
}
DEFINE_DEVICE_TYPE(SEGA_MULTI32_ANALOG_DEVICE, sega_multi32_analog_state, "segas32_pcb_multi_analog", "Sega Multi 32 analog PCB")
sega_multi32_analog_state::sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: sega_multi32_state(mconfig, SEGA_MULTI32_ANALOG_DEVICE, tag, owner, clock)
, m_analog_ports(*this, "ANALOG%u", 1)
{
}
void segas32_state::multi32_6player_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xffffff);
multi32_map(map);
map(0xc00060, 0xc00067).mirror(0x07ff80).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask32(0x00ff00ff);
}
void sega_multi32_6player_state::device_add_mconfig(machine_config &config)
{
sega_multi32_state::device_add_mconfig(config);
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_6player_state::multi32_6player_map);
i8255_device &ppi(I8255A(config, "ppi"));
ppi.in_pa_callback().set_ioport("EXTRA1");
ppi.in_pb_callback().set_ioport("EXTRA2");
ppi.in_pc_callback().set_ioport("EXTRA3");
}
DEFINE_DEVICE_TYPE(SEGA_MULTI32_6PLAYER_DEVICE, sega_multi32_6player_state, "segas32_pcb_multi_6player", "Sega Multi 32 6-player PCB")
sega_multi32_6player_state::sega_multi32_6player_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: sega_multi32_state(mconfig, SEGA_MULTI32_6PLAYER_DEVICE, tag, owner, clock)
{
}
class segas32_new_state : public driver_device
{
public:
segas32_new_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_mainpcb(*this, "mainpcb")
, m_slavepcb(*this, "slavepcb")
{ }
void sega_multi32(machine_config &config);
void sega_system32(machine_config &config);
void sega_multi32_analog(machine_config &config);
void sega_multi32_6p(machine_config &config);
void sega_system32_dual_direct_upd7725(machine_config &config);
void sega_system32_dual_direct(machine_config &config);
void sega_system32_track(machine_config &config);
void sega_system32_ga2(machine_config &config);
void sega_system32_cd(machine_config &config);
void sega_system32_arf(machine_config &config);
void sega_system32_analog(machine_config &config);
void sega_system32_4p(machine_config &config);
void init_titlef();
void init_slipstrm();
void init_radm();
void init_holo();
void init_svf();
void init_jleague();
void init_arescue();
void init_jpark();
void init_ga2();
void init_scross();
void init_spidman();
void init_sonicp();
void init_f1en();
void init_dbzvrvs();
void init_brival();
void init_harddunk();
void init_arabfgt();
void init_sonic();
void init_alien3();
void init_darkedge();
void init_radr();
void init_f1lap();
void init_f1lapt();
void init_orunners();
private:
required_device<segas32_state> m_mainpcb;
optional_device<segas32_state> m_slavepcb;
std::unique_ptr<uint16_t[]> m_dual_pcb_comms;
DECLARE_WRITE16_MEMBER(dual_pcb_comms_w);
DECLARE_READ16_MEMBER(dual_pcb_comms_r);
DECLARE_READ16_MEMBER(dual_pcb_masterslave);
DECLARE_READ16_MEMBER(dual_pcb_slave);
};
void segas32_new_state::sega_system32(machine_config &config)
{
SEGA_S32_REGULAR_DEVICE(config, "mainpcb", 0);
}
void segas32_new_state::sega_system32_analog(machine_config &config)
{
SEGA_S32_ANALOG_DEVICE(config, "mainpcb", 0);
}
void segas32_new_state::sega_system32_track(machine_config &config)
{
SEGA_S32_TRACKBALL_DEVICE(config, "mainpcb", 0);
}
void segas32_new_state::sega_system32_4p(machine_config &config)
{
SEGA_S32_4PLAYER_DEVICE(config, "mainpcb", 0);
}
void segas32_new_state::sega_system32_cd(machine_config &config)
{
SEGA_S32_CD_DEVICE(config, "mainpcb", 0);
}
// for f1en where there is a sub-board containing shared ram sitting underneath the ROM board bridging 2 PCBs (not a network link)
void segas32_new_state::sega_system32_dual_direct(machine_config &config)
{
SEGA_S32_ANALOG_DEVICE(config, "mainpcb", 0);
SEGA_S32_ANALOG_DEVICE(config, "slavepcb", 0);
}
// air rescue is like f1en above but also has the 837-8341 DSP daughterboard on the mainpcb side only
void segas32_new_state::sega_system32_dual_direct_upd7725(machine_config &config)
{
SEGA_S32_UPD7725_DEVICE(config, "mainpcb", 0);
SEGA_S32_ANALOG_DEVICE(config, "slavepcb", 0);
}
void segas32_new_state::sega_system32_ga2(machine_config &config)
{
SEGA_S32_V25_DEVICE(config, "mainpcb", 0);
subdevice<v25_common_device>("mainpcb:mcu")->set_decryption_table(segas32_v25_state::ga2_opcode_table);
}
void segas32_new_state::sega_system32_arf(machine_config &config)
{
SEGA_S32_V25_DEVICE(config, "mainpcb", 0);
subdevice<v25_common_device>("mainpcb:mcu")->set_decryption_table(segas32_v25_state::arf_opcode_table);
}
void segas32_new_state::sega_multi32(machine_config &config)
{
SEGA_MULTI32_DEVICE(config, "mainpcb", 0);
}
void segas32_new_state::sega_multi32_analog(machine_config &config)
{
SEGA_MULTI32_ANALOG_DEVICE(config, "mainpcb", 0);
}
void segas32_new_state::sega_multi32_6p(machine_config &config)
{
SEGA_MULTI32_6PLAYER_DEVICE(config, "mainpcb", 0);
}
/*************************************
*
* ROM definition(s)
*
*************************************/
#define ROM_LOAD_x2(name, base, length, crc) \
ROM_LOAD( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 1 * length, length )
#define ROM_LOAD_x4(name, base, length, crc) \
ROM_LOAD( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 1 * length, length ) \
ROM_RELOAD( base + 2 * length, length ) \
ROM_RELOAD( base + 3 * length, length )
#define ROM_LOAD_x8(name, base, length, crc) \
ROM_LOAD( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 1 * length, length ) \
ROM_RELOAD( base + 2 * length, length ) \
ROM_RELOAD( base + 3 * length, length ) \
ROM_RELOAD( base + 4 * length, length ) \
ROM_RELOAD( base + 5 * length, length ) \
ROM_RELOAD( base + 6 * length, length ) \
ROM_RELOAD( base + 7 * length, length )
#define ROM_LOAD_x16(name, base, length, crc) \
ROM_LOAD( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 1 * length, length ) \
ROM_RELOAD( base + 2 * length, length ) \
ROM_RELOAD( base + 3 * length, length ) \
ROM_RELOAD( base + 4 * length, length ) \
ROM_RELOAD( base + 5 * length, length ) \
ROM_RELOAD( base + 6 * length, length ) \
ROM_RELOAD( base + 7 * length, length ) \
ROM_RELOAD( base + 8 * length, length ) \
ROM_RELOAD( base + 9 * length, length ) \
ROM_RELOAD( base + 10 * length, length ) \
ROM_RELOAD( base + 11 * length, length ) \
ROM_RELOAD( base + 12 * length, length ) \
ROM_RELOAD( base + 13 * length, length ) \
ROM_RELOAD( base + 14 * length, length ) \
ROM_RELOAD( base + 15 * length, length )
#define ROM_LOAD16_BYTE_x2(name, base, length, crc) \
ROM_LOAD16_BYTE( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 2 * length, length )
#define ROM_LOAD16_BYTE_x4(name, base, length, crc) \
ROM_LOAD16_BYTE( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 2 * length, length ) \
ROM_RELOAD( base + 4 * length, length ) \
ROM_RELOAD( base + 6 * length, length )
#define ROM_LOAD32_WORD_x2(name, base, length, crc) \
ROM_LOAD32_WORD( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 2 * length, length )
#define ROM_LOAD32_WORD_x4(name, base, length, crc) \
ROM_LOAD32_WORD( name, base + 0 * length, length, crc ) \
ROM_RELOAD( base + 2 * length, length ) \
ROM_RELOAD( base + 4 * length, length ) \
ROM_RELOAD( base + 6 * length, length )
/**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
Air Rescue (Export)
Sega Game ID codes:
Game BD: 833-8508-01 AIR RESCUE (US)
833-8508-02 AIR RESCUE (Export)
833-8508-03 AIR RESCUE (Japan)
ROM PCB No: 834-8526-01 (US)
834-8526-02 (Export)
834-8526-03 (Japan)
834-8526-05 (Export)
Link PCB No: 837-8223-01
A/D BD No: 837-7536 (one for each mainboard)
DSP BD No: 837-8341
requires 2 linked system32 pcbs
requires additional math DSP to be emulated
The link PCB attaches 2 System 32 mainboards together, then ROM boards for each mainboard attaches to the link PCB.
This provides a direct connection between the PCBs (NOT a network link) so they effectively operate as a single boardset
sharing RAM (we should emulate it as such)
Link PCB is a single sparsely populated ROMless PCB but contains
Left side
1x MB8431-12LP (IC2)
2x HD74LS74AP (IC6, IC7)
2x GAL16V8A-25LP (stamped 315-5545) (IC3)
Right side
1x MB8421-12LP (IC1)
1x GAL16V8A-25LP (stamped xxx-xxxx) (IC5)
1x HD74LS74AP (IC8)
1x GAL16V8A-25LP (stamped 315-5545) (IC4)
(todo, full layout)
The left ROM PCB (master?) contains a sub-board on the ROM board with the math DSP, the right ROM PCB does not have this.
*/
ROM_START( arescue )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x4( "epr-14542.ic13", 0x000000, 0x020000, CRC(6d39fc18) SHA1(7fbddfb2605a020331e1e81a7bc4466196df17bd) ) /* 834-8526-05 (Export) */
ROM_LOAD_x4( "epr-14541.ic6", 0x080000, 0x020000, CRC(5c3f2ec5) SHA1(d11a24d12917e4c5ac9010ca6db0f1ac9d44475a) )
ROM_LOAD16_BYTE( "epr-14509.ic14", 0x100000, 0x080000, CRC(daa5a356) SHA1(ca87242c59de5ab5f9406635bee758a855fe20bc) )
ROM_LOAD16_BYTE( "epr-14508.ic7", 0x100001, 0x080000, CRC(6702c14d) SHA1(dc9324f16a3e3238f5ccdade9451d6823a50b563) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-14513.ic35", 0x000000, 0x40000, CRC(f9a884cd) SHA1(73010fff5e0257355e08e78838c74af86ed364ce) )
ROM_LOAD_x2( "mpr-14512.ic31", 0x100000, 0x80000, CRC(9da48051) SHA1(2d41148d089a75362ed0fde577eca919213ac666) )
ROM_LOAD_x2( "mpr-14511.ic26", 0x200000, 0x80000, CRC(074c53cc) SHA1(9c89843bbe8058123c25b7f8f86de754ddbca2bb) )
ROM_LOAD_x2( "mpr-14510.ic22", 0x300000, 0x80000, CRC(5ea6d52d) SHA1(d424082468940bb91ab424ac7812839792ed4e88) )
ROM_REGION( 0x200000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD32_BYTE( "mpr-14496.ic25", 0x000003, 0x080000, CRC(737da16c) SHA1(52247d9bc2924e90d040bef484a541b1f4a9026f) )
ROM_LOAD32_BYTE( "mpr-14497.ic29", 0x000001, 0x080000, CRC(ebd7ed17) SHA1(2307dc28501965432d2ff55a21698efdce014401) )
ROM_LOAD32_BYTE( "mpr-14498.ic34", 0x000002, 0x080000, CRC(d4a764bd) SHA1(8434a9225ed1e01e8b1cfe169268e42cd3ce6ee3) )
ROM_LOAD32_BYTE( "mpr-14499.ic38", 0x000000, 0x080000, CRC(fadc4b2b) SHA1(01c02a4dfad1ab19bac8b81b61d37fdc035bc5c5) )
ROM_REGION32_BE( 0x800000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14500.ic24", 0x000007, 0x100000, CRC(0a064e9b) SHA1(264761f4aacaeeac9426528caf180404cd7f6e18) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14501.ic28", 0x000006, 0x100000, CRC(4662bb41) SHA1(80774e680468e9ba9c5dd5eeaa4791fa3b3722fd) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14502.ic33", 0x000005, 0x100000, CRC(988555a9) SHA1(355e44319fd51358329cc7cd226e4c4725e045cb) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14503.ic37", 0x000004, 0x100000, CRC(90556aca) SHA1(24df62af55048db66d50c7034c5460330d231bf5) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14504.ic23", 0x000003, 0x100000, CRC(46dd038d) SHA1(9530a52e2e7388437c20ebcb19bf84c8b3b5086b) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14505.ic27", 0x000002, 0x100000, CRC(be142c1f) SHA1(224631e00c2458c39c6a2ef7978c2b1131fb4da2) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14506.ic32", 0x000001, 0x100000, CRC(5dd8fb6b) SHA1(7d21cacb2c9dba5db2547b6d8e89397e0424ee8e) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14507.ic36", 0x000000, 0x100000, CRC(db3f59ec) SHA1(96dcb3827354773fc2911c62260a27e90dcbe96a) , ROM_SKIP(7) )
ROM_REGION( 0x20000, "mainpcb:dsp", 0 ) /* NEC uPD77P25 DSP Internal ROM */ // ONLY PRESENT ON ONE PCB STACK
ROM_LOAD( "d7725.01", 0x000000, 0x002800, CRC(a7ec5644) SHA1(e9b05c70b639ee289e557dfd9a6c724b36338e2b) )
ROM_REGION(0x2000, "mainpcb:dspprg", ROMREGION_ERASEFF)
ROM_REGION(0x800, "mainpcb:dspdata", ROMREGION_ERASEFF)
ROM_REGION( 0x200000, "slavepcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x4( "epr-14542.ic13", 0x000000, 0x020000, CRC(6d39fc18) SHA1(7fbddfb2605a020331e1e81a7bc4466196df17bd) ) /* 834-8526-05 (Export) */
ROM_LOAD_x4( "epr-14541.ic6", 0x080000, 0x020000, CRC(5c3f2ec5) SHA1(d11a24d12917e4c5ac9010ca6db0f1ac9d44475a) )
ROM_LOAD16_BYTE( "epr-14509.ic14", 0x100000, 0x080000, CRC(daa5a356) SHA1(ca87242c59de5ab5f9406635bee758a855fe20bc) )
ROM_LOAD16_BYTE( "epr-14508.ic7", 0x100001, 0x080000, CRC(6702c14d) SHA1(dc9324f16a3e3238f5ccdade9451d6823a50b563) )
ROM_REGION( 0x400000, "slavepcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-14513.ic35", 0x000000, 0x40000, CRC(f9a884cd) SHA1(73010fff5e0257355e08e78838c74af86ed364ce) )
ROM_LOAD_x2( "mpr-14512.ic31", 0x100000, 0x80000, CRC(9da48051) SHA1(2d41148d089a75362ed0fde577eca919213ac666) )
ROM_LOAD_x2( "mpr-14511.ic26", 0x200000, 0x80000, CRC(074c53cc) SHA1(9c89843bbe8058123c25b7f8f86de754ddbca2bb) )
ROM_LOAD_x2( "mpr-14510.ic22", 0x300000, 0x80000, CRC(5ea6d52d) SHA1(d424082468940bb91ab424ac7812839792ed4e88) )
ROM_REGION( 0x200000, "slavepcb:gfx1", 0 ) /* tiles */
ROM_LOAD32_BYTE( "mpr-14496.ic25", 0x000003, 0x080000, CRC(737da16c) SHA1(52247d9bc2924e90d040bef484a541b1f4a9026f) )
ROM_LOAD32_BYTE( "mpr-14497.ic29", 0x000001, 0x080000, CRC(ebd7ed17) SHA1(2307dc28501965432d2ff55a21698efdce014401) )
ROM_LOAD32_BYTE( "mpr-14498.ic34", 0x000002, 0x080000, CRC(d4a764bd) SHA1(8434a9225ed1e01e8b1cfe169268e42cd3ce6ee3) )
ROM_LOAD32_BYTE( "mpr-14499.ic38", 0x000000, 0x080000, CRC(fadc4b2b) SHA1(01c02a4dfad1ab19bac8b81b61d37fdc035bc5c5) )
ROM_REGION32_BE( 0x800000, "slavepcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14500.ic24", 0x000007, 0x100000, CRC(0a064e9b) SHA1(264761f4aacaeeac9426528caf180404cd7f6e18) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14501.ic28", 0x000006, 0x100000, CRC(4662bb41) SHA1(80774e680468e9ba9c5dd5eeaa4791fa3b3722fd) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14502.ic33", 0x000005, 0x100000, CRC(988555a9) SHA1(355e44319fd51358329cc7cd226e4c4725e045cb) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14503.ic37", 0x000004, 0x100000, CRC(90556aca) SHA1(24df62af55048db66d50c7034c5460330d231bf5) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14504.ic23", 0x000003, 0x100000, CRC(46dd038d) SHA1(9530a52e2e7388437c20ebcb19bf84c8b3b5086b) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14505.ic27", 0x000002, 0x100000, CRC(be142c1f) SHA1(224631e00c2458c39c6a2ef7978c2b1131fb4da2) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14506.ic32", 0x000001, 0x100000, CRC(5dd8fb6b) SHA1(7d21cacb2c9dba5db2547b6d8e89397e0424ee8e) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14507.ic36", 0x000000, 0x100000, CRC(db3f59ec) SHA1(96dcb3827354773fc2911c62260a27e90dcbe96a) , ROM_SKIP(7) )
ROM_END
/**************************************************************************************************************************
Air Rescue (US)
Sega Game ID codes:
Game BD: 833-8508-01 AIR RESCUE
ROM PCB No: 834-8526-01
Link PCB No: 837-8223-01
A/D BD No: 837-7536 (one for each mainboard)
DSP BD No: 837-8341
requires 2 linked system32 pcbs
requires additional math DSP to be emulated
*/
ROM_START( arescueu )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x4( "epr-14540.ic13", 0x000000, 0x020000, CRC(c2b4e5d0) SHA1(69f8ddded5095df9012663d0ded61b78f1692a8d) )
ROM_LOAD_x4( "epr-14539.ic6", 0x080000, 0x020000, CRC(1a1b5532) SHA1(f3651470222036703b7ecedb6e91e4cdb3d20df7) )
ROM_LOAD16_BYTE( "epr-14509.ic14", 0x100000, 0x080000, CRC(daa5a356) SHA1(ca87242c59de5ab5f9406635bee758a855fe20bc) )
ROM_LOAD16_BYTE( "epr-14508.ic7", 0x100001, 0x080000, CRC(6702c14d) SHA1(dc9324f16a3e3238f5ccdade9451d6823a50b563) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-14513.ic35", 0x000000, 0x40000, CRC(f9a884cd) SHA1(73010fff5e0257355e08e78838c74af86ed364ce) )
ROM_LOAD_x2( "mpr-14512.ic31", 0x100000, 0x80000, CRC(9da48051) SHA1(2d41148d089a75362ed0fde577eca919213ac666) )
ROM_LOAD_x2( "mpr-14511.ic26", 0x200000, 0x80000, CRC(074c53cc) SHA1(9c89843bbe8058123c25b7f8f86de754ddbca2bb) )
ROM_LOAD_x2( "mpr-14510.ic22", 0x300000, 0x80000, CRC(5ea6d52d) SHA1(d424082468940bb91ab424ac7812839792ed4e88) )
ROM_REGION( 0x200000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD32_BYTE( "mpr-14496.ic25", 0x000003, 0x080000, CRC(737da16c) SHA1(52247d9bc2924e90d040bef484a541b1f4a9026f) )
ROM_LOAD32_BYTE( "mpr-14497.ic29", 0x000001, 0x080000, CRC(ebd7ed17) SHA1(2307dc28501965432d2ff55a21698efdce014401) )
ROM_LOAD32_BYTE( "mpr-14498.ic34", 0x000002, 0x080000, CRC(d4a764bd) SHA1(8434a9225ed1e01e8b1cfe169268e42cd3ce6ee3) )
ROM_LOAD32_BYTE( "mpr-14499.ic38", 0x000000, 0x080000, CRC(fadc4b2b) SHA1(01c02a4dfad1ab19bac8b81b61d37fdc035bc5c5) )
ROM_REGION32_BE( 0x800000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14500.ic24", 0x000007, 0x100000, CRC(0a064e9b) SHA1(264761f4aacaeeac9426528caf180404cd7f6e18) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14501.ic28", 0x000006, 0x100000, CRC(4662bb41) SHA1(80774e680468e9ba9c5dd5eeaa4791fa3b3722fd) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14502.ic33", 0x000005, 0x100000, CRC(988555a9) SHA1(355e44319fd51358329cc7cd226e4c4725e045cb) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14503.ic37", 0x000004, 0x100000, CRC(90556aca) SHA1(24df62af55048db66d50c7034c5460330d231bf5) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14504.ic23", 0x000003, 0x100000, CRC(46dd038d) SHA1(9530a52e2e7388437c20ebcb19bf84c8b3b5086b) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14505.ic27", 0x000002, 0x100000, CRC(be142c1f) SHA1(224631e00c2458c39c6a2ef7978c2b1131fb4da2) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14506.ic32", 0x000001, 0x100000, CRC(5dd8fb6b) SHA1(7d21cacb2c9dba5db2547b6d8e89397e0424ee8e) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14507.ic36", 0x000000, 0x100000, CRC(db3f59ec) SHA1(96dcb3827354773fc2911c62260a27e90dcbe96a) , ROM_SKIP(7) )
ROM_REGION( 0x20000, "mainpcb:dsp", 0 ) /* NEC uPD77P25 DSP Internal ROM */ // ONLY PRESENT ON ONE PCB STACK
ROM_LOAD( "d7725.01", 0x000000, 0x002800, CRC(a7ec5644) SHA1(e9b05c70b639ee289e557dfd9a6c724b36338e2b) )
ROM_REGION(0x2000, "mainpcb:dspprg", ROMREGION_ERASEFF)
ROM_REGION(0x800, "mainpcb:dspdata", ROMREGION_ERASEFF)
ROM_REGION( 0x200000, "slavepcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x4( "epr-14540.ic13", 0x000000, 0x020000, CRC(c2b4e5d0) SHA1(69f8ddded5095df9012663d0ded61b78f1692a8d) )
ROM_LOAD_x4( "epr-14539.ic6", 0x080000, 0x020000, CRC(1a1b5532) SHA1(f3651470222036703b7ecedb6e91e4cdb3d20df7) )
ROM_LOAD16_BYTE( "epr-14509.ic14", 0x100000, 0x080000, CRC(daa5a356) SHA1(ca87242c59de5ab5f9406635bee758a855fe20bc) )
ROM_LOAD16_BYTE( "epr-14508.ic7", 0x100001, 0x080000, CRC(6702c14d) SHA1(dc9324f16a3e3238f5ccdade9451d6823a50b563) )
ROM_REGION( 0x400000, "slavepcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-14513.ic35", 0x000000, 0x40000, CRC(f9a884cd) SHA1(73010fff5e0257355e08e78838c74af86ed364ce) )
ROM_LOAD_x2( "mpr-14512.ic31", 0x100000, 0x80000, CRC(9da48051) SHA1(2d41148d089a75362ed0fde577eca919213ac666) )
ROM_LOAD_x2( "mpr-14511.ic26", 0x200000, 0x80000, CRC(074c53cc) SHA1(9c89843bbe8058123c25b7f8f86de754ddbca2bb) )
ROM_LOAD_x2( "mpr-14510.ic22", 0x300000, 0x80000, CRC(5ea6d52d) SHA1(d424082468940bb91ab424ac7812839792ed4e88) )
ROM_REGION( 0x200000, "slavepcb:gfx1", 0 ) /* tiles */
ROM_LOAD32_BYTE( "mpr-14496.ic25", 0x000003, 0x080000, CRC(737da16c) SHA1(52247d9bc2924e90d040bef484a541b1f4a9026f) )
ROM_LOAD32_BYTE( "mpr-14497.ic29", 0x000001, 0x080000, CRC(ebd7ed17) SHA1(2307dc28501965432d2ff55a21698efdce014401) )
ROM_LOAD32_BYTE( "mpr-14498.ic34", 0x000002, 0x080000, CRC(d4a764bd) SHA1(8434a9225ed1e01e8b1cfe169268e42cd3ce6ee3) )
ROM_LOAD32_BYTE( "mpr-14499.ic38", 0x000000, 0x080000, CRC(fadc4b2b) SHA1(01c02a4dfad1ab19bac8b81b61d37fdc035bc5c5) )
ROM_REGION32_BE( 0x800000, "slavepcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14500.ic24", 0x000007, 0x100000, CRC(0a064e9b) SHA1(264761f4aacaeeac9426528caf180404cd7f6e18) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14501.ic28", 0x000006, 0x100000, CRC(4662bb41) SHA1(80774e680468e9ba9c5dd5eeaa4791fa3b3722fd) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14502.ic33", 0x000005, 0x100000, CRC(988555a9) SHA1(355e44319fd51358329cc7cd226e4c4725e045cb) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14503.ic37", 0x000004, 0x100000, CRC(90556aca) SHA1(24df62af55048db66d50c7034c5460330d231bf5) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14504.ic23", 0x000003, 0x100000, CRC(46dd038d) SHA1(9530a52e2e7388437c20ebcb19bf84c8b3b5086b) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14505.ic27", 0x000002, 0x100000, CRC(be142c1f) SHA1(224631e00c2458c39c6a2ef7978c2b1131fb4da2) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14506.ic32", 0x000001, 0x100000, CRC(5dd8fb6b) SHA1(7d21cacb2c9dba5db2547b6d8e89397e0424ee8e) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14507.ic36", 0x000000, 0x100000, CRC(db3f59ec) SHA1(96dcb3827354773fc2911c62260a27e90dcbe96a) , ROM_SKIP(7) )
ROM_END
/**************************************************************************************************************************
Air Rescue (Japan)
Sega Game ID codes:
Game BD: 833-8508-03 AIR RESCUE
ROM PCB No: 834-8526-03
Link PCB No: 837-8223-01
A/D BD No: 837-7536 (one for each mainboard)
DSP BD No: 837-8341
requires 2 linked system32 pcbs
requires additional math DSP to be emulated
*/
ROM_START( arescuej )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x4( "epr-14515.ic13", 0x000000, 0x020000, CRC(fb5eefbd) SHA1(f2739ad2e168843fe992d7fb546ffd859fa6c17a) )
ROM_LOAD_x4( "epr-14514.ic6", 0x080000, 0x020000, CRC(ebf6dfc5) SHA1(2146dc23f1268124b6ad3cd00416a71fc56130bf) )
ROM_LOAD16_BYTE( "epr-14509.ic14", 0x100000, 0x080000, CRC(daa5a356) SHA1(ca87242c59de5ab5f9406635bee758a855fe20bc) )
ROM_LOAD16_BYTE( "epr-14508.ic7", 0x100001, 0x080000, CRC(6702c14d) SHA1(dc9324f16a3e3238f5ccdade9451d6823a50b563) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-14513.ic35", 0x000000, 0x40000, CRC(f9a884cd) SHA1(73010fff5e0257355e08e78838c74af86ed364ce) )
ROM_LOAD_x2( "mpr-14512.ic31", 0x100000, 0x80000, CRC(9da48051) SHA1(2d41148d089a75362ed0fde577eca919213ac666) )
ROM_LOAD_x2( "mpr-14511.ic26", 0x200000, 0x80000, CRC(074c53cc) SHA1(9c89843bbe8058123c25b7f8f86de754ddbca2bb) )
ROM_LOAD_x2( "mpr-14510.ic22", 0x300000, 0x80000, CRC(5ea6d52d) SHA1(d424082468940bb91ab424ac7812839792ed4e88) )
ROM_REGION( 0x200000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD32_BYTE( "mpr-14496.ic25", 0x000003, 0x080000, CRC(737da16c) SHA1(52247d9bc2924e90d040bef484a541b1f4a9026f) )
ROM_LOAD32_BYTE( "mpr-14497.ic29", 0x000001, 0x080000, CRC(ebd7ed17) SHA1(2307dc28501965432d2ff55a21698efdce014401) )
ROM_LOAD32_BYTE( "mpr-14498.ic34", 0x000002, 0x080000, CRC(d4a764bd) SHA1(8434a9225ed1e01e8b1cfe169268e42cd3ce6ee3) )
ROM_LOAD32_BYTE( "mpr-14499.ic38", 0x000000, 0x080000, CRC(fadc4b2b) SHA1(01c02a4dfad1ab19bac8b81b61d37fdc035bc5c5) )
ROM_REGION32_BE( 0x800000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14500.ic24", 0x000007, 0x100000, CRC(0a064e9b) SHA1(264761f4aacaeeac9426528caf180404cd7f6e18) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14501.ic28", 0x000006, 0x100000, CRC(4662bb41) SHA1(80774e680468e9ba9c5dd5eeaa4791fa3b3722fd) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14502.ic33", 0x000005, 0x100000, CRC(988555a9) SHA1(355e44319fd51358329cc7cd226e4c4725e045cb) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14503.ic37", 0x000004, 0x100000, CRC(90556aca) SHA1(24df62af55048db66d50c7034c5460330d231bf5) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14504.ic23", 0x000003, 0x100000, CRC(46dd038d) SHA1(9530a52e2e7388437c20ebcb19bf84c8b3b5086b) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14505.ic27", 0x000002, 0x100000, CRC(be142c1f) SHA1(224631e00c2458c39c6a2ef7978c2b1131fb4da2) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14506.ic32", 0x000001, 0x100000, CRC(5dd8fb6b) SHA1(7d21cacb2c9dba5db2547b6d8e89397e0424ee8e) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14507.ic36", 0x000000, 0x100000, CRC(db3f59ec) SHA1(96dcb3827354773fc2911c62260a27e90dcbe96a) , ROM_SKIP(7) )
ROM_REGION( 0x20000, "mainpcb:dsp", 0 ) /* NEC uPD77P25 DSP Internal ROM */ // ONLY PRESENT ON ONE PCB STACK
ROM_LOAD( "d7725.01", 0x000000, 0x002800, CRC(a7ec5644) SHA1(e9b05c70b639ee289e557dfd9a6c724b36338e2b) )
ROM_REGION(0x2000, "mainpcb:dspprg", ROMREGION_ERASEFF)
ROM_REGION(0x800, "mainpcb:dspdata", ROMREGION_ERASEFF)
ROM_REGION( 0x200000, "slavepcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x4( "epr-14515.ic13", 0x000000, 0x020000, CRC(fb5eefbd) SHA1(f2739ad2e168843fe992d7fb546ffd859fa6c17a) )
ROM_LOAD_x4( "epr-14514.ic6", 0x080000, 0x020000, CRC(ebf6dfc5) SHA1(2146dc23f1268124b6ad3cd00416a71fc56130bf) )
ROM_LOAD16_BYTE( "epr-14509.ic14", 0x100000, 0x080000, CRC(daa5a356) SHA1(ca87242c59de5ab5f9406635bee758a855fe20bc) )
ROM_LOAD16_BYTE( "epr-14508.ic7", 0x100001, 0x080000, CRC(6702c14d) SHA1(dc9324f16a3e3238f5ccdade9451d6823a50b563) )
ROM_REGION( 0x400000, "slavepcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-14513.ic35", 0x000000, 0x40000, CRC(f9a884cd) SHA1(73010fff5e0257355e08e78838c74af86ed364ce) )
ROM_LOAD_x2( "mpr-14512.ic31", 0x100000, 0x80000, CRC(9da48051) SHA1(2d41148d089a75362ed0fde577eca919213ac666) )
ROM_LOAD_x2( "mpr-14511.ic26", 0x200000, 0x80000, CRC(074c53cc) SHA1(9c89843bbe8058123c25b7f8f86de754ddbca2bb) )
ROM_LOAD_x2( "mpr-14510.ic22", 0x300000, 0x80000, CRC(5ea6d52d) SHA1(d424082468940bb91ab424ac7812839792ed4e88) )
ROM_REGION( 0x200000, "slavepcb:gfx1", 0 ) /* tiles */
ROM_LOAD32_BYTE( "mpr-14496.ic25", 0x000003, 0x080000, CRC(737da16c) SHA1(52247d9bc2924e90d040bef484a541b1f4a9026f) )
ROM_LOAD32_BYTE( "mpr-14497.ic29", 0x000001, 0x080000, CRC(ebd7ed17) SHA1(2307dc28501965432d2ff55a21698efdce014401) )
ROM_LOAD32_BYTE( "mpr-14498.ic34", 0x000002, 0x080000, CRC(d4a764bd) SHA1(8434a9225ed1e01e8b1cfe169268e42cd3ce6ee3) )
ROM_LOAD32_BYTE( "mpr-14499.ic38", 0x000000, 0x080000, CRC(fadc4b2b) SHA1(01c02a4dfad1ab19bac8b81b61d37fdc035bc5c5) )
ROM_REGION32_BE( 0x800000, "slavepcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14500.ic24", 0x000007, 0x100000, CRC(0a064e9b) SHA1(264761f4aacaeeac9426528caf180404cd7f6e18) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14501.ic28", 0x000006, 0x100000, CRC(4662bb41) SHA1(80774e680468e9ba9c5dd5eeaa4791fa3b3722fd) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14502.ic33", 0x000005, 0x100000, CRC(988555a9) SHA1(355e44319fd51358329cc7cd226e4c4725e045cb) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14503.ic37", 0x000004, 0x100000, CRC(90556aca) SHA1(24df62af55048db66d50c7034c5460330d231bf5) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14504.ic23", 0x000003, 0x100000, CRC(46dd038d) SHA1(9530a52e2e7388437c20ebcb19bf84c8b3b5086b) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14505.ic27", 0x000002, 0x100000, CRC(be142c1f) SHA1(224631e00c2458c39c6a2ef7978c2b1131fb4da2) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14506.ic32", 0x000001, 0x100000, CRC(5dd8fb6b) SHA1(7d21cacb2c9dba5db2547b6d8e89397e0424ee8e) , ROM_SKIP(7) )
ROMX_LOAD( "mpr-14507.ic36", 0x000000, 0x100000, CRC(db3f59ec) SHA1(96dcb3827354773fc2911c62260a27e90dcbe96a) , ROM_SKIP(7) )
ROM_END
/**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
Alien 3: The Gun (Export)
not protected
Sega Game ID codes:
Game BD: 834-9877-02
ROM PCB No: 837-9878-02
Main PCB: 837-7428-03 (SYSTEM 32 COM)
A/D BD NO. 837-7536
*/
ROM_START( alien3 )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x2( "epr-15943.ic17", 0x000000, 0x040000, CRC(ac4591aa) SHA1(677155a3ebdac6602525e06adb25d287eaf9e089) )
ROM_LOAD_x2( "epr-15942.ic8", 0x080000, 0x040000, CRC(a1e1d0ec) SHA1(10d8d2235a67a4ba475fe98124c6a4a5311592b5) )
ROM_LOAD16_BYTE( "mpr-15855.ic18", 0x100000, 0x080000, CRC(a6fadabe) SHA1(328bbb54651eef197ba13f1bd9228f3f4de7ee5e) )
ROM_LOAD16_BYTE( "mpr-15854.ic9", 0x100001, 0x080000, CRC(d1aec392) SHA1(f48804fe0151e83ad45e912b55db8ae8ddebd2ad) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-15859a.ic36",0x000000, 0x040000, CRC(91b55bd0) SHA1(23b85a006a91c2a5eb1cee14172fd0d8b7732518) )
ROM_LOAD( "mpr-15858.ic35", 0x100000, 0x100000, CRC(2eb64c10) SHA1(b2dbe86b82e889f4a9850cf4aa6596a139c1c3d6) )
ROM_LOAD( "mpr-15857.ic34", 0x200000, 0x100000, CRC(915c56df) SHA1(7031f937c826af17caf7ec8cbb6155d0a55bd38a) )
ROM_LOAD( "mpr-15856.ic24", 0x300000, 0x100000, CRC(a5ef4f1f) SHA1(e8da7a995955e80872a25bd75465c590b649cfab) )
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-15863.ic14", 0x000000, 0x200000, CRC(9d36b645) SHA1(2977047780b615b64c3b4aec78fef0643d40490e) )
ROM_LOAD16_BYTE( "mpr-15862.ic5", 0x000001, 0x200000, CRC(9e277d25) SHA1(9f191484a42391268306a8d2d95c340ce8b2d6cd) )
ROM_REGION32_BE( 0x1000000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-15864.ic32", 0x000000, 0x200000, CRC(58207157) SHA1(d1b0c7edac8b89b1322398d4cd3a976a88bc0b56) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15866.ic30", 0x000002, 0x200000, CRC(9c53732c) SHA1(9aa5103cc10b4927c16e0cf102b64a15dd038756) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15868.ic28", 0x000004, 0x200000, CRC(62d556e8) SHA1(d70cab0881784a3d4dd06d0c99587ca6054c2dc4) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15870.ic26", 0x000006, 0x200000, CRC(d31c0400) SHA1(44c1b2e5236d894d31ff72552a7ad50270dd2fad) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15865.ic31", 0x800000, 0x200000, CRC(dd64f87b) SHA1(cfa96c5f2b1221706552f5cef4aa7c61ebe21e39) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15867.ic29", 0x800002, 0x200000, CRC(8cf9cb11) SHA1(a77399fccee3f258a5716721edd69a33f94f8daf) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15869.ic27", 0x800004, 0x200000, CRC(dd4b137f) SHA1(7316dce32d35bf468defae5e6ed86910a37a2457) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15871.ic25", 0x800006, 0x200000, CRC(58eb10ae) SHA1(23f2a72dc7b2d7b5c8a979952f81608296805745) , ROM_SKIP(6)|ROM_GROUPWORD )
ROM_REGION16_BE( 0x80, "mainpcb:eeprom", 0 )
ROM_LOAD16_WORD( "93c45_eeprom.ic76", 0x0000, 0x0080, CRC(6e1d9df3) SHA1(2fd818bc393fb96e945fa37a63c8a3c4aff2f79f) )
ROM_END
/**************************************************************************************************************************
Alien 3: The Gun (US)
not protected
Sega Game ID codes:
Game BD: 834-9877-01
ROM PCB No: 837-9878-01
Main PCB: 837-7428-03 (SYSTEM 32 COM)
A/D BD NO. 837-7536
*/
ROM_START( alien3u )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x2( "epr-15941.ic17", 0x000000, 0x040000, CRC(bf8c257f) SHA1(d08b77d2e3f5af0da7e7d8727fbe7fc0eb1153ff) )
ROM_LOAD_x2( "epr-15940a.ic8", 0x080000, 0x040000, CRC(8840b51e) SHA1(0aa6945000676b1adc535b1557a1455d62aed9f5) )
ROM_LOAD16_BYTE( "mpr-15855.ic18", 0x100000, 0x080000, CRC(a6fadabe) SHA1(328bbb54651eef197ba13f1bd9228f3f4de7ee5e) )
ROM_LOAD16_BYTE( "mpr-15854.ic9", 0x100001, 0x080000, CRC(d1aec392) SHA1(f48804fe0151e83ad45e912b55db8ae8ddebd2ad) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-15859a.ic36",0x000000, 0x040000, CRC(91b55bd0) SHA1(23b85a006a91c2a5eb1cee14172fd0d8b7732518) )
ROM_LOAD( "mpr-15858.ic35", 0x100000, 0x100000, CRC(2eb64c10) SHA1(b2dbe86b82e889f4a9850cf4aa6596a139c1c3d6) )
ROM_LOAD( "mpr-15857.ic34", 0x200000, 0x100000, CRC(915c56df) SHA1(7031f937c826af17caf7ec8cbb6155d0a55bd38a) )
ROM_LOAD( "mpr-15856.ic24", 0x300000, 0x100000, CRC(a5ef4f1f) SHA1(e8da7a995955e80872a25bd75465c590b649cfab) )
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-15863.ic14", 0x000000, 0x200000, CRC(9d36b645) SHA1(2977047780b615b64c3b4aec78fef0643d40490e) )
ROM_LOAD16_BYTE( "mpr-15862.ic5", 0x000001, 0x200000, CRC(9e277d25) SHA1(9f191484a42391268306a8d2d95c340ce8b2d6cd) )
ROM_REGION32_BE( 0x1000000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-15864.ic32", 0x000000, 0x200000, CRC(58207157) SHA1(d1b0c7edac8b89b1322398d4cd3a976a88bc0b56) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15866.ic30", 0x000002, 0x200000, CRC(9c53732c) SHA1(9aa5103cc10b4927c16e0cf102b64a15dd038756) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15868.ic28", 0x000004, 0x200000, CRC(62d556e8) SHA1(d70cab0881784a3d4dd06d0c99587ca6054c2dc4) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15870.ic26", 0x000006, 0x200000, CRC(d31c0400) SHA1(44c1b2e5236d894d31ff72552a7ad50270dd2fad) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15865.ic31", 0x800000, 0x200000, CRC(dd64f87b) SHA1(cfa96c5f2b1221706552f5cef4aa7c61ebe21e39) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15867.ic29", 0x800002, 0x200000, CRC(8cf9cb11) SHA1(a77399fccee3f258a5716721edd69a33f94f8daf) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15869.ic27", 0x800004, 0x200000, CRC(dd4b137f) SHA1(7316dce32d35bf468defae5e6ed86910a37a2457) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15871.ic25", 0x800006, 0x200000, CRC(58eb10ae) SHA1(23f2a72dc7b2d7b5c8a979952f81608296805745) , ROM_SKIP(6)|ROM_GROUPWORD )
ROM_REGION16_BE( 0x80, "mainpcb:eeprom", 0 )
ROM_LOAD16_WORD( "93c45_eeprom.ic76", 0x0000, 0x0080, CRC(6e1d9df3) SHA1(2fd818bc393fb96e945fa37a63c8a3c4aff2f79f) )
ROM_END
/**************************************************************************************************************************
Alien 3: The Gun (Japan)
not protected
Sega Game ID codes:
Game BD: 834-9877
ROM PCB No: 837-9878
Main PCB: 837-7428-03 (SYSTEM 32 COM)
A/D BD NO. 837-7536
*/
ROM_START( alien3j )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x2( "epr-15861.ic17", 0x000000, 0x040000, CRC(e970603f) SHA1(b67cf4cb5269d808ff8adc007202cb6e18d5b6a9) )
ROM_LOAD_x2( "epr-15860.ic8", 0x080000, 0x040000, CRC(9af0d996) SHA1(3fb06947712947da4830200db2382d9c433a18a9) )
ROM_LOAD16_BYTE( "mpr-15855.ic18", 0x100000, 0x080000, CRC(a6fadabe) SHA1(328bbb54651eef197ba13f1bd9228f3f4de7ee5e) )
ROM_LOAD16_BYTE( "mpr-15854.ic9", 0x100001, 0x080000, CRC(d1aec392) SHA1(f48804fe0151e83ad45e912b55db8ae8ddebd2ad) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x4( "epr-15859.ic36", 0x000000, 0x040000, CRC(7eeda800) SHA1(d0599730a8a2adbed08fec4160b8b3963e8ac0f6) )
ROM_LOAD( "mpr-15858.ic35", 0x100000, 0x100000, CRC(2eb64c10) SHA1(b2dbe86b82e889f4a9850cf4aa6596a139c1c3d6) )
ROM_LOAD( "mpr-15857.ic34", 0x200000, 0x100000, CRC(915c56df) SHA1(7031f937c826af17caf7ec8cbb6155d0a55bd38a) )
ROM_LOAD( "mpr-15856.ic24", 0x300000, 0x100000, CRC(a5ef4f1f) SHA1(e8da7a995955e80872a25bd75465c590b649cfab) )
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-15863.ic14", 0x000000, 0x200000, CRC(9d36b645) SHA1(2977047780b615b64c3b4aec78fef0643d40490e) )
ROM_LOAD16_BYTE( "mpr-15862.ic5", 0x000001, 0x200000, CRC(9e277d25) SHA1(9f191484a42391268306a8d2d95c340ce8b2d6cd) )
ROM_REGION32_BE( 0x1000000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-15864.ic32", 0x000000, 0x200000, CRC(58207157) SHA1(d1b0c7edac8b89b1322398d4cd3a976a88bc0b56) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15866.ic30", 0x000002, 0x200000, CRC(9c53732c) SHA1(9aa5103cc10b4927c16e0cf102b64a15dd038756) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15868.ic28", 0x000004, 0x200000, CRC(62d556e8) SHA1(d70cab0881784a3d4dd06d0c99587ca6054c2dc4) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15870.ic26", 0x000006, 0x200000, CRC(d31c0400) SHA1(44c1b2e5236d894d31ff72552a7ad50270dd2fad) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15865.ic31", 0x800000, 0x200000, CRC(dd64f87b) SHA1(cfa96c5f2b1221706552f5cef4aa7c61ebe21e39) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15867.ic29", 0x800002, 0x200000, CRC(8cf9cb11) SHA1(a77399fccee3f258a5716721edd69a33f94f8daf) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15869.ic27", 0x800004, 0x200000, CRC(dd4b137f) SHA1(7316dce32d35bf468defae5e6ed86910a37a2457) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15871.ic25", 0x800006, 0x200000, CRC(58eb10ae) SHA1(23f2a72dc7b2d7b5c8a979952f81608296805745) , ROM_SKIP(6)|ROM_GROUPWORD )
ROM_REGION16_BE( 0x80, "mainpcb:eeprom", 0 )
ROM_LOAD16_WORD( "93c45_eeprom.ic76", 0x0000, 0x0080, CRC(6e1d9df3) SHA1(2fd818bc393fb96e945fa37a63c8a3c4aff2f79f) )
ROM_END
/**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
Arabian Fight (Export)
protected via a custom V25 with encrypted code
Sega Game ID codes:
Game BD: 833-8646-05 ARABIAN FIGHT
ROM PCB No: 833-8647-02
V25 sub PCB: 834-8529-01
A/D BD NO. 837-7968
*/
ROM_START( arabfgt )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x8( "epr-14609.ic8", 0x000000, 0x020000, CRC(6a43c7fb) SHA1(70e9f9fa5f867f0455d62ff2690ad19055d79363) )
ROM_LOAD16_BYTE_x2( "epr-14592.ic18", 0x100000, 0x040000, CRC(f7dff316) SHA1(338690a1404dde6e7e66067f23605a247c7d0f5b) )
ROM_LOAD16_BYTE_x2( "epr-14591.ic9", 0x100001, 0x040000, CRC(bbd940fb) SHA1(99c17aba890935eaf7ea468492da03103288eb1b) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU + banks */
ROM_LOAD_x8( "epr-14596.ic36", 0x000000, 0x020000, CRC(bd01faec) SHA1(c909dcb8ef2672c4b0060d911d295e445ca311eb) )
ROM_LOAD( "mpr-14595f.ic35", 0x100000, 0x100000, CRC(5173d1af) SHA1(dccda644488d0c561c8ff7fa9619bd9504d8d9c6) )
ROM_LOAD( "mpr-14594f.ic34", 0x200000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x300000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) )
ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) )
ROM_LOAD16_BYTE( "mpr-14598f.ic5", 0x000001, 0x200000, CRC(010656f3) SHA1(31619c022cba4f250ce174f186d3e34444f60faf) )
ROM_REGION32_BE( 0x1000000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14600f.ic32", 0x000000, 0x200000, CRC(e860988a) SHA1(328581877c0890519c854f75f0976b0e9c4560f8) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14602.ic30", 0x000002, 0x200000, CRC(64524e4d) SHA1(86246185ab5ab638a73991c9e3aeb07c6d51be4f) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14604.ic28", 0x000004, 0x200000, CRC(5f8d5167) SHA1(1b08495e5a4cc2530c2895e47abd0e0b75496c68) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14606.ic26", 0x000006, 0x200000, CRC(7047f437) SHA1(e806a1cd73c96b33e8edc64e41d99bf7798103e0) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14601f.ic31", 0x800000, 0x200000, CRC(a2f3bb32) SHA1(1a60975dead5faf08ad4e9a96a00f98664d5e5ec) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14603.ic29", 0x800002, 0x200000, CRC(f6ce494b) SHA1(b3117e34913e855c035ebe37fbfbe0f7466f94f0) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14605.ic27", 0x800004, 0x200000, CRC(aaf52697) SHA1(b502a37ae68fc08b60cdf0e2b744898b3474d3b9) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14607.ic25", 0x800006, 0x200000, CRC(b70b0735) SHA1(9ef2da6f710bc5c2c7ee30dc144409a61dbe6646) , ROM_SKIP(6)|ROM_GROUPWORD )
ROM_END
/**************************************************************************************************************************
Arabian Fight (US)
protected via a custom V25 with encrypted code
*/
ROM_START( arabfgtu )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x8( "epr-14608.ic8", 0x000000, 0x020000, CRC(cd5efba9) SHA1(a7daf8e95d31359753c984c447e93d40f43a179d) )
ROM_LOAD16_BYTE_x2( "epr-14592.ic18", 0x100000, 0x040000, CRC(f7dff316) SHA1(338690a1404dde6e7e66067f23605a247c7d0f5b) )
ROM_LOAD16_BYTE_x2( "epr-14591.ic9", 0x100001, 0x040000, CRC(bbd940fb) SHA1(99c17aba890935eaf7ea468492da03103288eb1b) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU + banks */
ROM_LOAD_x8( "epr-14596.ic36", 0x000000, 0x020000, CRC(bd01faec) SHA1(c909dcb8ef2672c4b0060d911d295e445ca311eb) )
ROM_LOAD( "mpr-14595f.ic35", 0x100000, 0x100000, CRC(5173d1af) SHA1(dccda644488d0c561c8ff7fa9619bd9504d8d9c6) )
ROM_LOAD( "mpr-14594f.ic34", 0x200000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x300000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) )
ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) )
ROM_LOAD16_BYTE( "mpr-14598f.ic5", 0x000001, 0x200000, CRC(010656f3) SHA1(31619c022cba4f250ce174f186d3e34444f60faf) )
ROM_REGION32_BE( 0x1000000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14600f.ic32", 0x000000, 0x200000, CRC(e860988a) SHA1(328581877c0890519c854f75f0976b0e9c4560f8) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14602.ic30", 0x000002, 0x200000, CRC(64524e4d) SHA1(86246185ab5ab638a73991c9e3aeb07c6d51be4f) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14604.ic28", 0x000004, 0x200000, CRC(5f8d5167) SHA1(1b08495e5a4cc2530c2895e47abd0e0b75496c68) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14606.ic26", 0x000006, 0x200000, CRC(7047f437) SHA1(e806a1cd73c96b33e8edc64e41d99bf7798103e0) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14601f.ic31", 0x800000, 0x200000, CRC(a2f3bb32) SHA1(1a60975dead5faf08ad4e9a96a00f98664d5e5ec) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14603.ic29", 0x800002, 0x200000, CRC(f6ce494b) SHA1(b3117e34913e855c035ebe37fbfbe0f7466f94f0) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14605.ic27", 0x800004, 0x200000, CRC(aaf52697) SHA1(b502a37ae68fc08b60cdf0e2b744898b3474d3b9) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14607.ic25", 0x800006, 0x200000, CRC(b70b0735) SHA1(9ef2da6f710bc5c2c7ee30dc144409a61dbe6646) , ROM_SKIP(6)|ROM_GROUPWORD )
ROM_END
/**************************************************************************************************************************
Arabian Fight (Japan)
protected via a custom V25 with encrypted code
*/
ROM_START( arabfgtj )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x8( "epr-14597.ic8", 0x000000, 0x020000, CRC(7a6fe222) SHA1(f730e9d44ad20dbaa59f6311a077c889e0aec8e4) )
ROM_LOAD16_BYTE_x2( "epr-14592.ic18", 0x100000, 0x040000, CRC(f7dff316) SHA1(338690a1404dde6e7e66067f23605a247c7d0f5b) )
ROM_LOAD16_BYTE_x2( "epr-14591.ic9", 0x100001, 0x040000, CRC(bbd940fb) SHA1(99c17aba890935eaf7ea468492da03103288eb1b) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU + banks */
ROM_LOAD_x8( "epr-14596.ic36", 0x000000, 0x020000, CRC(bd01faec) SHA1(c909dcb8ef2672c4b0060d911d295e445ca311eb) )
ROM_LOAD( "mpr-14595f.ic35", 0x100000, 0x100000, CRC(5173d1af) SHA1(dccda644488d0c561c8ff7fa9619bd9504d8d9c6) )
ROM_LOAD( "mpr-14594f.ic34", 0x200000, 0x100000, CRC(01777645) SHA1(7bcbe7687bd80b94bd3b2b3099cdd036bf7e0cd3) )
ROM_LOAD( "mpr-14593f.ic24", 0x300000, 0x100000, CRC(aa037047) SHA1(5cb1cfb235bbbf875d2b07ac4a9130ba13d47e57) )
ROM_REGION( 0x10000, "mainpcb:mcu", 0 ) /* Protection CPU */
ROM_LOAD( "epr-14468-01.u3", 0x00000, 0x10000, CRC(c3c591e4) SHA1(53e48066e85b61d0c456618d14334a509b354cb3) )
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-14599f.ic14", 0x000000, 0x200000, CRC(94f1cf10) SHA1(34ec86487bcb6726c025149c319f00a854eb7a1d) )
ROM_LOAD16_BYTE( "mpr-14598f.ic5", 0x000001, 0x200000, CRC(010656f3) SHA1(31619c022cba4f250ce174f186d3e34444f60faf) )
ROM_REGION32_BE( 0x1000000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-14600f.ic32", 0x000000, 0x200000, CRC(e860988a) SHA1(328581877c0890519c854f75f0976b0e9c4560f8) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14602.ic30", 0x000002, 0x200000, CRC(64524e4d) SHA1(86246185ab5ab638a73991c9e3aeb07c6d51be4f) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14604.ic28", 0x000004, 0x200000, CRC(5f8d5167) SHA1(1b08495e5a4cc2530c2895e47abd0e0b75496c68) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14606.ic26", 0x000006, 0x200000, CRC(7047f437) SHA1(e806a1cd73c96b33e8edc64e41d99bf7798103e0) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14601f.ic31", 0x800000, 0x200000, CRC(a2f3bb32) SHA1(1a60975dead5faf08ad4e9a96a00f98664d5e5ec) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14603.ic29", 0x800002, 0x200000, CRC(f6ce494b) SHA1(b3117e34913e855c035ebe37fbfbe0f7466f94f0) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14605.ic27", 0x800004, 0x200000, CRC(aaf52697) SHA1(b502a37ae68fc08b60cdf0e2b744898b3474d3b9) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-14607.ic25", 0x800006, 0x200000, CRC(b70b0735) SHA1(9ef2da6f710bc5c2c7ee30dc144409a61dbe6646) , ROM_SKIP(6)|ROM_GROUPWORD )
ROM_END
/**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
Burning Rival (Export)
protected via FD1149 317-0212
*/
ROM_START( brival )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x8( "epr-15722.ic8", 0x000000, 0x020000, CRC(138141c0) SHA1(aca2a46ee1008e91c65a09e79c76d5175e7df5e8) )
ROM_LOAD16_BYTE( "epr-15723.ic18", 0x100000, 0x080000, CRC(4ff40d39) SHA1(b33a656f976ec7a1a2268e7b9a81d5b84f3d9ca3) )
ROM_LOAD16_BYTE( "epr-15724.ic9", 0x100001, 0x080000, CRC(3ff8a052) SHA1(f484a8e15a022f9ff290e662ab27f96f9f0ad24e) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x8( "epr-15725.ic36", 0x000000, 0x020000, CRC(ea1407d7) SHA1(68b571341f032278e87a38739ba8084b7a6062d3) )
ROM_LOAD( "mpr-15627.ic35", 0x100000, 0x100000, CRC(8a8388c5) SHA1(7ee03feb975cc576a3d8651fd41976ca87d60894) )
ROM_LOAD( "mpr-15626.ic34", 0x200000, 0x100000, CRC(83306d1e) SHA1(feb08902b51c0013d9417832cdf198e36cdfc28c) )
ROM_LOAD( "mpr-15625.ic24", 0x300000, 0x100000, CRC(3ce82932) SHA1(f2107bc2591f46a51c9f0d706933b1ae69db91f9) )
ROM_REGION( 0x400000, "mainpcb:gfx1", 0 ) /* tiles */
ROM_LOAD16_BYTE( "mpr-15629.ic14", 0x000000, 0x200000, CRC(2c8dd96d) SHA1(4a42a30485c19eb4f4a9d518a3dff3ae11911d01) )
ROM_LOAD16_BYTE( "mpr-15628.ic5", 0x000001, 0x200000, CRC(58d4ca40) SHA1(b1633acc803bba7e8283a9663b49abeda662a74d) )
ROM_REGION32_BE( 0x1000000, "mainpcb:sprites", 0 ) /* sprites */
ROMX_LOAD( "mpr-15637.ic32", 0x000000, 0x200000, CRC(b6cf2f05) SHA1(a308d40ce5165e03fccf7fcd615ee111f7840fdc) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15635.ic30", 0x000002, 0x200000, CRC(70f2eb2b) SHA1(9868c8b0dd8ce810a0e32f51e702eee7e1c9a967) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15633.ic28", 0x000004, 0x200000, CRC(005dfed5) SHA1(f555620d75d3886a890307be9df9c0879bcda695) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15631.ic26", 0x000006, 0x200000, CRC(c35e2f21) SHA1(37935aa2eaa1769e57fb58f47f9797ae153d7496) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15636.ic31", 0x800000, 0x200000, CRC(d81ca97b) SHA1(a8e64e6cbe822f18ce20f50c8ddb8f1d5ed8b783) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15634.ic29", 0x800002, 0x200000, CRC(b0c6c52a) SHA1(04dd7344ca82e38f9d796a764c9e5a631a89aaac) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15632.ic27", 0x800004, 0x200000, CRC(8476e52b) SHA1(e89748d34febcaf362580cdae30a5c570e56899a) , ROM_SKIP(6)|ROM_GROUPWORD )
ROMX_LOAD( "mpr-15630.ic25", 0x800006, 0x200000, CRC(bf7dd2f6) SHA1(ab3fbe9e2b9b57424fb2a147f32b0f573c0b11b8) , ROM_SKIP(6)|ROM_GROUPWORD )
ROM_END
/**************************************************************************************************************************
Burning Rival (Japan)
protected via FD1149 317-0212
*/
ROM_START( brivalj )
ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* v60 code + data */
ROM_LOAD_x8( "epr-15720.ic8", 0x000000, 0x020000, CRC(0d182d78) SHA1(53e9e5898869ea4a354dc3e9a78d8b8e9a7274c9) )
ROM_LOAD16_BYTE( "epr-15723.ic18", 0x100000, 0x080000, CRC(4ff40d39) SHA1(b33a656f976ec7a1a2268e7b9a81d5b84f3d9ca3) )
ROM_LOAD16_BYTE( "epr-15724.ic9", 0x100001, 0x080000, CRC(3ff8a052) SHA1(f484a8e15a022f9ff290e662ab27f96f9f0ad24e) )
ROM_REGION( 0x400000, "mainpcb:soundcpu", 0 ) /* sound CPU */
ROM_LOAD_x8( "epr-15725.ic36", 0x000000, 0x020000, CRC(ea1407d7) SHA1(68b571341f032278e87a38739ba8084b7a6062d3) )
ROM_LOAD( "mpr-15627.ic35", 0x100000, 0x100000, CRC(8a8388c5) SHA1(7ee03feb975cc576a3d8651fd41976ca87d60894) )
ROM_LOAD( "mpr-15626.ic34", 0x200000, 0x100000, CRC(83306d1e) SHA1(feb08902b51c0013d9417832cdf198e36cdfc28c) )
ROM_LOAD( "mpr-15625.ic24"