/ P?S/8 TC12 SYSTEM HANDLER / LAST EDIT: 17-DEC-1986 23:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / P?S/8 HANDLER FOR TC12 LINCTAPE ON PDP-12. / CAN BE BOOTSTRAPPED TO ANY UNIT. / SUPPORTS EIGHT UNITS (0-7). / SUPPORTS PARITY ERROR DETECTION. / OVERLAY SUPPORTS DRIVE NOT READY AND WRITE LOCK DETECTION. / WAITS IN PDP-8 MODE AND CAN BE INTERRUPTED. / SUPPORTS 128 OR 129 WORDS/BLOCK LINCTAPES. / SUPPORTS STANDARD CONSOLE MANUAL BOOTSTRAP FOR DRIVE ZERO. / RESTRICTION: USES BUFFERED SLURP LOADER (IF NOT /V) WHICH RESTRICTS THE / LOADING OF 007400-007577. / P?S/8 MONITOR GENERATION RESTRICTIONS GENERALLY REQUIRE BTUNIT=0 FOR THE / INITIAL MONITOR. HOWEVER, THE OTHER UNITS CAN BE SELECTED FOR ASSEMBLY / PURPOSES AS THE ONLY CODE AFFECTED IS THE COLD BOOTSTRAP. / CONDITIONAL ASSEMBLY DEFINITIONS. IFNDEF BTUNIT /GENERATE A UNIT ZERO BOOTSTRAP // P?S/8 EQUATED SYMBOLS. ADRLST= 7603 /ZAP ADDRESS LIST BBLEN= 0043 /SLURP LOADER BOOTSTRAP LENGTH BCIF= 7746 /SLURP LOADER STARTING FIELD LOCATION BINADR= 0020 /"%" BLOCK BINIT= 0020 /SLURP INITIALIZE ROUTINE BINITLN=0020 /LENGTH OF SLURP INITIALIZE CODE BINIT2= 0031 /SECONDARY SLURP INITIALIZE ADDRESS BISTRT= 7776 /DEFAULT STARTING ADDRESS IF /I OR /V CALADR= 0020 /CALLING ADDRESS CALFLD= 0021 /CALLING FIELD CNTLST= 7615 /CONTENTS LIST FOR ZAPPED ADDRESSES DEVSIZE=6760 /DEVICE SIZE WORD IN SYSGEN ROUTINE DSPBLB= 0024 /BLURB DISPLAY ROUTINE ERRTRP= 0046 /ERROR TRAP POINTER ESTATUS=0077 /ERROR STATUS FILBLB= 0023 /BLURB FILL ROUTINE GENAD1= 7400 /SYSIO GENERATION ADDRESS HIDWRD= 7600 /SYSTEM HANDLER ID WORD IGEN= 4020 /I GENERATION ADDRESS IOTRAP= 0045 /I/O TRAP POINTER IOWAIT= 0047 /I/O WAIT POINTER L7770= 0040 /CONSTANT 7770 MONSTRT=0353 /KEYBOARD MONITOR STARTUP ADDRESS MOVBLB= 0022 /ERROR BLURB MOVE ROUTINE PCHLOOP=0162 /POINTER TO CHARACTER INPUT ROUTINE REWIND= 1335 /REWIND ROUTINE ADDRESS SBLOCK= 7635 /SYSTEM LOADER BLOCK ARGUMENT SBOOT= 7600 /MONITOR RESTART ADDRESS SBTFUN= 7602 /SYSTEM BOOTSTRAP FUNCTION SCORE= 7633 /SYSTEM LOADER TRANSFER ADDRESS SCRSIZE=7611 /SYSTEM MEMORY SIZE, ETC. WORD SDATE= 7610 /SYSTEM LOW-ORDER DATE WORD SFILES= 7757 /FILE LIST PASSED HERE SFUN= 7634 /SYSTEM LOADER FUNCTION WORD SLOAD= 7632 /SYSTEM LOADER ADDRESS SLPGEN= 4420 /SLURP LOADER GENERATION FIELD AND ADDRESS SLPSA= 7777 /SLURP LOADER STARTING ADDRESS WORD SLUPAGE=2600 /SLURP LOADING PAGE SOUTFLS=7607 /OUTPUT FILE COUNT PASSED HERE SPARM= 7756 /EQUALS PARAMETER PASSED HERE SWAL= 7604 /SWITCHES /A-/L SWMX= 7605 /SWITCHES /M-/X SWY9= 7606 /SWITCHES /Y-/9 SYSIO= 7640 /SYSTEM I/O ENTRY POINT SYSTART=7637 /SYSTEM LOADER STARTUP ADDRESS TEMP1= 0100 /TEMPORARY TRAPIO= 1041 /ENTRY POINT FOR I/O TRAPS TRPGEN= 1020 /TRAP ROUTINE GENERATION FIELD AND ADDRESS TRPERR= 1200 /ENTRY POINT FOR I/O ERROR TRAPS UNIT= 0000 /KEYBOARD MONITOR UNIT WAITIO= 1110 /ENTRY POINT FOR I/O WAIT WRITE= 4000 /SYSIO WRITE BIT ZAPLST= 7627 /REPLACEMENT LIST FOR ZAPPED ADDRESSES // END OF P?S/8 EQUATED SYMBOLS. / TC12-RELATED SYMBOLS. AXO= 0001 /AC TO EXTENDED OPERATIONS BUFFER BCO= 1640 /BIT COMPLEMENT AC CHK= 0717 /CHECK A BLOCK LDA= 1000 /LOAD ACCUMULATOR LINC= 6141 /GOTO L...MODE LMR= 6151 /LOAD MAINTAINENCE REGISTER MTB= 0703 /MOVE TOWARD BLOCK LZE= 0452 /SKIP IF LINK ZERO PDP= 0002 /GOTO GOODY MODE RDC= 0700 /READ AND CHECK BLOCK RDE= 0702 /READ BLOCK STC= 4000 /STORE AND CLEAR ACCUMULATOR TAC= 0003 /TAPE ACCUMULATOR TO ACCUMULATOR TMA= 0023 /LOAD TAPE MEMORY ADDRESS TRC= 6152 /TAPE REGISTER CLOCK U= 0010 /ODD TAPE UNIT BIT XFR= 6154 /TAPE REGISTER TRANSFER / MISCELLANEOUS EQUATED SYMBOLS. JMPC= JMP . /CURRENT PAGE JUMP LTSIZE= 4000 /LONG LINCTAPE BLOCK LENGTH NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL0004= CLA CLL IAC RTL /LOAD AC WITH 0004 NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 SBOFF= SLUPAGE-SBOOT /OFFSET VALUE SLUBUFF=7400 /SLURP BUFFER SYSNUM= 0005 /SYSTEM ID NUMBER **** MUST BE UNIQUE **** / DRIVE ZERO BOOTSTRAP. NOPUNCH /TURN OFF BINARY OUTPUT *4016 /EQUIVALENT OF CONSOLE OPERATION RDC; 0000 /READ IN BLOCK ZERO INTO 004000 / SYSTEM WILL START HERE. / THE ABOVE BOOTSTRAP IS EXECUTED ON THE PDP-12 CONSOLE SWITCHES BY: / 0700 0000 /DO RDC; 0 ON THE SWITCHES / START 0020 /START IT UP AT 4020 / MULTIPLE DRIVE BOOTSTRAP. *4013 /EQUIVALENT OF CONSOLE OPERATION LDA+20; BTUNIT%2/GET EXTENDED UNIT BITS OF DESIRED UNIT AXO /LOAD EXTENDED UNIT BITS BTUNIT&1^10+RDC;0000 /RDC; 0 OR RDC U; 0 / SYSTEM WILL START HERE. ENPUNCH /RESTORE BINARY OUTPUT / P?S/8 MONITOR COMPONENTS. / REWIND/UNLOAD ROUTINE. *REWIND-1 /DEFINE REWIND/UNLOAD ROUTINE CHKUCON,CHK U /CHECK A BLOCK INSTRUCTION CONSTANT REWIND, TAD UNIT /GET MONITOR'S CURRENT UNIT CLL RAR /MOVE OVER EXTENDED UNIT BITS TAD L14/(14) /ADD ON NOPAUSE, HOLD MOTION BITS DCA OFFVALUE /SAVE IN-LINE SNL /ODD UNIT? TAD L7770/[-U] /NO, GET BACKUP FACTOR TAD CHKUCON/(CHK U) /ADD ON CHECK INSTRUCTION DCA CHKINS /STORE IN-LINE TAD TEMP1 /GET LATEST INPUT CHARACTER RTR /MOVE DECISION BIT TO LINK CLA /CLEAN UP TAD OFFVALUE /GET EXTENDED OPERATIONS VALUE LINC /GOTO L...MODE AXO /LOAD EXTENDED OPERATIONS BUFFER CHKINS, .-.; 0000 /WILL BE CHK OR CHK U; 0000 LDA+20; OFFVALU,.-. /GET ORIGINAL EXTENDED UNITS, ETC. BCO+20; 3 /INVERT THE EXTENDED UNITS LZE+20 /SKIP IF LINK SET (<^R> WAS HIT) AXO /DESELECT THE TAPE (<^T> WAS HIT) PDP /BACK TO GOODY MODE L14, 14 /CONSTANT 0014 CLA /CLEAN UP ZBLOCK 1377-. /EMPTY SPACE JMP I PCHLOOP/[CHLOOP] /CONTINUE / DEVICE SIZE. *DEVSIZE /OVER SYSGEN ROUTINES LTSIZE /DEFINE OUR DEVICE SIZE / P?S/8 BINARY SLURP LOADER. FIELD SLPGEN&70%10 /GENERATION FIELD *SLPGEN&7600 /GENERATION ADDRESS SLPCORE,NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE IT LOADS *SLPCORE /RESET ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER RELOC SBOOT /WHERE IT EXECUTES SBOOT, /BOOTSTRAP ADDRESS IFNZRO SLUBUFFER+200-. B100, 100 /TAPE FLAG CONSTANT PDP /ENSURE P...MODE LINC /GOTO L...MODE LDA+20; BUTAXO, 30+.-. /EXTENDED UNITS WILL BE FILLED IN AXO /LOAD EXTENDED OPERATIONS BUFFER LDA+20; SBOOT /LOAD BOOTSTRAP ADDRESS TMA /LOAD TMA SETUP REGISTER BRDINS, RDE+.-.; 0000 /WILL BE RDE OR RDE U; 0000 PDP /BACK TO GOODY MODE CLA /CLEAN UP / FALL INTO WAIT ROUTINE UNTIL OVERLAY COMES IN. BWAIT, TAD B100/(100) /GET SKIP ON TAPE FLAG VALUE SWAIT, LMR /SKIP ON TAPE DONE JMP SWAIT /WAIT FOR IT / ALL BOOTSTRAP CODE MUST BE WITHIN 7600-7642. / ENSURE THIS SIZE CONVENTION IS MET. IFNZRO SBOOT+BBLEN-.&4000 / CONTINUES HERE IF SLURP LOADING, NOT BOOTSTRAPPING. DCA B100/(100) /RESTORE WIPED OUT LOCATION LINC /GOTO L...MODE TAC /GET TRANSFER CHECK PDP /BACK TO GOODY MODE CMA /INVERT FOR TEST SNA CLA /SKIP IF BAD JMP BOK /JUMP IF TRANSFER CHECK=7777 BBARF, HLT /HALT ON PARITY ERROR JMP BRETRY /TRY, TRY AGAIN / SLURP LOADER STARTS HERE. BREAD, NL4000 /SET PRESET BIT TRC /CLEAR PREVIOUS OPERATION B7770, 7770 /CONSTANT 7770; CLEARS THE AC B7, 7 /CONSTANT 0007; THIS CAN BE SKIPPED BREAD2, ISZ BFLPTR /BUMP POINTER TO NEXT FILE TAD I BFLPTR /GET NEXT FILE AND B7770/(7770) /JUST BLOCK BITS SNA /END OF LIST? JMP BCIF /YES, FINISH DCA BBLOCK /NO, STORE IN-LINE TAD I BFLPTR /GET FILE ARGUMENT AGAIN AND B7/(7) /JUST UNIT BITS CLL RAR /MOVE OVER UNIT BITS TAD B30/(30) /ADD ON EXTENDED ADDRESSING AND NOPAUSE BITS DCA BAXO /SAVE IN-LINE RTL;RTL /MOVE UP THE "U" BIT TAD BRDCON/(RDE) /ADD ON RDE INSTRUCTION DCA BTAPRD /STORE IN-LINE BRETRY, TAD BJMPGO/(JMP GO) /SETUP THE DCA BWATINS /SECOND READ JMP BLINC /GO READ IN THE FIRST BLOCK AND THEN COME BACK BGO, DCA BWATINS /DESTROY DOUBLE READ JMP BWAIT /WAIT FOR PREVIOUS TO FINISH BOK, ISZ BBLOCK /BUMP TO NEXT BLOCK BLINC, LINC /GOTO L...MODE LDA+20; BAXO, .-. /LOAD EXTENDED ADDRESSING, NOPAUSE, UNIT BITS AXO /LOAD EXTENDED OPERATIONS BUFFER LDA+20; SLUBUFFER /GET TRANSFER ADDRESS TMA /SETUP TAPE MEMORY ADDRESS STC BINPTR&5777 /SETUP BUFFER POINTER BTAPRD, .-.; BBLOCK, .-. /RDE OR RDE U; CURRENT BLOCK PDP /BACK TO GOODY MODE BWATINS,.-. /0000 NOT TO WAIT, JMP BGO FIRST EACH FILE BNWREC, TAD B7756/(-22) /22 GROUPS DCA BGRPCT /INTO GROUP COUNTER BNWGRP, TAD B7772/(-6) /6 WORDS DCA BWDCT /INTO WORD COUNTER JMS BGETWD /GET A WORD CLL RAR /DO AN INITIAL SHIFT SKP /DON'T GET FLAG THIS TIME BGRPLP, TAD BRLBTS /GET FLAG RTL /ROTATE TO NEXT DCA BRLBTS /PUT IT BACK TAD BRLBTS /GET IT AGAIN SPA CLA / OR FIELD SETTING? JMP BEOF /YES... (NOTE LINK IS OFF HERE IF ) JMS BGETWD /GET ANOTHER BCDF, CDF 00 /GETS CHANGED SNL /SKIP IF ORIGIN SETTING DCA I BLOC /STORE CODE CDF 00 /RESTORE FIELD ISZ BLOC /BUMP CORE POINTER SZL /SKIP IF DATA WORD; WHO CARES IF SKIPPED DCA BLOC /SET NEW ORIGIN BNXTWD, ISZ BWDCT /DONE SIX YET? JMP BGRPLP /NO, DO ANOTHER ISZ BGRPCT /DONE 22 GROUPS YET? JMP BNWGRP /NO DO ANOTHER BJMPGO, JMP BGO /GO READ IT IN BEOF, SNL CLA /FIELD SETTING? JMP BREAD /NO JMS BGETWD /GET A NEW WORD DCA BCDF /MAKE IT THE NEW FIELD SETTING JMP BNXTWD /GO DO NEXT ONE BGETWD, .-. /GET A WORD TAD I BINPTR /GET A WORD ISZ BINPTR /BUMP FOR NEXT JMP I BGETWD /RETURN BRDCON, RDE /RDE CONSTANT B30, 30 /CONSTANT 0030 B7756, 7756 /-22 FOR GROUP COUNT ZBLOCK 7745-. /EMPTY SPACE BERR, /DEFAULT STARTING ADDRESS B7772, SPA SNA SZL CLA HLT /CONSTANT 7772 WHICH NEVER SKIPS BUT HALTS BCIF, CIF CDF 00 /WILL BE CIF CDF STARTING FIELD JMP I SPARM /GO START IT UP BFLPTR, SFILES-1 /FILE POINTER BGRPCT, .-. /GROUP COUNT BINPTR, .-. /BINARY BUFFER POINTER BLOC, .-. /LOCATION COUNTER BRLBTS, .-. /FLAG WORD BWDCT, .-. /WORD COUNT SPARM, BERR /STARTING ADDRESS; INITIALIZED FOR DEFAULT SFILES, /FILE SPECIFICATIONS PASSED HERE / SLURP INITIALIZE CODE. RELOC BINIT2 /WHERE THIS EXECUTES BINIT2, TAD I BNUNIT/[SBTFUN] /GET BOOTSTRAP UNIT CLL RAR /MOVE OVER TAD I BNAXO/[BUTAXO+SBOFF] /GET OTHER BITS DCA I BNAXO/[BUTAXO+SBOFF] /STORE AXO COMPOSITE RTL;RTL /GET THE "U" BIT TAD I BNRDINS/[BRDINS+SBOFF] /ADD ON RDE INSTRUCTION DCA I BNRDINS/[BRDINS+SBOFF] /STORE RDE INSTRUCTION WITH POSSIBLE "U" BIT JMP I BINIT /RETURN BNAXO, BUTAXO+SBOFF /WHERE BUTAXO IS AT ONCE-ONLY TIME BNRDINS,BRDINS+SBOFF /WHERE BRDINS IS AT ONCE-ONLY TIME BNUNIT, SBTFUN /SYSTEM BOOTSTRAP UNIT POINTER ZBLOCK BINIT2+BINITLN-. /EMPTY SPACE RELOC SFILES+BINITLN /RESET ORIGIN SLPSA, BREAD /SLURP LOADER STARTING ADDRESS /N. B. NON-ZERO MEANS SLURP LOADER EXISTS! RELOC /TURN OFF RELOCATION / P?S/8 SYSTEM I/O ROUTINE LOADER. / CORE IMAGE OF A BINARY FORMAT FILE WHICH WILL BE WRITTEN OUT TO THE /I BLOCK. / THE FOLLOWING PAGE OF CODE IS AN EXAMPLE OF A P?S/8 BINARY FORMAT FILE. / IT WILL BE WRITTEN OUT AT SYSGEN TIME AS A CORE IMAGE OF A "FILE" TO BE / USED LATER AS THE LAST LOADED "FILE" WHEN INVOKING THE '/I' OPTION OF THE / SLURP LOADER. AT RUN TIME, IT WILL BE LOADED OVER AND NEXT TO THE SLURP / LOADER (BY THE SLURP LOADER!), CAUSING THE SYSTEM I/O ROUTINES TO BE RELOADED; / THE FINAL EFFECT IS AS IF THE VIRTUAL LOADER (/V) HAD BEEN USED, BUT WITHOUT / THE OVERHEAD AND WRITING (THE SLURP LOADER AND /I CODING CAN BE USED WITH / WRITE-LOCKED DEVICES.) / THE ONLY RESTRICTION ON USE OF THE /I OPTION IS THAT IT IS PASSED AS A FILE / ARGUMENT TO THE LOADER, AND THUS LIMITS THE LOADER TO ONLY SIXTEEN FILES / MAXIMUM INSTEAD OF THE NORMAL SEVENTEEN. BY USING THE /I OPTION, THE USER / CAN MAINTAIN DEVICE INDEPENDENCE, YET TAKE ADVANTAGE OF THE BENEFITS OF / THE SLURP LOADER OVER THE VIRTUAL (/V) LOADER. / P?S/8 BINARY FORMAT AND CORE IMAGE FORMAT ARE RELATIVELY SIMILAR, BUT THE / DIFFERENCES WILL BE DESCRIBED. / P?S/8 BINARY FORMAT DESCRIPTION. / THE P?S/8 BINARY FILE FORMAT CONSISTS OF A SEQUENTIAL LIST OF BLOCKS, EACH / BLOCK CONTAINING 128 LOGICAL WORDS. THE WORDS BREAKDOWN FURTHER INTO EIGHTEEN / GROUPS OF SEVEN WORDS PLUS TWO WASTE WORDS. IF ANY PHYSICAL ADDITIONAL WORDS / EXIST, IT IS THE LOADER'S RESPONSIBILITY TO PROPERLY IGNORE THEM, JUST AS / IN SEVERAL SYSTEM HANDLERS. / EACH GROUP OF SEVEN WORDS CONSISTS OF A CONTROL WORD AND SIX DATA WORDS. / THE CONTROL WORD CONSISTS OF SIX BIT PAIRS EACH OF WHICH CONTROLS THE / CORRESPONDING FOLLOWING DATA WORDS. THE ORDERING IS LEFT TO RIGHT, I.E. / THE HIGH-ORDER TWO BITS OF THE CONTROL WORD CONTROL THE DATA WORD IMMEDIATELY / FOLLOWING THE CONTROL WORD; THE LOW-ORDER TWO BITS OF THE CONTROL WORD CONTROL / THE SIXTH DATA WORD FOLLOWING THE CONTROL WORD. SINCE EACH GROUP (AND / THEREFORE BLOCK) IS AUTONOMOUS EXCEPT FOR IMPLIED ORIGIN AND FIELD, ANY / SINGLE BLOCK CAN BE LOADED INDEPENDENTLY. / THIS /I BLOCK CONFORMS TO THIS CONVENTION, AND WILL BE TREATED AS A ONE / BLOCK LONG "FILE" COMPLETE WITH . / ALL ACTUAL DATA WORDS ARE IDENTICAL TO THEIR CORE IMAGE COUNTERPARTS, HOWEVER, / NOT ALL WORDS IN A GROUP ARE ACTUAL DATA WORDS. / BIT CONVENTION FOR CONTROL WORDS. / EACH OF THE CONTROL WORD'S BIT PAIRS CONTROLS THE CORRESPONDING DATA WORD / IN THE FOLLOWING MANNER: / 00 ACTUAL DATA WORD; THE CORRESPONDING WORD IS AN ACTUAL DATA WORD / TO BE LOADED ACCORDING TO THE CURRENT ORIGIN ADDRESS; LOAD IT AND / ADVANCE THE ORIGIN ADDRESS BY ONE. / 01 END OF FILE; IGNORE CORRESPONDING WORD (AND REST OF FILE!). / 10 ORIGIN SETTING; SET CURRENT ORIGIN ADDRESS TO THE VALUE OF THE / CORRESPONDING DATA WORD. / 11 FIELD SETTING; THE CORRESPONDING WORD IS A CDF INSTRUCTION TO THE / NEW FIELD; EXECUTE IT WHEN LOADING DATA WORDS INDIRECTLY THROUGH / THE CURRENT ORIGIN ADDRESS. THIS ALLOWS LOADING TO OCCUR IN FIELDS / 0-7. / TYPICAL P?S/8 BINARY FORMAT FILES ARE CREATED BY EITHER AN ASSEMBLER PROGRAM / OR THE BINARY UTILITIES (BIN, BSAVE, ETC.). SEVERAL SYSTEM PROGRAMS CHECK / BINARY FILE FORMAT VALIDITY BY LOOKING FOR INITIAL DATA OF AN ORIGIN TO / 0200, THUS MAKING THE CONTROL WORD OF THE FORM 10 XX XX XX XX XX, AND THE / FIRST DATA WORD 0200. / THE /I "FILE" WAS NOT CREATED DIRECTLY BY ANY ASSEMBLER, AND THIS LACKS THE / (UNNECESSARY) "*200" CONVENTION OF A DEFAULT ORIGIN. ONLY THE SLURP LOADER / WILL EVER LOOK AT THE /I "FILE", AND THE LOADER DOESN'T VALIDATE THE FILE / FORMAT. / A TYPICAL BINARY FILE IS SLIGHTLY GREATER THAN 7/6 OF THE EQUIVALENT CORE / IMAGE FILE SIZE. / SINCE NO CHECKSUM SCHEME IS USED IN THE FILE FORMAT, THE USER CAN PATCH / FREELY ANY BINARY FILE. THIS IS USEFUL WHEN MODIFYING OLD PAPER-TAPE BINARY / FILES WHICH LACK FIELD SETTINGS, ETC. WHEN ATTEMPTING TO LOAD THEM INTO / EXTENDED MEMORY FIELDS THEY WERE NOT INTENDED FOR, ETC. / THE /I CODE COULD BE IMPLEMENTED BY A USER PROGRAM, BUT WOULD THEN NOT BE / DEVICE INDEPENDENT. / SPECIAL NOTE ON SELF-STARTING. / SINCE THE USER CAN DIRECTLY OVERLAY THE LOADER (INDEED THE /I OPTION USES / THIS VERY METHOD!), IT IS POSSIBLE TO CREATE A "SELF-STARTING" PROGRAM BY / SELECTIVE OVERLAY OF THE STARTUP LOCATIONS: / BCIF (07746) STARTING FIELD AS A CIF CDF INSTRUCTION. / SPARM (07756) STARTING ADDRESS IN THE STARTING FIELD. / USER LOADING OF THESE LOCATIONS WILL ALWAYS OVERRIDE ANY AND ALL OTHER METHODS / (DEFAULT VALUES, DEFAULT VALUES WITH /I IN EFFECT, "GET" VALUES, EXPLICIT / COMMAND OPTION SWITCHES, EQUALS PARAMETERS, PRIOR USER LOADING OF THESE / SAME LOCATIONS IN AN EARLIER PASSED BINARY FILE, ETC.). / N. B. THIS SELF-STARTING ABILITY IS TOTALLY IGNORED WHEN USING THE VIRTUAL / (/V) LOADER; SEE "BIN" FOR A DISCUSSION OF THE DISPOSITION OF USER LOADING / INTO 07600-07777, ETC. WHEN THE VIRTUAL LOADER IS IN EFFECT. / BINARY LOADER /I CODING. FIELD IGEN&70%10 /I GENERATION FIELD *IGEN&7600 /I GENERATION ADDRESS ICOR, NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE THIS LOADS *ICOR /RESET ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER / BIT DEFINITIONS FOR BINARY CONTROL WORDS. DA1= 0000 /DATA IN WORD 1 DA2= 0000 /DATA IN WORD 2 DA3= 0000 /DATA IN WORD 3 DA4= 0000 /DATA IN WORD 4 DA5= 0000 /DATA IN WORD 5 DA6= 0000 /DATA IN WORD 6 DATALL= DA1+DA2+DA3+DA4+DA5+DA6 /DATA IN ALL WORDS EF1= 2000 /END OF FILE IN WORD 1 EF2= 0400 /END OF FILE IN WORD 2 EF3= 0100 /END OF FILE IN WORD 3 EF4= 0020 /END OF FILE IN WORD 4 EF5= 0004 /END OF FILE IN WORD 5 EF6= 0001 /END OF FILE IN WORD 6 OR1= 4000 /ORIGIN SETTING IN WORD 1 OR2= 1000 /ORIGIN SETTING IN WORD 2 OR3= 0200 /ORIGIN SETTING IN WORD 3 OR4= 0040 /ORIGIN SETTING IN WORD 4 OR5= 0010 /ORIGIN SETTING IN WORD 5 OR6= 0002 /ORIGIN SETTING IN WORD 6 FL1= 6000 /FIELD SETTING IN WORD 1 FL2= 1400 /FIELD SETTING IN WORD 2 FL3= 0300 /FIELD SETTING IN WORD 3 FL4= 0060 /FIELD SETTING IN WORD 4 FL5= 0014 /FIELD SETTING IN WORD 5 FL6= 0003 /FIELD SETTING IN WORD 6 FL1+OR2+DA3+DA4+EF5+EF6 /NEW CONTROL WORD CDF 00 /FIELD 0 BREAD2 /*BREAD2 RELOC BREAD2 /FOOL THE ASSEMBLER BREAD2, JMP I .+1/(BILOAD) /GOTO /I CODE BILOAD /THROUGH HERE / HERE RELOC /TURN OFF RELOCATION / THE FOLLOWING CODE WILL BE IN THE SLURP BUFFER. RELOC .-ICOR+SLUBUFFER/FOOL THE ASSEMBLER BILOAD, TAD I (SPARM) /GET EQUALS PARAMETER BIPARM, DCA BIPARM /SAVE IT FOR LATER B0SAVE, TAD I (BCIF) /GET STARTING FIELD INSTRUCTION DCA BICIF /STORE IN-LINE TAD 0000 /GET ENDANGERED LOCATION DCA B0SAVE /SAVE IT TAD I (BRDINS) /GET BOOTSTRAP RDE OR RDE U INSTRUCTION DCA RDEINST /STORE IN-LINE TAD I (BUTAXO) /GET EXTENDED OPERATIONS VALUE DCA AXOVAL /STORE IN-LINE SLIRETR,LINC /GOTO L...MODE LDA+20; AXOVAL, .-. /GET EXTENDED ADDRESSING, UNIT BITS AXO /LOAD EXTENDED OPERATIONS BUFFER LDA+20; SBOOT /GET TRANSFER ADDRESS TMA /LOAD TAPE MEMORY ADDRESS RDEINST,.-.; 0000 /RDE OR RDE U; 0000 PDP /BACK TO GOODY MODE TAD (100-SBOOT) /GET TAPE SKIP VALUE LMR /SKIP ON TAPE DONE JMP .-1 /WAIT FOR IT LINC /GOTO L...MODE TAC /GET TRANSFER CHECK PDP /BACK TO GOODY MODE CMA /INVERT TRANSFER CHECK SNA CLA /SKIP IF TRANSFER CHECK IS BAD JMP SLIOK /JUMP IF TRANSFER CHECK=7777 SLIBARF,HLT /BARF! JMP SLIRETRY /TRY, TRY AGAIN SLIOK, TAD B0SAVE /GET ENDANGERED LOCATION VALUE DCA 0000 /RESTORE IT TAD RDEINST /GET RDE INSTRUCTION RTR;RTR /MOVE THE "U" BIT INTO THE LINK CLA /CLEAN UP TAD AXOVAL /GET EXTENDED UNITS AND (3) /ISOLATE THEM RAL /MOVE UP DCA I (SBTFUN) /RESTORE SYSTEM BOOTSTRAP UNIT TAD (200) /GET CONSTANT VALUE DCA I (S200) /RESTORE PESKY VALUE TAD (HLT) /GET DEFAULT STARTING CONTENTS DCA I (BISTRT) /STORE IT TAD (BISTRT&177+JMPC) /GET SAFETY JUMP DCA I (BISTRT+1) /STORE IT BICIF, .-. /WILL BE CIF CDF STARTING FIELD JMP I BIPARM /GO START IT UP PAGE / END OF /I CODING WHICH MUST FIT IN ONE PAGE. RELOC /UN-FOOL THE ASSEMBLER IFNZRO ICOR+200-.&4000 / MONITOR I/O INTERCEPT BLOCKS FOR TC12. / PAGE AND FIELD RELOCATABLE CODE TO BE LOADED BY CONSOLE OVERLAY, ETC. FOR / I/O AND ERROR TRAP PURPOSES. FIELD TRPGEN&70%10 /GENERATES HERE *TRPGEN&7600 /SYSGEN WANTS IT HERE NOPUNCH /FOOL THE ASSEMBLER FIELD 1 /WHERE IT MIGHT LOAD *TRPGEN&7600 /RESET ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER INTORG, RELOC SBOOT /FOOL THE ASSEMBLER TOF= INTORG-. /OFFSET FOR TABLE ADDRESSING HIDWRD, SYSNUM /SYSTEM DEVICE HANDLER ID NUMBER DEVICE TC12 /SYSTEM DEVICE NAME / I/O ADDRESSES. ADRLST, SWAIT /NORMALLY LMR SWAIT+1 /NORMALLY JMP SWAIT SBLKGET+1 /NORMALLY DCA SBLK S100 /NORMALLY 100 PSERR, SERR /NORMALLY HLT OR 7401 SERR+1 /NORMALLY JMP SNEXT 0 /THIS ENDS THE SHORT LIST ZBLOCK ADRLST+12-. /EMPTY SPACE / I/O NORMAL CONTENTS. CNTLST, LMR /SWAIT JMP SWAIT /SWAIT+1 DCA SBLK /SBLKGET+1 100 /S100 HLT/OR 7401 /SERR JMP SNEXT /SERR+1 0 /THIS ENDS THE SHORT LIST ZBLOCK CNTLST+12-. /EMPTY SPACE / I/O REPLACEMENT CONTENTS. ZAPLST, CIF 10 /WILL BE TO CORRECT FIELD JMP IOWAIT /JMP THERE ON I/O WAIT CIF 10 /WILL BE TO CORRECT FIELD JMP IOTRAP /JMP THERE ON ANY CALL CIF 10 /WILL BE TO CORRECT FIELD JMP ERRTRP /JMP THERE ON ANY ERROR 0 /THIS ENDS THE SHORT LIST ZBLOCK ZAPLST+12-. /EMPTY SPACE RELOC /UN-FOOL THE ASSEMBLER / I/O TRAPS COME HERE. TRAPIO, DCA LOC8 /SAVE BLOCK NUMBER RDF /GET CALLING FIELD TAD TRPCDF/(CDF) /MAKE INTO CDF CALLING FIELD DCA CALFLD /SAVE FOR ERROR HANDLER TRPCDF, CDF 00 /GOTO MONITOR FIELD NL7776 /SET BACKUP FACTOR TAD I PSYSIO/(SYSIO) /GET CALLING ADDRESS DCA CALADR /SAVE FOR ERROR HANDLER TAD LOC8 /GET BLOCK ARGUMENT DCA I (SBLK) /STORE BLOCK ARGUMENT IN-LINE TAD UNSHOOT /GET BACKUP FACTOR TAD I (SBLK) /NOW HAVE LESSER BLOCK NUMBER DCA MTBLK /STORE FOR BLOCK SEARCH RIF /GET OUR FIELD TAD TRPCIF/(CIF) /MAKE INTO CIF OUR FIELD DCA MTSAF1 /STORE IN-LINE TAD MTSAF1 /GET IT BACK DCA MTSAF2 /STORE IN-LINE JMS LOC8 /FIND OUR ADDRESS LOC8, .-. /WILL BE OUR ADDRESS TAD LOC8 /GET IT TAD DREL/(DCHK-LOC8)/POINT TO SUBROUTINE DCA LOC8 /STASH THE POINTER JMS I LOC8/(DCHK) /GO CHECK FURTHER JMP DRIVBAD /DRIVE STATUS, ETC. PROBLEM DCA MTBINST /STORE PASSED MTB I (U) INSTRUCTION IN-LINE MTSAF1, .-. /WILL BE CIF OUR FIELD LINC /GOTO L...MODE MTBINST,.-.; MTBLK, .-. /MOVE TOWARD BLOCK PDP /BACK TO GOODY MODE JMS TWAIT /WAIT FOR THE BLOCK MARK JMP MTSAF2 /TAPE OK JMP WATERR /TAPE TIMED OUT ZBLOCK WAITIO-. /EMPTY SPACE / I/O WAIT TRAPS COME HERE. WAITIO, JMS TWAIT /WAIT FOR THE TAPE OPERATION JMP GUDWAT /TAPE OK CLA /CLEAN UP IF TAPE BAD CDF 00 /GOTO MONITOR FIELD TAD I (SWPFLD) /GET TRANSFER FIELD INSTRUCTION DCA SAVFLD /STORE IN-LINE TAD I (STEM) /GET RESTORE ADDRESS DCA TWAIT /STASH IT TAD I (SAVTEM) /GET SAVED VALUE SAVFLD, .-. /GOTO TRANSFER FIELD DCA I TWAIT /RESTORE THE LOST WORD JMP WATERR /CONTINUE THERE GUDWAT, CIF 00 /GOTO MONITOR FIELD JMP I PS200/(S200) /CONTINUE THERE MTSAF2, .-. /WILL BE CIF OUR FIELD LINC /GOTO L...MODE TAC /GET BLOCK DIFFERENCE PDP /BACK TO GOODY MODE SPA CLA /SKIP IF BLOCK FOUND (OR TOO FAR) JMP MTSAF1 /ELSE KEEP GOING TRPCIF, CIF 00 /GOTO MONITOR FIELD JMP I (SNEXT) /GO DO THE REAL TAPE OPERATION TWAIT, .-. /TAPE WAIT ROUTINE PS200, SNL CLA /POINTER TO S200; THIS CLEARS THE AC DREL, DCHK-LOC8 /ADDRESS VALUE WHICH CAN BE SKIPPED TAD (SNEXT) /SETUP THE DCA LOC8 /TIME-OUT COUNTER TAD (100) /SET THE TAPE SKIP BIT TWATLP, LMR /TAPE DONE? SKP /NO JMP I TWAIT /YES, RETURN ISZ SAVFLD /DONE ENOUGH WAITING? JMP TWATLP /NO, KEEP TRYING ISZ LOC8 /TOO MUCH WAITING? JMP TWATLP /NO, KEEP TRYING ISZ TWAIT /BUMP TO FAILURE EXIT JMP I TWAIT /TAKE BAD RETURN / COMES HERE ON TIME-OUT ERROR. WATERR, NL0001 /SET TIME-OUT INCREMENT SKP /DON'T CLEAR AC / COMES HERE IF THE SELECTED DRIVE IS NOT OK. DRIVBAD,SNA CLA /SKIP IF FAILED WHILE ATTEMPTING TO WRITE OFFLINE,IAC /AC WILL BECOME 3 IF TIMED OUT, 2 IF DRIVE NOT READY, IAC /AC WILL BE 1 IF DRIVE READY, BUT WRITE-LOCKED DCA TWAIT /SAVE STATUS NL4000 /SET PRESET BIT TRC /CLEAR THE TAPE OPERATION NOW PSYSIO, SZA CLA /CLEAN UP; THIS CAN'T SKIP TAD TWAIT /GET DRIVE STATUS CIF 00 /GOTO MONITOR FIELD JMP I PSERR+TOF/(SERR)/GOTO ERROR HANDLER / CUSTOM UNDERSHOOT FACTOR. UNSHOOT,-6 /UNDERSHOOT FACTOR PAGE / ERRORS COME HERE. TRPERR, CLL RTL /*4 DCA ESTATUS /SAVE RELATIVE ERROR ADDRESS JMS ERLOC8 /FIND OURSELVES ERLOC8, .-. /OUR ADDRESS STORED HERE TAD ERLOC8 /GET OUR ADDRESS TAD (PAR-ERLOC8) /ADJUST TO BLURB ADDRESS TAD ESTATUS /NOW HAVE PROPER BLURB ADDRESS JMS I MOVBLB /MOVE IT INTO ERROR MESSAGE -BLBLEN /PASSED BLURB LENGTH IN WORDS JMS I FILBLB /FILL IN I/O PARTICULARS JMS I DSPBLB /DISPLAY BLURB AND POSSIBLY COME BACK TCIF, CIF 00 /GOTO MONITOR FIELD TAD TRPERR /GET ERROR CODE SNA CLA /SKIP IF DRIVE PROBLEM JMP I (SNEXT) /JUMP IF READ PARITY ERROR TAD CALADR /GET USER'S ADDRESS DCA I TSYSIO/(SYSIO) /RESTORE IT TAD CALFLD /GET CALLING CDF INSTRUCTION DCA .+1 /STORE IN-LINE .-. /GOTO CALLING FIELD JMP I (SYSRETRY) /TRY, TRY AGAIN / ERROR BLURBS. PAR, TEXT " PARITY" /PARITY ERROR BLURB WRILOCK,TEXT " PROTECT" /WRITE-PROTECT ERROR BLURB SEL, TEXT " SELECT" /DRIVE NOT READY (SELECT) ERROR BLURB TIM, TEXT "TIME OUT" /TIME-OUT ERROR BLURB BLBLEN= .-TIM /LENGTH OF ERROR BLURBS DCHK, .-. /DRIVE STATUS CHECK, ETC. ROUTINE RIF /GET OUR FIELD TAD TCIF/(CIF) /MAKE INTO CIF OUR FIELD INSTRUCTION DCA TSTCIF /STORE IN-LINE TAD I (STAPINS) /GET RDE OR WRI (U) INSTRUCTION AND (RDE U) /JUST RDE AND UNIT BITS JMS TSTCHK /CHECK IF READ IS POSSIBLE TAD I (STAPINS) /GET RDE OR WRI (U) INSTRUCTION AGAIN JMS TSTCHK /CHECK IF READ (OR WRITE) IS POSSIBLE TAD I (STAPINS) /GET TAPE INSTRUCTION AND (U) /JUST UNIT BIT CLL RTR;RTR /MOVE TO LINK TAD I (SAXO) /GET EXTENDED OPERATIONS VALUE AND T3/(3) /JUST EXTENDED UNIT BITS RAL /RESTORE COMPLETE UNIT TAD (TAD TABLE) /ADD ON TABLE READ INSTRUCTION DCA GETINS /STORE IN-LINE NL2000 /GET "DCA"-"TAD" TAD GETINS /MAKE INTO TABLE WRITE INSTRUCTION DCA PUTINS /STORE IN-LINE TAD I (SBLK) /GET THE DESIRED BLOCK CIA /INVERT FOR TEST GETINS, TAD TABLE+.-. /ADD ON CURRENT BLOCK TAD OVSHT /ADD ON OVERSHOOT FACTOR SMA CLA /SKIP IF NEW BLOCK IS FORWARD JMP USEBKWD /JUST LET HARDWARE GO BACKWARDS TAD I (STAPINS) /GET TAPE INSTRUCTION AND (U) /JUST UNIT BIT CLL RTL /MOVE TO BIT[6] TAD (0104) /ADD ON DIRECT MOTION CONTROL BITS TRC /LOAD MOTION AND DIRECTION TRC /JAM IT IN TRC /ON ANY PDP-12 USEBKWD,CLA CLL /CLEAN UP TAD I (SPAGCT) /GET PAGE COUNT SNA /SKIP IF NOT FULL FIELD CALL STL /ELSE SET LINK RTL;RTL;RTL /MOVE DOWN PAGE COUNT TAD I (SBLK) /GET CURRENT BLOCK PUTINS, DCA TABLE+.-. /STORE INTO TABLE ISZ DCHK /BUMP TO GOOD RETURN TAD I (STAPINS) /GET TAPE INSTRUCTION AND (RDE U) /JUST RDE AND UNIT BITS TAD (MTB-RDE+20) /TURN INTO MTB I (U) INSTRUCTION JMP I DCHK /RETURN TSTCHK, .-. /CHECK DRIVE STATUS WITH PASSED VALUE ROUTINE DCA TSTINS /STORE IN-LINE TAD I (SAXO) /GET EXTENDED OPERATIONS VALUE TSTCIF, .-. /PREVENT LINC INTERRUPTS LINC /GOTO L...MODE AXO /LOAD EXTENDED OPERATIONS TSTINS, .-.; 0000 /DO TEST RDE OR WRI (U) TO BLOCK 0000 PDP /BACK TO GOODY MODE TSYSIO, SZA CLA /CONSTANT 7640; THIS CLEARS THE AC T3, 3 /CONSTANT 0003; THIS CAN BE SKIPPED TAD (5000) /GET STATUS TEST VALUE LMR /LOAD MAINTAINENCE REGISTER XFR /GET STATUS RTR /MOVE TAPE OK BIT TO LINK SZL CLA /SKIP IF DRIVE IS BAD JMP I TSTCHK /RETURN IF DRIVE IS OK NL0004 /TAD (WRI) /SET WRI BIT MASK AND TSTINS /GET THE BIT JMP I DCHK /TAKE FAILURE RETURN OVSHT, 14 /OVERSHOOT FACTOR TABLE, 3777 /BLOCK REMEMBERING TABLE 3777 3777 3777 3777 3777 3777 3777 PAGE / TC12 LINCTAPE SYSTEM HANDLER. FIELD 0 /WHERE THIS GENERATES *GENAD1 /SYSGEN WANTS IT HERE RELOC SBOOT /WHERE IT EXECUTES SBOOT, JMS SYSIO /CALL I/O ROUTINES TO BOOTSTRAP S7600, 7600 /TRANSFER ADDRESS; ALSO CONSTANT 7600 SBTFUN, 0+.-. /UNIT BITS WILL BE FILLED IN AT /COLD BOOTSTRAP TIME 0000 /READ IN BLOCK 0000 SWAL, SBOOT /SWITCHES /A-/L; INITIALIZED FOR BOOTSTRAP SWMX, TAD SAXO/(5000) /SWITCHES /M-/X; INITIALIZED FOR BOOTSTRAP SWY9, LMR /SWITCHES /Y-/9; INITIALIZED FOR BOOTSTRAP SOUTFLS,JMP STAPINS /OUTPUT FILE COUNT; INITIALIZED FOR BOOTSTRAP SDATE, .-. /SYSTEM DATE WORD SCRSIZE,.-. /SOFTWARE CORE SIZE WORD IFNZRO .&6-2 SWPFLD, 0200-5000 /WILL BE CDF TRANSFER FIELD /INITIALIZED FOR BOOTSTRAP TAD I STEM /GET ENDANGERED WORD DCA SAVTEM /SAVE IT TAD S100/(100) /GET SKIP TEST BIT SWAIT, LMR /SKIP ON TAPE DONE JMP SWAIT /WAIT FOR IT IFNZRO SNL CLA-. S200, SFIX&177+6000/0200 /CONSTANT 0200; INITIALIZED FOR BOOTSTRAP TAD SAVTEM /GET OLD CONTENTS DCA I STEM /RESTORE ENDANGERED WORD CIF 00 /PREVENT LINC INTERRUPTS LINC /GOTO L...MODE S3, TAC /GET TRANSFER CHECK PDP /GOTO GOODY MODE JMP SCHECK /CHECK FURTHER THERE SCDF, CDF 00 /CDF CONSTANT SRDINS, RDE /RDE CONSTANT SLOAD, JMS SYSIO /SYSTEM LOADER HAS DEFAULTS TO SAVE CORE SCORE, 0000 /CORE ARGUMENT SFUN, WRITE /NUMBER OF BLOCKS TO READ/WRITE, FIELD, UNIT SBLOCK, BINADR /STARTING BLOCK NUMBER JMP I SYSTART/(SYSTART) /START AT SYSTART,SBOOT /THIS STARTING ADDRESS SYSIO, SWMX-1 /I/O ENTRY POINT; INITIALIZED FOR BOOTSTRAP NL0002 /SET CIF BIT RDF /GET CALLING FIELD TAD SCDF/(CDF) /FORM CIF CDF RETURN FIELD DCA SDONE /STORE IN-LINE SYSRETR,TAD I SYSIO /GET TRANSFER ADDRESS DCA SKORE /STORE IN-LINE ISZ SYSIO /BUMP TO FUNCTION WORD TAD I SYSIO /GET FUNCTION WORD AND S70/(70) /JUST FIELD BITS TAD SCDF/(CDF) /FORM CDF TRANSFER FIELD DCA SWPFLD /STORE IN-LINE TAD I SYSIO /GET FUNCTION WORD AGAIN RAR /MOVE UNIT BITS OVER AND S3/(3) /ISOLATE EXTENDED UNIT BITS DCA STEM /SAVE FOR LATER TAD I SYSIO /GET FUNCTION WORD AGAIN RTL /LOW-ORDER UNIT, READ/WRITE TO BITS[10-11] AND S3/(3) /ISOLATE THEM CLL RTL /LOW-ORDER UNIT TO BIT[8], READ/WRITE TO BIT[9] TAD SRDINS/(RDE) /FORM RDE OR WRI (U) INSTRUCTION DCA STAPINS /STORE IN-LINE TAD I SYSIO /GET FUNCTION WORD AGAIN RAL /MOVE UP PAGE BITS AND S7600/(7600) /ISOLATE PAGE BITS DCA SPAGCT /SAVE AS PAGE COUNT TAD I SYSIO /GET FUNCTION WORD AGAIN AND S70/(70) /JUST TRANSFER FIELD CLL RTL;STL IAC RTL;RTL /FROM EXTENDED ADDRESSING, NOPAUSE BITS TAD STEM /ADD ON EXTENDED UNIT BITS DCA SAXO /STORE IN-LINE ISZ SYSIO /BUMP TO BLOCK NUMBER SBLKGET,TAD I SYSIO /GET BLOCK NUMBER DCA SBLK /STORE IN-LINE S100, 100 /CONSTANT 0100; LEAVE HERE FOR I/O TRAPS SNEXT, CIF 00 /HERE TO PREVENT LINC INTERRUPTS TAD SKORE /GET TRANSFER ADDRESS LINC /GOTO L...MODE TMA /LOAD TAPE MEMORY ADDRESS LDA+20; SAXO, 5000/.-.+30+.-. /LOAD AXO VALUE; INITIALIZED FOR BOOTSTRAP AXO /LOAD EXTENDED OPERATIONS BUFFER STAPINS,TAD SWPFLD/(0200-5000) /RDE OR WRI (U); INITIALIZED FOR BOOTSTRAP SBLK, JMP SFIX2 /BLOCK NUMBER; INITIALIZED FOR BOOTSTRAP LDA+20; SKORE, SWMX /LOAD ADDRESS; INITIALIZED FOR BOOTSTRAP PDP /BACK TO GOODY MODE TAD S200/(200) /UPDATE TO ENDANGERED WORD ADDRESS DCA STEM /SAVE POINTER JMP SWPFLD /CONTINUE THERE SCHECK, CLL IAC;CLA IAC RTL /FORM PARITY CHECK AND WRITE MASK AND STAPINS /NOW HAVE ((WRI INSTRUCTION)&4)!((PARITY OK)&2) SNA CLA /SKIP IF WRITING OR GOOD READ PARITY JMP SERR /ELSE BARF TAD STEM /GET NEXT BUFFER ADDRESS DCA SKORE /STASH IT TAD SPAGCT /GET PAGE COUNT TAD S7600/(-200) /DECREMENT BY ONE SNA /SKIP IF ANY LEFT TO DO JMP SDONE /JUMP IF NONE DCA SPAGCT /SAVE UPDATED PAGE COUNT ISZ SBLK /BUMP TO NEXT BLOCK S70, 70 /CONSTANT 0070 JMP SNEXT /GO DO NEXT BLOCK SDONE, .-. /WILL BE CIF CDF RETURN FIELD ISZ SYSIO /BUMP PAST BLOCK NUMBER JMP I SYSIO /RETURN TO CALLER SERR, HLT /OR 7401 IF A "HANG"-ING SYSTEM JMP SNEXT /TRY, TRY AGAIN / THE FOLLOWING CODE IS USED AT COLD-START TIME ONLY. IT IS LOADED INTO 004150 / BY MANUAL BOOTSTRAP OR 007750 BY THE SLURP BOOTSTRAP. IFNZRO .&177-150 SFIX, PDP /GOTO GOODY MODE SPAGCT, 1^200 /PAGE COUNT; INITIALIZED FOR BOOTSTRAP SGETINS,TAD SBOOT /GET A WORD SAVTEM, DCA I SWAL /TEMPORARY; PUT A WORD STEM, ISZ SGETINS /TEMPORARY; BUMP TO NEXT INPUT ISZ SWAL /DONE ALL YET? SPARM, JMP SGETINS /EQUALS PARAMETER HERE; NO, KEEP GOING SFILES, TAD SLOAD/(JMS SYSIO) /FILE LIST; GET LOST INITIAL JUMP VALUE DCA I S7600/(SBOOT) /RESTORE IT JMP I SKORE/(SWMX) /CONTINUE THERE / THE FOLLOWING CODE IS USED TO DETERMINE WHICH UNIT WE'RE BOOTSTRAPPED TO, / THEN READ IN THE KEYBOARD MONITOR ON THAT UNIT. SFIX2, DCA S200/(200) /FIXUP PESKY LOCATION XFR /GET UNIT CONFIGURATION SLOOK, SMA /FOUND OUR UNIT? JMP SGOTIT /YES, GO USE IT ISZ SBTFUN /NO, BUMP TO NEXT UNIT ISZ SBUNIT /BUMP KEYBOARD READ FUNCTION RAL /MOVE UP NEXT BIT JMP SLOOK /TRY FOR NEXT BIT SGOTIT, JMS SYSIO /CALL I/O ROUTINES 0000 /TRANSFER ADDRESS OF KEYBOARD MONITOR SBUNIT, 17^100+.-. /UNIT BITS FILLED IN 0001 /BLOCK 0001 JMP I .+1/(MONSTRT) /GO STARTUP THE MONITOR MONSTRT /THROUGH HERE RELOC /TURN OFF RELOCATION $ /THAT'S ALL FOLK!