mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
nec/pce_cd.cpp: unbreak no disc state
This commit is contained in:
parent
cc2bc77004
commit
a6ec7a7bd2
@ -2,7 +2,7 @@
|
|||||||
// copyright-holders:Wilbert Pol, Angelo Salese
|
// copyright-holders:Wilbert Pol, Angelo Salese
|
||||||
/**************************************************************************************************
|
/**************************************************************************************************
|
||||||
|
|
||||||
PC Engine CD HW notes:
|
PC Engine CD HW sub-portion:
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- Rewrite SCSI to honor actual nscsi_device;
|
- Rewrite SCSI to honor actual nscsi_device;
|
||||||
@ -23,6 +23,7 @@ TODO:
|
|||||||
- Audio CD player rewind/fast forward don't work properly
|
- Audio CD player rewind/fast forward don't work properly
|
||||||
\- never go past 1 minute mark, underflows;
|
\- never go past 1 minute mark, underflows;
|
||||||
- Fader feature is sketchy and unchecked against real HW;
|
- Fader feature is sketchy and unchecked against real HW;
|
||||||
|
- Implement proper check condition errors (non-SCSI complaint);
|
||||||
|
|
||||||
**************************************************************************************************/
|
**************************************************************************************************/
|
||||||
|
|
||||||
@ -378,13 +379,14 @@ void pce_cd_device::reply_status_byte(uint8_t status)
|
|||||||
void pce_cd_device::test_unit_ready()
|
void pce_cd_device::test_unit_ready()
|
||||||
{
|
{
|
||||||
LOGCMD("0x00 TEST UNIT READY: status send ");
|
LOGCMD("0x00 TEST UNIT READY: status send ");
|
||||||
if (m_cdrom)
|
if (m_cdrom->exists())
|
||||||
{
|
{
|
||||||
LOGCMD("STATUS_OK\n");
|
LOGCMD("STATUS_OK\n");
|
||||||
reply_status_byte(SCSI_STATUS_OK);
|
reply_status_byte(SCSI_STATUS_OK);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// TODO: sense key/ASC/ASCQ
|
||||||
LOGCMD("CHECK_CONDITION\n");
|
LOGCMD("CHECK_CONDITION\n");
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
}
|
}
|
||||||
@ -397,9 +399,9 @@ void pce_cd_device::read_6()
|
|||||||
uint32_t frame_count = m_command_buffer[4];
|
uint32_t frame_count = m_command_buffer[4];
|
||||||
LOGCMD("0x08 READ(6): frame: %08x size: %08x\n", frame, frame_count);
|
LOGCMD("0x08 READ(6): frame: %08x size: %08x\n", frame, frame_count);
|
||||||
|
|
||||||
/* Check for presence of a CD */
|
if (!m_cdrom->exists())
|
||||||
if (!m_cdrom)
|
|
||||||
{
|
{
|
||||||
|
// TODO: sense key/ASC/ASCQ
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -437,9 +439,9 @@ void pce_cd_device::nec_set_audio_start_position()
|
|||||||
const uint8_t mode = m_command_buffer[9] & 0xc0;
|
const uint8_t mode = m_command_buffer[9] & 0xc0;
|
||||||
LOGCMD("0xd8 SET AUDIO PLAYBACK START POSITION (NEC): mode %02x\n", mode);
|
LOGCMD("0xd8 SET AUDIO PLAYBACK START POSITION (NEC): mode %02x\n", mode);
|
||||||
|
|
||||||
if (!m_cdrom)
|
if (!m_cdrom->exists())
|
||||||
{
|
{
|
||||||
/* Throw some error here */
|
// TODO: sense key/ASC/ASCQ
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -555,14 +557,13 @@ void pce_cd_device::nec_set_audio_stop_position()
|
|||||||
const uint8_t mode = m_command_buffer[9] & 0xc0;
|
const uint8_t mode = m_command_buffer[9] & 0xc0;
|
||||||
LOGCMD("0xd9 SET AUDIO PLAYBACK END POSITION (NEC): mode %02x\n", mode);
|
LOGCMD("0xd9 SET AUDIO PLAYBACK END POSITION (NEC): mode %02x\n", mode);
|
||||||
|
|
||||||
if (!m_cdrom)
|
if (!m_cdrom->exists())
|
||||||
{
|
{
|
||||||
/* Throw some error here */
|
// TODO: sense key/ASC/ASCQ
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case 0x00:
|
case 0x00:
|
||||||
@ -642,8 +643,9 @@ void pce_cd_device::nec_set_audio_stop_position()
|
|||||||
void pce_cd_device::nec_pause()
|
void pce_cd_device::nec_pause()
|
||||||
{
|
{
|
||||||
/* If no cd mounted throw an error */
|
/* If no cd mounted throw an error */
|
||||||
if (!m_cdrom)
|
if (!m_cdrom->exists())
|
||||||
{
|
{
|
||||||
|
// TODO: sense key/ASC/ASCQ
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -653,6 +655,7 @@ void pce_cd_device::nec_pause()
|
|||||||
/* If there was no cdda playing, throw an error */
|
/* If there was no cdda playing, throw an error */
|
||||||
if (m_cdda_status == PCE_CD_CDDA_OFF)
|
if (m_cdda_status == PCE_CD_CDDA_OFF)
|
||||||
{
|
{
|
||||||
|
// TODO: sense key/ASC/ASCQ
|
||||||
LOG("Issued SCSI_CHECK_CONDITION in 0xda!\n");
|
LOG("Issued SCSI_CHECK_CONDITION in 0xda!\n");
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
return;
|
return;
|
||||||
@ -672,9 +675,9 @@ void pce_cd_device::nec_get_subq()
|
|||||||
uint32_t msf_abs, msf_rel, track, frame;
|
uint32_t msf_abs, msf_rel, track, frame;
|
||||||
//LOGCMD("0xdd READ SUBCHANNEL Q (NEC) %d\n", m_cdda_status);
|
//LOGCMD("0xdd READ SUBCHANNEL Q (NEC) %d\n", m_cdda_status);
|
||||||
|
|
||||||
if (!m_cdrom)
|
if (!m_cdrom->exists())
|
||||||
{
|
{
|
||||||
/* Throw some error here */
|
// TODO: sense key/ASC/ASCQ
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -739,10 +742,11 @@ void pce_cd_device::nec_get_dir_info()
|
|||||||
uint32_t frame, msf, track = 0;
|
uint32_t frame, msf, track = 0;
|
||||||
LOGCMD("0xde GET DIR INFO (NEC)\n");
|
LOGCMD("0xde GET DIR INFO (NEC)\n");
|
||||||
|
|
||||||
if (!m_cdrom)
|
if (!m_cdrom->exists())
|
||||||
{
|
{
|
||||||
/* Throw some error here */
|
// TODO: sense key/ASC/ASCQ
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cdrom_file::toc &toc = m_cdrom->get_toc();
|
const cdrom_file::toc &toc = m_cdrom->get_toc();
|
||||||
@ -807,6 +811,7 @@ void pce_cd_device::nec_get_dir_info()
|
|||||||
|
|
||||||
void pce_cd_device::end_of_list()
|
void pce_cd_device::end_of_list()
|
||||||
{
|
{
|
||||||
|
// TODO: sense key/ASC/ASCQ
|
||||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user