Procházet zdrojové kódy

Move Apple default drive IDs to shared code.

The drive IDs will now be enabled on all platforms when
Quirks = 1 is specified in config file. Previously only
the hardware DIP switch on ZuluSCSI V1 affected drive ID.
Petteri Aimonen před 3 roky
rodič
revize
fd520d3717

+ 1 - 46
lib/ZuluSCSI_platform_GD32F205/ZuluSCSI_platform.cpp

@@ -474,58 +474,13 @@ void azplatform_boot_to_main_firmware()
 
 void azplatform_config_hook(S2S_TargetCfg *config)
 {
+    // Enable Apple quirks by dip switch
     if (g_enable_apple_quirks)
     {
         if (config->quirks == S2S_CFG_QUIRKS_NONE)
         {
             config->quirks = S2S_CFG_QUIRKS_APPLE;
         }
-
-        if (config->quirks == S2S_CFG_QUIRKS_APPLE)
-        {
-            static const char *driveinfo_fixed[4] = APPLE_DRIVEINFO_FIXED;
-            static const char *driveinfo_removable[4] = APPLE_DRIVEINFO_REMOVABLE;
-            static const char *driveinfo_optical[4] = APPLE_DRIVEINFO_OPTICAL;
-            static const char *driveinfo_floppy[4] = APPLE_DRIVEINFO_FLOPPY;
-            static const char *driveinfo_magopt[4] = APPLE_DRIVEINFO_MAGOPT;
-            static const char *driveinfo_tape[4] = APPLE_DRIVEINFO_TAPE;
-            const char **driveinfo = NULL;
-
-            switch (config->deviceType)
-            {
-                case S2S_CFG_FIXED:         driveinfo = driveinfo_fixed; break;
-                case S2S_CFG_REMOVEABLE:    driveinfo = driveinfo_removable; break;
-                case S2S_CFG_OPTICAL:       driveinfo = driveinfo_optical; break;
-                case S2S_CFG_FLOPPY_14MB:   driveinfo = driveinfo_floppy; break;
-                case S2S_CFG_MO:            driveinfo = driveinfo_magopt; break;
-                case S2S_CFG_SEQUENTIAL:    driveinfo = driveinfo_tape; break;
-                default:                    driveinfo = driveinfo_fixed; break;
-            }
-
-            if (config->vendor[0] == '\0')
-            {
-                memset(config->vendor, 0, sizeof(config->vendor));
-                strncpy(config->vendor, driveinfo[0], sizeof(config->vendor));
-            }
-
-            if (config->prodId[0] == '\0')
-            {
-                memset(config->prodId, 0, sizeof(config->prodId));
-                strncpy(config->prodId, driveinfo[1], sizeof(config->prodId));
-            }
-
-            if (config->revision[0] == '\0')
-            {
-                memset(config->revision, 0, sizeof(config->revision));
-                strncpy(config->revision, driveinfo[2], sizeof(config->revision));
-            }
-
-            if (config->serial[0] == '\0')
-            {
-                memset(config->serial, 0, sizeof(config->serial));
-                strncpy(config->serial, driveinfo[3], sizeof(config->serial));
-            }
-        }
     }
 }
 

+ 0 - 6
lib/ZuluSCSI_platform_GD32F205/ZuluSCSI_platform.h

@@ -89,12 +89,6 @@ void azplatform_boot_to_main_firmware();
 // When DIPSW1 is on, Apple quirks are enabled by default.
 void azplatform_config_hook(S2S_TargetCfg *config);
 #define AZPLATFORM_CONFIG_HOOK(cfg) azplatform_config_hook(cfg)
-#define APPLE_DRIVEINFO_FIXED     {"SEAGATE",  "ST225N",            PLATFORM_REVISION, "1.0"}
-#define APPLE_DRIVEINFO_REMOVABLE {"ZULUSCSI", "APPLE_REMOVABLE",   PLATFORM_REVISION, ""}
-#define APPLE_DRIVEINFO_OPTICAL   {"MATSHITA", "CD-ROM CR-8004A",   PLATFORM_REVISION, "2.0a"}
-#define APPLE_DRIVEINFO_FLOPPY    {"ZULUSCSI", "APPLE_FLOPPY",      PLATFORM_REVISION, ""}
-#define APPLE_DRIVEINFO_MAGOPT    {"ZULUSCSI", "APPLE_MO",          PLATFORM_REVISION, ""}
-#define APPLE_DRIVEINFO_TAPE      {"ZULUSCSI", "APPLE_TAPE",        PLATFORM_REVISION, ""}
 
 // Write a single SCSI pin.
 // Example use: SCSI_OUT(ATN, 1) sets SCSI_ATN to low (active) state.

+ 8 - 0
src/ZuluSCSI_config.h

@@ -52,6 +52,14 @@
 #define DRIVEINFO_MAGOPT    {"ZULUSCSI", "MO_DRIVE",  PLATFORM_REVISION, ""}
 #define DRIVEINFO_TAPE      {"ZULUSCSI", "TAPE",      PLATFORM_REVISION, ""}
 
+// Default SCSI drive information when Apple quirks are enabled
+#define APPLE_DRIVEINFO_FIXED     {"SEAGATE",  "ST225N",            PLATFORM_REVISION, "1.0"}
+#define APPLE_DRIVEINFO_REMOVABLE {"ZULUSCSI", "APPLE_REMOVABLE",   PLATFORM_REVISION, ""}
+#define APPLE_DRIVEINFO_OPTICAL   {"MATSHITA", "CD-ROM CR-8004A",   PLATFORM_REVISION, "2.0a"}
+#define APPLE_DRIVEINFO_FLOPPY    {"ZULUSCSI", "APPLE_FLOPPY",      PLATFORM_REVISION, ""}
+#define APPLE_DRIVEINFO_MAGOPT    {"ZULUSCSI", "APPLE_MO",          PLATFORM_REVISION, ""}
+#define APPLE_DRIVEINFO_TAPE      {"ZULUSCSI", "APPLE_TAPE",        PLATFORM_REVISION, ""}
+
 // Default delay for SCSI phases.
 // Can be adjusted in ini file
 #define DEFAULT_SCSI_DELAY_US 10

+ 39 - 13
src/ZuluSCSI_disk.cpp

@@ -301,23 +301,49 @@ static void setDefaultDriveInfo(int target_idx)
 {
     image_config_t &img = g_DiskImages[target_idx];
 
-    static const char *driveinfo_fixed[4] = DRIVEINFO_FIXED;
+    static const char *driveinfo_fixed[4]     = DRIVEINFO_FIXED;
     static const char *driveinfo_removable[4] = DRIVEINFO_REMOVABLE;
-    static const char *driveinfo_optical[4] = DRIVEINFO_OPTICAL;
-    static const char *driveinfo_floppy[4] = DRIVEINFO_FLOPPY;
-    static const char *driveinfo_magopt[4] = DRIVEINFO_MAGOPT;
-    static const char *driveinfo_tape[4] = DRIVEINFO_TAPE;
+    static const char *driveinfo_optical[4]   = DRIVEINFO_OPTICAL;
+    static const char *driveinfo_floppy[4]    = DRIVEINFO_FLOPPY;
+    static const char *driveinfo_magopt[4]    = DRIVEINFO_MAGOPT;
+    static const char *driveinfo_tape[4]      = DRIVEINFO_TAPE;
+
+    static const char *apl_driveinfo_fixed[4]     = APPLE_DRIVEINFO_FIXED;
+    static const char *apl_driveinfo_removable[4] = APPLE_DRIVEINFO_REMOVABLE;
+    static const char *apl_driveinfo_optical[4]   = APPLE_DRIVEINFO_OPTICAL;
+    static const char *apl_driveinfo_floppy[4]    = APPLE_DRIVEINFO_FLOPPY;
+    static const char *apl_driveinfo_magopt[4]    = APPLE_DRIVEINFO_MAGOPT;
+    static const char *apl_driveinfo_tape[4]      = APPLE_DRIVEINFO_TAPE;
+
     const char **driveinfo = NULL;
 
-    switch (img.deviceType)
+    if (img.quirks == S2S_CFG_QUIRKS_APPLE)
+    {
+        // Use default drive IDs that are recognized by Apple machines
+        switch (img.deviceType)
+        {
+            case S2S_CFG_FIXED:         driveinfo = apl_driveinfo_fixed; break;
+            case S2S_CFG_REMOVEABLE:    driveinfo = apl_driveinfo_removable; break;
+            case S2S_CFG_OPTICAL:       driveinfo = apl_driveinfo_optical; break;
+            case S2S_CFG_FLOPPY_14MB:   driveinfo = apl_driveinfo_floppy; break;
+            case S2S_CFG_MO:            driveinfo = apl_driveinfo_magopt; break;
+            case S2S_CFG_SEQUENTIAL:    driveinfo = apl_driveinfo_tape; break;
+            default:                    driveinfo = apl_driveinfo_fixed; break;
+        }
+    }
+    else
     {
-        case S2S_CFG_FIXED:         driveinfo = driveinfo_fixed; break;
-        case S2S_CFG_REMOVEABLE:    driveinfo = driveinfo_removable; break;
-        case S2S_CFG_OPTICAL:       driveinfo = driveinfo_optical; break;
-        case S2S_CFG_FLOPPY_14MB:   driveinfo = driveinfo_floppy; break;
-        case S2S_CFG_MO:            driveinfo = driveinfo_magopt; break;
-        case S2S_CFG_SEQUENTIAL:    driveinfo = driveinfo_tape; break;
-        default:                    driveinfo = driveinfo_fixed; break;
+        // Generic IDs
+        switch (img.deviceType)
+        {
+            case S2S_CFG_FIXED:         driveinfo = driveinfo_fixed; break;
+            case S2S_CFG_REMOVEABLE:    driveinfo = driveinfo_removable; break;
+            case S2S_CFG_OPTICAL:       driveinfo = driveinfo_optical; break;
+            case S2S_CFG_FLOPPY_14MB:   driveinfo = driveinfo_floppy; break;
+            case S2S_CFG_MO:            driveinfo = driveinfo_magopt; break;
+            case S2S_CFG_SEQUENTIAL:    driveinfo = driveinfo_tape; break;
+            default:                    driveinfo = driveinfo_fixed; break;
+        }
     }
 
     if (img.vendor[0] == '\0')