summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/cojag.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/cojag.c')
-rw-r--r--src/mame/drivers/cojag.c1579
1 files changed, 1579 insertions, 0 deletions
diff --git a/src/mame/drivers/cojag.c b/src/mame/drivers/cojag.c
new file mode 100644
index 00000000000..d2620348731
--- /dev/null
+++ b/src/mame/drivers/cojag.c
@@ -0,0 +1,1579 @@
+/***************************************************************************
+
+ Atari CoJag hardware
+
+ driver by Aaron Giles
+
+ Games supported:
+ * Area 51 (3 Sets)
+ * Maximum Force (2 Sets)
+ * Area 51/Maximum Force Duo (2 Sets)
+ * Vicious Circle
+ * Fishin' Frenzy
+ * Freeze
+
+ To do:
+ * map out unused RAM per-game via MRA8_NOP/MWA8_NOP
+
+ Note: There is believed to be a 68020 version of Maximum Force
+ (not confirmed or dumped)
+
+****************************************************************************
+
+ Area51/Maximum Force (c)1997 Atari Games
+ Maximum Force
+ A055451
+
+ Components:
+ sdt79r3041-20j
+ Atari Jaguar CPU V1.0 6sc880hf106
+ Atari Jaguar DSP V1.0 sc414201ft (has Motorolla logo)
+ Altera epm7128elc84-15 marked A-21652
+ VIA vt83c461 IDE controller
+ Actel a1010b marked A-22096 near IDE and gun inputs
+ Dallas ds1232s watchdog
+ 52MHz osc near Altera PLCC
+ 40MHz osc near 79R3041
+ 14.318180MHz osc near Jag DSP
+ 12x hm514260cj7 RAM (near Jaguar CPU/DSP)
+ 4x sdt71256 RAM (near Boot ROMs's)
+ Atmel atf16v8b marked a-21647 (near Jag CPU)
+ Altera ep22lc-10 marked A-21648 (near Jag DSP)
+ ICT 22cv10aj marked A-21649 (near Jag CPU)
+ ICT 22cv10aj marked A-21650 (near Jag CPU)
+ ICT 22cv10aj marked A-21651 (near Jag CPU)
+ tea6320t
+ AKM ak4310vm
+ tda1554q amplifier
+ Microchip 28c16a-15 BRAM
+
+ ROM's:
+ 27c4001
+ R3K MAX/A51 KIT
+ LL
+ (c)1997 Atari
+ V 1.0
+
+ 27c4001
+ R3K MAX/A51 KIT
+ LH
+ (c)1997 Atari
+ V 1.0
+
+ 27c4001
+ R3K MAX/A51 KIT
+ HL
+ (c)1997 Atari
+ V 1.0
+
+ 27c4001
+ R3K MAX/A51 KIT
+ HH
+ (c)1997 Atari
+ V 1.0
+
+ Jumpers:
+ jsp1 (1/2 connected= w/sub 2/3 connected= normal speaker)
+ jsp2 (1/2 connected= w/sub 2/3 connected= normal speaker)
+ jamaud (1/2 connected=stereo 2/3 connected=mono)
+ jimpr (1/2 connected=hi video R impedance 2/3 connected=lo)
+ jimpg (1/2 connected=hi video G impedance 2/3 connected=lo)
+ jimpb (1/2 connected=hi video B impedance 2/3 connected=lo)
+
+ Connectors:
+ idea standard IDE connector
+ ideb laptop size IDE connector
+ jgun1 8 pin gun input
+ jgun2 8 pin gun input
+ xtracoin 1 6 pin (coin3/4 bills?)
+ jvupdn 3 pin (?)
+ jsync 3 pin (?)
+ JAMMA
+ jspkr left/right/subwoofer output
+ hdpower 4 pin PC power connector for HD
+
+
+Maximum Force
+Atari, 1997
+
+PCB Layout
+----------
+
+MAXIMUM FORCE A055451 ATARI GAMES (C) 1996
+|-----------------------------------------------------------------------------------|
+|HM514260CJ7 HM514260CJ7 HM514260CJ7 HM514260CJ7 AT28C16 |
+| |
+|HM514260CJ7 HM514260CJ7 HM514260CJ7 HM514260CJ7 PROGLL.17Y PROGLH.21Y |
+| |
+|HM514260CJ7 HM514260CJ7 HM514260CJ7 HM514260CJ7 PROGHL.21V PROGHH.21V |
+| |
+| |
+| |------| |------| |
+| |JAGUAR| |JAGUAR| |
+|GAL GAL |GPU | |DSP | |----------| |
+| |------| |------| | | |
+| |IDT | |
+|GAL GAL 40MHz |79R3041-20| |
+| GAL | | |
+| 14.31818MHz |----------| IDE |
+|AK4310VM CONN |
+| |-----------| |
+|LM78L05 52MHz |ALTERA MAX | |
+| |EPM7128ELC84 |
+| TEA6320 | | |
+|78L09 LM613 | | VIA |
+| MONO/STEREO |-----------| VT83C461 |
+|TDA1554 SELFTEST |
+| DS1232 ACTEL_A1010B |
+| HDD_PWR |
+| JSPKR |--| JAMMA |--| JSYNC JVUPDN XTRACOIN1 JGUN1 JGUN2|
+|-------| |----------------------------| |----------------------------------------|
+Notes:
+ JGUN1 / JGUN2 - Connector for Guns
+ VIA VT83C461 - IDE Controller
+ JSPKR - Speaker Output Connector (for use with Stereo jumper)
+
+****************************************************************************
+
+ Memory map (TBA)
+
+ ========================================================================
+ MAIN CPU
+ ========================================================================
+
+ ------------------------------------------------------------
+ 000000-3FFFFF R/W xxxxxxxx xxxxxxxx DRAM 0
+ 400000-7FFFFF R/W xxxxxxxx xxxxxxxx DRAM 1
+ 800000-BFFFFF R xxxxxxxx xxxxxxxx Graphic ROM bank
+ C00000-DFFFFF R xxxxxxxx xxxxxxxx Sound ROM bank
+ F00000-F000FF R/W xxxxxxxx xxxxxxxx Tom Internal Registers
+ F00400-F005FF R/W xxxxxxxx xxxxxxxx CLUT - color lookup table A
+ F00600-F007FF R/W xxxxxxxx xxxxxxxx CLUT - color lookup table B
+ F00800-F00D9F R/W xxxxxxxx xxxxxxxx LBUF - line buffer A
+ F01000-F0159F R/W xxxxxxxx xxxxxxxx LBUF - line buffer B
+ F01800-F01D9F R/W xxxxxxxx xxxxxxxx LBUF - line buffer currently selected
+ F02000-F021FF R/W xxxxxxxx xxxxxxxx GPU control registers
+ F02200-F022FF R/W xxxxxxxx xxxxxxxx Blitter registers
+ F03000-F03FFF R/W xxxxxxxx xxxxxxxx Local GPU RAM
+ F08800-F08D9F R/W xxxxxxxx xxxxxxxx LBUF - 32-bit access to line buffer A
+ F09000-F0959F R/W xxxxxxxx xxxxxxxx LBUF - 32-bit access to line buffer B
+ F09800-F09D9F R/W xxxxxxxx xxxxxxxx LBUF - 32-bit access to line buffer currently selected
+ F0B000-F0BFFF R/W xxxxxxxx xxxxxxxx 32-bit access to local GPU RAM
+ F10000-F13FFF R/W xxxxxxxx xxxxxxxx Jerry
+ F14000-F17FFF R/W xxxxxxxx xxxxxxxx Joysticks and GPIO0-5
+ F18000-F1AFFF R/W xxxxxxxx xxxxxxxx Jerry DSP
+ F1B000-F1CFFF R/W xxxxxxxx xxxxxxxx Local DSP RAM
+ F1D000-F1DFFF R xxxxxxxx xxxxxxxx Wavetable ROM
+ ------------------------------------------------------------
+
+***************************************************************************/
+
+
+#include "driver.h"
+#include "cpu/mips/r3000.h"
+#include "cpu/jaguar/jaguar.h"
+#include "machine/idectrl.h"
+#include "sound/dac.h"
+#include "jaguar.h"
+
+
+
+/*************************************
+ *
+ * Global variables
+ *
+ *************************************/
+
+UINT32 *jaguar_shared_ram;
+UINT32 *jaguar_gpu_ram;
+UINT32 *jaguar_gpu_clut;
+UINT32 *jaguar_dsp_ram;
+UINT32 *jaguar_wave_rom;
+UINT8 cojag_is_r3000;
+
+
+
+/*************************************
+ *
+ * Local variables
+ *
+ *************************************/
+
+static UINT32 misc_control_data;
+static UINT8 eeprom_enable;
+
+static UINT32 *rom_base;
+
+static struct ide_interface ide_intf =
+{
+ jaguar_external_int
+};
+
+
+
+/*************************************
+ *
+ * Machine init
+ *
+ *************************************/
+
+static MACHINE_RESET( cojag )
+{
+ /* 68020 only: copy the interrupt vectors into RAM */
+ if (!cojag_is_r3000)
+ memcpy(jaguar_shared_ram, rom_base, 0x10);
+
+ /* configure banks for gfx/sound ROMs */
+ if (memory_region(REGION_USER2))
+ {
+ /* graphics banks */
+ if (cojag_is_r3000)
+ {
+ memory_configure_bank(1, 0, 2, memory_region(REGION_USER2) + 0x800000, 0x400000);
+ memory_set_bank(1, 0);
+ }
+ memory_configure_bank(8, 0, 2, memory_region(REGION_USER2) + 0x800000, 0x400000);
+ memory_set_bank(8, 0);
+
+ /* sound banks */
+ memory_configure_bank(2, 0, 8, memory_region(REGION_USER2) + 0x000000, 0x200000);
+ memory_configure_bank(9, 0, 8, memory_region(REGION_USER2) + 0x000000, 0x200000);
+ memory_set_bank(2, 0);
+ memory_set_bank(9, 0);
+ }
+
+ /* clear any spinuntil stuff */
+ jaguar_gpu_resume();
+ jaguar_dsp_resume();
+
+ /* halt the CPUs */
+ jaguargpu_ctrl_w(1, G_CTRL, 0, 0);
+ jaguardsp_ctrl_w(2, D_CTRL, 0, 0);
+
+ /* init the sound system */
+ cojag_sound_reset();
+
+ /* reset the IDE controller */
+ ide_controller_reset(0);
+}
+
+
+
+/*************************************
+ *
+ * Misc. control bits
+ *
+ *************************************/
+
+static READ32_HANDLER( misc_control_r )
+{
+ /* D7 = board reset (low)
+ D6 = audio must & reset (high)
+ D5 = volume control data (invert on write)
+ D4 = volume control clock
+ D3-D1 = audio bank 2-0
+ D0 = shared memory select (0=XBUS) */
+
+ return misc_control_data ^ 0x20;
+}
+
+
+static WRITE32_HANDLER( misc_control_w )
+{
+ logerror("%08X:misc_control_w(%02X)\n", activecpu_get_previouspc(), data);
+
+ /* D7 = board reset (low)
+ D6 = audio must & reset (high)
+ D5 = volume control data (invert on write)
+ D4 = volume control clock
+ D3-D1 = audio bank 2-0
+ D0 = shared memory select (0=XBUS) */
+
+ /* handle resetting the DSPs */
+ if (!(data & 0x80))
+ {
+ /* clear any spinuntil stuff */
+ jaguar_gpu_resume();
+ jaguar_dsp_resume();
+
+ /* halt the CPUs */
+ jaguargpu_ctrl_w(1, G_CTRL, 0, 0);
+ jaguardsp_ctrl_w(2, D_CTRL, 0, 0);
+ }
+
+ /* adjust banking */
+ if (memory_region(REGION_USER2))
+ {
+ memory_set_bank(2, (data >> 1) & 7);
+ memory_set_bank(9, (data >> 1) & 7);
+ }
+
+ COMBINE_DATA(&misc_control_data);
+}
+
+
+
+/*************************************
+ *
+ * 32-bit access to the GPU
+ *
+ *************************************/
+
+static READ32_HANDLER( gpuctrl_r )
+{
+ return jaguargpu_ctrl_r(1, offset);
+}
+
+
+static WRITE32_HANDLER( gpuctrl_w )
+{
+ jaguargpu_ctrl_w(1, offset, data, mem_mask);
+}
+
+
+
+/*************************************
+ *
+ * 32-bit access to the DSP
+ *
+ *************************************/
+
+static READ32_HANDLER( dspctrl_r )
+{
+ return jaguardsp_ctrl_r(2, offset);
+}
+
+
+static WRITE32_HANDLER( dspctrl_w )
+{
+ jaguardsp_ctrl_w(2, offset, data, mem_mask);
+}
+
+
+static READ32_HANDLER( jaguar_wave_rom_r )
+{
+ return jaguar_wave_rom[offset];
+}
+
+/*************************************
+ *
+ * Input ports
+ *
+ *************************************/
+
+static READ32_HANDLER( jamma_r )
+{
+ return readinputport(0) | (readinputport(1) << 16);
+}
+
+
+static READ32_HANDLER( status_r )
+{
+ // D23-20 = /SER-4-1
+ // D19-16 = COINR4-1
+ // D7 = /VSYNCNEQ
+ // D6 = /S-TEST
+ // D5 = /VOLUMEUP
+ // D4 = /VOLUMEDOWN
+ // D3-D0 = ACTC4-1
+ return readinputport(2) | (readinputport(2) << 16);
+}
+
+
+
+/*************************************
+ *
+ * Output ports
+ *
+ *************************************/
+
+static WRITE32_HANDLER( latch_w )
+{
+ logerror("%08X:latch_w(%X)\n", activecpu_get_previouspc(), data);
+
+ /* adjust banking */
+ if (memory_region(REGION_USER2))
+ {
+ if (cojag_is_r3000)
+ memory_set_bank(1, data & 1);
+ memory_set_bank(8, data & 1);
+ }
+}
+
+
+
+/*************************************
+ *
+ * EEPROM access
+ *
+ *************************************/
+
+static READ32_HANDLER( eeprom_data_r )
+{
+ if (cojag_is_r3000)
+ return generic_nvram32[offset] | 0xffffff00;
+ else
+ return generic_nvram32[offset] | 0x00ffffff;
+}
+
+
+static WRITE32_HANDLER( eeprom_enable_w )
+{
+ eeprom_enable = 1;
+}
+
+
+static WRITE32_HANDLER( eeprom_data_w )
+{
+// if (eeprom_enable)
+ {
+ if (cojag_is_r3000)
+ generic_nvram32[offset] = data & 0x000000ff;
+ else
+ generic_nvram32[offset] = data & 0xff000000;
+ }
+// else
+// logerror("%08X:error writing to disabled EEPROM\n", activecpu_get_previouspc());
+ eeprom_enable = 0;
+}
+
+
+
+/*************************************
+ *
+ * GPU synchronization & speedup
+ *
+ *************************************/
+
+/*
+ Explanation:
+
+ The GPU generally sits in a tight loop waiting for the main CPU to store
+ a jump address into a specific memory location. This speedup is designed
+ to catch that loop, which looks like this:
+
+ load (r28),r21
+ jump (r21)
+ nop
+
+ When nothing is pending, the GPU keeps the address of the load instruction
+ at (r28) so that it loops back on itself. When the main CPU wants to execute
+ a command, it stores an alternate address to (r28).
+
+ Even if we don't optimize this case, we do need to detect when a command
+ is written to the GPU in order to improve synchronization until the GPU
+ has finished. To do this, we start a temporary high frequency timer and
+ run it until we get back to the spin loop.
+*/
+
+static UINT32 *gpu_jump_address;
+static UINT8 gpu_command_pending;
+static UINT32 gpu_spin_pc;
+
+static TIMER_CALLBACK( gpu_sync_timer )
+{
+ /* if a command is still pending, and we haven't maxed out our timer, set a new one */
+ if (gpu_command_pending && param < 1000)
+ timer_set(ATTOTIME_IN_USEC(50), ++param, gpu_sync_timer);
+}
+
+
+static WRITE32_HANDLER( gpu_jump_w )
+{
+ /* update the data in memory */
+ COMBINE_DATA(gpu_jump_address);
+ logerror("%08X:GPU jump address = %08X\n", activecpu_get_previouspc(), *gpu_jump_address);
+
+ /* if the GPU is suspended, release it now */
+ jaguar_gpu_resume();
+
+ /* start the sync timer going, and note that there is a command pending */
+ timer_call_after_resynch(0, gpu_sync_timer);
+ gpu_command_pending = 1;
+}
+
+
+static READ32_HANDLER( gpu_jump_r )
+{
+ /* if the current GPU command is just pointing back to the spin loop, and */
+ /* we're reading it from the spin loop, we can optimize */
+ if (*gpu_jump_address == gpu_spin_pc && activecpu_get_previouspc() == gpu_spin_pc)
+ {
+#if ENABLE_SPEEDUP_HACKS
+ /* spin if we're allowed */
+ jaguar_gpu_suspend();
+#endif
+
+ /* no command is pending */
+ gpu_command_pending = 0;
+ }
+
+ /* return the current value */
+ return *gpu_jump_address;
+}
+
+
+
+/*************************************
+ *
+ * Main CPU speedup (R3000 games)
+ *
+ *************************************/
+
+/*
+ Explanation:
+
+ Instead of sitting in a tight loop, the CPU will run the random number
+ generator over and over while waiting for an interrupt. In order to catch
+ that, we snoop the memory location it is polling, and see if it is read
+ at least 5 times in a row, each time less than 200 cycles apart. If so,
+ we assume it is spinning. Also, by waiting for 5 iterations, we let it
+ crank through some random numbers, just not several thousand every frame.
+*/
+
+#if ENABLE_SPEEDUP_HACKS
+
+static UINT32 *main_speedup;
+static int main_speedup_hits;
+static UINT32 main_speedup_last_cycles;
+static UINT32 main_speedup_max_cycles;
+
+static READ32_HANDLER( cojagr3k_main_speedup_r )
+{
+ UINT32 curcycles = activecpu_gettotalcycles();
+
+ /* if it's been less than main_speedup_max_cycles cycles since the last time */
+ if (curcycles - main_speedup_last_cycles < main_speedup_max_cycles)
+ {
+ /* increment the count; if we hit 5, we can spin until an interrupt comes */
+ if (main_speedup_hits++ > 5)
+ {
+ cpu_spinuntil_int();
+ main_speedup_hits = 0;
+ }
+ }
+
+ /* if it's been more than main_speedup_max_cycles cycles, reset our count */
+ else
+ main_speedup_hits = 0;
+
+ /* remember the last cycle count */
+ main_speedup_last_cycles = curcycles;
+
+ /* return the real value */
+ return *main_speedup;
+}
+
+#endif
+
+
+
+/*************************************
+ *
+ * Additional main CPU speedup
+ * (Freeze only)
+ *
+ *************************************/
+
+/*
+ Explanation:
+
+ The main CPU hands data off to the GPU to process. But rather than running
+ in parallel, the main CPU just sits and waits for the result. This speedup
+ makes sure we don't waste time emulating that spin loop.
+*/
+
+#if ENABLE_SPEEDUP_HACKS
+
+static UINT32 *main_gpu_wait;
+
+static READ32_HANDLER( main_gpu_wait_r )
+{
+ if (gpu_command_pending)
+ cpu_spinuntil_int();
+ return *main_gpu_wait;
+}
+
+#endif
+
+
+
+/*************************************
+ *
+ * Main CPU speedup (Area 51)
+ *
+ *************************************/
+
+/*
+ Explanation:
+
+ Very similar to the R3000 code, except we need to verify that the value in
+ *main_speedup is actually 0.
+*/
+
+#if ENABLE_SPEEDUP_HACKS
+
+static WRITE32_HANDLER( area51_main_speedup_w )
+{
+ UINT32 curcycles = activecpu_gettotalcycles();
+
+ /* store the data */
+ COMBINE_DATA(main_speedup);
+
+ /* if it's been less than 400 cycles since the last time */
+ if (*main_speedup == 0 && curcycles - main_speedup_last_cycles < 400)
+ {
+ /* increment the count; if we hit 5, we can spin until an interrupt comes */
+ if (main_speedup_hits++ > 5)
+ {
+ cpu_spinuntil_int();
+ main_speedup_hits = 0;
+ }
+ }
+
+ /* if it's been more than 400 cycles, reset our count */
+ else
+ main_speedup_hits = 0;
+
+ /* remember the last cycle count */
+ main_speedup_last_cycles = curcycles;
+}
+
+
+/*
+ Explanation:
+
+ The Area 51/Maximum Force duo writes to a non-aligned address, so our check
+ against 0 must handle that explicitly.
+*/
+
+static WRITE32_HANDLER( area51mx_main_speedup_w )
+{
+ UINT32 curcycles = activecpu_gettotalcycles();
+
+ /* store the data */
+ COMBINE_DATA(&main_speedup[offset]);
+
+ /* if it's been less than 450 cycles since the last time */
+ if (((main_speedup[0] << 16) | (main_speedup[1] >> 16)) == 0 && curcycles - main_speedup_last_cycles < 450)
+ {
+ /* increment the count; if we hit 5, we can spin until an interrupt comes */
+ if (main_speedup_hits++ > 10)
+ {
+ cpu_spinuntil_int();
+ main_speedup_hits = 0;
+ }
+ }
+
+ /* if it's been more than 450 cycles, reset our count */
+ else
+ main_speedup_hits = 0;
+
+ /* remember the last cycle count */
+ main_speedup_last_cycles = curcycles;
+}
+
+#endif
+
+
+
+/*************************************
+ *
+ * Main CPU memory handlers
+ *
+ *************************************/
+
+static ADDRESS_MAP_START( r3000_map, ADDRESS_SPACE_PROGRAM, 32 )
+ AM_RANGE(0x04000000, 0x047fffff) AM_RAM AM_BASE(&jaguar_shared_ram) AM_SHARE(1)
+ AM_RANGE(0x04800000, 0x04bfffff) AM_ROMBANK(1)
+ AM_RANGE(0x04c00000, 0x04dfffff) AM_ROMBANK(2)
+ AM_RANGE(0x04e00000, 0x04e003ff) AM_READWRITE(ide_controller32_0_r, ide_controller32_0_w)
+ AM_RANGE(0x04f00000, 0x04f003ff) AM_READWRITE(jaguar_tom_regs32_r, jaguar_tom_regs32_w)
+ AM_RANGE(0x04f00400, 0x04f007ff) AM_RAM AM_BASE(&jaguar_gpu_clut) AM_SHARE(2)
+ AM_RANGE(0x04f02100, 0x04f021ff) AM_READWRITE(gpuctrl_r, gpuctrl_w)
+ AM_RANGE(0x04f02200, 0x04f022ff) AM_READWRITE(jaguar_blitter_r, jaguar_blitter_w)
+ AM_RANGE(0x04f03000, 0x04f03fff) AM_MIRROR(0x00008000) AM_RAM AM_BASE(&jaguar_gpu_ram) AM_SHARE(3)
+ AM_RANGE(0x04f10000, 0x04f103ff) AM_READWRITE(jaguar_jerry_regs32_r, jaguar_jerry_regs32_w)
+ AM_RANGE(0x04f16000, 0x04f1600b) AM_READ(cojag_gun_input_r) // GPI02
+ AM_RANGE(0x04f17000, 0x04f17003) AM_READ(status_r) // GPI03
+ AM_RANGE(0x04f17800, 0x04f17803) AM_WRITE(latch_w) // GPI04
+ AM_RANGE(0x04f17c00, 0x04f17c03) AM_READ(jamma_r) // GPI05
+ AM_RANGE(0x04f1a100, 0x04f1a13f) AM_READWRITE(dspctrl_r, dspctrl_w)
+ AM_RANGE(0x04f1a140, 0x04f1a17f) AM_READWRITE(jaguar_serial_r, jaguar_serial_w)
+ AM_RANGE(0x04f1b000, 0x04f1cfff) AM_RAM AM_BASE(&jaguar_dsp_ram) AM_SHARE(4)
+
+ AM_RANGE(0x06000000, 0x06000003) AM_READWRITE(misc_control_r, misc_control_w)
+ AM_RANGE(0x10000000, 0x1007ffff) AM_RAM
+ AM_RANGE(0x12000000, 0x120fffff) AM_RAM // tested in self-test only?
+ AM_RANGE(0x14000004, 0x14000007) AM_WRITE(watchdog_reset32_w)
+ AM_RANGE(0x16000000, 0x16000003) AM_WRITE(eeprom_enable_w)
+ AM_RANGE(0x18000000, 0x18001fff) AM_READWRITE(eeprom_data_r, eeprom_data_w) AM_BASE(&generic_nvram32) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x1fc00000, 0x1fdfffff) AM_ROM AM_REGION(REGION_USER1, 0) AM_BASE(&rom_base)
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( m68020_map, ADDRESS_SPACE_PROGRAM, 32 )
+ AM_RANGE(0x000000, 0x7fffff) AM_RAM AM_BASE(&jaguar_shared_ram) AM_SHARE(1)
+ AM_RANGE(0x800000, 0x9fffff) AM_ROM AM_REGION(REGION_USER1, 0) AM_BASE(&rom_base)
+ AM_RANGE(0xa00000, 0xa1ffff) AM_RAM
+ AM_RANGE(0xa20000, 0xa21fff) AM_READWRITE(eeprom_data_r, eeprom_data_w) AM_BASE(&generic_nvram32) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0xa30000, 0xa30003) AM_WRITE(watchdog_reset32_w)
+ AM_RANGE(0xa40000, 0xa40003) AM_WRITE(eeprom_enable_w)
+ AM_RANGE(0xb70000, 0xb70003) AM_READWRITE(misc_control_r, misc_control_w)
+ AM_RANGE(0xc00000, 0xdfffff) AM_ROMBANK(2)
+ AM_RANGE(0xe00000, 0xe003ff) AM_READWRITE(ide_controller32_0_r, ide_controller32_0_w)
+ AM_RANGE(0xf00000, 0xf003ff) AM_READWRITE(jaguar_tom_regs32_r, jaguar_tom_regs32_w)
+ AM_RANGE(0xf00400, 0xf007ff) AM_RAM AM_BASE(&jaguar_gpu_clut) AM_SHARE(2)
+ AM_RANGE(0xf02100, 0xf021ff) AM_READWRITE(gpuctrl_r, gpuctrl_w)
+ AM_RANGE(0xf02200, 0xf022ff) AM_READWRITE(jaguar_blitter_r, jaguar_blitter_w)
+ AM_RANGE(0xf03000, 0xf03fff) AM_MIRROR(0x008000) AM_RAM AM_BASE(&jaguar_gpu_ram) AM_SHARE(3)
+ AM_RANGE(0xf10000, 0xf103ff) AM_READWRITE(jaguar_jerry_regs32_r, jaguar_jerry_regs32_w)
+ AM_RANGE(0xf16000, 0xf1600b) AM_READ(cojag_gun_input_r) // GPI02
+ AM_RANGE(0xf17000, 0xf17003) AM_READ(status_r) // GPI03
+// AM_RANGE(0xf17800, 0xf17803) AM_WRITE(latch_w) // GPI04
+ AM_RANGE(0xf17c00, 0xf17c03) AM_READ(jamma_r) // GPI05
+ AM_RANGE(0xf1a100, 0xf1a13f) AM_READWRITE(dspctrl_r, dspctrl_w)
+ AM_RANGE(0xf1a140, 0xf1a17f) AM_READWRITE(jaguar_serial_r, jaguar_serial_w)
+ AM_RANGE(0xf1b000, 0xf1cfff) AM_RAM AM_BASE(&jaguar_dsp_ram) AM_SHARE(4)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * GPU memory handlers
+ *
+ *************************************/
+
+static ADDRESS_MAP_START( gpu_map, ADDRESS_SPACE_PROGRAM, 32 )
+ AM_RANGE(0x000000, 0x7fffff) AM_RAM AM_SHARE(1)
+ AM_RANGE(0x800000, 0xbfffff) AM_ROMBANK(8)
+ AM_RANGE(0xc00000, 0xdfffff) AM_ROMBANK(9)
+ AM_RANGE(0xe00000, 0xe003ff) AM_READWRITE(ide_controller32_0_r, ide_controller32_0_w)
+ AM_RANGE(0xf00000, 0xf003ff) AM_READWRITE(jaguar_tom_regs32_r, jaguar_tom_regs32_w)
+ AM_RANGE(0xf00400, 0xf007ff) AM_RAM AM_SHARE(2)
+ AM_RANGE(0xf02100, 0xf021ff) AM_READWRITE(gpuctrl_r, gpuctrl_w)
+ AM_RANGE(0xf02200, 0xf022ff) AM_READWRITE(jaguar_blitter_r, jaguar_blitter_w)
+ AM_RANGE(0xf03000, 0xf03fff) AM_RAM AM_SHARE(3)
+ AM_RANGE(0xf10000, 0xf103ff) AM_READWRITE(jaguar_jerry_regs32_r, jaguar_jerry_regs32_w)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * DSP memory handlers
+ *
+ *************************************/
+
+static ADDRESS_MAP_START( dsp_map, ADDRESS_SPACE_PROGRAM, 32 )
+ AM_RANGE(0x000000, 0x7fffff) AM_RAM AM_SHARE(1)
+ AM_RANGE(0x800000, 0xbfffff) AM_ROMBANK(8)
+ AM_RANGE(0xc00000, 0xdfffff) AM_ROMBANK(9)
+ AM_RANGE(0xf10000, 0xf103ff) AM_READWRITE(jaguar_jerry_regs32_r, jaguar_jerry_regs32_w)
+ AM_RANGE(0xf1a100, 0xf1a13f) AM_READWRITE(dspctrl_r, dspctrl_w)
+ AM_RANGE(0xf1a140, 0xf1a17f) AM_READWRITE(jaguar_serial_r, jaguar_serial_w)
+ AM_RANGE(0xf1b000, 0xf1cfff) AM_RAM AM_SHARE(4)
+ AM_RANGE(0xf1d000, 0xf1dfff) AM_READ(jaguar_wave_rom_r) AM_BASE(&jaguar_wave_rom)
+ADDRESS_MAP_END
+
+
+
+/*************************************
+ *
+ * Port definitions
+ *
+ *************************************/
+
+static INPUT_PORTS_START( area51 )
+ PORT_START
+ PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START
+ PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_VOLUME_DOWN )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_VOLUME_UP )
+ PORT_SERVICE( 0x0040, IP_ACTIVE_LOW ) // s-test
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) // vsyncneq
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START /* fake analog X */
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 320.0/(320.0 - 7 -7), 0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10)
+
+ PORT_START /* fake analog Y */
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, (240.0 - 1)/240, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10)
+
+ PORT_START /* fake analog X */
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 320.0/(320.0 - 7 -7), 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2)
+
+ PORT_START /* fake analog Y */
+ PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, (240.0 - 1)/240, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2)
+
+ PORT_START /* gun triggers */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL ) // gun data valid
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SPECIAL ) // gun data valid
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( freezeat )
+ PORT_START
+ PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+
+ PORT_START
+ PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL ) // volume down
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) // volume up
+ PORT_SERVICE( 0x0040, IP_ACTIVE_LOW ) // s-test
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) // vsyncneq
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START
+ PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_SPECIAL ) // coin returns
+ PORT_BIT( 0x00f0, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( fishfren )
+ PORT_START
+ PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+
+ PORT_START
+ PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL ) // volume down
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) // volume up
+ PORT_SERVICE( 0x0040, IP_ACTIVE_LOW ) // s-test
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) // vsyncneq
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START
+ PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_SPECIAL ) // coin returns
+ PORT_BIT( 0x00f0, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( vcircle )
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
+ PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1)
+ PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_VOLUME_DOWN )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_VOLUME_UP )
+ PORT_SERVICE( 0x0040, IP_ACTIVE_LOW ) // s-test
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) // vsyncneq
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START
+ PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_SPECIAL ) // coin returns
+ PORT_BIT( 0x00f0, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+
+/*************************************
+ *
+ * Machine driver
+ *
+ *************************************/
+
+static struct r3000_config config =
+{
+ 0, /* 1 if we have an FPU, 0 otherwise */
+ 4096, /* code cache size */
+ 4096 /* data cache size */
+};
+
+
+static struct jaguar_config gpu_config =
+{
+ jaguar_gpu_cpu_int
+};
+
+
+static struct jaguar_config dsp_config =
+{
+ jaguar_dsp_cpu_int
+};
+
+
+static MACHINE_DRIVER_START( cojagr3k )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(R3000BE, 66000000/2)
+ MDRV_CPU_CONFIG(config)
+ MDRV_CPU_PROGRAM_MAP(r3000_map,0)
+
+ MDRV_CPU_ADD(JAGUARGPU, 52000000/2)
+ MDRV_CPU_CONFIG(gpu_config)
+ MDRV_CPU_PROGRAM_MAP(gpu_map,0)
+
+ MDRV_CPU_ADD(JAGUARDSP, 52000000/2)
+ MDRV_CPU_CONFIG(dsp_config)
+ MDRV_CPU_PROGRAM_MAP(dsp_map,0)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+
+ MDRV_MACHINE_RESET(cojag)
+ MDRV_NVRAM_HANDLER(generic_1fill)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_UPDATE_BEFORE_VBLANK)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(42*8, 262) /* guess -- TOM registers should be used to configure screen */
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 42*8-1, 0*8, 30*8-1)
+ MDRV_PALETTE_LENGTH(65534)
+
+ MDRV_VIDEO_START(cojag)
+ MDRV_VIDEO_UPDATE(cojag)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( r3knarrow )
+ MDRV_IMPORT_FROM(cojagr3k)
+
+ /* video hardware */
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( cojag68k )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M68EC020, 50000000/2)
+ MDRV_CPU_PROGRAM_MAP(m68020_map,0)
+
+ MDRV_CPU_ADD(JAGUARGPU, 52000000/2)
+ MDRV_CPU_CONFIG(gpu_config)
+ MDRV_CPU_PROGRAM_MAP(gpu_map,0)
+
+ MDRV_CPU_ADD(JAGUARDSP, 52000000/2)
+ MDRV_CPU_CONFIG(dsp_config)
+ MDRV_CPU_PROGRAM_MAP(dsp_map,0)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+
+ MDRV_MACHINE_RESET(cojag)
+ MDRV_NVRAM_HANDLER(generic_1fill)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_UPDATE_BEFORE_VBLANK)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(42*8, 262) /* guess -- TOM registers should be used to configure screen */
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
+ MDRV_PALETTE_LENGTH(65534)
+
+ MDRV_VIDEO_START(cojag)
+ MDRV_VIDEO_UPDATE(cojag)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0)
+
+ MDRV_SOUND_ADD(DAC, 0)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0)
+MACHINE_DRIVER_END
+
+
+
+/*************************************
+ *
+ * ROM definition(s)
+ *
+ * Date Information comes from either
+ * ROM labels or from the Self-Test
+ * as "Main"
+ *
+ *************************************/
+
+/****************************************
+
+ ROM & Hard Disk based games
+
+****************************************/
+
+ROM_START( area51t ) /* 68020 based, Area51 Time Warner License Date: Nov 15, 1995 */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for 68020 code */
+ ROM_LOAD32_BYTE( "3h.bin", 0x00000, 0x80000, CRC(e70a97c4) SHA1(39dabf6bf3dc6f717a587f362d040bfb332be9e1) )
+ ROM_LOAD32_BYTE( "3p.bin", 0x00001, 0x80000, CRC(e9c9f4bd) SHA1(7c6c50372d45dca8929767241b092339f3bab4d2) )
+ ROM_LOAD32_BYTE( "3m.bin", 0x00002, 0x80000, CRC(6f135a81) SHA1(2d9660f240b14481e8c46bc98713e9dc12035063) )
+ ROM_LOAD32_BYTE( "3k.bin", 0x00003, 0x80000, CRC(94f50c14) SHA1(a54552e3ac5c4f481ba4f2fc7d724534576fe76c) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "area51t", 0, MD5(60d051da941d76aafd47c862e3b6e209) SHA1(fee528eef8a256f87af299499ecf5817218f5202) )
+ROM_END
+
+ROM_START( area51a ) /* 68020 based, Area51 Atari Games License Date: Oct 25, 1995 */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for 68020 code */
+ ROM_LOAD32_BYTE( "3h", 0x00000, 0x80000, CRC(116d37e6) SHA1(5d36cae792dd349faa77cd2d8018722a28ee55c1) )
+ ROM_LOAD32_BYTE( "3p", 0x00001, 0x80000, CRC(eb10f539) SHA1(dadc4be5a442dd4bd17385033056555e528ed994) )
+ ROM_LOAD32_BYTE( "3m", 0x00002, 0x80000, CRC(c6d8322b) SHA1(90cf848a4195c51b505653cc2c74a3b9e3c851b8) )
+ ROM_LOAD32_BYTE( "3k", 0x00003, 0x80000, CRC(729eb1b7) SHA1(21864b4281b1ad17b2903e3aa294e4be74161e80) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "area51", 0, MD5(130b330eff59403f8fc3433ff501852b) SHA1(9ea749404c9a5d44f407cdb8803293ec0d61410d) )
+ROM_END
+
+ROM_START( area51 ) /* R3000 based, labeled as "Area51 2-C" Date: Nov 11 1996 */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for IDT 79R3041 code */
+ ROM_LOAD32_BYTE( "a51_2-c.hh", 0x00000, 0x80000, CRC(13af6a1e) SHA1(69da54ed6886e825156bbcc256e8d7abd4dc1ff8) )
+ ROM_LOAD32_BYTE( "a51_2-c.hl", 0x00001, 0x80000, CRC(8ab6649b) SHA1(9b4945bc04f8a73161638a2c5fa2fd84c6fd31b4) )
+ ROM_LOAD32_BYTE( "a51_2-c.lh", 0x00002, 0x80000, CRC(a6524f73) SHA1(ae377a6803a4f7d1bbcc111725af121a3e82317d) )
+ ROM_LOAD32_BYTE( "a51_2-c.ll", 0x00003, 0x80000, CRC(471b15d2) SHA1(4b5f45ee140b03a6be61475cae1c2dbef0f07457) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "area51", 0, MD5(130b330eff59403f8fc3433ff501852b) SHA1(9ea749404c9a5d44f407cdb8803293ec0d61410d) )
+ROM_END
+
+ROM_START( maxforce ) /* R3000 based, labeled as "Maximum Force 5-23-97 v1.05" */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for IDT 79R3041 code */
+ ROM_LOAD32_BYTE( "maxf_105.hh", 0x00000, 0x80000, CRC(ec7f8167) SHA1(0cf057bfb1f30c2c9621d3ed25021e7ba7bdd46e) )
+ ROM_LOAD32_BYTE( "maxf_105.hl", 0x00001, 0x80000, CRC(3172611c) SHA1(00f14f871b737c66c20f95743740d964d0be3f24) )
+ ROM_LOAD32_BYTE( "maxf_105.lh", 0x00002, 0x80000, CRC(84d49423) SHA1(88d9a6724f1118f2bbef5dfa27accc2b65c5ba1d) )
+ ROM_LOAD32_BYTE( "maxf_105.ll", 0x00003, 0x80000, CRC(16d0768d) SHA1(665a6d7602a7f2f5b1f332b0220b1533143d56b1) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "maxforce", 0, MD5(b0a214c7b3f8ba9d592396332fc974c9) SHA1(59d77280afdb2d1f801ee81786aa7d3166ec2695) )
+ROM_END
+
+
+ROM_START( maxf_102 ) /* R3000 based, labeled as "Maximum Force 2-27-97 v1.02" */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for IDT 79R3041 code */
+ ROM_LOAD32_BYTE( "maxf_102.hh", 0x00000, 0x80000, CRC(8ff7009d) SHA1(da22eae298a6e0e36f503fa091ac3913423dcd0f) )
+ ROM_LOAD32_BYTE( "maxf_102.hl", 0x00001, 0x80000, CRC(96c2cc1d) SHA1(b332b8c042b92c736131c478cefac1c3c2d2673b) )
+ ROM_LOAD32_BYTE( "maxf_102.lh", 0x00002, 0x80000, CRC(459ffba5) SHA1(adb40db6904e84c17f32ac6518fd2e994da7883f) )
+ ROM_LOAD32_BYTE( "maxf_102.ll", 0x00003, 0x80000, CRC(e491be7f) SHA1(cbe281c099a4aa87067752d68cf2bb0ab3900531) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "maxforce", 0, MD5(b0a214c7b3f8ba9d592396332fc974c9) SHA1(59d77280afdb2d1f801ee81786aa7d3166ec2695) )
+ROM_END
+
+
+ROM_START( maxf_ng ) /* R3000 based, stickers say 'NO GORE' */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for IDT 79R3041 code */
+ ROM_LOAD32_BYTE( "mf_ng_hh.21v", 0x00000, 0x80000, CRC(08791c02) SHA1(9befbff3201c7d345109b26c296fd8548dbfc95b) )
+ ROM_LOAD32_BYTE( "mf_ng_hl.17v", 0x00001, 0x80000, CRC(52cf482c) SHA1(ff98b3f04987acef82a97a2ad35a9085fa84e6d5) )
+ ROM_LOAD32_BYTE( "mf_ng_lh.21y", 0x00002, 0x80000, CRC(ab4ee992) SHA1(69f0fe111d3f5f31151d2922579e5073e484b1e1) )
+ ROM_LOAD32_BYTE( "mf_ng_ll.17y", 0x00003, 0x80000, CRC(674aab43) SHA1(f79d790538756d1100b7e4ffed192a62a031a2cb) )
+
+ ROM_REGION( 0x800, REGION_USER2, 0 ) /* 28C16 style eeprom, currently loaded but not used */
+ ROM_LOAD( "28c16.17z", 0x000, 0x800, CRC(1cdd9088) SHA1(4f01f02ff95f31ced87a3cdd7f171afd92551266) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "maxforce", 0, MD5(b0a214c7b3f8ba9d592396332fc974c9) SHA1(59d77280afdb2d1f801ee81786aa7d3166ec2695) )
+ROM_END
+
+
+ROM_START( area51mx ) /* 68020 based, Labeled as "68020 MAX/A51 KIT 2.0" Date: Apr 22, 1998 */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for 68020 code */
+ ROM_LOAD32_BYTE( "area51mx.3h", 0x00000, 0x80000, CRC(47cbf30b) SHA1(23377bcc65c0fc330d5bc7e76e233bae043ac364) )
+ ROM_LOAD32_BYTE( "area51mx.3p", 0x00001, 0x80000, CRC(a3c93684) SHA1(f6b3357bb69900a176fd6bc6b819b2f57b7d0f59) )
+ ROM_LOAD32_BYTE( "area51mx.3m", 0x00002, 0x80000, CRC(d800ac17) SHA1(3d515c8608d8101ee9227116175b3c3f1fe22e0c) )
+ ROM_LOAD32_BYTE( "area51mx.3k", 0x00003, 0x80000, CRC(0e78f308) SHA1(adc4c8e441eb8fe525d0a6220eb3a2a8791a7289) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "area51mx", 0, MD5(fce1a0954759fa22e50747959716823d) SHA1(7e629045eb5baa8cd522273befffbf8520828938) )
+ROM_END
+
+
+ROM_START( a51mxr3k ) /* R3000 based, Labeled as "R3K Max/A51 Kit Ver 1.0" */
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for IDT 79R3041 code */
+ ROM_LOAD32_BYTE( "a51mxr3k.hh", 0x00000, 0x80000, CRC(a984dab2) SHA1(debb3bc11ff49e87a52e89a69533a1bab7db700e) )
+ ROM_LOAD32_BYTE( "a51mxr3k.hl", 0x00001, 0x80000, CRC(0af49d74) SHA1(c19f26056a823fd32293e9a7b3ea868640eabf49) )
+ ROM_LOAD32_BYTE( "a51mxr3k.lh", 0x00002, 0x80000, CRC(d7d94dac) SHA1(2060a74715f36a0d7f5dd0855eda48ad1f20f095) )
+ ROM_LOAD32_BYTE( "a51mxr3k.ll", 0x00003, 0x80000, CRC(ece9e5ae) SHA1(7e44402726f5afa6d1670b27aa43ad13d21c4ad9) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "area51mx", 0, MD5(fce1a0954759fa22e50747959716823d) SHA1(7e629045eb5baa8cd522273befffbf8520828938) )
+ROM_END
+
+
+ROM_START( vcircle )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "hh", 0x00000, 0x80000, CRC(7276f5f5) SHA1(716287e370a4f300b1743103f8031afc82de38ca) )
+ ROM_LOAD32_BYTE( "hl", 0x00001, 0x80000, CRC(146060a1) SHA1(f291989f1f0ef228757f1990fb14da5ff8f3cf8d) )
+ ROM_LOAD32_BYTE( "lh", 0x00002, 0x80000, CRC(be4b2ef6) SHA1(4332b3036e9cb12685e914d085d9a63aa856f0be) )
+ ROM_LOAD32_BYTE( "ll", 0x00003, 0x80000, CRC(ba8753eb) SHA1(0322e0e37d814a38d08ba191b1a97fb1a55fe461) )
+
+ DISK_REGION( REGION_DISKS )
+ DISK_IMAGE( "vcircle", 0, MD5(fc316bd92363573d60083514223c6816) SHA1(f1d3e3d081d10ec42d07cd695d52b44812264983) )
+ROM_END
+
+/****************************************
+
+ ROM based games
+
+****************************************/
+
+
+ROM_START( fishfren )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "hh", 0x00000, 0x80000, CRC(2ef79767) SHA1(abcea584f2cbd71b05f9d7e61f40ca9da6799215) )
+ ROM_LOAD32_BYTE( "hl", 0x00001, 0x80000, CRC(7eefd4a2) SHA1(181be04836704098082fd78cacc68ffa70e77892) )
+ ROM_LOAD32_BYTE( "lh", 0x00002, 0x80000, CRC(bbe9ed15) SHA1(889af29afe6d984b39105aa238400392a5dfb2c5) )
+ ROM_LOAD32_BYTE( "ll", 0x00003, 0x80000, CRC(d70d0f2c) SHA1(2689cbe56ae3d491348b241528b0fe345fa8484c) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "l63-56", 0x000000, 0x100000, CRC(42764ea5) SHA1(805245f01006bd974fbac56f688cfcf137ddc914), ROM_SKIP(7) )
+ ROMX_LOAD( "l55-48", 0x000001, 0x100000, CRC(0c7592bb) SHA1(d5bd6b872abad58947842205f9eac46fd065e88f), ROM_SKIP(7) )
+ ROMX_LOAD( "l47-40", 0x000002, 0x100000, CRC(6d7dcdb1) SHA1(914dae3b9df5c861f794b683571c5fb0c2c3c3fd), ROM_SKIP(7) )
+ ROMX_LOAD( "l39-32", 0x000003, 0x100000, CRC(ef3b8d98) SHA1(858c3342e9693bfe887b91dde1116a1656a1a105), ROM_SKIP(7) )
+ ROMX_LOAD( "l31-24", 0x000004, 0x100000, CRC(132d628e) SHA1(3ff9fa86092eb01f21ca3ccf1ee1e3a583cbdecb), ROM_SKIP(7) )
+ ROMX_LOAD( "l23-16", 0x000005, 0x100000, CRC(b841f039) SHA1(79f661aee009aef2f5ad4122ae3e0ac94097a427), ROM_SKIP(7) )
+ ROMX_LOAD( "l15-08", 0x000006, 0x100000, CRC(0800214e) SHA1(5372f2c3470619a4967958c76055486f76b5f150), ROM_SKIP(7) )
+ ROMX_LOAD( "l07-00", 0x000007, 0x100000, CRC(f83b2e78) SHA1(83ee9d2bfba83e04fb794270926bd3e558c9aaa4), ROM_SKIP(7) )
+ ROMX_LOAD( "h63-56", 0x800000, 0x080000, CRC(67740765) SHA1(8b22413d25e0dbfe2227d1a8a023961a4c13cb76), ROM_SKIP(7) )
+ ROMX_LOAD( "h55-48", 0x800001, 0x080000, CRC(ffed0091) SHA1(6c8104acd7e6d95a111f9c7a4d3b6984293d72c4), ROM_SKIP(7) )
+ ROMX_LOAD( "h47-40", 0x800002, 0x080000, CRC(6f448f72) SHA1(3a298b9851e4ba7aa611aa6c2b0dcf06f4301463), ROM_SKIP(7) )
+ ROMX_LOAD( "h39-32", 0x800003, 0x080000, CRC(25a5bd67) SHA1(79f29bd36afb4574b9c923eee293964284713540), ROM_SKIP(7) )
+ ROMX_LOAD( "h31-24", 0x800004, 0x080000, CRC(e7088cc0) SHA1(4cb184de748c5633e669a4675e6db9920d34811e), ROM_SKIP(7) )
+ ROMX_LOAD( "h23-16", 0x800005, 0x080000, CRC(ab477a76) SHA1(ae9aa97dbc758cd741710fe08c6ea94a0a318451), ROM_SKIP(7) )
+ ROMX_LOAD( "h15-08", 0x800006, 0x080000, CRC(25a423f1) SHA1(7530cf2e28e0755bfcbd70789ef5cbbfb3d94f9f), ROM_SKIP(7) )
+ ROMX_LOAD( "h07-00", 0x800007, 0x080000, CRC(0f5f4cc6) SHA1(caa2b514fb1f2a815e63f7b8c6b79ce2dfa308c4), ROM_SKIP(7) )
+ ROM_COPY( REGION_USER2, 0x800000, 0xc00000, 0x400000 )
+ROM_END
+
+ROM_START( freezeat )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "prog_eng.hh", 0x000000, 0x040000, CRC(f7cffafd) SHA1(62369de4cf0a5abab86f6bcf9621028b9e171ec3) )
+ ROM_LOAD32_BYTE( "prog_eng.hl", 0x000001, 0x040000, CRC(17150705) SHA1(c5a32d334bffb58a816920cc1251a21acc5a6f92) )
+ ROM_LOAD32_BYTE( "prog_eng.lh", 0x000002, 0x040000, CRC(12a903bf) SHA1(41f5949d7ed2081917af8411f92666b754564b37) )
+ ROM_LOAD32_BYTE( "prog_eng.ll", 0x000003, 0x040000, CRC(cf69f971) SHA1(132b06f5fb49801fff7e5deb7aa71b44d5b1c6ca) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(b61061c5) SHA1(aeb409aa5073232d80ed81b27946e753290234f4), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(c85acf42) SHA1(c3365caeb126a83a7e7afcda25f05849ceb5c98b), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(67f78f59) SHA1(40b256a8939fad365c7e896cff4a959fcc70a477), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(6be0508a) SHA1(20f617278ce1666348822d80686cecd8d9b1bc78), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(905606e0) SHA1(866cd98ea2399fed96f76b16dce751e2c7cfdc98), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(cdeef6fa) SHA1(1b4d58951b662040540e7d51f88c1b6f282562ee), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(ad81f204) SHA1(58584a6c8c6cfb6366eaa10aba8a226e419f5ce9), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(10ce7254) SHA1(2a88d45dbe78ea8358ecd8522b38d775a2fdb34a), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.63-56", 0x800000, 0x100000, CRC(4a03f971) SHA1(1ae5ad9a6cd2d612c6519193134dcd5a3f6a5049), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.55-48", 0x800001, 0x100000, CRC(6bc00de0) SHA1(b1b180c33906826703452875ce250b28352e2797), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.47-40", 0x800002, 0x100000, CRC(41ccc677) SHA1(76ee042632cfdcc99a9bfb75f2a4ef04e08f101b), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.39-32", 0x800003, 0x100000, CRC(59a8fa03) SHA1(19e91a4791e0d2dbd8578cee0fa07c491204b0dc), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.31-24", 0x800004, 0x100000, CRC(c3bb50a1) SHA1(b868ac0812d1c13feae82d293bb323a93a72e1d3), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.23-16", 0x800005, 0x100000, CRC(237cfc93) SHA1(15f61dc621c5328cc7752c76b2b1dae265a5e886), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.15-08", 0x800006, 0x100000, CRC(65bec279) SHA1(5e99972279ee9ad32e67866fc63799579a10f2dd), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_eng.07-00", 0x800007, 0x100000, CRC(13fa20ad) SHA1(0a04fdea025109c0e604ef2a6d58cfb3adce9bd1), ROM_SKIP(7) )
+ROM_END
+
+ROM_START( freezejp )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "prog_jpn.hh", 0x000000, 0x040000, CRC(989302bf) SHA1(232927ec0a52b8bb587a3c206af8e1c6cde67860) )
+ ROM_LOAD32_BYTE( "prog_jpn.hl", 0x000001, 0x040000, CRC(6262b760) SHA1(12ca749f5cdc6db7d19f88a21f5f955b80206784) )
+ ROM_LOAD32_BYTE( "prog_jpn.lh", 0x000002, 0x040000, CRC(c6a12b0c) SHA1(971242b5b09e15164e7c335e684b5043510c6462) )
+ ROM_LOAD32_BYTE( "prog_jpn.ll", 0x000003, 0x040000, CRC(241ea755) SHA1(0db3cfbe577fc78387528390ebb14dbb7a09c97d) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(b61061c5) SHA1(aeb409aa5073232d80ed81b27946e753290234f4), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(c85acf42) SHA1(c3365caeb126a83a7e7afcda25f05849ceb5c98b), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(67f78f59) SHA1(40b256a8939fad365c7e896cff4a959fcc70a477), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(6be0508a) SHA1(20f617278ce1666348822d80686cecd8d9b1bc78), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(905606e0) SHA1(866cd98ea2399fed96f76b16dce751e2c7cfdc98), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(cdeef6fa) SHA1(1b4d58951b662040540e7d51f88c1b6f282562ee), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(ad81f204) SHA1(58584a6c8c6cfb6366eaa10aba8a226e419f5ce9), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(10ce7254) SHA1(2a88d45dbe78ea8358ecd8522b38d775a2fdb34a), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.63-56", 0x800000, 0x100000, CRC(78c65a1f) SHA1(1a97737c222809930bde9df7a55e1ff1581a3202), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.55-48", 0x800001, 0x100000, CRC(9ffac0f1) SHA1(3ba5f8de32a5febb5d3d22f59ccb477834d33934), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.47-40", 0x800002, 0x100000, CRC(18543fb7) SHA1(4ab9969de9a66d6b7b70cfa5290c1cf7bce54838), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.39-32", 0x800003, 0x100000, CRC(22578f15) SHA1(4e314b22456ed4e4282406e990207e3b9bdf6203), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.31-24", 0x800004, 0x100000, CRC(5c41b91b) SHA1(ce354c8a4a3872b009e8af9f75e8f4f0892c7a7e), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.23-16", 0x800005, 0x100000, CRC(c2462646) SHA1(207d51a2aae076bc78548cf96325e670ea41609c), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.15-08", 0x800006, 0x100000, CRC(f8d998ec) SHA1(ffce4a16fbb2fff3dc0a29c0cede4dfe6316e97b), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_jpn.07-00", 0x800007, 0x100000, CRC(e7e0daa5) SHA1(108da84cc6b4df7ae88cfdacd27c1728e59cdb81), ROM_SKIP(7) )
+ROM_END
+
+ROM_START( freezea2 )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "prog.hh", 0x000000, 0x040000, CRC(a8aefa52) SHA1(ba95da93035520de4b15245f68217c59dfb69dbd) )
+ ROM_LOAD32_BYTE( "prog.hl", 0x000001, 0x040000, CRC(152dd641) SHA1(52fa260baf1979ed8f15f8abcbbeebd8e595d0e4) )
+ ROM_LOAD32_BYTE( "prog.lh", 0x000002, 0x040000, CRC(416d26ed) SHA1(11cf3b88415a8a5d0bb8e1df08603a85202186ef) )
+ ROM_LOAD32_BYTE( "prog.ll", 0x000003, 0x040000, CRC(d6a5dbc8) SHA1(0e2176c35cbc59b2a5283366210409d0e930bac7) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(99d0dc75) SHA1(b32126eea70c7584d1c34a6ca33282fbaf4b03aa), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(2dfdfe62) SHA1(e0554d36ef5cf4b6ce171857ea4f2737f11286a5), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(722aee2a) SHA1(bc79433131bed5b08453d1b80324a28a552783de), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(919e31b4) SHA1(3807d4629d8277c780dba888c23d17ba47803f27), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(a957ac95) SHA1(ddfaca994c06976bee8b123857904e64f40b7f31), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(a147ec66) SHA1(6291008158d581b81e025ed34ff0950983c12c67), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(206d2f38) SHA1(6aca89df26d3602ff1da3c23f19e0782439623ff), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(06559831) SHA1(b2c022457425d7900337cfa2fd1622336c0c0bc5), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(30c624d2) SHA1(4ced77d1663169d0cb37d6728ec52e67f05064c5), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(049cd60f) SHA1(8a7615a76b57a4e6ef5d95a5ee6c56086671dbb6), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(d6aaf3bf) SHA1(1c597bdc0e61fd0941cff5a8a93f24f108bd0daa), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(7d6ebc69) SHA1(668769297f75f9c367bc5cde26419ed092fc9dd8), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(6e5fee1f) SHA1(1eca79c8d395f881d0a05f10073998fcae70c3b1), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(a8b1e9b4) SHA1(066285928e574e656510b90bc212a8d86660bd07), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(c90080e6) SHA1(a764bdd6b4e9e727f7468a53424a9211ec5fd5a8), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(1f20c020) SHA1(71b32386dc0444264f2f1e2a81899e0e9260994c), ROM_SKIP(7) )
+ROM_END
+
+ROM_START( freezea3 )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "prog.hh", 0x000000, 0x040000, CRC(863942e6) SHA1(c7429c8a5c86ff93c64950e201cffca83dd7b7b0) )
+ ROM_LOAD32_BYTE( "prog.hl", 0x000001, 0x040000, CRC(2acc18ef) SHA1(ead02566f7641b1d1066bd2e257b695e5c7e8437) )
+ ROM_LOAD32_BYTE( "prog.lh", 0x000002, 0x040000, CRC(948cf20c) SHA1(86c757aa3c849ef5ba94ed4d5dbf10e833dab6bd) )
+ ROM_LOAD32_BYTE( "prog.ll", 0x000003, 0x040000, CRC(5f44969e) SHA1(32345d7c56a3a890e71f8c71f25414d442b60af8) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(36799449) SHA1(bb706fe7fdc68f840702a127eed7d4519dd45869), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(23959947) SHA1(a35a6e62c7b2be57d41b1b64be93713cbf897f0a), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(4657e4e0) SHA1(b6c07182babcb0a106bf4a8f2e3f524371dd882d), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(b6ea4b64) SHA1(176f94f14307c40b9c611d6f6bc9118e498cdfad), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7d4ce71f) SHA1(a1cf5aa9df8dd29c777c10cfdce0925981584261), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(02db4fd1) SHA1(fce6f31802bf36d6b006f0b212f553bdf21f9374), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(7d496d6c) SHA1(f82db0621729a00acf4077482e9dfab040ac829b), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3aa389d8) SHA1(52502f2f3c91d7c29261f60fe8f489a352399c96), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(ead678c9) SHA1(f83d467f6685965b6176b10adbd4e35ef808baf3), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(3591e752) SHA1(df242d2f724edfd78f7191f0ba7a8cde2c09b25f), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(e29a7a6c) SHA1(0bfb26076b390492eed81d4c4f0852c64fdccfce), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(e980f957) SHA1(78e8ef07f443ce7991a46005627d5802d36d731c), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(d90c5221) SHA1(7a330f39f3751d58157f872d92c3c2b91fe60d14), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(9be0d4de) SHA1(9bb67a1f1db77483e896fed7096c1e23c153ede4), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(122248af) SHA1(80dd5486106d475bd9f6d78919ebeb176e7becff), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(5ae08327) SHA1(822d8292793509ebfbfce27e92a74c78c4328bda), ROM_SKIP(7) )
+ROM_END
+
+ROM_START( freezea4 )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "prog.hh", 0x000000, 0x040000, CRC(80336f5e) SHA1(9946e8eebec2cd68db059f40f535ea212f41913d) )
+ ROM_LOAD32_BYTE( "prog.hl", 0x000001, 0x040000, CRC(55125520) SHA1(13be4fbf32bcd94a2ea97fd690bd1dfdff146d33) )
+ ROM_LOAD32_BYTE( "prog.lh", 0x000002, 0x040000, CRC(9d99c794) SHA1(f443f05a5979db66d61ef4174f0369a1cf4b7793) )
+ ROM_LOAD32_BYTE( "prog.ll", 0x000003, 0x040000, CRC(e03700e0) SHA1(24d41750f02ee7e8fb379e517751b661400aa521) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(36799449) SHA1(bb706fe7fdc68f840702a127eed7d4519dd45869), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(23959947) SHA1(a35a6e62c7b2be57d41b1b64be93713cbf897f0a), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(4657e4e0) SHA1(b6c07182babcb0a106bf4a8f2e3f524371dd882d), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(b6ea4b64) SHA1(176f94f14307c40b9c611d6f6bc9118e498cdfad), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7d4ce71f) SHA1(a1cf5aa9df8dd29c777c10cfdce0925981584261), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(02db4fd1) SHA1(fce6f31802bf36d6b006f0b212f553bdf21f9374), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(7d496d6c) SHA1(f82db0621729a00acf4077482e9dfab040ac829b), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3aa389d8) SHA1(52502f2f3c91d7c29261f60fe8f489a352399c96), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(c91b6ee4) SHA1(58d2d6b1b9847150b8b3e358842c4a097ef91475), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(65528e55) SHA1(18020cababed379f77149b7e89e80b294766df31), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(8fe4187f) SHA1(c9ceec40688617e1251142465d0e608f80a83e40), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(fdf05a42) SHA1(849e224b68be2fb396ee4cb4729517470af7c282), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(bb2cd741) SHA1(ac55a54c702d222cb1b9bb480b0f7a71bc315878), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(ea8c5984) SHA1(eca1619c17dfac154a2024ec49b4b4f9f06a50c9), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(0b00c816) SHA1(879b0e9d92fe737d740c348dc1cc376c8abfbdb8), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(a84335c3) SHA1(340f5ddb9bff1ecd469eab8be36cc0ede84f1f5e), ROM_SKIP(7) )
+ROM_END
+
+ROM_START( freezea5 )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "prog.hh", 0x000000, 0x040000, CRC(95c4fc64) SHA1(cd00efe7f760ef1e4cdc4bc8a3b368427cb15d8a) )
+ ROM_LOAD32_BYTE( "prog.hl", 0x000001, 0x040000, CRC(ffb9cb71) SHA1(35d6a5440d63bc5b94c4447645365039169da368) )
+ ROM_LOAD32_BYTE( "prog.lh", 0x000002, 0x040000, CRC(3ddacd80) SHA1(79f9650531847eefd83908b6ea1e8362688b377c) )
+ ROM_LOAD32_BYTE( "prog.ll", 0x000003, 0x040000, CRC(95ebefb0) SHA1(b88b12adabd7b0902c3a78919bcec8d9a2b04168) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(404a10c3) SHA1(8e353ac7608bd54f0fea610c85166ad14f2faadb), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(0b262f2f) SHA1(2a963cb5c3344091406d090edfdda498709c6aa6), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(43f86d26) SHA1(b31d36b11052514b5bcd5bf8e400457ca572c306), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(5cf0228f) SHA1(7a8c59cf9a7744e9f332db5f661f507323375968), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7a24ff98) SHA1(db9e0e8bb417f187267a6e4fc1e66ff060ee4096), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(ea163c93) SHA1(d07ed26191d36497c56b15774625a49ecb958386), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(d364534f) SHA1(153908bb8929a898945f768f8bc3d853c6aeaceb), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(7ba4cb0d) SHA1(16bd487123f499b7080596dc76253081179a0f66), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(0e1fc4a9) SHA1(a200bb0af5f1e2c3f8d221ae4e9ba55b9dfb8550), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(b696b875) SHA1(16dc4d5cee3f08360cf19926584419c21d781f45), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(e78d9302) SHA1(f8b5ed992c433d63677edbeafd3e465b1d42b455), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(9b50374c) SHA1(d8af3c9d8e0459e24b974cdf2e75c7c39582912f), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(b6a19b7e) SHA1(5668b27db4dade8efb1524b8ecd1fe78498e8460), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(ff835b67) SHA1(19da2de1d067069871c33c8b25fd2eac2d03f627), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(8daf6995) SHA1(2f44031378b5fb1ba1f80a966dbe902316dc6fe8), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(3676ac70) SHA1(640c4d4f53ca2bcae2009e402fd6ad70e40defa4), ROM_SKIP(7) )
+ROM_END
+
+ROM_START( freezea6 )
+ ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* 2MB for R3000 code */
+ ROM_LOAD32_BYTE( "prog.hh", 0x000000, 0x040000, CRC(120711fe) SHA1(387e3cc8a1a9ea7d65c528387891d09ed9889fe3) )
+ ROM_LOAD32_BYTE( "prog.hl", 0x000001, 0x040000, CRC(18dd292a) SHA1(00e79851140716985f43594142c97e510a06b24a) )
+ ROM_LOAD32_BYTE( "prog.lh", 0x000002, 0x040000, CRC(ce387e72) SHA1(021a274da0b828550a47c3778e1059d4e759693a) )
+ ROM_LOAD32_BYTE( "prog.ll", 0x000003, 0x040000, CRC(9b307b7c) SHA1(71b696802fe7c867525d2626351dcfacedabd696) )
+
+ ROM_REGION32_BE( 0x1000000, REGION_USER2, 0 ) /* 16MB for 64-bit ROM data */
+ ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(293a3308) SHA1(e4c88759c3b8f8a359db83817dbd0428350b4f7e), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(18bb4bdf) SHA1(1f6c49b3b5946390fa7582b531f8d9af3baa2567), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(1faedcc6) SHA1(1e4ecbe4553fb3ebfbd03bd7e16066ccb531d00b), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(536bc349) SHA1(06d7ac38b2c8cdc85e2cb531bba9c836e50c8247), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(813d4a31) SHA1(e024f9da2f15a482d8142870baf487297b995ed9), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(f881514b) SHA1(a694f90621e2c1569a6a5ed8920838ba5506f72e), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(d7634655) SHA1(d7ac83c0fa5d0ec57d096d4d704fe99ee8160e09), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3fca32a3) SHA1(22753a9678e04d9355238e013e58d9f45315579d), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(a2b89d3a) SHA1(9cfcd0b88dea192ba39efcdccc78d1a0fd8f3388), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(766822a8) SHA1(2c9b14542a5467c1a3451559ea296da09c2cfdb9), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(112b519c) SHA1(f0e1ed1b8ad271fa9708f513b11d5cca6e550668), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(435b5d37) SHA1(ecb6e7271d993f8e315b85e69166838e66dd41a8), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(2637ae7f) SHA1(5e0bd0e08d8c1eaae725b4d55030c2698abd46e7), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(e732f1bf) SHA1(a228aee0cc36a0089716f20bfa75d87750692adb), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(7d4e2d9e) SHA1(4cb9b754b7585df4cae6bdd7085a57729d53e643), ROM_SKIP(7) )
+ ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(8ea036af) SHA1(1f9baec6712e0ba0e8a744529e41799217760194), ROM_SKIP(7) )
+ROM_END
+
+
+/*************************************
+ *
+ * Driver initialization
+ *
+ *************************************/
+
+static void cojag_common_init(running_machine *machine, UINT16 gpu_jump_offs, UINT16 spin_pc)
+{
+ /* copy over the ROM */
+ cojag_is_r3000 = (machine->drv->cpu[0].type == CPU_R3000BE);
+
+ /* install synchronization hooks for GPU */
+ if (cojag_is_r3000)
+ memory_install_write32_handler(0, ADDRESS_SPACE_PROGRAM, 0x04f0b000 + gpu_jump_offs, 0x04f0b003 + gpu_jump_offs, 0, 0, gpu_jump_w);
+ else
+ memory_install_write32_handler(0, ADDRESS_SPACE_PROGRAM, 0xf0b000 + gpu_jump_offs, 0xf0b003 + gpu_jump_offs, 0, 0, gpu_jump_w);
+ memory_install_read32_handler(1, ADDRESS_SPACE_PROGRAM, 0xf03000 + gpu_jump_offs, 0xf03003 + gpu_jump_offs, 0, 0, gpu_jump_r);
+ gpu_jump_address = &jaguar_gpu_ram[gpu_jump_offs/4];
+ gpu_spin_pc = 0xf03000 + spin_pc;
+
+ /* init the sound system and install DSP speedups */
+ cojag_sound_init();
+
+ /* spin up the hard disk */
+ ide_controller_init(0, &ide_intf);
+}
+
+
+static DRIVER_INIT( area51a )
+{
+ cojag_common_init(machine, 0x5c4, 0x5a0);
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup = memory_install_write32_handler(0, ADDRESS_SPACE_PROGRAM, 0xa02030, 0xa02033, 0, 0, area51_main_speedup_w);
+#endif
+}
+
+
+static DRIVER_INIT( area51 )
+{
+ cojag_common_init(machine, 0x0c0, 0x09e);
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup_max_cycles = 120;
+ main_speedup = memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x100062e8, 0x100062eb, 0, 0, cojagr3k_main_speedup_r);
+#endif
+}
+
+static DRIVER_INIT( maxforce )
+{
+ cojag_common_init(machine, 0x0c0, 0x09e);
+
+ /* patch the protection */
+ rom_base[0x220/4] = 0x03e00008;
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup_max_cycles = 120;
+ main_speedup = memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x1000865c, 0x1000865f, 0, 0, cojagr3k_main_speedup_r);
+#endif
+}
+
+
+static DRIVER_INIT( area51mx )
+{
+ cojag_common_init(machine, 0x0c0, 0x09e);
+
+ /* patch the protection */
+ rom_base[0x418/4] = 0x4e754e75;
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup = memory_install_write32_handler(0, ADDRESS_SPACE_PROGRAM, 0xa19550, 0xa19557, 0, 0, area51mx_main_speedup_w);
+#endif
+}
+
+
+static DRIVER_INIT( a51mxr3k )
+{
+ cojag_common_init(machine, 0x0c0, 0x09e);
+
+ /* patch the protection */
+ rom_base[0x220/4] = 0x03e00008;
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup_max_cycles = 120;
+ main_speedup = memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x10006f0c, 0x10006f0f, 0, 0, cojagr3k_main_speedup_r);
+#endif
+}
+
+
+static DRIVER_INIT( fishfren )
+{
+ cojag_common_init(machine, 0x578, 0x554);
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup_max_cycles = 200;
+ main_speedup = memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x10021b60, 0x10021b63, 0, 0, cojagr3k_main_speedup_r);
+#endif
+}
+
+
+static void init_freeze_common(running_machine *machine, offs_t main_speedup_addr)
+{
+ cojag_common_init(machine, 0x0bc, 0x09c);
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup_max_cycles = 200;
+ if (main_speedup_addr != 0)
+ main_speedup = memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, main_speedup_addr, main_speedup_addr + 3, 0, 0, cojagr3k_main_speedup_r);
+ main_gpu_wait = memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x0400d900, 0x0400d900 + 3, 0, 0, main_gpu_wait_r);
+#endif
+}
+
+static DRIVER_INIT( freezeat ) { init_freeze_common(machine, 0x1001a9f4); }
+static DRIVER_INIT( freezea2 ) { init_freeze_common(machine, 0x1001a8c4); }
+static DRIVER_INIT( freezea3 ) { init_freeze_common(machine, 0x1001a134); }
+static DRIVER_INIT( freezea4 ) { init_freeze_common(machine, 0x1001a134); }
+static DRIVER_INIT( freezea5 ) { init_freeze_common(machine, 0x10019b34); }
+static DRIVER_INIT( freezea6 ) { init_freeze_common(machine, 0x10019684); }
+
+
+static DRIVER_INIT( vcircle )
+{
+ cojag_common_init(machine, 0x5c0, 0x5a0);
+
+#if ENABLE_SPEEDUP_HACKS
+ /* install speedup for main CPU */
+ main_speedup_max_cycles = 50;
+ main_speedup = memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x12005b34, 0x12005b37, 0, 0, cojagr3k_main_speedup_r);
+#endif
+}
+
+
+
+/*************************************
+ *
+ * Game driver(s)
+ *
+ *************************************/
+
+GAME( 1996, area51, 0, r3knarrow, area51, area51, ROT0, "Atari Games", "Area 51 (R3000)", 0 )
+GAME( 1995, area51t, area51, cojag68k, area51, area51a, ROT0, "Time Warner", "Area 51 (Time Warner License)", 0 )
+GAME( 1995, area51a, area51, cojag68k, area51, area51a, ROT0, "Atari Games", "Area 51 (Atari Games License)", 0 )
+GAME( 1995, fishfren, 0, cojagr3k, fishfren, fishfren, ROT0, "Time Warner Interactive", "Fishin' Frenzy (prototype)", 0 )
+GAME( 1996, freezeat, 0, cojagr3k, freezeat, freezeat, ROT0, "Atari Games", "Freeze (Atari) (prototype, English voice, 96/10/25)", 0 )
+GAME( 1996, freezejp, freezeat, cojagr3k, freezeat, freezeat, ROT0, "Atari Games", "Freeze (Atari) (prototype, Japanese voice, 96/10/25)", 0 )
+GAME( 1996, freezea2, freezeat, cojagr3k, freezeat, freezea2, ROT0, "Atari Games", "Freeze (Atari) (prototype, 96/10/18)", 0 )
+GAME( 1996, freezea3, freezeat, cojagr3k, freezeat, freezea3, ROT0, "Atari Games", "Freeze (Atari) (prototype, 96/10/07)", 0 )
+GAME( 1996, freezea4, freezeat, cojagr3k, freezeat, freezea4, ROT0, "Atari Games", "Freeze (Atari) (prototype, 96/10/03)", 0 )
+GAME( 1996, freezea5, freezeat, cojagr3k, freezeat, freezea5, ROT0, "Atari Games", "Freeze (Atari) (prototype, 96/09/20, AMOA-96)", 0 )
+GAME( 1996, freezea6, freezeat, cojagr3k, freezeat, freezea6, ROT0, "Atari Games", "Freeze (Atari) (prototype, 96/09/07, Jamma-96)", 0 )
+GAME( 1996, maxforce, 0, r3knarrow, area51, maxforce, ROT0, "Atari Games", "Maximum Force v1.05", 0 )
+GAME( 1996, maxf_102, maxforce, r3knarrow, area51, maxforce, ROT0, "Atari Games", "Maximum Force v1.02", 0 )
+GAME( 1996, maxf_ng, maxforce, r3knarrow, area51, maxforce, ROT0, "Atari Games", "Maximum Force (No Gore version)", 0 )
+GAME( 1998, area51mx, 0, cojag68k, area51, area51mx, ROT0, "Atari Games", "Area 51 / Maximum Force Duo v2.0", 0 )
+GAME( 1998, a51mxr3k, area51mx, r3knarrow, area51, a51mxr3k, ROT0, "Atari Games", "Area 51 / Maximum Force Duo (R3000)", 0 )
+GAME( 1996, vcircle, 0, cojagr3k, vcircle, vcircle, ROT0, "Atari Games", "Vicious Circle (prototype)", 0 )