Reduce size of mode pages for SCSI1 hosts

This commit is contained in:
Michael McMaster 2015-05-04 20:20:53 +10:00
parent 1b14acad1a
commit cb79ac4e9a
3 changed files with 96 additions and 17 deletions

View 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

View File

@ -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

View 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;
}