From c8595ffefd655398a199c5a074940de61e62e94f Mon Sep 17 00:00:00 2001 From: smf- Date: Sun, 25 Aug 2013 15:12:18 +0000 Subject: [PATCH] refactored to use ATA_INTERFACE [smf] --- src/emu/machine/atapihle.c | 2 + src/mame/drivers/firebeat.c | 523 ++++++------------------------------ 2 files changed, 91 insertions(+), 434 deletions(-) diff --git a/src/emu/machine/atapihle.c b/src/emu/machine/atapihle.c index 62f7ccf703e..cb9f6de8231 100644 --- a/src/emu/machine/atapihle.c +++ b/src/emu/machine/atapihle.c @@ -19,6 +19,8 @@ void atapi_hle_device::process_buffer() // 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_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->ExecCommand( &m_data_size ); m_scsidev_device->GetPhase( &phase ); diff --git a/src/mame/drivers/firebeat.c b/src/mame/drivers/firebeat.c index 011439c40da..3dd15bf53c7 100644 --- a/src/mame/drivers/firebeat.c +++ b/src/mame/drivers/firebeat.c @@ -31,12 +31,12 @@ GQ971 PWB(B2) 0000067784 Backplane ---------------------------------- 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 ---------------------------------- 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(G1) Sound Amp (?) @@ -132,14 +132,13 @@ #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/powerpc/ppc.h" +#include "machine/ataintf.h" #include "machine/intelfsh.h" -#include "machine/scsicd.h" #include "machine/rtc65271.h" #include "machine/ins8250.h" #include "machine/midikbd.h" #include "sound/ymz280b.h" #include "sound/cdda.h" -#include "cdrom.h" #include "firebeat.lh" @@ -178,7 +177,8 @@ public: m_duart_midi(*this, "duart_midi"), m_duart_com(*this, "duart_com"), m_kbd0(*this, "kbd0"), - m_kbd1(*this, "kbd1") + m_kbd1(*this, "kbd1"), + m_ata(*this, "ata") { } required_device m_maincpu; @@ -190,6 +190,7 @@ public: required_device m_duart_com; optional_device m_kbd0; optional_device m_kbd1; + required_device m_ata; UINT8 m_extend_board_irq_enable; UINT8 m_extend_board_irq_active; @@ -197,16 +198,6 @@ public: GCU_REGS m_gcu[2]; int m_tick; 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; const int * m_cur_cab_data; // int m_keyboard_state[2]; @@ -235,10 +226,11 @@ public: DECLARE_WRITE32_MEMBER(flashram_w); DECLARE_READ32_MEMBER(soundflash_r); DECLARE_WRITE32_MEMBER(soundflash_w); - DECLARE_READ32_MEMBER(atapi_command_r); - DECLARE_WRITE32_MEMBER(atapi_command_w); - DECLARE_READ32_MEMBER(atapi_control_r); - DECLARE_WRITE32_MEMBER(atapi_control_w); + DECLARE_WRITE_LINE_MEMBER(ata_interrupt); + DECLARE_READ32_MEMBER(ata_command_r); + DECLARE_WRITE32_MEMBER(ata_command_w); + DECLARE_READ32_MEMBER(ata_control_r); + DECLARE_WRITE32_MEMBER(ata_control_w); // DECLARE_READ32_MEMBER(comm_uart_r); // DECLARE_WRITE32_MEMBER(comm_uart_w); 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 GCU_r(int chip, UINT32 offset, 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); int ibutton_w(UINT8 data); 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)) -#if 1 -#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( "scsi0" ); - m_atapi_device_data[1] = machine().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 ) +READ32_MEMBER(firebeat_state::ata_command_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) { - r = atapi_command_reg_r(offset*2); - return ATAPI_ENDIAN(r) << 16; + r = m_ata->read_cs0(space, offset*2, BYTESWAP16((mem_mask >> 16) & 0xffff)); + return BYTESWAP16(r) << 16; } else { - r = atapi_command_reg_r((offset*2) + 1); - return ATAPI_ENDIAN(r) << 0; + r = m_ata->read_cs0(space, (offset*2) + 1, BYTESWAP16((mem_mask >> 0) & 0xffff)); + 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) { - 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 { - 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; -// 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) { - r = atapi_control_reg_r(offset*2); - return ATAPI_ENDIAN(r) << 16; + r = m_ata->read_cs1(space, offset*2, BYTESWAP16((mem_mask >> 16) & 0xffff)); + return BYTESWAP16(r) << 16; } else { - r = atapi_control_reg_r((offset*2) + 1); - return ATAPI_ENDIAN(r) << 0; + r = m_ata->read_cs1(space, (offset*2) + 1, BYTESWAP16((mem_mask >> 0) & 0xffff)); + return BYTESWAP16(r) << 0; } } -WRITE32_MEMBER(firebeat_state::atapi_control_w ) +WRITE32_MEMBER(firebeat_state::ata_control_w ) { 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 { - 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(0x7e800000, 0x7e8000ff) AM_READWRITE(gcu0_r, gcu0_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(0x7fe80000, 0x7fe8000f) AM_READWRITE(atapi_control_r, atapi_control_w) + AM_RANGE(0x7fe00000, 0x7fe0000f) AM_READWRITE(ata_command_r, ata_command_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 */ ADDRESS_MAP_END @@ -2070,7 +1713,7 @@ INTERRUPT_GEN_MEMBER(firebeat_state::firebeat_interrupt) // IRQ 0: VBlank // IRQ 1: Extend board IRQ // IRQ 2: Main board UART - // IRQ 4: ATAPI + // IRQ 4: ATA device.execute().set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); } @@ -2085,6 +1728,17 @@ const rtc65271_interface firebeat_rtc = 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 ) /* 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_snd2") - MCFG_DEVICE_ADD("scsi0", SCSICD, 0) - MCFG_DEVICE_ADD("scsi1", SCSICD, 0) + MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "cdrom", "cdrom", true) + 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 */ 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(1, "rspeaker", 1.0) - MCFG_SOUND_MODIFY("scsi1:cdda") - MCFG_SOUND_ROUTE(0, "^^lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "^^rspeaker", 1.0) +// TODO: Hookup cdrom audio +// 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) // pgmd to 9600baud 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_snd2") - MCFG_DEVICE_ADD("scsi0", SCSICD, 0) - MCFG_DEVICE_ADD("scsi1", SCSICD, 0) + MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "cdrom", "cdrom", true) + 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 */ 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(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_midi", firebeat_midi0_interface, firebeat_midi1_interface, XTAL_24MHz) 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(); - atapi_init(); - // pc16552d_init(machine(), 0, 19660800, comm_uart_irq_callback, 0); // Network 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_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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM DISK_IMAGE_READONLY( "977jaa02", 0, SHA1(bd07c25ee3e1edc962997f6a5bb1700897231fb2) ) ROM_END @@ -2425,10 +2080,10 @@ ROM_START( ppp1mp ) ROM_REGION(0xc0, "user2", 0) // Security dongle 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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM DISK_IMAGE_READONLY( "a11jaa02", 0, SHA1(575069570cb4a2b58b199a1329d45b189a20fcc9) ) ROM_END @@ -2439,10 +2094,10 @@ ROM_START( kbm ) ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle 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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM DISK_IMAGE_READONLY( "974jaa02", 1, BAD_DUMP SHA1(3b9946083239eb5687f66a49df24568bffa4fbbd) ) ROM_END @@ -2453,10 +2108,10 @@ ROM_START( kbm2nd ) ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle 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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM DISK_IMAGE_READONLY( "a01jaa02", 1, BAD_DUMP SHA1(a3fdeee0f85a7a9718c0fb1cc642ac22d3eff8db) ) ROM_END @@ -2467,10 +2122,10 @@ ROM_START( kbm3rd ) ROM_REGION(0xc0, "user2", 0) // Security dongle 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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM DISK_IMAGE_READONLY( "a12jaa02", 1, BAD_DUMP SHA1(1256ce9d71350d355a256f83c7b319f0e6e84525) ) ROM_END @@ -2484,10 +2139,10 @@ ROM_START( popn4 ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) // data DVD-ROM + DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM DISK_IMAGE( "gq986jaa02", 1, SHA1(53367d3d5f91422fe386c42716492a0ae4332390) ) ROM_END @@ -2501,10 +2156,10 @@ ROM_START( popn5 ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM DISK_IMAGE_READONLY( "a04jaa02", 1, SHA1(49a017dde76f84829f6e99a678524c40665c3bfd) ) ROM_END @@ -2518,10 +2173,10 @@ ROM_START( popn6 ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) // data DVD-ROM + DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM DISK_IMAGE( "gqa16jaa02", 1, SHA1(e39067300e9440ff19cb98c1abc234fa3d5b26d1) ) ROM_END @@ -2535,10 +2190,10 @@ ROM_START( popn7 ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) // data DVD-ROM + DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM DISK_IMAGE_READONLY( "b00jaa02", 1, SHA1(c8ce2f8ee6aeeedef9c110a59e68fcec7b669ad6) ) ROM_END @@ -2552,10 +2207,10 @@ ROM_START( popn8 ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) // data DVD-ROM + DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM DISK_IMAGE_READONLY( "gqb30jaa02", 1, SHA1(f067d502c23efe0267aada5706f5bc7a54605942) ) ROM_END @@ -2569,10 +2224,10 @@ ROM_START( popnanm2 ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) // data DVD-ROM + DISK_REGION( "ata:1:cdrom:device" ) // data DVD-ROM DISK_IMAGE_READONLY( "gea02jaa02", 1, SHA1(7212e399779f37a5dcb8317a8f635a3b3f620aa9) ) ROM_END @@ -2583,10 +2238,10 @@ ROM_START( ppd ) ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle 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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM DISK_IMAGE_READONLY( "977kaa02", 1, SHA1(0feb5ac56269ad4a8401fcfe3bb98b01a0169177) ) ROM_END @@ -2597,10 +2252,10 @@ ROM_START( ppp11 ) ROM_REGION(0xc0, "user2", ROMREGION_ERASE00) // Security dongle 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_REGION( "scsi1" ) + DISK_REGION( "ata:1:cdrom:device" ) // audio CD-ROM DISK_IMAGE_READONLY( "gc977jaa02", 1, SHA1(74ce8c90575fd562807def7d561392d0f91f2bc6) ) ROM_END @@ -2615,10 +2270,10 @@ ROM_START( bm37th ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) // data HDD + DISK_REGION( "ata:1:hdd:image" ) // data HDD DISK_IMAGE_READONLY( "gcb07jca02", 1, SHA1(6b8e17635825a6a43dc8d2721fe2eb0e0f39e940) ) ROM_END @@ -2632,10 +2287,10 @@ ROM_START( bm3final ) ROM_REGION(0x80000, "audiocpu", 0) // SPU 68K program 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_REGION( "scsi1" ) // data HDD + DISK_REGION( "ata:1:hdd:image" ) // data HDD DISK_IMAGE_READONLY( "gcc01jca02", 1, SHA1(823e29bab11cb67069d822f5ffb2b90b9d3368d2) ) ROM_END