PDP-11 RX11 Support (and PC11 Fixes)
PDPjs now supports the RX11 controller in combination with RX01 disk drives (named DX0 and DX1), providing read/write/boot support for 250Kb RX01 diskettes.
The RX11 is a somewhat unusual disk controller: unlike the RK11 and RL11 disk controllers, all I/O must be programmed; there is no DMA support. It also does something odd on initialization: it automatically reads the FIRST sector of the SECOND track (Track 1, Sector 1) of any diskette in drive DX0.
This makes RX11 bootstrap code very simple, because it doesn't have to issue a READ command. All it has to do issue an EMPTY command to "empty" the contents of the controller's sector buffer into memory and execute it. However, I'm concerned that the RX11 documentation doesn't enumerate all the conditions that trigger this initialization process.
For example, if you turn your PDP-11 on, enter the RX11 bootstrap code, and then insert a diskette into drive DX0, does the controller re-initialize itself? Since the RX11 has a special "Initialize" bit in its Command and Status register, it would seem trivial for the bootstrap code to re-initialize the controller, but DEC's RX11 bootstrap doesn't do that.
That question is moot for PDPjs, because whenever the DriveController component finishes loading a diskette, it notifies the RX11 component, and if the drive is DX0, it re-initializes the controller, triggering the automatic read of Track 1, Sector 1.
In other news, the Paper Tape Controller (PC11) can now be used to read external files into a machine. For example, in RT-11, the command "COPY PC: FILE.DAT" will copy the entire contents of any file currently loaded in the Paper Tape Reader. Eventually, support will also be added for the Paper Tape Punch device, so that you can also "COPY FILE.DAT PC:" and then save the resulting data as an external file on your host computer. Until then, the PC11 component is technically just a PR11 (Paper Tape Reader).