refactored to use ATA_INTERFACE [smf]

This commit is contained in:
smf- 2013-08-25 15:12:18 +00:00
parent f880f6f344
commit c8595ffefd
2 changed files with 91 additions and 434 deletions

View File

@ -19,6 +19,8 @@ void atapi_hle_device::process_buffer()
// m_buffer[4],m_buffer[5],m_buffer[6],m_buffer[7], // m_buffer[4],m_buffer[5],m_buffer[6],m_buffer[7],
// m_buffer[8],m_buffer[9],m_buffer[10],m_buffer[11]); // m_buffer[8],m_buffer[9],m_buffer[10],m_buffer[11]);
m_error = 0; // HACK: This might not be the right place, but firebeat needs this cleared at some point
m_scsidev_device->SetCommand( m_buffer, m_buffer_size ); m_scsidev_device->SetCommand( m_buffer, m_buffer_size );
m_scsidev_device->ExecCommand( &m_data_size ); m_scsidev_device->ExecCommand( &m_data_size );
m_scsidev_device->GetPhase( &phase ); m_scsidev_device->GetPhase( &phase );

View File

@ -31,12 +31,12 @@
GQ971 PWB(B2) 0000067784 Backplane GQ971 PWB(B2) 0000067784 Backplane
---------------------------------- ----------------------------------
3x PCB Slots with 2x DIN96S connectors (for main and extend PCBs) 3x PCB Slots with 2x DIN96S connectors (for main and extend PCBs)
40-pin ATAPI connector for each slot 40-pin ATA connector for each slot
GQ986 PWB(A1) 0000073015 Backplane GQ986 PWB(A1) 0000073015 Backplane
---------------------------------- ----------------------------------
2x PCB Slots with 2x DIN96S connectors (for main and extend PCBs) 2x PCB Slots with 2x DIN96S connectors (for main and extend PCBs)
40-pin ATAPI connector for each slot 40-pin ATA connector for each slot
GQ972 PWB(D2) Controller interface on Beatmania III (?) GQ972 PWB(D2) Controller interface on Beatmania III (?)
GQ972 PWB(G1) Sound Amp (?) GQ972 PWB(G1) Sound Amp (?)
@ -132,14 +132,13 @@
#include "emu.h" #include "emu.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/powerpc/ppc.h" #include "cpu/powerpc/ppc.h"
#include "machine/ataintf.h"
#include "machine/intelfsh.h" #include "machine/intelfsh.h"
#include "machine/scsicd.h"
#include "machine/rtc65271.h" #include "machine/rtc65271.h"
#include "machine/ins8250.h" #include "machine/ins8250.h"
#include "machine/midikbd.h" #include "machine/midikbd.h"
#include "sound/ymz280b.h" #include "sound/ymz280b.h"
#include "sound/cdda.h" #include "sound/cdda.h"
#include "cdrom.h"
#include "firebeat.lh" #include "firebeat.lh"
@ -178,7 +177,8 @@ public:
m_duart_midi(*this, "duart_midi"), m_duart_midi(*this, "duart_midi"),
m_duart_com(*this, "duart_com"), m_duart_com(*this, "duart_com"),
m_kbd0(*this, "kbd0"), m_kbd0(*this, "kbd0"),
m_kbd1(*this, "kbd1") m_kbd1(*this, "kbd1"),
m_ata(*this, "ata")
{ } { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
@ -190,6 +190,7 @@ public:
required_device<pc16552_device> m_duart_com; required_device<pc16552_device> m_duart_com;
optional_device<midi_keyboard_device> m_kbd0; optional_device<midi_keyboard_device> m_kbd0;
optional_device<midi_keyboard_device> m_kbd1; optional_device<midi_keyboard_device> m_kbd1;
required_device<ata_interface_device> m_ata;
UINT8 m_extend_board_irq_enable; UINT8 m_extend_board_irq_enable;
UINT8 m_extend_board_irq_active; UINT8 m_extend_board_irq_active;
@ -197,16 +198,6 @@ public:
GCU_REGS m_gcu[2]; GCU_REGS m_gcu[2];
int m_tick; int m_tick;
int m_layer; int m_layer;
UINT8 m_atapi_regs[16];
scsihle_device *m_atapi_device_data[2];
UINT16 m_atapi_data[32*1024];
UINT8 m_atapi_scsi_packet[32*1024];
int m_atapi_data_ptr;
int m_atapi_xferlen;
int m_atapi_xfermod;
int m_atapi_cdata_wait;
int m_atapi_drivesel;
UINT8 m_temp_data[64*1024];
int m_cab_data_ptr; int m_cab_data_ptr;
const int * m_cur_cab_data; const int * m_cur_cab_data;
// int m_keyboard_state[2]; // int m_keyboard_state[2];
@ -235,10 +226,11 @@ public:
DECLARE_WRITE32_MEMBER(flashram_w); DECLARE_WRITE32_MEMBER(flashram_w);
DECLARE_READ32_MEMBER(soundflash_r); DECLARE_READ32_MEMBER(soundflash_r);
DECLARE_WRITE32_MEMBER(soundflash_w); DECLARE_WRITE32_MEMBER(soundflash_w);
DECLARE_READ32_MEMBER(atapi_command_r); DECLARE_WRITE_LINE_MEMBER(ata_interrupt);
DECLARE_WRITE32_MEMBER(atapi_command_w); DECLARE_READ32_MEMBER(ata_command_r);
DECLARE_READ32_MEMBER(atapi_control_r); DECLARE_WRITE32_MEMBER(ata_command_w);
DECLARE_WRITE32_MEMBER(atapi_control_w); DECLARE_READ32_MEMBER(ata_control_r);
DECLARE_WRITE32_MEMBER(ata_control_w);
// DECLARE_READ32_MEMBER(comm_uart_r); // DECLARE_READ32_MEMBER(comm_uart_r);
// DECLARE_WRITE32_MEMBER(comm_uart_w); // DECLARE_WRITE32_MEMBER(comm_uart_w);
DECLARE_READ32_MEMBER(cabinet_r); DECLARE_READ32_MEMBER(cabinet_r);
@ -265,14 +257,6 @@ public:
UINT32 update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip); UINT32 update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip);
UINT32 GCU_r(int chip, UINT32 offset, UINT32 mem_mask); UINT32 GCU_r(int chip, UINT32 offset, UINT32 mem_mask);
void GCU_w(int chip, UINT32 offset, UINT32 data, UINT32 mem_mask); void GCU_w(int chip, UINT32 offset, UINT32 data, UINT32 mem_mask);
void atapi_cause_irq();
void atapi_clear_irq();
void atapi_init();
void atapi_reset();
UINT16 atapi_command_reg_r(int reg);
void atapi_command_reg_w(int reg, UINT16 data);
UINT16 atapi_control_reg_r(int reg);
void atapi_control_reg_w(int reg, UINT16 data);
void set_ibutton(UINT8 *data); void set_ibutton(UINT8 *data);
int ibutton_w(UINT8 data); int ibutton_w(UINT8 data);
void init_lights(write32_delegate out1, write32_delegate out2, write32_delegate out3); void init_lights(write32_delegate out1, write32_delegate out2, write32_delegate out3);
@ -994,408 +978,67 @@ WRITE32_MEMBER(firebeat_state::soundflash_w)
} }
/*****************************************************************************/ /*****************************************************************************/
/* ATAPI Interface */ /* ATA Interface */
#define BYTESWAP16(x) ((((x) >> 8) & 0xff) | (((x) << 8) & 0xff00)) #define BYTESWAP16(x) ((((x) >> 8) & 0xff) | (((x) << 8) & 0xff00))
#if 1 READ32_MEMBER(firebeat_state::ata_command_r )
#define ATAPI_ENDIAN(x) (BYTESWAP16(x))
#else
#define ATAPI_ENDIAN(x) (x)
#endif
#define ATAPI_CYCLES_PER_SECTOR (32000) // plenty of time to allow DMA setup etc. BIOS requires this be at least 2000, individual games may vary.
#define ATAPI_STAT_BSY 0x80
#define ATAPI_STAT_DRDY 0x40
#define ATAPI_STAT_DMARDDF 0x20
#define ATAPI_STAT_SERVDSC 0x10
#define ATAPI_STAT_DRQ 0x08
#define ATAPI_STAT_CORR 0x04
#define ATAPI_STAT_CHECK 0x01
#define ATAPI_INTREASON_COMMAND 0x01
#define ATAPI_INTREASON_IO 0x02
#define ATAPI_INTREASON_RELEASE 0x04
#define ATAPI_REG_DATA 0
#define ATAPI_REG_ERRFEAT 1
#define ATAPI_REG_INTREASON 2
#define ATAPI_REG_SAMTAG 3
#define ATAPI_REG_COUNTLOW 4
#define ATAPI_REG_COUNTHIGH 5
#define ATAPI_REG_DRIVESEL 6
#define ATAPI_REG_CMDSTATUS 7
void firebeat_state::atapi_cause_irq()
{
m_maincpu->set_input_line(INPUT_LINE_IRQ4, ASSERT_LINE);
}
void firebeat_state::atapi_clear_irq()
{
m_maincpu->set_input_line(INPUT_LINE_IRQ4, CLEAR_LINE);
}
void firebeat_state::atapi_init()
{
memset(m_atapi_regs, 0, sizeof(m_atapi_regs));
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
m_atapi_regs[ATAPI_REG_ERRFEAT] = 1;
m_atapi_regs[ATAPI_REG_COUNTLOW] = 0x14;
m_atapi_regs[ATAPI_REG_COUNTHIGH] = 0xeb;
m_atapi_data_ptr = 0;
m_atapi_cdata_wait = 0;
m_atapi_device_data[0] = machine().device<scsihle_device>( "scsi0" );
m_atapi_device_data[1] = machine().device<scsihle_device>( "scsi1" );
}
void firebeat_state::atapi_reset()
{
logerror("ATAPI reset\n");
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
m_atapi_regs[ATAPI_REG_ERRFEAT] = 1;
m_atapi_regs[ATAPI_REG_COUNTLOW] = 0x14;
m_atapi_regs[ATAPI_REG_COUNTHIGH] = 0xeb;
m_atapi_data_ptr = 0;
m_atapi_cdata_wait = 0;
}
UINT16 firebeat_state::atapi_command_reg_r(int reg)
{
int i, data;
// printf("ATAPI: Command reg read %d\n", reg);
if (reg == ATAPI_REG_DATA)
{
// assert IRQ and drop DRQ
if (m_atapi_data_ptr == 0)
{
//printf("ATAPI: dropping DRQ\n");
atapi_cause_irq();
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
// get the data from the device
m_atapi_device_data[m_atapi_drivesel]->ReadData( m_temp_data, m_atapi_xferlen );
// fix it up in an endian-safe way
for (i = 0; i < m_atapi_xferlen; i += 2)
{
m_atapi_data[i/2] = m_temp_data[i+0] | m_temp_data[i+1]<<8;
}
}
data = m_atapi_data[m_atapi_data_ptr];
// printf("ATAPI: %d, packet read = %04x\n", m_atapi_data_ptr, m_atapi_data[m_atapi_data_ptr]);
m_atapi_data_ptr++;
if (m_atapi_xfermod && m_atapi_data_ptr == (m_atapi_xferlen/2))
{
//printf("ATAPI: DRQ interrupt\n");
atapi_cause_irq();
m_atapi_regs[ATAPI_REG_CMDSTATUS] |= ATAPI_STAT_DRQ;
m_atapi_data_ptr = 0;
if (m_atapi_xfermod > 63488)
{
m_atapi_xfermod = m_atapi_xfermod - 63488;
m_atapi_xferlen = 63488;
}
else
{
m_atapi_xferlen = m_atapi_xfermod;
m_atapi_xfermod = 0;
}
//printf("ATAPI Transfer: %d, %d, %d\n", atapi_transfer_length, m_atapi_xfermod, m_atapi_xferlen);
m_atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
m_atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
}
return data;
}
else
{
if (reg == ATAPI_REG_CMDSTATUS)
atapi_clear_irq();
return m_atapi_regs[reg];
}
}
void firebeat_state::atapi_command_reg_w(int reg, UINT16 data)
{
int i;
if (reg == ATAPI_REG_DATA)
{
// printf("%s:ATAPI: packet write %04x\n", device->machine().describe_context(), data);
m_atapi_data[m_atapi_data_ptr] = data;
m_atapi_data_ptr++;
if (m_atapi_cdata_wait)
{
// printf("ATAPI: waiting, ptr %d wait %d\n", m_atapi_data_ptr, m_atapi_cdata_wait);
if (m_atapi_data_ptr == m_atapi_cdata_wait)
{
// decompose SCSI packet into proper byte order
for (i = 0; i < m_atapi_cdata_wait; i += 2)
{
m_atapi_scsi_packet[i] = m_atapi_data[i/2]&0xff;
m_atapi_scsi_packet[i+1] = m_atapi_data[i/2]>>8;
}
// send it to the device
m_atapi_device_data[m_atapi_drivesel]->WriteData( m_atapi_scsi_packet, m_atapi_cdata_wait );
// assert IRQ
atapi_cause_irq();
// not sure here, but clear DRQ at least?
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
}
}
if ((!m_atapi_cdata_wait) && (m_atapi_data_ptr == 6))
{
int phase;
// reset data pointer for reading SCSI results
m_atapi_data_ptr = 0;
m_atapi_regs[ATAPI_REG_CMDSTATUS] |= ATAPI_STAT_BSY;
// assert IRQ
atapi_cause_irq();
// decompose SCSI packet into proper byte order
for (i = 0; i < 16; i += 2)
{
m_atapi_scsi_packet[i+0] = m_atapi_data[i/2]&0xff;
m_atapi_scsi_packet[i+1] = m_atapi_data[i/2]>>8;
}
// send it to the SCSI device
m_atapi_device_data[m_atapi_drivesel]->SetCommand( m_atapi_scsi_packet, 12 );
m_atapi_device_data[m_atapi_drivesel]->ExecCommand( &m_atapi_xferlen );
m_atapi_device_data[m_atapi_drivesel]->GetPhase( &phase );
if (m_atapi_xferlen != -1)
{
logerror("ATAPI: SCSI command %02x returned %d bytes from the device\n", m_atapi_data[0]&0xff, m_atapi_xferlen);
// store the returned command length in the ATAPI regs, splitting into
// multiple transfers if necessary
m_atapi_xfermod = 0;
if (m_atapi_xferlen > 63488)
{
m_atapi_xfermod = m_atapi_xferlen - 63488;
m_atapi_xferlen = 63488;
}
// printf("ATAPI Transfer: %d, %d\n", m_atapi_xfermod, m_atapi_xferlen);
m_atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
m_atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
switch( phase )
{
case SCSI_PHASE_DATAOUT:
m_atapi_data_ptr = 0;
m_atapi_cdata_wait = m_atapi_xferlen;
logerror("ATAPI: Waiting for %x bytes of data\n", m_atapi_cdata_wait);
break;
}
// perform special ATAPI processing of certain commands
//if (m_atapi_drivesel==1) logerror("!!!ATAPI COMMAND %x\n", m_atapi_data[0]&0xff);
switch (m_atapi_data[0]&0xff)
{
case 0x55: // MODE SELECT
m_atapi_cdata_wait = m_atapi_data[4]/2;
m_atapi_data_ptr = 0;
logerror("ATAPI: Waiting for %x bytes of MODE SELECT data\n", m_atapi_cdata_wait);
break;
case 0xa8: // READ (12)
// indicate data ready: set DRQ and DMA ready, and IO in INTREASON
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_SERVDSC;
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
fatalerror("ATAPI: DMA read command attempted\n");
break;
case 0x00: // BUS RESET / TEST UNIT READY
case 0xbb: // SET CD SPEED
case 0xa5: // PLAY AUDIO
case 0x1b: // START_STOP_UNIT
case 0x4e: // STOPPLAY_SCAN
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
break;
}
}
else
{
// printf("ATAPI: SCSI device returned error!\n");
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_CHECK;
m_atapi_regs[ATAPI_REG_ERRFEAT] = 0x50; // sense key = ILLEGAL REQUEST
m_atapi_regs[ATAPI_REG_COUNTLOW] = 0;
m_atapi_regs[ATAPI_REG_COUNTHIGH] = 0;
}
}
}
else
{
data &= 0xff;
m_atapi_regs[reg] = data;
// printf("ATAPI: Command reg %d = %02X\n", reg, data);
switch(reg)
{
case ATAPI_REG_DRIVESEL:
m_atapi_drivesel = (data >> 4) & 0x1;
break;
case ATAPI_REG_CMDSTATUS:
// printf("ATAPI: Issued command %02X\n", data);
switch(data)
{
case 0x00: /* NOP */
break;
case 0x08: /* ATAPI Soft Reset */
atapi_reset();
break;
case 0xa0: /* ATAPI Packet */
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_BSY | ATAPI_STAT_DRQ;
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_COMMAND;
m_atapi_data_ptr = 0;
m_atapi_cdata_wait = 0;
break;
default:
fatalerror("ATAPI: Unknown ATA command %02X\n", data);
}
break;
}
}
}
UINT16 firebeat_state::atapi_control_reg_r(int reg)
{
UINT16 value;
switch(reg)
{
case 0x6:
{
value = m_atapi_regs[ATAPI_REG_CMDSTATUS];
if (m_atapi_regs[ATAPI_REG_CMDSTATUS] & ATAPI_STAT_BSY)
{
m_atapi_regs[ATAPI_REG_CMDSTATUS] ^= ATAPI_STAT_BSY;
}
return value;
}
default:
fatalerror("ATAPI: Read control reg %d\n", reg);
break;
}
return 0;
}
void firebeat_state::atapi_control_reg_w(int reg, UINT16 data)
{
switch(reg)
{
case 0x06: /* Device Control */
{
if (data & 0x4)
{
atapi_reset();
}
break;
}
default:
fatalerror("ATAPI: Control reg %d = %02X\n", reg, data);
}
}
READ32_MEMBER(firebeat_state::atapi_command_r )
{ {
UINT16 r; UINT16 r;
// printf("atapi_command_r: %08X, %08X\n", offset, mem_mask); // printf("ata_command_r: %08X, %08X\n", offset, mem_mask);
if (ACCESSING_BITS_16_31) if (ACCESSING_BITS_16_31)
{ {
r = atapi_command_reg_r(offset*2); r = m_ata->read_cs0(space, offset*2, BYTESWAP16((mem_mask >> 16) & 0xffff));
return ATAPI_ENDIAN(r) << 16; return BYTESWAP16(r) << 16;
} }
else else
{ {
r = atapi_command_reg_r((offset*2) + 1); r = m_ata->read_cs0(space, (offset*2) + 1, BYTESWAP16((mem_mask >> 0) & 0xffff));
return ATAPI_ENDIAN(r) << 0; return BYTESWAP16(r) << 0;
} }
} }
WRITE32_MEMBER(firebeat_state::atapi_command_w ) WRITE32_MEMBER(firebeat_state::ata_command_w )
{ {
// printf("atapi_command_w: %08X, %08X, %08X\n", data, offset, mem_mask); // printf("ata_command_w: %08X, %08X, %08X\n", data, offset, mem_mask);
if (ACCESSING_BITS_16_31) if (ACCESSING_BITS_16_31)
{ {
atapi_command_reg_w(offset*2, ATAPI_ENDIAN((data >> 16) & 0xffff)); m_ata->write_cs0(space, offset*2, BYTESWAP16((data >> 16) & 0xffff), BYTESWAP16((mem_mask >> 16) & 0xffff));
} }
else else
{ {
atapi_command_reg_w((offset*2) + 1, ATAPI_ENDIAN((data >> 0) & 0xffff)); m_ata->write_cs0(space, (offset*2) + 1, BYTESWAP16((data >> 0) & 0xffff), BYTESWAP16((mem_mask >> 0) & 0xffff));
} }
} }
READ32_MEMBER(firebeat_state::atapi_control_r ) READ32_MEMBER(firebeat_state::ata_control_r )
{ {
UINT16 r; UINT16 r;
// printf("atapi_control_r: %08X, %08X\n", offset, mem_mask); // printf("ata_control_r: %08X, %08X\n", offset, mem_mask);
if (ACCESSING_BITS_16_31) if (ACCESSING_BITS_16_31)
{ {
r = atapi_control_reg_r(offset*2); r = m_ata->read_cs1(space, offset*2, BYTESWAP16((mem_mask >> 16) & 0xffff));
return ATAPI_ENDIAN(r) << 16; return BYTESWAP16(r) << 16;
} }
else else
{ {
r = atapi_control_reg_r((offset*2) + 1); r = m_ata->read_cs1(space, (offset*2) + 1, BYTESWAP16((mem_mask >> 0) & 0xffff));
return ATAPI_ENDIAN(r) << 0; return BYTESWAP16(r) << 0;
} }
} }
WRITE32_MEMBER(firebeat_state::atapi_control_w ) WRITE32_MEMBER(firebeat_state::ata_control_w )
{ {
if (ACCESSING_BITS_16_31) if (ACCESSING_BITS_16_31)
{ {
atapi_control_reg_w(offset*2, ATAPI_ENDIAN(data >> 16) & 0xff); m_ata->write_cs1(space, offset*2, BYTESWAP16(data >> 16) & 0xffff, BYTESWAP16((mem_mask >> 16) & 0xffff));
} }
else else
{ {
atapi_control_reg_w((offset*2) + 1, ATAPI_ENDIAN(data >> 0) & 0xff); m_ata->write_cs1(space, (offset*2) + 1, BYTESWAP16(data >> 0) & 0xffff, BYTESWAP16((mem_mask >> 0) & 0xffff));
} }
} }
@ -1902,8 +1545,8 @@ static ADDRESS_MAP_START( firebeat_map, AS_PROGRAM, 32, firebeat_state )
AM_RANGE(0x7e000100, 0x7e00013f) AM_DEVREADWRITE8("rtc", rtc65271_device, xram_r, xram_w, 0xffffffff) AM_RANGE(0x7e000100, 0x7e00013f) AM_DEVREADWRITE8("rtc", rtc65271_device, xram_r, xram_w, 0xffffffff)
AM_RANGE(0x7e800000, 0x7e8000ff) AM_READWRITE(gcu0_r, gcu0_w) AM_RANGE(0x7e800000, 0x7e8000ff) AM_READWRITE(gcu0_r, gcu0_w)
AM_RANGE(0x7e800100, 0x7e8001ff) AM_READWRITE(gcu1_r, gcu1_w) AM_RANGE(0x7e800100, 0x7e8001ff) AM_READWRITE(gcu1_r, gcu1_w)
AM_RANGE(0x7fe00000, 0x7fe0000f) AM_READWRITE(atapi_command_r, atapi_command_w) AM_RANGE(0x7fe00000, 0x7fe0000f) AM_READWRITE(ata_command_r, ata_command_w)
AM_RANGE(0x7fe80000, 0x7fe8000f) AM_READWRITE(atapi_control_r, atapi_control_w) AM_RANGE(0x7fe80000, 0x7fe8000f) AM_READWRITE(ata_control_r, ata_control_w)
AM_RANGE(0x7ff80000, 0x7fffffff) AM_ROM AM_REGION("user1", 0) /* System BIOS */ AM_RANGE(0x7ff80000, 0x7fffffff) AM_ROM AM_REGION("user1", 0) /* System BIOS */
ADDRESS_MAP_END ADDRESS_MAP_END
@ -2070,7 +1713,7 @@ INTERRUPT_GEN_MEMBER(firebeat_state::firebeat_interrupt)
// IRQ 0: VBlank // IRQ 0: VBlank
// IRQ 1: Extend board IRQ // IRQ 1: Extend board IRQ
// IRQ 2: Main board UART // IRQ 2: Main board UART
// IRQ 4: ATAPI // IRQ 4: ATA
device.execute().set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); device.execute().set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
} }
@ -2085,6 +1728,17 @@ const rtc65271_interface firebeat_rtc =
DEVCB_NULL DEVCB_NULL
}; };
WRITE_LINE_MEMBER( firebeat_state::ata_interrupt )
{
m_maincpu->set_input_line(INPUT_LINE_IRQ4, state);
}
static MACHINE_CONFIG_FRAGMENT( cdrom_config )
MCFG_DEVICE_MODIFY("device:cdda")
MCFG_SOUND_ROUTE(0, "^^^^^lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "^^^^^rspeaker", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( firebeat, firebeat_state ) static MACHINE_CONFIG_START( firebeat, firebeat_state )
/* basic machine hardware */ /* basic machine hardware */
@ -2101,8 +1755,11 @@ static MACHINE_CONFIG_START( firebeat, firebeat_state )
MCFG_FUJITSU_29F016A_ADD("flash_snd1") MCFG_FUJITSU_29F016A_ADD("flash_snd1")
MCFG_FUJITSU_29F016A_ADD("flash_snd2") MCFG_FUJITSU_29F016A_ADD("flash_snd2")
MCFG_DEVICE_ADD("scsi0", SCSICD, 0) MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "cdrom", "cdrom", true)
MCFG_DEVICE_ADD("scsi1", SCSICD, 0) MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(firebeat_state, ata_interrupt))
MCFG_DEVICE_MODIFY("ata:1")
MCFG_DEVICE_CARD_MACHINE_CONFIG( "cdrom", cdrom_config )
/* video hardware */ /* video hardware */
MCFG_PALETTE_LENGTH(32768) MCFG_PALETTE_LENGTH(32768)
@ -2126,9 +1783,10 @@ static MACHINE_CONFIG_START( firebeat, firebeat_state )
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MCFG_SOUND_MODIFY("scsi1:cdda") // TODO: Hookup cdrom audio
MCFG_SOUND_ROUTE(0, "^^lspeaker", 1.0) // MCFG_SOUND_MODIFY("scsi1:cdda")
MCFG_SOUND_ROUTE(1, "^^rspeaker", 1.0) // MCFG_SOUND_ROUTE(0, "^^lspeaker", 1.0)
// MCFG_SOUND_ROUTE(1, "^^rspeaker", 1.0)
MCFG_PC16552D_ADD("duart_com", firebeat_com0_interface, firebeat_com1_interface, XTAL_19_6608MHz) // pgmd to 9600baud MCFG_PC16552D_ADD("duart_com", firebeat_com0_interface, firebeat_com1_interface, XTAL_19_6608MHz) // pgmd to 9600baud
MCFG_PC16552D_ADD("duart_midi", firebeat_midi0_interface, firebeat_midi1_interface, XTAL_24MHz) // in all memory maps, pgmd to 31250baud MCFG_PC16552D_ADD("duart_midi", firebeat_midi0_interface, firebeat_midi1_interface, XTAL_24MHz) // in all memory maps, pgmd to 31250baud
@ -2150,8 +1808,11 @@ static MACHINE_CONFIG_START( firebeat2, firebeat_state )
MCFG_FUJITSU_29F016A_ADD("flash_snd1") MCFG_FUJITSU_29F016A_ADD("flash_snd1")
MCFG_FUJITSU_29F016A_ADD("flash_snd2") MCFG_FUJITSU_29F016A_ADD("flash_snd2")
MCFG_DEVICE_ADD("scsi0", SCSICD, 0) MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "cdrom", "cdrom", true)
MCFG_DEVICE_ADD("scsi1", SCSICD, 0) MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(firebeat_state, ata_interrupt))
MCFG_DEVICE_MODIFY("ata:1")
MCFG_DEVICE_CARD_MACHINE_CONFIG( "cdrom", cdrom_config )
/* video hardware */ /* video hardware */
MCFG_PALETTE_LENGTH(32768) MCFG_PALETTE_LENGTH(32768)
@ -2182,10 +1843,6 @@ static MACHINE_CONFIG_START( firebeat2, firebeat_state )
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MCFG_SOUND_MODIFY("scsi1:cdda")
MCFG_SOUND_ROUTE(0, "^^lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "^^rspeaker", 1.0)
MCFG_PC16552D_ADD("duart_com", firebeat_com0_interface, firebeat_com1_interface, XTAL_19_6608MHz) MCFG_PC16552D_ADD("duart_com", firebeat_com0_interface, firebeat_com1_interface, XTAL_19_6608MHz)
MCFG_PC16552D_ADD("duart_midi", firebeat_midi0_interface, firebeat_midi1_interface, XTAL_24MHz) MCFG_PC16552D_ADD("duart_midi", firebeat_midi0_interface, firebeat_midi1_interface, XTAL_24MHz)
MCFG_MIDI_KBD_ADD("kbd0", DEVWRITELINE("duart_midi:chan0", ins8250_uart_device, rx_w), 31250) MCFG_MIDI_KBD_ADD("kbd0", DEVWRITELINE("duart_midi:chan0", ins8250_uart_device, rx_w), 31250)
@ -2353,8 +2010,6 @@ void firebeat_state::init_firebeat()
{ {
UINT8 *rom = memregion("user2")->base(); UINT8 *rom = memregion("user2")->base();
atapi_init();
// pc16552d_init(machine(), 0, 19660800, comm_uart_irq_callback, 0); // Network UART // pc16552d_init(machine(), 0, 19660800, comm_uart_irq_callback, 0); // Network UART
// pc16552d_init(machine(), 1, 24000000, midi_uart_irq_callback, 0); // MIDI UART // pc16552d_init(machine(), 1, 24000000, midi_uart_irq_callback, 0); // MIDI UART
@ -2411,10 +2066,10 @@ ROM_START( ppp )
ROM_REGION(0xc0, "user2", 0) // Security dongle ROM_REGION(0xc0, "user2", 0) // Security dongle
ROM_LOAD("gq977-ja", 0x00, 0xc0, BAD_DUMP CRC(55b5abdb) SHA1(d8da5bac005235480a1815bd0a79c3e8a63ebad1)) ROM_LOAD("gq977-ja", 0x00, 0xc0, BAD_DUMP CRC(55b5abdb) SHA1(d8da5bac005235480a1815bd0a79c3e8a63ebad1))
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "977jaa01", 0, BAD_DUMP SHA1(59c03d8eb366167feef741d42d9d8b54bfeb3c1e) ) DISK_IMAGE_READONLY( "977jaa01", 0, BAD_DUMP SHA1(59c03d8eb366167feef741d42d9d8b54bfeb3c1e) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM
DISK_IMAGE_READONLY( "977jaa02", 0, SHA1(bd07c25ee3e1edc962997f6a5bb1700897231fb2) ) DISK_IMAGE_READONLY( "977jaa02", 0, SHA1(bd07c25ee3e1edc962997f6a5bb1700897231fb2) )
ROM_END ROM_END
@ -2425,10 +2080,10 @@ ROM_START( ppp1mp )
ROM_REGION(0xc0, "user2", 0) // Security dongle ROM_REGION(0xc0, "user2", 0) // Security dongle
ROM_LOAD( "gqa11-ja", 0x000000, 0x0000c0, CRC(2ed8e2ae) SHA1(b8c3410dab643111b2d2027068175ba018a0a67e) ) ROM_LOAD( "gqa11-ja", 0x000000, 0x0000c0, CRC(2ed8e2ae) SHA1(b8c3410dab643111b2d2027068175ba018a0a67e) )
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "a11jaa01", 0, SHA1(539ec6f1c1d198b0d6ce5543eadcbb4d9917fa42) ) DISK_IMAGE_READONLY( "a11jaa01", 0, SHA1(539ec6f1c1d198b0d6ce5543eadcbb4d9917fa42) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM
DISK_IMAGE_READONLY( "a11jaa02", 0, SHA1(575069570cb4a2b58b199a1329d45b189a20fcc9) ) DISK_IMAGE_READONLY( "a11jaa02", 0, SHA1(575069570cb4a2b58b199a1329d45b189a20fcc9) )
ROM_END ROM_END
@ -2439,10 +2094,10 @@ ROM_START( kbm )
ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle
ROM_LOAD("gq974-ja", 0x00, 0xc0, BAD_DUMP CRC(4578f29b) SHA1(faaeaf6357c1e86e898e7017566cfd2fc7ee3d6f)) ROM_LOAD("gq974-ja", 0x00, 0xc0, BAD_DUMP CRC(4578f29b) SHA1(faaeaf6357c1e86e898e7017566cfd2fc7ee3d6f))
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "974jac01", 0, BAD_DUMP SHA1(c6145d7090e44c87f71ba626620d2ae2596a75ca) ) DISK_IMAGE_READONLY( "974jac01", 0, BAD_DUMP SHA1(c6145d7090e44c87f71ba626620d2ae2596a75ca) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM
DISK_IMAGE_READONLY( "974jaa02", 1, BAD_DUMP SHA1(3b9946083239eb5687f66a49df24568bffa4fbbd) ) DISK_IMAGE_READONLY( "974jaa02", 1, BAD_DUMP SHA1(3b9946083239eb5687f66a49df24568bffa4fbbd) )
ROM_END ROM_END
@ -2453,10 +2108,10 @@ ROM_START( kbm2nd )
ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle
ROM_LOAD("gca01-ja", 0x00, 0xc0, BAD_DUMP CRC(2bda339d) SHA1(031cb3f44e7a89cd62a9ba948f3d19d53a325abd)) ROM_LOAD("gca01-ja", 0x00, 0xc0, BAD_DUMP CRC(2bda339d) SHA1(031cb3f44e7a89cd62a9ba948f3d19d53a325abd))
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "a01jaa01", 0, BAD_DUMP SHA1(37bc3879719b3d3c6bc8a5691abd7aa4aec87d45) ) DISK_IMAGE_READONLY( "a01jaa01", 0, BAD_DUMP SHA1(37bc3879719b3d3c6bc8a5691abd7aa4aec87d45) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM
DISK_IMAGE_READONLY( "a01jaa02", 1, BAD_DUMP SHA1(a3fdeee0f85a7a9718c0fb1cc642ac22d3eff8db) ) DISK_IMAGE_READONLY( "a01jaa02", 1, BAD_DUMP SHA1(a3fdeee0f85a7a9718c0fb1cc642ac22d3eff8db) )
ROM_END ROM_END
@ -2467,10 +2122,10 @@ ROM_START( kbm3rd )
ROM_REGION(0xc0, "user2", 0) // Security dongle ROM_REGION(0xc0, "user2", 0) // Security dongle
ROM_LOAD("gca12-ja", 0x00, 0xc0, BAD_DUMP CRC(cf01dc15) SHA1(da8d208233487ebe65a0a9826fc72f1f459baa26)) ROM_LOAD("gca12-ja", 0x00, 0xc0, BAD_DUMP CRC(cf01dc15) SHA1(da8d208233487ebe65a0a9826fc72f1f459baa26))
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "a12jaa01", 0, BAD_DUMP SHA1(10f2284248e51b1adf0fde173df72ad97fe0e5c8) ) DISK_IMAGE_READONLY( "a12jaa01", 0, BAD_DUMP SHA1(10f2284248e51b1adf0fde173df72ad97fe0e5c8) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM
DISK_IMAGE_READONLY( "a12jaa02", 1, BAD_DUMP SHA1(1256ce9d71350d355a256f83c7b319f0e6e84525) ) DISK_IMAGE_READONLY( "a12jaa02", 1, BAD_DUMP SHA1(1256ce9d71350d355a256f83c7b319f0e6e84525) )
ROM_END ROM_END
@ -2484,10 +2139,10 @@ ROM_START( popn4 )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683)) ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683))
DISK_REGION( "scsi0" ) // program CD-ROM DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "gq986jaa01", 0, SHA1(e5368ac029b0bdf29943ae66677b5521ae1176e1) ) DISK_IMAGE_READONLY( "gq986jaa01", 0, SHA1(e5368ac029b0bdf29943ae66677b5521ae1176e1) )
DISK_REGION( "scsi1" ) // data DVD-ROM DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM
DISK_IMAGE( "gq986jaa02", 1, SHA1(53367d3d5f91422fe386c42716492a0ae4332390) ) DISK_IMAGE( "gq986jaa02", 1, SHA1(53367d3d5f91422fe386c42716492a0ae4332390) )
ROM_END ROM_END
@ -2501,10 +2156,10 @@ ROM_START( popn5 )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP( "a02jaa04.3q", 0x000000, 0x080000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683) ) ROM_LOAD16_WORD_SWAP( "a02jaa04.3q", 0x000000, 0x080000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683) )
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "a04jaa01", 0, SHA1(87136ddad1d786b4d5f04381fcbf679ab666e6c9) ) DISK_IMAGE_READONLY( "a04jaa01", 0, SHA1(87136ddad1d786b4d5f04381fcbf679ab666e6c9) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM
DISK_IMAGE_READONLY( "a04jaa02", 1, SHA1(49a017dde76f84829f6e99a678524c40665c3bfd) ) DISK_IMAGE_READONLY( "a04jaa02", 1, SHA1(49a017dde76f84829f6e99a678524c40665c3bfd) )
ROM_END ROM_END
@ -2518,10 +2173,10 @@ ROM_START( popn6 )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683)) ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683))
DISK_REGION( "scsi0" ) // program CD-ROM DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "gqa16jaa01", 0, SHA1(7a7e475d06c74a273f821fdfde0743b33d566e4c) ) DISK_IMAGE_READONLY( "gqa16jaa01", 0, SHA1(7a7e475d06c74a273f821fdfde0743b33d566e4c) )
DISK_REGION( "scsi1" ) // data DVD-ROM DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM
DISK_IMAGE( "gqa16jaa02", 1, SHA1(e39067300e9440ff19cb98c1abc234fa3d5b26d1) ) DISK_IMAGE( "gqa16jaa02", 1, SHA1(e39067300e9440ff19cb98c1abc234fa3d5b26d1) )
ROM_END ROM_END
@ -2535,10 +2190,10 @@ ROM_START( popn7 )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683)) ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683))
DISK_REGION( "scsi0" ) // program CD-ROM DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "b00jab01", 0, SHA1(259c733ca4d30281205b46b7bf8d60c9d01aa818) ) DISK_IMAGE_READONLY( "b00jab01", 0, SHA1(259c733ca4d30281205b46b7bf8d60c9d01aa818) )
DISK_REGION( "scsi1" ) // data DVD-ROM DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM
DISK_IMAGE_READONLY( "b00jaa02", 1, SHA1(c8ce2f8ee6aeeedef9c110a59e68fcec7b669ad6) ) DISK_IMAGE_READONLY( "b00jaa02", 1, SHA1(c8ce2f8ee6aeeedef9c110a59e68fcec7b669ad6) )
ROM_END ROM_END
@ -2552,10 +2207,10 @@ ROM_START( popn8 )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683)) ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683))
DISK_REGION( "scsi0" ) // program CD-ROM DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "gqb30jaa01", 0, SHA1(0ff3e40e3717ce23337b3a2438bdaca01cba9e30) ) DISK_IMAGE_READONLY( "gqb30jaa01", 0, SHA1(0ff3e40e3717ce23337b3a2438bdaca01cba9e30) )
DISK_REGION( "scsi1" ) // data DVD-ROM DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM
DISK_IMAGE_READONLY( "gqb30jaa02", 1, SHA1(f067d502c23efe0267aada5706f5bc7a54605942) ) DISK_IMAGE_READONLY( "gqb30jaa02", 1, SHA1(f067d502c23efe0267aada5706f5bc7a54605942) )
ROM_END ROM_END
@ -2569,10 +2224,10 @@ ROM_START( popnanm2 )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683)) ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683))
DISK_REGION( "scsi0" ) // program CD-ROM DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "gea02jaa01", 0, SHA1(e81203b6812336c4d00476377193340031ef11b1) ) DISK_IMAGE_READONLY( "gea02jaa01", 0, SHA1(e81203b6812336c4d00476377193340031ef11b1) )
DISK_REGION( "scsi1" ) // data DVD-ROM DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM
DISK_IMAGE_READONLY( "gea02jaa02", 1, SHA1(7212e399779f37a5dcb8317a8f635a3b3f620aa9) ) DISK_IMAGE_READONLY( "gea02jaa02", 1, SHA1(7212e399779f37a5dcb8317a8f635a3b3f620aa9) )
ROM_END ROM_END
@ -2583,10 +2238,10 @@ ROM_START( ppd )
ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle
ROM_LOAD("gq977-ko", 0x00, 0xc0, BAD_DUMP CRC(ee743323) SHA1(2042e45879795557ad3cc21b37962f6bf54da60d)) ROM_LOAD("gq977-ko", 0x00, 0xc0, BAD_DUMP CRC(ee743323) SHA1(2042e45879795557ad3cc21b37962f6bf54da60d))
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "977kaa01", 0, BAD_DUMP SHA1(7af9f4949ffa10ea5fc18b6c88c2abc710df3cf9) ) DISK_IMAGE_READONLY( "977kaa01", 0, BAD_DUMP SHA1(7af9f4949ffa10ea5fc18b6c88c2abc710df3cf9) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM
DISK_IMAGE_READONLY( "977kaa02", 1, SHA1(0feb5ac56269ad4a8401fcfe3bb98b01a0169177) ) DISK_IMAGE_READONLY( "977kaa02", 1, SHA1(0feb5ac56269ad4a8401fcfe3bb98b01a0169177) )
ROM_END ROM_END
@ -2597,10 +2252,10 @@ ROM_START( ppp11 )
ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle
ROM_LOAD("gq977-ja", 0x00, 0xc0, BAD_DUMP CRC(55b5abdb) SHA1(d8da5bac005235480a1815bd0a79c3e8a63ebad1)) ROM_LOAD("gq977-ja", 0x00, 0xc0, BAD_DUMP CRC(55b5abdb) SHA1(d8da5bac005235480a1815bd0a79c3e8a63ebad1))
DISK_REGION( "scsi0" ) DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "gc977jaa01", 0, SHA1(7ed1f4b55105c93fec74468436bfb1d540bce944) ) DISK_IMAGE_READONLY( "gc977jaa01", 0, SHA1(7ed1f4b55105c93fec74468436bfb1d540bce944) )
DISK_REGION( "scsi1" ) DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM
DISK_IMAGE_READONLY( "gc977jaa02", 1, SHA1(74ce8c90575fd562807def7d561392d0f91f2bc6) ) DISK_IMAGE_READONLY( "gc977jaa02", 1, SHA1(74ce8c90575fd562807def7d561392d0f91f2bc6) )
ROM_END ROM_END
@ -2615,10 +2270,10 @@ ROM_START( bm37th )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, BAD_DUMP CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683)) ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, BAD_DUMP CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683))
DISK_REGION( "scsi0" ) // program CD-ROM DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "gcb07jca01", 0, SHA1(f906379bdebee314e2ca97c7756259c8c25897fd) ) DISK_IMAGE_READONLY( "gcb07jca01", 0, SHA1(f906379bdebee314e2ca97c7756259c8c25897fd) )
DISK_REGION( "scsi1" ) // data HDD DISK_REGION( "ata:1:hdd:image" ) // data HDD
DISK_IMAGE_READONLY( "gcb07jca02", 1, SHA1(6b8e17635825a6a43dc8d2721fe2eb0e0f39e940) ) DISK_IMAGE_READONLY( "gcb07jca02", 1, SHA1(6b8e17635825a6a43dc8d2721fe2eb0e0f39e940) )
ROM_END ROM_END
@ -2632,10 +2287,10 @@ ROM_START( bm3final )
ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program
ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, BAD_DUMP CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683)) ROM_LOAD16_WORD_SWAP("a02jaa04.3q", 0x00000, 0x80000, BAD_DUMP CRC(8c6000dd) SHA1(94ab2a66879839411eac6c673b25143d15836683))
DISK_REGION( "scsi0" ) // program CD-ROM DISK_REGION( "ata:0:cdrom:device" ) // program CD-ROM
DISK_IMAGE_READONLY( "gcc01jca01", 0, SHA1(3e7af83670d791591ad838823422959987f7aab9) ) DISK_IMAGE_READONLY( "gcc01jca01", 0, SHA1(3e7af83670d791591ad838823422959987f7aab9) )
DISK_REGION( "scsi1" ) // data HDD DISK_REGION( "ata:1:hdd:image" ) // data HDD
DISK_IMAGE_READONLY( "gcc01jca02", 1, SHA1(823e29bab11cb67069d822f5ffb2b90b9d3368d2) ) DISK_IMAGE_READONLY( "gcc01jca02", 1, SHA1(823e29bab11cb67069d822f5ffb2b90b9d3368d2) )
ROM_END ROM_END