diff --git a/devices/pdp11/README.md b/devices/pdp11/README.md index 4d74858df..40588a503 100644 --- a/devices/pdp11/README.md +++ b/devices/pdp11/README.md @@ -12,7 +12,7 @@ PDP-11 Device Configurations * [Control Panels](panel/) * Serial Interface for Display Terminals [(DL11)](dl11/) * High-Speed Paper Tape Reader/Punch [(PC11)](pc11/) -* Disk Controllers ([RK11](rk11/), [RL11](rl11/)) +* Disk Controllers ([RK11](rk11/), [RL11](rl11/), [RX11](rx11/)) * [ROM Images](rom/) Sample machines include a diff --git a/devices/pdp11/rx11/README.md b/devices/pdp11/rx11/README.md index 72b1062cd..54946e1f0 100644 --- a/devices/pdp11/rx11/README.md +++ b/devices/pdp11/rx11/README.md @@ -17,9 +17,9 @@ bytes, for a total capacity of 250Kb (256,256 bytes). manufacturers, they overstated the capacity by treating "K" as 1000 rather than 1024, which was its traditional meaning within the computer industry at the time. DEC's own processor handbooks, for example, invariably used "K" to mean 1024. -> However, since 1998, standards organizations have been pushing the term "kibibyte" (abbreviated KiB) to mean 1024 bytes, +> Since 1998, standards organizations have been pushing the term "kibibyte" (abbreviated KiB) to mean 1024 bytes, in an effort to redefine the "K" in "Kilobyte" (Kb) as 1000, but that doesn't change what the term commonly meant prior -to 1998 (the marketing departments of disk drive manufacturers notwithstanding). +to 1998. Machines containing the [RX11 Component](/modules/pdp11/lib/rx11.js) include: @@ -43,24 +43,133 @@ used to control the device, such as choosing which disks should be "auto-mounted ```xml - Disk Drive Controls - - - - - - - - - - - - - - Load - Boot - - - + Disk Drive Controls + + + + + + + + + + + + + + Load + Boot + + + ``` + +Loading the RX11 Bootstrap +-------------------------- + +From the [RT-11 v4.0 Installation Manual (March 1981)](/pubs/dec/pdp11/rt11/), p. E-9: + + The procedure to deposit the RX11 disk bootstrap loader in memory depends on the type of processor you have. + If your computer is a PDP-11V/03, PDP-11/03, or LSI-11, see the PDP-11/03 user's manual for instructions. + + 1. Set the ENABLE/HALT switch to HALT. + + 2. Set the first address, 010000, in the switch register (see Table E-3). + + 3. Press the LOAD ADDR switch. + + 4. Set the contents for the first address (from Table E-3) in the switch register. + + 5. Lift the DEP switch. The computer automatically advances to the next address. + + 6. Set the contents for the next address (from Table E-3) in the switch register. + + 7. Lift the DEP switch. + + 8. Repeat steps 6 and 7 until you have deposited all the instructions. + + Now verify that you deposited the bootstrap program properly. + + 1. Set the first address, 001000, in the switch register. + + 2. Press the LOAD ADDR switch. + + 3. Press the EXAM switch to display the contents of that address in the data register. + + 4. Compare the number in the data register with the value for that address in Table E-3. + + 5. If the values are the same, press EXAM again to display the contents of the next address. + If the values are not the same, repeat the entire procedure for depositing the bootstrap. + Verify the contents of all the addresses in this way. If any instruction is incorrect, + repeat the entire deposit procedure. + + Once you have correctly deposited the bootstrap in memory, start the computer as follows: + + 1. Set the starting address, 001000, in the switch register. + + 2. Press the LOAD ADDR switch. + + 3. Set the ENABLE/HALT switch to ENABLE. + + 4. Press the START switch. + +Table E-3: RX-11 Bootstrap Loader +--------------------------------- + + Location Contents + + 001000 005000 + 001002 012701 + 001004 177170 + 001006 105711 + 001010 001776 + 001012 012711 + 001014 000003 + 001016 005711 + 001020 001776 + 001022 100405 + 001024 105711 + 001026 100004 + 001030 116120 + 001032 000002 + 001034 000770 + 001036 000000 + 001040 005000 + 001042 000110 + +Loading the RX-11 Bootstrap Loader +---------------------------------- + +Any PDP-11 machine using built-in PCjs Debugger makes it easy to enter the bootstrap code above. Paste +the following commands into the Debugger's command buffer: + + ew 1000 005000 012701 177170 105711 001776 012711 000003 005711 001776; + ew 1022 100405 105711 100004 116120 000002 000770 000000 005000 000110; + r pc 1000 + +You can then review (eg, disassemble) the bootstrap code: + + >> u 1000 1044 + 001000: 005000 CLR R0 + 001002: 012701 177170 MOV #177170,R1 + 001006: 105711 TSTB @R1 + 001010: 001776 BEQ 001006 + 001012: 012711 000003 MOV #3,@R1 + 001016: 005711 TST @R1 + 001020: 001776 BEQ 001016 + 001022: 100405 BMI 001036 + 001024: 105711 TSTB @R1 + 001026: 100004 BPL 001040 + 001030: 116120 000002 MOVB 2(R1),(R0)+ + 001034: 000770 BR 001016 + 001036: 000000 HALT + 001040: 005000 CLR R0 + 001042: 000110 JMP @R0 + +Last but not least, make sure you have successfully loaded an RX01 diskette image into drive DX0. Then execute the +bootstrap code with the Debugger's "g" command. + +Of course, if the machine also includes the RX11 Boot control, then all you *really* need to is select an +RX01 diskette, click "Load", wait for the diskette image to be successfully loaded (i.e., downloaded) and then click +"Boot". diff --git a/modules/pdp11/lib/computer.js b/modules/pdp11/lib/computer.js index 86af22cdc..da8fb3a27 100644 --- a/modules/pdp11/lib/computer.js +++ b/modules/pdp11/lib/computer.js @@ -1410,7 +1410,7 @@ class ComputerPDP11 extends Component { this.fReload = false; } else { this.reset(); - if (this.cpu) this.cpu.autoStart(); + if (this.cpu && !this.dbg) this.cpu.autoStart(); } } diff --git a/modules/pdp11/lib/cpustate.js b/modules/pdp11/lib/cpustate.js index 4e06fc608..a5a169a78 100644 --- a/modules/pdp11/lib/cpustate.js +++ b/modules/pdp11/lib/cpustate.js @@ -588,11 +588,13 @@ class CPUStatePDP11 extends CPUPDP11 { this.regsGen[0] = bUnit || 0; for (var i = 1; i <= 5; i++) this.regsGen[i] = 0; this.regsGen[6] = addrStack || 0o2000; - if (!this.flags.powered) { - this.flags.autoStart = true; - } - else if (!this.flags.running) { - this.startCPU(); + if (!this.dbg) { + if (!this.flags.powered) { + this.flags.autoStart = true; + } + else if (!this.flags.running) { + this.startCPU(); + } } } else { diff --git a/modules/pdp11/lib/drive.js b/modules/pdp11/lib/drive.js index c0fbdde3f..ce4a74c6b 100644 --- a/modules/pdp11/lib/drive.js +++ b/modules/pdp11/lib/drive.js @@ -920,6 +920,11 @@ class DriveController extends Component { drive.sDiskName = sDiskName; drive.sDiskPath = sDiskPath; + /* + * Inform the controller implementation (eg, RX11) of the disk change. + */ + this.notifyLoad(drive.iDrive); + /* * Adding local disk image names to the disk list seems like a nice idea, but it's too confusing, * because then it looks like the "Mount" button should be able to (re)load them, and that can NEVER @@ -1123,6 +1128,11 @@ class DriveController extends Component { this.sDiskSource = DriveController.SOURCE.NONE; this.displayDisk(iDrive); } + + /* + * Inform the controller implementation (eg, RX11) of the disk removal. + */ + this.notifyUnload(iDrive); } } @@ -1223,6 +1233,30 @@ class DriveController extends Component { } } + /** + * notifyLoad(iDrive) + * + * Placeholder for subclasses. Called whenever DriveController has loaded a new disk into the specified drive. + * + * @this {RX11} + * @param {number} iDrive + */ + notifyLoad(iDrive) + { + } + + /** + * notifyUnload(iDrive) + * + * Placeholder for subclasses. Called whenever DriveController has unloaded a disk from the specified drive. + * + * @this {RX11} + * @param {number} iDrive + */ + notifyUnload(iDrive) + { + } + /** * readData(drive, iCylinder, iHead, iSector, nWords, addr, inc, fCheck, done) * diff --git a/modules/pdp11/lib/rx11.js b/modules/pdp11/lib/rx11.js index bea362096..d626b7a8c 100644 --- a/modules/pdp11/lib/rx11.js +++ b/modules/pdp11/lib/rx11.js @@ -143,6 +143,34 @@ class RX11 extends DriveController { ]; } + /** + * notifyLoad(iDrive) + * + * Called whenever DriveController has loaded a new disk into the specified drive. + * + * We're interested in this so that whenever a disk change occurs for drive 0, we can automatically + * refill the sector buffer with the data from sector 1 from track 1. + * + * @this {RX11} + * @param {number} iDrive + */ + notifyLoad(iDrive) + { + if (iDrive == 0) this.initController(); + } + + /** + * notifyUnload(iDrive) + * + * Called whenever DriveController has unloaded a disk from the specified drive. + * + * @this {RX11} + * @param {number} iDrive + */ + notifyUnload(iDrive) + { + } + /** * processCommand() * diff --git a/pubs/dec/pdp11/README.md b/pubs/dec/pdp11/README.md index 99a6ea0b6..7e468f1ad 100644 --- a/pubs/dec/pdp11/README.md +++ b/pubs/dec/pdp11/README.md @@ -4,7 +4,7 @@ title: DEC PDP-11 Publications and Papers permalink: /pubs/dec/pdp11/ --- -DEC PDP-11 Publications +PDP-11 Hardware Publications --- This page summarizes PDP-11 documentation that was useful in creating [PDPjs](/modules/pdp11/). In most cases, @@ -29,6 +29,35 @@ directory. If a PDF was not searchable, it was "OCR'ed" before being archived b - [PDP-11/70 Handbook (1976)](http://archive.pcjs.org/pubs/dec/pdp11/1170/PDP1170_Handbook_1976.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/1170/PDP-11_70_Handbook_1977-78.pdf)] - [PDP-11/70 Handbook (1979)](http://archive.pcjs.org/pubs/dec/pdp11/1170/PDP1170_Handbook_1979.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/handbooks/PDP11_Handbook1979.pdf)] +[PDP-11 KW11](kw11/) + +- [KW11-L Line Time Clock Manual (Apr 1973)](http://archive.pcjs.org/pubs/dec/pdp11/kw11/KW11L_Apr73.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/unibus/DEC-11-HKWB-D_KW11L_Apr73.pdf)] +- [KW11-L Line Time Clock Manual (Jul 1974)](http://archive.pcjs.org/pubs/dec/pdp11/kw11/KW11L_Jul74.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/1140/EK-KW11L_TM-002_KW11-L_Line_Time_Clock_Manual_Jul74.pdf)] + +[PDP-11 M9312](m9312/) + +- [M9312 Bootstrap/Terminator Module Technical Manual (Oct 1979)](http://archive.pcjs.org/pubs/dec/pdp11/m9312/M9312_Bootstrap_Terminator_Module_Technical_Manual.pdf) + +[PDP-11 RK11](rk11/) + +- [CXRKAG0 DEC/X11 RK11 MODULE (Sep 1978)](http://archive.pcjs.org/pubs/dec/pdp11/rk11/AC-E676G-MC_CXRKAG0-RK11_Sep78.pdf) +- [RK11-D and RK11-E Moving Head Disk Drive Controller Manual (Feb 1975)](http://archive.pcjs.org/pubs/dec/pdp11/rk11/EK-RK11D-MM-002.pdf) + +[PDP-11 RL11](rl11/) + +- [RL01/RL02 User Guide (Sep 1981)](http://archive.pcjs.org/pubs/dec/pdp11/rl11/EK-RL012-UG-005_Sep81.pdf) + +[PDP-11 RX11](rx11/) + +- [RX8/RX11 floppy disk system user's manual (Nov 1976)](http://archive.pcjs.org/pubs/dec/pdp11/rx11/EK-RX01-OP-001_RX11UM_Nov76.pdf) + +[Other PDP-11 Peripherals](other/) + +- [PDP-11 Peripherals Handbook (1976)](http://archive.pcjs.org/pubs/dec/pdp11/other/PDP11_Peripherals_Handbook_1976.pdf) + +PDP-11 Software Publications +--- + [PDP-11 BASIC](basic/) - [PDP-11 BASIC Programming Manual (1970)](http://archive.pcjs.org/pubs/dec/pdp11/basic/BASIC_Programming_Manual_Dec70.pdf) @@ -53,40 +82,22 @@ directory. If a PDF was not searchable, it was "OCR'ed" before being archived b - [PDP-11 DIAGNOSTIC HANDBOOK (1988)](http://archive.pcjs.org/pubs/dec/pdp11/diags/PDP11_DiagnosticHandbook_1988.pdf) - [Notes for XXDP+ and XXDP V2 Operating Systems (Feb 1993)](http://archive.pcjs.org/pubs/dec/pdp11/diags/XXDP_Notes_Feb93.pdf) -[PDP-11 KW11](kw11/) - -- [KW11-L Line Time Clock Manual (Apr 1973)](http://archive.pcjs.org/pubs/dec/pdp11/kw11/KW11L_Apr73.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/unibus/DEC-11-HKWB-D_KW11L_Apr73.pdf)] -- [KW11-L Line Time Clock Manual (Jul 1974)](http://archive.pcjs.org/pubs/dec/pdp11/kw11/KW11L_Jul74.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/1140/EK-KW11L_TM-002_KW11-L_Line_Time_Clock_Manual_Jul74.pdf)] - -[PDP-11 M9312](m9312/) - -- [M9312 Bootstrap/Terminator Module Technical Manual (Oct 1979)](http://archive.pcjs.org/pubs/dec/pdp11/m9312/M9312_Bootstrap_Terminator_Module_Technical_Manual.pdf) - -[PDP-11 MACRO-11](macro11/) +[MACRO-11](macro11/) - [MACRO-11 Reference Manual (Dec 1975)](http://archive.pcjs.org/pubs/dec/pdp11/macro11/MACRO11_Dec75.pdf) - [MACRO-11 Language Reference Manual (Mar 1983)](http://archive.pcjs.org/pubs/dec/pdp11/macro11/MACRO11_Mar83.pdf) -[PDP-11 RK11](rk11/) +[RT-11](rt11/) -- [CXRKAG0 DEC/X11 RK11 MODULE (Sep 1978)](http://archive.pcjs.org/pubs/dec/pdp11/rk11/AC-E676G-MC_CXRKAG0-RK11_Sep78.pdf) -- [RK11-D and RK11-E Moving Head Disk Drive Controller Manual (Feb 1975)](http://archive.pcjs.org/pubs/dec/pdp11/rk11/EK-RK11D-MM-002.pdf) +- [RT-11 v4.0 Installation and System Generation Guide (Mar 1980)](http://archive.pcjs.org/pubs/dec/pdp11/rt11/AA-H376A-TC_RT-11_V4.0_Installation_Manual_Mar81.pdf) -[PDP-11 RL11](rl11/) - -- [RL01/RL02 User Guide (Sep 1981)](http://archive.pcjs.org/pubs/dec/pdp11/rl11/EK-RL012-UG-005_Sep81.pdf) - -[PDP-11 RX11](rx11/) - -- [RX8/RX11 floppy disk system user's manual (Nov 1976)](http://archive.pcjs.org/pubs/dec/pdp11/rx11/EK-RX01-OP-001_RX11UM_Nov76.pdf) - ---- - -[Assorted PDP-11 Handbooks](other/) +[Other PDP-11 Software](other/) - [LISTING OF PDP-11 ABSOLUTE LOADER (June 1975)](http://archive.pcjs.org/pubs/dec/pdp11/other/DEC-11-UABLA_ABSOLUTE_LOADER_LISTING_Jun75.pdf) - [PDP-11 Paper Tape Software Handbook (1976)](http://archive.pcjs.org/pubs/dec/pdp11/other/PDP11_Paper_Tape_Software_Handbook_1976.pdf) -- [PDP-11 Peripherals Handbook (1976)](http://archive.pcjs.org/pubs/dec/pdp11/other/PDP11_Peripherals_Handbook_1976.pdf) - [PDP-11 Software Handbook (1978)](http://archive.pcjs.org/pubs/dec/pdp11/other/PDP11_Software_Handbook_1978.pdf) +PDP-11 Research Papers +--- + [Assorted PDP-11 Papers](papers/) diff --git a/pubs/dec/pdp11/rt11/README.md b/pubs/dec/pdp11/rt11/README.md new file mode 100644 index 000000000..93a6b2548 --- /dev/null +++ b/pubs/dec/pdp11/rt11/README.md @@ -0,0 +1,12 @@ +--- +layout: page +title: DEC RT-11 Publications +permalink: /pubs/dec/pdp11/rt11/ +--- + +DEC RT-11 Publications +--- + +### RT-11 v4.0 + +- [RT-11 Installation and System Generation Guide (Mar 1980)](http://archive.pcjs.org/pubs/dec/pdp11/rt11/AA-H376A-TC_RT-11_V4.0_Installation_Manual_Mar81.pdf)