mirror of
https://github.com/holub/mame
synced 2025-06-30 07:58:56 +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
|
||||
/**************************************************************************************************
|
||||
|
||||
PC Engine CD HW notes:
|
||||
PC Engine CD HW sub-portion:
|
||||
|
||||
TODO:
|
||||
- Rewrite SCSI to honor actual nscsi_device;
|
||||
@ -23,6 +23,7 @@ TODO:
|
||||
- Audio CD player rewind/fast forward don't work properly
|
||||
\- never go past 1 minute mark, underflows;
|
||||
- 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()
|
||||
{
|
||||
LOGCMD("0x00 TEST UNIT READY: status send ");
|
||||
if (m_cdrom)
|
||||
if (m_cdrom->exists())
|
||||
{
|
||||
LOGCMD("STATUS_OK\n");
|
||||
reply_status_byte(SCSI_STATUS_OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: sense key/ASC/ASCQ
|
||||
LOGCMD("CHECK_CONDITION\n");
|
||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||
}
|
||||
@ -397,9 +399,9 @@ void pce_cd_device::read_6()
|
||||
uint32_t frame_count = m_command_buffer[4];
|
||||
LOGCMD("0x08 READ(6): frame: %08x size: %08x\n", frame, frame_count);
|
||||
|
||||
/* Check for presence of a CD */
|
||||
if (!m_cdrom)
|
||||
if (!m_cdrom->exists())
|
||||
{
|
||||
// TODO: sense key/ASC/ASCQ
|
||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||
return;
|
||||
}
|
||||
@ -437,9 +439,9 @@ void pce_cd_device::nec_set_audio_start_position()
|
||||
const uint8_t mode = m_command_buffer[9] & 0xc0;
|
||||
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);
|
||||
return;
|
||||
}
|
||||
@ -555,14 +557,13 @@ void pce_cd_device::nec_set_audio_stop_position()
|
||||
const uint8_t mode = m_command_buffer[9] & 0xc0;
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case 0x00:
|
||||
@ -642,8 +643,9 @@ void pce_cd_device::nec_set_audio_stop_position()
|
||||
void pce_cd_device::nec_pause()
|
||||
{
|
||||
/* 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);
|
||||
return;
|
||||
}
|
||||
@ -653,6 +655,7 @@ void pce_cd_device::nec_pause()
|
||||
/* If there was no cdda playing, throw an error */
|
||||
if (m_cdda_status == PCE_CD_CDDA_OFF)
|
||||
{
|
||||
// TODO: sense key/ASC/ASCQ
|
||||
LOG("Issued SCSI_CHECK_CONDITION in 0xda!\n");
|
||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||
return;
|
||||
@ -672,9 +675,9 @@ void pce_cd_device::nec_get_subq()
|
||||
uint32_t msf_abs, msf_rel, track, frame;
|
||||
//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);
|
||||
return;
|
||||
}
|
||||
@ -739,10 +742,11 @@ void pce_cd_device::nec_get_dir_info()
|
||||
uint32_t frame, msf, track = 0;
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
// TODO: sense key/ASC/ASCQ
|
||||
reply_status_byte(SCSI_CHECK_CONDITION);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user