WD33C93 and compatible SCSI controllers

Western Digital WD33C92

DIP-48 or QSM-44 (quad surface mount)

Western Digital WD33C93

DIP-40 or QSM-44 (quad surface mount)
Synchronous SCSI: Maximum 4 MB/sec
Known versions:
  WD33C93-PL 00-02 microcode ?09? not software-readable
Known production: 8849


Western Digital WD33C93A

DIP-40 or PLCC-44 (quad surface mount)
Synchronous SCSI: Maximum 5 MB/sec
Known versions:
  WD33C93A-PL 00-03 - Rev C - Microcode ?06? not software-readable
  WD33C93A-PL 00-04 - Rev D - Microcode ?06? not software-readable
  WD33C93A-PL 00-06 - Rev E - Microcode 08
  WD33C93A-PL 00-08 - Rev F - Microcode 09 - final production
Known production: 8809 9040 9018 9109 9205 9209


AMD AM33C93A

DIP-40 or 44-pin chip carrier
Synchronous SCSI: Maximum 5 MB/sec
Compatible with WD33C93A; probably the same mask. Most likely provided as a second-source for WD33C93A.
Known versions:
  AM33C93A 1048EXA - Microcode 08
  AM33C93A 1608EXA - Microcode 08
Known production: 8950 9009 9022


Western Digital WD33C93B

DIP-40 or 44-pin chip carrier
Synchronous SCSI-2: Maximum 10 MB/sec
Backward-compatible with WD33C93A and WD33C93.
Known versions:
  WD33C93B-PL 00-02 - Rev E - Microcode 0d
Known production: ?1025?


Adaptec AIC-33C93B

DIP-40 or 44-pin chip carrier
Synchronous SCSI-2: Maximum 10 MB/sec
Compatible with WD33C93B; probably the same mask. Most likely provided as a second-source for WD33C93B. It uses the same Microcode 0d as the WD33C93B.


Re-labeled parts

It has become quite common when buying ICs online that vendors will sand, paint, and relabel ICs in order to provide multiple parts which look new. This has unfortunately led to less scrupulous vendors re-labeling mostly-compatible or even broken parts as others to extract more money from customers.
This part labeled AM33C93A is actually a re-marked WD33C93B. One tell is the 1998 next to the registration mark. Another is that the bottom of the package doesn't have marking consistent with the AM33C93A parts as seen above (it's blank).


Use in the Amiga

The A590, A2091, and A3000 onboard SCSI are compatible with all of the above SCSI chips. The WD33C93 is not recommended for any of them as there are many bugs in that chip. The WD33C93A 00-04 is the minimum, but it still has lockup bugs with some SCSI targets, including CD-ROM and tape drives. WD33C93A 00-06 is less common, but seems to have less issues with SCSI lockups. WD33C93A 00-08 is generally recommended for the Amiga. AM33C93A is a good substitute, though it having the same firmware as the WD33C93A 00-06, it may not be as good as the WD33C93A 00-08. Documentation of differences between WD and AMD chips is not available on the Internet. The best of the series is the WD33C93B, but the Amiga scsi.device does not support the new SCSI-2 10 MB/sec mode of that chip. Even if it did, you would need active SCSI termination, so I can understand why they never chose to support it. Too bad as that would probably push the A3000 SCSI up to about 6 MB/sec. It wouldn't make a difference in the case of A590 and A2091. You are limited there by the Zorro II bus speed limit of 3.5 MB/sec.

Overclocking and SCSI

In the Amiga, the un-modified 7.0 ROM scsi.device in the A590 and A2091 sets the WD33C93A to divide the 7 MHz input clock by 2 (see MHz note below). This results in a maximum SCSI clock of ~3.5 MHz. There is a 14 MHz MOD for these boards which allows the SCSI controller to run faster by doubling the input clock. The scsi driver in ROM needs to change to accommodate this, since dividing by 2 would otherwise then run the SCSI-1 bus at ~7 MHz. The change sets the divisor to be 3, creating a maximum SCSI clock of ~4.7 MB/sec. This is a nice boost, and gets these devices to about 3.5 MB/sec on the Zorro bus (Zorro II maximum).
Certain versions of the WD33C93A and AM33C93A can run at 20 MHz. With even more hardware changes and a different ROM, you can do this Mod to run the SCSI bus at a full 5 MHz. I don't personally recommend this because the upside is still capped by the Zorro bus. The following article explains how to modify the A590 for both 14 MHz and 20 MHz: A590 20Mhz mod

MHz
The 7 MHz and 14 MHz terms above are simplifications of the actual clocks in Amiga computers. The 7 MHz clock is actually 7.16 MHz (NTSC) and 7.09 MHz (PAL). The 14 MHz clock is actually 14.32 MHz (NTSC) and 14.18 MHz (PAL).

Undocumented stuff

The WD33C93B firmware implements a few undocumented commands which are not present in the WD33C93A. Most of these set the SCSI Status register to the issued command code or'd with 0x10.
WDC_CMDCommandDescription
0x41UnknownSCSI STATUS is 0x51. No other register is changed.
0x42Test PatternSCSI STATUS is 0xA2. Sets alternating 0x55 and 0xAA test pattern across most registers. It probably implements a register test of some sort.
0x43Stay BusyUnknown actual usage -- the SBIC seems to remain stuck in a busy state and does not respond to further commands. All registers read back as 0xFF (probably timeout).
0x44Register ReadSCSI STATUS is 0x54. Register to read must be set beforehand in CDB1 (0x03). Value read is stored in CDB2 (0x04) by microcode.
0x45Register WriteSCSI STATUS is 0x55. Register to write must be set beforehand in CDB1 (0x03). Value to write must be set beforehand in CDB2 (0x04).
0x46UnknownSCSI STATUS is 0x56. CDB1 is set to 0x00. No other register is changed.
0x47UnknownSCSI STATUS is 0x57. No other register is changed.
0x48UnknownSCSI STATUS is 0x58. CDB1 is set to 0x00. No other register is changed.

WD33C93B internal registers

In addition to the standard registers present in the WD33C93A, the WD33C93B also provides backdoor access to some internal registers through the 0x44 Register Read command and 0x45 Register Write command.
RegisterValueDescription
0x20-0x3FShadows registers 0x00-0x1F
0x40-0x4F0xFFUnknown
0x500x00Live SCSI data pin values D0-D7
0x510x00Unknown
0x520xF0Unknown
0x530xFFSCSI control pins (Bit 0=IO, Bit 1=CD, Bit 2=MSG), negative logic
0x540xFD or 0xF8Unknown
0x550xF0 or 0xF3SCSI control pins and other state (Bit 2 is REQ). Unknown if ATN, BSY, RST, or ACK are reported in any register.
0x560x00 or 0x80Unknown
0x570x54Unknown
0x580x44Unknown
0x59-0x790xFFUnknown
0x7A0x04 or 0x06Unknown
0x7B0xAA or 0x00Unknown
0x7C0x11 or 0x01Unknown
0x7D0x80Unknown
0x7E0x7EUnknown
0x7F0x00Unknown

Other links