Michael Robinson
Member
Greetings!
I have a PDP-11/23 and PDP-11/34 both running RT-11. Both machines have Emulex SCSI controllers (a QBUS UC07 and UNIBUS UC18 respectively) that are connected to SCSI2SD drives. The SCSI2SD drives each emulate four units, which are visible to RT-11 as DU0: through DU3:. I have an RT-11 bootable system volumes on DU0: and on DU2:. (Actually, DU2: on both machines contains Ian Hammond's excellent RUST/SJ system, which is compatible enough with RT-11 that this doesn't matter for my question below.)
The Emulex "UC07 and UC08 Intelligent Host Adapter Technical Manual" (see https://archive.org/details/bitsavers_emulexUC07_11161673/mode/2up, for instance) on page 130 (Section 7.5) gives a quick way to boot from DU0: on a PDP-11 that has ODT, e.g. my 11/23. The procedure is also easily adapted to the 11/34's front panel and/or boot ROM monitor.
Basically, you do the following:
This works pretty well, though you must wait for the MSCP reset timeout (that starts once you deposit the 40000) before you issue the start command at the end. This timeout is not documented in the Emulex manual, but the actual boot block load happens after the timeout is completed. Completion is easily verified by watching the drive's activity light or by examining the contents of address 000000. I've also found that the register setup isn't necessary for RT-11.
The above procedure loads the boot block from DU0: via DMA to address 000000. It should be noted that this is "not really" a bootstrap, since really what's happening is that you're issuing a (Emulex-specific?) command to the controller, requesting that it load the boot block into address 000000 via a DMA action. The CPU is otherwise idle while this happens.
My question is this: Is there a way to modify the procedure to load the boot block from some other unit, say DU2:?
I am well aware that I can use a boot ROM or key-in a bootstrap for the other units. That's not what I'm after here, since I am wondering about the Emulex controller's own capabilities
I do have some insight. Purely on a lark, I wondered if the first 0 that gets deposited might be a unit number, and so I tried
and was quite surprised that this did in fact boot from DU2:.
However, the next time I tried this, the machine booted from DU0:.
From my continued experimentation with this, I've found the following:
Thanks!
Michael
I have a PDP-11/23 and PDP-11/34 both running RT-11. Both machines have Emulex SCSI controllers (a QBUS UC07 and UNIBUS UC18 respectively) that are connected to SCSI2SD drives. The SCSI2SD drives each emulate four units, which are visible to RT-11 as DU0: through DU3:. I have an RT-11 bootable system volumes on DU0: and on DU2:. (Actually, DU2: on both machines contains Ian Hammond's excellent RUST/SJ system, which is compatible enough with RT-11 that this doesn't matter for my question below.)
The Emulex "UC07 and UC08 Intelligent Host Adapter Technical Manual" (see https://archive.org/details/bitsavers_emulexUC07_11161673/mode/2up, for instance) on page 130 (Section 7.5) gives a quick way to boot from DU0: on a PDP-11 that has ODT, e.g. my 11/23. The procedure is also easily adapted to the 11/34's front panel and/or boot ROM monitor.
Basically, you do the following:
Code:
@772150/000000 0
@772152/005400 30003
@772152/000400 40000
@RS/304
@R0/0
@R1/772150
@0G
This works pretty well, though you must wait for the MSCP reset timeout (that starts once you deposit the 40000) before you issue the start command at the end. This timeout is not documented in the Emulex manual, but the actual boot block load happens after the timeout is completed. Completion is easily verified by watching the drive's activity light or by examining the contents of address 000000. I've also found that the register setup isn't necessary for RT-11.
The above procedure loads the boot block from DU0: via DMA to address 000000. It should be noted that this is "not really" a bootstrap, since really what's happening is that you're issuing a (Emulex-specific?) command to the controller, requesting that it load the boot block into address 000000 via a DMA action. The CPU is otherwise idle while this happens.
My question is this: Is there a way to modify the procedure to load the boot block from some other unit, say DU2:?
I am well aware that I can use a boot ROM or key-in a bootstrap for the other units. That's not what I'm after here, since I am wondering about the Emulex controller's own capabilities
I do have some insight. Purely on a lark, I wondered if the first 0 that gets deposited might be a unit number, and so I tried
Code:
@772150/000000 2
@772152/005400 30003
@772152/000400 40000
! WAIT 10 seconds or so...!
@0G
However, the next time I tried this, the machine booted from DU0:.
From my continued experimentation with this, I've found the following:
- On the 11/23 using the UC07, it looks like DU2: boots with the above procedure about 25% of the time, and DU0: boots the other 75% of the time. Sometimes what's loaded into address 000000 (and following) is corrupted!
- This never works on the 11/34, which is using the UNIBUS version of the controller, a UC18.
- Both machines work flawlessly once booted, even under extreme system load, so I know that both the hardware and RT-11 software setup is solid. My question is therefore isolated to the Emulex controller's boot-block-loading shortcut.
Thanks!
Michael