Reduce size of mode pages for SCSI1 hosts
authorMichael McMaster <michael@codesrc.com>
Mon, 4 May 2015 10:20:53 +0000 (20:20 +1000)
committerMichael McMaster <michael@codesrc.com>
Mon, 4 May 2015 10:20:53 +0000 (20:20 +1000)
readme.txt
software/SCSI2SD/src/mode.c
software/scsi2sd-util/SCSI2SD_Bootloader.cc

index 11c4348..67c16f3 100644 (file)
@@ -28,10 +28,12 @@ Technical Specifications
 
 SCSI Interface
        SCSI-2 Narrow 8-bit 50-pin connector. Supports asynchronous transfers only.
-SD Card Interface
-       Standard SDSC (1GB maximum size)
-       SDHC, SDXC
+Micro SD Card Interface
+       Standard microSDSC (1GB maximum size)
+       microSDHC, microSDXC
        Communication is via the SPI protocol at 25MHz.
+USB Interface (firmware updates and config)
+       USB 2.0 micro-B
 Power
        5V via standard molex drive connector.
 Dimensions
@@ -69,6 +71,9 @@ Compatibility
     PDP-11/73 running RSX11M+ V4.6
     Microvax 3100 Model 80 running VMS 7.3 (needs patch against v3.5.2 firmware)
     Amiga 500+ with GVP A530
+    Commodore Amiga 500 KS 1.3 with Oktagon 508 SCSI-2 controller
+    Amiga 2000 (B2000 rev 6.4 ECS) with DKB RapidFire SCSI 1 card
+    Amiga 4000 equipped with CyberStorm PPC using 68pin adapter.
     Atari TT030 System V
     Atari MEGA STE
         needs J3 TERMPWR jumper
@@ -80,12 +85,16 @@ Compatibility
     Compaq XP-1000 Professional Workstation
         Alpha 21264 CPU, 667MHz, with a QLogic SCSI controller in a PCI slot 
     SCSI-based Macintosh Powerbooks (2.5" SCSI2SD)
-        Also reported to work on Thinkpad 860 running Win NT 4.0 PowerPC. 
-       Data General MV/2500DC running AOS/VS
-               Vendor: MICROoP
-               Product: 1578-15       UP
-               Revision: DG02
-               Device-type modifier: 0x4c
+        Also reported to work on Thinkpad 860 running Win NT 4.0 PowerPC.
+    AT&T 3B2/600
+    Sun 2/120 Workstation (Unit Attention disabled)
+    Data General MV/2500DC running AOS/VS
+        Vendor: MICROoP
+        Product: 1578-15       UP
+        Revision: DG02
+        Device-type modifier: 0x4c
+    Applix 1616
+    IMS MM/1
 
 Samplers
 
@@ -106,6 +115,7 @@ Samplers
         Requires TERMPWR jumper. The manual shows the pin25 of the DB25 connector is "not connected".
         May require scsi2sd-config --apple flag 
     Yamaha A5000, A3000, EX5, EX5R 
+    EMU ESI4000
 
 Other
 
index 4ed790f..b234549 100755 (executable)
@@ -51,6 +51,18 @@ static const uint8 ReadWriteErrorRecoveryPage[] =
 0x00, 0x00 // Recovery time limit 0 (use default)*/\r
 };\r
 \r
+static const uint8 ReadWriteErrorRecoveryPage_SCSI1[] =\r
+{\r
+0x01, // Page code\r
+0x06, // Page length\r
+0x26,\r
+0x00, // Don't try recovery algorithm during reads\r
+0x00, // Correction span 0\r
+0x00, // Head offset count 0,\r
+0x00, // Data strobe offset count 0,\r
+0xFF // Reserved\r
+};\r
+\r
 static const uint8 DisconnectReconnectPage[] =\r
 {\r
 0x02, // Page code\r
@@ -65,6 +77,18 @@ static const uint8 DisconnectReconnectPage[] =
 0x00, 0x00, 0x00 // Reserved\r
 };\r
 \r
+static const uint8 DisconnectReconnectPage_SCSI1[] =\r
+{\r
+0x02, // Page code\r
+0x0A, // Page length\r
+0, // Buffer full ratio\r
+0, // Buffer empty ratio\r
+0x00, 10, // Bus inactivity limit, 100us increments. Allow 1ms.\r
+0x00, 0x00, // Disconnect time limit\r
+0x00, 0x00, // Connect time limit\r
+0x00, 0x00 // Maximum burst size\r
+};\r
+\r
 static const uint8 FormatDevicePage[] =\r
 {\r
 0x03 | 0x80, // Page code | PS (persist) bit.\r
@@ -99,6 +123,21 @@ SCSI_HEADS_PER_CYLINDER, // Number of heads
 0x00, 0x00 // Reserved\r
 };\r
 \r
+static const uint8 RigidDiskDriveGeometry_SCSI1[] =\r
+{\r
+0x04, // Page code\r
+0x12, // Page length\r
+0xFF, 0xFF, 0xFF, // Number of cylinders\r
+SCSI_HEADS_PER_CYLINDER, // Number of heads\r
+0xFF, 0xFF, 0xFF, // Starting cylinder-write precompensation\r
+0xFF, 0xFF, 0xFF, // Starting cylinder-reduced write current\r
+0x00, 0x1, // Drive step rate (units of 100ns)\r
+0x00, 0x00, 0x00, // Landing zone cylinder\r
+0x00, // RPL\r
+0x00, // Rotational offset\r
+0x00 // Reserved\r
+};\r
+\r
 static const uint8 CachingPage[] =\r
 {\r
 0x08, // Page Code\r
@@ -239,15 +278,31 @@ static void doModeSense(
        if (pageCode == 0x01 || pageCode == 0x3F)\r
        {\r
                pageFound = 1;\r
-               pageIn(pc, idx, ReadWriteErrorRecoveryPage, sizeof(ReadWriteErrorRecoveryPage));\r
-               idx += sizeof(ReadWriteErrorRecoveryPage);\r
+               if ((scsiDev.compatMode >= COMPAT_SCSI2))\r
+               {\r
+                       pageIn(pc, idx, ReadWriteErrorRecoveryPage, sizeof(ReadWriteErrorRecoveryPage));\r
+                       idx += sizeof(ReadWriteErrorRecoveryPage);\r
+               }\r
+               else\r
+               {\r
+                       pageIn(pc, idx, ReadWriteErrorRecoveryPage_SCSI1, sizeof(ReadWriteErrorRecoveryPage_SCSI1));\r
+                       idx += sizeof(ReadWriteErrorRecoveryPage_SCSI1);\r
+               }\r
        }\r
 \r
        if (pageCode == 0x02 || pageCode == 0x3F)\r
        {\r
                pageFound = 1;\r
-               pageIn(pc, idx, DisconnectReconnectPage, sizeof(DisconnectReconnectPage));\r
-               idx += sizeof(DisconnectReconnectPage);\r
+               if ((scsiDev.compatMode >= COMPAT_SCSI2))\r
+               {\r
+                       pageIn(pc, idx, DisconnectReconnectPage, sizeof(DisconnectReconnectPage));\r
+                       idx += sizeof(DisconnectReconnectPage);\r
+               }\r
+               else\r
+               {\r
+                       pageIn(pc, idx, DisconnectReconnectPage_SCSI1, sizeof(DisconnectReconnectPage_SCSI1));\r
+                       idx += sizeof(DisconnectReconnectPage_SCSI1);\r
+               }\r
        }\r
 \r
        if (pageCode == 0x03 || pageCode == 0x3F)\r
@@ -274,7 +329,14 @@ static void doModeSense(
        if (pageCode == 0x04 || pageCode == 0x3F)\r
        {\r
                pageFound = 1;\r
-               pageIn(pc, idx, RigidDiskDriveGeometry, sizeof(RigidDiskDriveGeometry));\r
+               if ((scsiDev.compatMode >= COMPAT_SCSI2))\r
+               {\r
+                       pageIn(pc, idx, RigidDiskDriveGeometry, sizeof(RigidDiskDriveGeometry));\r
+               }\r
+               else\r
+               {\r
+                       pageIn(pc, idx, RigidDiskDriveGeometry_SCSI1, sizeof(RigidDiskDriveGeometry_SCSI1));\r
+               }\r
 \r
                if (pc != 0x01)\r
                {\r
@@ -299,7 +361,14 @@ static void doModeSense(
                        memcpy(&scsiDev.data[idx+9], &scsiDev.data[idx+2], 3);\r
                }\r
 \r
-               idx += sizeof(RigidDiskDriveGeometry);\r
+               if ((scsiDev.compatMode >= COMPAT_SCSI2))\r
+               {\r
+                       idx += sizeof(RigidDiskDriveGeometry);\r
+               }\r
+               else\r
+               {\r
+                       idx += sizeof(RigidDiskDriveGeometry_SCSI1);\r
+               }\r
        }\r
 \r
        // DON'T output the following pages for SCSI1 hosts. They get upset when\r
index a22f417..1e4ab90 100644 (file)
@@ -168,8 +168,8 @@ Bootloader::getHWInfo() const
                info.firmwareName = "SCSI2SD-V3.cyacd";
                break;
        case 0x3002:
-               info.desc = "3.5\" SCSI2SD (yellow) or 2.5\" SCSI2SD for Apple Powerbook";
-               info.version = "V4.1/V4.2";
+               info.desc = "3.5\" SCSI2SD (yellow/red) or 2.5\" SCSI2SD for Apple Powerbook";
+               info.version = "V4.1/V4.2/V5.0";
                info.firmwareName = "SCSI2SD-V4.cyacd";
                break;
        }