Преглед на файлове

Respond to a non standard read subchannel CDB

In issue https://github.com/ZuluSCSI/ZuluSCSI-firmware/issues/583
the user reported a DOS game not working. It was using a read
subchannel parameter list than is reserved in SCSI MMC standards.
The fix that worked was to treat it as a CD current position parameter.
J. Morio Sakaguchi преди 4 месеца
родител
ревизия
41973e579e
променени са 1 файла, в които са добавени 4 реда и са изтрити 2 реда
  1. 4 2
      src/BlueSCSI_cdrom.cpp

+ 4 - 2
src/BlueSCSI_cdrom.cpp

@@ -1942,7 +1942,9 @@ static void doReadSubchannel(bool time, bool subq, uint8_t parameter, uint8_t tr
 {
     uint8_t *buf = scsiDev.data;
 
-    if (parameter == 0x01)
+    // DOS for a game Screamer was requesting parameter list 0x00. This defined in the SCSI-2 spec
+    // but later as a reserved value in subsequent SCSI MMCs. Currently treating is as playback position request
+    if (parameter == 0x01 || parameter == 0x00)
     {
         uint8_t audiostatus;
         uint32_t lba = 0;
@@ -1964,7 +1966,7 @@ static void doReadSubchannel(bool time, bool subq, uint8_t parameter, uint8_t tr
             len = 12;
             *buf++ = 0;  // Subchannel data length (MSB)
             *buf++ = len; // Subchannel data length (LSB)
-            *buf++ = 0x01; // Subchannel data format
+            *buf++ = parameter; // Subchannel data format
             *buf++ = (trackinfo.track_mode == CUETrack_AUDIO ? 0x10 : 0x14);
             *buf++ = trackinfo.track_number;
             *buf++ = (lba >= trackinfo.data_start) ? 1 : 0; // Index number (0 = pregap)