GuruROM v6
The GuruROM is a third party ROM upgrade written by Ralph Babel (a long term contractor for GVP) providing a replacement driver & software for GVP Series II SCSI interfaces and the Commodore A2091/A590 SCSI interfaces. The driver provides improved performance, compatibility, and transfer speeds, bug fixes, work arounds for bugs in the 33C93A family, and overall better support for modern SCSI devices. This includes the GVP 68030/68040 Combo/G-Force accelerator products, and also the GVP A1208 trapdoor module. For both the GVP and C= noted cards, it addresses the limitations of 24-bit Zorro II DMA in the A3000, A4000, and on all other 32-bit accelerators which place 32-bit memory at addresses >16MB on their cards.
The driver is sold as a kit; a ROM in an adapter. Three* versions of the adapter have been produced. The first two versions were two controller-specific adapters with a 32K (27C256) EPROM - one for GVP boards, one for C= boards. The latest version supports both controllers with one adapter. It has a jumper to select the matching adapter image from the 64K (27C512) EPROM, and is loosely referred to as the omni-adapter. All adapters have a custom logic GAL to permit the driver code (32K in approximate size) to be read into the system within a board-provided 16K address space.
* - An updated, cost-reduced "The Final GuruROM" module is in the process of being generated. It will be identical in system function and driver version to the 'Omni' version of the adapter made available in the ~201x period.
Driver - Significant Version Notes:
Pre-v6.11
- Supports SCSI I & II Async & Sync negotiated command sets.
- Fully Supports Disconnect/Reconnect (DC/RC) for controller +2 or more SCSI device configurations.
- Has workarounds for all known 33C93A revision bugs (versions -03 to -08).
- Supports driver-based buffered DMA copy-up by the CPU (no filesystem-based DMA Mask limiter required) to >16MB address ranges.
- Fully compatible with the C= HD_SCSI_CMD/SCSI Direct command structure.
- Robust support tools, including non-standard 68K accelerator cache support, per-unit DC/RC toggle, DMA limiter/transfer control, and enhanced removable media support.
- Will fall back to Polled I/O if no DMA-capable memory for the card(s) it is driving is available for a given data transfer.
v6.11
- Adds support for the TD_64 API, allowing newer file systems which support >4GB SCSI partitioning to address larger disk media via this new 64-bit API.
v6.12-13 - Undocumented
- Work was done between Ralph Babel and Speedgeek toward the features present in v6.14.
v6.14
- Existing adapter owners may burn this version to EPROM and use on their older adapters, if desired.
- Support for the 33C93A 14MHz clock hacks for the C= A2091/A590 controllers.
- Ralph makes this version available on his website to download and program into ROM/EPROM.
v6.16
- Overall identical to v6.14.
- Has additional native support defaults for A2091/A590 14Mhz DMAC hacks, which are uncommon.
- The at-boot-time command query for Sync compatibility checks changes (see ID Jumpers below, is more agressive/less safe).
- This is the current release version on the current combined (Omni) adapter.
The driver name is omniscsi.device, and the version reports v1.x (v1.16 for the current version). This is due to the code being designed as a combination high and low level driver, in which only one layer's version is reported to the OS.
Known issues/intended features:
1) Physically, the adapter(s) may not clear the shielding plate within the A590. It may require modification or removal of that plate.
2) The A2091/A590 by default drive the 33C93A at 7Mhz. The driver expects this. A jumper/DIP switch must be set to indicate a 14Mhz 33C93A SCSI chip clocking modification has been done to the C= SCSI controllers. An undocumented (by C=) 3-pin jumper mod applies to the A2091 (J201) to provide 14MHz 33C93A clock. A more intricate trace cut and jumper wires are needed on the A590 to synthesize the 14Mhz clock and connect to the 33C93A. In contrast, most GVP boards provide a 3-pin jumper for 14Mhz 33C93A clocking, and many are already set for 14Mhz operation if there has been a 3.14+ or 4.x FastROM present.
3) A3000/A4000 Operation - Zorro II DMA to ChipRAM is default disabled when a 68030 (or below) is NOT detected in these systems. This is due to potential bugs which may manifest depending on the Super Buster revision and/or the presence of some older revision A3640 and/or other 68040/68060 accelerator cards. The GVPSCSICtrl tool in the GuruROM support tools can be called to enable ChipDMA for testing/override. It can be called during system startup to enable it if there are no problems found during testing.
4) All FastRAM in the system which is located in the large AutoConfig Zorro II expansion range ($200000-9FFFFF, if present) must support DMA with these controllers and GuruROM. The GuruROM does not overcome this limitation.
5) On all systems with a non-GVP 68020-68060 32-bit CPU and 32-bit RAM which is mapped >16MB (including A3000/A4000) - Some 16-bit FastRAM, which is 24-bit DMA compatible, and preferably on the card (if GVP HC8/HD8), is highly suggested for best performance. The driver will default to use ChipRAM (except in situations as noted above), or fall back to Polled I/O as a last resort.
6) Proper SCSI termination (at the 2x most distant points of the SCSI bus cable) becomes very important with the potentially higher transfer rates of Sync SCSI negotiation. A SCSI bus includes all internal and external cabling segments.
7) Disconnect/Reconnect (DC/RC) and Synchronous SCSI (Sync) - One or both of these features are typically disabled in the RDB (boot block) of many systems by the default partition/disk prep software. Tools are provided to manually enable these features with a target device to test, and which can also be added to your startup-sequence once testing confirms stable operation. Additional tools can modify boot block settings to always enable these features, but take care: Use permement settings with care as they may present problems if the disk media is moved or transferred to another system or controller.
8) It may be desirable to disable data caching to the Zorro II 8M space (ref: see #5 above) with a 68040 or 68060 CPU if that memory is 16-bit. A recently discovered (2021) oddity of Zorro II bus behavior testing with these more advanced CPUs found performance hits (50% or more) and possible bus lockups when they attempt multple burst accesses to this slower (and narrower) memory. Since 16-bit FastRAM is only used as a last-resort system memory resource, and (otherwise) for DMA I/O buffering, mapping this memory region as non-cached by the MMU is highly suggested. See the MuLibs documetnation for more info.
HDToolBox from Amiga OS 3.1.4 or later is suggested to handle making large disk partitions (>2GB) and large media (>4GB) with FFS, and when using alternate filesystems. It does not have the option to enable Sync in the boot block. It is suggested to use the GuruROM support tools to enable Sync manually with a target device to test before updating the boot block permenantly with the provided rdbCtrl tool. On existing systems, the DC/RC boot block flag may be turned off by other prep tools, but can be re-enabled with individual SCSI devcies with the provided RDBCtrl support tool. Note: The setting of DC/RC only matters when there is more than just the controller and one SCSI device.
Important C= and GVP Controller Jumpers (related to GuruROM):
A2091:
JP5-2 - Open for 7Mhz 33C93A clock (i.e. unmodified J201)
JP5-2 - Short for 14Mhz 33C93A clock (i.e. J201 trace cut, pins 1 & 3 joined)
A590:
DIP 1-3 Open for 7Mhz
DIP 1-3 Closed for 14Mhz (33C93A's clock input rework on PCB is required)
GVP Series II SCSI on HC/HC8/HD8 and Accelerators
Series II SCSI only and Series II SCSI+RAM (HC8/HD8): J2 - 33C93A Clock: 1/2 - 7Mhz; 2/3 - 14Mhz (expected/default). Note: Boards without ID jumpers cannot support a 7MHz setting.
ID Jumpers:
- J10/J11 - If the ID jumper block is present (few early HC's, most HC8's), J10 or J11 shorted indicates 7Mhz 33C93A operation. Otherwise, 14Mhz operation is assumed in all other cases (open/default). Some early revision cards had problems with J10 being detected, so J11 was also used.
- J12** (shorted) toggles the sending of Sync negotation sequence defined in the SCSI protocol. Some older and poorly designed SCSI devices could hang on the Sync query. On omniscsi.device <=v6.14, it doesn't send the Sync query by default (globally override with this jumper on, or per ID with a GVPSCSICtrl option used during boot). On v6.16 the command is sent by default (enabled), and the feature is disabled with the jumper on. In either case, it is toggled by device ID with GVPSCSICtrl if used during boot. The boot block of the target device (if set to enable) can also override the controller jumper setting (for that device). The GVPSCSICtrl tool will override any current device setting at any time.
Note: Earlier use of J12 described in the GuruROM manual was to Ignore RDB. This changed with v6.14.
Note: The older GuruROM manual's mention of "Ignore RDB" jumpers on some boards was actually intended to either 1) disable the GuruROM from being seen altogether (no driver, typical of J4 on Zorro II cards), or to ignore the SCSI interface (no SCSI Device, J14 on many accelerators), but still execute the code to map the 32-bit RAM on Combo22/33 and G-Force accelerators into the Amiga OS.
GVP G-Force and A530 Accelerators with PGA-package type CPUs are default set for 14Mhz clocking of the 33C93A and require no changes.
68030 G-Force (MACH130 chip): Default settings of CN14 and CN15 (if present) are for 14Mhz
68040 G-Force: Default settings of CN11 and CN12 are properly set for 14Mhz
The original Combo-030 boards (22/33MHz) with surface-mount CPU/FPU, always clock the SCSI chip at 7Mhz. There is no option to select, nor modify, that clock design. Use of GuruROM on these boards yields no performance improvement (i.e. - Sync is not possible) over the v3.x/v4.x FastROM. Unless some other GuruROM feature is needed, you probably want to stick with the v3.14 or later gvpscsi.device driver.
A1208 - The default settings for the 33C93A are for 14Mhz clock.
Historical: The first versions of GuruROM were produced for the GVP Series II ROM socket, and the adapter only supported that product line. Later, an adapter was built to support the A2091/A590 (replacing the C= 6.x and 7.0 ROMs). It used a 27C256 EPROM. SpeedGeek later built the Omni adapter with the C=/GVP jumper and the required EPROM type became the 27C512. An unauthorized 3rd party cloned one of the earlier adapters during a period of adapter unavailability. That variation consumes ~2x the space of the legitimate adapters.
Ralph Babel maintains the latest general release version of the ROM, v6.14 as of writing, on his
website and it may be programed and used on the official adapters. The v6.16 sold on the Omni adapter has no functional changes that affect curent v6.14 performance. It only has a default settings change (more agressive) with regard to boot-time Sync SCSI negotation, but that behavior may have problems if a device on the bus at boot time doesn't like the (SCSI standard) device query for Sync. If the device on the SCSI bus does not like the Sync negotation command, you may want to revert back to 6.14 which takes a more conservative approach if there is no jumper avalable to negate the driver's behavior on your host adapter.
** - Action item: Need to confirm that J12 (GVP HC8) and the DIP/jumper on the C= units toggle the default Sync behavior. Jumpers may not be available on a few revisions of the HC Series II SCSI models, so default global behavior cannot be altered for problem devices. Switch back to 6.14 (safer query) if this occurrs.
OmniSCSICtrl Option Notes (a WIP)
OmniSCSICtrl Command Line Options: (from a Hex Dump)
OmniSCSICtrl -? = Output tool syntax and version:
Usage: OmniScsiCtrl <unit> RESCAN | WAIT | [NO]DISCONNECT | [A]SYNCHRONOUS | [NO]PARITY
<Unit> Typically takes a SCSI target in [BLU] format:
- B = Board, first board is 0, and the digit can be omitted if only one board involved and no LUNs involved.
- L = SCSI LUN, value is default 0 if no LUNs, can then be omited if only one board is involved.
- U = SCSI ID, the 0-6 SCSI address of the target of the command.
OmniSCSICtrl ? = Version Information (example):
OmniScsiCtrl 1.6 (27.12.96) © 1996 Ralph Babel
disconnect - Enabes SCSI reselection with target SCSI ID. No effect if only one SCSI device + controller on a SCSI bus.
disconnect? - Status of SCSI reselection flag of te target SCSI ID
nodisconnect - Disables SCSI reselection with the target SCSI ID.
synchronous - Enables Synchronous SCSI negotiation with the target SCSI ID (if supported).
synchronous? - Status of SCSI Synchronous negotation flag of the target SCSI ID
asynchronous - Disables Synchronous SCSI negotiation with the target SCSI ID (if previosuly enabled).
parity - Enables SCSI bus parity with the target SCSI ID (if supported, normaly not applicable).
parity? - Status of SCSI bus parity with the target SCSI ID.
noparity - Disables SCSI bus parity with the target SCSI ID.
poll - Enables the removable media DiskChange detection task with the target (if target device = disk + removable media ).
poll? - Status of removable media DiskChange detection task with the target SCSI ID.
nopoll - Enables the removable media DiskChange detection task with the target SCSI ID.
scsicmdint - No documentation.
scsicmdint? - No documentation.
noscsicmdint - No documentation.
scsicmdkludges - Implements some SCSI command kludges for some (very) old and broken devices/firmware at the SCSI ID specified.
scsicmdkludges? - Status of the SCSI command kludges with the target SCSI ID.
noscsicmdkludges - Disables SCSI command kludges if previosuly enabled with the target SCSI ID.
lock - Locks the media of a removable media device (if supported) at the target SCSI ID.
lock? - State of the media lock with the target SCSI ID.
unlock -Unlocks the media of a removable media device (if supported, if possible) at the target SCSI ID.
requesters - Enables Intuition requesters (if previsouly set to disabled, default is enabed)
requesters? - Status of the Intuition requesters enabled flag.
norequesters - Disables Intuition requesters (Note: The requester default result, Retry/Cancel, not known).
opendevice - Will make the driver behave in the default mode, as per SCSI spec (vs A2091/A590 behavior) in some cases.
opendevice? - State of the OpenDevice() functional behavor mode.
noopendevice - Will make the driver act more like the A2091 OpenDevice() behavior in some cases.
rescan - Rescan the SCSI bus once for slow-to-become-ready devices (removables, tapes, etc). This may also AutoMount valid (ready) media.
mount - Causes a filestem media mount if the device and media is ready but previosuly unmounted.
wait - delay function, wait for the device to become ready.
stopunit - Sends a SCSI motor stop command to the target SCSI ID.
startunit - Semds a SCSI motor start command to the target SCSI ID.
insite - Apply kludges for the Insite Floptical Removable Media device.
eject - Sends a SCSI media Eject command to the target SCSI ID.
load - Sends a SCSI media Load command to the target SCSI ID.
debug - Enables kprintf() debug messages. Takes a #, values currently not documented.
debug? - Displays the level/value of debug messages currently in effect.
amaxkludge - Enable A-Max-IV kludges (use before entering A-MAX environment)
Example:
OmniSCSICtrl 104 disconnect - enables SCSI reselection on the device connected to board 1, Lun 0, SCSI ID 4
OmniSCSICtrl 2 nodisconnect - disables SCSI reselection on the device connected to board 0, Lun 0, SCSI ID 2
GVPSCSICtrl Option Notes (a WIP, and the tool provided with the GuruROM only)
GVPSCSICtrl Command Line Options: (From a hex dump):
SerPatch ? -? 68kcache serialpatch serialname chunksize quiet dma nodma chipdma nochipdma dmarange dma? debug debug? picassokludge
SerPatch - Same function and syntax as the AmiNet GVPPatch for gvpscsi.device. Slices up DMA transfers into smaller pieces so that the native 680x0 has more windows to service other interrupts, particularly that of serial.device, but can be tied to any .device in the system. Takes effect when the OpenDevice() count of the target .device is >0. Parameters: serialname (.device) and chunksize (minimum 512-byte and ^2 values above only) apply. The use of values of 2048, 4096, & 8196 are typical, testing needed to find best value. Performance will go down with smaller numbers and CPU use will increase as a result.
68KCache - Kludge/feature which toggles an ICD AdSpeed or Supra28 68000 Accelerator briefly off and on to invaliate the non-standard cache on these units around the times when DMA transfers may change memory contents and result in a dirty data cache.
GvpScsiCtrl -? - Print common command line options.
GvpScsiCtrl quiet - Believed to suppress text output for some options when used in scripting to determine fail/success result.
GvpScsiCtrl dma - toggles the DMA mask range to the default for the detected environment.
GvpScsiCtrl nodma - Disables all DMA, falling back to Polled I/O.
GvpScsiCtrl chipdma - Adds the ChipRAM range (0-0x001FFFFF) to the DMA mask (if not currently enabled, discussed above)
GvpScsiCtrl nochipdma - Toggles the ChipRAM range (0-0x001FFFFF) of the internal DMA mask Off.
GvpScsiCtrl dma? - reports the curret hex memory range of the DMA Mask filter, or reports DMA Disabled.
GvpScsictrl dmarange 0x200000 0x3fffff - (example) limits DMA to the first 2MB of Zorro II FastRAM space.
GvpScsictrl picassokludge - makes an adjustment in the driver to prevent artifacts from showing in some Picasso RTG cards during transfers.
GvpScsiCtrl Debug # - Send debug messages to kprintf().
- 3 - Known to dump SCSI command messages to kprintf() and therefore out the Amiga serial port (9600 baud, 8-N-1)
- Other #'s not yet determined.
GvpScsiCtrl Debug? - report current debug # output setting.
Note: The GVP A2000 Combo030 22/33MHz Rev 4, and the A2000 G-Force030 (PGA CPU/Mach130) boards support on-board DMA to the first 16MB of 'high' memory immmediately above 16MB. The A2000 G-Force040 supports on-board DMA to the full extended 16MB or 64MB onboard expansion memory range.