I've been having a quick look at this, but getting a bit confused. I've re-instated the original *BYE logic, which issues a SCSI (1b) stop command to all 4 drives, starting with drive 3.Now let's see if I can get *BYE to function correctly. For this command, I don't want to generate the 'Drive not found' error for a non existent drive. Instead, it should just skip over that drive, and move on to try stopping the next drive.
Now, the SCSI stop command is almost identical to the SCSI start command. In fact it's the same 1b command but with a parameter set to 0 for stop or 1 for start. The SCSI start command is used by *MOUNT, and I had to modify the SCSI select logic slightly, so that ADFS wouldn't wait forever for BSY response from a drive controller that doesn't exist. Instead it generates a 'Not ready' error. That all works fine.
Now that I've re-introduced the *BYE logic, it starts by issuing a SCSI stop to non existent drive 3. As soon as it does this, the logic picks up that a drive controller doesn't exist at that location, and bails out with the 'Not ready' error, before the *BYE logic gets a chance to stop the spinning drives 0 & 1. This is what I expected, and is what I need to sort.
Where I'm getting a bit confused is how the original logic gets around this. The original logic also generates a 'Not ready' error when trying to issue a SCSI start (via *MOUNT) to a non existent LUN; albeit this gets done in a different place in the logic:
...but for some reason, issuing a *BYE command, which begins by sending a SCSI stop to drive 3 doesn't generate the 'Not found' error, and therefore allows the *BYE command to also issue a SCSI stop to the remaining drives 2, 1 & 0 (some of which may also not exist).With the Adaptec controller, if I try to mount drive 2 or drive 3, the Adaptec LED blinks and then I get a "Not found" error more or less straight away.
Further head scratching required.
Statistics: Posted by KenLowe — Fri Feb 14, 2025 11:12 pm