mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
Started converting i/o to 16 bit (nw)
This commit is contained in:
parent
996da030ac
commit
83685d79bc
@ -559,7 +559,7 @@ public:
|
|||||||
int m_atapi_cdata_wait;
|
int m_atapi_cdata_wait;
|
||||||
int m_atapi_xfermod;
|
int m_atapi_xfermod;
|
||||||
|
|
||||||
UINT32 m_n_security_control;
|
UINT16 m_n_security_control;
|
||||||
void (ksys573_state::*m_security_callback)( int data );
|
void (ksys573_state::*m_security_callback)( int data );
|
||||||
|
|
||||||
UINT8 m_gx700pwbf_output_data[ 4 ];
|
UINT8 m_gx700pwbf_output_data[ 4 ];
|
||||||
@ -607,16 +607,16 @@ public:
|
|||||||
DECLARE_CUSTOM_INPUT_MEMBER(gn845pwbb_read);
|
DECLARE_CUSTOM_INPUT_MEMBER(gn845pwbb_read);
|
||||||
DECLARE_CUSTOM_INPUT_MEMBER(gunmania_tank_shutter_sensor);
|
DECLARE_CUSTOM_INPUT_MEMBER(gunmania_tank_shutter_sensor);
|
||||||
DECLARE_CUSTOM_INPUT_MEMBER(gunmania_cable_holder_sensor);
|
DECLARE_CUSTOM_INPUT_MEMBER(gunmania_cable_holder_sensor);
|
||||||
DECLARE_WRITE32_MEMBER(mb89371_w);
|
DECLARE_WRITE16_MEMBER(mb89371_w);
|
||||||
DECLARE_READ32_MEMBER(mb89371_r);
|
DECLARE_READ16_MEMBER(mb89371_r);
|
||||||
DECLARE_READ32_MEMBER(jamma_r);
|
DECLARE_READ32_MEMBER(jamma_r);
|
||||||
DECLARE_READ32_MEMBER(control_r);
|
DECLARE_READ16_MEMBER(control_r);
|
||||||
DECLARE_WRITE32_MEMBER(control_w);
|
DECLARE_WRITE16_MEMBER(control_w);
|
||||||
DECLARE_READ32_MEMBER(atapi_r);
|
DECLARE_READ16_MEMBER(atapi_r);
|
||||||
DECLARE_WRITE32_MEMBER(atapi_w);
|
DECLARE_WRITE16_MEMBER(atapi_w);
|
||||||
DECLARE_WRITE32_MEMBER(atapi_reset_w);
|
DECLARE_WRITE16_MEMBER(atapi_reset_w);
|
||||||
DECLARE_WRITE32_MEMBER(security_w);
|
DECLARE_WRITE16_MEMBER(security_w);
|
||||||
DECLARE_READ32_MEMBER(security_r);
|
DECLARE_READ16_MEMBER(security_r);
|
||||||
DECLARE_READ16_MEMBER(flash_r);
|
DECLARE_READ16_MEMBER(flash_r);
|
||||||
DECLARE_WRITE16_MEMBER(flash_w);
|
DECLARE_WRITE16_MEMBER(flash_w);
|
||||||
DECLARE_READ32_MEMBER(ge765pwbba_r);
|
DECLARE_READ32_MEMBER(ge765pwbba_r);
|
||||||
@ -688,15 +688,15 @@ void ATTR_PRINTF(3,4) ksys573_state::verboselog( int n_level, const char *s_fmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(ksys573_state::mb89371_w)
|
WRITE16_MEMBER(ksys573_state::mb89371_w)
|
||||||
{
|
{
|
||||||
verboselog(2, "mb89371_w %08x %08x %08x\n", offset, mem_mask, data );
|
verboselog(2, "mb89371_w %04x %04x %04x\n", offset, mem_mask, data );
|
||||||
}
|
}
|
||||||
|
|
||||||
READ32_MEMBER(ksys573_state::mb89371_r)
|
READ16_MEMBER(ksys573_state::mb89371_r)
|
||||||
{
|
{
|
||||||
UINT32 data = 0xffffffff;
|
UINT32 data = 0xffff;
|
||||||
verboselog(2, "mb89371_r %08x %08x %08x\n", offset, mem_mask, data );
|
verboselog(2, "mb89371_r %04x %04x %04x\n", offset, mem_mask, data );
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -731,20 +731,18 @@ READ32_MEMBER(ksys573_state::jamma_r)
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ32_MEMBER(ksys573_state::control_r)
|
READ16_MEMBER(ksys573_state::control_r)
|
||||||
{
|
{
|
||||||
verboselog(2, "control_r( %08x, %08x ) %08x\n", offset, mem_mask, m_control );
|
verboselog(2, "control_r( %08x, %08x ) %08x\n", offset, mem_mask, m_control );
|
||||||
|
|
||||||
return m_control;
|
return m_control;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(ksys573_state::control_w)
|
WRITE16_MEMBER(ksys573_state::control_w)
|
||||||
{
|
{
|
||||||
UINT32 control;
|
|
||||||
int old_bank = m_flash_bank;
|
int old_bank = m_flash_bank;
|
||||||
|
|
||||||
COMBINE_DATA(&m_control);
|
COMBINE_DATA(&m_control);
|
||||||
control = m_control;
|
|
||||||
|
|
||||||
verboselog(2, "control_w( %08x, %08x, %08x )\n", offset, mem_mask, data );
|
verboselog(2, "control_w( %08x, %08x, %08x )\n", offset, mem_mask, data );
|
||||||
|
|
||||||
@ -753,39 +751,38 @@ WRITE32_MEMBER(ksys573_state::control_w)
|
|||||||
// zs01 only, others are reached through security_w
|
// zs01 only, others are reached through security_w
|
||||||
device_secure_serial_flash *secflash = machine().device<device_secure_serial_flash>(m_security_cart_number ? "game_eeprom" : "install_eeprom");
|
device_secure_serial_flash *secflash = machine().device<device_secure_serial_flash>(m_security_cart_number ? "game_eeprom" : "install_eeprom");
|
||||||
if( dynamic_cast<zs01_device *>(secflash) )
|
if( dynamic_cast<zs01_device *>(secflash) )
|
||||||
secflash->sda_w( !( ( control >> 6 ) & 1 ) ); /* 0x40 */
|
secflash->sda_w( !( ( m_control >> 6 ) & 1 ) ); /* 0x40 */
|
||||||
|
|
||||||
if( m_flash_device[0][0] != NULL && ( control & ~0x43 ) == 0x00 )
|
if( m_flash_device[0][0] != NULL && ( m_control & ~0x43 ) == 0x00 )
|
||||||
{
|
{
|
||||||
m_flash_bank = (0 << 8) + ( ( control & 3 ) * 2 );
|
m_flash_bank = (0 << 8) + ( ( m_control & 3 ) * 2 );
|
||||||
if( m_flash_bank != old_bank ) verboselog(1, "onboard %d\n", control & 3 );
|
if( m_flash_bank != old_bank ) verboselog(1, "onboard %d\n", m_control & 3 );
|
||||||
}
|
}
|
||||||
else if( m_flash_device[1][0] != NULL && ( control & ~0x47 ) == 0x10 )
|
else if( m_flash_device[1][0] != NULL && ( m_control & ~0x47 ) == 0x10 )
|
||||||
{
|
{
|
||||||
m_flash_bank = (1 << 8) + ( ( control & 7 ) * 2 );
|
m_flash_bank = (1 << 8) + ( ( m_control & 7 ) * 2 );
|
||||||
if( m_flash_bank != old_bank ) verboselog(1, "pccard1 %d\n", control & 7 );
|
if( m_flash_bank != old_bank ) verboselog(1, "pccard1 %d\n", m_control & 7 );
|
||||||
}
|
}
|
||||||
else if( m_flash_device[2][0] != NULL && ( control & ~0x47 ) == 0x20 )
|
else if( m_flash_device[2][0] != NULL && ( m_control & ~0x47 ) == 0x20 )
|
||||||
{
|
{
|
||||||
m_flash_bank = (2 << 8) + ( ( control & 7 ) * 2 );
|
m_flash_bank = (2 << 8) + ( ( m_control & 7 ) * 2 );
|
||||||
if( m_flash_bank != old_bank ) verboselog(1, "pccard2 %d\n", control & 7 );
|
if( m_flash_bank != old_bank ) verboselog(1, "pccard2 %d\n", m_control & 7 );
|
||||||
}
|
}
|
||||||
else if( m_flash_device[3][0] != NULL && ( control & ~0x47 ) == 0x20 )
|
else if( m_flash_device[3][0] != NULL && ( m_control & ~0x47 ) == 0x20 )
|
||||||
{
|
{
|
||||||
m_flash_bank = (3 << 8) + ( ( control & 7 ) * 2 );
|
m_flash_bank = (3 << 8) + ( ( m_control & 7 ) * 2 );
|
||||||
if( m_flash_bank != old_bank ) verboselog(1, "pccard3 %d\n", control & 7 );
|
if( m_flash_bank != old_bank ) verboselog(1, "pccard3 %d\n", m_control & 7 );
|
||||||
}
|
}
|
||||||
else if( m_flash_device[4][0] != NULL && ( control & ~0x47 ) == 0x28 )
|
else if( m_flash_device[4][0] != NULL && ( m_control & ~0x47 ) == 0x28 )
|
||||||
{
|
{
|
||||||
m_flash_bank = (4 << 8) + ( ( control & 7 ) * 2 );
|
m_flash_bank = (4 << 8) + ( ( m_control & 7 ) * 2 );
|
||||||
if( m_flash_bank != old_bank ) verboselog(1, "pccard4 %d\n", control & 7 );
|
if( m_flash_bank != old_bank ) verboselog(1, "pccard4 %d\n", m_control & 7 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_CALLBACK_MEMBER(ksys573_state::atapi_xfer_end)
|
TIMER_CALLBACK_MEMBER(ksys573_state::atapi_xfer_end)
|
||||||
{
|
{
|
||||||
UINT32 *p_n_psxram = m_p_n_psxram;
|
UINT32 *p_n_psxram = m_p_n_psxram;
|
||||||
UINT8 *atapi_regs = m_atapi_regs;
|
|
||||||
int i, n_state;
|
int i, n_state;
|
||||||
UINT8 sector_buffer[ 4096 ];
|
UINT8 sector_buffer[ 4096 ];
|
||||||
|
|
||||||
@ -832,16 +829,16 @@ TIMER_CALLBACK_MEMBER(ksys573_state::atapi_xfer_end)
|
|||||||
if (m_atapi_xferlen > 0)
|
if (m_atapi_xferlen > 0)
|
||||||
{
|
{
|
||||||
//mame_printf_debug("ATAPI: starting next piece of multi-part transfer\n");
|
//mame_printf_debug("ATAPI: starting next piece of multi-part transfer\n");
|
||||||
atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
|
m_atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
|
||||||
atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
|
m_atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
|
||||||
|
|
||||||
m_atapi_timer->adjust(m_maincpu->cycles_to_attotime((ATAPI_CYCLES_PER_SECTOR * (m_atapi_xferlen/2048))));
|
m_atapi_timer->adjust(m_maincpu->cycles_to_attotime((ATAPI_CYCLES_PER_SECTOR * (m_atapi_xferlen/2048))));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//mame_printf_debug("ATAPI: Transfer completed, dropping DRQ\n");
|
//mame_printf_debug("ATAPI: Transfer completed, dropping DRQ\n");
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRDY;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRDY;
|
||||||
atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO | ATAPI_INTREASON_COMMAND;
|
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO | ATAPI_INTREASON_COMMAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_psxirq->intin10(1);
|
m_psxirq->intin10(1);
|
||||||
@ -849,12 +846,11 @@ TIMER_CALLBACK_MEMBER(ksys573_state::atapi_xfer_end)
|
|||||||
verboselog(2, "atapi_xfer_end: %d %d\n", m_atapi_xferlen, m_atapi_xfermod );
|
verboselog(2, "atapi_xfer_end: %d %d\n", m_atapi_xferlen, m_atapi_xfermod );
|
||||||
}
|
}
|
||||||
|
|
||||||
READ32_MEMBER(ksys573_state::atapi_r)
|
READ16_MEMBER(ksys573_state::atapi_r)
|
||||||
{
|
{
|
||||||
UINT8 *atapi_regs = m_atapi_regs;
|
int data;
|
||||||
int reg, data;
|
|
||||||
|
|
||||||
if (mem_mask == 0x0000ffff) // word-wide command read
|
if (offset == 0 && mem_mask == 0xffff) // word-wide command read
|
||||||
{
|
{
|
||||||
// mame_printf_debug("ATAPI: packet read = %04x\n", atapi_data[atapi_data_ptr]);
|
// mame_printf_debug("ATAPI: packet read = %04x\n", atapi_data[atapi_data_ptr]);
|
||||||
|
|
||||||
@ -882,18 +878,18 @@ READ32_MEMBER(ksys573_state::atapi_r)
|
|||||||
verboselog(2, "atapi_r: atapi_xferlen=%d\n", m_atapi_xferlen );
|
verboselog(2, "atapi_r: atapi_xferlen=%d\n", m_atapi_xferlen );
|
||||||
if( m_atapi_xferlen != 0 )
|
if( m_atapi_xferlen != 0 )
|
||||||
{
|
{
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_SERVDSC;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_SERVDSC;
|
||||||
atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//mame_printf_debug("ATAPI: dropping DRQ\n");
|
//mame_printf_debug("ATAPI: dropping DRQ\n");
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
||||||
atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
|
m_atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
|
||||||
atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
|
m_atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
|
||||||
|
|
||||||
m_psxirq->intin10(1);
|
m_psxirq->intin10(1);
|
||||||
}
|
}
|
||||||
@ -910,8 +906,8 @@ READ32_MEMBER(ksys573_state::atapi_r)
|
|||||||
|
|
||||||
if( m_atapi_xferlen == 0 )
|
if( m_atapi_xferlen == 0 )
|
||||||
{
|
{
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
||||||
atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
||||||
m_psxirq->intin10(1);
|
m_psxirq->intin10(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -923,18 +919,9 @@ READ32_MEMBER(ksys573_state::atapi_r)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int shift;
|
data = m_atapi_regs[offset];
|
||||||
reg = offset<<1;
|
|
||||||
shift = 0;
|
|
||||||
if (mem_mask == 0x00ff0000)
|
|
||||||
{
|
|
||||||
reg += 1;
|
|
||||||
shift = 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
data = atapi_regs[reg];
|
switch( offset )
|
||||||
|
|
||||||
switch( reg )
|
|
||||||
{
|
{
|
||||||
case ATAPI_REG_DATA:
|
case ATAPI_REG_DATA:
|
||||||
verboselog(1, "atapi_r: data=%02x\n", data );
|
verboselog(1, "atapi_r: data=%02x\n", data );
|
||||||
@ -963,29 +950,23 @@ READ32_MEMBER(ksys573_state::atapi_r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// mame_printf_debug("ATAPI: read reg %d = %x (PC=%x)\n", reg, data, space.device().safe_pc());
|
// mame_printf_debug("ATAPI: read reg %d = %x (PC=%x)\n", reg, data, space.device().safe_pc());
|
||||||
|
|
||||||
data <<= shift;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
verboselog(2, "atapi_r( %08x, %08x ) %08x\n", offset, mem_mask, data );
|
verboselog(2, "atapi_r( %08x, %08x ) %08x\n", offset, mem_mask, data );
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(ksys573_state::atapi_w)
|
WRITE16_MEMBER(ksys573_state::atapi_w)
|
||||||
{
|
{
|
||||||
UINT8 *atapi_regs = m_atapi_regs;
|
|
||||||
UINT8 *atapi_data = m_atapi_data;
|
|
||||||
int reg;
|
|
||||||
|
|
||||||
verboselog(2, "atapi_w( %08x, %08x, %08x )\n", offset, mem_mask, data );
|
verboselog(2, "atapi_w( %08x, %08x, %08x )\n", offset, mem_mask, data );
|
||||||
|
|
||||||
if (mem_mask == 0x0000ffff) // word-wide command write
|
if (offset == 0 && mem_mask == 0xffff) // word-wide command write
|
||||||
{
|
{
|
||||||
verboselog(2, "atapi_w: data=%04x\n", data );
|
verboselog(2, "atapi_w: data=%04x\n", data );
|
||||||
|
|
||||||
// mame_printf_debug("ATAPI: packet write %04x\n", data);
|
// mame_printf_debug("ATAPI: packet write %04x\n", data);
|
||||||
atapi_data[m_atapi_data_ptr++] = data & 0xff;
|
m_atapi_data[m_atapi_data_ptr++] = data & 0xff;
|
||||||
atapi_data[m_atapi_data_ptr++] = data >> 8;
|
m_atapi_data[m_atapi_data_ptr++] = data >> 8;
|
||||||
|
|
||||||
if (m_atapi_cdata_wait)
|
if (m_atapi_cdata_wait)
|
||||||
{
|
{
|
||||||
@ -993,13 +974,13 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
if (m_atapi_data_ptr == m_atapi_cdata_wait)
|
if (m_atapi_data_ptr == m_atapi_cdata_wait)
|
||||||
{
|
{
|
||||||
// send it to the device
|
// send it to the device
|
||||||
m_cr589->WriteData( atapi_data, m_atapi_cdata_wait );
|
m_cr589->WriteData( m_atapi_data, m_atapi_cdata_wait );
|
||||||
|
|
||||||
// assert IRQ
|
// assert IRQ
|
||||||
m_psxirq->intin10(1);
|
m_psxirq->intin10(1);
|
||||||
|
|
||||||
// not sure here, but clear DRQ at least?
|
// not sure here, but clear DRQ at least?
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1007,7 +988,7 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
{
|
{
|
||||||
int phase;
|
int phase;
|
||||||
|
|
||||||
verboselog(2, "atapi_w: command %02x\n", atapi_data[0]&0xff );
|
verboselog(2, "atapi_w: command %02x\n", m_atapi_data[0]&0xff );
|
||||||
|
|
||||||
// reset data pointer for reading SCSI results
|
// reset data pointer for reading SCSI results
|
||||||
m_atapi_data_ptr = 0;
|
m_atapi_data_ptr = 0;
|
||||||
@ -1020,7 +1001,7 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
|
|
||||||
if (m_atapi_xferlen != -1)
|
if (m_atapi_xferlen != -1)
|
||||||
{
|
{
|
||||||
// mame_printf_debug("ATAPI: SCSI command %02x returned %d bytes from the device\n", atapi_data[0]&0xff, m_atapi_xferlen);
|
// mame_printf_debug("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
|
// store the returned command length in the ATAPI regs, splitting into
|
||||||
// multiple transfers if necessary
|
// multiple transfers if necessary
|
||||||
@ -1031,20 +1012,20 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
m_atapi_xferlen = MAX_TRANSFER_SIZE;
|
m_atapi_xferlen = MAX_TRANSFER_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
|
m_atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
|
||||||
atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
|
m_atapi_regs[ATAPI_REG_COUNTHIGH] = (m_atapi_xferlen>>8)&0xff;
|
||||||
|
|
||||||
if (m_atapi_xferlen == 0)
|
if (m_atapi_xferlen == 0)
|
||||||
{
|
{
|
||||||
// if no data to return, set the registers properly
|
// if no data to return, set the registers properly
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRDY;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRDY;
|
||||||
atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO|ATAPI_INTREASON_COMMAND;
|
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO|ATAPI_INTREASON_COMMAND;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// indicate data ready: set DRQ and DMA ready, and IO in INTREASON
|
// indicate data ready: set DRQ and DMA ready, and IO in INTREASON
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_SERVDSC;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_SERVDSC;
|
||||||
atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( phase )
|
switch( phase )
|
||||||
@ -1055,15 +1036,15 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// perform special ATAPI processing of certain commands
|
// perform special ATAPI processing of certain commands
|
||||||
switch (atapi_data[0]&0xff)
|
switch (m_atapi_data[0]&0xff)
|
||||||
{
|
{
|
||||||
case 0x00: // BUS RESET / TEST UNIT READY
|
case 0x00: // BUS RESET / TEST UNIT READY
|
||||||
case 0xbb: // SET CDROM SPEED
|
case 0xbb: // SET CDROM SPEED
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x45: // PLAY
|
case 0x45: // PLAY
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_BSY;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_BSY;
|
||||||
m_atapi_timer->adjust( downcast<cpu_device *>(&space.device())->cycles_to_attotime( ATAPI_CYCLES_PER_SECTOR ) );
|
m_atapi_timer->adjust( downcast<cpu_device *>(&space.device())->cycles_to_attotime( ATAPI_CYCLES_PER_SECTOR ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1075,23 +1056,16 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
{
|
{
|
||||||
// mame_printf_debug("ATAPI: SCSI device returned error!\n");
|
// mame_printf_debug("ATAPI: SCSI device returned error!\n");
|
||||||
|
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_CHECK;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ | ATAPI_STAT_CHECK;
|
||||||
atapi_regs[ATAPI_REG_ERRFEAT] = 0x50; // sense key = ILLEGAL REQUEST
|
m_atapi_regs[ATAPI_REG_ERRFEAT] = 0x50; // sense key = ILLEGAL REQUEST
|
||||||
atapi_regs[ATAPI_REG_COUNTLOW] = 0;
|
m_atapi_regs[ATAPI_REG_COUNTLOW] = 0;
|
||||||
atapi_regs[ATAPI_REG_COUNTHIGH] = 0;
|
m_atapi_regs[ATAPI_REG_COUNTHIGH] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
reg = offset<<1;
|
switch( offset )
|
||||||
if (mem_mask == 0x00ff0000)
|
|
||||||
{
|
|
||||||
reg += 1;
|
|
||||||
data >>= 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch( reg )
|
|
||||||
{
|
{
|
||||||
case ATAPI_REG_DATA:
|
case ATAPI_REG_DATA:
|
||||||
verboselog(1, "atapi_w: data=%02x\n", data );
|
verboselog(1, "atapi_w: data=%02x\n", data );
|
||||||
@ -1119,18 +1093,18 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
atapi_regs[reg] = data;
|
m_atapi_regs[offset] = data;
|
||||||
// mame_printf_debug("ATAPI: reg %d = %x (offset %x mask %x PC=%x)\n", reg, data, offset, mem_mask, space.device().safe_pc());
|
// mame_printf_debug("ATAPI: reg %d = %x (offset %x mask %x PC=%x)\n", reg, data, offset, mem_mask, space.device().safe_pc());
|
||||||
|
|
||||||
if (reg == ATAPI_REG_CMDSTATUS)
|
if (offset == ATAPI_REG_CMDSTATUS)
|
||||||
{
|
{
|
||||||
// mame_printf_debug("ATAPI command %x issued! (PC=%x)\n", data, space.device().safe_pc());
|
// mame_printf_debug("ATAPI command %x issued! (PC=%x)\n", data, space.device().safe_pc());
|
||||||
|
|
||||||
switch (data)
|
switch (data)
|
||||||
{
|
{
|
||||||
case 0xa0: // PACKET
|
case 0xa0: // PACKET
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ;
|
||||||
atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_COMMAND;
|
m_atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_COMMAND;
|
||||||
|
|
||||||
m_atapi_data_ptr = 0;
|
m_atapi_data_ptr = 0;
|
||||||
m_atapi_data_len = 0;
|
m_atapi_data_len = 0;
|
||||||
@ -1143,7 +1117,7 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xa1: // IDENTIFY PACKET DEVICE
|
case 0xa1: // IDENTIFY PACKET DEVICE
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = ATAPI_STAT_DRQ;
|
||||||
|
|
||||||
m_atapi_data_ptr = 0;
|
m_atapi_data_ptr = 0;
|
||||||
m_atapi_data_len = 512;
|
m_atapi_data_len = 512;
|
||||||
@ -1152,45 +1126,45 @@ WRITE32_MEMBER(ksys573_state::atapi_w)
|
|||||||
m_atapi_xferlen = 0;
|
m_atapi_xferlen = 0;
|
||||||
m_atapi_xfermod = 0;
|
m_atapi_xfermod = 0;
|
||||||
|
|
||||||
memset( atapi_data, 0, m_atapi_data_len );
|
memset( m_atapi_data, 0, m_atapi_data_len );
|
||||||
|
|
||||||
atapi_data[ 0 ^ 1 ] = 0x85; // ATAPI device, cmd set 5 compliant, DRQ within 3 ms of PACKET command
|
m_atapi_data[ 0 ^ 1 ] = 0x85; // ATAPI device, cmd set 5 compliant, DRQ within 3 ms of PACKET command
|
||||||
atapi_data[ 1 ^ 1 ] = 0x00;
|
m_atapi_data[ 1 ^ 1 ] = 0x00;
|
||||||
|
|
||||||
memset( &atapi_data[ 46 ], ' ', 8 );
|
memset( &m_atapi_data[ 46 ], ' ', 8 );
|
||||||
atapi_data[ 46 ^ 1 ] = '1';
|
m_atapi_data[ 46 ^ 1 ] = '1';
|
||||||
atapi_data[ 47 ^ 1 ] = '.';
|
m_atapi_data[ 47 ^ 1 ] = '.';
|
||||||
atapi_data[ 48 ^ 1 ] = '0';
|
m_atapi_data[ 48 ^ 1 ] = '0';
|
||||||
|
|
||||||
memset( &atapi_data[ 54 ], ' ', 40 );
|
memset( &m_atapi_data[ 54 ], ' ', 40 );
|
||||||
atapi_data[ 54 ^ 1 ] = 'M';
|
m_atapi_data[ 54 ^ 1 ] = 'M';
|
||||||
atapi_data[ 55 ^ 1 ] = 'A';
|
m_atapi_data[ 55 ^ 1 ] = 'A';
|
||||||
atapi_data[ 56 ^ 1 ] = 'T';
|
m_atapi_data[ 56 ^ 1 ] = 'T';
|
||||||
atapi_data[ 57 ^ 1 ] = 'S';
|
m_atapi_data[ 57 ^ 1 ] = 'S';
|
||||||
atapi_data[ 58 ^ 1 ] = 'H';
|
m_atapi_data[ 58 ^ 1 ] = 'H';
|
||||||
atapi_data[ 59 ^ 1 ] = 'I';
|
m_atapi_data[ 59 ^ 1 ] = 'I';
|
||||||
atapi_data[ 60 ^ 1 ] = 'T';
|
m_atapi_data[ 60 ^ 1 ] = 'T';
|
||||||
atapi_data[ 61 ^ 1 ] = 'A';
|
m_atapi_data[ 61 ^ 1 ] = 'A';
|
||||||
atapi_data[ 62 ^ 1 ] = ' ';
|
m_atapi_data[ 62 ^ 1 ] = ' ';
|
||||||
atapi_data[ 63 ^ 1 ] = 'C';
|
m_atapi_data[ 63 ^ 1 ] = 'C';
|
||||||
atapi_data[ 64 ^ 1 ] = 'R';
|
m_atapi_data[ 64 ^ 1 ] = 'R';
|
||||||
atapi_data[ 65 ^ 1 ] = '-';
|
m_atapi_data[ 65 ^ 1 ] = '-';
|
||||||
atapi_data[ 66 ^ 1 ] = '5';
|
m_atapi_data[ 66 ^ 1 ] = '5';
|
||||||
atapi_data[ 67 ^ 1 ] = '8';
|
m_atapi_data[ 67 ^ 1 ] = '8';
|
||||||
atapi_data[ 68 ^ 1 ] = '9';
|
m_atapi_data[ 68 ^ 1 ] = '9';
|
||||||
atapi_data[ 69 ^ 1 ] = ' ';
|
m_atapi_data[ 69 ^ 1 ] = ' ';
|
||||||
|
|
||||||
atapi_data[ 98 ^ 1 ] = 0x04; // IORDY may be disabled
|
m_atapi_data[ 98 ^ 1 ] = 0x04; // IORDY may be disabled
|
||||||
atapi_data[ 99 ^ 1 ] = 0x00;
|
m_atapi_data[ 99 ^ 1 ] = 0x00;
|
||||||
|
|
||||||
atapi_regs[ATAPI_REG_COUNTLOW] = 0;
|
m_atapi_regs[ATAPI_REG_COUNTLOW] = 0;
|
||||||
atapi_regs[ATAPI_REG_COUNTHIGH] = 2;
|
m_atapi_regs[ATAPI_REG_COUNTHIGH] = 2;
|
||||||
|
|
||||||
m_psxirq->intin10(1);
|
m_psxirq->intin10(1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xef: // SET FEATURES
|
case 0xef: // SET FEATURES
|
||||||
atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
m_atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
||||||
|
|
||||||
m_atapi_data_ptr = 0;
|
m_atapi_data_ptr = 0;
|
||||||
m_atapi_data_len = 0;
|
m_atapi_data_len = 0;
|
||||||
@ -1233,7 +1207,7 @@ void ksys573_state::atapi_init()
|
|||||||
save_item( NAME(m_atapi_xfermod) );
|
save_item( NAME(m_atapi_xfermod) );
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(ksys573_state::atapi_reset_w)
|
WRITE16_MEMBER(ksys573_state::atapi_reset_w)
|
||||||
{
|
{
|
||||||
UINT8 *atapi_regs = m_atapi_regs;
|
UINT8 *atapi_regs = m_atapi_regs;
|
||||||
|
|
||||||
@ -1280,15 +1254,13 @@ void ksys573_state::cdrom_dma_write( UINT32 *ram, UINT32 n_address, INT32 n_size
|
|||||||
m_atapi_timer->adjust(m_maincpu->cycles_to_attotime((ATAPI_CYCLES_PER_SECTOR * (m_atapi_xferlen/2048))));
|
m_atapi_timer->adjust(m_maincpu->cycles_to_attotime((ATAPI_CYCLES_PER_SECTOR * (m_atapi_xferlen/2048))));
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_MEMBER(ksys573_state::security_w)
|
WRITE16_MEMBER(ksys573_state::security_w)
|
||||||
{
|
{
|
||||||
int security_cart_number = m_security_cart_number;
|
int security_cart_number = m_security_cart_number;
|
||||||
COMBINE_DATA( &m_n_security_control );
|
COMBINE_DATA( &m_n_security_control );
|
||||||
|
|
||||||
verboselog(2, "security_w( %08x, %08x, %08x )\n", offset, mem_mask, data );
|
verboselog(2, "security_w( %08x, %08x, %08x )\n", offset, mem_mask, data );
|
||||||
|
|
||||||
if( ACCESSING_BITS_0_15 )
|
|
||||||
{
|
|
||||||
ds2401_device *ds2401 = machine().device<ds2401_device>(security_cart_number ? "game_id" : "install_id");
|
ds2401_device *ds2401 = machine().device<ds2401_device>(security_cart_number ? "game_id" : "install_id");
|
||||||
device_secure_serial_flash *secflash = machine().device<device_secure_serial_flash>(security_cart_number ? "game_eeprom" : "install_eeprom");
|
device_secure_serial_flash *secflash = machine().device<device_secure_serial_flash>(security_cart_number ? "game_eeprom" : "install_eeprom");
|
||||||
|
|
||||||
@ -1309,14 +1281,13 @@ WRITE32_MEMBER(ksys573_state::security_w)
|
|||||||
{
|
{
|
||||||
(this->*m_security_callback)( data & 0xff );
|
(this->*m_security_callback)( data & 0xff );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ioport("OUT1")->write_safe( data, mem_mask );
|
ioport("OUT1")->write_safe( data, mem_mask );
|
||||||
}
|
}
|
||||||
|
|
||||||
READ32_MEMBER(ksys573_state::security_r)
|
READ16_MEMBER(ksys573_state::security_r)
|
||||||
{
|
{
|
||||||
UINT32 data = m_n_security_control;
|
UINT16 data = m_n_security_control;
|
||||||
verboselog(2, "security_r( %08x, %08x ) %08x\n", offset, mem_mask, data );
|
verboselog(2, "security_r( %08x, %08x ) %08x\n", offset, mem_mask, data );
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@ -1378,18 +1349,18 @@ static ADDRESS_MAP_START( konami573_map, AS_PROGRAM, 32, ksys573_state )
|
|||||||
AM_RANGE(0x1f400004, 0x1f400007) AM_READ(jamma_r )
|
AM_RANGE(0x1f400004, 0x1f400007) AM_READ(jamma_r )
|
||||||
AM_RANGE(0x1f400008, 0x1f40000b) AM_READ_PORT( "IN2" )
|
AM_RANGE(0x1f400008, 0x1f40000b) AM_READ_PORT( "IN2" )
|
||||||
AM_RANGE(0x1f40000c, 0x1f40000f) AM_READ_PORT( "IN3" )
|
AM_RANGE(0x1f40000c, 0x1f40000f) AM_READ_PORT( "IN3" )
|
||||||
AM_RANGE(0x1f480000, 0x1f48000f) AM_READWRITE(atapi_r, atapi_w ) // IDE controller, used mostly in ATAPI mode (only 3 pure IDE commands seen so far)
|
AM_RANGE(0x1f480000, 0x1f48000f) AM_READWRITE16(atapi_r, atapi_w, 0xffffffff) // IDE controller, used mostly in ATAPI mode (only 3 pure IDE commands seen so far)
|
||||||
AM_RANGE(0x1f500000, 0x1f500003) AM_READWRITE(control_r, control_w ) // Konami can't make a game without a "control" register.
|
AM_RANGE(0x1f500000, 0x1f500003) AM_READWRITE16(control_r, control_w, 0x0000ffff) // Konami can't make a game without a "control" register.
|
||||||
AM_RANGE(0x1f560000, 0x1f560003) AM_WRITE(atapi_reset_w )
|
AM_RANGE(0x1f560000, 0x1f560003) AM_WRITE16(atapi_reset_w, 0x0000ffff)
|
||||||
AM_RANGE(0x1f5c0000, 0x1f5c0003) AM_WRITENOP // watchdog?
|
AM_RANGE(0x1f5c0000, 0x1f5c0003) AM_WRITENOP // watchdog?
|
||||||
AM_RANGE(0x1f620000, 0x1f623fff) AM_DEVREADWRITE8("m48t58", timekeeper_device, read, write, 0x00ff00ff)
|
AM_RANGE(0x1f620000, 0x1f623fff) AM_DEVREADWRITE8("m48t58", timekeeper_device, read, write, 0x00ff00ff)
|
||||||
AM_RANGE(0x1f680000, 0x1f68001f) AM_READWRITE(mb89371_r, mb89371_w)
|
AM_RANGE(0x1f680000, 0x1f68001f) AM_READWRITE16(mb89371_r, mb89371_w, 0xffffffff)
|
||||||
AM_RANGE(0x1f6a0000, 0x1f6a0003) AM_READWRITE(security_r, security_w )
|
AM_RANGE(0x1f6a0000, 0x1f6a0003) AM_READWRITE16(security_r, security_w, 0x0000ffff)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ksys573_state::flash_init( )
|
void ksys573_state::flash_init()
|
||||||
{
|
{
|
||||||
// find onboard flash devices
|
// find onboard flash devices
|
||||||
astring tempstr;
|
astring tempstr;
|
||||||
|
Loading…
Reference in New Issue
Block a user