From c92b1521f32107aeca0e495ee76d652d867d1a2b Mon Sep 17 00:00:00 2001 From: Jeff Parsons Date: Fri, 3 Feb 2017 16:19:14 -0800 Subject: [PATCH] Paper tape punch definitions, and publication updates --- apps/pdp11/tapes/README.md | 2 +- apps/pdp11/tapes/absloader/README.md | 4 +- devices/pdp11/pc11/README.md | 3 ++ modules/pdp11/lib/defines.js | 13 +++-- modules/pdp11/lib/pc11.js | 75 +++++++++++++++++++++++++--- pubs/dec/pdp11/README.md | 8 +-- pubs/dec/pdp11/diags/README.md | 1 + pubs/dec/pdp11/other/README.md | 1 + pubs/dec/pdp11/pc11/README.md | 14 ------ 9 files changed, 84 insertions(+), 37 deletions(-) delete mode 100644 pubs/dec/pdp11/pc11/README.md diff --git a/apps/pdp11/tapes/README.md b/apps/pdp11/tapes/README.md index 0f122ca69..89a333a1a 100644 --- a/apps/pdp11/tapes/README.md +++ b/apps/pdp11/tapes/README.md @@ -42,7 +42,7 @@ p. 155, "PAPER TAPE SOFTWARE", the following software was available on paper tap - [IOX](iox/) (PDP-11 Input/Output eXecutive) - [PDP-11 BASIC](basic/) (Beginners All-purpose Symbolic Instruction Code) -There was a separate DEC publication, [PDP-11 Paper Tape Software Handbook](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Paper_Tape_Software_Handbook.pdf), +There was a separate DEC publication, [PDP-11 Paper Tape Software Handbook](http://archive.pcjs.org/pubs/dec/pdp11/other/PDP11_Paper_Tape_Software_Handbook_1976.pdf), that described all of the above software in greater detail, and it included some programs that the 1971 Handbook listed under "Disk Operating System" instead of "Paper Tape System", such as: diff --git a/apps/pdp11/tapes/absloader/README.md b/apps/pdp11/tapes/absloader/README.md index e276baea8..7a57e315e 100644 --- a/apps/pdp11/tapes/absloader/README.md +++ b/apps/pdp11/tapes/absloader/README.md @@ -43,7 +43,7 @@ we know about the "Absolute Format": [Other sites](http://www.retrocmp.com/stories/dec-pc05-papertape/242-dec-pc05-working-with-paper-tapes) have referred to this tape format as the "Standard Absolute" format, but I've not found that terminology used in any DEC publication. In fact, I think that term may have arisen from a misreading of instructions -found in DEC manuals like the ["MEM EXER 16K" Diagnostics Manual](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Mem-Exer-16k_Feb78.pdf): +found in DEC manuals like the ["MEM EXER 16K" Diagnostics Manual](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-9045F-MC_CZQMCFO_MEM_EXER_16K_Feb78.pdf): Load the program using any standard absolute loader. @@ -54,5 +54,5 @@ for which a specific address has been selected, based on the amount of RAM prese PCjs has archived the following Absolute Loader resources: - [Absolute Loader](DEC-11-L2PC-PO.json) -- [LISTING OF PDP-11 ABSOLUTE LOADER (June 1975)](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Absolute_Loader_Listing_Jun75.pdf) +- [LISTING OF PDP-11 ABSOLUTE LOADER (June 1975)](http://archive.pcjs.org/pubs/dec/pdp11/other/DEC-11-UABLA_ABSOLUTE_LOADER_LISTING_Jun75.pdf) - "APPENDIX D: THE BOOTSTRAP AND ABSOLUTE LOADERS" from the [PDP-11 BASIC PROGRAMMING MANUAL (December 1970)](http://archive.pcjs.org/pubs/dec/pdp11/basic/BASIC_Programming_Manual_Dec70.pdf) diff --git a/devices/pdp11/pc11/README.md b/devices/pdp11/pc11/README.md index 1645d2f3a..38cc778e0 100644 --- a/devices/pdp11/pc11/README.md +++ b/devices/pdp11/pc11/README.md @@ -44,3 +44,6 @@ used to control the device, such as choosing which tape should be "loaded" into ``` + +For details about the PC11 hardware, we relied upon the [PDP-11 Peripherals Handbook (1976)](http://archive.pcjs.org/pubs/dec/pdp11/other/PDP11_Peripherals_Handbook_1976.pdf), +p. 4-376 (p. 408 of the PDF). diff --git a/modules/pdp11/lib/defines.js b/modules/pdp11/lib/defines.js index 20a80be43..96e7b8bc9 100644 --- a/modules/pdp11/lib/defines.js +++ b/modules/pdp11/lib/defines.js @@ -665,7 +665,7 @@ var PDP11 = { PVEC: 0o074, // punch vector PRS: { // 177550: PC11 (and PR11) Reader Status Register RE: 0x0001, // Reader Enable (W/O) - RIE: 0x0040, // Reader Interrupt Enable (allows the DONE and ERROR bits to trigger an interrupt) + IE: 0x0040, // Reader Interrupt Enable (allows the DONE and ERROR bits to trigger an interrupt) DONE: 0x0080, // Done (R/O) BUSY: 0x0800, // Busy (R/O) ERROR: 0x8000, // Error (R/O) @@ -678,15 +678,14 @@ var PDP11 = { MASK: 0x00FF // Data }, PPS: { // 177554: PC11 Punch Status Register - /* - * TODO: Flesh this out if/when we add Paper Tape Punch support - */ + IE: 0x0040, // Interrupt Enable + RDY: 0x0080, // Ready + ERROR: 0x8000, // Error (eg, no tape in punch, or punch has no power) + WMASK: 0x0040, // bits writable BAUD: 600 }, PPB: { // 177556: PC11 Punch Buffer Register - /* - * TODO: Flesh this out if/when we add Paper Tape Punch support - */ + MASK: 0x00FF // Data } }, RK11: { // RK11 Disk Controller diff --git a/modules/pdp11/lib/pc11.js b/modules/pdp11/lib/pc11.js index fc3fbdbd1..4c2cb6a5c 100644 --- a/modules/pdp11/lib/pc11.js +++ b/modules/pdp11/lib/pc11.js @@ -76,10 +76,12 @@ class PC11 extends Component { this.cAutoMount = 0; this.nBaudReceive = +parms['baudReceive'] || PDP11.PC11.PRS.BAUD; - this.regPRS = 0; // PRS register - this.regPRB = 0; // PRB register - this.iTapeData = 0; // buffer index - this.aTapeData = []; // buffer for the PRB register + this.regPRS = 0; // PRS register + this.regPRB = 0; // PRB register + this.regPPS = PDP11.PC11.PPS.ERROR; // PPS register (TODO: signals an error until we implement the punch) + this.regPPB = 0; // PPB register + this.iTapeData = 0; // buffer index + this.aTapeData = []; // buffer for the PRB register this.sTapeSource = PC11.SOURCE.NONE; this.nTapeTarget = PC11.TARGET.NONE; this.sTapeName = this.sTapePath = ""; @@ -824,7 +826,7 @@ class PC11 extends Component { this.displayProgress(this.iTapeData / this.aTapeData.length * 100); this.regPRS |= PDP11.PC11.PRS.DONE; this.regPRS &= ~PDP11.PC11.PRS.BUSY; - if (this.regPRS & PDP11.PC11.PRS.RIE) { + if (this.regPRS & PDP11.PC11.PRS.IE) { this.cpu.setIRQ(this.irqReader); } } @@ -868,7 +870,7 @@ class PC11 extends Component { */ if (this.regPRS & PDP11.PC11.PRS.ERROR) { data &= ~PDP11.PC11.PRS.RE; - if (this.regPRS & PDP11.PC11.PRS.RIE) { + if (this.regPRS & PDP11.PC11.PRS.IE) { this.cpu.setIRQ(this.irqReader); } } else { @@ -914,6 +916,63 @@ class PC11 extends Component { writePRB(data, addr) { } + + /** + * readPPS(addr) + * + * @this {PC11} + * @param {number} addr (eg, PDP11.UNIBUS.PPS or 177554) + * @return {number} + */ + readPPS(addr) + { + return this.regPPS; + } + + /** + * writePPS(data, addr) + * + * NOTE: This was originally added ONLY because when RT-11 v4.0 copies from device "PC:" (the paper tape reader), + * it executes the following code: + * + * 016010: 005037 177550 CLR @#177550 ;history=2 PRS + * 016014: 005037 177554 CLR @#177554 ;history=1 + * + * and as you can see, without this PPS handler, a TRAP to 4 would normally occur. I guess since we claim to be + * a PC11, that makes sense. But what about PDP-11 machines with only a PR11 (ie, a reader-only unit)? + * + * @this {PC11} + * @param {number} data + * @param {number} addr (eg, PDP11.UNIBUS.PPS or 177554) + */ + writePPS(data, addr) + { + this.regPPS = (this.regPPS & ~PDP11.PC11.PPS.WMASK) | (data & PDP11.PC11.PPS.WMASK); + } + + /** + * readPPB(addr) + * + * @this {PC11} + * @param {number} addr (eg, PDP11.UNIBUS.PPB or 177556) + * @return {number} + */ + readPPB(addr) + { + return this.regPPB; + } + + /** + * writePPB(data, addr) + * + * @this {PC11} + * @param {number} data + * @param {number} addr (eg, PDP11.UNIBUS.PPB or 177556) + */ + writePPB(data, addr) + { + this.regPPB = (this.regPPB & ~PDP11.PC11.PPB.WMASK) | (data & PDP11.PC11.PPB.WMASK); + } } /* @@ -944,7 +1003,9 @@ PC11.CSSCLASS = { */ PC11.UNIBUS_IOTABLE = { [PDP11.UNIBUS.PRS]: /* 177550 */ [null, null, PC11.prototype.readPRS, PC11.prototype.writePRS, "PRS"], - [PDP11.UNIBUS.PRB]: /* 177552 */ [null, null, PC11.prototype.readPRB, PC11.prototype.writePRB, "PRB"] + [PDP11.UNIBUS.PRB]: /* 177552 */ [null, null, PC11.prototype.readPRB, PC11.prototype.writePRB, "PRB"], + [PDP11.UNIBUS.PPS]: /* 177554 */ [null, null, PC11.prototype.readPPS, PC11.prototype.writePPS, "PPS"], + [PDP11.UNIBUS.PPB]: /* 177556 */ [null, null, PC11.prototype.readPPB, PC11.prototype.writePPB, "PPB"] }; if (NODE) module.exports = PC11; diff --git a/pubs/dec/pdp11/README.md b/pubs/dec/pdp11/README.md index aec6c33d8..99a6ea0b6 100644 --- a/pubs/dec/pdp11/README.md +++ b/pubs/dec/pdp11/README.md @@ -49,6 +49,7 @@ directory. If a PDF was not searchable, it was "OCR'ed" before being archived b - [CEQKCE0 11/70 INSTRUCTION EXERCISER (May 1980)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-7994E-MC_CEQKCE0_1170_INSTRUCTION_EXERCISER_May80.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/microfiche/ftp.j-hoppe.de/bw/gh/AH-7996E-MC__PDP11-70-74__11-70_INST_EXR__CEQKCE0__%28C%2975,80.pdf)] - [CFKAAC0 11/34 BASIC INSTRUCTION TEST (Oct 1978)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-8041C-MC_CFKAAC0_1134_BSC_INST_TST_Oct78.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/xxdp/diag_listings/1134/AC-8041C-MC_CFKAAC0-1134-Bsc-Inst-Tst_Oct78.pdf)] - [CXCPAG0 INSTRUCTION TEST (Sep 1978)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-E664G-MC_CXCPAG0_PROCESSOR_TEST_Sep78.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/xxdp/x11_listings/AC-E664G-MC_CXCPAG0-Processor-test_Sep78.pdf)] +- [CZQMCF0 0-124K MEM EXER 16K (Feb 1978)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-9045F-MC_CZQMCFO_MEM_EXER_16K_Feb78.pdf) - [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) @@ -66,12 +67,6 @@ directory. If a PDF was not searchable, it was "OCR'ed" before being archived b - [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 PC11](pc11/) - -- [LISTING OF PDP-11 ABSOLUTE LOADER (June 1975)](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Absolute_Loader_Listing_Jun75.pdf) -- [CZQMCF0 0-124K MEM EXER 16K (Feb 1978)](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Mem-Exer-16k_Feb78.pdf) -- [PDP-11 Paper Tape Software Handbook (Apr 1976)](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Paper_Tape_Software_Handbook.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) @@ -89,6 +84,7 @@ directory. If a PDF was not searchable, it was "OCR'ed" before being archived b [Assorted PDP-11 Handbooks](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) diff --git a/pubs/dec/pdp11/diags/README.md b/pubs/dec/pdp11/diags/README.md index f6289f423..e36bc4dff 100644 --- a/pubs/dec/pdp11/diags/README.md +++ b/pubs/dec/pdp11/diags/README.md @@ -22,6 +22,7 @@ PDPjs development and testing relied on the following PDP-11 diagnostic publicat - [CEQKCE0 11/70 INSTRUCTION EXERCISER (May 1980)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-7994E-MC_CEQKCE0_1170_INSTRUCTION_EXERCISER_May80.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/microfiche/ftp.j-hoppe.de/bw/gh/AH-7996E-MC__PDP11-70-74__11-70_INST_EXR__CEQKCE0__%28C%2975,80.pdf)] - [CFKAAC0 11/34 BASIC INSTRUCTION TEST (Oct 1978)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-8041C-MC_CFKAAC0_1134_BSC_INST_TST_Oct78.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/xxdp/diag_listings/1134/AC-8041C-MC_CFKAAC0-1134-Bsc-Inst-Tst_Oct78.pdf)] - [CXCPAG0 INSTRUCTION TEST (Sep 1978)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-E664G-MC_CXCPAG0_PROCESSOR_TEST_Sep78.pdf) [[Original PDF](http://bitsavers.org/pdf/dec/pdp11/xxdp/x11_listings/AC-E664G-MC_CXCPAG0-Processor-test_Sep78.pdf)] +- [CZQMCF0 0-124K MEM EXER 16K (Feb 1978)](http://archive.pcjs.org/pubs/dec/pdp11/diags/AC-9045F-MC_CZQMCFO_MEM_EXER_16K_Feb78.pdf) The *MAINDEC-11-DZQAB MAINDEC USER REFERENCE MANUAL (Oct 1973)* was particularly useful for understanding DEC's [Paper Tape Diagnostics](/apps/pdp11/tapes/diags/). diff --git a/pubs/dec/pdp11/other/README.md b/pubs/dec/pdp11/other/README.md index 56f36bd76..32f2791f6 100644 --- a/pubs/dec/pdp11/other/README.md +++ b/pubs/dec/pdp11/other/README.md @@ -9,6 +9,7 @@ DEC PDP-11 Assorted Handbooks PDPjs development and testing relied on the following PDP-11 publications: +- [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) diff --git a/pubs/dec/pdp11/pc11/README.md b/pubs/dec/pdp11/pc11/README.md deleted file mode 100644 index 0a6e448ec..000000000 --- a/pubs/dec/pdp11/pc11/README.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: page -title: DEC PDP-11 PC11 Paper Tape Reader -permalink: /pubs/dec/pdp11/pc11/ ---- - -DEC PDP-11 PC11 Paper Tape Reader ---- - -PDPjs development and testing relied on the following PDP-11 publications: - -- [LISTING OF PDP-11 ABSOLUTE LOADER (June 1975)](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Absolute_Loader_Listing_Jun75.pdf) -- [CZQMCF0 0-124K MEM EXER 16K (Feb 1978)](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Mem-Exer-16k_Feb78.pdf) -- [PDP-11 Paper Tape Software Handbook (Apr 1976)](http://archive.pcjs.org/pubs/dec/pdp11/pc11/Paper_Tape_Software_Handbook.pdf)