Haze: Merged CoJag and Jaguar (MESS side) drivers, nw

This commit is contained in:
Angelo Salese 2011-04-24 22:15:07 +00:00
parent 259d8afd62
commit fed08e39f7
4 changed files with 780 additions and 17 deletions

2
.gitattributes vendored
View File

@ -1728,7 +1728,6 @@ src/mame/drivers/cninja.c svneol=native#text/plain
src/mame/drivers/cntsteer.c svneol=native#text/plain
src/mame/drivers/coinmstr.c svneol=native#text/plain
src/mame/drivers/coinmvga.c svneol=native#text/plain
src/mame/drivers/cojag.c svneol=native#text/plain
src/mame/drivers/combatsc.c svneol=native#text/plain
src/mame/drivers/comebaby.c svneol=native#text/plain
src/mame/drivers/commando.c svneol=native#text/plain
@ -1996,6 +1995,7 @@ src/mame/drivers/jack.c svneol=native#text/plain
src/mame/drivers/jackal.c svneol=native#text/plain
src/mame/drivers/jackie.c svneol=native#text/plain
src/mame/drivers/jackpool.c svneol=native#text/plain
src/mame/drivers/jaguar.c svneol=native#text/plain
src/mame/drivers/jailbrek.c svneol=native#text/plain
src/mame/drivers/jalmah.c svneol=native#text/plain
src/mame/drivers/jangou.c svneol=native#text/plain

View File

@ -1,10 +1,14 @@
/***************************************************************************
Atari CoJag hardware
Atari Jaguar (Home) & Atari CoJag (Arcade) hardware
The CoJag arcade system is based on the Jaguar system, but with an upgraded
main CPU (68020 or MIPS instead of the plain 68000 found in the Jaguar)
driver by Aaron Giles
console support originally by Nathan Woods
Games supported:
CoJag Games supported:
* Area 51 (3 Sets)
* Maximum Force (2 Sets)
* Area 51/Maximum Force Duo (2 Sets)
@ -13,7 +17,15 @@
* Freeze
To do:
* map out unused RAM per-game via memory_nop_read/write
* (CoJag) map out unused RAM per-game via memory_nop_read/write
* (Jaguar) support is very poor, most games aren't properly playable
or have severe performance issues or crashes related to the unsafe
blitter code. Only Pinball Fantasies is fully playable albeit
without sound.
* The code (GPU/DSP access) should probably be refactored around the
16-bit interface from the plain 68k, the driver currently uses
trampoline functions due to the original driver being entirely
32-bit due to the CPUs on CoJag.
Note: There is believed to be a 68020 version of Maximum Force
(not confirmed or dumped)
@ -285,6 +297,36 @@ Notes:
F1D000-F1DFFF R xxxxxxxx xxxxxxxx Wavetable ROM
------------------------------------------------------------
Jaguar System Notes:
Protection Check
At power on, a checksum is performed on the cart to ensure it has been
certified by Atari. The actual checksum calculation is performed by the GPU,
the result being left in GPU RAM at address f03000. The GPU is instructed to
do the calculation when the bios sends a 1 to f02114 while it is in the
initialisation stage. The bios then loops, waiting for the GPU to finish the
calculation. When it does, it sets bit 15 of f02114 high. The bios then does
the compare of the checksum. The checksum algorithm is unknown, but the
final result must be 03d0dead. The bios checks for this particular result,
and if found, the cart is allowed to start. Otherwise, the background turns
red, and the console freezes.
Jaguar Logo
A real Jaguar will show the red Jaguar logo, the falling white Atari letters,
and the turning jaguar's head, accompanied by the sound of a flushing toilet.
The cart will then start. All Jaguar emulators (including this one) skip the
logo with the appropriate memory hack. The cart can also instruct the logo
be skipped by placing non-zero at location 800408. We do the same thing when
the cart is loaded (see the DEVICE_IMAGE_LOAD section below).
Start Address
The start address of a cart may be found at 800404. It is normally 802000.
***************************************************************************/
@ -296,12 +338,20 @@ Notes:
#include "machine/nvram.h"
#include "sound/dac.h"
#include "includes/jaguar.h"
#include "emuopts.h"
#include "imagedev/cartslot.h"
#include "imagedev/snapquik.h"
#include "sound/dac.h"
#include "machine/eeprom.h"
#define COJAG_CLOCK XTAL_52MHz
#define R3000_CLOCK XTAL_40MHz
#define M68K_CLOCK XTAL_50MHz
static QUICKLOAD_LOAD( jaguar );
static DEVICE_START( jaguar_cart );
static DEVICE_IMAGE_LOAD( jaguar );
class cojag_state : public driver_device
{
@ -338,7 +388,9 @@ UINT32 *jaguar_gpu_ram;
UINT32 *jaguar_gpu_clut;
UINT32 *jaguar_dsp_ram;
UINT32 *jaguar_wave_rom;
UINT32* high_rom_base;
UINT8 cojag_is_r3000;
static int is_jaguar;
@ -348,8 +400,20 @@ UINT8 cojag_is_r3000;
*
*************************************/
static UINT32 joystick_data;
static UINT32 *rom_base;
static size_t rom_size;
static UINT32 *cart_base;
static size_t cart_size;
static UINT8 eeprom_bit_count;
static UINT8 protection_check = 0; /* 0 = check hasn't started yet; 1= check in progress; 2 = check is finished. */
extern UINT8 blitter_status;
static UINT8 using_cart = 0;
static IRQ_CALLBACK(jaguar_irq_callback)
{
return (irqline == 6) ? 0x40 : -1;
}
@ -397,6 +461,154 @@ static MACHINE_RESET( cojag )
/* set blitter idle flag */
blitter_status = 1;
// normal handling of 'protection'
is_jaguar = 0;
}
static MACHINE_RESET( jaguar )
{
device_set_irq_callback(machine.device("maincpu"), jaguar_irq_callback);
protection_check = 0;
/* Set up pointers for Jaguar logo */
memcpy(jaguar_shared_ram, rom_base, 0x400); // do not increase, or Doom breaks
device_set_input_line(machine.device("maincpu"), INPUT_LINE_RESET, PULSE_LINE);
/* clear any spinuntil stuff */
jaguar_gpu_resume(machine);
jaguar_dsp_resume(machine);
/* halt the CPUs */
jaguargpu_ctrl_w(machine.device("gpu"), G_CTRL, 0, 0xffffffff);
jaguardsp_ctrl_w(machine.device("audiocpu"), D_CTRL, 0, 0xffffffff);
joystick_data = 0xffffffff;
eeprom_bit_count = 0;
blitter_status = 1;
if ((using_cart) && (input_port_read(machine, "CONFIG") & 2))
{
cart_base[0x102] = 1;
using_cart = 0;
}
// custom handling of 'protection'
is_jaguar = 1;
}
/********************************************************************
*
* EEPROM
* ======
*
* The EEPROM is accessed by a serial protocol using the registers
* 0xF14000 (read data), F14800 (increment clock, write data), F15000 (reset for next word)
*
********************************************************************/
/*
static emu_file *jaguar_nvram_fopen( running_machine &machine, UINT32 openflags)
{
device_image_interface *image = dynamic_cast<device_image_interface *>(machine.device("cart"));
astring *fname;
file_error filerr;
emu_file *file;
if (image->exists())
{
fname = astring_assemble_4( astring_alloc(), machine.system().name, PATH_SEPARATOR, image->basename_noext(), ".nv");
filerr = mame_fopen( SEARCHPATH_NVRAM, astring_c( fname), openflags, &file);
astring_free( fname);
return (filerr == FILERR_NONE) ? file : NULL;
}
else
return NULL;
}
static void jaguar_nvram_load(running_machine &machine)
{
emu_file *nvram_file = NULL;
device_t *device;
for (device = machine.m_devicelist.first(); device != NULL; device = device->next())
{
device_nvram_func nvram = (device_nvram_func)device->get_config_fct(DEVINFO_FCT_NVRAM);
if (nvram != NULL)
{
if (nvram_file == NULL)
nvram_file = jaguar_nvram_fopen(machine, OPEN_FLAG_READ);
(*nvram)(device, nvram_file, 0);
}
}
if (nvram_file != NULL)
mame_fclose(nvram_file);
}
static void jaguar_nvram_save(running_machine &machine)
{
emu_file *nvram_file = NULL;
device_t *device;
for (device = machine.m_devicelist.first(); device != NULL; device = device->next())
{
device_nvram_func nvram = (device_nvram_func)device->get_config_fct(DEVINFO_FCT_NVRAM);
if (nvram != NULL)
{
if (nvram_file == NULL)
nvram_file = jaguar_nvram_fopen(machine, OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
// check nvram_file to avoid crash when no image is mounted or cannot be created
if (nvram_file)
(*nvram)(device, nvram_file, 1);
}
}
if (nvram_file != NULL)
mame_fclose(nvram_file);
}
static NVRAM_HANDLER( jaguar )
{
if (read_or_write) {
jaguar_nvram_save(machine);
}
else
{
if (file)
jaguar_nvram_load(machine);
}
}
*/
static WRITE32_HANDLER( jaguar_eeprom_w )
{
device_t *eeprom = space->machine().device("eeprom");
eeprom_bit_count++;
if (eeprom_bit_count != 9) /* kill extra bit at end of address */
{
eeprom_write_bit(eeprom,data >> 31);
eeprom_set_clock_line(eeprom,PULSE_LINE);
}
}
static READ32_HANDLER( jaguar_eeprom_clk )
{
device_t *eeprom = space->machine().device("eeprom");
eeprom_set_clock_line(eeprom,PULSE_LINE); /* get next bit when reading */
return 0;
}
static READ32_HANDLER( jaguar_eeprom_cs )
{
device_t *eeprom = space->machine().device("eeprom");
eeprom_set_cs_line(eeprom,ASSERT_LINE); /* must do at end of an operation */
eeprom_set_cs_line(eeprom,CLEAR_LINE); /* enable chip for next operation */
eeprom_write_bit(eeprom,1); /* write a start bit */
eeprom_set_clock_line(eeprom,PULSE_LINE);
eeprom_bit_count = 0;
return 0;
}
@ -456,21 +668,35 @@ static WRITE32_HANDLER( misc_control_w )
}
/*************************************
*
* 32-bit access to the GPU
*
*************************************/
// shouldn't the DSPs be doing this calc, why is this needed for Jaguar?
static READ32_HANDLER( gpuctrl_r )
{
return jaguargpu_ctrl_r(space->machine().device("gpu"), offset);
UINT32 result = jaguargpu_ctrl_r(space->machine().device("gpu"), offset);
if (is_jaguar)
{
if (protection_check != 1) return result;
protection_check++;
jaguar_gpu_ram[0] = 0x3d0dead;
return 0x80000000;
}
else
return result;
}
static WRITE32_HANDLER( gpuctrl_w )
{
if (is_jaguar)
if ((!protection_check) && (offset == 5) && (data == 1)) protection_check++;
jaguargpu_ctrl_w(space->machine().device("gpu"), offset, data, mem_mask);
}
@ -500,6 +726,106 @@ static READ32_HANDLER( jaguar_wave_rom_r )
}
/*************************************
*
* Input ports
*
* Information from "The Jaguar Underground Documentation"
* by Klaus and Nat!
*
*************************************/
static READ32_HANDLER( joystick_r )
{
UINT16 joystick_result = 0xfffe;
UINT16 joybuts_result = 0xffef;
int i;
static const char *const keynames[2][8] =
{
{ "JOY0", "JOY1", "JOY2", "JOY3", "JOY4", "JOY5", "JOY6", "JOY7" },
{ "BUTTONS0", "BUTTONS1", "BUTTONS2", "BUTTONS3", "BUTTONS4", "BUTTONS5", "BUTTONS6", "BUTTONS7" }
};
/*
* 16 12 8 4 0
* +---------+---------+---------^---------+
* | pad 1 | pad 0 | unused |
* +---------+---------+-------------------+
* 15...12 11...8 7...0
*
* Reading this register gives you the output of the selected columns
* of the pads.
* The buttons pressed will appear as cleared bits.
* See the description of the column addressing to map the bits
* to the buttons.
*/
for (i = 0; i < 8; i++)
{
if ((joystick_data & (0x10000 << i)) == 0)
{
joystick_result &= input_port_read(space->machine(), keynames[0][i]);
joybuts_result &= input_port_read(space->machine(), keynames[1][i]);
}
}
joystick_result |= eeprom_read_bit(space->machine().device("eeprom"));
joybuts_result |= (input_port_read(space->machine(), "CONFIG") & 0x10);
return (joystick_result << 16) | joybuts_result;
}
static WRITE32_HANDLER( joystick_w )
{
/*
* 16 12 8 4 0
* +-+-------^------+--+---------+---------+
* |r| unused |mu| col 1 | col 0 |
* +-+--------------+--+---------+---------+
* 15 8 7...4 3...0
*
* col 0: column control of joypad 0
*
* Here you select which column of the joypad to poll.
* The columns are:
*
* Joystick Joybut
* col_bit|11 10 9 8 1 0
* -------+--+--+--+-- ---+------
* 0 | R L D U A PAUSE (RLDU = Joypad directions)
* 1 | 1 4 7 * B
* 2 | 2 5 8 0 C
* 3 | 3 6 9 # OPTION
*
* You select a column my clearing the appropriate bit and setting
* all the other "column" bits.
*
*
* col1: column control of joypad 1
*
* This is pretty much the same as for joypad EXCEPT that the
* column addressing is reversed (strange!!)
*
* Joystick Joybut
* col_bit|15 14 13 12 3 2
* -------+--+--+--+-- ---+------
* 4 | 3 6 9 # OPTION
* 5 | 2 5 8 0 C
* 6 | 1 4 7 * B
* 7 | R L D U A PAUSE (RLDU = Joypad directions)
*
* mute (mu): sound control
*
* You can turn off the sound by clearing this bit.
*
* read enable (r):
*
* Set this bit to read from the joysticks, clear it to write
* to them.
*/
COMBINE_DATA(&joystick_data);
}
/*************************************
*
@ -799,6 +1125,85 @@ static WRITE32_HANDLER( area51mx_main_speedup_w )
/*************************************
*
* Main CPU memory handlers
*
*************************************/
// surely these should be 16-bit natively if the standard Jaguar is driven by a plain 68k?
// all these trampolines are not good for performance ;-)
static READ16_HANDLER( gpuctrl_r16 ) { if (!(offset&1)) { return gpuctrl_r(space, offset>>1, mem_mask<<16) >> 16; } else { return gpuctrl_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( gpuctrl_w16 ) { if (!(offset&1)) { gpuctrl_w(space, offset>>1, data << 16, mem_mask << 16); } else { gpuctrl_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_blitter_r16 ) { if (!(offset&1)) { return jaguar_blitter_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_blitter_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_blitter_w16 ) { if (!(offset&1)) { jaguar_blitter_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_blitter_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_serial_r16 ) { if (!(offset&1)) { return jaguar_serial_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_serial_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_serial_w16 ) { if (!(offset&1)) { jaguar_serial_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_serial_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( dspctrl_r16 ) { if (!(offset&1)) { return dspctrl_r(space, offset>>1, mem_mask<<16) >> 16; } else { return dspctrl_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( dspctrl_w16 ) { if (!(offset&1)) { dspctrl_w(space, offset>>1, data << 16, mem_mask << 16); } else { dspctrl_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_eeprom_cs16 ) { if (!(offset&1)) { return jaguar_eeprom_cs(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_eeprom_cs(space, offset>>1, mem_mask); } }
static READ16_HANDLER( jaguar_eeprom_clk16 ) { if (!(offset&1)) { return jaguar_eeprom_clk(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_eeprom_clk(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_eeprom_w16 ) { if (!(offset&1)) { jaguar_eeprom_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_eeprom_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( joystick_r16 ) { if (!(offset&1)) { return joystick_r(space, offset>>1, mem_mask<<16) >> 16; } else { return joystick_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( joystick_w16 ) { if (!(offset&1)) { joystick_w(space, offset>>1, data << 16, mem_mask << 16); } else { joystick_w(space, offset>>1, data, mem_mask); } }
static READ32_HANDLER( jaguar_shared_ram_r ) { return jaguar_shared_ram[offset]; }
static WRITE32_HANDLER( jaguar_shared_ram_w ) { COMBINE_DATA(&jaguar_shared_ram[offset]); }
static READ32_HANDLER( jaguar_rom_base_r ) { return rom_base[offset]; }
static WRITE32_HANDLER( jaguar_rom_base_w ) { /*ROM!*/ }
static READ32_HANDLER( jaguar_cart_base_r ) { return cart_base[offset]; }
static WRITE32_HANDLER( jaguar_cart_base_w ) { /*ROM!*/ }
static READ32_HANDLER( high_rom_base_r ) { return high_rom_base[offset]; }
static WRITE32_HANDLER( high_rom_base_w ) { /*ROM!*/ }
static READ32_HANDLER( jaguar_dsp_ram_r ) { return jaguar_dsp_ram[offset]; }
static WRITE32_HANDLER( jaguar_dsp_ram_w ) { COMBINE_DATA(&jaguar_dsp_ram[offset]); }
static READ32_HANDLER( jaguar_gpu_clut_r ) { return jaguar_gpu_clut[offset]; }
static WRITE32_HANDLER( jaguar_gpu_clut_w ) { COMBINE_DATA(&jaguar_gpu_clut[offset]); }
static READ32_HANDLER( jaguar_gpu_ram_r ) { return jaguar_gpu_ram[offset]; }
static WRITE32_HANDLER( jaguar_gpu_ram_w ) { COMBINE_DATA(&jaguar_gpu_ram[offset]); }
static READ16_HANDLER( jaguar_shared_ram_r16 ) { if (!(offset&1)) { return jaguar_shared_ram_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_shared_ram_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_shared_ram_w16 ) { if (!(offset&1)) { jaguar_shared_ram_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_shared_ram_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_rom_base_r16 ) { if (!(offset&1)) { return jaguar_rom_base_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_rom_base_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_rom_base_w16 ) { if (!(offset&1)) { jaguar_rom_base_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_rom_base_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_cart_base_r16 ) { if (!(offset&1)) { return jaguar_cart_base_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_cart_base_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_cart_base_w16 ) { if (!(offset&1)) { jaguar_cart_base_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_cart_base_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( high_rom_base_r16 ) { if (!(offset&1)) { return high_rom_base_r(space, offset>>1, mem_mask<<16) >> 16; } else { return high_rom_base_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( high_rom_base_w16 ) { if (!(offset&1)) { high_rom_base_w(space, offset>>1, data << 16, mem_mask << 16); } else { high_rom_base_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_dsp_ram_r16 ) { if (!(offset&1)) { return jaguar_dsp_ram_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_dsp_ram_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_dsp_ram_w16 ) { if (!(offset&1)) { jaguar_dsp_ram_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_dsp_ram_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_gpu_clut_r16 ) { if (!(offset&1)) { return jaguar_gpu_clut_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_gpu_clut_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_gpu_clut_w16 ) { if (!(offset&1)) { jaguar_gpu_clut_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_gpu_clut_w(space, offset>>1, data, mem_mask); } }
static READ16_HANDLER( jaguar_gpu_ram_r16 ) { if (!(offset&1)) { return jaguar_gpu_ram_r(space, offset>>1, mem_mask<<16) >> 16; } else { return jaguar_gpu_ram_r(space, offset>>1, mem_mask); } }
static WRITE16_HANDLER( jaguar_gpu_ram_w16 ) { if (!(offset&1)) { jaguar_gpu_ram_w(space, offset>>1, data << 16, mem_mask << 16); } else { jaguar_gpu_ram_w(space, offset>>1, data, mem_mask); } }
static ADDRESS_MAP_START( jaguar_map, AS_PROGRAM, 16 )
ADDRESS_MAP_GLOBAL_MASK(0xffffff)
AM_RANGE(0x000000, 0x1fffff) AM_MIRROR(0x200000) AM_READWRITE( jaguar_shared_ram_r16, jaguar_shared_ram_w16 );
AM_RANGE(0x800000, 0xdfffff) AM_READWRITE( jaguar_cart_base_r16, jaguar_cart_base_w16 )
AM_RANGE(0xe00000, 0xe1ffff) AM_READWRITE( jaguar_rom_base_r16, jaguar_rom_base_w16 )
AM_RANGE(0xf00000, 0xf003ff) AM_READWRITE(jaguar_tom_regs_r, jaguar_tom_regs_w) // might be reversed endian of the others..
AM_RANGE(0xf00400, 0xf005ff) AM_MIRROR(0x000200) AM_READWRITE(jaguar_gpu_clut_r16, jaguar_gpu_clut_w16 )
AM_RANGE(0xf02100, 0xf021ff) AM_MIRROR(0x008000) AM_READWRITE(gpuctrl_r16, gpuctrl_w16)
AM_RANGE(0xf02200, 0xf022ff) AM_MIRROR(0x008000) AM_READWRITE(jaguar_blitter_r16, jaguar_blitter_w16)
AM_RANGE(0xf03000, 0xf03fff) AM_MIRROR(0x008000) AM_READWRITE( jaguar_gpu_ram_r16, jaguar_gpu_ram_w16 )
AM_RANGE(0xf10000, 0xf103ff) AM_READWRITE(jaguar_jerry_regs_r, jaguar_jerry_regs_w) // might be reversed endian of the others..
AM_RANGE(0xf14000, 0xf14003) AM_READWRITE(joystick_r16, joystick_w16)
AM_RANGE(0xf14800, 0xf14803) AM_READWRITE(jaguar_eeprom_clk16,jaguar_eeprom_w16) // GPI00
AM_RANGE(0xf15000, 0xf15003) AM_READ(jaguar_eeprom_cs16) // GPI01
AM_RANGE(0xf1a100, 0xf1a13f) AM_READWRITE(dspctrl_r16, dspctrl_w16)
AM_RANGE(0xf1a140, 0xf1a17f) AM_READWRITE(jaguar_serial_r16, jaguar_serial_w16)
AM_RANGE(0xf1b000, 0xf1cfff) AM_READWRITE(jaguar_dsp_ram_r16, jaguar_dsp_ram_w16)
AM_RANGE(0xf1d000, 0xf1dfff) AM_READWRITE( high_rom_base_r16, high_rom_base_w16 )
ADDRESS_MAP_END
/*************************************
*
* Main CPU memory handlers
@ -899,7 +1304,43 @@ static ADDRESS_MAP_START( dsp_map, AS_PROGRAM, 32 )
AM_RANGE(0xf1d000, 0xf1dfff) AM_READ(jaguar_wave_rom_r) AM_BASE(&jaguar_wave_rom)
ADDRESS_MAP_END
/* ToDo, these maps SHOULD be merged with the ones above */
static ADDRESS_MAP_START( jag_gpu_map, AS_PROGRAM, 32 )
ADDRESS_MAP_GLOBAL_MASK(0xffffff)
AM_RANGE(0x000000, 0x1fffff) AM_RAM AM_BASE(&jaguar_shared_ram) AM_MIRROR(0x200000) AM_SHARE("share1") AM_REGION("maincpu", 0)
AM_RANGE(0x800000, 0xdfffff) AM_ROM AM_BASE(&cart_base) AM_SIZE(&cart_size) AM_SHARE("share15") AM_REGION("maincpu", 0x800000)
AM_RANGE(0xe00000, 0xe1ffff) AM_ROM AM_BASE(&rom_base) AM_SIZE(&rom_size) AM_SHARE("share16") AM_REGION("maincpu", 0xe00000)
AM_RANGE(0xf00000, 0xf003ff) AM_READWRITE(jaguar_tom_regs32_r, jaguar_tom_regs32_w)
AM_RANGE(0xf00400, 0xf005ff) AM_BASE(&jaguar_gpu_clut) AM_MIRROR(0x000200) AM_RAM AM_SHARE("share2")
AM_RANGE(0xf02100, 0xf021ff) AM_MIRROR(0x008000) AM_READWRITE(gpuctrl_r, gpuctrl_w)
AM_RANGE(0xf02200, 0xf022ff) AM_MIRROR(0x008000) AM_READWRITE(jaguar_blitter_r, jaguar_blitter_w)
AM_RANGE(0xf03000, 0xf03fff) AM_BASE(&jaguar_gpu_ram) AM_MIRROR(0x008000) AM_RAM AM_SHARE("share3")
AM_RANGE(0xf10000, 0xf103ff) AM_READWRITE(jaguar_jerry_regs32_r, jaguar_jerry_regs32_w)
AM_RANGE(0xf14000, 0xf14003) AM_READWRITE(joystick_r, joystick_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_BASE(&jaguar_dsp_ram) AM_RAM AM_SHARE("share4")
AM_RANGE(0xf1d000, 0xf1dfff) AM_ROM AM_BASE(&high_rom_base) AM_REGION("maincpu", 0xf1d000)
ADDRESS_MAP_END
static ADDRESS_MAP_START( jag_dsp_map, AS_PROGRAM, 32 )
ADDRESS_MAP_GLOBAL_MASK(0xffffff)
AM_RANGE(0x000000, 0x1fffff) AM_MIRROR(0x200000) AM_RAM AM_SHARE("share1") AM_REGION("maincpu", 0)
AM_RANGE(0x800000, 0xdfffff) AM_ROM AM_SHARE("share15") AM_REGION("maincpu", 0x800000)
AM_RANGE(0xe00000, 0xe1ffff) AM_ROM AM_SHARE("share16") AM_REGION("maincpu", 0xe00000)
AM_RANGE(0xf00000, 0xf003ff) AM_READWRITE(jaguar_tom_regs32_r, jaguar_tom_regs32_w)
AM_RANGE(0xf00400, 0xf005ff) AM_MIRROR(0x000200) AM_RAM AM_SHARE("share2")
AM_RANGE(0xf02100, 0xf021ff) AM_MIRROR(0x008000) AM_READWRITE(gpuctrl_r, gpuctrl_w)
AM_RANGE(0xf02200, 0xf022ff) AM_MIRROR(0x008000) AM_READWRITE(jaguar_blitter_r, jaguar_blitter_w)
AM_RANGE(0xf03000, 0xf03fff) AM_MIRROR(0x008000) AM_RAM AM_SHARE("share3")
AM_RANGE(0xf10000, 0xf103ff) AM_READWRITE(jaguar_jerry_regs32_r, jaguar_jerry_regs32_w)
AM_RANGE(0xf14000, 0xf14003) AM_READWRITE(joystick_r, joystick_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("share4")
AM_RANGE(0xf1d000, 0xf1dfff) AM_ROM AM_REGION("maincpu", 0xf1d000)
ADDRESS_MAP_END
/*************************************
*
@ -1100,6 +1541,105 @@ static INPUT_PORTS_START( vcircle )
INPUT_PORTS_END
static INPUT_PORTS_START( jaguar )
PORT_START("JOY0")
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0xf0ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("JOY1")
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 1") PORT_CODE(KEYCODE_1) PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 4") PORT_CODE(KEYCODE_4) PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 7") PORT_CODE(KEYCODE_7) PORT_PLAYER(1)
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad *") PORT_CODE(KEYCODE_K) PORT_PLAYER(1)
PORT_BIT( 0xf0ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("JOY2")
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 2") PORT_CODE(KEYCODE_2) PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 5") PORT_CODE(KEYCODE_5) PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 8") PORT_CODE(KEYCODE_8) PORT_PLAYER(1)
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 0") PORT_CODE(KEYCODE_0) PORT_PLAYER(1)
PORT_BIT( 0xf0ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("JOY3")
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 3") PORT_CODE(KEYCODE_3) PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 6") PORT_CODE(KEYCODE_6) PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad 9") PORT_CODE(KEYCODE_9) PORT_PLAYER(1)
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P1 Keypad #") PORT_CODE(KEYCODE_L) PORT_PLAYER(1)
PORT_BIT( 0xf0ff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("JOY4")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 3") PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 6") PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 9") PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad #") PORT_PLAYER(2)
PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("JOY5")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 2") PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 5") PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 8") PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 0") PORT_PLAYER(2)
PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("JOY6")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 1") PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 4") PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad 7") PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("P2 Keypad *") PORT_PLAYER(2)
PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("JOY7")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P1 Pause") PORT_CODE(KEYCODE_I) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 A") PORT_PLAYER(1)
PORT_BIT( 0xfffc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS1")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 B") PORT_PLAYER(1)
PORT_BIT( 0xfffd, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS2")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 C") PORT_PLAYER(1)
PORT_BIT( 0xfffd, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS3")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 Option") PORT_CODE(KEYCODE_O) PORT_PLAYER(1)
PORT_BIT( 0xfffd, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS4")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P2 Option") PORT_PLAYER(2)
PORT_BIT( 0xfffd, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS5")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P2 C") PORT_PLAYER(2)
PORT_BIT( 0xfffd, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS6")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P2 B") PORT_PLAYER(2)
PORT_BIT( 0xfffd, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("BUTTONS7")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P2 Pause") PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 A") PORT_PLAYER(2)
PORT_BIT( 0xfffc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("CONFIG")
PORT_CONFNAME( 0x02, 0x00, "Show Logo")
PORT_CONFSETTING( 0x00, "Yes")
PORT_CONFSETTING( 0x02, "No")
PORT_CONFNAME( 0x10, 0x10, "TV System")
PORT_CONFSETTING( 0x00, "PAL")
PORT_CONFSETTING( 0x10, "NTSC")
INPUT_PORTS_END
/*************************************
*
@ -1178,6 +1718,213 @@ static MACHINE_CONFIG_DERIVED( cojag68k, cojagr3k )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( jaguar, driver_device )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, JAGUAR_CLOCK/2)
MCFG_CPU_PROGRAM_MAP(jaguar_map)
MCFG_CPU_ADD("gpu", JAGUARGPU, JAGUAR_CLOCK)
MCFG_CPU_CONFIG(gpu_config)
MCFG_CPU_PROGRAM_MAP(jag_gpu_map)
MCFG_CPU_ADD("audiocpu", JAGUARDSP, JAGUAR_CLOCK)
MCFG_CPU_CONFIG(dsp_config)
MCFG_CPU_PROGRAM_MAP(jag_dsp_map)
MCFG_MACHINE_RESET(jaguar)
// MCFG_NVRAM_HANDLER(jaguar)
MCFG_TIMER_ADD("serial_timer", jaguar_serial_callback)
/* video hardware */
MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_RAW_PARAMS(JAGUAR_CLOCK, 456, 42, 402, 262, 17, 257)
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MCFG_SCREEN_UPDATE(cojag)
MCFG_VIDEO_START(jaguar)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("dac1", DAC, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ADD("dac2", DAC, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
/* quickload */
MCFG_QUICKLOAD_ADD("quickload", jaguar, "abs,bin,cof,jag,prg", 0)
/* cartridge */
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("j64,rom")
MCFG_CARTSLOT_INTERFACE("jaguar_cart")
MCFG_CARTSLOT_START(jaguar_cart)
MCFG_CARTSLOT_LOAD(jaguar)
/* software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","jaguar")
MCFG_EEPROM_93C46_ADD("eeprom")
MACHINE_CONFIG_END
/*************************************
*
* Driver initialization
*
*************************************/
static void jaguar_fix_endian( running_machine &machine, UINT32 addr, UINT32 size )
{
UINT8 j[4], *RAM = machine.region("maincpu")->base();
UINT32 i;
size += addr;
logerror("File Loaded to address range %X to %X\n",addr,size-1);
for (i = addr; i < size; i+=4)
{
j[0] = RAM[i];
j[1] = RAM[i+1];
j[2] = RAM[i+2];
j[3] = RAM[i+3];
RAM[i] = j[3];
RAM[i+1] = j[2];
RAM[i+2] = j[1];
RAM[i+3] = j[0];
}
}
static DRIVER_INIT( jaguar )
{
state_save_register_global(machine, joystick_data);
using_cart = 0;
for (int i=0;i<0x20000/4;i++) // the cd bios is bigger.. check
{
rom_base[i] = ((rom_base[i] & 0xffff0000)>>16) | ((rom_base[i] & 0x0000ffff)<<16);
}
for (int i=0;i<0x1000/4;i++)
{
high_rom_base[i] = ((high_rom_base[i] & 0xffff0000)>>16) | ((high_rom_base[i] & 0x0000ffff)<<16);
}
}
static QUICKLOAD_LOAD( jaguar )
{
offs_t quickload_begin = 0x4000, start = quickload_begin, skip = 0;
memset(jaguar_shared_ram, 0, 0x200000);
quickload_size = MIN(quickload_size, 0x200000 - quickload_begin);
image.fread( &image.device().machine().region("maincpu")->base()[quickload_begin], quickload_size);
jaguar_fix_endian(image.device().machine(), quickload_begin, quickload_size);
/* Deal with some of the numerous homebrew header systems */
/* COF */
if ((jaguar_shared_ram[0x1000] & 0xffff0000) == 0x01500000)
{
start = jaguar_shared_ram[0x100e];
skip = jaguar_shared_ram[0x1011];
}
else /* PRG */
if (((jaguar_shared_ram[0x1000] & 0xffff0000) == 0x601A0000) && (jaguar_shared_ram[0x1007] == 0x4A414752))
{
UINT32 type = jaguar_shared_ram[0x1008] >> 16;
start = ((jaguar_shared_ram[0x1008] & 0xffff) << 16) | (jaguar_shared_ram[0x1009] >> 16);
skip = 28;
if (type == 2) skip = 42;
else if (type == 3) skip = 46;
}
else /* ABS with header */
if ((jaguar_shared_ram[0x1000] & 0xffff0000) == 0x601B0000)
{
start = ((jaguar_shared_ram[0x1005] & 0xffff) << 16) | (jaguar_shared_ram[0x1006] >> 16);
skip = 36;
}
else /* A header used by Badcoder */
if ((jaguar_shared_ram[0x1000] & 0xffff0000) == 0x72000000)
skip = 96;
else /* ABS binary */
if (!mame_stricmp(image.filetype(), "abs"))
start = 0xc000;
else /* JAG binary */
if (!mame_stricmp(image.filetype(), "jag"))
start = 0x5000;
/* Now that we have the info, reload the file */
if ((start != quickload_begin) || (skip))
{
memset(jaguar_shared_ram, 0, 0x200000);
image.fseek(0, SEEK_SET);
image.fread( &image.device().machine().region("maincpu")->base()[start-skip], quickload_size);
quickload_begin = start;
jaguar_fix_endian(image.device().machine(), (start-skip)&0xfffffc, quickload_size);
}
/* Some programs are too lazy to set a stack pointer */
cpu_set_reg(image.device().machine().device("maincpu"), STATE_GENSP, 0x1000);
jaguar_shared_ram[0]=0x1000;
/* Transfer control to image */
cpu_set_reg(image.device().machine().device("maincpu"), STATE_GENPC, quickload_begin);
jaguar_shared_ram[1]=quickload_begin;
return IMAGE_INIT_PASS;
}
static DEVICE_START( jaguar_cart )
{
/* Initialize for no cartridge present */
using_cart = 0;
memset( cart_base, 0, cart_size );
}
static DEVICE_IMAGE_LOAD( jaguar )
{
UINT32 size, load_offset = 0;
if (image.software_entry() == NULL)
{
size = image.length();
/* .rom files load & run at 802000 */
if (!mame_stricmp(image.filetype(), "rom"))
{
load_offset = 0x2000; // fix load address
cart_base[0x101]=0x802000; // fix exec address
}
/* Load cart into memory */
image.fread( &image.device().machine().region("maincpu")->base()[0x800000+load_offset], size);
}
else
{
size = image.get_software_region_length("rom");
memcpy(cart_base, image.get_software_region("rom"), size);
}
memset(jaguar_shared_ram, 0, 0x200000);
jaguar_fix_endian(image.device().machine(), 0x800000+load_offset, size);
/* Skip the logo */
using_cart = 1;
// cart_base[0x102] = 1;
/* Transfer control to the bios */
cpu_set_reg(image.device().machine().device("maincpu"), STATE_GENPC, rom_base[1]);
return IMAGE_INIT_PASS;
}
/*************************************
*
@ -1189,6 +1936,26 @@ MACHINE_CONFIG_END
*
*************************************/
/* Home System */
ROM_START( jaguar )
ROM_REGION( 0x1000000, "maincpu", 0 ) /* 4MB for RAM at 0 */
ROM_LOAD16_WORD( "jagboot.rom", 0xe00000, 0x020000, CRC(fb731aaa) SHA1(f8991b0c385f4e5002fa2a7e2f5e61e8c5213356) )
ROM_CART_LOAD("cart", 0x800000, 0x600000, ROM_NOMIRROR)
ROM_LOAD16_WORD("jagwave.rom", 0xf1d000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_END
ROM_START( jaguarcd )
ROM_REGION( 0x1000000, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "default", "Jaguar CD" )
ROMX_LOAD( "jag_cd.bin", 0xe00000, 0x040000, CRC(687068d5) SHA1(73883e7a6e9b132452436f7ab1aeaeb0776428e5), ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "dev", "Jaguar Developer CD" )
ROMX_LOAD( "jagdevcd.bin", 0xe00000, 0x040000, CRC(55a0669c) SHA1(d61b7b5912118f114ef00cf44966a5ef62e455a5), ROM_BIOS(2) )
ROM_CART_LOAD("cart", 0x800000, 0x600000, ROM_NOMIRROR)
ROM_LOAD16_WORD("jagwave.rom", 0xf1d000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_END
/****************************************
ROM & Hard Disk based games
@ -1674,6 +2441,10 @@ static DRIVER_INIT( vcircle )
*
*************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
CONS( 1993, jaguar, 0, 0, jaguar, jaguar, jaguar, "Atari", "Jaguar", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
CONS( 1995, jaguarcd, jaguar, 0, jaguar, jaguar, jaguar, "Atari", "Jaguar CD", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
GAME( 1996, area51, 0, cojagr3k, area51, area51, ROT0, "Atari Games", "Area 51 (R3000)", 0 )
GAME( 1995, area51t, area51, cojag68k, area51, area51a, ROT0, "Atari Games (Time Warner license)", "Area 51 (Time Warner license)", 0 )
GAME( 1995, area51a, area51, cojag68k, area51, area51a, ROT0, "Atari Games", "Area 51 (Atari Games license)", 0 )

View File

@ -416,7 +416,6 @@ $(MAMEOBJ)/atari.a: \
$(DRIVERS)/cloak.o $(VIDEO)/cloak.o \
$(DRIVERS)/cloud9.o $(VIDEO)/cloud9.o \
$(DRIVERS)/cmmb.o \
$(DRIVERS)/cojag.o $(AUDIO)/jaguar.o $(VIDEO)/jaguar.o \
$(DRIVERS)/copsnrob.o $(AUDIO)/copsnrob.o $(VIDEO)/copsnrob.o \
$(DRIVERS)/cyberbal.o $(AUDIO)/cyberbal.o $(VIDEO)/cyberbal.o \
$(DRIVERS)/destroyr.o \
@ -429,6 +428,7 @@ $(MAMEOBJ)/atari.a: \
$(DRIVERS)/gauntlet.o $(VIDEO)/gauntlet.o \
$(DRIVERS)/harddriv.o $(MACHINE)/harddriv.o $(AUDIO)/harddriv.o $(VIDEO)/harddriv.o \
$(DRIVERS)/irobot.o $(MACHINE)/irobot.o $(VIDEO)/irobot.o \
$(DRIVERS)/jaguar.o $(AUDIO)/jaguar.o $(VIDEO)/jaguar.o \
$(DRIVERS)/jedi.o $(AUDIO)/jedi.o $(VIDEO)/jedi.o \
$(DRIVERS)/klax.o $(VIDEO)/klax.o \
$(DRIVERS)/liberatr.o $(VIDEO)/liberatr.o \

View File

@ -221,12 +221,9 @@ static void blitter_09800009_000020_000020(running_machine &machine, UINT32 comm
static void blitter_01800009_000028_000028(running_machine &machine, UINT32 command, UINT32 a1flags, UINT32 a2flags);
static void blitter_01800001_000018_000018(running_machine &machine, UINT32 command, UINT32 a1flags, UINT32 a2flags);
static void blitter_01c00001_000018_000018(running_machine &machine, UINT32 command, UINT32 a1flags, UINT32 a2flags);
#ifdef MESS
static void blitter_00010000_xxxxxx_xxxxxx(running_machine &machine, UINT32 command, UINT32 a1flags, UINT32 a2flags);
static void blitter_01800001_xxxxxx_xxxxxx(running_machine &machine, UINT32 command, UINT32 a1flags, UINT32 a2flags);
static void blitter_x1800x01_xxxxxx_xxxxxx(running_machine &machine, UINT32 command, UINT32 a1flags, UINT32 a2flags);
#endif
@ -545,7 +542,6 @@ static void blitter_run(running_machine &machine)
}
}
#ifdef MESS
if (command == 0x00010000)
{
blitter_00010000_xxxxxx_xxxxxx(machine, blitter_regs[B_CMD], blitter_regs[A1_FLAGS], blitter_regs[A2_FLAGS]);
@ -563,8 +559,6 @@ static void blitter_run(running_machine &machine)
blitter_x1800x01_xxxxxx_xxxxxx(machine, blitter_regs[B_CMD], blitter_regs[A1_FLAGS], blitter_regs[A2_FLAGS]);
return;
}
#endif
if (LOG_BLITTER_STATS)
{
@ -1028,7 +1022,6 @@ SCREEN_UPDATE( cojag )
#undef COMMAND
#undef FUNCNAME
#ifdef MESS
#define FUNCNAME blitter_00010000_xxxxxx_xxxxxx
#define COMMAND 0x00010000
@ -1060,4 +1053,3 @@ SCREEN_UPDATE( cojag )
#undef COMMAND
#undef FUNCNAME
#endif /* MESS */