Sfoglia il codice sorgente

This is an attempt to fix a Solaris install issue

This is concerning issue https://github.com/ZuluSCSI/ZuluSCSI-firmware/issues/545
It looks like maybe the capacity report is wrong. Not sure if is the
root cause. But this reverts the capacity reporting as a test.
J. Morio Sakaguchi 7 mesi fa
parent
commit
02f05c961e
4 ha cambiato i file con 31 aggiunte e 7 eliminazioni
  1. 2 2
      platformio.ini
  2. 24 2
      src/ZuluSCSI_cdrom.cpp
  3. 2 2
      src/ZuluSCSI_config.h
  4. 3 1
      src/ZuluSCSI_disk.cpp

+ 2 - 2
platformio.ini

@@ -1,8 +1,8 @@
 ; PlatformIO Project Configuration File https://docs.platformio.org/page/projectconf.html
 
 [platformio]
-default_envs = ZuluSCSIv1_0, ZuluSCSIv1_0_mini, ZuluSCSIv1_1_plus, ZuluSCSI_RP2040, ZuluSCSI_RP2040_Audio, ZuluSCSI_Pico, ZuluSCSI_Pico_DaynaPORT, ZuluSCSI_Pico_2, ZuluSCSI_Pico_2_DaynaPORT, ZuluSCSI_Blaster
-
+;default_envs = ZuluSCSIv1_0, ZuluSCSIv1_0_mini, ZuluSCSIv1_1_plus, ZuluSCSI_RP2040, ZuluSCSI_RP2040_Audio, ZuluSCSI_Pico, ZuluSCSI_Pico_DaynaPORT, ZuluSCSI_Pico_2, ZuluSCSI_Pico_2_DaynaPORT, ZuluSCSI_Blaster
+default_envs = ZuluSCSI_RP2040
 [env]
 build_flags =
     -DBUILD_ENV=$PIOENV

+ 24 - 2
src/ZuluSCSI_cdrom.cpp

@@ -2019,9 +2019,31 @@ static void doReadSubchannel(bool time, bool subq, uint8_t parameter, uint8_t tr
 static bool doReadCapacity(uint32_t lba, uint8_t pmi)
 {
     image_config_t &img = *(image_config_t*)scsiDev.target->cfg;
-    uint32_t capacity = img.get_capacity_lba();
-    if (capacity > 0)
+
+    CUEParser parser;
+    if (!loadCueSheet(img, parser))
+    // uint32_t capacity = img.get_capacity_lba();
+    // if (capacity > 0)
+    {
+        // basic image, let the disk handler resolve
+        return false;
+    }
+
+    // find the last track on the disk
+    CUETrackInfo lasttrack = {0};
+    const CUETrackInfo *trackinfo;
+    uint64_t prev_capacity = 0;
+    while ((trackinfo = parser.next_track(prev_capacity)) != NULL)
+    {
+        lasttrack = *trackinfo;
+        cdromSelectBinFileForTrack(img, trackinfo);
+        prev_capacity = img.file.size();
+    }
+
+    uint32_t capacity = 0;
+    if (lasttrack.track_number != 0)
     {
+        capacity = getLeadOutLBA(&lasttrack);
         capacity--; // shift to last addressable LBA
         if (pmi && lba && lba > capacity)
         {

+ 2 - 2
src/ZuluSCSI_config.h

@@ -27,8 +27,8 @@
 #include <ZuluSCSI_platform_config.h>
 
 // Use variables for version number
-#define FW_VER_NUM      "25.04.01"
-#define FW_VER_SUFFIX   "release"
+#define FW_VER_NUM      "25.04.08"
+#define FW_VER_SUFFIX   "dev"
 
 #define DEF_STRINGFY(DEF) STRINGFY(DEF)
 #define STRINGFY(STR) #STR

+ 3 - 1
src/ZuluSCSI_disk.cpp

@@ -1560,6 +1560,9 @@ static void doReadCapacity()
         scsiDev.data[7] = bytesPerSector;
         scsiDev.dataLen = 8;
         scsiDev.phase = DATA_IN;
+
+        // \todo get rid of me
+        dbgmsg("doReadCapacity - disk.cpp highest block: ", highestBlock, " bytes per sector: ", bytesPerSector);
     }
     else
     {
@@ -1629,7 +1632,6 @@ int doTestUnitReady()
 static void doSeek(uint32_t lba)
 {
     image_config_t &img = *(image_config_t*)scsiDev.target->cfg;
-    uint32_t bytesPerSector = scsiDev.target->liveCfg.bytesPerSector;
     uint32_t capacity = img.get_capacity_lba();
 
     if (lba >= capacity)