From: Michael McMaster Date: Mon, 4 May 2015 10:20:53 +0000 (+1000) Subject: Reduce size of mode pages for SCSI1 hosts X-Git-Tag: v4.02.04~5 X-Git-Url: http://git.codesrc.com/gitweb.cgi?a=commitdiff_plain;h=cb79ac4e9a58a49c6abfc529c1e6adc3eff4117d;p=SCSI2SD-V6.git Reduce size of mode pages for SCSI1 hosts --- diff --git a/readme.txt b/readme.txt index 11c43482..67c16f33 100644 --- a/readme.txt +++ b/readme.txt @@ -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 diff --git a/software/SCSI2SD/src/mode.c b/software/SCSI2SD/src/mode.c index 4ed790f4..b234549e 100755 --- a/software/SCSI2SD/src/mode.c +++ b/software/SCSI2SD/src/mode.c @@ -51,6 +51,18 @@ static const uint8 ReadWriteErrorRecoveryPage[] = 0x00, 0x00 // Recovery time limit 0 (use default)*/ }; +static const uint8 ReadWriteErrorRecoveryPage_SCSI1[] = +{ +0x01, // Page code +0x06, // Page length +0x26, +0x00, // Don't try recovery algorithm during reads +0x00, // Correction span 0 +0x00, // Head offset count 0, +0x00, // Data strobe offset count 0, +0xFF // Reserved +}; + static const uint8 DisconnectReconnectPage[] = { 0x02, // Page code @@ -65,6 +77,18 @@ static const uint8 DisconnectReconnectPage[] = 0x00, 0x00, 0x00 // Reserved }; +static const uint8 DisconnectReconnectPage_SCSI1[] = +{ +0x02, // Page code +0x0A, // Page length +0, // Buffer full ratio +0, // Buffer empty ratio +0x00, 10, // Bus inactivity limit, 100us increments. Allow 1ms. +0x00, 0x00, // Disconnect time limit +0x00, 0x00, // Connect time limit +0x00, 0x00 // Maximum burst size +}; + static const uint8 FormatDevicePage[] = { 0x03 | 0x80, // Page code | PS (persist) bit. @@ -99,6 +123,21 @@ SCSI_HEADS_PER_CYLINDER, // Number of heads 0x00, 0x00 // Reserved }; +static const uint8 RigidDiskDriveGeometry_SCSI1[] = +{ +0x04, // Page code +0x12, // Page length +0xFF, 0xFF, 0xFF, // Number of cylinders +SCSI_HEADS_PER_CYLINDER, // Number of heads +0xFF, 0xFF, 0xFF, // Starting cylinder-write precompensation +0xFF, 0xFF, 0xFF, // Starting cylinder-reduced write current +0x00, 0x1, // Drive step rate (units of 100ns) +0x00, 0x00, 0x00, // Landing zone cylinder +0x00, // RPL +0x00, // Rotational offset +0x00 // Reserved +}; + static const uint8 CachingPage[] = { 0x08, // Page Code @@ -239,15 +278,31 @@ static void doModeSense( if (pageCode == 0x01 || pageCode == 0x3F) { pageFound = 1; - pageIn(pc, idx, ReadWriteErrorRecoveryPage, sizeof(ReadWriteErrorRecoveryPage)); - idx += sizeof(ReadWriteErrorRecoveryPage); + if ((scsiDev.compatMode >= COMPAT_SCSI2)) + { + pageIn(pc, idx, ReadWriteErrorRecoveryPage, sizeof(ReadWriteErrorRecoveryPage)); + idx += sizeof(ReadWriteErrorRecoveryPage); + } + else + { + pageIn(pc, idx, ReadWriteErrorRecoveryPage_SCSI1, sizeof(ReadWriteErrorRecoveryPage_SCSI1)); + idx += sizeof(ReadWriteErrorRecoveryPage_SCSI1); + } } if (pageCode == 0x02 || pageCode == 0x3F) { pageFound = 1; - pageIn(pc, idx, DisconnectReconnectPage, sizeof(DisconnectReconnectPage)); - idx += sizeof(DisconnectReconnectPage); + if ((scsiDev.compatMode >= COMPAT_SCSI2)) + { + pageIn(pc, idx, DisconnectReconnectPage, sizeof(DisconnectReconnectPage)); + idx += sizeof(DisconnectReconnectPage); + } + else + { + pageIn(pc, idx, DisconnectReconnectPage_SCSI1, sizeof(DisconnectReconnectPage_SCSI1)); + idx += sizeof(DisconnectReconnectPage_SCSI1); + } } if (pageCode == 0x03 || pageCode == 0x3F) @@ -274,7 +329,14 @@ static void doModeSense( if (pageCode == 0x04 || pageCode == 0x3F) { pageFound = 1; - pageIn(pc, idx, RigidDiskDriveGeometry, sizeof(RigidDiskDriveGeometry)); + if ((scsiDev.compatMode >= COMPAT_SCSI2)) + { + pageIn(pc, idx, RigidDiskDriveGeometry, sizeof(RigidDiskDriveGeometry)); + } + else + { + pageIn(pc, idx, RigidDiskDriveGeometry_SCSI1, sizeof(RigidDiskDriveGeometry_SCSI1)); + } if (pc != 0x01) { @@ -299,7 +361,14 @@ static void doModeSense( memcpy(&scsiDev.data[idx+9], &scsiDev.data[idx+2], 3); } - idx += sizeof(RigidDiskDriveGeometry); + if ((scsiDev.compatMode >= COMPAT_SCSI2)) + { + idx += sizeof(RigidDiskDriveGeometry); + } + else + { + idx += sizeof(RigidDiskDriveGeometry_SCSI1); + } } // DON'T output the following pages for SCSI1 hosts. They get upset when diff --git a/software/scsi2sd-util/SCSI2SD_Bootloader.cc b/software/scsi2sd-util/SCSI2SD_Bootloader.cc index a22f4175..1e4ab90a 100644 --- a/software/scsi2sd-util/SCSI2SD_Bootloader.cc +++ b/software/scsi2sd-util/SCSI2SD_Bootloader.cc @@ -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; }