// license:BSD-3-Clause
// copyright-holders:Phil Stroffolino, hap, R. Belmont
/***********************************************************************************************************

This driver describes Namco's System22 and System Super22* hardware.
*: Namco calls it that, more commonly known as "Super System 22"

driver provided with thanks to:
- hap
- pstroffo@yahoo.com (Phil Stroffolino)
- R. Belmont
- trackmaster@gmx.net (Bjorn Sunder)
- team vivanonno

TODO:
- finish slave DSP emulation
- emulate System22 I/O board C74 instead of HLE (inputs, outputs, volume control - HLE only handles the inputs)
- C139 for linked cabinets, as well as in RR fullscale
- confirm DSP and MCU IRQ timing
- EEPROM write timing should be around 5ms, it doesn't do any data/rdy polling
- Rave Racer car will sometimes do a 'strafe slide' when playing the game with a small analog device (such as an
  Xbox 360 pad), does not happen with keyboard controls or larger device like a steering wheel. BTANB or related
  to HLE I/O board emulation?
- where is the steering wheel motor torque output for dirtdash? Answer: The data comes from the Serial Port on
  the MOTHER PCB at J2 Pin 7 /TXD
- tokyowar garbage tile at right edge in attract mode. It's part of the cabinet link message, maybe BTANB?
- ridgera2 title screen scrolls horizontally on some video footage, C139 related?
- texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures
- improve vertex lighting (is it phong shading?)
- global offset is wrong in non-super22 testmode video test
- acedrive/victlap testmode video test flickers
- ss22 testmode video test screen#04 translucent polygon should be higher priority than sprite
- ss22 testmode video test screen#13 geometry should not be lopsided (uses draw_direct_poly)
- find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash
- there's a sprite limit per scanline, eg. timecris submarine explosion smoke partially erases sprites on real hardware
- propcycl attract mode, when the altar button is pressed, global fade should affect the background sprite
- slavesim_handle_233002 is not fully understood, objectshift and the flag to disable fog are obvious, the others are unclear
- polygon position problems? (also has glitches on real hw, but not as bad)
  + timecris stage 1-2 start, beam appears through platform
  + timecris stage 2-1 final section, steel beam appears through plank
  + cybrcycc speed dial should be more to the left
  + most of it is zsort related, there's plenty more, but need clearly visible cases with PCB evidence
- improve ss22 spot, used in dirtdash, alpines highscore entry, testmode screen#14 - not understood well:
  + does not work at all in alpines (uses spot_factor, not spotram, should show a spotlight with darkened background)
  + should be done before global fade, see dirtdash when starting at jungle level
  + should not apply to some of the sprites in dirtdash jungle level (eg. time/position)
  + should not apply to some of the polygons either? see dirtdash jungle level moon
  + how is it enabled exactly? the enable bit in spotram is set in tokyowar too(which doesn't use spot)
  + what is the high bit in spot_factor for? not used anywhere
  + high bits in spot_data are unknown, maybe blend mode
  + testmode looks wrong, spot_data high bits is 0 here (2 in dirtdash)
- PDP command 0xfff9, used in alpinr2b to modify titlescreen logo animation in pointram (should show a snow melting effect)
- alpha blended sprite/poly with priority over alpha blended text doesn't work right
- ss22 poly/sprite alpha is probably more limited than currently emulated, not supporting stacked layers
  + airco22 attract mode, see-through plane looks weird (they probably meant to just darken it)
  + cybrcycc game over screen has a weird glitch during fade (see the "E" of "GAME")

BTANB:
- ridgerac suspension bridge, cables appearing through the guardrail (worse on MAME, see poly position in TODO?),
  I think they improved it in ridgera2, but it still happens there on MAME
- ridgerac sunset gradual fade is not smooth (good in ridgera2)
- ridgera2 rearview mirror is glitchy when driving downhill towards the beach
- victlap titlescreen, saturated colors instead of a clean fade

***********************************************************************************************************

Input
     - input ports require manual calibration through built-in diagnostics (or canned EEPROM)

Output Devices
     - Prop Cycle fan (outputs noted at the right MCU port)
     - lamps/LEDs on some cabinets
     - time crisis has force feedback for the guns

Notes:
     The "dipswitch" settings are ignored in many games - this isn't a bug.  For example, Prop Cycle software
     explicitly clears the chunk of work RAM used to cache the 8 bit dipswitch value immediately after
     populating it.  This is apparently done to hide secret debug routines from release versions of games.

Self Test Info:
    Prop Cycle DSP tests:
       MD ROM-PROGRAM      (not-yet-working)
       MD-DOWNLOAD       - confirms that main CPU can upload custom code to master DSP
       MD-EXTERNAL-RAM   - tests private RAM used by master DSP
       C-RAM CHECK BY MD - tests communications RAM, shared by master DSP and main CPU
       PDP LOOP TEST     - exercises multi-command DMA transfer
       PDP BLOCK MOVE    - exercises DMA block transfer
       POINT RAM         - RAM test for "Point RAM" (not directly accessible by any CPU)
       CUSTOM IC STATUS  - currently hacked to always report "good"
       SD ROM-PRG        - confirms that master DSP can upload custom code to run on slave DSP
       SD EXTERNAL-RAM   - tests private RAM used by slave DSP
       DATA FLOW TEST 1    (not-yet-working)
       DATA FLOW TEST 2    (not-yet-working)
       POINT ROM TEST    - checksums the "Point ROMs"

    Ridge Racer (Japan) tests:
       TEST 1a: MD-EXTERNAL-RAM
       TEST 1b: C-RAM CHECK BY MD
       TEST 2:  (not-yet-working)
       TEST 3:  SD EXTERNAL-RAM
       TEST 4:  DATA FLOW TEST 1 (not-yet-working)
       TEST 5:  DATA FLOW TEST 2 (not-yet-working)
       TEST 6:  POINT RAM

IO MCU:
- generates sound/music
- provides input port management (copying to shared RAM)
- coinage handling in most games
- manages external physical devices (i.e. lamps, fans, force feedback)
- C74 is sound MCU, Mitsubishi M37702 MCU with mask ROM
- some external subroutines for C74 are also embedded

Master DSP:
- S22 has two TI320C25 DSP (printed as C71)
- the master DSP provides display list parsing

Slave DSP:
- serves as a calculation engine for lighting

Communications RAM
- seen as 32 bit memory by main 68k CPU
- seen as 16 bit memory by master DSP (addr 0x8000..0xffff); upper/lower word is selectable
- not addressable by slave DSP

Point ROMs
- encodes 3d model data
- not directly addressable by any CPU

Point RAM
- same address space as Point ROMs
- not directly addressable by any CPU

Link Feature:
- some (typically racing) games may be linked together
- serial controller is C139 SCI (same as System21).

System Super22
- different memory map
- different CPU controller register layout
- sound CPU uses external ROM (i.e. pr1data.8k) instead of internal BIOS (C74)
- additional 2d sprite layer
- Point RAM starts at 0xf80000 rather than 0xf00000
- "PDP" device, for automated block memory transfers (dsp ram, point ram)

***********************************************************************************************************

SYSTEM22 Known Custom Chips

CPU PCB:

C71 TI TMS320C25 DSP
C71 WEYW40116 (TMS320C25 Main/Sub DSP)
C71 D72260FN 980 FE-5CA891W

M5M5178AP-25 (CPU 16R, 17R, 19R, 20R) DSP Work RAM (8K x 8bit x 2 x 2)

C74 Mitsubishi M37702 MCU
C74 159 408600 (OLD SUB)
C74 159 543100 (NEW SUB)
C74 159 414600 (OLD I/O)
C74 159 437600 (NEW I/O)

C195 (Shared SRAM Controller)
C196 CPP x 6
C199 (CPU 18K) x 1
C317 IDC (CPU 15E) x 1 (S21B)
C337 PFP x 1
C342 x 1 (S21B)
C352 (32ch PCM)
C353 x 1


VIDEO PCB:

C304 - 4 chips on SS22 Video PCB
C305 (Palette)
C335
9C, 10C
12D, 12E
14C
C300
18B, 18C, 20B, 20C, 22B, 22C
Cxxx
34R, 35R

TI TBP28L22N (256 x 8bit PROM)
VIDEO 2D, 3D, 4D (RGB Gamma LUT ROM)

RR1.GAM (for Ridge Racer 1/2, Rave Racer)

***********************************************************************************************************
***********************************************************************************************************

Namco Super System 22
Hardware Overview by Guru
-------------------------

This document covers all the known Namco Super System 22 games, including....
Air Combat 22    (C) Namco, 1995
Alpine Racer 1   (C) Namco, 1994
Alpine Racer 2   (C) Namco, 1996
Alpine Surfer    (C) Namco, 1996
Aqua Jet         (C) Namco, 1996
Armadillo Racing (C) Namco, 1996 (an undumped prototype/test or early version exists using a different ROM PCB)
Cyber Cycles     (C) Namco, 1995
Dirt Dash        (C) Namco, 1995
Prop Cycle       (C) Namco, 1996
Time Crisis      (C) Namco, 1995
Tokyo Wars       (C) Namco, 1996

The Namco Super System 22 System comprises 4 PCB's plugged into a motherboard. The motherboard contains only
some slots and connectors. The 4 PCB's are housed in a metal box with a large fan on the side. The fan mostly cools
the video board as these are known to run hot and commonly fail, especially now the system is many years old.

CPU PCB   - There are four known revisions of this PCB. Three of them have an extra connector for an
            auxiliary PCB. One of the others doesn't have that connector but is are otherwise identical.
            All PCBs can be swapped to any game and it will work. However, ALL required IC's must be swapped.
            This includes Program ROM PCB, socketed Keycus IC, socketed DATA ROM and socketed WAVE ROM(s).
            On most games the EEPROM will re-init itself on bootup. On the others, the EEPROM can re-init itself
            to defaults by holding down SERVICE + TEST on power-up. All games are swappable to ANY CPU PCB and will
            run ok (all dumped games have been swapped/tested and work fine)
DSP PCB   - There is only 1 revision of this PCB. All games use the exact same PCB. The DSP PCB can be swapped to
            any other game and works fine (all dumped games tested). Note that some games use different parts of the
            DSP PCB and some do more thorough tests on bootup so an old DSP PCB that works fine in one game may come
            up as faulty in a different SS22 game.
MROM PCB  - These PCB's have many SOP44 ROMs on them and are identical for each game, but the contents of the ROMs
            and the number of ROMs vary per game. (a few of the dumped games have had their surface mounted ROMs
            swapped to other PCBs and worked fine)
FLASH PCB - Flash ROM board used only for a prototype or early version of Armadillo Racing and contains many TSOP56
            16M FlashROMs
VIDEO PCB - There are three known revisions of this PCB. They're mostly identical apart from some component shuffling
            and in the earlier versions (A & B), an Altera FPGA chip is used instead of a Namco custom chip.
            All revisions of the Video PCBs are swappable and fully compatible with any SS22 game. The Altera FPGA runs
            very hot and almost always fails even if heatsinked! Revision C is the most reliable.
MOTHER PCB- There are probably 3 revisions of this PCB, but only the original revision and (C) are documented here.
            The differences are very minor, just the amount of connectors on the PCB. The Mother PCB is swappable to
            any game as long as the required connectors for that game are present on the PCB. (all dumped games tested
            and worked fine using any MOTHER PCB)

Each game has a 2 or 3 digit letter code assigned to it. Then a number 1 or 2, Then a Rev. A/B/C/D which denotes the
software revision.
The 1 denotes a Japanese version. 2 denotes a World version. So far there are no other numbers used other than 1 or 2.
For World versions, usually only the main program uses a '2', the rest of the ROM labels use the Japanese region code '1'.
There is one exception so far. The World version of Alpine Racer 2, which uses a World version DATA ROM, and also one
of the WAVE ROMs is a World version, but one Japanese WAVE ROM is also used.
See the CPU PCB, Program ROM Daughterboard and MROM PCB texts below for more details on ROM usage.

CPU PCB
-------
1st Revision
SYSTEM SUPER22 CPU PCB 8646960102 (8646970102)

2nd Revision
SYSTEM SUPER22 CPU(B) PCB 8646962600 (8646972600)

3rd Revision
SYSTEM SUPER22 CPU(B) PCB 8646962600 (8646972601) <-- very minor?

4th Revision
SYSTEM SUPER22 CPU(B) PCB 8646962601 (8646972601) <-- very minor?
|--------------------------------------------------------------|
|      J6                         JC410               3771     |
|  N341256(x4)                                           DSW(4)|
|                               |-------|                     |--|
|                               |MC68EC |                     |  |
|                               |020FG25|                     |  |
|   *1                          |-------|                     |  |
|           DSW(8)        SS22C2         |------|             |  |
|                                        | C383 |             |  |
|   CAT28C64    KEYCUS    SS22C1         |      |             |  |
|                                        |------|             |  |
|              |-------|                                      |  |
|     N341256  |       |                 |------|             |  |
| *3  N341256  | C405  |                 | 139  |             |--|
|              |       |       CY7C182   |      |              |
| *2           |-------|                 |------|              |
|                                                             |--|
|        40.000MHz                         137                |  |
|                                                             |  |
|              DATA.8K         JP1        49.152MHz           |  |
|     |------|                 |-------|             4558     |  |
|     | C352 |      JP2        |M37710 |                      |  |
|     |      |                 |S4BFP  |                      |  |
|     |------|                 |-------|                      |  |
|LED(x8)                                                      |  |
|        J11         SS22C4                MB87078            |  |
|      WAVEA.2L                                      4558     |--|
| JP3                                                          |
|      WAVEB.1L                LC78815M      LC78815M          |
|--------------------------------------------------------------|
(logic chips omitted from the PCB layout)

Notes:
      J6           : Custom Namco connector for plug-in program ROM PCB
      J11          : Custom Namco connector for optional plug-in WAVE ROM PCB (holds some SOP44 mask ROMs)
      JC410        : Custom Namco connector for Optional plug-in Auxiliary PCB (e.g. Gun Control PCB used in Time Crisis
                     etc)
                     The connector is populated only on the 2nd revision CPU (B) PCB 8646962600 (8646972600)
                     and 3rd Revision CPU (B) PCB 8646962600 (8646972601)
      JP1          : Jumper for configuration of M37710 (tied to pins 26 & 27 of M37710). Set to 1-2
      JP2          : Jumper for configuration of DATA ROM. Set to 1-2 (labelled '4M'), alt. setting 2-3 (labelled '1M/2M')
      JP3          : Jumper for configuration of WAVE ROM. Set to 2-3 (labelled '42P32M'), alt. setting 1-2
                     (labelled 'OTHER'). 'OTHER' is used when the WAVE ROMs are 16MBit. If the WAVE ROMs are 32MBit
                     (i.e. JP3 = 2-3), they're programmed in BYTE mode.
      M37710       : Mitsubishi M37710 MCU. Clock input 16.384MHz [49.152/3]. Used on SS22 as the sound CPU. Does not have internal ROM (QFP80)
      MB87078      : Fujitsu MB87078 electronic volume control IC (SOIC24)
      4558         : Op Amp (SOIC8)
      LC78815M     : Sanyo LC78815M 2-channel 16-bit D/A converter (x2, SOIC20)
      3771         : Fujitsu MB3771 master reset IC (SOIC8)
      DSW(4)       : 4 position DIP Switch (1,2,3 are ON, 4 is OFF). Silkscreen on PCB "SW1"
      DSW(8)       : 8 position DIP Switch (All OFF). Silkscreen on PCB "SW4"
      N341256      : NKK N341256 32k x8 SRAM (x6, SOJ28)
      CY7C182      : Cypress 8k x9 SRAM (SOJ28)
      MC68EC020FG25: Main CPU, Motorola 68EC020FG25 (QFP100), running at 24.576MHz. Clock source is Namco
                     custom clock divider 137. 68EC020 clock = Master Clock of 49.152MHz / 2
      C383         : Namco custom C383 (QFP100)
      139          : Namco custom 139 Serial Controller Interface IC (QFP64). NOTE! On some PCB's this chip
                     has been replaced by a custom C422 chip, though the PCB number is the same. Which means probably
                     the function of this chip matches 139
      137          : Namco custom clock divider IC (DIP28)
      C405         : Namco custom C405 (QFP176)
      C352         : Namco custom C352 PCM sound chip (QFP100), clock is 24.576MHz (49.152/2), from pin 6 of C137
      SS22C1       : PALCE 22V10H (PLCC28, labelled 'SS22C1')
      SS22C2       : PALCE 22V10H (PLCC28, labelled 'SS22C2')
      SS22C4       : PALCE 22V10H (PLCC28, labelled 'SS22C4')
      CAT28C64     : Catalyst Semiconductor Inc. CAT28C64 8k x8 EEPROM (DIP28)
      LEDS         : 8 LEDs of various colors flash (in various pretty patterns) when the CPU PCB is active.
      KEYCUS       : Namco custom (DIP32)
                                         Air Combat 22    = none
                                         Alpine Racer 1   = C391
                                         Alpine Racer 2   = C434
                                         Alpine Surfer    = C425
                                         Aqua Jet         = C429
                                         Armadillo Racing = C433
                                         Cyber Cycles     = C389
                                         Dirt Dash        = C418
                                         Prop Cycle       = C428
                                         Time Crisis      = C419
                                         Tokyo Wars       = C424

     *1            : Unpopulated position for PAL16V8 (PLCC20)
     *2            : Unpopulated position for Fujitsu MB86601 (QFP100)
     *3            : Unpopulated position for 32MHz OSC
     DATA.8K       : ST Microelectronics M27C4096 256k x16 EPROM (DIP40, labelled with the gamecode + 'DATA')
                     Game                EPROM label
                     -------------------------------
                     Air Combat 22      'ACS1 DATA'
                     Alpine Racer 1     'AR1 DATA B'
                     Alpine Racer 2     'ARS2 DATA'
                     Alpine Surfer      'AF1 DATA'
                     Aqua Jet           'AJ1 DATA'
                     Armadillo Racing   'AM1 DATA'
                     Cyber Cycles       'CB1 DATA B'
                     Dirt Dash          'DT1 DATA A'
                     Prop Cycle         'PR1 DATA'
                     Time Crisis        'TS1 DATA'
                     Tokyo Wars         'TW1 DATA'

     WAVEA.2L   \
     WAVEB.1L   /  : 16M/32M WAVE mask ROMs. If 32MBit DIP42, they're programmed in BYTE mode (DIP42/SOP44)
                     Game                Wave A        Wave B        Type
                     ----------------------------------------------------------------------------
                     Air Combat 22      'ACS1 WAVE0', 'ACS1 WAVE1' , both SOP44 32M mask ROMs
                     Alpine Racer 1     'AR1 WAVEA' ,              , DIP42 16M mask ROM
                     Alpine Racer 2     'ARS1 WAVEA', 'ARS2 WAVE B', both DIP42 32M mask ROMs
                     Alpine Surfer      'AF1 WAVEA' ,              , DIP42 32M mask ROM
                     Aqua Jet           'AJ1 WAVEA' , 'AJ1 WAVEB'  , both DIP42 32M mask ROMs
                     Armadillo Racing   'AM1 WAVEA' , 'AM1 WAVEB'  , both DIP42 32M mask ROMs. Prototype version uses TSOP56, mounted on a DIP48 adapter board
                     Cyber Cycles       'CB1 WAVEA' , 'CB1 WAVEB'  , WAVE A DIP42 32M mask ROM, WAVE B DIP42 16M mask ROM
                     Dirt Dash          'DT1 WAVEA' , 'DT1 WAVEB'  , both DIP42 32M mask ROMs
                     Prop Cycle         'PR1 WAVE A', 'PR1 WAVE B' , both DIP42 32M mask ROM
                     Time Crisis        'TS1 WAVE A', 'TS1 WAVE B' , WAVE A DIP42 32M mask ROM, WAVE B DIP42 16M mask ROM
                     Tokyo Wars         'TW1 WAVE A',              , DIP42 32M mask ROM


PROGRAM ROM Daughterboard PCB
-----------------------------
This PCB holds the main program ROMs. There is a small sticker on each PCB stating the game code and software revision.
The actual ROMs are not marked with any codes except the manufacturer's part number.
There are 4 known types of program daughterboards used on SS22 games (so far). The most common is the first type.
The PCB is very small (approx 2" x 3") containing one custom connector and some FlashROMs, and a PAL (in some cases).
The ones that contain a PAL are approx 3" x 3".

Type 1
SYSTEM SUPER22 MPM(F) PCB 8646961600 (8646971600)
|-------------------------|
|                         |
|                         |
| ROM1  ROM2  ROM3  ROM4  |
|                         |
|                         |
|  |-------------------|  |
|  |-------------------|  |
|-------------------------|
Notes:
      ROMx: Intel E28F008SA 8MBit FlashROM (x4, TSOP40)

      This PCB is used on:
                          Game          Software revision
                          -------------------------------
                          Air Combat 22    'ACS1 Ver.B'
                          Alpine Racer     'AR2 Ver.C'
                          Alpine Racer     'AR2 Ver.D'
                          Aqua Jet         'AJ2 Ver.B'
                          Armadillo Racing 'AM1 Ver.A'
                          Armadillo Racing 'AM2 Ver.A'
                          Cyber Cycles     'CB2 Ver.C'
                          Cyber Cycles     'CB1 Ver.C'
                          Dirt Dash        'DT2 Ver.B'
                          Prop Cycle       'PR2 Ver.A'
                          Time Crisis      'TS2 Ver.B'
                          Tokyo Wars       'TW2 Ver.A'
                          Tokyo Wars       'TW1 Ver.A'

Type 2
SYSTEM SUPER22 MPM(F16) PCB 8646962500 (8646972500)
|-------------------------|
|                         |
|                         |
|      ROM1     ROM2      |
|                         |
|                         |
|                         |
|  |-------------------|  |
|  |-------------------|  |
|-------------------------|
Notes:
      ROMx: Intel E28F016SA 16MBit FlashROMs (x2, TSOP56)

      This PCB is used on:
                          Game          Software revision
                          -------------------------------
                          Alpine Racer  'AR1 Ver.C'
                          Time Crisis   'TS2 Ver.A'
                          Dirt Dash     'DT1 Ver.A'
                          Dirt Dash     'DT2 Ver.A'

Type 3
SYSTEM SUPER22 MPM(F16X4) PCB 8646962901 (8646972901)
|-------------------------|
|SS22P1B                  |
|                         |
|        IC4_LM    IC5_UU |
|                         |
|                         |
|  IC2_LL     IC3_UM      |
|                         |
|                         |
|  |-------------------|  |
|  |-------------------|  |
|-------------------------|
Notes:
      ICx*   : Intel E28F016SA 16MBit FlashROMs (x4, TSOP56)
      SS22P1B: PALCE16V8H (PLCC20, labelled 'SS22P1B')

      This PCB is used on:
                          Game           Software revision
                          -------------------------------
                          Alpine Racer 2 'ARS2 Ver.B'

Type 4
SYSTEM SUPER22 MPM(F8F) PCB 8646963400 (8646973400)
|-------------------------|
|                         |
|      ROM3*    ROM4*     |
|      ROM1     ROM2      |
|                         |
|                         |
|  |-------------------|  |
|  |-------------------|  |
|-------------------------|
Notes:
      ROMx: Fujitsu MBM29F080 8MBit FlashROM (x4, TSOP44)
      * denotes flash ROMs located on the top side of PCB

      This PCB is used on:
                          Game          Software revision
                          -------------------------------
                          Prop Cycle       'PR1 Ver.A'

Type 5
SYSTEM SUPER22 MPM(F16X4F) PCB 8646963500 (8646973500)
SYSTEM SUPER22 MPM(F16X4F) PCB 8646963501 (8646973501) <-- very minor?
|-------------------------|
|SS22P1B                  |
|                         |
|                         |
| IC2_LL     IC4_UM       |
|                         |
|      IC3_LM      IC5_UU |
|                         |
|                         |
|  |-------------------|  |
|  |-------------------|  |
|-------------------------|
Notes:
      ICx    : Fujitsu 29F016 16MBit FlashROMs (x4, TSOP48)
      SS22P1B: PALCE16V8H (PLCC20, labelled 'SS22P1B')
               There is a small mod on this PAL as follows....
               - Pin 8 (I7) is lifted and the pad on the PCB at pin 8
                 is tied to pin 16 (IO4) of the PAL (no other pins are lifted).
                 In other words, the input signal at pin 8 on the PCB goes directly to output pin 16.
               - The lifted pin 8 (I7) is tied to the MPM PCB connector on pin 1
                 That pin traces to pin 6 (OUTPUT Y) of a 74F08 at 15F on the CPU board
                 Pins 4 (INPUT A) & 5 (INPUT B) of the 74F08 at 15F trace to Namco custom
                 IC C383 pins 53 (A INPUT) & 52 (B INPUT)

      This PCB is used on:
                          Game           Software revision
                          --------------------------------
                          Alpine Surfer  'AF2 Ver.A'   note: with PAL modification and using 8646963500 PCB
                          Alpine Racer 2 'ARS2 Ver.A'  note: without PAL modification and using 8646963501 PCB


Auxillary PCB (connector JC410 on the CPU PCB is used only for Time Crisis)
-------------
V159 GUN POINT PCB 244790102 (2447970102)
|---------------------------------|
|                                 |
|                      25.175MHz  |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                               J2|
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                J1               |
|---------------------------------|
Notes:
      There isn't much on this PCB other than 2 connectors and an oscillator plus a large amount of logic chips.
      J1 : Connector joining Gun PCB to a connector on the metal box. That joins to the gun interface PCB in the
           cab which supplies 24V for the solenoid in the guns.
      J2 : Connector joining to the CPU PCB (to JC410)


DSP PCB
-------
SYSTEM SUPER22 DSP PCB 8646960302 (8646970302)
  |--------------------------------------------------------------|
  | N341256     |-------|   SS22D1    N341256     |-------|      |
  | N341256     |       |             N341256     |       |      |
  | |---------| | C71   |                         | C405  |     |--|
|--||         | |       |                         |       |     |  |
|  ||  C396   | |-------|                         |-------|     |  |
|  ||         |                                                 |  |
|J ||         |           N341256                 |-------|     |  |
|D ||---------|           N341256                 |       |     |  |
|3 | |-------|                          N341256   | C405  |     |  |
|  | |       |                                    |       |     |  |
|  | | C71   |  |---------|                       |-------|     |  |
|--| |       |  |         |             |------|                |  |
  |  |-------|  |  342    |             | C379 |                |--|
  |  |------|   |         |             |      |                 |
  |  | C199 |   |         |             |------|  N341256        |
  |  |      |   |---------|                       N341256       |--|
  |  |------|                                                   |  |
  |   |-----|      SS22D5  SS22D4B    40MHz     |---------|     |  |
  |   |C353 |                                   |         |     |  |
  |   |-----|                                   |  C300   |     |  |
  |LED(x8)         SS22D2  SS22D3               |         |     |  |
  |   |-----|                                   |         |     |  |
  |   | 402 |  |---------|                      |---------|     |  |
  |   |-----|  |         |                                      |  |
  |            |  C403   |    KM681000   KM681000   KM681000    |  |
  |   |-----|  |         |                                      |--|
  |   | 402 |  |         |    KM681000   KM681000   KM681000     |
  |   |-----|  |---------|                                       |
  |--------------------------------------------------------------|
(logic chips omitted from the PCB layout)

Notes:
      JD3          : Custom Namco connector joining this PCB to the MROM PCB with a special flat cable known as a
                     'DHD harness'
      N341256      : NKK N341256 32k x8 SRAM (x9, SOJ28)
      KM681000     : Samsung Electronics KM681000 128k x8 SRAM (x6, SOP32)
      342          : Namco custom 342  (QFP160)
      402          : Namco custom 402  (x2, TQFP144)
      C71          : Namco custom C71, actually a Texas Instruments 320C25 DSP (x2, PLCC68). Clock input 40.000MHz
      C199         : Namco custom C199 (QFP100)
      C300         : Namco custom C300 (QFP160)
      C353         : Namco custom C353 (QFP120)
      C379         : Namco custom C379 (QFP64)
      C396         : Namco custom C396 (QFP160)
      C403         : Namco custom C403 (QFP136)
      C405         : Namco custom C396 (x2, QFP176)
      SS22D1       : PALCE 20V8H (PLCC28, labelled 'SS22D1')
      SS22D2       : PALCE 16V8H (PLCC20, labelled 'SS22D2')
      SS22D3       : PALCE 16V8H (PLCC20, labelled 'SS22D3')
      SS22D4B      : PALCE 16V8H (PLCC20, labelled 'SS22D4B')
      SS22D5       : PALCE 16V8H (PLCC20, labelled 'SS22D5')
      LEDS         : 8 red LEDs flash (in various pretty patterns) when the DSP PCB is active.


ROM PCB (type 1)
-------
SYSTEM SUPER22 MROM PCB 8646960400 (8646970400)
  |--------------------------------------------------------------|
  | SS22M3      TC551001(x3)                                     |
  | JP13                                 CG7.19D    CG5.19B      |
  |  PTR-L0.18K  PTR-M0.18J  PTR-U0.18F                          |
|--|                                     CG6.18D    CG4.18B      |
|  | PTR-L1.16K  PTR-M1.16J  PTR-U1.16F                   CG6.18A|
|  |                                     CG5.16D    CG3.16B      |
|J | PTR-L2.15K  PTR-M2.15J  PTR-U2.15F                   CG7.15A|
|R |                                     CG4.14D    CG2.14B      |
|4 | PTR-L3.14K  PTR-M3.14J  PTR-U3.14F                      JP1 |
|  |  SCG0.12L              SCG0.12F JP4 CG3.13D    CG1.13B  JP2 |
|  |                                 JP5                     JP3 |
|--|              SCG7.10J           JP6 CG2.12D    CG0.12B      |
  |   SCG1.10L              SCG1.10F                      SS22M1 |
  |                                      CG1.10D    SS22M2       |
  |                                                              |
  |   SCG2.8L     JP10      SCG2.8F      CG0.8D                 |--|
|--|              JP11                                          |  |
|  |              JP12                                          |  |
|  |  SCG3.7L               SCG3.7F      SS22M2     CCR-L.7B    |  |
|J |                                                            |  |
|R |                                                CCR-H.5B    |  |
|3 |  SCG4.5L               SCG4.5F                             |  |
|  |              JP7                                           |  |
|  |              JP8                                           |  |
|--|  SCG5.3L     JP9       SCG5.3F      CCR-L.3D               |  |
  |                                                             |--|
  |               SCG7.1J                CCR-H.1D                |
  |   SCG6.1L               SCG6.1F                              |
  |--------------------------------------------------------------|
(logic chips omitted from the PCB layout)

Notes:
      Namco SS22 MROM PCBs have 2 identical sets of CG*, SCG* and CCR-L/CCR-H ROMs on the PCB.
      The Japanese region code '1' is appended to all game codes on all MROMs.

      JR3, JR4     : Custom Namco connector joining this PCB to the VIDEO & DSP PCBs with a special flat cable known
                     as a 'DHD harness'
      SS22M1       : PALCE 16V8H (PLCC20, labelled 'SS22M1')
      SS22M2       : PALCE 20V8H (x2, PLCC28, labelled 'SS22M2')
      SS22M3       : PALCE 16V8H (PLCC20, labelled 'SS22M3')
      TC551001     : Toshiba TC551001 128k x8 SRAM (SOP32)
      JP1, JP2, JP3: Jumpers to configure CG* ROMs.  Hardwired to '16M' on the PCB. Alt. setting '32M'
      JP4, JP5, JP6: Jumpers to configure CG* ROMs.  Hardwired to '16M' on the PCB. Alt. setting '32M'
      JP7, JP8, JP9: Jumpers to configure SCG* ROMs. Hardwired to '16M' on the PCB. Alt. setting '32M'
   JP10, JP11, JP12: Jumpers to configure SCG* ROMs. Hardwired to '16M' on the PCB. Alt. setting '32M'
      JP13         : Jumper  to configure PTR* ROMs. Hardwired to '4M'  on the PCB. Alt. setting '8M'

Game               ROMs populated
-------------------------------------------------------------------------------------------------
Air Combat 22      ACS1CCRH.5B, ACS1CCRH.1D                                              4M SOP32
                   ACS1CCRL.7B, ACS1CCRL.3D                                             16M SOP44
                   ACS1CG0.12B, ACS1CG0.8D, ACS1CG1.13B,  ACS1CG1.10D, ACS1CG2.14B           "
                   ACS1CG2.12D, ACS1CG3.16B, ACS1CG3.13D, ACS1CG4.18B, ACS1CG4.14D           "
                   ACS1CG5.19B, ACS1CG5.16D, ACS1CG6.18A, ACS1CG6.18D, ACS1CG7.15A           "
                   ACS1CG7.19D, ACS1SCG0.12F, ACS1SCG0.12L, ACS1SCG1.10F, ACS1SCG1.10L       "
                   ACS1PTRU0.18F, ACS1PTRU1.16F, ACS1PTRU2.15F, ACS1PTRU3.14F            4M SOP32
                   ACS1PTRM0.18J, ACS1PTRM1.16J, ACS1PTRM2.15J, ACS1PTRM3.14J                "
                   ACS1PTRL0.18K, ACS1PTRL1.16K, ACS1PTRL2.15K, ACS1PTRL3.14K                "

Alpine Racer 1     AR1CCRH.5B, AR1CCRH.1D                                                4M SOP32
                   AR1CCRL.7B, AR1CCRL.3D, AR1CG0.12B, AR1CG0.8D, AR1CG1.13B            16M SOP44
                   AR1CG1.10D, AR1CG2.14B, AR1CG2.12D, AR1CG3.16B, AR1CG3.13D                "
                   AR1CG4.18B, AR1CG4.14D, AR1CG5.19B, AR1CG5.16D, AR1CG6.18A                "
                   AR1CG6.18D, AR1CG7.15A, AR1CG7.19D, AR1SCG0.12F, AR1SCG0.12L              "
                   AR1SCG1.10F, AR1SCG1.10L                                                  "
                   AR1PTRU0.18F, AR1PTRU1.16F, AR1PTRU2.15F, AR1PTRU3.14F                4M SOP32
                   AR1PTRM0.18J, AR1PTRM1.16J, AR1PTRM2.15J, AR1PTRM3.14J                    "
                   AR1PTRL0.18K, AR1PTRL1.16K, AR1PTRL2.15K, AR1PTRL3.14K                    "

Alpine Racer 2     ARS1CCRH.5B, ARS1CCRH.1D                                              4M SOP32
                   ARS1CCRL.7B, ARS1CCRL.3D, ARS1CG0.12B, ARS1CG0.8D, ARS1CG1.13B       16M SOP44
                   ARS1CG1.10D, ARS1CG2.14B, ARS1CG2.12D, ARS1CG3.16B, ARS1CG3.13D           "
                   ARS1CG4.18B, ARS1CG4.14D, ARS1CG5.19B, ARS1CG5.16D, ARS1SCG0.12F          "
                   ARS1SCG0.12L                                                              "
                   ARS1PTRU0.18F, ARS1PTRU1.16F, ARS1PTRU2.15F, ARS1PTRU3.14F            4M SOP32
                   ARS1PTRM0.18J, ARS1PTRM1.16J, ARS1PTRM2.15J, ARS1PTRM3.14J                "
                   ARS1PTRL0.18K, ARS1PTRL1.16K, ARS1PTRL2.15K, ARS1PTRL3.14K                "

Alpine Surfer      AF1CCRH.5B, AF1CCRH.1D                                                4M SOP32
                   AF1CCRL.7B, AF1CCRL.3D, AF1CG0.12B, AF1CG0.8D, AF1CG1.13B            16M SOP44
                   AF1CG1.10D, AF1CG2.14B, AF1CG2.12D, AF1CG3.16B, AF1CG3.13D                "
                   AF1CG4.18B, AF1CG4.14D, AF1SCG0B.12F,AF1SCG0B.12L                         "
                   AF1PTRU0.18F, AF1PTRU1.16F, AF1PTRM0.18J, AF1PTRM1.16J                4M SOP32
                   AF1PTRL0.18K, AF1PTRL1.16K                                                "

Aqua Jet           AJ1CCRH.5B, AJ1CCRH.1D                                                4M SOP32
                   AJ1CCRL.7B, AJ1CCRL.3D, AJ1CG0.12B, AJ1CG0.8D, AJ1CG1.13B            16M SOP44
                   AJ1CG1.10D, AJ1CG2.14B, AJ1CG2.12D  AJ1CG3.16B, AJ1CG3.13D                "
                   AJ1CG4.18B, AJ1CG4.14D, AJ1CG5.19B, AJ1CG5.16D, AJ1CG6.18A                "
                   AJ1CG6.18D, AJ1CG7.15A, AJ1CG7.19D, AJ1SCG0.12F, AJ1SCG0.12L              "
                   AJ1SCG1.10F,AJ1SCG1.10L, AJ1SCG2.8F, AJ1SCG2.8L                           "
                   AJ1PTRU0.18F, AJ1PTRU1.16F, AJ1PTRU2.15F, AJ1PTRU3.14F                4M SOP32
                   AJ1PTRM0.18J, AJ1PTRM1.16J, AJ1PTRM2.15J, AJ1PTRM3.14J                    "
                   AJ1PTRL0.18K, AJ1PTRL1.16K, AJ1PTRL2.15K, AJ1PTRL3.14K                    "

Armadillo Racing   AM1CCRH.5B, AM1CCRH.1D                                                4M SOP32
                   AM1CCRL.7B, AM1CCRL.3D, AM1CG0.12B, AM1CG0.8D, AM1CG1.13B            16M SOP44
                   AM1CG1.10D, AM1CG2.14B, AM1CG2.12D, AM1CG3.16B, AM1CG3.13D                "
                   AM1CG4.18B, AM1CG4.14D, AM1CG5.19B, AM1CG5.16D, AM1CG6.18A                "
                   AM1CG6.18D, AM1CG7.15A, AM1CG7.19D, AM1SCG0.12F,AM1SCG0.12L               "
                   AM1SCG1.10F,AM1SCG1.10L                                                   "
                   AM1PTRU0.18F, AM1PTRU1.16F, AM1PTRU2.15F, AM1PTRU3.14F                4M SOP32
                   AM1PTRM0.18J, AM1PTRM1.16J, AM1PTRM2.15J, AM1PTRM3.14J                    "
                   AM1PTRL0.18K, AM1PTRL1.16K, AM1PTRL2.15K, AM1PTRL3.14K                    "

Cyber Cycles       CB1CCRH.5B, CB1CCRH.1D                                                4M SOP32
                   CB1CCRL.7B, CB1CCRL.3D, CB1CG0.12B, CB1CG0.8D, CB1CG1.13B            16M SOP44
                   CB1CG1.10D, CB1CG2.14B, CB1CG2.12D, CB1CG3.16B, CB1CG3.13D                "
                   CB1CG4.18B, CB1CG4.14D, CB1CG5.19B, CB1CG5.16D, CB1CG6.18A                "
                   CB1CG6.18D, CB1SCG0.12F,CB1SCG0.12L, CB1SCG1.10F,CB1SCG1.10L              "
                   CB1PTRU0.18F, CB1PTRU1.16F, CB1PTRU2.15F, CB1PTRU3.14F                4M SOP32
                   CB1PTRM0.18J, CB1PTRM1.16J, CB1PTRM2.15J, CB1PTRM3.14J                    "
                   CB1PTRL0.18K, CB1PTRL1.16K, CB1PTRL2.15K, CB1PTRL3.14K                    "

Dirt Dash          DT1CCRH.5B, DT1CCRH.1D                                                4M SOP32
                   DT1CCRL.7B, DT1CCRL.3D, DT1CG0.12B, DT1CG0.8D, DT1CG1.13B            16M SOP44
                   DT1CG1.10D, DT1CG2.14B, DT1CG2.12D, DT1CG3.16B, DT1CG3.13D                "
                   DT1CG4.18B, DT1CG4.14D, DT1CG5.19B, DT1CG5.16D, DT1CG6.18A                "
                   DT1CG6.18D, DT1CG7.15A, DT1CG7.19D, DT1SCG0.12F,DT1SCG0.12L               "
                   DT1SCG1.10F,DT1SCG1.10L                                                   "
                   DT1PTRU0.18F, DT1PTRU1.16F, DT1PTRU2.15F, DT1PTRM0.18J                4M SOP32
                   DT1PTRM1.16J, DT1PTRM2.15J, DT1PTRL0.18K, DT1PTRL1.16K, DT1PTRL2.15K      "

Prop Cycle         PR1CCRH.5B, PR1CCRH.1D                                                4M SOP32
                   PR1CCRL.7B, PR1CCRL.3D, PR1CG0.12B, PR1CG0.8D, PR1CG1.13B            16M SOP44
                   PR1CG1.10D, PR1CG2.14B, PR1CG2.12D, PR1CG3.16B, PR1CG3.13D                "
                   PR1CG4.18B, PR1CG4.14D, PR1CG5.19B, PR1CG5.16D, PR1CG6.18A                "
                   PR1CG6.18D, PR1CG7.15A, PR1CG7.19D, PR1SCG0.12F,PR1SCG0.12L               "
                   PR1SCG1.10F,PR1SCG1.10L                                                   "
                   PR1PTRU0.18F, PR1PTRU1.16F, PR1PTRU2.15F, PR1PTRM0.18J                4M SOP32
                   PR1PTRM1.16J, PR1PTRM2.15J, PR1PTRL0.18K, PR1PTRL1.16K, PR1PTRL2.15K      "

Time Crisis        TS1CCRH.5B, TS1CCRH.1D                                                4M SOP32
                   TS1CCRL.7B, TS1CCRL.3D, TS1CG0.12B, TS1CG0.8D, TS1CG1.13B            16M SOP44
                   TS1CG1.10D, TS1CG2.14B, TS1CG2.12D, TS1CG3.16B, TS1CG3.13D                "
                   TS1CG4.18B, TS1CG4.14D, TS1CG5.19B, TS1CG5.16D, TS1CG6.18A                "
                   TS1CG6.18D, TS1CG7.15A, TS1CG7.19D, TS1SCG0.12F,TS1SCG0.12L               "
                   TS1SCG1.10F,TS1SCG1.10L, TS1SCG2.8F, TS1SCG2.8L, TS1SCG3.7F               "
                   TS1SCG3.7L, TS1SCG4.5F, TS1SCG4.5L, TS1SCG5.3F, TS1SCG5.3L                "
                   TS1PTRU0.18F, TS1PTRU1.16F, TS1PTRU2.15F, TS1PTRM0.18J                4M SOP32
                   TS1PTRM1.16J, TS1PTRM2.15J, TS1PTRL0.18K, TS1PTRL1.16K, TS1PTRL2.15K      "

Tokyo Wars         TW1CCRH.5B, TW1CCRH.1D                                                4M SOP32
                   TW1CCRL.7B, TW1CCRL.3D, TW1CG0.12B, TW1CG0.8D, TW1CG1.13B            16M SOP44
                   TW1CG1.10D, TW1CG2.14B, TW1CG2.12D, TW1CG3.16B, TW1CG3.13D                "
                   TW1CG4.18B, TW1CG4.14D, TW1CG5.19B, TW1CG5.16D, TW1CG6.18A                "
                   TW1CG6.18D, TW1CG7.15A, TW1CG7.19D, TW1SCG0.12F,TW1SCG0.12L               "
                   TW1SCG1.10F,TW1SCG1.10L, TW1SCG2.8F, TW1SCG2.8L, TW1SCG3.7F, TW1SCG3.7L   "
                   TW1PTRU0.18F, TW1PTRU1.16F, TW1PTRU2.15F, TW1PTRU3.14F                  4M SOP32
                   TW1PTRM0.18J, TW1PTRM1.16J, TW1PTRM2.15J, TW1PTRM3.14J                    "
                   TW1PTRL0.18K, TW1PTRL1.16K, TW1PTRL2.15K, TW1PTRL3.14K                    "


ROM PCB (type 2)
-------
SS22DS FLASH PCB 8650961300 (8650971300)
  |--------------------------------------------------------------|
  |     F13M  F13L                      F12J   F12E    |------|  |
  |                                                    |ALTERA|  |
  |     F12M  F12L                                     |EPMXXXX  |
|--|                                    F11J   F11E    |------|  |
|  | HM628128 F11L                                               |
|  | HM628128                                             DSF4   |
|J | HM628128 F9L                       F9J     F9E              |
|R |                                                             |
|4 | DSF5A                                                       |
|  |                                    F8J     F8E              |
|  |                                                             |
|--|                                                    SS22DSF3 |
  |           F7L   F7M                 F7J     F7E              |
  |                                                              |
  |                                                              |
  |                                     F6J     F6E     SS22DSF3|--|
|--|                                                            |  |
|  |                                                            |  |
|  |          F5L   F5M                 F5J     F5E             |  |
|J |                                                            |  |
|R |                                                            |  |
|3 |                                    F4J     F4E             |  |
|  |                                                            |  |
|  |          F3L   F3M                                         |  |
|--|                                                            |  |
  | SS22DSF2                            F2J     F2E             |--|
  |                                                              |
  | SS22DSF2  F1L   F1M                 F1J     F1E              |
  |--------------------------------------------------------------|
(logic chips omitted from the PCB layout)

Notes:
      Namco SS22 FLASH PCBs have 2 identical sets of CG*, SCG* and CCR-L/CCR-H ROMs on the PCB.

      JR3, JR4     : Custom Namco connector joining this PCB to the VIDEO & DSP PCBs with a special flat cable known
                     as a 'DHD harness'
      EPMXXXX      : Altera EPM??? (PLCC84, unknown chip model, possibly EPM7064, sticker on top of it blocking ID markings)
      DSF5A        : PALCE 16V8H (PLCC20, labelled 'DSF5A')
      DSF4         : PALCE 16V8H (PLCC20, labelled 'DSF4')
      SS22DSF3     : EPM7032 (x2, PLCC44, labelled 'SS22DSF3')
      SS22DSF2     : EPM7032 (x2, PLCC44, labelled 'SS22DSF2')
      HM628128     : Hitachi HM628128 128k x8 SRAM (TSOP32)

Game               ROMs populated (All Intel E28F016SA TSOP56 16M FlashROMs)
-----------------------------------------------------------------
Armadillo Racing   F1E, F1J, F2E, F2J            - CCRL/CCRH
ROMs (prototype or
early test version)F4E, F4J, F5E, F5J, F6E, F6J, \
                   F7E, F7J, F8E, F8J, F9E, F9J, \ CGx ROMs
                   F11E, F11J, F12E, F12J        /

                   F1L, F1M, F3L, F3M, F5L, F5M, \
                   F7L, F7M                      / SCGx ROMs

                   F9L, F11L, F12L, F13L,        \
                   F12M, F13M                    / PTR ROMs


VIDEO PCB
---------
1st Revision
SYSTEM SUPER22 VIDEO 8646960204 (8646970204)

2nd Revision
SYSTEM SUPER22 VIDEO(B) 8646961200 (8646971200)

3rd Revision (PCB layout shown below)
SYSTEM SUPER22 VIDEO(C) 8646962700 (8646972700)
  |--------------------------------------------------------------|
  |                                                              |
  |                    HM534251BJ-8(x22)                         |
  |                                                   |-----|   |--|
  |  |---------| |---------| |---------| |---------|  |C401 |   |  |
  |  |         | |         | |         | |         |  |-----|   |  |
  |  |   304   | |   304   | |   304   | |   304   |            |  |
  |  |         | |         | |         | |         |  |-----|   |  |
  |  |         | |         | |         | |         |  |C400 |   |  |
  |  |---------| |---------| |---------| |---------|  |-----|   |  |
  |  N341256      |-----| |-----| |-----| |-----|               |  |
  |  N341256      |C407 | |C401 | |C401 | |C401 |  |---------|  |  |
  |               |-----| |-----| |-----| |-----|  |         |  |  |
  |   |---------|                                  |  C399   |  |--|
  |   |         |         |-----| |-----| |-----|  |         |   |
  |   |  C387   |         |C400 | |C400 | |C400 |  |         |   |
  |   |         |         |-----| |-----| |-----|  |---------|  |--|
|--|  |         |                    |-----|            N341256 |  |
|  |  |---------|                    |C406 |  |-----|   N341256 |  |
|  |  |-----|                        |-----|  |C381 |           |  |
|J |  |C381 |                |---------|      |-----|           |  |
|V |  |-----|      N341256   |         |                LC321664|  |
|3 |     51.2MHz   N341256   |  C404   |      |---------|       |  |
|  | |---------| |---------| |         |      |         |       |  |
|  | |         | |         | |         |      |  C361   |       |  |
|--| |  C374   | |  C395   | |---------|      |         |       |  |
  |  |         | |         | N341256          |         |       |--|
  |  |         | |         | N341256          |---------|        |
  |  |---------| |---------| N341256                    CXD1178Q |
  |--------------------------------------------------------------|
(logic chips omitted from the PCB layout)

Notes:
      JV3          : Custom Namco connector joining this PCB to the MROM PCB with a special flat cable known
                     as a 'DHD harness'
      N341256      : NKK N341256 32k x8 SRAM (x9, SOJ28)
      HM534251BJ-8 : Hitachi HM534251BJ-8 256k x4 FASTPAGE DRAM (x22, SOJ28)
      LC321664     : Sanyo LC321664 64k x16 DRAM (SOJ40)
      CXD1178Q     : Sony CXD1178Q 8-bit RGB 3-channel D/A converter (QFP48)
      304          : Namco custom 304  (x4, QFP120)
      C361         : Namco custom C361 (QFP120)
      C374         : Namco custom C374 (QFP160)
      C381         : Namco custom C381 (x2, QFP144)
      C387         : Namco custom C387 (QFP160)
      C395         : Namco custom C395 (QFP168)
      C399         : Namco custom C399 (QFP160)
      C400         : Namco custom C400 (x4, QFP100)
                     - x3 on 1st Revision
      C401         : Namco custom C401 (x4, QFP64)
                     - x5 on 1st Revision
      C404         : Namco custom C404 (QFP208)
      C406         : Namco custom C406 (TQFP120)
      C407         : Namco custom C407 (QFP64) NOTE! On Revision A & B, this position is populated by an
                                                     Altera EPM7064 PLCC84 FPGA labelled 'SS22V1B'
                                                     The Altera chip runs very hot and fails quite often.
                                                     Even if a heatsink is added to the chip it still fails.
                                                     The failure of this chip is the primary cause of
                                                     video faults on Namco Super System 22 PCBs.
                                                     (Second reason for video faults is generally attributed
                                                     to failure of RAM on this PCB and/or the DSP PCB)


Motherboard PCB
---------------
1st Revision
SYSTEM SUPER22 MOTHER PCB 8646960602 (8646970602)

2nd Revision
SYSTEM SUPER22 MOTHER(B) PCB (number not known)

3rd Revision
SYSTEM SUPER22 MOTHER(C) PCB 8646960602 (8646970602)
|------------------------------------------------------------------|
| J1                  J2           J4           J6           J8    |
|           J10                           J5   IC2     J7          |
|                     J3          IC3          IC1              J9 |
|                                                                  |
| JC2 |---------------------|        |---------------------|JC1    |
|     |---------------------|        |---------------------|       |
|                                                                  |
| JD2 |---------------------|        |---------------------|JD1    |
|     |---------------------|        |---------------------|       |
|                                                                  |
|                                    |---------------------|JR1    |
|                                    |---------------------|       |
|                                                                  |
| JV2 |---------------------|        |---------------------|JV1    |
|     |---------------------|        |---------------------|       |
|------------------------------------------------------------------|
Notes:
      IC1     : LB1233 (DIP8)
      IC2, IC3: LB1235 (DIP8)

      JC1, JC2: Connectors to plug in CPU PCB
      JD1, JD2: Connectors to plug in DSP PCB
      JR1     : Connector  to plug in MROM PCB
      JV1, JV2: Connectors to plug in VIDEO PCB

      J1 : 9 pin power input socket   Pin  Use
                                     -----------
                                      1    +5V
                                      2    +5V
                                      3    +5V
                                      4    +5V
                                      5    Ground
                                      6    Ground
                                      7    Ground
                                      8    Ground
                                      9    +12V

      J2 : 9 pin link connector   Pin  Use
                                  --------------
                                   1   Ring In+
                                   2   Ring In-
                                   3   Ring Out2+
                                   4   Ground
                                   5   /RXD+
                                   6   /RXD-
                                   7   /TXD (Note: Steering wheel motor torque data on Dirt Dash is output via serial link here which is connected to a Motor/Feedback PCB)
                                   8   GND
                                   9   +5V

      J3 : 9 pin socket   Pin  Use
                          -------------------
                           1   Service Credit
                           2   Test
                           3   NC
                           4   +12V
                           5   Counter
                           6   Ground
                           7   Ground
                           8   Coin 1
                           9   Coin 2

      J4 : 8 pin connector   Use Per Game (usually game-specific buttons/switches)
                 Pin    -----------------------------------------------------------------------------------------------------------------------------------------------
                        Game    ACOM22      ALPINER12      ALPINESURF     AQUAJET     ARMADILLO   CYBERCYCL    DIRTDASH     PROPCYCL     TIMECRIS     TOKYOWARS
                -------------------------------------------------------------------------------------------------------------------------------------------------------
                  1             Missile     Start          Start          Start       %           View/Start   View         -            Trigger      View/Start
                  2             Gun         Left Select    Left Select    -           -           -            Shift Up     -            Pedal        Right Trigger
                  3             Start       Right Select   Right Select   -           -           -            Shift Down   Pedal A      -            Left Trigger
                  4             -           Safety Free    Safety Free    -           -           -            -            Pedal B      -            DX Cab->GND
                  5             -           Safety Lock    Safety Lock    -           -           -            -            Start        -            -
                  6             -           -              -              -           -           -            SD Cab->GND  -            -            -
                  7 GND  -->>
                  8 GND  -->>

                  Notes: %: Armadillo Start Button will be on this connector somewhere, probably at pin 1.


      J5 : 15 pin socket   Use Per Game (usually game-specific relays/lamps)
                 Pin    -----------------------------------------------------------------------------------------------------------------------------------------------
                        Game    ACOM22       ALPINER12     ALPINESURF   AQUAJET        ARMADILLO   CYBERCYCL    DIRTDASH     PROPCYCL     TIMECRIS     TOKYOWARS
                -------------------------------------------------------------------------------------------------------------------------------------------------------
                  1             Start Lamp   Relay (Dir)   Relay        -              %           1st Lamp     Freeze       Fan          Gun Opto     View/Start Lamp
                  2             Mute         Relay (Motor) Relay        Fan            -           2nd Lamp     Mute         Start Lamp   -            Hit Lamp
                  3             -            Mute          -            -              -           3rd Lamp     ^            -            -            Woofer Control
                  4             -            Start Lamp    Start Lamp   Start Lamp     -           4th Lamp     -            -            -            -
                  5             -            Left Lamp     Left Lamp    -              -           Red Lamp     -            -            -            -
                  6             -            Right Lamp    Right Lamp   -              -           Yellow Lamp  -            -            -            Seat Motion Valve ->DX Cab
                  7             -            -             -            Valve Solenoid -           Green Lamp   -            -            -            -
                  8             -            -             -            -              -           Lead Lamp    -            -            -            Trigger Lamp Right
                  9             -            -             -            -              -           View Lamp    -            -            -            Trigger Lamp Left
                  10            -            -             -            -              -           #            -            -            -            Mute
                  11  NC   -->>
                  12  NC   -->>
                  13  +12V -->>
                  14  +5V  -->>
                  15  GND  -->>

                  Notes: %: Armadillo Start Lamp will be on this connector somewhere.
                         ^: Dirt Dash DX valve solenoid will be on this connector somewhere.
                         #: Cyber Cycles lamp test shows a blue lamp but the manual does not mention it or show the wiring and it doesn't exist on the cabinet.

      J6 : 12 pin audio output connector   Pin  Use
           All signals connect to          ----------
           4-Channel Audio PCB              1   SPKL+
           8647960100 (8647970100)          2   SPKL-
                                            3   SPKR+
                                            4   SPKR-
                                            5   Audio (Gas Tank speaker on Cyber Cycles & Aquajet, Sub Woofer on Dirt Dash, Air Combat 22 & Tokyo Wars)
                                            6   Ground
                                            7   Audio (Aux)
                                            8   Ground
                                            9   NC
                                            10  Ground
                                            11  Ground
                                            12  +12V

      J7 : 12 pin analog controls socket   Use (usually game-specific potentiometers, either 1K or 5K)
                 Pin    -----------------------------------------------------------------------------------------------------------------------------------------------
                        Game    ACOM22        ALPINER12    ALPINESURF   AQUAJET       ARMADILLO   CYBERCYCL    DIRTDASH     PROPCYCL     TIMECRIS     TOKYOWARS
                -------------------------------------------------------------------------------------------------------------------------------------------------------
                  1  +5V  -->>
                  2             Left/Right    Swing        Side         Swing         -           Bank         Steering     Left/Right   -            Gas
                  3             Up/Down       Edge         Tilt         Gas           -           Gas          Gas          Up/Down      -            -
                  4  GND  -->>
                  5  +5V  -->>
                  6             Throttle      -            -            Control Arm   -           Brake        Brake        -            -            Forward Pedal
                  7             -             -            -            -             -           -            -            -            -            Backward Pedal
                  8  GND  -->>
                  9  NC   -->>
                  10 NC   -->>
                  11 NC   -->>
                  12 GND  -->>

      J8 : 10 pin connector (not used by any games)

      J9 : 6 pin video output socket   Pin  Use
                                       ---------
                                        1   Red
                                        2   Green
                                        3   Blue
                                        4   Composite Sync (VSync 15kHz interlaced)
                                        5   Ground
                                        6   NC

      J10: 16 pin flat cable connector, only populated on Mother(C) PCB.  (Prop Cycle: B5=Pedal Phase B, A5=Pedal Phase A). Might be used on Armadillo Racing for the Trackball?


AMP PCB
-------
SYSTEM SUPER22 AMP(4) PCB 8647960100 (8647970100) (sticker 'AMP(2) PCB 8647961100')
|-----------------------------------|
|J1  J2   LA4705  J3   *1    *2   J5|
|                                   |
|-----------------------------------|
Notes:
      LA4705: 2-channel 15W Power Amp
      J1    : 3 pin power input socket   Pin  Use
                                         -----------
                                          1   +12V
                                          2   Ground
                                          3   NC

      J2    : 4 pin dual speaker output socket   Pin  Use
                                                 ---------
                                                  1   SP1+
                                                  2   SP1-
                                                  3   SP2+
                                                  4   SP2-

      J3    : 8 pin sound data input connector from Mother PCB J6   Pin  Use
                                                                    ----------
                                                                     1   SPKL+
                                                                     2   SPKL-
                                                                     3   SPKR+
                                                                     4   SPKR-
                                                                     5   NC
                                                                     6   NC
                                                                     7   NC
                                                                     8   NC

      *1    : Unpopulated position for a 2nd LA4705 Power Amp
      *2    : J4 - Unpopulated position for another 4 pin dual speaker output socket
      J5    : 2 pin connector used for sound mute   Pin  Use
                                                    -----------
                                                     1   Mute
                                                     2   Ground
*/

#include "emu.h"
#include "namcos22.h"

#include "cpu/m68000/m68020.h"
#include "cpu/tms32025/tms32025.h"
#include "speaker.h"

// 51.2MHz XTAL on video board, pixel clock of 12.8MHz (doubled in MAME because of unemulated interlacing)
// HSync - 15.7248 kHz -> htotal = 814.001
// VSync - 59.9042 Hz  -> vtotal = 524.998 (262+263)
#define PIXEL_CLOCK         (51.2_MHz_XTAL/4*2)

#define HTOTAL              (814)
#define HBEND               (0)
#define HBSTART             (640)

#define VTOTAL              (525)
#define VBEND               (0)
#define VBSTART             (480)


#define MCU_SPEEDUP         1     /* mcu idle skipping */
#define SERIAL_IO_PERIOD    (100) /* lower DSP serial I/O period */
// actual dsp serial freq is unknown, should be much higher than 100Hz of course
// serial comms doesn't work yet anyway

/*********************************************************************************************/

// Main CPU

/* SCI, preliminary!

20020000  2 R/W RX Status
            0x01 : Frame Error
            0x02 : Frame Received
            0x04 : ?

20020002  2 R/W Status/Control Flags
            0x01 :
            0x02 : RX flag? (cleared every vsync)
            0x04 : RX flag? (cleared every vsync)
            0x08 :

20020004  2 W   FIFO Control Register
            0x01 : sync bit enable?
            0x02 : TX FIFO sync bit (bit-8)

20020006  2 W   TX Control Register
            0x01 : TX start/stop
            0x02 : ?
            0x10 : ?

20020008  2 W   -
2002000a  2 W   TX Frame Size
2002000c  2 R/W RX FIFO Pointer (0x0000 - 0x0fff)
2002000e  2 W   TX FIFO Pointer (0x0000 - 0x1fff)
*/
u16 namcos22_state::namcos22_sci_r(offs_t offset)
{
	switch (offset)
	{
		case 0x0:
			return 0x0004;

		default:
			return 0;
	}
}

void namcos22_state::namcos22_sci_w(offs_t offset, u16 data)
{
}


// System Controller

void namcos22_state::syscon_irqlevel(offs_t offset, u8 data)
{
	int line = 1 << offset;
	int oldlevel = m_syscontrol[offset] & 7;
	int newlevel = data & 7;

	m_irq_enabled &= ~line;
	if (m_is_ss22)
		m_irq_enabled |= (newlevel != 0) ? line : 0;
	else
		m_irq_enabled |= (data & 0x10) ? line : 0; // always sets 0x30 to enable

	// change active state
	if (m_irq_state & line)
	{
		if (!(m_irq_enabled & line))
		{
			syscon_irqack(offset, 0);
		}
		else if (oldlevel != newlevel)
		{
			m_maincpu->set_input_line(oldlevel, CLEAR_LINE);
			m_maincpu->set_input_line(newlevel, ASSERT_LINE);
		}
	}
}

void namcos22_state::syscon_irqack(offs_t offset, u8 data)
{
	int line = 1 << offset;
	int level = m_syscontrol[offset] & 7;

	m_irq_state &= ~line;
	m_maincpu->set_input_line(level, CLEAR_LINE);
}

void namcos22_state::syscon_dspcontrol(offs_t offset, u8 data)
{
	if (data == m_syscontrol[offset])
		return;

	if (data == 0)
	{
		// disable DSPs
		master_enable(false);
		slave_enable(false);
		m_dsp_irq_enabled = false;
	}
	else if (data == 1)
	{
		// enable dsp and rendering subsystem
		master_enable(true);
		slave_enable(true);
		m_dsp_irq_enabled = true;
	}
	else if (data == 0xff)
	{
		// used to upload game-specific code to master/slave dsps
		master_enable(true);
		m_dsp_irq_enabled = false;
	}
}

void namcos22_state::syscon_mcucontrol(offs_t offset, u8 data)
{
	// enable/disable mcu
	m_mcu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
}

u8 namcos22_state::syscon_r(offs_t offset)
{
	return m_syscontrol[offset];
}


/* System Controller (System Super22)

0x00: vblank irq level
0x01: hblank irq level
0x02: sci irq level
0x03: unknown irq level (unused?)

0x04: vblank irq ack
0x05: hblank irq ack
0x06: sci irq ack
0x07: unknown irq ack

0x08: ?
0x09: 0x62 or 0x61
0x0a: 0x62
0x0b: 0x57

0x0c: 0x40
0x0d: 0x12
0x0e: 0x52 or 0x50
0x0f: 0x72 or 0x71

0x10: 0xe0
0x11: 0x2c
0x12: 0x50
0x13: 0xff

0x14: watchdog
0x15: ?
0x16: subcpu enable
0x17: 0x0f

0x18: ?
0x19: ?
0x1a: ?
0x1b: 0x01

0x1c: dsp control
*/
void namcos22_state::ss22_syscon_w(offs_t offset, u8 data)
{
	switch (offset)
	{
		// irq level / enable irqs
		case 0x00: // vblank
		case 0x01: // hblank
		case 0x02: // SCI
		case 0x03: // unknown
			syscon_irqlevel(offset, data);
			break;

		// acknowledge irqs
		case 0x04: // vblank
		case 0x05: // hblank
		case 0x06: // SCI
		case 0x07: // unknown
			syscon_irqack(offset-4, data);
			break;

		// watchdog
		case 0x14:
			break;

		// mcu reset
		case 0x16:
			syscon_mcucontrol(offset, data);
			break;

		// dsp control
		case 0x1c:
			syscon_dspcontrol(offset, data);
			break;

		// other regs: unknown
		default:
			break;
	}

	m_syscontrol[offset] = data;
}

/*
000064: 0000 8C9A  (1)
000068: 0000 8CA2  (2)
00006C: 0000 8CAA  (3)
000070: 0000 8CB2  (4)

00008bd8: sys[0x01] := 0x01 // scanline
00008be0: sys[0x02] := 0x02 // sci
00008be8: sys[0x03] := 0x03 // unk
00008bf0: sys[0x00] := 0x04 // vblank
00008bf8: sys[0x08] := 0xff // ?
*/
INTERRUPT_GEN_MEMBER(namcos22s_state::namcos22s_interrupt)
{
	// vblank irq
	int line = 1 << 0;
	if (m_irq_enabled & line)
	{
		m_irq_state |= line;
		device.execute().set_input_line(m_syscontrol[0] & 7, ASSERT_LINE);
	}
}


/* System Controller (System22)

0x00: hblank irq level
0x01: ?
0x02: sci irq level
0x03: unknown irq level

0x04: vblank irq level
0x05: hblank irq ack
0x06: ?
0x07: sci irq ack

0x08: unknown irq ack
0x09: vblank irq ack
0x0a: ?
0x0b: ?

0x0c: ?
0x0d: ?
0x0e: ?
0x0f: ?

0x10: ?
0x11: ?
0x12: ?
0x13: ?

0x14: ?
0x15: ? (cyc1)
0x16: Watchdog timer reset
0x17: ?

0x18: 0 or 1 -> mcu reset?
0x19: ?
0x1a: 0 or 1 or 0xff -> DSP control
0x1b: ?
*/
void namcos22_state::s22_syscon_w(offs_t offset, u8 data)
{
	switch (offset)
	{
		// irq level / enable irqs
		case 0x00: // hblank
		case 0x01: // ?
		case 0x02: // SCI
		case 0x03: // unknown
		case 0x04: // vblank
			syscon_irqlevel(offset, data);
			break;

		// acknowledge irqs
		case 0x05: // hblank
		case 0x06: // ?
		case 0x07: // SCI
		case 0x08: // unknown
		case 0x09: // vblank
			syscon_irqack(offset-5, data);
			break;

		// watchdog
		case 0x16:
			break;

		// mcu reset
		case 0x18:
			syscon_mcucontrol(offset, data);
			break;

		// dsp control
		case 0x1a:
			syscon_dspcontrol(offset, data);
			break;

		// other regs: unknown
		default:
			break;
	}

	m_syscontrol[offset] = data;
}

/* namcos22_interrupt
Ridge Racer:
    1:0a0b6
    2:09fe8 (rte)
    3:09fe8 (rte)
    4:09f9a (vblank)
    5:14dee (SCI)
    6:09fe8 (rte)
    7:09fe8 (rte)

Ridge Racer 2:
    1:0d10c  40000005
    2:0cfa2 (rte)
    3:0cfa2 (rte)
    4:0cfa2 (rte)
    5:0cef0
    6:1bbcc
    7:0cfa2 (rte)

Ace Driver:
    9f8 (rte)
    9fa (rte)
    9fc (rte)
    9fe (rte)
    a00
    a46
    a4c (rte)

Victory Lap:
    a54 indir to 21c2 (hblank?)
    a5a (rte)
    a5c (rte)
    a5e (rte)
    a60 irq
    abe indirect to 27f1e (SCI)
    ac4 (rte)

Cyber Commando:
    move.b  #$36, $40000002.l
    move.b  # $0, $40000003.l
    move.b  #$35, $40000004.l

    move.b  #$34, $40000004.l
*/
INTERRUPT_GEN_MEMBER(namcos22_state::namcos22_interrupt)
{
	switch (m_gametype)
	{
		case NAMCOS22_RIDGE_RACER:
		case NAMCOS22_RIDGE_RACER2:
		case NAMCOS22_RAVE_RACER:
		case NAMCOS22_ACE_DRIVER:
		case NAMCOS22_VICTORY_LAP:
			handle_driving_io();
			break;

		case NAMCOS22_CYBER_COMMANDO:
			handle_cybrcomm_io();
			break;

		default:
			break;
	}

	// vblank irq
	int line = 1 << 4;
	if (m_irq_enabled & line)
	{
		m_irq_state |= line;
		device.execute().set_input_line(m_syscontrol[4] & 7, ASSERT_LINE);
	}
}


u16 namcos22_state::namcos22_shared_r(offs_t offset)
{
	return m_shareram[offset];
}

void namcos22_state::namcos22_shared_w(offs_t offset, u16 data, u16 mem_mask)
{
	COMBINE_DATA(&m_shareram[offset]);
}


u32 namcos22_state::namcos22_dspram_r(offs_t offset)
{
	return m_polygonram[offset] | 0xff000000; // only d0-23 are connected
}

void namcos22_state::namcos22_dspram_w(offs_t offset, u32 data, u32 mem_mask)
{
	if (ACCESSING_BITS_16_23)
	{
		// only d0-23 are connected
		mem_mask |= 0xff000000;
		data = signed24(data); // !
	}
	COMBINE_DATA(&m_polygonram[offset]);
}


u16 namcos22_state::namcos22_keycus_r(offs_t offset)
{
	// Like other Namco hardware, this chip is used for protection as well as
	// reading random values in some games.
	// It works in combination with keycus_w, but not yet understood how.

	// protection (not used for all games)
	// note: some games will XOR this register against a magic value, but that doesn't mean
	// that the magic value is the keycus id. For example dirtdash XORs against $2c79, but its
	// keycus id is $01a2 evident from a simple compare.
	switch (m_gametype)
	{
		case NAMCOS22_RIDGE_RACER2:
			if (offset == 0) return 0x0172;
			break;

		case NAMCOS22_ACE_DRIVER:
			if (offset == 3) return 0x0173;
			break;

		case NAMCOS22_CYBER_COMMANDO:
			if (offset == 1) return 0x0185;
			break;

		case NAMCOS22_ALPINE_RACER:
			if (offset == 1) return 0x0187;
			break;

		case NAMCOS22_CYBER_CYCLES:
			if (offset == 0xf) return 0x0387;
			break;

		case NAMCOS22_VICTORY_LAP:
			if (offset == 2) return 0x0188;
			break;

		case NAMCOS22_DIRT_DASH:
			if (offset == 0) return 0x01a2;
			break;

		case NAMCOS22_ALPINE_SURFER:
			if (offset == 1) return 0x01a9;
			break;

		case NAMCOS22_TOKYO_WARS:
			if (offset == 4) return 0x01a8;
			break;

		// no keycus
		case NAMCOS22_AIR_COMBAT22:
			return 0;

		default:
			break;
	}

	if (machine().side_effects_disabled())
		return 0;

	// pick a random number, but don't pick the same twice in a row
	u16 old_rng = m_keycus_rng;
	do
	{
		m_keycus_rng = machine().rand() & 0xffff;
	} while(m_keycus_rng == old_rng);

	return m_keycus_rng;
}

void namcos22_state::namcos22_keycus_w(offs_t offset, u16 data, u16 mem_mask)
{
	// for obfuscating keycus and/or random seed?
}

/**
 * Some port values are read serially one bit at a time via word reads at
 * 0x50000008 and 0x5000000a
 *
 * Writes to 0x50000008 and 0x5000000a reset the state of the input buffer.
 * It appears to be meant for debugging, not all games use it.
 */
u16 namcos22_state::namcos22_portbit_r(offs_t offset)
{
	u16 ret = m_portbits[offset] & 1;

	if (!machine().side_effects_disabled())
		m_portbits[offset] = m_portbits[offset] >> 1 | 0x8000;

	return ret;
}

void namcos22_state::namcos22_portbit_w(offs_t offset, u16 data)
{
	m_portbits[offset] = m_custom[offset].read_safe(0xffff);
}

void namcos22_state::namcos22_cpuleds_w(offs_t offset, u32 data, u32 mem_mask)
{
	// 8 leds on cpu board, 0=on 1=off
	// on System22: two rows of 4 red leds
	// on SS22: GYRGYRGY green/yellow/red
	COMBINE_DATA(&m_cpuled_data);
	for (int i = 0; i < 8; i++)
		m_cpuled_out[i] = (~data << i & 0x800000) ? 0 : 1;
}

void namcos22s_state::namcos22s_chipselect_w(offs_t offset, u32 data, u32 mem_mask)
{
	// assume that this register is for chip enable/disable
	// it's written many times during boot-up, and most games don't touch it afterwards (last value usually 0038 or 0838)
	// 8000: spot related (set in dirtdash night driving)
	// 4000: spot related (set in dirtdash and testmode)
	// 0800: fade related?
	// other bits: no clue
	if (ACCESSING_BITS_16_23)
		m_chipselect = data >> 16;

	// 8-bit access? (see alpinerd)
	else if (ACCESSING_BITS_24_31)
		m_chipselect = data >> 24;
}


// System22

void namcos22_state::namcos22_am(address_map &map)
{
	/**
	 * Program ROM (2M bytes)
	 * Mounted position: LLB: CPU 4D, LMB: CPU 2D, UMB: CPU 8D, UUB: CPU 6D
	 * Known ROM chip type: TI TMS27C040-10, ST M27C4001-10, M27C4001-12Z
	 */
	map(0x00000000, 0x001fffff).rom();

	/**
	 * Main RAM (128K bytes)
	 * Mounted position: CPU 3D, 5D, 7D, 9D
	 * Known DRAM chip type: TC55328P-25, N3441256P-15
	 */
	map(0x10000000, 0x1001ffff).ram().mirror(0x08000000);

	/**
	 * KEYCUS
	 * Mounted position: CPU 13R
	 * Known chip type:
	 *     C370  (Ridge Racer, Ridge Racer 2)
	 *     C388  (Rave Racer)
	 *     C389? (Cyber Cycles)
	 *     C392? (Ace Driver Victory Lap)
	 */
	map(0x20000000, 0x2000000f).rw(FUNC(namcos22_state::namcos22_keycus_r), FUNC(namcos22_state::namcos22_keycus_w));

	/**
	 * C139 SCI Buffer
	 * Mounted position: CPU 4N
	 * Known chip type: M5M5179AP-25 (8k x 9bit SRAM)
	 *
	 * Note: Boot time check: 20010000 - 20011fff / bits=0x000001ff
	 *
	 *     20010000 - 20011fff  TX Buffer
	 *     20012000 - 20013fff  RX FIFO Buffer (also used for TX Buffer)
	 */
	map(0x20010000, 0x20013fff).ram();

	/**
	 * C139 SCI Register
	 * Mounted position: CPU 4R
	 *
	 *     20020000  2  R/W RX Status
	 *         0x01 : Frame Error
	 *         0x02 : Frame Received
	 *         0x04 : ?
	 *
	 *     20020002  2  R/W Status/Control Flags
	 *         0x01 :
	 *         0x02 : RX flag? (cleared every vsync)
	 *         0x04 : RX flag? (cleared every vsync)
	 *         0x08 :
	 *
	 *     20020004  2  W   FIFO Control Register
	 *         0x01 : sync bit enable?
	 *         0x02 : TX FIFO sync bit (bit-8)
	 *
	 *     20020006  2  W   TX Control Register
	 *         0x01 : TX start/stop
	 *         0x02 : ?
	 *         0x10 : ?
	 *
	 *     20020008  2  W   -
	 *     2002000a  2  W   TX Frame Size
	 *     2002000c  2  R/W RX FIFO Pointer (0x0000 - 0x0fff)
	 *     2002000e  2  W   TX FIFO Pointer (0x0000 - 0x1fff)
	 */
	map(0x20020000, 0x2002000f).rw(FUNC(namcos22_state::namcos22_sci_r), FUNC(namcos22_state::namcos22_sci_w));

	/**
	 * System Controller: Interrupt Control, Peripheral Control
	 * assumed to be C383
	 */
	map(0x40000000, 0x4000001f).rw(FUNC(namcos22_state::syscon_r), FUNC(namcos22_state::s22_syscon_w));

	/**
	 * Unknown Device (optional for diagnostics?)
	 *
	 * zero means not-connected.
	 * may be related to device at 0x90040000
	 */
	map(0x48000000, 0x4800003f).noprw();

	/**
	 * DIPSW
	 *     0x50000000 - DIPSW3
	 *     0x50000001 - DIPSW2
	 */
	map(0x50000000, 0x50000003).portr("DSW").w(FUNC(namcos22_state::namcos22_cpuleds_w));
	map(0x50000008, 0x5000000b).rw(FUNC(namcos22_state::namcos22_portbit_r), FUNC(namcos22_state::namcos22_portbit_w));

	/**
	 * EEPROM
	 * Mounted position: CPU 9E
	 * Known chip type: HN58C65P-25 (8k x 8bit EEPROM)
	 */
	map(0x58000000, 0x58001fff).rw(m_eeprom, FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write));

	/**
	 * C74 (Mitsubishi M37702 MCU) Shared RAM (0x60004000 - 0x6000bfff)
	 * Mounted position: CPU 11L, 12L
	 * Known chip type: TC55328P-25, N341256P-15
	 *
	 * DATA ROM for C74 (SEQ data and external code):
	 * Known chip type: NEC D27C4096D-12
	 * Notes: C74(CPU PCB) sends/receives I/O data from C74(I/O PCB) by SIO.
	 *
	 * 0x60004020 b4 = 1 : ???
	 * 0x60004022.w     Volume(R)
	 * 0x60004024.w     Volume(L)
	 * 0x60004026.w     Volume(R) (maybe rear channels, not put on real PCB)
	 * 0x60004028.w     Volume(L) (maybe rear channels, not put on real PCB)
	 * 0x60004030 b0     : system type 0
	 * 0x60004030 b1 = 0 : COIN2
	 * 0x60004030 b2 = 0 : TEST SW
	 * 0x60004030 b3 = 0 : SERVICE SW
	 * 0x60004030 b4 = 0 : COIN1
	 * 0x60004030 b5     : system type 1
	 * (system type on RR2 (00:50inch, 01:two in one, 20:standard, 21:deluxe))
	 * 0x60004031 b0 = 0 : SWITCH1 (for manual transmission)
	 * 0x60004031 b1 = 0 : SWITCH2
	 * 0x60004031 b2 = 0 : SWITCH3
	 * 0x60004031 b3 = 0 : SWITCH4
	 * 0x60004031 b4 = 0 : CLUTCH
	 * 0x60004031 b6 = 0 : VIEW SW
	 * 0x60004032.w     Handle A/D (=steering wheel, default of center value is different in each game)
	 * 0x60004034.w     Gas A/D
	 * 0x60004036.w     Brake A/D
	 * 0x60004038.w     A/D3 (reserved)
	 * (some GOUT (general outputs for lamps, etc) is also mapped this area)
	 * 0x60004080       Data/Code for Sub-CPU
	 * 0x60004200       Data/Code for Sub-CPU
	 * 0x60005000 - 0x6000bfff  Sound Work
	 * +0x0000 - 0x003f Song Request #00 to 31
	 * +0x0100 - 0x02ff Parameter RAM from Main MPU (for SEs)
	 * +0x0300 - 0x03ff?    Song Title (put messages here from Sound CPU)
	 */
	map(0x60000000, 0x60003fff).nopw();
	map(0x60004000, 0x6000bfff).rw(FUNC(namcos22_state::namcos22_shared_r), FUNC(namcos22_state::namcos22_shared_w));

	/**
	 * C71 (TI TMS320C25 DSP) Shared RAM (0x70000000 - 0x70020000)
	 * Mounted position:
	 *     C71: CPU 15R, 21R
	 *     RAM: CPU 15K, 13E, 12E
	 * Known chip type: TC55328P-25, N341256P-15
	 * Notes: connected bits = 0x00ffffff (24bit)
	 */
	map(0x70000000, 0x7001ffff).rw(FUNC(namcos22_state::namcos22_dspram_r), FUNC(namcos22_state::namcos22_dspram_w)).share("polygonram");

	/**
	 * LED on PCB(?)
	 */
	map(0x90000000, 0x90000003).nopw();

	/**
	 * Depth-cueing Look-up Table (fog density between near to far)
	 * Mounted position: VIDEO 8P
	 * Known chip type: TC55328P-25
	 */
	map(0x90010000, 0x90017fff).ram().share("czram");

	/**
	 * C305 (Display Controller)
	 * Mounted position: VIDEO 7D (C305)
	 * Notes: Boot time check: 0x90020100 - 0x9002027f
	 */
	map(0x90020000, 0x90027fff).ram().share("video_mixer");

	/**
	 * Mounted position: VIDEO 6B, 7B, 8B (near C305)
	 * Note: 0xff00-0xffff are for Tilemap (16 x 16)
	 */
	map(0x90028000, 0x9003ffff).ram().w(FUNC(namcos22_state::namcos22_paletteram_w)).share("paletteram");

	/**
	 * unknown (option)
	 * Note: This device may be optional. This may relate to device at 0x48000000
	 */
	map(0x90040000, 0x9007ffff).nopr(); /* diagnostic ROM? */

	/**
	 * Tilemap PCG Memory
	 */
	map(0x90080000, 0x9009ffff).ram().w(FUNC(namcos22_state::namcos22_cgram_w)).share("cgram");

	/**
	 * Tilemap Memory (64 x 64)
	 * Mounted position: VIDEO  2K
	 * Known chip type: HM511664 (64k x 16bit SRAM)
	 * Note: Self test: 90084000 - 9009ffff
	 */
	map(0x9009e000, 0x9009ffff).ram().w(FUNC(namcos22_state::namcos22_textram_w)).share("textram");

	/**
	 * Tilemap Register
	 * Mounted position: unknown
	 */
	map(0x900a0000, 0x900a000f).rw(FUNC(namcos22_state::namcos22_tilemapattr_r), FUNC(namcos22_state::namcos22_tilemapattr_w));
}


// System Super22

void namcos22s_state::namcos22s_am(address_map &map)
{
	map(0x000000, 0x3fffff).rom();
	map(0x400000, 0x40001f).rw(FUNC(namcos22s_state::namcos22_keycus_r), FUNC(namcos22s_state::namcos22_keycus_w));
	map(0x410000, 0x413fff).ram(); // C139 SCI buffer
	map(0x420000, 0x42000f).rw(FUNC(namcos22s_state::namcos22_sci_r), FUNC(namcos22s_state::namcos22_sci_w)); // C139 SCI registers
	map(0x430000, 0x430003).w(FUNC(namcos22s_state::namcos22_cpuleds_w));
	map(0x440000, 0x440003).portr("DSW");
	map(0x450008, 0x45000b).rw(FUNC(namcos22s_state::namcos22_portbit_r), FUNC(namcos22s_state::namcos22_portbit_w));
	map(0x460000, 0x463fff).rw(m_eeprom, FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask32(0xff00ff00);
	map(0x700000, 0x70001f).rw(FUNC(namcos22s_state::syscon_r), FUNC(namcos22s_state::ss22_syscon_w));
	map(0x800000, 0x800003).w(FUNC(namcos22s_state::namcos22s_chipselect_w)); // C304, C399
	map(0x810000, 0x81000f).rw(FUNC(namcos22s_state::namcos22s_czattr_r), FUNC(namcos22s_state::namcos22s_czattr_w));
	map(0x810200, 0x8103ff).rw(FUNC(namcos22s_state::namcos22s_czram_r), FUNC(namcos22s_state::namcos22s_czram_w));
	map(0x820000, 0x8202ff).nopw(); // leftover of old (non-super) video mixer device
	map(0x824000, 0x8243ff).ram().share("video_mixer");
	map(0x828000, 0x83ffff).ram().w(FUNC(namcos22s_state::namcos22_paletteram_w)).share("paletteram");
	map(0x860000, 0x860007).rw(FUNC(namcos22s_state::spotram_r), FUNC(namcos22s_state::spotram_w));
	map(0x880000, 0x89ffff).ram().w(FUNC(namcos22s_state::namcos22_cgram_w)).share("cgram");
	map(0x89e000, 0x89ffff).ram().w(FUNC(namcos22s_state::namcos22_textram_w)).share("textram");
	map(0x8a0000, 0x8a000f).rw(FUNC(namcos22s_state::namcos22_tilemapattr_r), FUNC(namcos22s_state::namcos22_tilemapattr_w));
	map(0x900000, 0x90ffff).ram().share("vics_data");
	map(0x940000, 0x94007f).rw(FUNC(namcos22s_state::namcos22s_vics_control_r), FUNC(namcos22s_state::namcos22s_vics_control_w)).share("vics_control");
	map(0x980000, 0x9affff).ram().share("spriteram"); // C374
	map(0xa04000, 0xa0bfff).rw(FUNC(namcos22s_state::namcos22_shared_r), FUNC(namcos22s_state::namcos22_shared_w)); // COM RAM
	map(0xc00000, 0xc1ffff).rw(FUNC(namcos22s_state::namcos22_dspram_r), FUNC(namcos22s_state::namcos22_dspram_w)).share("polygonram");
	map(0xe00000, 0xe3ffff).ram(); // workram
}


// Time Crisis gun

u16 timecris_state::gun_r(offs_t offset)
{
	u16 xpos = m_opt[0]->read();
	u16 ypos = m_opt[1]->read();
	// ypos is not completely understood yet, there should be a difference between case 1 and 2
	// game determines real y = 430004 + 430008

	// use screen edges for off-screen
	const u16 xmin = m_opt[0]->field(0xffff)->minval();
	const u16 xmax = m_opt[0]->field(0xffff)->maxval();
	const u16 ymin = m_opt[1]->field(0xffff)->minval();
	const u16 ymax = m_opt[1]->field(0xffff)->maxval();
	if (xpos == xmin || xpos == xmax || ypos == ymin || ypos == ymax)
		xpos = ypos = 0;

	switch (offset)
	{
		case 0: // 430000
			return xpos;

		case 1: // 430004
		case 2: // 430008
			return ypos;

		default:
			return 0;
	}
}

void timecris_state::timecris_am(address_map &map)
{
	namcos22s_am(map);
	map(0x430000, 0x43000f).r(FUNC(timecris_state::gun_r)).umask32(0xffff0000);
}


// Alpine Surfer ROM banking

void alpines_state::rombank_w(u32 data)
{
	m_rombank->set_entry(std::clamp(data & 3, 0U, 2U));
}

void alpines_state::alpines_am(address_map &map)
{
	namcos22s_am(map);
	map(0x200000, 0x3fffff).bankr("rombank");
	map(0x300000, 0x300003).w(FUNC(alpines_state::rombank_w));
}



/*********************************************************************************************/

// DSPs

void namcos22_state::master_enable(bool enable)
{
	m_master->set_input_line(INPUT_LINE_RESET, enable ? CLEAR_LINE : ASSERT_LINE);
}

void namcos22_state::slave_enable(bool enable)
{
	m_slave->set_input_line(INPUT_LINE_RESET, enable ? CLEAR_LINE : ASSERT_LINE);
	m_slave_simulation_active = enable;
}


u16 namcos22_state::namcos22_dspram16_r(offs_t offset)
{
	u32 value = m_polygonram[offset];

	switch (m_dspram_bank & 3)
	{
		case 0:
			value &= 0xffff;
			break;

		case 1:
			value >>= 16;
			break;

		case 2:
			if (!machine().side_effects_disabled())
				m_dspram16_latch = value >> 16;
			value &= 0xffff;
			break;

		case 3:
			// ready status?
			return 0;
	}

	return value;
}

void namcos22_state::namcos22_dspram16_w(offs_t offset, u16 data, u16 mem_mask)
{
	u32 value = m_polygonram[offset];
	u16 lo = value & 0xffff;
	u16 hi = value >> 16;

	switch (m_dspram_bank & 3)
	{
		case 0:
			COMBINE_DATA(&lo);
			break;

		case 1:
			COMBINE_DATA(&hi);
			break;

		case 2:
			COMBINE_DATA(&lo);
			hi = m_dspram16_latch;
			break;

		default:
			break;
	}

	m_polygonram[offset] = (hi << 16) | lo;
}

void namcos22_state::namcos22_dspram16_bank_w(offs_t offset, u16 data, u16 mem_mask)
{
	COMBINE_DATA(&m_dspram_bank);
}


void namcos22_state::point_write(offs_t offs, u32 data)
{
	offs &= 0x00ffffff; /* 24 bit addressing */
	if (m_is_ss22)
	{
		if (offs >= 0xf80000 && offs < 0xfa0000)
			m_pointram[offs - 0xf80000] = data & 0x00ffffff;
	}
	else
	{
		if (offs >= 0xf00000 && offs < 0xf20000)
			m_pointram[offs - 0xf00000] = data & 0x00ffffff;
	}
}

s32 namcos22_state::pointram_read(offs_t offs) // called from point_read
{
	s32 result = -1;
	if (m_is_ss22)
	{
		if (offs >= 0xf80000 && offs < 0xfa0000)
			result = m_pointram[offs - 0xf80000];
	}
	else
	{
		if (offs >= 0xf00000 && offs < 0xf20000)
			result = m_pointram[offs - 0xf00000];
	}

	// sign extend or crop
	return signed24(result);
}


void namcos22_state::point_address_w(u16 data)
{
	m_point_address <<= 16;
	m_point_address |= data;
}

void namcos22_state::point_loword_iw(u16 data)
{
	m_point_data |= data;
	point_write(m_point_address++, m_point_data);
}

void namcos22_state::point_hiword_w(u16 data)
{
	m_point_data = data << 16;
}

u16 namcos22_state::point_loword_r()
{
	return point_read(m_point_address) & 0xffff;
}

u16 namcos22_state::point_hiword_ir()
{
	// high bit is unknown busy signal (ridgerac, ridgera2, raverace, cybrcomm)
	return 0x8000 | (point_read(m_point_address++) >> 16 & 0x00ff);
}


u16 namcos22_state::pdp_status_r()
{
	return m_dsp_master_bioz;
}

u16 namcos22_state::pdp_begin_r()
{
	if (machine().side_effects_disabled())
		return 0;

	/**
	* This presumably kickstarts the PDP(polygon display parser/processor?)
	* It parses through the displaylist and sends commands to the 3D render device.
	* In MAME, this main task is done in simulate_slavedsp instead. Ideally, we'd make the PDP a device with execute_run
	* SS22 supports more than just "goto" and render commands, they are handled here.
	*/
	m_pdp_frame = m_screen->frame_number();
	if (m_screen->vblank())
		m_pdp_frame++;
	m_pdp_render_done = true;

	m_dsp_master_bioz = 1;
	u16 offs = (m_is_ss22) ? pdp_polygonram_read(0x7fff) : m_pdp_base;

	if (m_is_ss22)
		pdp_handle_commands(offs);

	return 0;
}

void namcos22_state::pdp_handle_commands(u16 offs)
{
	for (;;)
	{
		offs &= 0x7fff;
		u16 start = offs;
		u16 cmd = pdp_polygonram_read(offs++);
		u32 srcAddr;
		u32 dstAddr;
		u16 numWords;
		u32 data;
		switch (cmd)
		{
			case 0xfff0:
				// NOP? used in 'PDP LOOP TEST'
				break;

			case 0xfff5:
				// write to point ram
				dstAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				data    = pdp_polygonram_read(offs++); // 24 bit data
				point_write(dstAddr, data);
				break;

			case 0xfff6:
				/* read word from point ram */
				srcAddr = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				dstAddr = pdp_polygonram_read(offs++); // CommRAM address; receives 24 bit PointRAM data
				data    = point_read(srcAddr);
				pdp_polygonram_write(dstAddr, data);
				break;

			case 0xfff7:
				// block move (CommRAM to CommRAM)
				srcAddr  = pdp_polygonram_read(offs++);
				dstAddr  = pdp_polygonram_read(offs++);
				numWords = pdp_polygonram_read(offs++);
				while (numWords--)
				{
					data = pdp_polygonram_read(srcAddr++);
					pdp_polygonram_write(dstAddr++, data);
				}
				break;

			case 0xfff8:
				// unknown
				data = pdp_polygonram_read(offs++); // address probably, whatfor?
				break;

			case 0xfff9:
				// unknown, modify pointram somehow?
				logerror("unknown PDP cmd=0x%04x, offs=0x%x\n", cmd, 4 * (offs - 1));
				return;

			case 0xfffa:
				// read block from point ram
				srcAddr  = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				dstAddr  = pdp_polygonram_read(offs++); // CommRAM address; receives data
				numWords = pdp_polygonram_read(offs++); // block size
				while (numWords--)
				{
					data = point_read(srcAddr++);
					pdp_polygonram_write(dstAddr++, data);
				}
				break;

			case 0xfffb:
				// write block to point ram
				dstAddr  = pdp_polygonram_read(offs++); // 32 bit PointRAM address
				numWords = pdp_polygonram_read(offs++); // block size
				while (numWords--)
				{
					data = pdp_polygonram_read(offs++); // 24 bit source data
					point_write(dstAddr++, data);
				}
				break;

			case 0xfffc:
				// point ram to point ram
				srcAddr  = pdp_polygonram_read(offs++);
				dstAddr  = pdp_polygonram_read(offs++);
				numWords = pdp_polygonram_read(offs++);
				while (numWords--)
				{
					data = point_read(srcAddr++);
					point_write(dstAddr++, data);
				}
				break;

			case 0xfffd:
				// direct command to render device
				// len -> command (eg. BB0003) -> data
				numWords = pdp_polygonram_read(offs++);
				while (numWords--)
				{
					data = pdp_polygonram_read(offs++);
					//namcos22_WriteDataToRenderDevice(data);
				}
				break;

			case 0xfffe:
				// unknown
				data = pdp_polygonram_read(offs++); // ??? (usually 0x400 or 0)
				break;

			case 0xffff:
				// "goto" command
				offs = pdp_polygonram_read(offs) & 0x7fff;
				if (offs == start)
				{
					// MAME will get stuck with a "goto self", so bail out
					// in reality, the cpu can overwrite this address or retrigger pdp_begin
					return;
				}
				break;

			default:
				logerror("unknown PDP cmd=0x%04x, offs=0x%x\n", cmd, 4 * (offs - 1));
				return;
		}
	}
}

u16 namcos22_state::dsp_hold_signal_r()
{
	/* STUB */
	return 0;
}

void namcos22_state::dsp_hold_ack_w(u16 data)
{
	/* STUB */
}

void namcos22_state::dsp_xf_output_w(u16 data)
{
	/* STUB */
}

void namcos22_state::dsp_unk2_w(u16 data)
{
	/**
	* Used by Ridge Racer (Japan) to specify baseaddr
	* for post-processed display-list output.
	*
	* Prop Cycle doesn't use this; instead it writes this
	* addr to the uppermost word of CommRAM.
	*/
	m_pdp_base = data;
}

u16 namcos22_state::dsp_unk_port3_r()
{
	m_dsp_master_bioz = 0;
	m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_READY;
	return 0;
}

void namcos22_state::upload_code_to_slave_dsp_w(u16 data)
{
	switch (m_dsp_upload_state)
	{
		case NAMCOS22_DSP_UPLOAD_READY:
			logerror("UPLOAD_READY; cmd = 0x%x\n", data);

			switch (data)
			{
				case 0x00:
					slave_enable(false);
					break;

				case 0x01:
					m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_DEST;
					break;

				case 0x02:
					/* custom IC poke */
					break;

				case 0x03:
					slave_enable(true);
					break;

				case 0x04:
					break;

				case 0x10:
					/* serial i/o related? */
					slave_enable(true);
					break;

				default:
					logerror("%08x: master port#7: 0x%04x\n", m_master->pcbase(), data);
					break;
			}
			break;

		case NAMCOS22_DSP_UPLOAD_DEST:
			m_UploadDestIdx = data;
			m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_DATA;
			break;

		case NAMCOS22_DSP_UPLOAD_DATA:
			m_slave_extram[m_UploadDestIdx & 0x1fff] = data;
			m_UploadDestIdx++;
			break;

		default:
			break;
	}
}

u16 namcos22_state::dsp_unk8_r()
{
	/* bit 0x0001 is busy signal */
	return 0x0000;
}

u16 namcos22_state::custom_ic_status_r()
{
	/* bit 0x0001 signals completion */
	return 0x0063;
}

u16 namcos22_state::dsp_upload_status_r()
{
	/* bit 0x0001 is polled to confirm that code/data has been successfully uploaded to the slave dsp via port 0x7. */
	return 0x0000;
}

void namcos22_state::slave_serial_io_w(u16 data)
{
	m_SerialDataSlaveToMasterNext = data;
	logerror("slave_serial_io_w(%04x)\n", data);
}

u16 namcos22_state::master_serial_io_r()
{
	logerror("master_serial_io_r() == %04x\n", m_SerialDataSlaveToMasterCurrent);
	return m_SerialDataSlaveToMasterCurrent;
}

INTERRUPT_GEN_MEMBER(namcos22_state::dsp_vblank_irq)
{
	if (m_dsp_irq_enabled)
		device.execute().set_input_line(TMS32025_INT0, HOLD_LINE);
}

TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::dsp_serial_pulse)
{
	if (m_dsp_irq_enabled)
	{
		m_SerialDataSlaveToMasterCurrent = m_SerialDataSlaveToMasterNext;

		m_master->set_input_line(TMS32025_RINT, HOLD_LINE);
		m_master->set_input_line(TMS32025_XINT, HOLD_LINE);
		m_slave->set_input_line(TMS32025_RINT, HOLD_LINE);
		m_slave->set_input_line(TMS32025_XINT, HOLD_LINE);
	}
}

void namcos22_state::dsp_unk_porta_w(u16 data)
{
}

void namcos22_state::dsp_led_w(u16 data)
{
	/* I believe this port controls diagnostic LEDs on the DSP PCB. */
}

/**
 * master dsp usage pattern:
 *
 * 4059: out  $10,PA$8
 * 405A: in   $09,PA$8; lac  $09,0h; andk 0001h,0h; bnz  $405A *
 * 4060: out  $11,PA$8
 *
 * 4061: out  $10,PA$F
 * 4062: nop; rpt  *+; out  *+,PA$C // send data to 'render device'
 * 4065: out  $11,PA$F
 *
 * 4066: out  $10,PA$9
 * 4067: nop
 * 4068: out  $11,PA$9
 **************************************************************
 * 0x03a2 // 0x0fff zcode lo
 * 0x0001 // 0x000f zcode hi
 * 0xbd00 // color
 * 0x13a2 // flags
 *
 * 0x0100 0x009c // u,v
 * 0x0072 0xf307 // sx,sy
 * 0x602b 0x9f28 // i,zpos
 *
 * 0x00bf 0x0060 // u,v
 * 0x0040 0xf3ec // sx,sy
 * 0x602b 0xad48 // i,zpos
 *
 * 0x00fb 0x00ca // u,v
 * 0x0075 0xf205 // sx,sy
 * 0x602b 0x93e8 // i,zpos
 *
 * 0x00fb 0x00ca // u,v
 * 0x0075 0xf205 // sx,sy
 * 0x602b 0x93e8 // i,zpos
 */
void namcos22_state::dsp_unk8_w(u16 data)
{
	m_RenderBufSize = 0;
	m_render_refresh = true; // this one is more likely controlled by slavedsp somewhere
}

void namcos22_state::master_render_device_w(u16 data)
{
	if (m_RenderBufSize < NAMCOS22_MAX_RENDER_CMD_SEQ)
	{
		m_RenderBufData[m_RenderBufSize++] = data;
		if (m_RenderBufSize == NAMCOS22_MAX_RENDER_CMD_SEQ)
		{
			draw_direct_poly(m_RenderBufData);
		}
	}
}

void namcos22_state::master_dsp_program(address_map &map)
{
	map(0x0000, 0x0fff).rom(); /* internal ROM (4k words) */
	map(0x4000, 0x7fff).ram().share("masterextram").nopw();
}

void namcos22_state::master_dsp_data(address_map &map)
{
	map(0x1000, 0x3fff).ram();
	map(0x4000, 0x7fff).ram().share("masterextram");
	map(0x8000, 0xffff).rw(FUNC(namcos22_state::namcos22_dspram16_r), FUNC(namcos22_state::namcos22_dspram16_w));
}

void namcos22_state::master_dsp_io(address_map &map)
{
	map(0x0, 0x0).rw(FUNC(namcos22_state::point_loword_r), FUNC(namcos22_state::point_loword_iw));
	map(0x1, 0x1).rw(FUNC(namcos22_state::point_hiword_ir), FUNC(namcos22_state::point_hiword_w));
	map(0x2, 0x2).rw(FUNC(namcos22_state::pdp_begin_r), FUNC(namcos22_state::dsp_unk2_w));
	map(0x3, 0x3).rw(FUNC(namcos22_state::dsp_unk_port3_r), FUNC(namcos22_state::point_address_w));
	map(0x4, 0x4).nopw(); /* unknown */
	map(0x7, 0x7).w(FUNC(namcos22_state::upload_code_to_slave_dsp_w));
	map(0x8, 0x8).rw(FUNC(namcos22_state::dsp_unk8_r), FUNC(namcos22_state::dsp_unk8_w)); /* trigger irq? */
	map(0x9, 0x9).r(FUNC(namcos22_state::custom_ic_status_r)).nopw(); /* trigger irq? */
	map(0xa, 0xa).w(FUNC(namcos22_state::dsp_unk_porta_w));
	map(0xb, 0xb).nopw(); /* RINT-related? */
	map(0xc, 0xc).w(FUNC(namcos22_state::master_render_device_w));
	map(0xd, 0xd).w(FUNC(namcos22_state::namcos22_dspram16_bank_w));
	map(0xe, 0xe).w(FUNC(namcos22_state::dsp_led_w));
	map(0xf, 0xf).r(FUNC(namcos22_state::dsp_upload_status_r)).nopw();
}


u16 namcos22_state::dsp_slave_bioz_r()
{
	/* STUB */
	return 1;
}

u16 namcos22_state::dsp_slave_port3_r()
{
	return 0x0010; /* ? */
}

u16 namcos22_state::dsp_slave_port4_r()
{
	return 0;
	//return ReadDataFromSlaveBuf();
}

u16 namcos22_state::dsp_slave_port5_r()
{
#if 0
	int numWords = SlaveBufSize();
	int mode = 2;
	return (numWords<<4) | mode;
#endif
	return 0;
}

u16 namcos22_state::dsp_slave_port6_r()
{
	/* bit 0x9 indicates whether device at port2 is ready to receive data */
	/* bit 0xd indicates whether data is available from port4 */
	return 0;
}

void namcos22_state::dsp_slave_portc_w(u16 data)
{
	/* Unknown; used before transmitting a command sequence. */
}

u16 namcos22_state::dsp_slave_port8_r()
{
	/* This reports  status of the device mapped at port 0xb. */
	/* The slave dsp waits for bit 0x0001 to be zero before writing a new command sequence. */
	return 0; /* status */
}

u16 namcos22_state::dsp_slave_portb_r()
{
	/* The slave DSP reads before transmitting a command sequence. */
	return 0;
}

void namcos22_state::dsp_slave_portb_w(u16 data)
{
	/* The slave dsp uses this to transmit a command sequence to an external device. */
}

void namcos22_state::slave_dsp_program(address_map &map)
{
	map(0x0000, 0x0fff).rom(); /* internal ROM */
	map(0x8000, 0x9fff).ram().share("slaveextram").nopw();
}

void namcos22_state::slave_dsp_data(address_map &map)
{
	map(0x8000, 0x9fff).ram().share("slaveextram");
}

void namcos22_state::slave_dsp_io(address_map &map)
{
	/* unknown signal */
	map(0x3, 0x3).r(FUNC(namcos22_state::dsp_slave_port3_r));

	map(0x4, 0x4).r(FUNC(namcos22_state::dsp_slave_port4_r));
	map(0x5, 0x5).r(FUNC(namcos22_state::dsp_slave_port5_r));
	map(0x6, 0x6).r(FUNC(namcos22_state::dsp_slave_port6_r)).nopw();

	/* render device state */
	map(0x8, 0x8).r(FUNC(namcos22_state::dsp_slave_port8_r)).nopw();

	/* render device */
	map(0xb, 0xb).rw(FUNC(namcos22_state::dsp_slave_portb_r), FUNC(namcos22_state::dsp_slave_portb_w));

	map(0xc, 0xc).w(FUNC(namcos22_state::dsp_slave_portc_w));
}


/*********************************************************************************************/

/*
  MCU memory map
  --------------
  000000-00027f: internal MCU registers and RAM
  002000-002fff: C352 PCM chip
  004000-00bfff: shared RAM with host CPU
  00c000-00ffff: BIOS ROM (internal on System22, external on Super)
  200000-27ffff: data ROM
  301000-301001: watchdog?
  308000-308003: unknown (I/O?)

  pin hookups
  -----------
  5 (IRQ0): C383 custom (probably vsync)
  7 (IRQ2): 74F244 at 8c, pin 3

  port assignments
  ----------------
  port 4: "bankswitches" the controls read at port 5, probably other functions too
  port 5: on read, digital controls (buttons, coins, start, service switch)
          on write, various outputs (lamps, the fan in prop cycle, etc)
  ADC   : analog inputs

*/

// System22 37702

u8 namcos22_state::mcu_port4_s22_r()
{
	// for C74, 0x10 selects sound MCU role, 0x00 selects control-reading role
	return 0x10;
}

u8 namcos22_state::iomcu_port4_s22_r()
{
	// for C74, 0x10 selects sound MCU role, 0x00 selects control-reading role
	return 0x00;
}

void namcos22_state::mcu_s22_program(address_map &map)
{
	map(0x002000, 0x002fff).rw("c352", FUNC(c352_device::read), FUNC(c352_device::write));
	map(0x004000, 0x00bfff).ram().share("shareram");
	map(0x200000, 0x27ffff).rom().region("mcu", 0);
}

void namcos22_state::iomcu_s22_program(address_map &map)
{
	// is there any external memory or MMIO on this one?
}


// System Super22 M37710

TIMER_DEVICE_CALLBACK_MEMBER(namcos22s_state::mcu_irq)
{
	int scanline = param;

	/* TODO: real sources of these */
	if (scanline == 480)
		m_mcu->set_input_line(M37710_LINE_IRQ0, HOLD_LINE);
	else if (scanline == 240)
		m_mcu->set_input_line(M37710_LINE_IRQ2, HOLD_LINE);
}

void namcos22s_state::mb87078_gain_changed(offs_t offset, u8 data)
{
	m_c352->set_output_gain(offset ^ 3, data / 100.0);
}

/*
  SS22 MCU outputs
  ----------------
  sent to mcuoutx where x = 0 to 15
  mcuout0 = coincounter

  Air Combat 22:
  1 = start button lamp

  Alpine Racer 1,2, Alpine Surfer:
  1 = steplock motor lock
  2 = steplock motor on
  4 = start button lamp
  5 = left button lamp
  6 = right button lamp

  Aqua Jet:
  1 = ?
  2 = fan motor
  4 = start button lamp
  7 = air spring

  Armadillo Racing:
  4 = start button lamp

  Cyber Cycles:
  1 = 1 lamp
  2 = 2 lamp
  3 = 3 lamp
  4 = 4 lamp
  5 = red lamp
  6 = yellow lamp
  7 = blue lamp
  8 = green lamp
  9 = start button lamp

  Dirt Dash:
  1 = steering wheel motor on
  4 = front left valve
  5 = front right valve
  6 = rear left valve
  7 = rear right valve
  where is steering wheel torque?

  Prop Cycle:
  1 = fan motor
  2 = start button lamp

  Time Crisis:
  1 = gun solenoid

  Tokyo Wars:
  1 = start button lamp
  4 = handle solenoid
  6 = seat motor
  other: ?
*/

void namcos22s_state::mcu_port4_w(u8 data)
{
	// d3: input port select for port 5
	// d4: port 5 direction?
	// d5,d6: output strobe for port 5

	if (~m_mcu_iocontrol & data & 0x20)
	{
		for (int i = 0; i < 8; i++)
			m_mcu_out[i] = BIT(m_mcu_outdata, i);

		machine().bookkeeping().coin_counter_w(0, m_mcu_outdata & 1);
	}
	if (~m_mcu_iocontrol & data & 0x40)
	{
		for (int i = 0; i < 8; i++)
			m_mcu_out[8+i] = BIT(m_mcu_outdata, i);
	}

	m_mcu_iocontrol = data;
}

u8 namcos22s_state::mcu_port4_r()
{
	return m_mcu_iocontrol;
}

void namcos22s_state::mcu_port5_w(u8 data)
{
	m_mcu_outdata = data;
}

u8 namcos22s_state::mcu_port5_r()
{
	u16 inputs = m_inputs->read();
	return (m_mcu_iocontrol & 8) ? inputs & 0xff : inputs >> 8;
}

void namcos22s_state::mcu_port6_w(u8 data)
{
	// always 2?
}

u8 namcos22s_state::mcu_port6_r()
{
	// discarded
	return 0;
}

template <int Channel>
u16 namcos22s_state::mcu_adc_r()
{
	return m_adc_ports[Channel].read_safe(0);
}

void namcos22s_state::mcu_program(address_map &map)
{
	map(0x002000, 0x002fff).rw("c352", FUNC(c352_device::read), FUNC(c352_device::write));
	map(0x004000, 0x00bfff).ram().share("shareram");
	map(0x00c000, 0x00ffff).rom().region("mcu", 0xc000);
	map(0x200000, 0x27ffff).rom().region("mcu", 0);
	map(0x300000, 0x300001).nopr(); // ? (cybrcycc, alpines - writes data to RAM, but then never reads from there)
	map(0x301000, 0x301001).nopw(); // watchdog? LEDs?
	map(0x308000, 0x308003).w("mb87078", FUNC(mb87078_device::data_w)).umask16(0x00ff);
}


/*********************************************************************************************/

// custom input handling

/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
void namcos22_state::handle_coinage(u16 flags)
{
	int coin_state = (flags & 0x1000) >> 12 | (flags & 0x0200) >> 8;

	if (!(coin_state & 1) && (m_old_coin_state & 1))
		m_credits1++;

	if (!(coin_state & 2) && (m_old_coin_state & 2))
		m_credits2++;

	m_old_coin_state = coin_state;
	m_shareram[0x3a/2] = m_credits1 << 8 | m_credits2;
}

/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
void namcos22_state::handle_driving_io()
{
	if (m_syscontrol[0x18] != 0)
	{
		u16 flags = m_inputs->read();
		u16 steer = m_adc_ports[0]->read();
		u16 gas   = m_adc_ports[1]->read();
		u16 brake = m_adc_ports[2]->read();

		switch (m_gametype)
		{
			case NAMCOS22_RIDGE_RACER:
			case NAMCOS22_RIDGE_RACER2:
				steer += 0x160;
				gas += 884;
				brake += 809;
				break;

			case NAMCOS22_RAVE_RACER:
				steer += 32;
				gas += 992;
				brake += 3008;
				break;

			case NAMCOS22_ACE_DRIVER:
			case NAMCOS22_VICTORY_LAP:
				steer += 2048;
				gas += 992;
				brake += 3008;
				break;

			default:
				break;
		}

		m_shareram[0x030/2] = flags;
		m_shareram[0x032/2] = steer;
		m_shareram[0x034/2] = gas;
		m_shareram[0x036/2] = brake;
		handle_coinage(flags);
	}
}

/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
void namcos22_state::handle_cybrcomm_io()
{
	if (m_syscontrol[0x18] != 0)
	{
		u16 flags = m_inputs->read();
		m_shareram[0x030/2] = flags;
		m_shareram[0x032/2] = m_adc_ports[0]->read() * 0x10;
		m_shareram[0x034/2] = m_adc_ports[1]->read() * 0x10;
		m_shareram[0x036/2] = m_adc_ports[2]->read() * 0x10;
		m_shareram[0x038/2] = m_adc_ports[3]->read() * 0x10;
		handle_coinage(flags);
	}
}


// Alpine skiing games

TIMER_DEVICE_CALLBACK_MEMBER(alpine_state::alpine_steplock_callback)
{
	m_motor_status = param;
}

void alpine_state::alpine_mcu_port4_w(u8 data)
{
	if (~m_mcu_iocontrol & data & 0x20)
	{
		// bits 1+2 are steplock motor outputs
		if ((m_mcu_outdata & 6) == 6)
		{
			if (m_motor_status == 2)
			{
				// free steps
				m_motor_status = 0;
				m_motor_timer->adjust(attotime::from_msec(500), 1);
			}
		}
		else if (m_mcu_outdata & 4)
		{
			if (m_motor_status == 1)
			{
				// lock steps
				m_motor_status = 0;
				m_motor_timer->adjust(attotime::from_msec(500), 2);
			}
		}
	}

	mcu_port4_w(data);
}


// Prop Cycle pedal

TIMER_DEVICE_CALLBACK_MEMBER(propcycl_state::pedal_interrupt)
{
	m_mcu->set_input_line(M37710_LINE_TIMERA3OUT, param ? ASSERT_LINE : CLEAR_LINE);
	m_mcu->pulse_input_line(M37710_LINE_TIMERA3IN, m_mcu->minimum_quantum_time());
}

TIMER_DEVICE_CALLBACK_MEMBER(propcycl_state::pedal_update)
{
	// arbitrary timer for reading optical pedal
	int pedal = m_opt[0]->read() - 0x80;

	if (pedal != 0)
	{
		// The pedal has a simple 1-bit "light interrupted" sensor. The faster you pedal,
		// the faster it pulses. This is connected to the clock input for timer A3,
		// and timer A3 is configured by the MCU program to cause an interrupt each time
		// it's clocked. By counting the number of interrupts in a frame, it can determine
		// how fast the user is pedaling.

		// these values(in usec) may need tweaking:
		const int base = 750;
		const int range = 100000;

		attotime freq = attotime::from_usec(base + range * (1.0 / abs(pedal)));
		m_pedal_interrupt->adjust(std::min(freq, m_pedal_interrupt->remaining()), pedal < 0, freq);
	}
	else
	{
		// not moving
		m_pedal_interrupt->adjust(attotime::never, 0, attotime::never);
	}
}


// Armadillo Racing trackball

TIMER_DEVICE_CALLBACK_MEMBER(adillor_state::trackball_interrupt)
{
	m_mcu->set_input_line((param & 1) ? M37710_LINE_TIMERA2OUT : M37710_LINE_TIMERA3OUT, (param & 2) ? ASSERT_LINE : CLEAR_LINE);
	m_mcu->pulse_input_line((param & 1) ? M37710_LINE_TIMERA2IN : M37710_LINE_TIMERA3IN, m_mcu->minimum_quantum_time());
}

TIMER_DEVICE_CALLBACK_MEMBER(adillor_state::trackball_update)
{
	// arbitrary timer for reading optical trackball
	// -1.0 .. 1.0
	double x = (double)(int)(m_opt[0]->read() - 0x80) / 127.0;
	double y = (double)(int)(m_opt[1]->read() - 0x80) / 127.0;

	// note that it is rotated by 45 degrees, so instead of axes like (+), they are like (x)
	double ox = x, oy = y;
	double a = M_PI / 4.0;
	x = ox*cos(a) - oy*sin(a);
	y = ox*sin(a) + oy*cos(a);

	// tied to mcu A2/A3 timer (speed determines frequency)
	double t[2];
	t[0] = fabs(y); // y -> A2
	t[1] = fabs(x); // x -> A3
	int params[2] = { (y >= 0.0) ? 2 : 0, (x <= 0.0) ? 3 : 1 };

	// these values(in hz) may need tweaking:
	const double base = 20;
	const double range = 1250;

	for (int axis = 0; axis < 2; axis++)
	{
		if (t[axis] > (1.0 / range))
		{
			attotime freq = attotime::from_hz(base + range * t[axis]);
			m_trackball_interrupt[axis]->adjust(std::min(freq, m_trackball_interrupt[axis]->remaining()), params[axis], freq);
		}
		else
		{
			// not moving
			m_trackball_interrupt[axis]->adjust(attotime::never, axis, attotime::never);
		}
	}
}



/*********************************************************************************************/

static INPUT_PORTS_START( ridgera )
	PORT_START("INPUTS")
	/*  1 3 5   When the cabinet is set to Deluxe, the stick shift is basically
	    |-|-|   an 8-way joystick that locks into place.
	    2 4 6   Standard (default) setup uses a racing shifter like in Ace Driver. */
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )    PORT_NAME("Shift Down")
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )  PORT_NAME("Shift Up")
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )  PORT_NAME("Shift Left")  // not used in Standard Cabinet
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Shift Right") // "
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Clutch Pedal")       // "
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_CONFNAME( 0x0100, 0x0000, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0000, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x0100, "Deluxe" )
	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
	PORT_SERVICE( 0x0400, IP_ACTIVE_LOW )
	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0") // 1408 (deluxe cabs have higher range)
	PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x280, 0xd80) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1") // 1552
	PORT_BIT( 0xfff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x610) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2") // 1552
	PORT_BIT( 0xfff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x610) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPNAME( 0x00010000, 0x00010000, "Test Mode" ) PORT_DIPLOCATION("SW2:1")
	PORT_DIPSETTING(          0x00010000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW2:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW2:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW2:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW2:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW2:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW2:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW2:8" )
	PORT_DIPUNKNOWN_DIPLOC( 0x01000000, 0x01000000, "SW3:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x02000000, 0x02000000, "SW3:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x04000000, 0x04000000, "SW3:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x08000000, 0x08000000, "SW3:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x10000000, 0x10000000, "SW3:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x20000000, 0x20000000, "SW3:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x40000000, 0x40000000, "SW3:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x80000000, 0x80000000, "SW3:8" )
	PORT_BIT( 0x0000ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( ridgeracf )
	PORT_INCLUDE( ridgera )

	PORT_MODIFY("INPUTS")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Ignition Key")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("AT Switch")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("MT Switch")
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE2 )

	// DIP3-1 to DIP3-3 are for setting up the viewing angle (game used one board per screen?)
	// Some of the other dipswitches are for debugging, like with Ridge Racer 2.
	PORT_MODIFY("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW2:1" )
	PORT_DIPNAME( 0x00020000, 0x00000000, "Unknown" ) PORT_DIPLOCATION("SW2:2") // always on?
	PORT_DIPSETTING(          0x00020000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_DIPNAME( 0x80000000, 0x80000000, "Test Mode 2" ) PORT_DIPLOCATION("SW3:8")
	PORT_DIPSETTING(          0x80000000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
INPUT_PORTS_END

static INPUT_PORTS_START( ridgera2 )
	PORT_INCLUDE( ridgera )

	PORT_MODIFY("INPUTS")
	PORT_CONFNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0000, "50 Inch" )
	PORT_CONFSETTING(      0x0100, "Twin" )
	PORT_CONFSETTING(      0x2000, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x2100, "Deluxe" )

	/* Some dipswitches seem to be for debug purposes, for example:
	    2-4 : background drawing related
	    2-5 : background drawing related
	    2-6 : debug link-up
	    2-8 : no game over when time runs out (cheat)
	    3-7 : debug polygons
	*/
	PORT_MODIFY("DSW")
	PORT_DIPNAME( 0x80000000, 0x80000000, "Test Mode 2" ) PORT_DIPLOCATION("SW3:8")
	PORT_DIPSETTING(          0x80000000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
INPUT_PORTS_END

static INPUT_PORTS_START( raverace )
	PORT_INCLUDE( ridgera )

	PORT_MODIFY("INPUTS")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("View Change")
	PORT_CONFNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0000, "50 Inch" )
	PORT_CONFSETTING(      0x0100, "Twin" )
	PORT_CONFSETTING(      0x2000, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x2100, "Deluxe" )
INPUT_PORTS_END


static INPUT_PORTS_START( cybrcomm )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")    // placed on both sticks
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Missile Button") // placed on both sticks
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
	PORT_SERVICE( 0x0400, IP_ACTIVE_LOW )
	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )

	// The ranges here are based on the test mode which displays +-224
	// The eeprom is calibrated using these settings. If the SUBCPU handling changes then these might end up needing to change again too.
	// Default key arrangement is based on dual-joystick 'Tank' arrangement found in Assault and CyberSled
	PORT_START("ADC.0") // right joystick: vertical
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_I) PORT_CODE_INC(KEYCODE_K) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2)

	PORT_START("ADC.1") // left joystick: vertical
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_E) PORT_CODE_INC(KEYCODE_D) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1)

	PORT_START("ADC.2") // right joystick: horizontal
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_J) PORT_CODE_INC(KEYCODE_L) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2)

	PORT_START("ADC.3") // left joystick: horizontal
	PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47, 0xb7) PORT_CODE_DEC(KEYCODE_S) PORT_CODE_INC(KEYCODE_F) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1)

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW2:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW2:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW2:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW2:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW2:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW2:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW2:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW2:8" )
	PORT_DIPUNKNOWN_DIPLOC( 0x01000000, 0x01000000, "SW3:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x02000000, 0x02000000, "SW3:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x04000000, 0x04000000, "SW3:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x08000000, 0x08000000, "SW3:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x10000000, 0x10000000, "SW3:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x20000000, 0x20000000, "SW3:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x40000000, 0x40000000, "SW3:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x80000000, 0x80000000, "SW3:8" )
	PORT_BIT( 0x0000ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( acedrive )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down")
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up")
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
	PORT_SERVICE( 0x0400, IP_ACTIVE_LOW )
	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Motion-Stop")

	PORT_START("ADC.0") // 1536
	PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x200, 0xe00) PORT_SENSITIVITY(100) PORT_KEYDELTA(160) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1") // 1152
	PORT_BIT( 0xfff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x480) PORT_SENSITIVITY(100) PORT_KEYDELTA(120) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2") // 576
	PORT_BIT( 0xfff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x240) PORT_SENSITIVITY(100) PORT_KEYDELTA(80) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW2:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW2:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW2:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW2:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW2:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW2:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW2:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW2:8" )
	PORT_DIPUNKNOWN_DIPLOC( 0x01000000, 0x01000000, "SW3:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x02000000, 0x02000000, "SW3:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x04000000, 0x04000000, "SW3:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x08000000, 0x08000000, "SW3:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x10000000, 0x10000000, "SW3:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x20000000, 0x20000000, "SW3:6" )
	PORT_DIPNAME( 0x40000000, 0x40000000, "Test Mode?" ) PORT_DIPLOCATION("SW3:7")
	PORT_DIPSETTING(          0x40000000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_DIPNAME( 0x80000000, 0x80000000, "Test Mode?" ) PORT_DIPLOCATION("SW3:8") // enter test mode if SW3:7 is on
	PORT_DIPSETTING(          0x80000000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_BIT( 0x0000ffff, IP_ACTIVE_LOW, IPT_UNUSED )

	PORT_START("DEV")
	PORT_CONFNAME( 0x01, 0x00, "Enable Dev Inputs" )
	PORT_CONFSETTING(    0x00, DEF_STR( No ) )
	PORT_CONFSETTING(    0x01, DEF_STR( Yes ) )

	PORT_START("CUSTOM.0")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Enter") // also "REC" start
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Exit") // also "REC" stop
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Unknown 1") // enters free camera view while in attract mode
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Unknown 2") // resets game?
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Left")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Right")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Up")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Down")
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)

	PORT_START("CUSTOM.1")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) // pauses game?
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)
INPUT_PORTS_END

static INPUT_PORTS_START( victlap )
	PORT_INCLUDE( acedrive )

	PORT_MODIFY("CUSTOM.0")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Exit")
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Enter")
	PORT_BIT( 0xfe0e, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)
INPUT_PORTS_END

/*********************************************************************************************/

template <int N>
READ_LINE_MEMBER(alpine_state::alpine_motor_r)
{
	return BIT(m_motor_status, N);
}

static INPUT_PORTS_START( alpiner )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) // Decision / View Change
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY // L Selection
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_16WAY // R Selection
	PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(alpine_state, alpine_motor_r<0>) // steps are free
	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(alpine_state, alpine_motor_r<1>) // steps are locked
	PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_X ) PORT_MINMAX(0x080, 0x380) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_NAME("Steps Swing")

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_X ) PORT_MINMAX(0x080, 0x380) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_PLAYER(2) PORT_NAME("Steps Edge")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( alpines )
	PORT_INCLUDE( alpiner )

	PORT_MODIFY("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_X ) PORT_MINMAX(0x080, 0x380) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_REVERSE PORT_NAME("Steps Swing")
INPUT_PORTS_END

static INPUT_PORTS_START( airco22 )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Missile Button")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START1 ) // also view-change function
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_X ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(12)

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_Y ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(12)

	PORT_START("ADC.2") // throttle stick auto-centers
	PORT_BIT( 0x3ff, 0x200, IPT_AD_STICK_Z ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(12) PORT_NAME("Throttle Stick")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( cybrcycc )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) // also view-change function
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_PADDLE ) PORT_MINMAX(0x004, 0x3fc) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPNAME( 0x00010000, 0x00010000, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(          0x00010000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( dirtdash )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down")
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Motion-Stop")
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_CONFNAME( 0x0200, 0x0000, DEF_STR( Cabinet ) )   // Connector J4 pin 6 on MOTHER PCB (open for DX, grounded for SD)
	PORT_CONFSETTING(      0x0000, DEF_STR( Standard ) )  // In SD mode, the Game Options / Cabinet Motion item can't be selected or changed
	PORT_CONFSETTING(      0x0200, "Deluxe" ) // car suspension valves i.e. motion cabinet
	PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_PADDLE ) PORT_MINMAX(0x001, 0x3ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(12) PORT_NAME("Steering Wheel")

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x140) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Gas Pedal")

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( tokyowar )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) // also view-change function
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Right Trigger")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Left Trigger")
	PORT_CONFNAME( 0x0080, 0x0080, DEF_STR( Cabinet ) )
	PORT_CONFSETTING(      0x0080, DEF_STR( Standard ) )
	PORT_CONFSETTING(      0x0000, "Deluxe" ) // cannon recoil motors
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x200, IPT_PADDLE ) PORT_MINMAX(0x100, 0x300) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_NAME("Steering Wheel")

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL )  PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_NAME("Gas Pedal")

	PORT_START("ADC.3")
	PORT_BIT( 0x3ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x100) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_NAME("Brake Pedal")

	PORT_START("DSW")
	PORT_DIPNAME( 0x00010000, 0x00010000, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(          0x00010000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( aquajet )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x1fc, IPT_PADDLE ) PORT_MINMAX(0x000, 0x3f8) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x0e0, IPT_PEDAL ) PORT_MINMAX(0x0e0, 0x1fc) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("ADC.2")
	PORT_BIT( 0x3ff, 0x1fc, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0x3f8) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("DSW")
	PORT_DIPNAME( 0x00010000, 0x00010000, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(          0x00010000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( adillor )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
	PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("OPT.0")
	PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x01, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(8) PORT_NAME("Trackball X")

	PORT_START("OPT.1")
	PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(0x01, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(8) PORT_NAME("Trackball Y") PORT_REVERSE

	PORT_START("DSW")
	PORT_DIPNAME( 0x00010000, 0x00010000, "Test Mode" ) PORT_DIPLOCATION("SW4:1")
	PORT_DIPSETTING(          0x00010000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )

	PORT_START("DEV")
	PORT_CONFNAME( 0x01, 0x00, "Enable Dev Inputs" )
	PORT_CONFSETTING(    0x00, DEF_STR( No ) )
	PORT_CONFSETTING(    0x01, DEF_STR( Yes ) )

	PORT_START("CUSTOM.0")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Enter")
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Exit")
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Left")
	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Right") // when in normal testmode, press this to enter the extra testmode
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Up")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Down")
	PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01)
	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x00)
INPUT_PORTS_END

static INPUT_PORTS_START( propcycl )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
	PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("ADC.0")
	PORT_BIT( 0x3ff, 0x1ff, IPT_AD_STICK_X ) PORT_MINMAX(0x0bf, 0x33f) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE

	PORT_START("ADC.1")
	PORT_BIT( 0x3ff, 0x1ff, IPT_AD_STICK_Y ) PORT_MINMAX(0x0bf, 0x33f) PORT_SENSITIVITY(100) PORT_KEYDELTA(40)

	PORT_START("OPT.0")
	PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_MINMAX(0x01, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Cycle Pedal")

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00800000, 0x00800000, "SW4:8" )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( timecris )
	PORT_START("INPUTS")
	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
	PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")
	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Foot Pedal")
	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )

	PORT_START("OPT.0") // tuned for CRT
	PORT_BIT( 0xffff, 68+626/2, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(68, 68+626) PORT_SENSITIVITY(48) PORT_KEYDELTA(10)

	PORT_START("OPT.1") // tuned for CRT - can't shoot below the statusbar?
	PORT_BIT( 0xffff, 43+241/2, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(43, 43+241) PORT_SENSITIVITY(64) PORT_KEYDELTA(4)

	PORT_START("DSW")
	PORT_DIPUNKNOWN_DIPLOC( 0x00010000, 0x00010000, "SW4:1" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00020000, 0x00020000, "SW4:2" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00040000, 0x00040000, "SW4:3" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00080000, 0x00080000, "SW4:4" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00100000, 0x00100000, "SW4:5" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00200000, 0x00200000, "SW4:6" )
	PORT_DIPUNKNOWN_DIPLOC( 0x00400000, 0x00400000, "SW4:7" )
	PORT_DIPNAME( 0x00800000, 0x00800000, "Test Mode" ) PORT_DIPLOCATION("SW4:8")
	PORT_DIPSETTING(          0x00800000, DEF_STR( Off ) )
	PORT_DIPSETTING(          0x00000000, DEF_STR( On ) )
	PORT_BIT( 0xff00ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END



/*********************************************************************************************/

/* System Super22 supports a sprite layer.
 * Sprites are rendered as part of the polygon draw list, based on a per-sprite Z attribute.
 * Each sprite has explicit placement/color/zoom controls.
 */
static const gfx_layout sprite_layout =
{
	32,32,
	RGN_FRAC(1,1),
	8,
	{ 0,1,2,3,4,5,6,7 },
	{
		0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,
		8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8,
		16*8,17*8,18*8,19*8,20*8,21*8,22*8,23*8,
		24*8,25*8,26*8,27*8,28*8,29*8,30*8,31*8
	},
	{
		0*32*8,1*32*8,2*32*8,3*32*8,4*32*8,5*32*8,6*32*8,7*32*8,
		8*32*8,9*32*8,10*32*8,11*32*8,12*32*8,13*32*8,14*32*8,15*32*8,
		16*32*8,17*32*8,18*32*8,19*32*8,20*32*8,21*32*8,22*32*8,23*32*8,
		24*32*8,25*32*8,26*32*8,27*32*8,28*32*8,29*32*8,30*32*8,31*32*8
	},
	32*32*8
};

static const gfx_layout texture_tile_layout =
{
	16,16,
	RGN_FRAC(1,1),
	8,
	{ 0,1,2,3,4,5,6,7 },
	{
		0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8
	},
	{
		0*16*8,1*16*8,2*16*8,3*16*8,4*16*8,5*16*8,6*16*8,7*16*8,
		8*16*8,9*16*8,10*16*8,11*16*8,12*16*8,13*16*8,14*16*8,15*16*8
	},
	16*16*8
};

/* text layer uses a set of 16x16x8bpp tiles defined in RAM */
#define XOR(a) WORD2_XOR_BE(a)
static const gfx_layout namcos22_cg_layout =
{
	16,16,
	0x400,
	4,
	{ 0,1,2,3 },
	{ XOR(0)*4,  XOR(1)*4,  XOR(2)*4,  XOR(3)*4,  XOR(4)*4,  XOR(5)*4,  XOR(6)*4,  XOR(7)*4,
		XOR(8)*4,  XOR(9)*4, XOR(10)*4, XOR(11)*4, XOR(12)*4, XOR(13)*4, XOR(14)*4, XOR(15)*4 },
	{ 64*0,64*1,64*2,64*3,64*4,64*5,64*6,64*7,64*8,64*9,64*10,64*11,64*12,64*13,64*14,64*15 },
	64*16
};

#undef XOR

static GFXDECODE_START( gfx_namcos22 )
	GFXDECODE_ENTRY( nullptr,   0, namcos22_cg_layout,   0, 0x800 )
	GFXDECODE_ENTRY( "textile", 0, texture_tile_layout,  0, 0x80 )
GFXDECODE_END

static GFXDECODE_START( gfx_super )
	GFXDECODE_ENTRY( nullptr,   0, namcos22_cg_layout,   0, 0x800 )
	GFXDECODE_ENTRY( "textile", 0, texture_tile_layout,  0, 0x80 )
	GFXDECODE_ENTRY( "sprite",  0, sprite_layout,        0, 0x80 )
GFXDECODE_END


void namcos22_state::machine_reset()
{
	master_enable(false);
	slave_enable(false);
	m_dsp_irq_enabled = false;

	m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}

void namcos22_state::device_post_load()
{
	m_gfxdecode->gfx(0)->mark_all_dirty();
}

// allow save_item on a non-fundamental type
ALLOW_SAVE_TYPE(namcos22_dsp_upload_state);

void namcos22_state::machine_start()
{
	m_mcu_out.resolve();
	m_cpuled_out.resolve();
	m_portbits[0] = 0xffff;
	m_portbits[1] = 0xffff;
	m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_READY;

	// register for savestates, stuff that isn't done in video_start()
	// note: namcos22_renderer class doesn't need saving, it is refreshed every frame
	save_item(NAME(m_mixer_flags));
	save_item(NAME(m_fog_r));
	save_item(NAME(m_fog_g));
	save_item(NAME(m_fog_b));
	save_item(NAME(m_fog_colormask));
	save_item(NAME(m_screen_fade_r));
	save_item(NAME(m_screen_fade_g));
	save_item(NAME(m_screen_fade_b));
	save_item(NAME(m_screen_fade_factor));
	save_item(NAME(m_poly_fade_r));
	save_item(NAME(m_poly_fade_g));
	save_item(NAME(m_poly_fade_b));
	save_item(NAME(m_poly_fade_enabled));
	save_item(NAME(m_poly_alpha_color));
	save_item(NAME(m_poly_alpha_pen));
	save_item(NAME(m_poly_alpha_factor));

	save_item(NAME(m_syscontrol));
	save_item(NAME(m_dsp_irq_enabled));
	save_item(NAME(m_dsp_master_bioz));
	save_item(NAME(m_old_coin_state));
	save_item(NAME(m_credits1));
	save_item(NAME(m_credits2));
	save_item(NAME(m_point_address));
	save_item(NAME(m_point_data));
	save_item(NAME(m_SerialDataSlaveToMasterNext));
	save_item(NAME(m_SerialDataSlaveToMasterCurrent));
	save_item(NAME(m_RenderBufSize));
	save_item(NAME(m_RenderBufData));
	save_item(NAME(m_portbits));
	save_item(NAME(m_irq_state));
	save_item(NAME(m_irq_enabled));
	save_item(NAME(m_dsp_upload_state));
	save_item(NAME(m_UploadDestIdx));
	save_item(NAME(m_cpuled_data));
	save_item(NAME(m_su_82));
	save_item(NAME(m_keycus_id));
	save_item(NAME(m_keycus_rng));
	save_item(NAME(m_cz_adjust));
	save_item(NAME(m_objectflags));
	save_item(NAME(m_dspram_bank));
	save_item(NAME(m_dspram16_latch));
	save_item(NAME(m_slave_simulation_active));
	save_item(NAME(m_absolute_priority));
	save_item(NAME(m_objectshift));
	save_item(NAME(m_viewmatrix));
	save_item(NAME(m_LitSurfaceInfo));
	save_item(NAME(m_SurfaceNormalFormat));
	save_item(NAME(m_LitSurfaceCount));
	save_item(NAME(m_LitSurfaceIndex));
	save_item(NAME(m_tilemapattr));
	save_item(NAME(m_rowscroll));
	save_item(NAME(m_lastrow));
	save_item(NAME(m_rs_frame));
	save_item(NAME(m_spot_factor));
	save_item(NAME(m_text_palbase));
	save_item(NAME(m_bg_palbase));
	save_item(NAME(m_camera_zoom));
	save_item(NAME(m_camera_vx));
	save_item(NAME(m_camera_vy));
	save_item(NAME(m_camera_vu));
	save_item(NAME(m_camera_vd));
	save_item(NAME(m_camera_vl));
	save_item(NAME(m_camera_vr));
	save_item(NAME(m_camera_lx));
	save_item(NAME(m_camera_ly));
	save_item(NAME(m_camera_lz));
	save_item(NAME(m_camera_ambient));
	save_item(NAME(m_camera_power));
	save_item(NAME(m_reflection));
	save_item(NAME(m_cullflip));
	save_item(NAME(m_skipped_this_frame));
	save_item(NAME(m_pdp_render_done));
	save_item(NAME(m_render_refresh));
	save_item(NAME(m_pdp_frame));
	save_item(NAME(m_pdp_base));
}

void namcos22s_state::machine_start()
{
	namcos22_state::machine_start();

	save_item(NAME(m_spotram_enable));
	save_item(NAME(m_spotram_address));
	save_item(NAME(m_mcu_iocontrol));
	save_item(NAME(m_mcu_outdata));
	save_item(NAME(m_chipselect));
}

void alpine_state::machine_start()
{
	namcos22s_state::machine_start();

	save_item(NAME(m_motor_status));
}

// System22

void namcos22_state::namcos22(machine_config &config)
{
	/* basic machine hardware */
	M68020(config, m_maincpu, 49.152_MHz_XTAL/2); // MC68020RP25E
	m_maincpu->set_addrmap(AS_PROGRAM, &namcos22_state::namcos22_am);
	m_maincpu->set_vblank_int("screen", FUNC(namcos22_state::namcos22_interrupt));

	tms32025_device& master(TMS32025(config, m_master, 40_MHz_XTAL));
	master.set_addrmap(AS_PROGRAM, &namcos22_state::master_dsp_program);
	master.set_addrmap(AS_DATA, &namcos22_state::master_dsp_data);
	master.set_addrmap(AS_IO, &namcos22_state::master_dsp_io);
	master.bio_in_cb().set(FUNC(namcos22_state::pdp_status_r));
	master.hold_in_cb().set(FUNC(namcos22_state::dsp_hold_signal_r));
	master.hold_ack_out_cb().set(FUNC(namcos22_state::dsp_hold_ack_w));
	master.xf_out_cb().set(FUNC(namcos22_state::dsp_xf_output_w));
	master.dr_in_cb().set(FUNC(namcos22_state::master_serial_io_r));
	master.set_vblank_int("screen", FUNC(namcos22_state::dsp_vblank_irq));
	TIMER(config, "dsp_serial").configure_periodic(FUNC(namcos22_state::dsp_serial_pulse), attotime::from_hz(SERIAL_IO_PERIOD));

	tms32025_device& slave(TMS32025(config, m_slave, 40_MHz_XTAL));
	slave.set_addrmap(AS_PROGRAM, &namcos22_state::slave_dsp_program);
	slave.set_addrmap(AS_DATA, &namcos22_state::slave_dsp_data);
	slave.set_addrmap(AS_IO, &namcos22_state::slave_dsp_io);
	slave.bio_in_cb().set(FUNC(namcos22_state::dsp_slave_bioz_r));
	slave.hold_in_cb().set(FUNC(namcos22_state::dsp_hold_signal_r));
	slave.hold_ack_out_cb().set(FUNC(namcos22_state::dsp_hold_ack_w));
	slave.xf_out_cb().set(FUNC(namcos22_state::dsp_xf_output_w));
	slave.dx_out_cb().set(FUNC(namcos22_state::slave_serial_io_w));

	NAMCO_C74(config, m_mcu, 49.152_MHz_XTAL/3); // C74 on the CPU board has no periodic interrupts, it runs entirely off Timer A0
	m_mcu->set_addrmap(AS_PROGRAM, &namcos22_state::mcu_s22_program);
	m_mcu->p4_in_cb().set(FUNC(namcos22_state::mcu_port4_s22_r));

	NAMCO_C74(config, m_iomcu, 6.144_MHz_XTAL);
	m_iomcu->set_addrmap(AS_PROGRAM, &namcos22_state::iomcu_s22_program);
	m_iomcu->p4_in_cb().set(FUNC(namcos22_state::iomcu_port4_s22_r));
	m_iomcu->set_disable(); // not emulated yet

	EEPROM_2864(config, "eeprom").write_time(attotime::zero);

	/* video hardware */
	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
	m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
	m_screen->set_screen_update(FUNC(namcos22_state::screen_update_namcos22));
	m_screen->screen_vblank().set(FUNC(namcos22_state::screen_vblank));

	PALETTE(config, m_palette).set_entries(0x8000);
	GFXDECODE(config, m_gfxdecode, m_palette, gfx_namcos22);

	/* sound hardware */
	SPEAKER(config, "lspeaker").front_left();
	SPEAKER(config, "rspeaker").front_right();

	C352(config, m_c352, 49.152_MHz_XTAL/2, 288);
	m_c352->add_route(0, "lspeaker", 1.0);
	m_c352->add_route(1, "rspeaker", 1.0);
}

void namcos22_state::cybrcomm(machine_config &config)
{
	namcos22(config);

	SPEAKER(config, "rear_left").rear_left();
	SPEAKER(config, "rear_right").rear_right();

	m_c352->add_route(2, "rear_left", 1.0);
	m_c352->add_route(3, "rear_right", 1.0);
}

// System Super22

void namcos22s_state::namcos22s(machine_config &config)
{
	namcos22(config);

	/* basic machine hardware */
	M68EC020(config.replace(), m_maincpu, 49.152_MHz_XTAL/2); // MC68EC020FG25
	m_maincpu->set_addrmap(AS_PROGRAM, &namcos22s_state::namcos22s_am);
	m_maincpu->set_vblank_int("screen", FUNC(namcos22s_state::namcos22s_interrupt));

	M37710S4(config.replace(), m_mcu, 49.152_MHz_XTAL/3);
	m_mcu->set_addrmap(AS_PROGRAM, &namcos22s_state::mcu_program);
	m_mcu->p4_in_cb().set(FUNC(namcos22s_state::mcu_port4_r));
	m_mcu->p4_out_cb().set(FUNC(namcos22s_state::mcu_port4_w));
	m_mcu->p5_in_cb().set(FUNC(namcos22s_state::mcu_port5_r));
	m_mcu->p5_out_cb().set(FUNC(namcos22s_state::mcu_port5_w));
	m_mcu->p6_in_cb().set(FUNC(namcos22s_state::mcu_port6_r));
	m_mcu->p6_out_cb().set(FUNC(namcos22s_state::mcu_port6_w));
	m_mcu->an0_cb().set(FUNC(namcos22s_state::mcu_adc_r<0>));
	m_mcu->an1_cb().set(FUNC(namcos22s_state::mcu_adc_r<1>));
	m_mcu->an2_cb().set(FUNC(namcos22s_state::mcu_adc_r<2>));
	m_mcu->an3_cb().set(FUNC(namcos22s_state::mcu_adc_r<3>));
	TIMER(config, "mcu_irq").configure_scanline(FUNC(namcos22s_state::mcu_irq), "screen", 0, 240);
	config.set_maximum_quantum(attotime::from_hz(9000)); // erratic inputs otherwise, probably mcu vs maincpu shareram

	config.device_remove("iomcu");

	MB87078(config, m_mb87078);
	m_mb87078->gain_changed().set(FUNC(namcos22s_state::mb87078_gain_changed));

	/* video hardware */
	m_screen->set_screen_update(FUNC(namcos22s_state::screen_update_namcos22s));

	GFXDECODE(config.replace(), m_gfxdecode, m_palette, gfx_super);
}

void namcos22s_state::airco22b(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "bodysonic").backrest();
	m_c352->add_route(2, "bodysonic", 0.50); // to subwoofer behind back
}

void alpine_state::alpine(machine_config &config)
{
	namcos22s(config);

	m_mcu->p4_out_cb().set(FUNC(alpine_state::alpine_mcu_port4_w));
	TIMER(config, m_motor_timer).configure_generic(FUNC(alpine_state::alpine_steplock_callback));
}

void alpines_state::alpines(machine_config &config)
{
	alpine(config);

	m_maincpu->set_addrmap(AS_PROGRAM, &alpines_state::alpines_am);
}

void namcos22s_state::cybrcycc(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "tank", 0.0, 0.0, 0.0);
	m_c352->add_route(2, "tank", 1.0);
}

void namcos22s_state::dirtdash(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "road", 0.0, 0.0, 0.0);
	m_c352->add_route(3, "road", 0.5);
}

void timecris_state::timecris(machine_config &config)
{
	namcos22s(config);

	m_maincpu->set_addrmap(AS_PROGRAM, &timecris_state::timecris_am);
}

void namcos22s_state::tokyowar(machine_config &config)
{
	namcos22s(config);

	SPEAKER(config, "vibration").seat();
	SPEAKER(config, "seat").headrest_center();

	m_c352->add_route(2, "vibration", 0.5); // to "bass shaker"
	m_c352->add_route(3, "seat", 1.0);
}

void propcycl_state::propcycl(machine_config &config)
{
	namcos22s(config);

	TIMER(config, "pedal_update").configure_periodic(FUNC(propcycl_state::pedal_update), attotime::from_msec(20));
	TIMER(config, m_pedal_interrupt).configure_generic(FUNC(propcycl_state::pedal_interrupt));
}

void adillor_state::adillor(machine_config &config)
{
	namcos22s(config);

	TIMER(config, "trackball_update").configure_periodic(FUNC(adillor_state::trackball_update), attotime::from_msec(20));
	for (int i = 0; i < 2; i++)
		TIMER(config, m_trackball_interrupt[i]).configure_generic(FUNC(adillor_state::trackball_interrupt));
}



/*********************************************************************************************/

ROM_START( ridgerac )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr2_prgllb.4d", 0x00003, 0x80000, CRC(d50d4fa0) SHA1(0fcd55e653d4f596b38b4e7b876ccd1f2a3836df) ) // Ridge Racer Standard  Date 1994-01-17
	ROM_LOAD32_BYTE( "rr2_prglmb.2d", 0x00002, 0x80000, CRC(6a266f42) SHA1(470613dbddd6b3050f666de9a2b222a4b7e1e809) )
	ROM_LOAD32_BYTE( "rr2_prgumb.8d", 0x00001, 0x80000, CRC(64c3aff1) SHA1(46b30ee0601a0a7887d29bc94d595f50a5a812d6) )
	ROM_LOAD32_BYTE( "rr2_prguub.6d", 0x00000, 0x80000, CRC(e6ff0b8d) SHA1(a02ffd2d3dc0a2c4a5665303c8021fd99a50eb8e) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgeraca )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr2_prgll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) ) // Ridge Racer Standard  Date 1993-10-07
	ROM_LOAD32_BYTE( "rr2_prglm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) )
	ROM_LOAD32_BYTE( "rr2_prgum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) )
	ROM_LOAD32_BYTE( "rr2_prguu.6d", 0x00000, 0x80000, CRC(a79e456f) SHA1(049c596e01e53e3a401c5c4260517f170688d387) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgeracb )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr3_prgllb.4d", 0x00003, 0x80000, CRC(856fe5ec) SHA1(72d95b8bd5da551c3d358b8ab266373a89f8aa6a) ) // Ridge Racer Standard  -Foreign B-  Date 1994-01-17
	ROM_LOAD32_BYTE( "rr3_prglmb.2d", 0x00002, 0x80000, CRC(1e9ef0a9) SHA1(a4577bcdf13673568793d8a324945fca30b10f43) )
	ROM_LOAD32_BYTE( "rr3_prgumb.8d", 0x00001, 0x80000, CRC(e160f63f) SHA1(9b4b7a13eb4bc19fcb53daedb87e4945c20a1b8e) )
	ROM_LOAD32_BYTE( "rr3_prguub.6d", 0x00000, 0x80000, CRC(f07c78c0) SHA1(dbed76d868b761711faf5b6e11f2c9affb91db5d) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

/*
ridgeracc is purportedly the Ridge Racer 3 Screen version

There doesn't seem to be anything specific about this set to indicate it supports 3 screens
  The 3 screen machine has 3 identical PCB sets running with communication between them.
   Until it's verified one way or the other leave as labeled
*/
ROM_START( ridgeracc )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr3_prgll-3s.4d", 0x000003, 0x080000, CRC(2c3d8cb7) SHA1(46a7b62938fe3edde5c52ce3fdfe447000cd6af0) ) // Ridge Racer Standard  -Foreign B-  Date 1993-10-28
	ROM_LOAD32_BYTE( "rr3_prglm-3s.2d", 0x000002, 0x080000, CRC(b15343f2) SHA1(3056eb5a3036a74b2ac641a4c3221986c0be1e27) )
	ROM_LOAD32_BYTE( "rr3_prgum-3s.8d", 0x000001, 0x080000, CRC(8fda06ac) SHA1(7e9adba198eb0941100cda64ecedac504f6ac696) )
	ROM_LOAD32_BYTE( "rr3_prguu-3s.6d", 0x000000, 0x080000, CRC(868398df) SHA1(422e0f9884904b0df93fcacd1468b8da0458eb8e) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgeracj )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rr1_prgll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) ) // Ridge Racer Standard  Date 1993-10-07
	ROM_LOAD32_BYTE( "rr1_prglm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) )
	ROM_LOAD32_BYTE( "rr1_prgum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) )
	ROM_LOAD32_BYTE( "rr1_prguu.6d", 0x00000, 0x80000, CRC(c1371f96) SHA1(a78e0bf6c147c034487a85efa0a8470f4e8f4bf0) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) )
	ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) )
	ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) )
	ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) )
	ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) )
	ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) )
	ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgeracf )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrf2_prgll.4d", 0x00003, 0x80000, CRC(23c6144d) SHA1(99f70e2c60fba7551cafdce12b07da1f8ab8aad6) ) // Ridge Racer Full Scale  -Foreign-  Date 1993-12-13
	ROM_LOAD32_BYTE( "rrf2_prglm.2d", 0x00002, 0x80000, CRC(1ad638a1) SHA1(505a7f4ba60bbc4e735865fbc5d664311b6045d9) )
	ROM_LOAD32_BYTE( "rrf2_prgum.8d", 0x00001, 0x80000, CRC(d7e0aa16) SHA1(cab4578cdd3af84b865114be4105cfdc2e7abf36) )
	ROM_LOAD32_BYTE( "rrf2_prguu.6d", 0x00000, 0x80000, CRC(12c808bb) SHA1(64e84686d4ceb8145b9a59b75d0dced830884c9d) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrf1data.6r", 0, 0x080000, CRC(ce3c6ed6) SHA1(23e033364bc967c10c49fd1d5413dda837670633) )

	/* this stuff was missing from this version, and shouldn't be the same (bad textures if we use these roms) */
	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrf1cg0.bin", 0x200000*0x4, 0x200000, BAD_DUMP CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )
	ROM_LOAD( "rrf1cg1.bin", 0x200000*0x5, 0x200000, BAD_DUMP CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )
	ROM_LOAD( "rrf1cg2.bin", 0x200000*0x6, 0x200000, BAD_DUMP CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )
	ROM_LOAD( "rrf1cg3.bin", 0x200000*0x7, 0x200000, BAD_DUMP CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrf1ccrl.bin",0x000000, 0x200000, BAD_DUMP CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )
	ROM_LOAD( "rrf1ccrh.bin",0x200000, 0x080000, BAD_DUMP CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrf2potl0.l0", 0x80000*0, 0x80000, CRC(9b762e60) SHA1(50b67ff6678bacba140bad3aedda75c30851fa7a) )
	ROM_LOAD( "rrf2potl1.l1", 0x80000*1, 0x80000, CRC(ab4d66b0) SHA1(59020b3dc2efff99cd528752ca7168b64ae96ac4) )
	ROM_LOAD( "rrf2potm0.m0", 0x80000*2, 0x80000, CRC(02d4daa3) SHA1(9b4e48d3234cb91146b5d31ffcf42ad199ccb903) )
	ROM_LOAD( "rrf2potm1.m1", 0x80000*3, 0x80000, CRC(37e005c2) SHA1(036ae1c44aaa6a6904e6d4938572035ccc6854ed) )
	ROM_LOAD( "rrf2potu0.u0", 0x80000*4, 0x80000, CRC(86b3fe98) SHA1(f242d33f7488e233ccdc0b5d309c64510d7a622d) )
	ROM_LOAD( "rrf2potu1.u1", 0x80000*5, 0x80000, CRC(e0c6ce3d) SHA1(cc559a2237ccb753cb1397fecba64733455a8c43) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrf1wave0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) )
	ROM_LOAD( "rrf1wave1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) )
	ROM_LOAD( "rrf1wave2.10n", 0x100000*1, 0x100000,CRC(4ceeae12) SHA1(ae3a6583f8912bc784c7bc63d32448228cf217ba) ) // differs from normal sets
	ROM_LOAD( "rrf1wave3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END


ROM_START( ridgera2 )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrs2_prgll.4d", 0x00003, 0x80000, CRC(88199c0f) SHA1(5cf5bb714c3d209943a8d815eaea60afd34641ff) ) // Ridge Racer 2 Standard  Date 1994-06-21  -Foreign-
	ROM_LOAD32_BYTE( "rrs2_prglm.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) ) // One byte different compared to the Rev.B Japanese set below
	ROM_LOAD32_BYTE( "rrs2_prgum.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) ) // The "World" set's ROMs are NOT marked as Rev.B even though
	ROM_LOAD32_BYTE( "rrs2_prguu.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) ) // they are clearly based off of the Japanese Rev.B ROM set.

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) )
	ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) )
	ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) )
	ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) )
	ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) )
	ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) )
	ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) )
	ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) )
	ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) )
	ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) )
	ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) )
	ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) )
	ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgera2j )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrs1_prgllb.4d", 0x00003, 0x80000, CRC(22f069e5) SHA1(fcaec3aa83853c39d713ed01c511060663027ccd) ) // Ridge Racer 2 Standard  Date 1994-06-21
	ROM_LOAD32_BYTE( "rrs1_prglmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) )
	ROM_LOAD32_BYTE( "rrs1_prgumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) )
	ROM_LOAD32_BYTE( "rrs1_prguub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) )
	ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) )
	ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) )
	ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) )
	ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) )
	ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) )
	ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) )
	ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) )
	ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) )
	ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) )
	ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) )
	ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) )
	ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgera2ja )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrs1_prgll.4d", 0x00003, 0x80000, CRC(fbf785a2) SHA1(b9333c7623f68f48aa6ae50913a22a527a19576a) ) // Ridge Racer 2 Standard  Date 1994-06-13
	ROM_LOAD32_BYTE( "rrs1_prglm.2d", 0x00002, 0x80000, CRC(562f747a) SHA1(79d818b87c9a992fc9706fb39e6d560c2b0aa392) )
	ROM_LOAD32_BYTE( "rrs1_prgum.8d", 0x00001, 0x80000, CRC(93259fb0) SHA1(c29787e873797a003db27adbd20d7b852e26d8c6) )
	ROM_LOAD32_BYTE( "rrs1_prguu.6d", 0x00000, 0x80000, CRC(31cdefe8) SHA1(ae836d389bed43dd156eb4cf3e97b6f1ad68181e) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) )
	ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) )
	ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) )
	ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) )
	ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) )
	ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) )
	ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) )
	ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) )
	ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) )
	ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) )
	ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) )
	ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) )
	ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( ridgera28 )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rrs_8_prgll.4d", 0x00003, 0x80000, CRC(c8d2bc61) SHA1(9db734fc45f47e6742ef2a8ba2558efb881df94a) ) // Ridge Racer 2 Standard  Date 1994-XX-XX
	ROM_LOAD32_BYTE( "rrs_8_prglm.2d", 0x00002, 0x80000, CRC(bb1d23c7) SHA1(feaa1387b7003794c192edef4478636d8b125fef) ) // Early dev or test set? Only uses half of music tracks
	ROM_LOAD32_BYTE( "rrs_8_prgum.8d", 0x00001, 0x80000, CRC(720c854d) SHA1(9c8e2868dd7ef425fdc6f701968b9713bb12b56c) ) // Has extra PCG TEST in service menu
	ROM_LOAD32_BYTE( "rrs_8_prguu.6d", 0x00000, 0x80000, CRC(fb4b7e8f) SHA1(1919803dbe35a88bbb6b608d0c3ab8daea31f580) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rrs_8_data.6r", 0, 0x080000, CRC(8bf75a96) SHA1(987d24f2195eb5a84c10c68584404556ef1dfe88) ) // this DATA rom unique to this set

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) )
	ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) )
	ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) )
	ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) )
	ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) )
	ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) )
	ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) )
	ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) )
	ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) )
	ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) )
	ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) )
	ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) )
	ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END


ROM_START( raverace )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rv2_prgllb.4d", 0x00003, 0x80000, CRC(3017cd1e) SHA1(ccd648b4a5dfc74fd141815af2969f423311042f) ) // Raveracer Standard  -Foreign-  Date: 07/16/95
	ROM_LOAD32_BYTE( "rv2_prglmb.2d", 0x00002, 0x80000, CRC(894be0c3) SHA1(4dba93dc3ca1cf502c5f54018b64ad79bb2a632b) )
	ROM_LOAD32_BYTE( "rv2_prgumb.8d", 0x00001, 0x80000, CRC(6414a800) SHA1(c278ff644909d12a43ba6fc2bf8d2092e469c3e6) )
	ROM_LOAD32_BYTE( "rv2_prguub.6d", 0x00000, 0x80000, CRC(a9f18714) SHA1(8e7b17749d151f92020f68d1ac06003cf1f5c573) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */
	ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */
	ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */
	ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */
	ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */
	ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */
	ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */
	ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rv1ccrl.5a",  0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */
	ROM_LOAD( "rv1ccrh.5c",  0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) )
	ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) )
	ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) )
	ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) )
	ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) )
	ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) )
	ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) )
	ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) )
	ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) )
	ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) )
	ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) )
	ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) )
	ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) )
	ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) )
	ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) )
ROM_END

ROM_START( raveracej )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rv1_prgllb.4d", 0x00003, 0x80000, CRC(71da3eea) SHA1(8a641bb23e0ad89cae5ee1570f8a3627b2434d20) ) // Raveracer Standard  Date: 07/16/95
	ROM_LOAD32_BYTE( "rv1_prglmb.2d", 0x00002, 0x80000, CRC(6ab7e9ce) SHA1(0c6376ca5a63409aeea344bbc201af6c47afe9ab) )
	ROM_LOAD32_BYTE( "rv1_prgumb.8d", 0x00001, 0x80000, CRC(375fabcf) SHA1(448e3db3e3fab8c7c27e214ab5a5fa84e5f84366) )
	ROM_LOAD32_BYTE( "rv1_prguub.6d", 0x00000, 0x80000, CRC(92f834d6) SHA1(028368790f0293fcfea5c7b12f7f315e27a62f77) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */
	ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */
	ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */
	ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */
	ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */
	ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */
	ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */
	ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rv1ccrl.5a",  0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */
	ROM_LOAD( "rv1ccrh.5c",  0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) )
	ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) )
	ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) )
	ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) )
	ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) )
	ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) )
	ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) )
	ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) )
	ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) )
	ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) )
	ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) )
	ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) )
	ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) )
	ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) )
	ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) )
ROM_END

ROM_START( raveraceja )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "rv1_prgll.4d", 0x00003, 0x80000, CRC(5dfce6cd) SHA1(1aeeca1e507ae4cbe3d39ca5efd1cc4fe1ab03a8) ) // Raveracer Standard  Date: 06/29/95
	ROM_LOAD32_BYTE( "rv1_prglm.2d", 0x00002, 0x80000, CRC(0d4d9f74) SHA1(f886b0629cbf5a369af1f44e53c6fd3f51b3fbc9) )
	ROM_LOAD32_BYTE( "rv1_prgum.8d", 0x00001, 0x80000, CRC(28e503e3) SHA1(a3071461f840f28c65c660de215c73f812f356b3) )
	ROM_LOAD32_BYTE( "rv1_prguu.6d", 0x00000, 0x80000, CRC(c47d9ff4) SHA1(4d7c4ac4151a3b306e7277937add8eee26e561a6) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */
	ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */
	ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */
	ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */
	ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */
	ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */
	ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */
	ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "rv1ccrl.5a",  0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */
	ROM_LOAD( "rv1ccrh.5c",  0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) )
	ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) )
	ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) )
	ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) )
	ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) )
	ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) )
	ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) )
	ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) )
	ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) )
	ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) )
	ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) )
	ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) )
	ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) )
	ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) )
	ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) )
ROM_END


ROM_START( cybrcomm )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "cy1prgll.4d", 0x00003, 0x80000, CRC(b3eab156) SHA1(2a5c4e0360c3b9500687a4d70f7110a0c30da2a5) )
	ROM_LOAD32_BYTE( "cy1prglm.2d", 0x00002, 0x80000, CRC(884a5b0e) SHA1(0e27ae366b8a2695fe112b4740c8c9013bb97e26) )
	ROM_LOAD32_BYTE( "cy1prgum.8d", 0x00001, 0x80000, CRC(c9c4a921) SHA1(76a52461165a8bd8d984a34063fbeb4cb73624af) )
	ROM_LOAD32_BYTE( "cy1prguu.6d", 0x00000, 0x80000, CRC(5f22975b) SHA1(a1a5cb66358d64a3c564b912f2eeafa182786b1e) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "cy1data.6r", 0x00000, 0x20000, CRC(10d0005b) SHA1(10508eeaf74d24a611b44cd3bb12417ceb78904f) )
	ROM_RELOAD(             0x20000, 0x20000)
	ROM_RELOAD(             0x40000, 0x20000)
	ROM_RELOAD(             0x60000, 0x20000)

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "cyc1cg0.1a", 0x200000*0x4, 0x200000,CRC(e839b9bd) SHA1(fee43d37dcca7f1fb952a6bfb886b7ee30b7d75c) ) /* cyc1cg0.6a */
	ROM_LOAD( "cyc1cg1.2a", 0x200000*0x5, 0x200000,CRC(7d13993f) SHA1(96ac82bcc63afe395bae73f005eb66dad7742d48) ) /* cyc1cg1.7a */
	ROM_LOAD( "cyc1cg2.3a", 0x200000*0x6, 0x200000,CRC(7c464566) SHA1(69817ac3a7c6e43b960e8a904962b58b23417163) ) /* cyc1cg2.8a */
	ROM_LOAD( "cyc1cg3.5a", 0x200000*0x7, 0x200000,CRC(2222e16f) SHA1(562bcd4d43b1543303d8fd66d9f0d9a8e3702492) ) /* cyc1cg3.9a */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	//cyc1ccrl.1c FIXED BITS (xxxxxxxx11xxxxxx)
	ROM_LOAD( "cyc1ccrl.1c",     0x000000, 0x100000,CRC(1a0dc5f0) SHA1(bf0093d9cbdcb45a82705e966c48a1f408fa344e) ) /* cyc1ccrl.8c */
	//cyc1ccrh.2c 1xxxxxxxxxxxxxxxxxx = 0xFF
	ROM_LOAD( "cyc1ccrh.2c",     0x200000, 0x080000,CRC(8c4090b8) SHA1(456d548a48833e840c5d39d47b2dcca03f8d6321) ) /* cyc1ccrh.7c */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "cyc1ptl0.5b", 0x80000*0x0, 0x80000,CRC(d91de03d) SHA1(05819d285f6111867c41337bda9c4b9ad5394b6b) )
	ROM_LOAD( "cyc1ptl1.4b", 0x80000*0x1, 0x80000,CRC(e5b98021) SHA1(7416cbf74da969f822e0363ced7a25b967277e28) )
	ROM_LOAD( "cyc1ptl2.3b", 0x80000*0x2, 0x80000,CRC(7ba786c6) SHA1(1a5319dec495453bab9d70ae773a807f0036b355) )
	ROM_LOAD( "cyc1ptm0.5c", 0x80000*0x3, 0x80000,CRC(d454b5c6) SHA1(95ae6f0455e9fd7dff066e74cd4343c94d1bc212) )
	ROM_LOAD( "cyc1ptm1.4c", 0x80000*0x4, 0x80000,CRC(74fdf8cc) SHA1(f2627f400e247b6d4c4157eaf0ec69d57212e566) )
	ROM_LOAD( "cyc1ptm2.3c", 0x80000*0x5, 0x80000,CRC(b9c99a45) SHA1(c86cf594b416776eaf9a32c3cb9d34acc79777e9) )
	ROM_LOAD( "cyc1ptu0.5d", 0x80000*0x6, 0x80000,CRC(4d40897f) SHA1(ffe2a0ab66443553c83512f9a1be94b2e385cf2f) )
	ROM_LOAD( "cyc1ptu1.4d", 0x80000*0x7, 0x80000,CRC(3bdaeeeb) SHA1(826f97e2165af8569cfec03874b16030a9486559) )
	ROM_LOAD( "cyc1ptu2.3d", 0x80000*0x8, 0x80000,CRC(a0e73674) SHA1(1e22142a564e664031c12b250664fc82e3b3d43b) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "cy1wav0.10r", 0x000000, 0x100000, CRC(c6f366a2) SHA1(795dbee09df159d3501c748fb3de16cca81742d6) )
	ROM_LOAD( "cy1wav1.10p", 0x200000, 0x100000, CRC(f30b5e37) SHA1(9f5a94d82741ef9688c6e415ebb9009c906737c9) )
	ROM_LOAD( "cy1wav2.10n", 0x100000, 0x100000, CRC(b98c1ca6) SHA1(4b66aa05f82be5ef3315acc30031872698ff4391) )
	ROM_LOAD( "cy1wav3.10l", 0x300000, 0x100000, CRC(43dbac19) SHA1(83fd4ae4e7ec264fc217ed18caf59bf438af0c3d) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "cy1eeprm.9e", 0x0000, 0x2000, CRC(8432c066) SHA1(99d4bfda3f8aec288dbeaf291bce85fe9009a1de) )
ROM_END


ROM_START( acedrive )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ad2_prgll.4d", 0x00003, 0x80000, CRC(808c5ff8) SHA1(119c90ecb5aa099a0e5d1d7944c004beacead367) ) // Version 94/10/20 16:22:25
	ROM_LOAD32_BYTE( "ad2_prglm.2d", 0x00002, 0x80000, CRC(5f726a10) SHA1(d077312c6a387fbdf906d278c73c6a3730687f32) )
	ROM_LOAD32_BYTE( "ad2_prgum.8d", 0x00001, 0x80000, CRC(d5042d6e) SHA1(9ae93e7ea7126302831a879ba0aadcb6e5b842f5) )
	ROM_LOAD32_BYTE( "ad2_prguu.6d", 0x00000, 0x80000, CRC(86d4661d) SHA1(2a1529a51ca5466994a2d0d84c7aab13cef95a11) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "ad1data.6r", 0, 0x080000, CRC(82024f74) SHA1(711ab0c4f027716aeab18e3a5d3d06fa82af8007) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ad1cg0.1a", 0x200000*0x4, 0x200000,CRC(faaa1ee2) SHA1(878f2b74587ed4d06c5110a0eb0020c49ddc5dfa) )
	ROM_LOAD( "ad1cg1.2a", 0x200000*0x5, 0x200000,CRC(1aab1eb7) SHA1(b8f9eeafec7e0de340cf48e38fa55dd14404c867) )
	ROM_LOAD( "ad1cg2.3a", 0x200000*0x6, 0x200000,CRC(cdcd1874) SHA1(5a7a4a0d897cca4956b0a4f178f39f618c921861) )
	ROM_LOAD( "ad1cg3.5a", 0x200000*0x7, 0x200000,CRC(effdd2cd) SHA1(9ff156e7e38c103b8fa6f3c29776dd38482d9cf2) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ad1ccrl.1c", 0x000000, 0x200000,CRC(bc3c9b12) SHA1(088e861e5c4b37c54b7f72963113a10870bf7927) )
	ROM_LOAD( "ad1ccrh.2c", 0x200000, 0x080000,CRC(71f44526) SHA1(bb4811fc5de626380ce6a17bee73e5e47926d850) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ad1potl0.5b", 0x80000*0, 0x80000,CRC(dfc7e729) SHA1(5e3deef66d0a5dd2ff0584b8c8be4bf5e798e4d0) )
	ROM_LOAD( "ad1potl1.4b", 0x80000*1, 0x80000,CRC(5914ef8e) SHA1(f6db9c3061ceda76eef0a9538d9c048366b71124) )
	ROM_LOAD( "ad1potm0.5c", 0x80000*2, 0x80000,CRC(844bcd6b) SHA1(629b8dc0a7e94410c08c8874b69d9f4bc22f3e4f) )
	ROM_LOAD( "ad1potm1.4c", 0x80000*3, 0x80000,CRC(515cf541) SHA1(db1522813ea3e982d479cc1903d18799bf75aea9) )
	ROM_LOAD( "ad1potu0.5d", 0x80000*4, 0x80000,CRC(e0f44949) SHA1(ffdb64d600883974b05edaa9ed3071af355ee17f) )
	ROM_LOAD( "ad1potu1.4d", 0x80000*5, 0x80000,CRC(f2cd2cbb) SHA1(19fe6e3454a1e4353c7fe0a0d7a71742fea946de) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "ad1wave0.10r", 0x100000*0, 0x100000,CRC(c7879a72) SHA1(ae04d664858b0944583590ed0003a9420032d5ca) )
	ROM_LOAD( "ad1wave1.10p", 0x100000*2, 0x100000,CRC(69c1d41e) SHA1(b5cdfe7b75075c585dfd842347f8e4e692bb2781) )
	ROM_LOAD( "ad1wave2.10n", 0x100000*1, 0x100000,CRC(365a6831) SHA1(ddaa44a4436d6de120b64a5d130b1ee18f872e19) )
	ROM_LOAD( "ad1wave3.10l", 0x100000*3, 0x100000,CRC(cd8ecb0b) SHA1(7950b5a3a81f5554f57accabc7a623b8265a21a1) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END


ROM_START( victlap )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "adv2_prgllb.4d", 0x00003, 0x80000, CRC(03ba6e42) SHA1(0e8138214463a6db59a6f7cbea3f0b6ed1b82465) ) // Version 96/05/21 19:39:59
	ROM_LOAD32_BYTE( "adv2_prglmb.2d", 0x00002, 0x80000, CRC(9f4b49c0) SHA1(e8d5fc070f3855f11ef12b41bfd889f06acccd3d) )
	ROM_LOAD32_BYTE( "adv2_prgumb.8d", 0x00001, 0x80000, CRC(ccad3e90) SHA1(16ccddf5114f1847808b0c5655aadd8ac040ff4e) )
	ROM_LOAD32_BYTE( "adv2_prguub.6d", 0x00000, 0x80000, CRC(f3fffc41) SHA1(277cc5b24a094e4adff41d6d35ffc111bc8fef27) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "adv1data.6r", 0, 0x080000, CRC(10eecdb4) SHA1(aaedeed166614e6670e765e0d7e4e9eb5f38ad10) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "adv1cg0.2a",  0x200000*0x0, 0x200000,CRC(13353848) SHA1(c6c7693e3cb086919daf9fcaf6bf602142213073) )
	ROM_LOAD( "adv1cg1.1c",  0x200000*0x1, 0x200000,CRC(1542066c) SHA1(20a053e919b7a81da2a17d31dc7482832a4d4ffe) )
	ROM_LOAD( "adv1cg2.2d",  0x200000*0x2, 0x200000,CRC(111f371c) SHA1(29d8062daae51b3c1712bd30baa9813a2b5b374d) )
	ROM_LOAD( "adv1cg3.1e",  0x200000*0x3, 0x200000,CRC(a077831f) SHA1(71bb95199b368e48bc474123ca84d19213f73137) )
	ROM_LOAD( "adv1cg4.2f",  0x200000*0x4, 0x200000,CRC(71abdacf) SHA1(64409e6aa40dd9e5a6dd1dc306860fbbf6ee7c3e) )
	ROM_LOAD( "adv1cg5.1j",  0x200000*0x5, 0x200000,CRC(cd6cd798) SHA1(51070997a457c0ace078174569cd548ac2226b2d) )
	ROM_LOAD( "adv1cg6.2k",  0x200000*0x6, 0x200000,CRC(94bdafba) SHA1(41e64fa99b342edd8b0ed95ae9869c23e03399e6) )
	ROM_LOAD( "adv1cg7.1n",  0x200000*0x7, 0x200000,CRC(18823475) SHA1(a3244d665b59c352593de21f5cb8d55ddf8cee5c) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "adv1ccrl.5a",     0x000000, 0x200000,CRC(dd2b96ae) SHA1(6337ce17e617234c27ebad578ba82451649aad9c) ) /* ident to adv1ccrl.5l */
	ROM_LOAD( "adv1ccrh.5c",     0x200000, 0x080000,CRC(5719844a) SHA1(a17d7bc239235e9f566931ba4fee1d6ad7964d83) ) /* ident to adv1ccrh.5j */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "adv1pot.l0", 0x80000*0, 0x80000,CRC(3b85b2a4) SHA1(84c92ed0105618d4aa5508af344b4b6cfa772567) )
	ROM_LOAD( "adv1pot.l1", 0x80000*1, 0x80000,CRC(601d6488) SHA1(c7932103ba6070e17deb3cc06060eed7789f938e) )
	ROM_LOAD( "adv1pot.l2", 0x80000*2, 0x80000,CRC(a0323a84) SHA1(deadf9a47461df7b137759d6886e676137b39fd2) )
	ROM_LOAD( "adv1pot.m0", 0x80000*3, 0x80000,CRC(20951aa2) SHA1(3de55bded443a5b78699cec4845470b53b22301a) )
	ROM_LOAD( "adv1pot.m1", 0x80000*4, 0x80000,CRC(5aed6fbf) SHA1(8cee781d8a12e00635b9a1e5cc8d82e64b17e8f1) )
	ROM_LOAD( "adv1pot.m2", 0x80000*5, 0x80000,CRC(00cbff92) SHA1(09a11ba064aafc921a7ca0add5898d91b773f10a) )
	ROM_LOAD( "adv1pot.u0", 0x80000*6, 0x80000,CRC(6b73dd2a) SHA1(e3654ab2b62e4f3314558209e37c5636f871a6c7) )
	ROM_LOAD( "adv1pot.u1", 0x80000*7, 0x80000,CRC(c8788f74) SHA1(606e10b05146e3db824aa608745de80584420d12) )
	ROM_LOAD( "adv1pot.u2", 0x80000*8, 0x80000,CRC(e67f29c5) SHA1(16222afb4f1f494711dd00ebb347c824db333bae) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "adv1wav0.10r", 0x000000, 0x100000, CRC(f07b2d9d) SHA1(fd46c23b336d5e9a748f7f8d825c19737125d2fb) )
	ROM_LOAD( "adv1wav1.10p", 0x200000, 0x100000, CRC(737f3c7a) SHA1(4737994f146c0076e7270785f41f3a85c53c7c5f) )
	ROM_LOAD( "adv1wav2.10n", 0x100000, 0x100000, CRC(c1a5ca5e) SHA1(27e6f9256d5fe5966e91d6be1e6e80900a764af1) )
	ROM_LOAD( "adv1wav3.10l", 0x300000, 0x100000, CRC(fc6b8004) SHA1(5c9e0805895931ec2b6a43376059bdbf5777222f) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( victlapa )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "adv2_prgll.4d", 0x00003, 0x80000, CRC(4dc1b0ab) SHA1(b5913388d16f824af6dbb01b5b0350d510667a87) ) // Version 96/02/13 17:50:06
	ROM_LOAD32_BYTE( "adv2_prglm.2d", 0x00002, 0x80000, CRC(7b658bef) SHA1(cf982b49fde0c1897c4c16e77f9eb2a145d8cd42) )
	ROM_LOAD32_BYTE( "adv2_prgum.8d", 0x00001, 0x80000, CRC(af67f2fb) SHA1(f391843ee0d053e33660c60e3718871142d932f2) )
	ROM_LOAD32_BYTE( "adv2_prguu.6d", 0x00000, 0x80000, CRC(b60e5d2b) SHA1(f5740615c2864c5c6433275cf4388bda5122b7a7) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "adv1data.6r", 0, 0x080000, CRC(10eecdb4) SHA1(aaedeed166614e6670e765e0d7e4e9eb5f38ad10) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "adv1cg0.2a",  0x200000*0x0, 0x200000,CRC(13353848) SHA1(c6c7693e3cb086919daf9fcaf6bf602142213073) )
	ROM_LOAD( "adv1cg1.1c",  0x200000*0x1, 0x200000,CRC(1542066c) SHA1(20a053e919b7a81da2a17d31dc7482832a4d4ffe) )
	ROM_LOAD( "adv1cg2.2d",  0x200000*0x2, 0x200000,CRC(111f371c) SHA1(29d8062daae51b3c1712bd30baa9813a2b5b374d) )
	ROM_LOAD( "adv1cg3.1e",  0x200000*0x3, 0x200000,CRC(a077831f) SHA1(71bb95199b368e48bc474123ca84d19213f73137) )
	ROM_LOAD( "adv1cg4.2f",  0x200000*0x4, 0x200000,CRC(71abdacf) SHA1(64409e6aa40dd9e5a6dd1dc306860fbbf6ee7c3e) )
	ROM_LOAD( "adv1cg5.1j",  0x200000*0x5, 0x200000,CRC(cd6cd798) SHA1(51070997a457c0ace078174569cd548ac2226b2d) )
	ROM_LOAD( "adv1cg6.2k",  0x200000*0x6, 0x200000,CRC(94bdafba) SHA1(41e64fa99b342edd8b0ed95ae9869c23e03399e6) )
	ROM_LOAD( "adv1cg7.1n",  0x200000*0x7, 0x200000,CRC(18823475) SHA1(a3244d665b59c352593de21f5cb8d55ddf8cee5c) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "adv1ccrl.5a",     0x000000, 0x200000,CRC(dd2b96ae) SHA1(6337ce17e617234c27ebad578ba82451649aad9c) ) /* ident to adv1ccrl.5l */
	ROM_LOAD( "adv1ccrh.5c",     0x200000, 0x080000,CRC(5719844a) SHA1(a17d7bc239235e9f566931ba4fee1d6ad7964d83) ) /* ident to adv1ccrh.5j */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "adv1pot.l0", 0x80000*0, 0x80000,CRC(3b85b2a4) SHA1(84c92ed0105618d4aa5508af344b4b6cfa772567) )
	ROM_LOAD( "adv1pot.l1", 0x80000*1, 0x80000,CRC(601d6488) SHA1(c7932103ba6070e17deb3cc06060eed7789f938e) )
	ROM_LOAD( "adv1pot.l2", 0x80000*2, 0x80000,CRC(a0323a84) SHA1(deadf9a47461df7b137759d6886e676137b39fd2) )
	ROM_LOAD( "adv1pot.m0", 0x80000*3, 0x80000,CRC(20951aa2) SHA1(3de55bded443a5b78699cec4845470b53b22301a) )
	ROM_LOAD( "adv1pot.m1", 0x80000*4, 0x80000,CRC(5aed6fbf) SHA1(8cee781d8a12e00635b9a1e5cc8d82e64b17e8f1) )
	ROM_LOAD( "adv1pot.m2", 0x80000*5, 0x80000,CRC(00cbff92) SHA1(09a11ba064aafc921a7ca0add5898d91b773f10a) )
	ROM_LOAD( "adv1pot.u0", 0x80000*6, 0x80000,CRC(6b73dd2a) SHA1(e3654ab2b62e4f3314558209e37c5636f871a6c7) )
	ROM_LOAD( "adv1pot.u1", 0x80000*7, 0x80000,CRC(c8788f74) SHA1(606e10b05146e3db824aa608745de80584420d12) )
	ROM_LOAD( "adv1pot.u2", 0x80000*8, 0x80000,CRC(e67f29c5) SHA1(16222afb4f1f494711dd00ebb347c824db333bae) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "adv1wav0.10r", 0x000000, 0x100000, CRC(f07b2d9d) SHA1(fd46c23b336d5e9a748f7f8d825c19737125d2fb) )
	ROM_LOAD( "adv1wav1.10p", 0x200000, 0x100000, CRC(737f3c7a) SHA1(4737994f146c0076e7270785f41f3a85c53c7c5f) )
	ROM_LOAD( "adv1wav2.10n", 0x100000, 0x100000, CRC(c1a5ca5e) SHA1(27e6f9256d5fe5966e91d6be1e6e80900a764af1) )
	ROM_LOAD( "adv1wav3.10l", 0x300000, 0x100000, CRC(fc6b8004) SHA1(5c9e0805895931ec2b6a43376059bdbf5777222f) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END

ROM_START( victlapj )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "adv1_prgllc.4d", 0x00003, 0x80000, CRC(1c630018) SHA1(c4cddeb18c6b81c768e25489f1d5af0e9c0bbfa5) ) // Version 96/02/13 17:29:10
	ROM_LOAD32_BYTE( "adv1_prglmc.2d", 0x00002, 0x80000, CRC(78413604) SHA1(08245cc1f8d97a166b6c0022fc03c423d92a3653) ) // Are these really Rev C??
	ROM_LOAD32_BYTE( "adv1_prgumc.8d", 0x00001, 0x80000, CRC(464388d9) SHA1(afad780532aff175b0a547392e80c9f01efbf9d9) )
	ROM_LOAD32_BYTE( "adv1_prguuc.6d", 0x00000, 0x80000, CRC(ad3cb5f9) SHA1(9a62043f60de4d4c82c5bec169ec975add271367) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */
	ROM_LOAD( "adv1data.6r", 0, 0x080000, CRC(10eecdb4) SHA1(aaedeed166614e6670e765e0d7e4e9eb5f38ad10) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "adv1cg0.2a",  0x200000*0x0, 0x200000,CRC(13353848) SHA1(c6c7693e3cb086919daf9fcaf6bf602142213073) )
	ROM_LOAD( "adv1cg1.1c",  0x200000*0x1, 0x200000,CRC(1542066c) SHA1(20a053e919b7a81da2a17d31dc7482832a4d4ffe) )
	ROM_LOAD( "adv1cg2.2d",  0x200000*0x2, 0x200000,CRC(111f371c) SHA1(29d8062daae51b3c1712bd30baa9813a2b5b374d) )
	ROM_LOAD( "adv1cg3.1e",  0x200000*0x3, 0x200000,CRC(a077831f) SHA1(71bb95199b368e48bc474123ca84d19213f73137) )
	ROM_LOAD( "adv1cg4.2f",  0x200000*0x4, 0x200000,CRC(71abdacf) SHA1(64409e6aa40dd9e5a6dd1dc306860fbbf6ee7c3e) )
	ROM_LOAD( "adv1cg5.1j",  0x200000*0x5, 0x200000,CRC(cd6cd798) SHA1(51070997a457c0ace078174569cd548ac2226b2d) )
	ROM_LOAD( "adv1cg6.2k",  0x200000*0x6, 0x200000,CRC(94bdafba) SHA1(41e64fa99b342edd8b0ed95ae9869c23e03399e6) )
	ROM_LOAD( "adv1cg7.1n",  0x200000*0x7, 0x200000,CRC(18823475) SHA1(a3244d665b59c352593de21f5cb8d55ddf8cee5c) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "adv1ccrl.5a",     0x000000, 0x200000,CRC(dd2b96ae) SHA1(6337ce17e617234c27ebad578ba82451649aad9c) ) /* ident to adv1ccrl.5l */
	ROM_LOAD( "adv1ccrh.5c",     0x200000, 0x080000,CRC(5719844a) SHA1(a17d7bc239235e9f566931ba4fee1d6ad7964d83) ) /* ident to adv1ccrh.5j */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "adv1pot.l0", 0x80000*0, 0x80000,CRC(3b85b2a4) SHA1(84c92ed0105618d4aa5508af344b4b6cfa772567) )
	ROM_LOAD( "adv1pot.l1", 0x80000*1, 0x80000,CRC(601d6488) SHA1(c7932103ba6070e17deb3cc06060eed7789f938e) )
	ROM_LOAD( "adv1pot.l2", 0x80000*2, 0x80000,CRC(a0323a84) SHA1(deadf9a47461df7b137759d6886e676137b39fd2) )
	ROM_LOAD( "adv1pot.m0", 0x80000*3, 0x80000,CRC(20951aa2) SHA1(3de55bded443a5b78699cec4845470b53b22301a) )
	ROM_LOAD( "adv1pot.m1", 0x80000*4, 0x80000,CRC(5aed6fbf) SHA1(8cee781d8a12e00635b9a1e5cc8d82e64b17e8f1) )
	ROM_LOAD( "adv1pot.m2", 0x80000*5, 0x80000,CRC(00cbff92) SHA1(09a11ba064aafc921a7ca0add5898d91b773f10a) )
	ROM_LOAD( "adv1pot.u0", 0x80000*6, 0x80000,CRC(6b73dd2a) SHA1(e3654ab2b62e4f3314558209e37c5636f871a6c7) )
	ROM_LOAD( "adv1pot.u1", 0x80000*7, 0x80000,CRC(c8788f74) SHA1(606e10b05146e3db824aa608745de80584420d12) )
	ROM_LOAD( "adv1pot.u2", 0x80000*8, 0x80000,CRC(e67f29c5) SHA1(16222afb4f1f494711dd00ebb347c824db333bae) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "adv1wav0.10r", 0x000000, 0x100000, CRC(f07b2d9d) SHA1(fd46c23b336d5e9a748f7f8d825c19737125d2fb) )
	ROM_LOAD( "adv1wav1.10p", 0x200000, 0x100000, CRC(737f3c7a) SHA1(4737994f146c0076e7270785f41f3a85c53c7c5f) )
	ROM_LOAD( "adv1wav2.10n", 0x100000, 0x100000, CRC(c1a5ca5e) SHA1(27e6f9256d5fe5966e91d6be1e6e80900a764af1) )
	ROM_LOAD( "adv1wav3.10l", 0x300000, 0x100000, CRC(fc6b8004) SHA1(5c9e0805895931ec2b6a43376059bdbf5777222f) )

	ROM_REGION( 0x300, "gamma_proms", 0 )
	ROM_LOAD( "rr1gam.2d",   0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.3d",   0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
	ROM_LOAD( "rr1gam.4d",   0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) )
ROM_END


ROM_START( propcycl )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "pr2ver-a.1", 0x00003, 0x100000, CRC(3f58594c) SHA1(5fdd8c61b47b51088a201799ce0c2f08c32ef852) )
	ROM_LOAD32_BYTE( "pr2ver-a.2", 0x00002, 0x100000, CRC(c0da354a) SHA1(f27a71a62385b842404fcd8ed6513158e3639b8f) )
	ROM_LOAD32_BYTE( "pr2ver-a.3", 0x00001, 0x100000, CRC(74bf4b74) SHA1(02713aa07238cc9e30163ae24d12c034aa972ff3) )
	ROM_LOAD32_BYTE( "pr2ver-a.4", 0x00000, 0x100000, CRC(cf4d5638) SHA1(2ddd00d6ec3b85c234820507650d201e176c94a2) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* SS22-BIOS ver1.41 */
	ROM_LOAD( "pr1data.8k", 0, 0x080000, CRC(2e5767a4) SHA1(390bf05c90044d841fe2dd4a427177fa1570b9a6) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "pr1scg0.12f", 0x200000*0, 0x200000,CRC(2d09a869) SHA1(ce8beabaac255e1de29d944c9866022bad713519) ) /* identical to "pr1scg0.12l" */
	ROM_LOAD( "pr1scg1.10f", 0x200000*1, 0x200000,CRC(7433c5bd) SHA1(a8fd4e73de66e3d443c0cb5b5beef8f467014815) ) /* identical to "pr1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "pr1cg0.12b",  0x200000*0x0, 0x200000,CRC(0a041238) SHA1(da5688970432f7fe39337ee9fb46ca25a53fdb11) ) /* identical to "pr1cg0.8d" */
	ROM_LOAD( "pr1cg1.10d",  0x200000*0x1, 0x200000,CRC(7d09e6a7) SHA1(892317ee0bd796fa5c70d64912ef2e696792a2d4) ) /* identical to "pr1cg1.13b" */
	ROM_LOAD( "pr1cg2.12d",  0x200000*0x2, 0x200000,CRC(659f006e) SHA1(23362a922cb1100950181fac4858b953d8fc0794) ) /* identical to "pr1cg2.14b" */
	ROM_LOAD( "pr1cg3.13d",  0x200000*0x3, 0x200000,CRC(d30bffa3) SHA1(2f05227d91d257db9fa8cae114974de602d98729) ) /* identical to "pr1cg3.16b" */
	ROM_LOAD( "pr1cg4.14d",  0x200000*0x4, 0x200000,CRC(f4636cc9) SHA1(4e01a476e418e5790878572e83a8a11536ce30ae) ) /* identical to "pr1cg4.18b" */
	ROM_LOAD( "pr1cg5.16d",  0x200000*0x5, 0x200000,CRC(97d333de) SHA1(e8f8383f49aae834dd8b57231b25899703cef966) ) /* identical to "pr1cg5.19b" */
	ROM_LOAD( "pr1cg6.18a",  0x200000*0x6, 0x200000,CRC(3e081c03) SHA1(6ccb162952f6076359b2785b5d800b39a9a3c5ce) ) /* identical to "pr1cg6.18d" */
	ROM_LOAD( "pr1cg7.15a",  0x200000*0x7, 0x200000,CRC(ec9fc5c8) SHA1(16de614b26f06bbddae3ab56cebba45efd6fe81b) ) /* identical to "pr1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "pr1ccrl.3d",  0x000000, 0x200000,CRC(e01321fd) SHA1(5938c6eff8e1b3642728c3be733f567a97cb5aad) ) /* identical to "pr1ccrl.7b" */
	ROM_LOAD( "pr1ccrh.1d",  0x200000, 0x080000,CRC(1d68bc31) SHA1(d534d0daebe7018e83b57cc7919c294ab89bddc8) ) /* identical to "pr1ccrh.5b" */
	/* These two ROMs define a huge texture tilemap using the tiles from "textile".
	 * The tilemap has 0x100 columns.
	 *
	 * pr1ccrl contains little endian 16 bit words.  Each word references a 16x16 tile.
	 *
	 * pr1ccrh.1d contains packed nibbles.  Each nibble encodes three tile attributes:
	 *  0x8 = swapxy
	 *  0x4 = flipx
	 *  0x2 = flipy
	 *  0x1 = tile bank (used in some sys22 games)
	 */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "pr1ptrl0.18k", 0x80000*0, 0x80000,CRC(fddb27a2) SHA1(6e837b45e3f9ed7ca3d1a457d0f0124de5618d1f) )
	ROM_LOAD( "pr1ptrl1.16k", 0x80000*1, 0x80000,CRC(6964dd06) SHA1(f38a550165504693d20892a7dcfaf01db19b04ef) )
	ROM_LOAD( "pr1ptrl2.15k", 0x80000*2, 0x80000,CRC(4d7ed1d4) SHA1(8f72864a06ff8962e640cb36d062bddf5d110308) )
	ROM_LOAD( "pr1ptrm0.18j", 0x80000*3, 0x80000,CRC(b6f204b7) SHA1(3b34f240b399b6406faaf338ae0ab536247e64a6) )
	ROM_LOAD( "pr1ptrm1.16j", 0x80000*4, 0x80000,CRC(949588b7) SHA1(fdaf50ff2496200b9c981efc18b035f3c0a96ace) )
	ROM_LOAD( "pr1ptrm2.15j", 0x80000*5, 0x80000,CRC(dc1cef0a) SHA1(8cbc02cf73fac3cc110b676d77602ae628385eae) )
	ROM_LOAD( "pr1ptru0.18f", 0x80000*6, 0x80000,CRC(5d66a7c4) SHA1(c9ed1c18724192d45c1f6b40096f15d02baf2401) )
	ROM_LOAD( "pr1ptru1.16f", 0x80000*7, 0x80000,CRC(e9a3f72b) SHA1(f967e1adf8eee4fffdf4288d36a93c5bb4f9a126) )
	ROM_LOAD( "pr1ptru2.15f", 0x80000*8, 0x80000,CRC(c346a842) SHA1(299bc0a30d0e74d8adfa3dc605aebf6439f5bc18) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "pr1wavea.2l", 0x000000, 0x400000, CRC(320f3913) SHA1(3887b7334ca7762794c14198dd24bab47fcd9505) )
	ROM_LOAD( "pr1waveb.1l", 0x800000, 0x400000, CRC(d91acb26) SHA1(c2161e2d70e08aed15cbc875ffee685190611daf) )
ROM_END

ROM_START( propcyclj )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "pr1ver-a.1", 0x00003, 0x100000, CRC(dfea7ff7) SHA1(9c81b145d0b6fbe14e1c5ce93ea67dacb2567220) ) /* SYSTEM SUPER22 MPM(F8F) PCB stickered PR1 VER.A */
	ROM_LOAD32_BYTE( "pr1ver-a.2", 0x00002, 0x100000, CRC(84a6f608) SHA1(c05ff3fce709bcdb7c30f019ae794979ba79970c) ) /* Fujitsu MBM29F080 flash ROMs at ROM1 & ROM2 on the underside */
	ROM_LOAD32_BYTE( "pr1ver-a.3", 0x00001, 0x100000, CRC(77f957d2) SHA1(c8a62464f427cc858d9ea33446a8648e9171ead9) ) /* Fujitsu MBM29F080 flash ROMs at ROM3 & ROM4 on the upperside */
	ROM_LOAD32_BYTE( "pr1ver-a.4", 0x00000, 0x100000, CRC(7b6844e4) SHA1(1b1c03d258c4a6d95ae227de7741f29b7d9e28d8) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* SS22-BIOS ver1.41 */
	ROM_LOAD( "pr1data.8k", 0, 0x080000, CRC(2e5767a4) SHA1(390bf05c90044d841fe2dd4a427177fa1570b9a6) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "pr1scg0.12f", 0x200000*0, 0x200000,CRC(2d09a869) SHA1(ce8beabaac255e1de29d944c9866022bad713519) ) /* identical to "pr1scg0.12l" */
	ROM_LOAD( "pr1scg1.10f", 0x200000*1, 0x200000,CRC(7433c5bd) SHA1(a8fd4e73de66e3d443c0cb5b5beef8f467014815) ) /* identical to "pr1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "pr1cg0.12b",  0x200000*0x0, 0x200000,CRC(0a041238) SHA1(da5688970432f7fe39337ee9fb46ca25a53fdb11) ) /* identical to "pr1cg0.8d" */
	ROM_LOAD( "pr1cg1.10d",  0x200000*0x1, 0x200000,CRC(7d09e6a7) SHA1(892317ee0bd796fa5c70d64912ef2e696792a2d4) ) /* identical to "pr1cg1.13b" */
	ROM_LOAD( "pr1cg2.12d",  0x200000*0x2, 0x200000,CRC(659f006e) SHA1(23362a922cb1100950181fac4858b953d8fc0794) ) /* identical to "pr1cg2.14b" */
	ROM_LOAD( "pr1cg3.13d",  0x200000*0x3, 0x200000,CRC(d30bffa3) SHA1(2f05227d91d257db9fa8cae114974de602d98729) ) /* identical to "pr1cg3.16b" */
	ROM_LOAD( "pr1cg4.14d",  0x200000*0x4, 0x200000,CRC(f4636cc9) SHA1(4e01a476e418e5790878572e83a8a11536ce30ae) ) /* identical to "pr1cg4.18b" */
	ROM_LOAD( "pr1cg5.16d",  0x200000*0x5, 0x200000,CRC(97d333de) SHA1(e8f8383f49aae834dd8b57231b25899703cef966) ) /* identical to "pr1cg5.19b" */
	ROM_LOAD( "pr1cg6.18a",  0x200000*0x6, 0x200000,CRC(3e081c03) SHA1(6ccb162952f6076359b2785b5d800b39a9a3c5ce) ) /* identical to "pr1cg6.18d" */
	ROM_LOAD( "pr1cg7.15a",  0x200000*0x7, 0x200000,CRC(ec9fc5c8) SHA1(16de614b26f06bbddae3ab56cebba45efd6fe81b) ) /* identical to "pr1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "pr1ccrl.3d",  0x000000, 0x200000,CRC(e01321fd) SHA1(5938c6eff8e1b3642728c3be733f567a97cb5aad) ) /* identical to "pr1ccrl.7b" */
	ROM_LOAD( "pr1ccrh.1d",  0x200000, 0x080000,CRC(1d68bc31) SHA1(d534d0daebe7018e83b57cc7919c294ab89bddc8) ) /* identical to "pr1ccrh.5b" */

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "pr1ptrl0.18k", 0x80000*0, 0x80000,CRC(fddb27a2) SHA1(6e837b45e3f9ed7ca3d1a457d0f0124de5618d1f) )
	ROM_LOAD( "pr1ptrl1.16k", 0x80000*1, 0x80000,CRC(6964dd06) SHA1(f38a550165504693d20892a7dcfaf01db19b04ef) )
	ROM_LOAD( "pr1ptrl2.15k", 0x80000*2, 0x80000,CRC(4d7ed1d4) SHA1(8f72864a06ff8962e640cb36d062bddf5d110308) )
	ROM_LOAD( "pr1ptrm0.18j", 0x80000*3, 0x80000,CRC(b6f204b7) SHA1(3b34f240b399b6406faaf338ae0ab536247e64a6) )
	ROM_LOAD( "pr1ptrm1.16j", 0x80000*4, 0x80000,CRC(949588b7) SHA1(fdaf50ff2496200b9c981efc18b035f3c0a96ace) )
	ROM_LOAD( "pr1ptrm2.15j", 0x80000*5, 0x80000,CRC(dc1cef0a) SHA1(8cbc02cf73fac3cc110b676d77602ae628385eae) )
	ROM_LOAD( "pr1ptru0.18f", 0x80000*6, 0x80000,CRC(5d66a7c4) SHA1(c9ed1c18724192d45c1f6b40096f15d02baf2401) )
	ROM_LOAD( "pr1ptru1.16f", 0x80000*7, 0x80000,CRC(e9a3f72b) SHA1(f967e1adf8eee4fffdf4288d36a93c5bb4f9a126) )
	ROM_LOAD( "pr1ptru2.15f", 0x80000*8, 0x80000,CRC(c346a842) SHA1(299bc0a30d0e74d8adfa3dc605aebf6439f5bc18) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "pr1wavea.2l", 0x000000, 0x400000, CRC(320f3913) SHA1(3887b7334ca7762794c14198dd24bab47fcd9505) )
	ROM_LOAD( "pr1waveb.1l", 0x800000, 0x400000, CRC(d91acb26) SHA1(c2161e2d70e08aed15cbc875ffee685190611daf) )
ROM_END


ROM_START( airco22b )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "acs1verb.1", 0x00003, 0x100000, CRC(062c4f61) SHA1(98e1c75dd0f493eb6ebb64b46543217c1d40116e) )
	ROM_LOAD32_BYTE( "acs1verb.2", 0x00002, 0x100000, CRC(8ae69711) SHA1(4c5323fa8f0419275e330fec66d1fb2b89bb3795) )
	ROM_LOAD32_BYTE( "acs1verb.3", 0x00001, 0x100000, CRC(71738e67) SHA1(eb8c66dedbeff911b6166ebbda466fb9656ef0fb) )
	ROM_LOAD32_BYTE( "acs1verb.4", 0x00000, 0x100000, CRC(3b193add) SHA1(5e3bca13905bfa3a2947f4f16ca01878b0a14a3a) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.20 */
	ROM_LOAD( "acs1data.8k", 0, 0x080000, CRC(33824bc9) SHA1(80ec63883770e5eec1f5f1ddc16a85ef8f22a48b) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "acs1scg0.12l", 0x200000*0, 0x200000,CRC(e5235404) SHA1(3133b71d1bde3a9815cd02e97382b8078b62b0bb) )
	ROM_LOAD( "acs1scg1.10l", 0x200000*1, 0x200000,CRC(828e91e7) SHA1(8383b029cd29fbad107fd49e866defb50c11c99a) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "acs1cg0.8d",  0x200000*0x0, 0x200000,CRC(1f31343e) SHA1(25ba730cec74e0ed0b404f5c4430b7c3368c9b52) )
	ROM_LOAD( "acs1cg1.10d", 0x200000*0x1, 0x200000,CRC(ccd5481d) SHA1(050e6fc7d4e0591f8ffc9552d140b6bd4533c06d) )
	ROM_LOAD( "acs1cg2.12d", 0x200000*0x2, 0x200000,CRC(14e5d0d2) SHA1(3147ad11098030e9cfd93fbc0a1b3aafa8b8aba6) )
	ROM_LOAD( "acs1cg3.13d", 0x200000*0x3, 0x200000,CRC(1a7bcc16) SHA1(bbc4ca5b208bea8394d1679e4e2d17d22331e2c8) )
	ROM_LOAD( "acs1cg4.14d", 0x200000*0x4, 0x200000,CRC(1920b7fb) SHA1(56318f2a96c55998bb9a8d791d56be3dfb39867e) )
	ROM_LOAD( "acs1cg5.16d", 0x200000*0x5, 0x200000,CRC(3dd109b7) SHA1(a7f914b9b80f1bca1afb6144698578a29ca74676) )
	ROM_LOAD( "acs1cg6.18d", 0x200000*0x6, 0x200000,CRC(ec71c8a3) SHA1(86892a91883d483ca0d422b78fa36042e02f3ad3) )
	ROM_LOAD( "acs1cg7.19d", 0x200000*0x7, 0x200000,CRC(82271757) SHA1(023c935e78b14da310e4c29da8785b82aa3241ac) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "acs1ccrl.3d",     0x000000, 0x200000,CRC(07088ba1) SHA1(a962c0821d5af28ed508cfdbd613675454e306e3) )
	ROM_LOAD( "acs1ccrh.1d",     0x200000, 0x080000,CRC(62936af6) SHA1(ca80b68415aa2cd2ce4e90404f10640d0ae38be9) )

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "acs1ptl0.18k", 0x80000*0x0, 0x80000,CRC(bd5896c7) SHA1(58ec7d0f1e0bfdbf4908e1d920bbd7f094993777) )
	ROM_LOAD( "acs1ptl1.16k", 0x80000*0x1, 0x80000,CRC(e583b975) SHA1(beb0cc2b44bc69af057c2bb744cd7e1b95de577a) )
	ROM_LOAD( "acs1ptl2.15k", 0x80000*0x2, 0x80000,CRC(802d737a) SHA1(3d99a369db70d13fb87c2ff26c82b4b39afe94d9) )
	ROM_LOAD( "acs1ptl3.14k", 0x80000*0x3, 0x80000,CRC(fe556ecb) SHA1(9d9dbbb4f1d3688fb763001834640d79d9987d47) )
	ROM_LOAD( "acs1ptm0.18j", 0x80000*0x4, 0x80000,CRC(949b6c58) SHA1(6ea016551b10f5d5764921dcc5a4b81d2b93d701) )
	ROM_LOAD( "acs1ptm1.16j", 0x80000*0x5, 0x80000,CRC(8b2b99d9) SHA1(89c3545c4035509307728a9577018c1100ce3a54) )
	ROM_LOAD( "acs1ptm2.15j", 0x80000*0x6, 0x80000,CRC(f1515080) SHA1(27a87217a140477a6840a610c95ae57abc0d01a6) )
	ROM_LOAD( "acs1ptm3.14j", 0x80000*0x7, 0x80000,CRC(e364f4aa) SHA1(3af6a864765871664cccad82c4795f677be68d51) )
	ROM_LOAD( "acs1ptu0.18f", 0x80000*0x8, 0x80000,CRC(746b3084) SHA1(73397d1f22300fb3a81a0a068da4d0a8cfdc0a36) )
	ROM_LOAD( "acs1ptu1.16f", 0x80000*0x9, 0x80000,CRC(b44f1d3b) SHA1(f3f1a85c082053653e4da7d7f01f1baef1a013c8) )
	ROM_LOAD( "acs1ptu2.15f", 0x80000*0xa, 0x80000,CRC(fdd2d778) SHA1(0269f971d778e908a1efb5a63b08fb3365d98c2a) )
	ROM_LOAD( "acs1ptu3.14f", 0x80000*0xb, 0x80000,CRC(38b425d4) SHA1(8ff6dd6775d42afdff4c9fb2232e4d72b38e515a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "acs1wav0.1", 0x400000, 0x400000, CRC(52fb9762) SHA1(125c163e62d701c2e17ba0b572ed27c944ca0412) )
	ROM_LOAD( "acs1wav1.2", 0x800000, 0x400000, CRC(b568dca2) SHA1(503deb277691d801acac1380ded2868a5d5ac501) )
ROM_END


ROM_START( cybrcycc )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "cb2ver-c.1", 0x00003, 0x100000, CRC(a8e07a14) SHA1(9bef7068c9bf792960df922ea79e4565d7680433) )
	ROM_LOAD32_BYTE( "cb2ver-c.2", 0x00002, 0x100000, CRC(054c504f) SHA1(9bde803ff09be0402f9b0388e55407362a2508e3) )
	ROM_LOAD32_BYTE( "cb2ver-c.3", 0x00001, 0x100000, CRC(47e6306c) SHA1(39d6fc2c3cb9b4c9d3569cedb79b916a90537115) )
	ROM_LOAD32_BYTE( "cb2ver-c.4", 0x00000, 0x100000, CRC(398426e4) SHA1(f20cd4892420e7b978baa51c9129b362422a3895) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "cb1datab.8k", 0, 0x080000, CRC(e2404221) SHA1(b88810dd45aee8a5475c30806cdfded25fa14e0e) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "cb1scg0.12f", 0x200000*0, 0x200000,CRC(7aaca90d) SHA1(9808819db5d86d555a03bb20a2fbedf060d04f0e) ) /* identical to "cb1scg0.12l" */

	ROM_REGION( 0x200000*7, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "cb1cg0.12b",  0x200000*0x0, 0x200000,CRC(762a47a0) SHA1(8a49c700dca7afec5d8d6a38fedcd3ad4b0e6713) ) /* identical to "cb1cg0.8d" */
	ROM_LOAD( "cb1cg1.10d",  0x200000*0x1, 0x200000,CRC(df92c3e6) SHA1(302d7ee7e073a45e7baa948543bd30251f903a6d) ) /* identical to "cb1cg1.13b" */
	ROM_LOAD( "cb1cg2.12d",  0x200000*0x2, 0x200000,CRC(07bc508e) SHA1(7675694d10b50e57bb10b350559bd321df75d1ea) ) /* identical to "cb1cg2.14b" */
	ROM_LOAD( "cb1cg3.13d",  0x200000*0x3, 0x200000,CRC(50c86dea) SHA1(7837a1d2bd3ade470f7fbc732513dd598badd219) ) /* identical to "cb1cg3.16b" */
	ROM_LOAD( "cb1cg4.14d",  0x200000*0x4, 0x200000,CRC(e93b8894) SHA1(4d28b557b7ed2667e6af9f970f3e99cda785b940) ) /* identical to "cb1cg4.18b" */
	ROM_LOAD( "cb1cg5.16d",  0x200000*0x5, 0x200000,CRC(9ee610a1) SHA1(ebc7892b6a66461ca6b6b912a264da1594340b2d) ) /* identical to "cb1cg5.19b" */
	ROM_LOAD( "cb1cg6.18a",  0x200000*0x6, 0x200000,CRC(ddc3b5cc) SHA1(34edffee9eb6fbf4a00fce0da34d9354b1a1155f) ) /* identical to "cb1cg6.18d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "cb1ccrl.3d",  0x000000, 0x200000,CRC(2f171c48) SHA1(52b76213e37379b4a5cea7de40cf5396dc2998d8) ) /* identical to "cb1ccrl.7b" */
	ROM_LOAD( "cb1ccrh.1d",  0x200000, 0x080000,CRC(86124b93) SHA1(f2cfd726313cbeff162d402a15de2360377630e7) ) /* identical to "cb1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "cb1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(f1393a03) SHA1(c9e808601eef5839e6bff630e5f83380e073c5c0) )
	ROM_LOAD( "cb1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(2ad51de7) SHA1(efd102b960ca10cda70da84661acf61e4bbb9f00) )
	ROM_LOAD( "cb1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(78f77c0d) SHA1(5183a8909c2ac0a3d80e707393bcbb4441d79a3c) )
	ROM_LOAD( "cb1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(804bfb4a) SHA1(74b3fc3931265398e23605d3da7ca84a002da632) )
	ROM_LOAD( "cb1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(f4eece49) SHA1(3f34d1ae5986f0d340563ab0fb637bfdacb8712c) )
	ROM_LOAD( "cb1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(5f3cbd7d) SHA1(d00d0a96b71d6a3b98907c4ba7c702e549dd0adb) )
	ROM_LOAD( "cb1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(02c7e4af) SHA1(6a541a28163b1026a824f6f8aed05d0eb0c8ae93) )
	ROM_LOAD( "cb1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(ace3123b) SHA1(2b590ed967572d77b3cc6b37e341a5bdc55c762f) )
	ROM_LOAD( "cb1ptru0.18f", 0x80000*0x8, 0x80000,CRC(58d35341) SHA1(a5fe00bdcf39521f0465743664ff0dd78be5d6e8) )
	ROM_LOAD( "cb1ptru1.16f", 0x80000*0x9, 0x80000,CRC(f4d005b0) SHA1(0862ed1dd0818bfb765d97f1f9d996c321b0ec83) )
	ROM_LOAD( "cb1ptru2.15f", 0x80000*0xa, 0x80000,CRC(68ffcd50) SHA1(5ca5f71b6b079fde14d76c869d211a815bffae68) )
	ROM_LOAD( "cb1ptru3.14f", 0x80000*0xb, 0x80000,CRC(d89c1c2b) SHA1(9c25df696b2d120ce33d7774381460297740007a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "cb1wavea.2l", 0x000000, 0x400000, CRC(b79a624d) SHA1(c0ee358a183ba6d0835731dbdd191b64718fde6e) )
	ROM_LOAD( "cb1waveb.1l", 0x800000, 0x200000, CRC(33bf08f6) SHA1(bf9d68b26a8158ea1abfe8428b7454cac25242c5) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "cybrcycc_defaults.nv", 0x0000, 0x2000, CRC(57fbd7d3) SHA1(c93e0d7875f5e66a661aed757fb4a314fe2025c2) )
ROM_END

ROM_START( cybrcyccj )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "cb1ver-c.1", 0x00003, 0x100000, CRC(91166c69) SHA1(08e4d0d8226234b01b7d4fbc8ba2ade1ae409fe4) )
	ROM_LOAD32_BYTE( "cb1ver-c.2", 0x00002, 0x100000, CRC(b2e25e15) SHA1(095df28601dbc98b8974cd99b9329312980eacaf) )
	ROM_LOAD32_BYTE( "cb1ver-c.3", 0x00001, 0x100000, CRC(97fa2f39) SHA1(865e016553f733430aac70809b21a3b2914bb638) )
	ROM_LOAD32_BYTE( "cb1ver-c.4", 0x00000, 0x100000, CRC(529bd227) SHA1(6d7979643d015ae388a4a93b9dccc7f43f93baff) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "cb1datab.8k", 0, 0x080000, CRC(e2404221) SHA1(b88810dd45aee8a5475c30806cdfded25fa14e0e) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "cb1scg0.12f", 0x200000*0, 0x200000,CRC(7aaca90d) SHA1(9808819db5d86d555a03bb20a2fbedf060d04f0e) ) /* identical to "cb1scg0.12l" */

	ROM_REGION( 0x200000*7, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "cb1cg0.12b",  0x200000*0x0, 0x200000,CRC(762a47a0) SHA1(8a49c700dca7afec5d8d6a38fedcd3ad4b0e6713) ) /* identical to "cb1cg0.8d" */
	ROM_LOAD( "cb1cg1.10d",  0x200000*0x1, 0x200000,CRC(df92c3e6) SHA1(302d7ee7e073a45e7baa948543bd30251f903a6d) ) /* identical to "cb1cg1.13b" */
	ROM_LOAD( "cb1cg2.12d",  0x200000*0x2, 0x200000,CRC(07bc508e) SHA1(7675694d10b50e57bb10b350559bd321df75d1ea) ) /* identical to "cb1cg2.14b" */
	ROM_LOAD( "cb1cg3.13d",  0x200000*0x3, 0x200000,CRC(50c86dea) SHA1(7837a1d2bd3ade470f7fbc732513dd598badd219) ) /* identical to "cb1cg3.16b" */
	ROM_LOAD( "cb1cg4.14d",  0x200000*0x4, 0x200000,CRC(e93b8894) SHA1(4d28b557b7ed2667e6af9f970f3e99cda785b940) ) /* identical to "cb1cg4.18b" */
	ROM_LOAD( "cb1cg5.16d",  0x200000*0x5, 0x200000,CRC(9ee610a1) SHA1(ebc7892b6a66461ca6b6b912a264da1594340b2d) ) /* identical to "cb1cg5.19b" */
	ROM_LOAD( "cb1cg6.18a",  0x200000*0x6, 0x200000,CRC(ddc3b5cc) SHA1(34edffee9eb6fbf4a00fce0da34d9354b1a1155f) ) /* identical to "cb1cg6.18d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "cb1ccrl.3d",  0x000000, 0x200000,CRC(2f171c48) SHA1(52b76213e37379b4a5cea7de40cf5396dc2998d8) ) /* identical to "cb1ccrl.7b" */
	ROM_LOAD( "cb1ccrh.1d",  0x200000, 0x080000,CRC(86124b93) SHA1(f2cfd726313cbeff162d402a15de2360377630e7) ) /* identical to "cb1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "cb1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(f1393a03) SHA1(c9e808601eef5839e6bff630e5f83380e073c5c0) )
	ROM_LOAD( "cb1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(2ad51de7) SHA1(efd102b960ca10cda70da84661acf61e4bbb9f00) )
	ROM_LOAD( "cb1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(78f77c0d) SHA1(5183a8909c2ac0a3d80e707393bcbb4441d79a3c) )
	ROM_LOAD( "cb1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(804bfb4a) SHA1(74b3fc3931265398e23605d3da7ca84a002da632) )
	ROM_LOAD( "cb1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(f4eece49) SHA1(3f34d1ae5986f0d340563ab0fb637bfdacb8712c) )
	ROM_LOAD( "cb1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(5f3cbd7d) SHA1(d00d0a96b71d6a3b98907c4ba7c702e549dd0adb) )
	ROM_LOAD( "cb1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(02c7e4af) SHA1(6a541a28163b1026a824f6f8aed05d0eb0c8ae93) )
	ROM_LOAD( "cb1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(ace3123b) SHA1(2b590ed967572d77b3cc6b37e341a5bdc55c762f) )
	ROM_LOAD( "cb1ptru0.18f", 0x80000*0x8, 0x80000,CRC(58d35341) SHA1(a5fe00bdcf39521f0465743664ff0dd78be5d6e8) )
	ROM_LOAD( "cb1ptru1.16f", 0x80000*0x9, 0x80000,CRC(f4d005b0) SHA1(0862ed1dd0818bfb765d97f1f9d996c321b0ec83) )
	ROM_LOAD( "cb1ptru2.15f", 0x80000*0xa, 0x80000,CRC(68ffcd50) SHA1(5ca5f71b6b079fde14d76c869d211a815bffae68) )
	ROM_LOAD( "cb1ptru3.14f", 0x80000*0xb, 0x80000,CRC(d89c1c2b) SHA1(9c25df696b2d120ce33d7774381460297740007a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "cb1wavea.2l", 0x000000, 0x400000, CRC(b79a624d) SHA1(c0ee358a183ba6d0835731dbdd191b64718fde6e) )
	ROM_LOAD( "cb1waveb.1l", 0x800000, 0x200000, CRC(33bf08f6) SHA1(bf9d68b26a8158ea1abfe8428b7454cac25242c5) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "cybrcycc_defaults.nv", 0x0000, 0x2000, CRC(57fbd7d3) SHA1(c93e0d7875f5e66a661aed757fb4a314fe2025c2) )
ROM_END


ROM_START( alpinerd )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ar2ver-d.1", 0x00003, 0x100000, CRC(fa3380b9) SHA1(2a46988745bd2672f8082399a68ae0d0ab3d28f2) )
	ROM_LOAD32_BYTE( "ar2ver-d.2", 0x00002, 0x100000, CRC(76141352) SHA1(0f7230dd9cd6f1b83d499034affc7bc2c4385ab5) )
	ROM_LOAD32_BYTE( "ar2ver-d.3", 0x00001, 0x100000, CRC(9beffe6a) SHA1(d8efd1e3829d32bb06537d7cecb59f8df9b6d663) )
	ROM_LOAD32_BYTE( "ar2ver-d.4", 0x00000, 0x100000, CRC(1f3f1134) SHA1(0afa78444d1463d214f1afd7ec500af76d567489) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */
	ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ar1cg0.12b",  0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */
	ROM_LOAD( "ar1cg1.10d",  0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */
	ROM_LOAD( "ar1cg2.12d",  0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */
	ROM_LOAD( "ar1cg3.13d",  0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */
	ROM_LOAD( "ar1cg4.14d",  0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */
	ROM_LOAD( "ar1cg5.16d",  0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */
	ROM_LOAD( "ar1cg6.18a",  0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */
	ROM_LOAD( "ar1cg7.15a",  0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ar1ccrl.3d",  0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */
	ROM_LOAD( "ar1ccrh.1d",  0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) )
	ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) )
	ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) )
	ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) )
	ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) )
	ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) )
	ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) )
	ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) )
	ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) )
	ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) )
	ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) )
	ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x2000, CRC(efbef3d8) SHA1(459035600655cd83780db6c59aba044981cdcdc4) )
ROM_END

ROM_START( alpinerc )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ar2ver-c.1", 0x00003, 0x100000, CRC(61323842) SHA1(e3c33248340bee252f230124fa9b7fa935a60565) )
	ROM_LOAD32_BYTE( "ar2ver-c.2", 0x00002, 0x100000, CRC(43795b2d) SHA1(e060f3259661279a36300431c5ca7347bde8b6ec) )
	ROM_LOAD32_BYTE( "ar2ver-c.3", 0x00001, 0x100000, CRC(acb3003b) SHA1(ea0cbf3a1607b06b108df051f38fec1f214f42d2) )
	ROM_LOAD32_BYTE( "ar2ver-c.4", 0x00000, 0x100000, CRC(800acc21) SHA1(41d26766da2db46954a2351bbc50aea94bc1d564) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */
	ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ar1cg0.12b",  0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */
	ROM_LOAD( "ar1cg1.10d",  0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */
	ROM_LOAD( "ar1cg2.12d",  0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */
	ROM_LOAD( "ar1cg3.13d",  0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */
	ROM_LOAD( "ar1cg4.14d",  0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */
	ROM_LOAD( "ar1cg5.16d",  0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */
	ROM_LOAD( "ar1cg6.18a",  0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */
	ROM_LOAD( "ar1cg7.15a",  0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ar1ccrl.3d",  0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */
	ROM_LOAD( "ar1ccrh.1d",  0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) )
	ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) )
	ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) )
	ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) )
	ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) )
	ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) )
	ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) )
	ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) )
	ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) )
	ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) )
	ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) )
	ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x2000, CRC(efbef3d8) SHA1(459035600655cd83780db6c59aba044981cdcdc4) )
ROM_END

ROM_START( alpinerjc )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_WORD_SWAP( "ar1ver-c.1", 0x00002, 0x200000, CRC(8a87dc27) SHA1(ea3675667dce4c184da61dbb204e39da7ae93e82) ) /* SYSTEM SUPER22 MPM(F16) PCB stickered AR1 VER.C */
	ROM_LOAD32_WORD_SWAP( "ar1ver-c.2", 0x00000, 0x200000, CRC(5f4f5615) SHA1(ff8f818a4017ee8546037a10522f2cf1de6dc7cd) ) /* intel E28F016SA flash ROMs at ROM1 & ROM2 */

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */
	ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ar1cg0.12b",  0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */
	ROM_LOAD( "ar1cg1.10d",  0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */
	ROM_LOAD( "ar1cg2.12d",  0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */
	ROM_LOAD( "ar1cg3.13d",  0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */
	ROM_LOAD( "ar1cg4.14d",  0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */
	ROM_LOAD( "ar1cg5.16d",  0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */
	ROM_LOAD( "ar1cg6.18a",  0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */
	ROM_LOAD( "ar1cg7.15a",  0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ar1ccrl.3d",  0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */
	ROM_LOAD( "ar1ccrh.1d",  0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) )
	ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) )
	ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) )
	ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) )
	ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) )
	ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) )
	ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) )
	ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) )
	ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) )
	ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) )
	ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) )
	ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x2000, CRC(efbef3d8) SHA1(459035600655cd83780db6c59aba044981cdcdc4) )
ROM_END


ROM_START( alpinr2b )
	ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ars2ver-b.2",  0x000003, 0x200000, CRC(ed977f83) SHA1(26c57cdfc15f799a999ee22f141e1c0cabfc91dc) ) // 2nd half empty
	ROM_LOAD32_BYTE( "ars2ver-b.3",  0x000001, 0x200000, CRC(8e7a9983) SHA1(34c82e5f080efe04d6b77a77a8391cb48b69c1af) ) // "
	ROM_LOAD32_BYTE( "ars2ver-b.4",  0x000002, 0x200000, CRC(610e49c2) SHA1(433c6d2216551bac31584306f748af1c912c3b07) ) // "
	ROM_LOAD32_BYTE( "ars2ver-b.5",  0x000000, 0x200000, CRC(7f3517b0) SHA1(3e6ba1a51bf235f40f933aae1f00638b88bba522) ) // "

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ars2data.8k",  0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) )

	ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ars1cg0.8d",   0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) )
	ROM_LOAD( "ars1cg1.10d",  0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) )
	ROM_LOAD( "ars1cg2.12d",  0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) )
	ROM_LOAD( "ars1cg3.13d",  0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) )
	ROM_LOAD( "ars1cg4.14d",  0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) )
	ROM_LOAD( "ars1cg5.16d",  0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ars1ccrl.3d",  0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) )
	ROM_LOAD( "ars1ccrh.1d",  0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) )

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) )
	ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) )
	ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) )
	ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) )
	ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) )
	ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) )
	ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) )
	ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) )
	ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) )
	ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) )
	ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) )
	ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) )
	ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x2000, CRC(1f21154e) SHA1(a141d7d235955d042c60d013a89619d35c02308f) )
ROM_END

ROM_START( alpinr2a )
	ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ars2ver-a.2",  0x000003, 0x200000, CRC(b07b15a4) SHA1(ea3b2d7b4ef4ccf3aafeef7e7eac92e8d446f4e7) ) // 2nd half empty
	ROM_LOAD32_BYTE( "ars2ver-a.3",  0x000002, 0x200000, CRC(90a92e40) SHA1(bf8083256e56e7e33e61b4cdaf9fd03dabfb36ba) ) // "
	ROM_LOAD32_BYTE( "ars2ver-a.4",  0x000001, 0x200000, CRC(9e9d771d) SHA1(6fb983e3f4f8233544667b1bbf87864e4fb8698c) ) // "
	ROM_LOAD32_BYTE( "ars2ver-a.5",  0x000000, 0x200000, CRC(e93c7771) SHA1(305f35488a55be1b845702df972bba8334c0726c) ) // "

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ars2data.8k",  0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) )

	ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ars1cg0.8d",   0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) )
	ROM_LOAD( "ars1cg1.10d",  0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) )
	ROM_LOAD( "ars1cg2.12d",  0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) )
	ROM_LOAD( "ars1cg3.13d",  0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) )
	ROM_LOAD( "ars1cg4.14d",  0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) )
	ROM_LOAD( "ars1cg5.16d",  0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ars1ccrl.3d",  0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) )
	ROM_LOAD( "ars1ccrh.1d",  0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) )

	ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) )
	ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) )
	ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) )
	ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) )
	ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) )
	ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) )
	ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) )
	ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) )
	ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) )
	ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) )
	ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) )
	ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) )
	ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x2000, CRC(1f21154e) SHA1(a141d7d235955d042c60d013a89619d35c02308f) )
ROM_END


ROM_START( alpines )
	ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "af2ver-a_ll.ic2", 0x000003, 0x200000, CRC(e776159d) SHA1(5110364afb7ec606074d58a1d216d7d687b9df62) )
	ROM_LOAD32_BYTE( "af2ver-a_lm.ic3", 0x000002, 0x200000, CRC(c5333d38) SHA1(9486cead964f95f8e56dac2f88486f3b98561aa6) )
	ROM_LOAD32_BYTE( "af2ver-a_um.ic4", 0x000001, 0x200000, CRC(c9095af3) SHA1(4981c8c84057373ef678e51fe72ebac40d1a0cf4) )
	ROM_LOAD32_BYTE( "af2ver-a_uu.ic5", 0x000000, 0x200000, CRC(54ee33a1) SHA1(0eaa8707ab13a0a66551f61a08986c98f5c9e446) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "af1data.8k",   0x000000, 0x080000, CRC(ef13ebe8) SHA1(5d3f697994d4b5b19ee7fea1e2aef8e39449b68e) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "af1scg0b.12f", 0x000000, 0x200000, CRC(46a6222a) SHA1(5322ef60690625b9b8dbe1cfe0c49dcd9c8b1a4c) )

	ROM_REGION( 0x200000*5, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "af1cg0.8d",    0x200000*0, 0x200000, CRC(7423f3ff) SHA1(6a2fd44823ef46111deb57d328b1b75cc355d413) )
	ROM_LOAD( "af1cg1.10d",   0x200000*1, 0x200000, CRC(ea76689a) SHA1(73dd3af737a3e9903abe5ed9c9ae7eded51d8350) )
	ROM_LOAD( "af1cg2.12d",   0x200000*2, 0x200000, CRC(2a38943a) SHA1(15d737996f49bf6374ef6191bbfbe0298d398378) )
	ROM_LOAD( "af1cg3.13d",   0x200000*3, 0x200000, CRC(7f5a3e0f) SHA1(241f9995323b28df23d20a75e1f43ce6e05434cd) )
	ROM_LOAD( "af1cg4.14d",   0x200000*4, 0x200000, CRC(a5ee13e2) SHA1(48fd3c912690f21cbbc2a39bed0a82be41a0d011) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "af1ccrl.3d",   0x000000, 0x200000, CRC(6c054698) SHA1(8537607646b183883c5aa4060fb0af640da4af87) )
	ROM_LOAD( "af1ccrh.1d",   0x200000, 0x080000, CRC(95a02a27) SHA1(32ee87b76ae9fcec6d825e3cf4d5cbb97db39544) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "af1ptrl0.18k", 0x80000*0, 0x80000, CRC(31ce46d3) SHA1(568fb9ee9ac14e613a4fd7668cb38315c10be62b) )
	ROM_LOAD( "af1ptrl1.16k", 0x80000*1, 0x80000, CRC(e869bf00) SHA1(b3c3026891ae3958d1774c905e97c3b57a414ea7) )
	ROM_LOAD( "af1ptrm0.18j", 0x80000*2, 0x80000, CRC(ef7f4d8a) SHA1(02f77c68004b7dccc99b61126e7d07960eb15028) )
	ROM_LOAD( "af1ptrm1.16j", 0x80000*3, 0x80000, CRC(7dd01d52) SHA1(adc1087435d31ed6163ad046466955f01517450f) )
	ROM_LOAD( "af1ptru0.18f", 0x80000*4, 0x80000, CRC(177f1591) SHA1(3969e780e5603eca0a65f65c1ad14d1cef918b39) )
	ROM_LOAD( "af1ptru1.16f", 0x80000*5, 0x80000, CRC(7521d18e) SHA1(dc03ef369db16f59c138ff4e22260d1c04782d1f) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "af1wavea.2l",  0x000000, 0x400000, CRC(28cca494) SHA1(4ff87ab85fd17bf8dbee5b03d99cc5c31dd6349a) )
ROM_END

ROM_START( alpinesa ) // only 4 different DWORDs at 0x700, it's either a serial number, or a log from when Namco serviced the cabinet
	ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "af2ver-a_ll.ic2", 0x000003, 0x200000, CRC(d8025e98) SHA1(e1c08557e70d632bf1e99356d6c6f76b5f407b8f) )
	ROM_LOAD32_BYTE( "af2ver-a_lm.ic3", 0x000002, 0x200000, CRC(5f805d51) SHA1(b7fa9028deeaf1c549e9c2d6099925a0d0ad1598) )
	ROM_LOAD32_BYTE( "af2ver-a_um.ic4", 0x000001, 0x200000, CRC(e7e057e3) SHA1(436e4645ba0e8734c0e25c7c22489bf97066944d) )
	ROM_LOAD32_BYTE( "af2ver-a_uu.ic5", 0x000000, 0x200000, CRC(3eee10a2) SHA1(6e52c5132581e7fe69a257195af5bc9f3a3efe25) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "af1data.8k",   0x000000, 0x080000, CRC(ef13ebe8) SHA1(5d3f697994d4b5b19ee7fea1e2aef8e39449b68e) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "af1scg0b.12f", 0x000000, 0x200000, CRC(46a6222a) SHA1(5322ef60690625b9b8dbe1cfe0c49dcd9c8b1a4c) )

	ROM_REGION( 0x200000*5, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "af1cg0.8d",    0x200000*0, 0x200000, CRC(7423f3ff) SHA1(6a2fd44823ef46111deb57d328b1b75cc355d413) )
	ROM_LOAD( "af1cg1.10d",   0x200000*1, 0x200000, CRC(ea76689a) SHA1(73dd3af737a3e9903abe5ed9c9ae7eded51d8350) )
	ROM_LOAD( "af1cg2.12d",   0x200000*2, 0x200000, CRC(2a38943a) SHA1(15d737996f49bf6374ef6191bbfbe0298d398378) )
	ROM_LOAD( "af1cg3.13d",   0x200000*3, 0x200000, CRC(7f5a3e0f) SHA1(241f9995323b28df23d20a75e1f43ce6e05434cd) )
	ROM_LOAD( "af1cg4.14d",   0x200000*4, 0x200000, CRC(a5ee13e2) SHA1(48fd3c912690f21cbbc2a39bed0a82be41a0d011) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "af1ccrl.3d",   0x000000, 0x200000, CRC(6c054698) SHA1(8537607646b183883c5aa4060fb0af640da4af87) )
	ROM_LOAD( "af1ccrh.1d",   0x200000, 0x080000, CRC(95a02a27) SHA1(32ee87b76ae9fcec6d825e3cf4d5cbb97db39544) )

	ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "af1ptrl0.18k", 0x80000*0, 0x80000, CRC(31ce46d3) SHA1(568fb9ee9ac14e613a4fd7668cb38315c10be62b) )
	ROM_LOAD( "af1ptrl1.16k", 0x80000*1, 0x80000, CRC(e869bf00) SHA1(b3c3026891ae3958d1774c905e97c3b57a414ea7) )
	ROM_LOAD( "af1ptrm0.18j", 0x80000*2, 0x80000, CRC(ef7f4d8a) SHA1(02f77c68004b7dccc99b61126e7d07960eb15028) )
	ROM_LOAD( "af1ptrm1.16j", 0x80000*3, 0x80000, CRC(7dd01d52) SHA1(adc1087435d31ed6163ad046466955f01517450f) )
	ROM_LOAD( "af1ptru0.18f", 0x80000*4, 0x80000, CRC(177f1591) SHA1(3969e780e5603eca0a65f65c1ad14d1cef918b39) )
	ROM_LOAD( "af1ptru1.16f", 0x80000*5, 0x80000, CRC(7521d18e) SHA1(dc03ef369db16f59c138ff4e22260d1c04782d1f) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "af1wavea.2l",  0x000000, 0x400000, CRC(28cca494) SHA1(4ff87ab85fd17bf8dbee5b03d99cc5c31dd6349a) )
ROM_END


ROM_START( timecris )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "ts2ver-b.1", 0x00003, 0x100000, CRC(29b377f7) SHA1(21864ba964602115c1268fd5edd8006a13a86cfc) )
	ROM_LOAD32_BYTE( "ts2ver-b.2", 0x00002, 0x100000, CRC(79512e25) SHA1(137a215ec192e76e93511456ad504481a566c9c9) )
	ROM_LOAD32_BYTE( "ts2ver-b.3", 0x00001, 0x100000, CRC(9f4ced33) SHA1(32768b5ff263a9e3d11b7b36f6b2d7e951e07419) )
	ROM_LOAD32_BYTE( "ts2ver-b.4", 0x00000, 0x100000, CRC(3e0cfb38) SHA1(3c56342bd73b1617ea579a0d53e19d59bb04fd99) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) )
	ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) )
	ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) )
	ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) )
	ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) )
	ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ts1cg0.8d",   0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) )
	ROM_LOAD( "ts1cg1.10d",  0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) )
	ROM_LOAD( "ts1cg2.12d",  0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) )
	ROM_LOAD( "ts1cg3.13d",  0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) )
	ROM_LOAD( "ts1cg4.14d",  0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) )
	ROM_LOAD( "ts1cg5.16d",  0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) )
	ROM_LOAD( "ts1cg6.18d",  0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ts1ccrl.3d",  0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) )
	ROM_LOAD( "ts1ccrh.1d",  0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) )

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) )
	ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) )
	ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) )
	ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) )
	ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) )
	ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) )
	ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) )
	ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) )
	ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD16_WORD_SWAP( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) )
	ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) )
ROM_END

ROM_START( timecrisa )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_WORD_SWAP( "ts2ver-a.1", 0x00002, 0x200000, CRC(d57eb74b) SHA1(536dd9305d0ac44110c575776333310cc57b5242) )
	ROM_LOAD32_WORD_SWAP( "ts2ver-a.2", 0x00000, 0x200000, CRC(671588af) SHA1(63f992c6795521fd263a0ebf230f8dc88cbfc443) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */
	ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) )
	ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) )
	ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) )
	ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) )
	ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) )
	ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "ts1cg0.8d",   0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) )
	ROM_LOAD( "ts1cg1.10d",  0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) )
	ROM_LOAD( "ts1cg2.12d",  0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) )
	ROM_LOAD( "ts1cg3.13d",  0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) )
	ROM_LOAD( "ts1cg4.14d",  0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) )
	ROM_LOAD( "ts1cg5.16d",  0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) )
	ROM_LOAD( "ts1cg6.18d",  0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "ts1ccrl.3d",  0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) )
	ROM_LOAD( "ts1ccrh.1d",  0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) )

	ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) )
	ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) )
	ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) )
	ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) )
	ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) )
	ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) )
	ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) )
	ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) )
	ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD16_WORD_SWAP( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) )
	ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) )
ROM_END


ROM_START( tokyowar )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "tw2ver-a.1",   0x000003, 0x100000, CRC(2b17ca92) SHA1(7bcb1658059c59fb1a0131a41ede7157855130a8) )
	ROM_LOAD32_BYTE( "tw2ver-a.2",   0x000002, 0x100000, CRC(12da84e3) SHA1(a9406d0b77f60ba930c30e60bf4b3656c8905585) )
	ROM_LOAD32_BYTE( "tw2ver-a.3",   0x000001, 0x100000, CRC(7d42c516) SHA1(28c1596dd55c15207bbb41a8b9a5abc97abc2bc8) )
	ROM_LOAD32_BYTE( "tw2ver-a.4",   0x000000, 0x100000, CRC(b904ed16) SHA1(773e11536e1b3fe4971608a63a8e6eca702f8667) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "tw1data.8k",   0x000000, 0x080000, CRC(bd046e4b) SHA1(162bc4ab69959ccab49fd69de291d34d472fb1c8) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "tw1scg0.12f",  0x000000, 0x200000, CRC(e3ec4daa) SHA1(f3a71ae9820d62075b814ffa2fecf3343ae09ffe) )
	ROM_LOAD( "tw1scg1.10f",  0x200000, 0x200000, CRC(b18a06e9) SHA1(ecf6a1e11603b8ea5119a036a57595dea021d778) )
	ROM_LOAD( "tw1scg2.8f",   0x400000, 0x200000, CRC(36f8c3d8) SHA1(d5c965d5cdd258c77b9db3137ce33404a5a3641c) )
	ROM_LOAD( "tw1scg3.7f",   0x600000, 0x200000, CRC(8e14d013) SHA1(ca63105a5c07bb9653499eef7a757db52612b59b) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "tw1cg0.8d",    0x000000, 0x200000, CRC(98b9b070) SHA1(cb920a34700dab330c967cc634717134c04b7e1d) )
	ROM_LOAD( "tw1cg1.10d",   0x200000, 0x200000, CRC(f96a723a) SHA1(5ba14963a4c51c875ac8d3b42049bc334de90038) )
	ROM_LOAD( "tw1cg2.12d",   0x400000, 0x200000, CRC(573e9ded) SHA1(815bda1ac000532c915c2d65ffdb04fee6fa8201) )
	ROM_LOAD( "tw1cg3.13d",   0x600000, 0x200000, CRC(302d5c74) SHA1(5a823f6842cf0f79eb93da47d5bf8c5f51e420db) )
	ROM_LOAD( "tw1cg4.14d",   0x800000, 0x200000, CRC(ab8aa1df) SHA1(355192d999f493e0761fbc822fa9b30c33d8e1c4) )
	ROM_LOAD( "tw1cg5.16d",   0xa00000, 0x200000, CRC(5063f3d0) SHA1(ad8dd2f4184373a3a3ca748b411a5eec1835dc97) )
	ROM_LOAD( "tw1cg6.18d",   0xc00000, 0x200000, CRC(d764027c) SHA1(5cbf93392683885c220628936ba50c09cb40fcfb) )
	ROM_LOAD( "tw1cg7.19d",   0xe00000, 0x200000, CRC(12da0a43) SHA1(99287348a5219146bcd3e61fde3f2bc26b0c5a25) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "tw1ccrl.3d",   0x000000, 0x200000, CRC(d08f5794) SHA1(336a97a2b060505e259e3bcedb9eb8aa4ea8815e) )
	ROM_LOAD( "tw1ccrh.1d",   0x200000, 0x080000, CRC(ad17e693) SHA1(4f06dc82c03159894fb8e10383862920f94563b1) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "tw1ptrl0.18k", 0x000000, 0x080000, CRC(44ac5e86) SHA1(5e42db58f2e352c0fe5e49588a9283817dd15ab1) )
	ROM_LOAD( "tw1ptrl1.16k", 0x080000, 0x080000, CRC(3c769860) SHA1(19b32c3d262f2a9d07354fbd6ac6be97b05f176e) )
	ROM_LOAD( "tw1ptrl2.15k", 0x100000, 0x080000, CRC(6e94103c) SHA1(ee90b77939a9f5780ce271882133cdf977eb643e) )
	ROM_LOAD( "tw1ptrl3.14k", 0x180000, 0x080000, CRC(e3ce5eb2) SHA1(4e15a6f630be15eb017cd51c5e7901db3138a061) )
	ROM_LOAD( "tw1ptrm0.18j", 0x200000, 0x080000, CRC(e170cea2) SHA1(ca259508d76fdab97a9d0502f871f0e560e6c308) )
	ROM_LOAD( "tw1ptrm1.16j", 0x280000, 0x080000, CRC(36a32237) SHA1(f46851dc5c094810ddc42d56310a9f85908bf715) )
	ROM_LOAD( "tw1ptrm2.15j", 0x300000, 0x080000, CRC(c426c278) SHA1(64232ac3c1649e0d0adb4b03e58b8b5ea4013f83) )
	ROM_LOAD( "tw1ptrm3.14j", 0x380000, 0x080000, CRC(d9b9a651) SHA1(0c49a051526081149d894d629f19cb0f2b66a698) )
	ROM_LOAD( "tw1ptru0.18f", 0x400000, 0x080000, CRC(62a9e9fb) SHA1(24739adba029b0acf2d7078962c9d01098a29a6c) )
	ROM_LOAD( "tw1ptru1.16f", 0x480000, 0x080000, CRC(2fd36177) SHA1(368b915261d914be01ae9daeb52571bead52d14d) )
	ROM_LOAD( "tw1ptru2.15f", 0x500000, 0x080000, CRC(ceacb1c9) SHA1(b86cf576e16bbe26ad0d6d6df8bf28d0071c25e2) )
	ROM_LOAD( "tw1ptru3.14f", 0x580000, 0x080000, CRC(939044c2) SHA1(f4c1c0a1c2f07ca7f784d59ef4162a2a6a8bbc43) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "tw1wavea.2l",  0x000000, 0x400000, CRC(ebce6366) SHA1(44ebe90ff3c7af5bebbf1baba3b7a2b1863daebb) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "tokyowar_defaults.nv", 0x0000, 0x2000, CRC(e8bd7d09) SHA1(7e59017b9d5eb78984b4f177b50a4727ad72a623) )
ROM_END

ROM_START( tokyowarj )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "tw1ver-a.1",   0x000003, 0x100000, CRC(29b38f05) SHA1(d55a34dce5f61d72e3edc331d3a346397069a5fc) )
	ROM_LOAD32_BYTE( "tw1ver-a.2",   0x000002, 0x100000, CRC(5f8e2e9e) SHA1(14513480fed483e5381ac5bf4467a1c17b0d9e75) )
	ROM_LOAD32_BYTE( "tw1ver-a.3",   0x000001, 0x100000, CRC(17146e7f) SHA1(0fd270152eef1966e0960531554cbe115668205f) )
	ROM_LOAD32_BYTE( "tw1ver-a.4",   0x000000, 0x100000, CRC(12698e2a) SHA1(51761ea96cb458f56d832cd233afbc374ded7f20) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "tw1data.8k",   0x000000, 0x080000, CRC(bd046e4b) SHA1(162bc4ab69959ccab49fd69de291d34d472fb1c8) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "tw1scg0.12f",  0x000000, 0x200000, CRC(e3ec4daa) SHA1(f3a71ae9820d62075b814ffa2fecf3343ae09ffe) )
	ROM_LOAD( "tw1scg1.10f",  0x200000, 0x200000, CRC(b18a06e9) SHA1(ecf6a1e11603b8ea5119a036a57595dea021d778) )
	ROM_LOAD( "tw1scg2.8f",   0x400000, 0x200000, CRC(36f8c3d8) SHA1(d5c965d5cdd258c77b9db3137ce33404a5a3641c) )
	ROM_LOAD( "tw1scg3.7f",   0x600000, 0x200000, CRC(8e14d013) SHA1(ca63105a5c07bb9653499eef7a757db52612b59b) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "tw1cg0.8d",    0x000000, 0x200000, CRC(98b9b070) SHA1(cb920a34700dab330c967cc634717134c04b7e1d) )
	ROM_LOAD( "tw1cg1.10d",   0x200000, 0x200000, CRC(f96a723a) SHA1(5ba14963a4c51c875ac8d3b42049bc334de90038) )
	ROM_LOAD( "tw1cg2.12d",   0x400000, 0x200000, CRC(573e9ded) SHA1(815bda1ac000532c915c2d65ffdb04fee6fa8201) )
	ROM_LOAD( "tw1cg3.13d",   0x600000, 0x200000, CRC(302d5c74) SHA1(5a823f6842cf0f79eb93da47d5bf8c5f51e420db) )
	ROM_LOAD( "tw1cg4.14d",   0x800000, 0x200000, CRC(ab8aa1df) SHA1(355192d999f493e0761fbc822fa9b30c33d8e1c4) )
	ROM_LOAD( "tw1cg5.16d",   0xa00000, 0x200000, CRC(5063f3d0) SHA1(ad8dd2f4184373a3a3ca748b411a5eec1835dc97) )
	ROM_LOAD( "tw1cg6.18d",   0xc00000, 0x200000, CRC(d764027c) SHA1(5cbf93392683885c220628936ba50c09cb40fcfb) )
	ROM_LOAD( "tw1cg7.19d",   0xe00000, 0x200000, CRC(12da0a43) SHA1(99287348a5219146bcd3e61fde3f2bc26b0c5a25) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "tw1ccrl.3d",   0x000000, 0x200000, CRC(d08f5794) SHA1(336a97a2b060505e259e3bcedb9eb8aa4ea8815e) )
	ROM_LOAD( "tw1ccrh.1d",   0x200000, 0x080000, CRC(ad17e693) SHA1(4f06dc82c03159894fb8e10383862920f94563b1) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "tw1ptrl0.18k", 0x000000, 0x080000, CRC(44ac5e86) SHA1(5e42db58f2e352c0fe5e49588a9283817dd15ab1) )
	ROM_LOAD( "tw1ptrl1.16k", 0x080000, 0x080000, CRC(3c769860) SHA1(19b32c3d262f2a9d07354fbd6ac6be97b05f176e) )
	ROM_LOAD( "tw1ptrl2.15k", 0x100000, 0x080000, CRC(6e94103c) SHA1(ee90b77939a9f5780ce271882133cdf977eb643e) )
	ROM_LOAD( "tw1ptrl3.14k", 0x180000, 0x080000, CRC(e3ce5eb2) SHA1(4e15a6f630be15eb017cd51c5e7901db3138a061) )
	ROM_LOAD( "tw1ptrm0.18j", 0x200000, 0x080000, CRC(e170cea2) SHA1(ca259508d76fdab97a9d0502f871f0e560e6c308) )
	ROM_LOAD( "tw1ptrm1.16j", 0x280000, 0x080000, CRC(36a32237) SHA1(f46851dc5c094810ddc42d56310a9f85908bf715) )
	ROM_LOAD( "tw1ptrm2.15j", 0x300000, 0x080000, CRC(c426c278) SHA1(64232ac3c1649e0d0adb4b03e58b8b5ea4013f83) )
	ROM_LOAD( "tw1ptrm3.14j", 0x380000, 0x080000, CRC(d9b9a651) SHA1(0c49a051526081149d894d629f19cb0f2b66a698) )
	ROM_LOAD( "tw1ptru0.18f", 0x400000, 0x080000, CRC(62a9e9fb) SHA1(24739adba029b0acf2d7078962c9d01098a29a6c) )
	ROM_LOAD( "tw1ptru1.16f", 0x480000, 0x080000, CRC(2fd36177) SHA1(368b915261d914be01ae9daeb52571bead52d14d) )
	ROM_LOAD( "tw1ptru2.15f", 0x500000, 0x080000, CRC(ceacb1c9) SHA1(b86cf576e16bbe26ad0d6d6df8bf28d0071c25e2) )
	ROM_LOAD( "tw1ptru3.14f", 0x580000, 0x080000, CRC(939044c2) SHA1(f4c1c0a1c2f07ca7f784d59ef4162a2a6a8bbc43) )

	ROM_REGION( 0x1000000, "c352", 0 ) // Samples
	ROM_LOAD( "tw1wavea.2l",  0x000000, 0x400000, CRC(ebce6366) SHA1(44ebe90ff3c7af5bebbf1baba3b7a2b1863daebb) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "tokyowar_defaults.nv", 0x0000, 0x2000, CRC(e8bd7d09) SHA1(7e59017b9d5eb78984b4f177b50a4727ad72a623) )
ROM_END


ROM_START( dirtdash )
	ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 ) /* main program */
	ROM_LOAD32_BYTE( "dt2verb.rom1",    0x000003, 0x100000, CRC(d133c6d7) SHA1(6fbdb823771826ba8c62d8d85223eeda38c081e7) )
	ROM_LOAD32_BYTE( "dt2verb.rom2",    0x000002, 0x100000, CRC(ba4d7626) SHA1(c48b724a454b97c47122548c77793599e9d8f92c) )
	ROM_LOAD32_BYTE( "dt2verb.rom3",    0x000001, 0x100000, NO_DUMP ) // has failed internally, reads always 0x00 filled
	ROM_LOAD32_BYTE( "dt2verb.rom4",    0x000000, 0x100000, CRC(9a80fc82) SHA1(81a14749a39d213db58527f7a98d48dbfca1c153) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "dt1dataa.8k",  0x000000, 0x080000, CRC(9bcdea21) SHA1(26ae025cf746d3a703a82495eb2bb515b828a650) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "dt1scg0.12f",  0x000000, 0x200000, CRC(a09b5760) SHA1(3dd54ebebf9da1de76874a1adf491ed15849e1b1) )
	ROM_LOAD( "dt1scg1.10f",  0x200000, 0x200000, CRC(f9ac8111) SHA1(814074ae8cc81c6c1201d764a84dd95fe914f19c) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "dt1cg0.8d",    0x000000, 0x200000, CRC(10ab95e0) SHA1(ffde1f00ac3e82a36fbcfa060c6b97c92dfcfc8b) )
	ROM_LOAD( "dt1cg1.10d",   0x200000, 0x200000, CRC(d9f1ba53) SHA1(5a1095b726c55001cc1d4c695adc38097e6a0201) )
	ROM_LOAD( "dt1cg2.12d",   0x400000, 0x200000, CRC(bd8b1e0b) SHA1(fcd94e33a0cbd17c9308cb8952e3c618ab56f9fc) )
	ROM_LOAD( "dt1cg3.13d",   0x600000, 0x200000, CRC(ba960663) SHA1(e98149bc4652ea7933ac47d760a6f7e6489f15e2) )
	ROM_LOAD( "dt1cg4.14d",   0x800000, 0x200000, CRC(424b9652) SHA1(fa8865110db03559740c4e633e123d1a009782c4) )
	ROM_LOAD( "dt1cg5.16d",   0xa00000, 0x200000, CRC(29516626) SHA1(1f12c5dc3975b88dc60d87d0409bf311837e9fa4) )
	ROM_LOAD( "dt1cg6.18d",   0xc00000, 0x200000, CRC(e6fa7180) SHA1(85316cde282cff1f913cf9f155cfa36adcc1108e) )
	ROM_LOAD( "dt1cg7.19d",   0xe00000, 0x200000, CRC(2ca19153) SHA1(c82403c8b40bf85daedf610b1bc7bfea9dfc6206) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "dt1ccrl.3d",   0x000000, 0x200000, CRC(e536b313) SHA1(7357da993d2bb3fcc8c1c2feb53689ad368cd80a) )
	ROM_LOAD( "dt1ccrh.1d",   0x200000, 0x080000, CRC(af257064) SHA1(0da561d9f8824618c00209ccef6146e9f3ad72bb) )

	ROM_REGION( 0x480000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "dt1ptrl0.18k", 0x000000, 0x080000, CRC(4e0cac3a) SHA1(c2778e9e93be2de729c6f118caf62ac9f48efbb0) )
	ROM_LOAD( "dt1ptrl1.16k", 0x080000, 0x080000, CRC(59ba9dba) SHA1(a2e9488cf0ff255284c06a1ef653ae86c0d98adc) )
	ROM_LOAD( "dt1ptrl2.15k", 0x100000, 0x080000, CRC(cfe80c67) SHA1(ba3bc48aa39712e63c915070a76974fbd560dee6) )
	ROM_LOAD( "dt1ptrm0.18j", 0x180000, 0x080000, CRC(41f34337) SHA1(7e624e7b6fdefe156168b1c9cc5e919db3b2fbaa) )
	ROM_LOAD( "dt1ptrm1.16j", 0x200000, 0x080000, CRC(f620fd41) SHA1(18cf6e11eb68da1b7f7fcc32562dc952c247de65) )
	ROM_LOAD( "dt1ptrm2.15j", 0x280000, 0x080000, CRC(71e6714d) SHA1(6aad6db3be5020213d7add61c7d927ae9c4fea4e) )
	ROM_LOAD( "dt1ptru0.18f", 0x300000, 0x080000, CRC(4909bd7d) SHA1(0e4ef3987c43ef0438331b82b50dcc97363a45d0) )
	ROM_LOAD( "dt1ptru1.16f", 0x380000, 0x080000, CRC(4a5097df) SHA1(a9c814b0ed4bd92accd0e57be8e3d887114b06a5) )
	ROM_LOAD( "dt1ptru2.15f", 0x400000, 0x080000, CRC(1171eaf5) SHA1(168365ea619386f218585c49025cdd7fd1224082) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "dt1wavea.2l",  0x000000, 0x400000, CRC(cbd52e40) SHA1(dc995dd919548c96a90efb0375e5b5f1055e05cb) )
	ROM_LOAD( "dt1waveb.1l",  0x800000, 0x400000, CRC(6b736f94) SHA1(ac3715480aa9a9c2dec099607f89859bb3b73a6a) )
ROM_END

ROM_START( dirtdasha )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_WORD_SWAP( "dt2vera.1",    0x000002, 0x200000, CRC(402a3d73) SHA1(009b57ed0ea228ccedb139d945b9eaf2a36e2502) )
	ROM_LOAD32_WORD_SWAP( "dt2vera.2",    0x000000, 0x200000, CRC(66ed140d) SHA1(a472fdc7b6aaeb4b3643ecdafd32fa665e7c7aa2) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "dt1dataa.8k",  0x000000, 0x080000, CRC(9bcdea21) SHA1(26ae025cf746d3a703a82495eb2bb515b828a650) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "dt1scg0.12f",  0x000000, 0x200000, CRC(a09b5760) SHA1(3dd54ebebf9da1de76874a1adf491ed15849e1b1) )
	ROM_LOAD( "dt1scg1.10f",  0x200000, 0x200000, CRC(f9ac8111) SHA1(814074ae8cc81c6c1201d764a84dd95fe914f19c) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "dt1cg0.8d",    0x000000, 0x200000, CRC(10ab95e0) SHA1(ffde1f00ac3e82a36fbcfa060c6b97c92dfcfc8b) )
	ROM_LOAD( "dt1cg1.10d",   0x200000, 0x200000, CRC(d9f1ba53) SHA1(5a1095b726c55001cc1d4c695adc38097e6a0201) )
	ROM_LOAD( "dt1cg2.12d",   0x400000, 0x200000, CRC(bd8b1e0b) SHA1(fcd94e33a0cbd17c9308cb8952e3c618ab56f9fc) )
	ROM_LOAD( "dt1cg3.13d",   0x600000, 0x200000, CRC(ba960663) SHA1(e98149bc4652ea7933ac47d760a6f7e6489f15e2) )
	ROM_LOAD( "dt1cg4.14d",   0x800000, 0x200000, CRC(424b9652) SHA1(fa8865110db03559740c4e633e123d1a009782c4) )
	ROM_LOAD( "dt1cg5.16d",   0xa00000, 0x200000, CRC(29516626) SHA1(1f12c5dc3975b88dc60d87d0409bf311837e9fa4) )
	ROM_LOAD( "dt1cg6.18d",   0xc00000, 0x200000, CRC(e6fa7180) SHA1(85316cde282cff1f913cf9f155cfa36adcc1108e) )
	ROM_LOAD( "dt1cg7.19d",   0xe00000, 0x200000, CRC(2ca19153) SHA1(c82403c8b40bf85daedf610b1bc7bfea9dfc6206) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "dt1ccrl.3d",   0x000000, 0x200000, CRC(e536b313) SHA1(7357da993d2bb3fcc8c1c2feb53689ad368cd80a) )
	ROM_LOAD( "dt1ccrh.1d",   0x200000, 0x080000, CRC(af257064) SHA1(0da561d9f8824618c00209ccef6146e9f3ad72bb) )

	ROM_REGION( 0x480000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "dt1ptrl0.18k", 0x000000, 0x080000, CRC(4e0cac3a) SHA1(c2778e9e93be2de729c6f118caf62ac9f48efbb0) )
	ROM_LOAD( "dt1ptrl1.16k", 0x080000, 0x080000, CRC(59ba9dba) SHA1(a2e9488cf0ff255284c06a1ef653ae86c0d98adc) )
	ROM_LOAD( "dt1ptrl2.15k", 0x100000, 0x080000, CRC(cfe80c67) SHA1(ba3bc48aa39712e63c915070a76974fbd560dee6) )
	ROM_LOAD( "dt1ptrm0.18j", 0x180000, 0x080000, CRC(41f34337) SHA1(7e624e7b6fdefe156168b1c9cc5e919db3b2fbaa) )
	ROM_LOAD( "dt1ptrm1.16j", 0x200000, 0x080000, CRC(f620fd41) SHA1(18cf6e11eb68da1b7f7fcc32562dc952c247de65) )
	ROM_LOAD( "dt1ptrm2.15j", 0x280000, 0x080000, CRC(71e6714d) SHA1(6aad6db3be5020213d7add61c7d927ae9c4fea4e) )
	ROM_LOAD( "dt1ptru0.18f", 0x300000, 0x080000, CRC(4909bd7d) SHA1(0e4ef3987c43ef0438331b82b50dcc97363a45d0) )
	ROM_LOAD( "dt1ptru1.16f", 0x380000, 0x080000, CRC(4a5097df) SHA1(a9c814b0ed4bd92accd0e57be8e3d887114b06a5) )
	ROM_LOAD( "dt1ptru2.15f", 0x400000, 0x080000, CRC(1171eaf5) SHA1(168365ea619386f218585c49025cdd7fd1224082) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "dt1wavea.2l",  0x000000, 0x400000, CRC(cbd52e40) SHA1(dc995dd919548c96a90efb0375e5b5f1055e05cb) )
	ROM_LOAD( "dt1waveb.1l",  0x800000, 0x400000, CRC(6b736f94) SHA1(ac3715480aa9a9c2dec099607f89859bb3b73a6a) )
ROM_END

ROM_START( dirtdashj )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_WORD_SWAP( "dt1vera.1",    0x000002, 0x200000, CRC(057b280b) SHA1(e7f038c1b3c7520d32c9962cc00104bcf65d60f6) )
	ROM_LOAD32_WORD_SWAP( "dt1vera.2",    0x000000, 0x200000, CRC(82f822d2) SHA1(170cf326903fe7b4e203b181124de609826b8e1f) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "dt1dataa.8k",  0x000000, 0x080000, CRC(9bcdea21) SHA1(26ae025cf746d3a703a82495eb2bb515b828a650) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "dt1scg0.12f",  0x000000, 0x200000, CRC(a09b5760) SHA1(3dd54ebebf9da1de76874a1adf491ed15849e1b1) )
	ROM_LOAD( "dt1scg1.10f",  0x200000, 0x200000, CRC(f9ac8111) SHA1(814074ae8cc81c6c1201d764a84dd95fe914f19c) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "dt1cg0.8d",    0x000000, 0x200000, CRC(10ab95e0) SHA1(ffde1f00ac3e82a36fbcfa060c6b97c92dfcfc8b) )
	ROM_LOAD( "dt1cg1.10d",   0x200000, 0x200000, CRC(d9f1ba53) SHA1(5a1095b726c55001cc1d4c695adc38097e6a0201) )
	ROM_LOAD( "dt1cg2.12d",   0x400000, 0x200000, CRC(bd8b1e0b) SHA1(fcd94e33a0cbd17c9308cb8952e3c618ab56f9fc) )
	ROM_LOAD( "dt1cg3.13d",   0x600000, 0x200000, CRC(ba960663) SHA1(e98149bc4652ea7933ac47d760a6f7e6489f15e2) )
	ROM_LOAD( "dt1cg4.14d",   0x800000, 0x200000, CRC(424b9652) SHA1(fa8865110db03559740c4e633e123d1a009782c4) )
	ROM_LOAD( "dt1cg5.16d",   0xa00000, 0x200000, CRC(29516626) SHA1(1f12c5dc3975b88dc60d87d0409bf311837e9fa4) )
	ROM_LOAD( "dt1cg6.18d",   0xc00000, 0x200000, CRC(e6fa7180) SHA1(85316cde282cff1f913cf9f155cfa36adcc1108e) )
	ROM_LOAD( "dt1cg7.19d",   0xe00000, 0x200000, CRC(2ca19153) SHA1(c82403c8b40bf85daedf610b1bc7bfea9dfc6206) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "dt1ccrl.3d",   0x000000, 0x200000, CRC(e536b313) SHA1(7357da993d2bb3fcc8c1c2feb53689ad368cd80a) )
	ROM_LOAD( "dt1ccrh.1d",   0x200000, 0x080000, CRC(af257064) SHA1(0da561d9f8824618c00209ccef6146e9f3ad72bb) )

	ROM_REGION( 0x480000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "dt1ptrl0.18k", 0x000000, 0x080000, CRC(4e0cac3a) SHA1(c2778e9e93be2de729c6f118caf62ac9f48efbb0) )
	ROM_LOAD( "dt1ptrl1.16k", 0x080000, 0x080000, CRC(59ba9dba) SHA1(a2e9488cf0ff255284c06a1ef653ae86c0d98adc) )
	ROM_LOAD( "dt1ptrl2.15k", 0x100000, 0x080000, CRC(cfe80c67) SHA1(ba3bc48aa39712e63c915070a76974fbd560dee6) )
	ROM_LOAD( "dt1ptrm0.18j", 0x180000, 0x080000, CRC(41f34337) SHA1(7e624e7b6fdefe156168b1c9cc5e919db3b2fbaa) )
	ROM_LOAD( "dt1ptrm1.16j", 0x200000, 0x080000, CRC(f620fd41) SHA1(18cf6e11eb68da1b7f7fcc32562dc952c247de65) )
	ROM_LOAD( "dt1ptrm2.15j", 0x280000, 0x080000, CRC(71e6714d) SHA1(6aad6db3be5020213d7add61c7d927ae9c4fea4e) )
	ROM_LOAD( "dt1ptru0.18f", 0x300000, 0x080000, CRC(4909bd7d) SHA1(0e4ef3987c43ef0438331b82b50dcc97363a45d0) )
	ROM_LOAD( "dt1ptru1.16f", 0x380000, 0x080000, CRC(4a5097df) SHA1(a9c814b0ed4bd92accd0e57be8e3d887114b06a5) )
	ROM_LOAD( "dt1ptru2.15f", 0x400000, 0x080000, CRC(1171eaf5) SHA1(168365ea619386f218585c49025cdd7fd1224082) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "dt1wavea.2l",  0x000000, 0x400000, CRC(cbd52e40) SHA1(dc995dd919548c96a90efb0375e5b5f1055e05cb) )
	ROM_LOAD( "dt1waveb.1l",  0x800000, 0x400000, CRC(6b736f94) SHA1(ac3715480aa9a9c2dec099607f89859bb3b73a6a) )
ROM_END


ROM_START( aquajet )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "aj2ver-b.1",   0x000003, 0x100000, CRC(3a67b9f4) SHA1(8cd51f319e082297fdb99634486fe297a0ace654) )
	ROM_LOAD32_BYTE( "aj2ver-b.2",   0x000002, 0x100000, CRC(f5e8fc96) SHA1(e23fcf6f84724d1de15870ff578ff8a6b26e8f31) )
	ROM_LOAD32_BYTE( "aj2ver-b.3",   0x000001, 0x100000, CRC(ef6ebcf7) SHA1(358973b678b9a3065e945fb589af16e8102d437b) )
	ROM_LOAD32_BYTE( "aj2ver-b.4",   0x000000, 0x100000, CRC(7799b909) SHA1(e40005f96f51742b2778605926b8184c9b2c1ad2) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "aj1data.8k",   0x000000, 0x080000, CRC(52bcc6d5) SHA1(25319ea6db35cc9bdcb39cc83d597a2a9f1690f3) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "aj1scg0.12f",  0x000000, 0x200000, CRC(13ea766c) SHA1(a1a259bd8f468b90cbc891f1c2875fe03bba9802) )
	ROM_LOAD( "aj1scg1.10f",  0x200000, 0x200000, CRC(cb3638de) SHA1(0af99aaf00782036d7f479b00b0c3d9d7ad4fc37) )
	ROM_LOAD( "aj1scg2.8f",   0x400000, 0x200000, CRC(1048a09b) SHA1(6859533e24db5ac54e28d480aaac7b411a648dfe) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "aj1cg0.8d",    0x000000, 0x200000, CRC(b814e1eb) SHA1(1af29897dcfd0a58743b4fcdd5049d9e6e3d4cbd) )
	ROM_LOAD( "aj1cg1.10d",   0x200000, 0x200000, CRC(dc63d496) SHA1(d3c3eea6b134850004062dd513c0f26096101227) )
	ROM_LOAD( "aj1cg2.12d",   0x400000, 0x200000, CRC(71fbb571) SHA1(40f84ab5a4a7bb4438fb53751762609671d17800) )
	ROM_LOAD( "aj1cg3.13d",   0x600000, 0x200000, CRC(e28052e2) SHA1(3dbc446d7a13312ed4c1d20c2e1209947853f2c4) )
	ROM_LOAD( "aj1cg4.14d",   0x800000, 0x200000, CRC(c77ae1a0) SHA1(e15f2ccbadb8634f6e5cfd2cf48f428d68bd92e1) )
	ROM_LOAD( "aj1cg5.16d",   0xa00000, 0x200000, CRC(15be0080) SHA1(ca14dfd2a66996f0b32fa1155c04f21d300e8f30) )
	ROM_LOAD( "aj1cg6.18d",   0xc00000, 0x200000, CRC(1a4f733a) SHA1(60a991f06e73667fa2c9016189999c4301cba24f) )
	ROM_LOAD( "aj1cg7.19d",   0xe00000, 0x200000, CRC(ea118130) SHA1(24ef22e5c8c6f6e8a01c72466be1e7acbfba63bc) )

	ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "aj1ccrl.3d",   0x000000, 0x200000, CRC(3cc7a247) SHA1(336e4dd506d932987e20a5890dd3b0db75c02ccf) )
	ROM_LOAD( "aj1ccrh.1d",   0x200000, 0x080000, CRC(9d936030) SHA1(a383bcca494a9f8d9a08fbe9940c8071d4525d65) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "aj1ptrl0.18k", 0x000000, 0x080000, CRC(16205d45) SHA1(7e9681af852e2e875f80cbbe350e4982eaf80884) )
	ROM_LOAD( "aj1ptrl1.16k", 0x080000, 0x080000, CRC(6f114da7) SHA1(a1e7349ef8eb0ef043fce06f88bfbb76c2967393) )
	ROM_LOAD( "aj1ptrl2.15k", 0x100000, 0x080000, CRC(719b73f0) SHA1(bf8530a706097ae663769090177f1f259c540aa6) )
	ROM_LOAD( "aj1ptrl3.14k", 0x180000, 0x080000, CRC(9555fe31) SHA1(03bdd0784817191b3600d643b775191181a21706) )
	ROM_LOAD( "aj1ptrm0.18j", 0x200000, 0x080000, CRC(89bee2e0) SHA1(d84b06ef1318814fcf4782fef09a85ae1a87beb8) )
	ROM_LOAD( "aj1ptrm1.16j", 0x280000, 0x080000, CRC(0ecf88c7) SHA1(20b7cb09a6a13599cac024ef19c73612ce2952f6) )
	ROM_LOAD( "aj1ptrm2.15j", 0x300000, 0x080000, CRC(829bc7ba) SHA1(7104d66a027911e38ecf521f01ff098ccb76d5fb) )
	ROM_LOAD( "aj1ptrm3.14j", 0x380000, 0x080000, CRC(7d0a222a) SHA1(e78c405d00429580015c6c7d1bcd35393317a769) )
	ROM_LOAD( "aj1ptru0.18f", 0x400000, 0x080000, CRC(90d4e36a) SHA1(bdc44aac6aef5266d289f03c816aa2abdb263e9b) )
	ROM_LOAD( "aj1ptru1.16f", 0x480000, 0x080000, CRC(bf0cf4bf) SHA1(bbf06c7605c083d2fb8c72528c5c9d3b8b067073) )
	ROM_LOAD( "aj1ptru2.15f", 0x500000, 0x080000, CRC(91ffbb77) SHA1(fbfe7d32ef22037f7190d1b8263b5e8c55f2d892) )
	ROM_LOAD( "aj1ptru3.14f", 0x580000, 0x080000, CRC(d83d8d42) SHA1(e1561ce4538b01db92b7e645ad008cd1a2ddaf8a) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD( "aj1wavea.2l",  0x000000, 0x400000, CRC(8c72ea59) SHA1(3ae8dbd8baae08f1daab2b218932ba9d9451231d) )
	ROM_LOAD( "aj1waveb.1l",  0x800000, 0x400000, CRC(ab5a457f) SHA1(c34531fd574eb0c3e78fc31a9af8658df3446adc) )

	ROM_REGION( 0x2000, "eeprom", 0 ) // default eeprom
	ROM_LOAD( "aquajet_defaults.nv", 0x0000, 0x2000, CRC(a00b3e44) SHA1(6bdbb46f4176314b61bd5063ecc968189212cb4c) )
ROM_END


ROM_START( adillor )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "am2vera.rom1", 0x000003, 0x100000, CRC(b974e931) SHA1(db1c99ed56044f667a9a0a5801f62215004af847) )
	ROM_LOAD32_BYTE( "am2vera.rom2", 0x000002, 0x100000, CRC(c7cd78f1) SHA1(2f909be1c9a9acf42a8e446c83a06b3b36012196) )
	ROM_LOAD32_BYTE( "am2vera.rom3", 0x000001, 0x100000, CRC(80e9435a) SHA1(d92f6ec607e628270ceb3e09c1980d6e13bd88a7) )
	ROM_LOAD32_BYTE( "am2vera.rom4", 0x000000, 0x100000, CRC(1e3a6032) SHA1(f4c6539a78f94ae2c240aeb8f85712a612933e8c) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "am1data.8k", 0x000000, 0x080000, CRC(3c176589) SHA1(fabf8debfa118893449f6086986fd1aa012daf27) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "am1scg0.12f",  0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
	ROM_LOAD( "am1scg1.10f",  0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )
	ROM_LOAD( "am1scg0.12l",  0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
	ROM_LOAD( "am1scg1.10l",  0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "am1cg0.8d",    0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
	ROM_LOAD( "am1cg1.10d",   0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
	ROM_LOAD( "am1cg2.12d",   0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
	ROM_LOAD( "am1cg3.13d",   0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
	ROM_LOAD( "am1cg3.14d",   0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
	ROM_LOAD( "am1cg5.16d",   0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
	ROM_LOAD( "am1cg6.18d",   0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
	ROM_LOAD( "am1cg7.19d",   0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )
	ROM_LOAD( "am1cg0.12b",   0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
	ROM_LOAD( "am1cg1.13b",   0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
	ROM_LOAD( "am1cg2.14b",   0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
	ROM_LOAD( "am1cg3.16b",   0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
	ROM_LOAD( "am1cg3.18b",   0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
	ROM_LOAD( "am1cg5.19b",   0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
	ROM_LOAD( "am1cg6.18a",   0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
	ROM_LOAD( "am1cg7.15a",   0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )

	ROM_REGION16_LE( 0x300000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "am1ccrl.3d",   0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
	ROM_LOAD( "am1ccrh.1d",   0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )
	ROM_LOAD( "am1ccrl.7b",   0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
	ROM_LOAD( "am1ccrh.5b",   0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "am1ptrl0.18k", 0x000000, 0x080000, CRC(6fdb34f6) SHA1(5dc7359eef0dbe6d421808eefd3920159ce34944) )
	ROM_LOAD( "am1ptrl1.16k", 0x080000, 0x080000, CRC(32e40601) SHA1(161b148aae688e944cfe456d9bca1ca7139812e1) )
	ROM_LOAD( "am1ptrl2.15k", 0x100000, 0x080000, CRC(e27e29cc) SHA1(3a2b0d18d23b2ace6fe1c6c4dbcc73cb74acd189) )
	ROM_LOAD( "am1ptrl3.14k", 0x180000, 0x080000, CRC(0c638e3e) SHA1(2cd68e6aa04a9235f792fad0913314545ab70e71) )
	ROM_LOAD( "am1ptrm0.18j", 0x200000, 0x080000, CRC(e676cd98) SHA1(f7b31c848bc2afc31f3ad53d9eda7daae5f28865) )
	ROM_LOAD( "am1ptrm1.16j", 0x280000, 0x080000, CRC(eb115d9d) SHA1(165cb13a3d0f2982c35ae5e6e796de48cf2b5846) )
	ROM_LOAD( "am1ptrm2.15j", 0x300000, 0x080000, CRC(86b4ed0c) SHA1(d97f2b26cc3981b4b337029723c5ddec9316628f) )
	ROM_LOAD( "am1ptrm3.14j", 0x380000, 0x080000, CRC(97c1c6b0) SHA1(84e5f982f50560debd6f1f4d3d96f58888616529) )
	ROM_LOAD( "am1ptru0.18f", 0x400000, 0x080000, CRC(6a3fd855) SHA1(c6d2029e676426c4e71d9cfddbac7ecdec81c4da) )
	ROM_LOAD( "am1ptru1.16f", 0x480000, 0x080000, CRC(551bf714) SHA1(4af1e65ad1e42a95accafb57422fc276743f408a) )
	ROM_LOAD( "am1ptru2.15f", 0x500000, 0x080000, CRC(ce790635) SHA1(fb49646a9b35ee7cb3ace59a7f0932a08c393052) )
	ROM_LOAD( "am1ptru3.14f", 0x580000, 0x080000, CRC(5e4e6333) SHA1(5897251e4694c5c24f1810ff6f9177a0456baf2e) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD16_WORD_SWAP( "am1wavea.2l",  0x000000, 0x400000, CRC(48f8c20c) SHA1(48b4fbcb7e9dbbb70a542ef7cb7ee0e46fad23fc) )
	ROM_LOAD16_WORD_SWAP( "am1waveb.1l",  0x800000, 0x400000, CRC(fd8e7384) SHA1(91e53ab0293f81f8357645fd319249abc128b78e) )
ROM_END

ROM_START( adillorj )
	ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_BYTE( "am1vera.rom1", 0x000003, 0x100000, CRC(e99157f9) SHA1(7a200f3b5890f5badbf529a8c8ac6a8548adb801) )
	ROM_LOAD32_BYTE( "am1vera.rom2", 0x000002, 0x100000, CRC(b63d79b0) SHA1(c83251727b2973f5b9dc2eea23b51b1275bd88ed) )
	ROM_LOAD32_BYTE( "am1vera.rom3", 0x000001, 0x100000, CRC(af0983bc) SHA1(136d2e14485864e20d7a6947d640577b8a85243c) )
	ROM_LOAD32_BYTE( "am1vera.rom4", 0x000000, 0x100000, CRC(4424047f) SHA1(d0ca736c085db58d33b603813b7a54c8ce995bac) )

	ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
	ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )

	ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
	ROM_LOAD( "am1data.8k", 0x000000, 0x080000, CRC(3c176589) SHA1(fabf8debfa118893449f6086986fd1aa012daf27) )

	ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
	ROM_LOAD( "am1scg0.12f",  0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
	ROM_LOAD( "am1scg1.10f",  0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )
	ROM_LOAD( "am1scg0.12l",  0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
	ROM_LOAD( "am1scg1.10l",  0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )

	ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
	ROM_LOAD( "am1cg0.8d",    0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
	ROM_LOAD( "am1cg1.10d",   0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
	ROM_LOAD( "am1cg2.12d",   0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
	ROM_LOAD( "am1cg3.13d",   0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
	ROM_LOAD( "am1cg3.14d",   0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
	ROM_LOAD( "am1cg5.16d",   0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
	ROM_LOAD( "am1cg6.18d",   0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
	ROM_LOAD( "am1cg7.19d",   0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )
	ROM_LOAD( "am1cg0.12b",   0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
	ROM_LOAD( "am1cg1.13b",   0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
	ROM_LOAD( "am1cg2.14b",   0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
	ROM_LOAD( "am1cg3.16b",   0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
	ROM_LOAD( "am1cg3.18b",   0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
	ROM_LOAD( "am1cg5.19b",   0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
	ROM_LOAD( "am1cg6.18a",   0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
	ROM_LOAD( "am1cg7.15a",   0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )

	ROM_REGION16_LE( 0x300000, "textilemap", 0 ) /* texture tilemap */
	ROM_LOAD( "am1ccrl.3d",   0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
	ROM_LOAD( "am1ccrh.1d",   0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )
	ROM_LOAD( "am1ccrl.7b",   0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
	ROM_LOAD( "am1ccrh.5b",   0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )

	ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
	ROM_LOAD( "am1ptrl0.18k", 0x000000, 0x080000, CRC(6fdb34f6) SHA1(5dc7359eef0dbe6d421808eefd3920159ce34944) )
	ROM_LOAD( "am1ptrl1.16k", 0x080000, 0x080000, CRC(32e40601) SHA1(161b148aae688e944cfe456d9bca1ca7139812e1) )
	ROM_LOAD( "am1ptrl2.15k", 0x100000, 0x080000, CRC(e27e29cc) SHA1(3a2b0d18d23b2ace6fe1c6c4dbcc73cb74acd189) )
	ROM_LOAD( "am1ptrl3.14k", 0x180000, 0x080000, CRC(0c638e3e) SHA1(2cd68e6aa04a9235f792fad0913314545ab70e71) )
	ROM_LOAD( "am1ptrm0.18j", 0x200000, 0x080000, CRC(e676cd98) SHA1(f7b31c848bc2afc31f3ad53d9eda7daae5f28865) )
	ROM_LOAD( "am1ptrm1.16j", 0x280000, 0x080000, CRC(eb115d9d) SHA1(165cb13a3d0f2982c35ae5e6e796de48cf2b5846) )
	ROM_LOAD( "am1ptrm2.15j", 0x300000, 0x080000, CRC(86b4ed0c) SHA1(d97f2b26cc3981b4b337029723c5ddec9316628f) )
	ROM_LOAD( "am1ptrm3.14j", 0x380000, 0x080000, CRC(97c1c6b0) SHA1(84e5f982f50560debd6f1f4d3d96f58888616529) )
	ROM_LOAD( "am1ptru0.18f", 0x400000, 0x080000, CRC(6a3fd855) SHA1(c6d2029e676426c4e71d9cfddbac7ecdec81c4da) )
	ROM_LOAD( "am1ptru1.16f", 0x480000, 0x080000, CRC(551bf714) SHA1(4af1e65ad1e42a95accafb57422fc276743f408a) )
	ROM_LOAD( "am1ptru2.15f", 0x500000, 0x080000, CRC(ce790635) SHA1(fb49646a9b35ee7cb3ace59a7f0932a08c393052) )
	ROM_LOAD( "am1ptru3.14f", 0x580000, 0x080000, CRC(5e4e6333) SHA1(5897251e4694c5c24f1810ff6f9177a0456baf2e) )

	ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
	ROM_LOAD16_WORD_SWAP( "am1wavea.2l",  0x000000, 0x400000, CRC(48f8c20c) SHA1(48b4fbcb7e9dbbb70a542ef7cb7ee0e46fad23fc) )
	ROM_LOAD16_WORD_SWAP( "am1waveb.1l",  0x800000, 0x400000, CRC(fd8e7384) SHA1(91e53ab0293f81f8357645fd319249abc128b78e) )
ROM_END



/*********************************************************************************************/

// MCU speed cheats (every bit helps with these games)

// for MCU BIOS v1.41
u16 namcos22s_state::mcu141_speedup_r()
{
	if ((m_mcu->pc() == 0xc12d) && (!(m_su_82 & 0xff00)))
	{
		m_mcu->spin_until_interrupt();
	}

	return m_su_82;
}

void namcos22_state::mcu_speedup_w(offs_t offset, u16 data, u16 mem_mask)
{
	COMBINE_DATA(&m_su_82);
}

// for MCU BIOS v1.20/v1.30
u16 namcos22s_state::mcu130_speedup_r()
{
	if ((m_mcu->pc() == 0xc12a) && (!(m_su_82 & 0xff00)))
	{
		m_mcu->spin_until_interrupt();
	}

	return m_su_82;
}

// for NSTX7702 v1.00 (C74)
u16 namcos22_state::mcuc74_speedup_r()
{
	if (((m_mcu->pc() == 0xc0df) || (m_mcu->pc() == 0xc101)) && (!(m_su_82 & 0xff00)))
	{
		m_mcu->spin_until_interrupt();
	}

	return m_su_82;
}

void namcos22_state::install_c74_speedup()
{
	if (MCU_SPEEDUP)
	{
		m_mcu->space(AS_PROGRAM).install_read_handler(0x80, 0x81, read16smo_delegate(*this, FUNC(namcos22_state::mcuc74_speedup_r)));
		m_mcu->space(AS_PROGRAM).install_write_handler(0x80, 0x81, write16s_delegate(*this, FUNC(namcos22_state::mcu_speedup_w)));
	}
}

void namcos22s_state::install_130_speedup()
{
	// install speedup cheat for 1.20/1.30 MCU BIOS
	if (MCU_SPEEDUP)
	{
		m_mcu->space(AS_PROGRAM).install_read_handler(0x82, 0x83, read16smo_delegate(*this, FUNC(namcos22s_state::mcu130_speedup_r)));
		m_mcu->space(AS_PROGRAM).install_write_handler(0x82, 0x83, write16s_delegate(*this, FUNC(namcos22s_state::mcu_speedup_w)));
	}
}

void namcos22s_state::install_141_speedup()
{
	// install speedup cheat for 1.41 MCU BIOS
	if (MCU_SPEEDUP)
	{
		m_mcu->space(AS_PROGRAM).install_read_handler(0x82, 0x83, read16smo_delegate(*this, FUNC(namcos22s_state::mcu141_speedup_r)));
		m_mcu->space(AS_PROGRAM).install_write_handler(0x82, 0x83, write16s_delegate(*this, FUNC(namcos22s_state::mcu_speedup_w)));
	}
}



/*********************************************************************************************/

void namcos22_state::init_ridgerac()
{
	m_gametype = NAMCOS22_RIDGE_RACER;
	install_c74_speedup();
}

void namcos22_state::init_ridgera2()
{
	m_gametype = NAMCOS22_RIDGE_RACER2;
	install_c74_speedup();
}

void namcos22_state::init_acedrive()
{
	m_gametype = NAMCOS22_ACE_DRIVER;
	install_c74_speedup();
}

void namcos22_state::init_victlap()
{
	m_gametype = NAMCOS22_VICTORY_LAP;
	install_c74_speedup();
}

void namcos22_state::init_raverace()
{
	m_gametype = NAMCOS22_RAVE_RACER;
	install_c74_speedup();
}

void namcos22_state::init_cybrcomm()
{
	m_gametype = NAMCOS22_CYBER_COMMANDO;
	install_c74_speedup();
}

void alpine_state::init_alpiner()
{
	m_gametype = NAMCOS22_ALPINE_RACER;
	install_130_speedup();
}

void alpine_state::init_alpiner2()
{
	m_gametype = NAMCOS22_ALPINE_RACER_2;
	install_130_speedup();
}

void alpines_state::init_alpines()
{
	m_gametype = NAMCOS22_ALPINE_SURFER;
	install_141_speedup();

	m_rombank->configure_entries(0, 3, memregion("maincpu")->base() + 0x200000, 0x200000);
}

void namcos22s_state::init_airco22()
{
	m_gametype = NAMCOS22_AIR_COMBAT22;
	install_130_speedup(); // S22-BIOS ver1.20 namco all rights reserved 94/12/21
}

void propcycl_state::init_propcycl()
{
	u32 *ROM = (u32 *)memregion("maincpu")->base();

	// patch out strange routine (uninitialized-eeprom related?)
	// maybe needs more accurate 28C64 eeprom device emulation
	ROM[0x1992c/4] = 0x4e754e75;

	/**
	 * The dipswitch reading routine in Prop Cycle polls the
	 * dipswitch value, but promptly overwrites with zero, discarding
	 * it.
	 *
	 * By patching out this behavior, we expose an additional "secret" test.
	 *
	 * DIP5: real time display of "INST_CUNT, MODE_NUM, MODE_CUNT"
	 */
	//ROM[0x22296/4] &= 0xffff0000;
	//ROM[0x22296/4] |= 0x00004e75;

	m_gametype = NAMCOS22_PROP_CYCLE;
	install_141_speedup();
}

void propcycl_state::init_propcyclj()
{
	// see init_propcycl for notes
	u32 *ROM = (u32 *)memregion("maincpu")->base();

	ROM[0x1990a/4] = 0x4e754e75;

	//ROM[0x22272/4] &= 0xffff0000;
	//ROM[0x22272/4] |= 0x00004e75;

	m_gametype = NAMCOS22_PROP_CYCLE;
	install_141_speedup();
}

void namcos22s_state::init_cybrcycc()
{
	m_gametype = NAMCOS22_CYBER_CYCLES;
	install_130_speedup();
}

void timecris_state::init_timecris()
{
	m_gametype = NAMCOS22_TIME_CRISIS;
	install_130_speedup();
}

void namcos22s_state::init_tokyowar()
{
	m_gametype = NAMCOS22_TOKYO_WARS;
	install_141_speedup();
}

void namcos22s_state::init_aquajet()
{
	m_gametype = NAMCOS22_AQUA_JET;
	install_141_speedup();
}

void adillor_state::init_adillor()
{
	m_gametype = NAMCOS22_ARMADILLO_RACING;
	install_141_speedup();
}

void namcos22s_state::init_dirtdash()
{
	m_gametype = NAMCOS22_DIRT_DASH;
	install_141_speedup();
}



/*********************************************************************************************/

/*    YEAR,  NAME,      PARENT,   MACHINE,   INPUT,     CLASS,           INIT,           MNTR, COMPANY, FULLNAME, FLAGS */
// System22 games
GAME( 1993, ridgerac,   0,        namcos22,  ridgera,   namcos22_state,  init_ridgerac,  ROT0, "Namco", "Ridge Racer (World, RR2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17
GAME( 1993, ridgeraca,  ridgerac, namcos22,  ridgera,   namcos22_state,  init_ridgerac,  ROT0, "Namco", "Ridge Racer (World, RR2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28
GAME( 1993, ridgeracb,  ridgerac, namcos22,  ridgera,   namcos22_state,  init_ridgerac,  ROT0, "Namco", "Ridge Racer (US, RR3 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17, reports as "-Foreign B-" RR3 means USA?
GAME( 1993, ridgeracc,  ridgerac, namcos22,  ridgera,   namcos22_state,  init_ridgerac,  ROT0, "Namco", "Ridge Racer (US, RR3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28, purportedly 3 Screen version, reports as "-Foreign B-"
GAME( 1993, ridgeracj,  ridgerac, namcos22,  ridgera,   namcos22_state,  init_ridgerac,  ROT0, "Namco", "Ridge Racer (Japan, RR1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
GAME( 1993, ridgeracf,  0,        namcos22,  ridgeracf, namcos22_state,  init_ridgerac,  ROT0, "Namco", "Ridge Racer Full Scale (World, RRF2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 1993-12-13, very different version, incomplete dump.
GAME( 1994, ridgera2,   0,        namcos22,  ridgera2,  namcos22_state,  init_ridgera2,  ROT0, "Namco", "Ridge Racer 2 (World, RRS2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21 - NOT labeled "B" but based off Japan Rev.B
GAME( 1994, ridgera2j,  ridgera2, namcos22,  ridgera2,  namcos22_state,  init_ridgera2,  ROT0, "Namco", "Ridge Racer 2 (Japan, RRS1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21
GAME( 1994, ridgera2ja, ridgera2, namcos22,  ridgera2,  namcos22_state,  init_ridgera2,  ROT0, "Namco", "Ridge Racer 2 (Japan, RRS1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-13
GAME( 1994, ridgera28,  ridgera2, namcos22,  ridgera2,  namcos22_state,  init_ridgera2,  ROT0, "Namco", "Ridge Racer 2 (World, RRS8)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-XX-XX - Test Location / proto??
GAME( 1994, cybrcomm,   0,        cybrcomm,  cybrcomm,  namcos22_state,  init_cybrcomm,  ROT0, "Namco", "Cyber Commando (Japan, CY1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 10/14/94
GAME( 1995, raverace,   0,        namcos22,  raverace,  namcos22_state,  init_raverace,  ROT0, "Namco", "Rave Racer (World, RV2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveracej,  raverace, namcos22,  raverace,  namcos22_state,  init_raverace,  ROT0, "Namco", "Rave Racer (Japan, RV1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveraceja, raverace, namcos22,  raverace,  namcos22_state,  init_raverace,  ROT0, "Namco", "Rave Racer (Japan, RV1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 06/29/95
GAME( 1994, acedrive,   0,        namcos22,  acedrive,  namcos22_state,  init_acedrive,  ROT0, "Namco", "Ace Driver: Racing Evolution (World, AD2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 94/10/20 16:22:25
GAME( 1996, victlap,    0,        namcos22,  victlap,   namcos22_state,  init_victlap,   ROT0, "Namco", "Ace Driver: Victory Lap (World, ADV2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/05/21 19:39:59
GAME( 1996, victlapa,   victlap,  namcos22,  victlap,   namcos22_state,  init_victlap,   ROT0, "Namco", "Ace Driver: Victory Lap (World, ADV2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:29:10
GAME( 1996, victlapj,   victlap,  namcos22,  victlap,   namcos22_state,  init_victlap,   ROT0, "Namco", "Ace Driver: Victory Lap (Japan, ADV1 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:29:10

// System Super22 games
GAME( 1994, alpinerd,   0,        alpine,    alpiner,   alpine_state,    init_alpiner,   ROT0, "Namco", "Alpine Racer (World, AR2 Ver.D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, alpinerc,   alpinerd, alpine,    alpiner,   alpine_state,    init_alpiner,   ROT0, "Namco", "Alpine Racer (World, AR2 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, alpinerjc,  alpinerd, alpine,    alpiner,   alpine_state,    init_alpiner,   ROT0, "Namco", "Alpine Racer (Japan, AR1 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, airco22b,   0,        airco22b,  airco22,   namcos22s_state, init_airco22,   ROT0, "Namco", "Air Combat 22 (Japan, ACS1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, cybrcycc,   0,        cybrcycc,  cybrcycc,  namcos22s_state, init_cybrcycc,  ROT0, "Namco", "Cyber Cycles (World, CB2 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 95/04/04
GAME( 1995, cybrcyccj,  cybrcycc, cybrcycc,  cybrcycc,  namcos22s_state, init_cybrcycc,  ROT0, "Namco", "Cyber Cycles (Japan, CB1 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 95/04/04
GAME( 1995, dirtdash,   0,        dirtdash,  dirtdash,  namcos22s_state, init_dirtdash,  ROT0, "Namco", "Dirt Dash (World, DT2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 96/?1/0? 21:03:?6, one ROM is bad
GAME( 1995, dirtdasha,  dirtdash, dirtdash,  dirtdash,  namcos22s_state, init_dirtdash,  ROT0, "Namco", "Dirt Dash (World, DT2 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 95/12/20 20:01:56
GAME( 1995, dirtdashj,  dirtdash, dirtdash,  dirtdash,  namcos22s_state, init_dirtdash,  ROT0, "Namco", "Dirt Dash (Japan, DT1 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 95/12/20 20:06:45
GAME( 1996, timecris,   0,        timecris,  timecris,  timecris_state,  init_timecris,  ROT0, "Namco", "Time Crisis (World, TS2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/04/02 18:48:00
GAME( 1996, timecrisa,  timecris, timecris,  timecris,  timecris_state,  init_timecris,  ROT0, "Namco", "Time Crisis (World, TS2 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/01/08 18:56:09
GAME( 1996, propcycl,   0,        propcycl,  propcycl,  propcycl_state,  init_propcycl,  ROT0, "Namco", "Prop Cycle (World, PR2 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13
GAME( 1996, propcyclj,  propcycl, propcycl,  propcycl,  propcycl_state,  init_propcyclj, ROT0, "Namco", "Prop Cycle (Japan, PR1 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:06:03
GAME( 1996, alpines,    0,        alpines,   alpines,   alpines_state,   init_alpines,   ROT0, "Namco", "Alpine Surfer (World, AF2 Ver.A, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/07/01 15:19:23
GAME( 1996, alpinesa,   alpines,  alpines,   alpines,   alpines_state,   init_alpines,   ROT0, "Namco", "Alpine Surfer (World, AF2 Ver.A, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/07/01 15:19:23
GAME( 1996, tokyowar,   0,        tokyowar,  tokyowar,  namcos22s_state, init_tokyowar,  ROT0, "Namco", "Tokyo Wars (World, TW2 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/09/03 14:08:47
GAME( 1996, tokyowarj,  tokyowar, tokyowar,  tokyowar,  namcos22s_state, init_tokyowar,  ROT0, "Namco", "Tokyo Wars (Japan, TW1 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/09/03 14:16:29
GAME( 1996, aquajet,    0,        cybrcycc,  aquajet,   namcos22s_state, init_aquajet,   ROT0, "Namco", "Aqua Jet (World, AJ2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30
GAME( 1996, alpinr2b,   0,        alpine,    alpiner,   alpine_state,    init_alpiner2,  ROT0, "Namco", "Alpine Racer 2 (World, ARS2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/01/10 17:10:59
GAME( 1996, alpinr2a,   alpinr2b, alpine,    alpiner,   alpine_state,    init_alpiner2,  ROT0, "Namco", "Alpine Racer 2 (World, ARS2 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/12/06 13:45:05
GAME( 1997, adillor,    0,        adillor,   adillor,   adillor_state,   init_adillor,   ROT0, "Namco", "Armadillo Racing (World, AM2 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:43:29
GAME( 1997, adillorj,   adillor,  adillor,   adillor,   adillor_state,   init_adillor,   ROT0, "Namco", "Armadillo Racing (Japan, AM1 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:19:41
