Переглянути джерело

Minor optimization

Skipped multiple if statements with single if during SD card reads.
Morio 1 рік тому
батько
коміт
d14d8add41
1 змінених файлів з 50 додано та 40 видалено
  1. 50 40
      src/ZuluSCSI_cdrom.cpp

+ 50 - 40
src/ZuluSCSI_cdrom.cpp

@@ -1704,54 +1704,64 @@ static void doReadCD(uint32_t lba, uint32_t length, uint8_t sector_type,
             diskEjectButtonUpdate(false);
         }
         if (scsiDev.resetFlag) break;
-
-        if (add_fake_headers)
+        if ((g_scsi_settings.getDevice(img.scsiId & 0x7)->vendorExtensions & VENDOR_EXTENSION_OPTICAL_PLEXTOR))
         {
-            // 12-byte data sector sync pattern
-            *buf++ = 0x00;
-            for (int i = 0; i < 10; i++)
+            if (sector_length > 0)
             {
-                *buf++ = 0xFF;
+                // User data
+                img.file.read(buf, sector_length);
+                buf += sector_length;
             }
-            *buf++ = 0x00;
-
-            // 4-byte data sector header
-            LBA2MSFBCD(lba + idx, buf, false);
-            buf += 3;
-            *buf++ = 0x01; // Mode 1
         }
-
-        if (sector_length > 0)
+        else 
         {
-            // User data
-            img.file.read(buf, sector_length);
-            buf += sector_length;
-        }
+            if (add_fake_headers)
+            {
+                // 12-byte data sector sync pattern
+                *buf++ = 0x00;
+                for (int i = 0; i < 10; i++)
+                {
+                    *buf++ = 0xFF;
+                }
+                *buf++ = 0x00;
+
+                // 4-byte data sector header
+                LBA2MSFBCD(lba + idx, buf, false);
+                buf += 3;
+                *buf++ = 0x01; // Mode 1
+            }
 
-        if (add_fake_headers)
-        {
-            // 288 bytes of ECC
-            memset(buf, 0, 288);
-            buf += 288;
-        }
+            if (sector_length > 0)
+            {
+                // User data
+                img.file.read(buf, sector_length);
+                buf += sector_length;
+            }
 
-        if (field_q_subchannel)
-        {
-            // Formatted Q subchannel data
-            // Refer to table 354 in T10/1545-D MMC-4 Revision 5a
-            // and ECMA-130 22.3.3
-            *buf++ = (trackinfo.track_mode == CUETrack_AUDIO ? 0x10 : 0x14); // Control & ADR
-            *buf++ = trackinfo.track_number;
-            *buf++ = (lba + idx >= trackinfo.data_start) ? 1 : 0; // Index number (0 = pregap)
-            int32_t rel = (int32_t)(lba + idx) - (int32_t)trackinfo.data_start;
-            LBA2MSF(rel, buf, true); buf += 3;
-            *buf++ = 0;
-            LBA2MSF(lba + idx, buf, false); buf += 3;
-            *buf++ = 0; *buf++ = 0; // CRC (optional)
-            *buf++ = 0; *buf++ = 0; *buf++ = 0; // (pad)
-            *buf++ = 0; // No P subchannel
-        }
+            if (add_fake_headers)
+            {
+                // 288 bytes of ECC
+                memset(buf, 0, 288);
+                buf += 288;
+            }
 
+            if (field_q_subchannel)
+            {
+                // Formatted Q subchannel data
+                // Refer to table 354 in T10/1545-D MMC-4 Revision 5a
+                // and ECMA-130 22.3.3
+                *buf++ = (trackinfo.track_mode == CUETrack_AUDIO ? 0x10 : 0x14); // Control & ADR
+                *buf++ = trackinfo.track_number;
+                *buf++ = (lba + idx >= trackinfo.data_start) ? 1 : 0; // Index number (0 = pregap)
+                int32_t rel = (int32_t)(lba + idx) - (int32_t)trackinfo.data_start;
+                LBA2MSF(rel, buf, true); buf += 3;
+                *buf++ = 0;
+                LBA2MSF(lba + idx, buf, false); buf += 3;
+                *buf++ = 0; *buf++ = 0; // CRC (optional)
+                *buf++ = 0; *buf++ = 0; *buf++ = 0; // (pad)
+                *buf++ = 0; // No P subchannel
+            }
+        }
         assert(buf == bufstart + result_length);
         scsiStartWrite(bufstart, result_length);
     }