summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <lordkale4@gmail.com>2023-05-17 21:25:42 +0200
committer angelosa <lordkale4@gmail.com>2023-05-17 21:25:42 +0200
commita6ec7a7bd2056b65a8e871399a832ab878afedbf (patch)
tree12b908b15e669403a7066cd03419d7c1af16fc58
parentcc2bc7700499c27da0ca13317396a4a4d326c446 (diff)
nec/pce_cd.cpp: unbreak no disc state
-rw-r--r--src/mame/nec/pce_cd.cpp33
1 files 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);
}