Преглед изворни кода

PLAY AUDIO MSF tweak.

Fixing my error from prior commit and properly handling current position playback request, hopefully.
saybur пре 2 година
родитељ
комит
065ce65924
1 измењених фајлова са 12 додато и 9 уклоњено
  1. 12 9
      src/BlueSCSI_cdrom.cpp

+ 12 - 9
src/BlueSCSI_cdrom.cpp

@@ -1511,7 +1511,18 @@ extern "C" int scsiCDRomCommand()
         uint32_t start = (scsiDev.cdb[3] * 60 + scsiDev.cdb[4]) * 75 + scsiDev.cdb[5];
         uint32_t end   = (scsiDev.cdb[6] * 60 + scsiDev.cdb[7]) * 75 + scsiDev.cdb[8];
 
-        doPlayAudio(start, end - start);
+        uint32_t lba = start;
+        if (scsiDev.cdb[3] == 0xFF
+                && scsiDev.cdb[4] == 0xFF
+                && scsiDev.cdb[5] == 0xFF)
+        {
+            // request to start playback from 'current position'
+            image_config_t &img = *(image_config_t*)scsiDev.target->cfg;
+            lba = img.file.position() / 2352;
+        }
+
+        uint32_t length = end - lba;
+        doPlayAudio(lba, length);
     }
     else if (command == 0x4B)
     {
@@ -1557,14 +1568,6 @@ extern "C" int scsiCDRomCommand()
         uint8_t main_channel = scsiDev.cdb[9];
         uint8_t sub_channel = scsiDev.cdb[10];
 
-        if (scsiDev.cdb[3] == 0xFF
-                && scsiDev.cdb[4] == 0xFF
-                && scsiDev.cdb[5] == 0xFF)
-        {
-            // resume from current position
-            start = 0xFFFFFFFF;
-        }
-
         doReadCD(start, end - start, sector_type, main_channel, sub_channel);
     }
     else if (command == 0x42)