From a6ec7a7bd2056b65a8e871399a832ab878afedbf Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 17 May 2023 21:25:42 +0200 Subject: nec/pce_cd.cpp: unbreak no disc state --- src/mame/nec/pce_cd.cpp | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/mame/nec/pce_cd.cpp b/src/mame/nec/pce_cd.cpp index c3d2027ba8f..e57fddab3d6 100644 --- a/src/mame/nec/pce_cd.cpp +++ b/src/mame/nec/pce_cd.cpp @@ -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); } -- cgit v1.2.3