From 628fa01ed67b9080afe584fd91443602dc3c06fc Mon Sep 17 00:00:00 2001 From: arbee Date: Sun, 9 May 2021 12:13:28 -0400 Subject: nscsi_cd: Implement READ DISC INFORMATION command. [R. Belmont] --- src/devices/bus/nscsi/cd.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/devices/bus/nscsi/cd.cpp b/src/devices/bus/nscsi/cd.cpp index a22348e8f85..76ba51dc380 100644 --- a/src/devices/bus/nscsi/cd.cpp +++ b/src/devices/bus/nscsi/cd.cpp @@ -457,6 +457,41 @@ void nscsi_cdrom_device::scsi_command() break; } + case SC_READ_DISC_INFORMATION: + LOG("command READ DISC INFORMATION\n"); + std::fill_n(scsi_cmdbuf, 34, 0); + scsi_cmdbuf[1] = 32; + scsi_cmdbuf[2] = 2; // disc is complete + scsi_cmdbuf[3] = 1; // first track + scsi_cmdbuf[4] = 1; // number of sessions (TODO: session support for CHDv6) + scsi_cmdbuf[5] = 1; // first track in last session + scsi_cmdbuf[6] = cdrom_get_last_track(cdrom); // last track in last session + scsi_cmdbuf[8] = 0; // CD-ROM, not XA + + // lead in start time in MSF + { + u32 tstart = cdrom_get_track_start(cdrom, 0); + tstart = to_msf(tstart + 150); + + scsi_cmdbuf[16] = (tstart >> 24) & 0xff; + scsi_cmdbuf[17] = (tstart >> 16) & 0xff; + scsi_cmdbuf[18] = (tstart >> 8) & 0xff; + scsi_cmdbuf[19] = (tstart & 0xff); + + // lead-out start time in MSF + tstart = cdrom_get_track_start(cdrom, 0xaa); + tstart = to_msf(tstart + 150); + + scsi_cmdbuf[20] = (tstart >> 24) & 0xff; + scsi_cmdbuf[21] = (tstart >> 16) & 0xff; + scsi_cmdbuf[22] = (tstart >> 8) & 0xff; + scsi_cmdbuf[23] = (tstart & 0xff); + } + + scsi_data_in(0, 34); + scsi_status_complete(SS_GOOD); + break; + case SC_PREVENT_ALLOW_MEDIUM_REMOVAL: // TODO: support eject prevention LOG("command %s MEDIUM REMOVAL\n", (scsi_cmdbuf[4] & 0x1) ? "PREVENT" : "ALLOW"); -- cgit v1.2.3