/ KL8 CONSOLE OVERLAY FILE / LAST EDIT: 08-APR-1987 23:00:00 CJL / MAY BE ASSEMBLED WITH '/J' SWITCH SET. / THIS IS THE CONSOLE OVERLAY FILE FOR KL8 TYPE CONSOLE SUPPORT WITH / STANDARD BUFFERED LPT: AND I/O ERROR HANDLING CAPABILITIES. / ASSEMBLY PARAMETERS. / SETTING OVTYPE=1 GENERATES A STANDARD OVERLAY (DEVICE 03, 04 CONSOLE / AND DEVICE 65, 66 LPT:). / SETTING OVTYPE=2 GENERATES A NON-STANDARD OVERLAY (DEVICE 03, 04 CONSOLE / AND DEVICE 40, 41 LPT:). / SETTING OVTYPE=10 GENERATES A DECMATE OVERLAY (DEVICE 03, 04 CONSOLE / AND DEVICE 32, 33 LPT:). / SETTING OVTYPE=60 GENERATES A NON-STANDARD OVERLAY (DEVICE 40, 41 CONSOLE / AND DEVICE 65, 66 LPT:). / SETTING OVTYPE=61 GENERATES A NON-STANDARD OVERLAY (DEVICE 40, 41 CONSOLE / AND DEVICE 03, 04 LPT:). / ADDITIONAL TYPES CAN BE DEFINED FOR OTHER DEVICE CODES. / SETTING LPBUFF=1 GENERATES AN OVERLAY WITH LPT: BUFFERING ENABLED. / SETTING LPBUFF=0 GENERATES AN OVERLAY WITH LPT: BUFFERING DISABLED. / SETTING LCASE=1 GENERATES AN OVERLAY WITH LOWER-CASE CHARACTERS PASSED. / SETTING LCASE=0 GENERATES AN OVERLAY WITH LOWER-CASE FOLDED TO UPPER-CASE. / SETTING VT8LPT=1 GENERATES INTERRUPT ENABLE FOR A DEVICE 66 LPT: / SHARING INTERRUPT CONTROL WITH THE VT-8/E KEYBOARD (DEVICE 43). / SETTING VT8LPT=0 GENERATES INTERRUPT ENABLE FOR DEVICE 66 ALONE. / SETTING ONEWAY=1 ASSUMES A HARDWARE HANDSHAKING (CENTRONICS, ETC.) TYPE / INTERFACE TO THE LPT: WHICH HAS NO INPUT HANDLING. / SETTING ONEWAY=0 ASSUMES A SOFTWARE HANDSHAKING (<^S>/<^Q>) TYPE INTERFACE / WITH SUITABLE INPUT HANDLING. / SET CUSTOM PARAMETERS HERE. / DKEY= 43 /VT-8/E KEYBOARD IOT CODE / IRATE= 14 /4800 BAUD SERIAL PRINTER ON DECMATE, ETC. / KEY= 03 /KEYBOARD CODE / LCASE= 1 /LOWER-CASE CHARACTERS ALLOWED / LIN= 65 /LPT: INPUT CODE / LPBUFF= 1 /ENABLE LPT: BUFFERING / LPT= 66 /LPT: OUTPUT CODE / NMCH1= "K^100+"L-300 /FIRST NAME PAIR / NMCH2= "8^100 /SECOND NAME PAIR / NMCH3= 0000 /THIRD NAME PAIR / NOLIE= 1 /LIEIOT DOES NOT EXIST (USUALLY LPT: IS OUTPUT ONLY) / NOLOE= 1 /LPEIOT DOES NOT EXIST (INTERRUPTS ENABLED WITH / /DKIEIOT SHARED WITH VT-8/E KEYBOARD) / ONEWAY= 1 /LPT: OUTPUT ONLY / OUT= 04 /CONSOLE OUTPUT CODE / OVTYPE= 01 /GENERATE STANDARD OVERLAY / VT8LPT= 1 /ALLOW VT-8/E KEYBOARD AND LPT: INTERRUPTS / CONDITIONAL ASSEMBLY PARAMETERS. IFNDEF OVTYPE /STANDARD OVERLAY TYPE / "KL8" OVERLAY CONDITIONALS. IFZERO OVTYPE-1 < IFNDEF DKEY /VT-8/E KEYBOARD CODE IFNDEF KEY /KEYBOARD CODE IFNDEF LIN /LPT: INPUT CODE IFNDEF LPT /LPT: OUTPUT CODE IFNDEF NMCH1 /FIRST NAME PAIR IFNDEF NMCH2 /SECOND NAME PAIR IFNDEF NMCH3 /THIRD NAME PAIR IFNDEF ONEWAY /ONE-WAY LPT: HANDLING IFNDEF OUT /CONSOLE OUTPUT CODE IFNDEF VT8LPT /VT-8/E LPT: INTERRUPTS / LPT: INTERRUPT ENABLE DEFINITIONS. IFNDEF NOLIE /LIEIOT DOES/DOES NOT EXIST IFNDEF NOLOE /LPEIOT DOES/DOES NOT EXIST > / "KL8SP" OVERLAY CONDITIONALS. IFZERO OVTYPE-2 < IFNDEF KEY /KEYBOARD CODE IFNDEF LIN /LPT: INPUT CODE IFNDEF LPT /LPT: OUTPUT CODE IFNDEF NMCH1 /FIRST NAME PAIR IFNDEF NMCH2 /SECOND NAME PAIR IFNDEF NMCH3 /THIRD NAME PAIR IFNDEF ONEWAY /TWO-WAY LPT: HANDLING IFNDEF OUT /CONSOLE OUTPUT CODE IFNDEF VT8LPT /NO VT-8/E LPT: INTERRUPTS / LPT: INTERRUPT ENABLE DEFINITIONS. IFNDEF NOLIE /LIEIOT DOES/DOES NOT EXIST IFNDEF NOLOE /LPEIOT DOES/DOES NOT EXIST > / "KLMATE" OVERLAY CONDITIONALS. IFZERO OVTYPE-10 < IFNDEF IRATE /4800 BAUD LPT: BAUD RATE IFNDEF KEY /KEYBOARD CODE IFNDEF LIN /LPT: INPUT CODE IFNDEF LPT /LPT: OUTPUT CODE IFNDEF LSBIOT /SET LPT: BAUD RATE IFNDEF NMCH1 /FIRST NAME PAIR IFNDEF NMCH2 /SECOND NAME PAIR IFNDEF NMCH3 /THIRD NAME PAIR IFNDEF ONEWAY /TWO-WAY LPT: HANDLING IFNDEF OUT /CONSOLE OUTPUT CODE IFNDEF VT8LPT /NO VT-8/E LPT: INTERRUPTS / LPT: INTERRUPT ENABLE DEFINITIONS. IFNDEF NOLIE /LIEIOT EXISTS IFNDEF NOLOE /LPEIOT EXISTS > / "KL40" OVERLAY CONDITIONALS. IFZERO OVTYPE-60 < IFNDEF DKEY /VT-8/E KEYBOARD CODE IFNDEF KEY /KEYBOARD CODE IFNDEF LIN /LPT: INPUT CODE IFNDEF LPT /LPT: OUTPUT CODE IFNDEF NMCH1 /FIRST NAME PAIR IFNDEF NMCH2 /SECOND NAME PAIR IFNDEF NMCH3 /THIRD NAME PAIR IFNDEF ONEWAY /IS ONE-WAY LPT: HANDLING IFNDEF OUT /CONSOLE OUTPUT CODE IFNDEF VT8LPT /VT-8/E LPT: INTERRUPTS / LPT: INTERRUPT ENABLE DEFINITIONS. IFNDEF NOLIE /LIEIOT DOES/DOES NOT EXIST IFNDEF NOLOE /LPEIOT DOES/DOES NOT EXIST > / "KL40SP" OVERLAY CONDITIONALS. IFZERO OVTYPE-61 < IFNDEF KEY /KEYBOARD CODE IFNDEF LIN /LPT: INPUT CODE IFNDEF LPT /LPT: OUTPUT CODE IFNDEF NMCH1 /FIRST NAME PAIR IFNDEF NMCH2 /SECOND NAME PAIR IFNDEF NMCH3 /THIRD NAME PAIR IFNDEF ONEWAY /TWO-WAY LPT: HANDLING IFNDEF OUT /CONSOLE OUTPUT CODE IFNDEF VT8LPT /NO VT-8/E LPT: INTERRUPTS / LPT: INTERRUPT ENABLE DEFINITIONS. IFNDEF NOLIE /LIEIOT DOES/DOES NOT EXIST IFNDEF NOLOE /LPEIOT DOES/DOES NOT EXIST > / DEFAULT ("CATCH-ALL") PARAMETERS. IFNDEF DKEY /VT-8/E KEYBOARD CODE IFNDEF IRATE /4800 BAUD SERIAL LPT: RATE IFNDEF KEY /KEYBOARD CODE IFNDEF LCASE /LOWER-CASE CHARACTERS ALLOWED IFNDEF LIN /LPT: INPUT CODE IFNDEF LPBUFF /LPT: BUFFERING ENABLED IFNDEF LPT /LPT: OUTPUT CODE IFNDEF LSBIOT /NO SERIAL LPT: RATE SETTING IFNDEF NMCH1 /FIRST NAME PAIR IFNDEF NMCH2 /SECOND NAME PAIR IFNDEF NMCH3 /THIRD NAME PAIR IFNDEF NOLIE /NO LPT: INPUT INTERRUPTS IFNDEF NOLOE /LPEIOT ENALES LPT: INTERRUPTS IFNDEF ONEWAY /TWO-WAY LPT: HANDLING IFNDEF OUT /CONSOLE OUTPUT CODE IFZERO LPT-66 < IFNDEF VT8LPT /NO SHARED INTERRUPT HANDLING > IFNDEF VT8LPT /VT-8/E LPT: IF DEVICE 66 // P?S/8 DEFINITIONS. ADRLST= 7603 /ZAP ADDRESS LIST CALADR= 0020 /CALLING ADDRESS CALFLD= 0021 /CALLING FIELD CCHECK= 2343 /<^C> CHECK ROUTINE CHKCNT= 0043 /CHECKSUM COUNT CHKPTR= 0044 /CHECKSUM POINTER CNTLST= 7615 /ZAP CONTENTS LIST CONINT= 0000 /CONSOLE INTERRUPT LOCATION CONOFF= 0100 /CONSOLE OFF DEVWRD= 0104 /DEVICE WORD DSPBLB= 0024 /BLURB DISPLAY ERRTRP= 0046 /ERROR TRAP ESTATUS=0077 /ERROR STATUS FILBLB= 0023 /BLURB FILL FUDWRD= 0105 /FUDGE WORD HIDWRD= 7600 /SYSTEM HANDLER ID NUMBER WORD INCON= 0031 /CONSOLE INPUT INFLAG= 0025 /CONSOLE INPUT EVENT FLAG INTFLGS=0002 /INTERRUPT FLAGS INTLST= 0003 /INTERRUPT LIST POINTER IOTRAP= 0045 /I/O TRAP IOWAIT= 0047 /I/O WAIT LCMODE= 0006 /LPT: CASE LINFLAG=0030 /LPT: INPUT EVENT FLAG LPMODE= 0004 /LPT: BUFFERING MODE LPTFLAG=0027 /LPT: OUTPUT EVENT FLAG MOVBLB= 0022 /MOVE BLURB POINTER OUTCON= 0033 /CONSOLE OUTPUT OUTFLAG=0026 /CONSOLE OUTPUT EVENT FLAG OUTLPT= 0035 /LOGICAL LPT: OVID= 0106 /OVERLAY ID AREA OVRCOMM=2511 /MONITOR ONCE-ONLY REJOIN ADDRESS OVRWRD= 0111 /OVERLAY TYPE WORD P7JMP= 2337 /OUTPUT JUMP INSTRUCTION P7OUT= 2335 /OUTPUT WAITING ADDRESS P7TLS= 2340 /OUTPUT INSTRUCTION HERE P7TSF= 2336 /OUTPUT SKIP INSTRUCTION HERE SBOOT= 7600 /MONITOR RESTARTS HERE SBTFUN= 7602 /BOOTSTRAP FUNCTION WORD SCRSIZE=7611 /SYSTEM CORE SIZE WORD SYSIO= 7640 /SYSTEM I/O ADDRESS TRAPIO= 1041 /I/O TRAP TRPBLK= 0113 /TRAP BLOCKS ARE HERE TRPERR= 1200 /ERROR TRAP TTY= 0003 /BASIC TTY: DEVICE CODE TTYTST= 2506 /TTY: TIME-OUT ROUTINE IN KEYBOARD MONITOR VTMODE= 0005 /VT-8/E MODE WORD WAITIO= 1110 /I/O WAIT TRAP XIOMON= 0102 /MONITOR STARTUP ADDRESS WITHIN OVERLAY ZAPLST= 7627 /I/O ZAP CONTENTS LIST // END OF P?S/8 DEFINITIONS. / IOT DEFINITIONS. / CONSOLE KEYBOARD DEFINITIONS. KIEIOT= KEY^10+6005 /KEYBOARD INTERRUPT ENABLE PER AC[11] KRBIOT= KEY^10+6006 /READ KEYBOARD BUFFER, CLEAR THE FLAG KSFIOT= KEY^10+6001 /SKIP ON (AND CLEAR IF 6120) KEYBOARD FLAG KTIIOT= KEY^10+6003 /KEYBOARD TEST INSTRUCTION / CONSOLE OUTPUT DEFINITIONS. TCFIOT= OUT^10+6002 /CLEAR TTY: FLAG TFLIOT= OUT^10+6000 /SET TTY: FLAG TIEIOT= OUT^10+6005 /OUTPUT INTERRUPT ENABLE PER AC[11] (FOR 6120) TLSIOT= OUT^10+6006 /OUTPUT CHARACTER, CLEAR FLAG TSFIOT= OUT^10+6001 /SKIP ON (CLEAR IF 6120) OUTPUT FLAG / LPT: INPUT DEFINITIONS. ISLI= ONEWAY-1 /7777 IF LPT: INPUT, ELSE 0000 ISLIE= NOLIE-1&ISLI /7777 IF LIEIOT EXISTS, ELSE 0000 LINNOP= ONEWAY^NOP /0000 IF LPT: INPUT, ELSE 7000 LIEIOT= LIN^10+6005&ISLIE /LPT: INPUT INTERRUPT ENALE PER AC[11] LIRBIOT=LIN^10+6006&ISLI /READ LPT: INPUT, CLEAR FLAG (IF NOT 6120) LISFIOT=LIN^10+6001&ISLI!LINNOP /SKIP ON (CLEAR FLAG IF 6120) LPT: INPUT FLAG / LPT: OUTPUT DEFINITIONS. ISLOE= NOLOE-1 /7777 IF LPEIOT EXISTS, ELSE 0000 LCFIOT= LPT^10+6002 /CLEAR LPT: OUTPUT FLAG LLSIOT= LPT^10+6006 /OUTPUT LPT: CHARACTER, CLEAR FLAG (IF NOT 6120) LPEIOT= LPT^10+6005&ISLOE /LPT: OUTPUT INTERRUPT ENABLE PER AC[11] LSFIOT= LPT^10+6001 /SKIP ON (CLEAR FLAG IF 6120) LPT: OUTPUT FLAG / VT-8/E KEYBOARD DEFINITIONS. DKCFIOT=DKEY^10+6000 /CLEAR VT-8/E KEYBOARD FLAG DKIEIOT=DKEY^10+6005 /INTERRUPT ENABLE PER AC[11] ON VT-8/E, LPT: DKSFIOT=DKEY^10+6001 /SKIP ON VT-8/E KEYBOARD FLAG / KEYBOARD MONITOR I/O DEFINITIONS. MONKCC= TTY^10+6002 /CLEAR KEYBOARD FLAG IN KEYBOARD MONITOR MONKRB= TTY^10+6006 /READ KEYBOARD BUFFER, CLEAR IN MONITOR MONKRS= TTY^10+6004 /READ KEYBOARD BUFFER IN KEYBOARD MONITOR MONKSF= TTY^10+6001 /SKIP ON KEYBOARD FLAG IN KEYBOARD MONITOR MONTLS= TTY+1^10+6006 /KEYBOARD MONITOR OUTPUT CHARACTER, CLEAR FLAG MONTSF= TTY+1^10+6001 /SKIP ON OUTPUT FLAG IN KEYBOARD MONITOR / OTHER DEFINITIONS. BCLI= 1560 /BIT CLEAR IMMEDIATE BUFSIZE=2000 /SIZE OF LPT: BUFFER CIF10= CIF 10 /CIF CONSTANT COM= 0017 /COMPLEMENT AC ESF= 0004 /LOAD SPECIAL FUNCTIONS REGISTER JMPIC= JMP I . /CURRENT PAGE JMP INDIRECT INSTRUCTION JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION LINC= 6141 /GOTO LINC MODE NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL0010= CLA IAC RAL RAR /LOAD AC WITH 0010 **** ON 6120 ONLY **** NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 PDP= 0002 /GOTO PDP-8 MODE SFA= 0024 /READ SPECIAL FUNCTIONS REGISTER SYSINST=SYSIO&177+JMSC /I/O CALL INSTRUCTION DEFINITION / FILE HEADER FOR CONSOLE UTILITY VALIDATION. *NMCH1 /FIRST TWO DEVICE NAME CHARACTERS *NMCH2 /SECOND TWO DEVICE NAME CHARACTERS *NMCH3 /THIRD TWO DEVICE NAME CHARACTERS / THE CONSOLE OVERLAY IMAGE STARTS HERE. IT EXTENDS FROM 0000-5777 ON / THE SYSTEM DEVICE, BUT IS VIRTUALLY LOADED IN THREE PARTS: 0000-1777, / 2000-3777, 4000-5777. THE PORTION FROM 0000-1777 WILL BE INITIALLY / BROUGHT IN WITH THE CONSOLE UTILITY ITSELF FOR USE WITH /U LOADING OF / BINARY FILES. WHEN CALCULATING THE CHECKSUM, THE PORTION FROM 0000-2577 / WILL BE LOADED. *0 /START AT THE BEGINNING / THE CONSOLE INTERRUPT ROUTINE IS ENTERED HERE. EVENT FLAGS WILL BE SET / FOR THE BENEFIT OF THE NORMAL NON-INTERRUPT CONSOLE ROUTINES. THE SOLE / PURPOSE IS TO CLEAR THE INTERRUPT FOR THE BENEFIT OF THE USER. IT IS STILL / NECESSARY TO CALL THE I/O ROUTINES IN THE NORMAL MANNER TO DO THE ACTUAL / I/O. THOUGH IT NORMALLY CAUSES THE RESPECTIVE FLAGS TO CLEAR, THE / CONSOLE INTERRUPT HANDLER COULD CONCEIVABLY MISS AN INTERRUPT FLAG / BELONGING TO THE OVERLAY. THEREFORE THE USER PROGRAM SHOULD ATTEMPT TO / NOT DUPLICATE INTERRUPT HANDLING FOR THE DEVICES SUPPORTED BY THE OVERLAY, / AS THIS COULD LEAD TO ANOMALOUS RESULTS. IT IS SUGGESTED THAT THE USER'S / PROGRAM BE TAILORED TO THE SYSTEM AT HAND AND SHOULD "TIME-OUT" ANY / STRAY INTERRUPTS FROM OTHER DEVICES SUSPECTED OF POSSIBLY BEING SUPPORTED / BY THE OVERLAY. THE OVERLAY INTERRUPT HANDLER SHOULD ALWAYS BE CALLED / BEFORE TESTING ANY FLAG POSSIBLY ASSOCIATED WITH THE OVERLAY. THE OVERLAY / INTERRUPT ROUTINES WILL CHECK ALL OVERLAY ASSOCIATED FLAGS EACH TIME THE / OVERLAY INTERRUPT HANDLER IS CALLED, AND SET STATUS BITS IN THE AC UPON / INTERRUPT EXIT. CONINT, .-. /CONSOLE INTERRUPT ENTRY POINT JMP I [INTCON] /GO HANDLE IT THERE / THE FOLLOWING LOCATIONS ARE PROVIDED TO ALLOW INTERRUPT-DRIVEN PROGRAMS / THE ABILITY TO INTERACT WITH THE OVERLAY BETTER. INTFLGS,.-. /INTERRUPT FLAGS INTLST, INTDEV /INTERRUPT DEVICE LIST POINTER / THE FOLLOWING LOCATION CONTROLS WHETHER OR NOT LPT: BUFFERING OCCURS. / SETTING LPMODE=1 PREVENTS BUFFERING, SETTING LPMODE=0 ALLOWS BUFFERING TO / A CHARACTER. IF BUFFERING IS ALLOWED, LPMODE WILL BE NEGATIVE / IMMEDIATELY AFTER SENDING A 7777 TO THE LPT: ROUTINE. THIS WILL STILL / ALLOW BUFFERING, BUT WILL TEMPORARILY SUSPEND IT WHEN STARTING UP A NEW / PROGRAM, SO THAT THE PROGRAM CAN TIME OUT THE EXISTENCE OF THE LPT: / HARDWARE. THE LPMODE VALUE WILL BE THE TWO'S COMPLEMENT OF THE CURRENT / COUNT OF CHARACTERS STILL LEFT TO BE SENT UNTIL FULL BUFFERING TO A / IS TO BE REENABLED. IF LPMODE=1, THEN THIS WILL NOT OCCUR. LPMODE, 1-LPBUFF /LPT: BUFFERING MODE; 1=NO BUFFERING ALLOWED / THE FOLLOWING WORD IS RESERVED FOR VT-8/E, ETC. OVERLAY STRUCTURES WHICH / REQUIRE MODE SWITCHING ON INTERRUPT, ETC. IF THE USER PROGRAM DISCOVERS / THAT THE VT-8/E VIDEO INTERRUPT IS BEING HANDLED BY SEARCHING THE INTERRUPT / DEVICE LIST FOR AN EXTRA DEVICE, AND THAT DEVICE HAPPENS TO BE THE VT-8/E / VIDEO INTERFACE, THEN THIS WORD CAN BE MODIFIED TO ALLOW USER GRAPHICS / MODE, ETC. TO BE APPENDED TO THE INTERRUPT HANDLER. VTMODE, .-. /VT-8/E MODE WORD / THE FOLLOWING WORD CONTROLS THE DISPOSITION OF LOWER-CASE CHARACTERS TO / BE OUTPUT TO THE LOGICAL LPT: HANDLER. IF LCMODE=0 THEN THESE CHARACTERS / WILL BE OUTPUT AS IS; IF LCMODE=7740 THEN THEY WILL BE "FOLDED" TO THEIR / UPPER-CASE EQUIVALENTS. LCMODE, 1-LCASE^7740 /LOWER-CASE MODE; 7740=FOLD TO UPPER LINCHAR,.-. /LPT: INPUT CHARACTER *10 /GET TO AUTO-INDEX AREA CXR1, .-. /AUTO-INDEX NUMBER ONE CXR2, .-. /AUTO-INDEX NUMBER TWO INCHAR, .-. /LATEST INPUT CHARACTER KEYTMP, .-. /KEYBOARD INTERRUPT TEMPORARY LPTAC, .-. /LPT: AC TEMPORARY LPTCHAR,.-. /LPT: CHARACTER TEMPORARY OUTAC, .-. /OUTPUT ROUTINE AC TEMPORARY OUTCHR, .-. /OUTPUT CHARACTER TEMPORARY *20 /GET PAST AUTO-INDEX AREA / THE FOLLOW LOCATIONS ARE USED TO HOLD THE CALLER'S ADDRESS AND FIELD. THEY / ARE USED BOTH BY THE TRAP BLOCK ROUTINES AND THE ERROR BLURB HANDLING / ROUTINES OF THE OVERLAY. CALADR, .-. /CALLING ADDRESS CALFLD, .-. /CALLING FIELD / THE FOLLOWING ARE ROUTINE POINTERS FOR THE TRAP BLOCK ROUTINES. / THEY ARE EXPECTED TO HANDLE THEIR RESPECTIVE TASKS BY THE / ERROR RECOVERY ROUTINES CONTAINED IN THE PARTICULAR TRAP BLOCKS OF / THE CURRENTLY CONFIGURED SYSTEM. MOVBLB, BLBMOVE /POINTER TO ERROR BLURB MOVE ROUTINE FILBLB, BLBFILL /POINTER TO ERROR BLURB FILL ROUTINE DSPBLB, BLBDISPLAY /POINTER TO ERROR BLURB DISPLAY ROUTINE / THE FOLLOWING ARE EVENT FLAGS FOR THE INTERRUPT HANDLERS OF THE DEVICES / SUPPORTED BY THE OVERLAY. IT IS POSSIBLE TO REFERENCE THEM DIRECTLY FROM / A REAL-TIME PROGRAM, BUT IT IS RECOMMENDED THAT THEY BE CLEARED BY CALLING / THE APPROPRIATE OVERLAY ROUTINE ESPECIALLY THE LPT: INPUT FLAG. THIS FLAG / IS USED TO ARBITRATE OUTPUT FLOW WITHIN THE LPT: ROUTINE ITSELF. UNLESS / THE USER IS THOROUGHLY FAMILIAR WITH THE INNER STRUCTURE OF THE LPT: / ROUTINE, IT IS BEST LEFT TO ITSELF! INFLAG, 0 /CONSOLE INPUT INTERRUPT FLAG OUTFLAG,0 /CONSOLE OUTPUT INTERRUPT FLAG LPTFLAG,0 /LPT: OUTPUT INTERRUPT FLAG LINFLAG,0 /LPT: INPUT INTERRUPT FLAG / THE FOLLOWING ARE THE MAIN ENTRY POINTS FOR THE CONSOLE AND LPT: ROUTINES. INCON, .-. /CONSOLE INPUT ROUTINE JMP I [CONIN] /GO HANDLE IT THERE OUTCON, .-. /CONSOLE OUTPUT ROUTINE JMP I [CONOUT] /GO HANDLE IT THERE OUTLPT, .-. /LPT: OUTPUT ROUTINE JMP I [LPTOUT] /GO HANDLER IT THERE EMPTPTR,.-. /BUFFER EMPTYING POINTER EMPTR, .-. /TEMPORARY EMPTYING POINTER FILLPTR,.-. /BUFFER FILLING POINTER LSTATUS,0 /LPT: STATUS / THE FOLLOWING WORDS ARE USED BY THE CONSOLE UTILITY CODE TO DETERMINE THE / CHECKSUMMED REGION OF THE OVERLAY. DUE TO RESTRICTIONS OF THE UTILITY, / THIS REGION MUST BE LOCATED BETWEEN 0000 AND 2577. CHKCNT, CONOFF+1-ENDROM /CHECKSUM COUNT CHKPTR, CONOFF+1 /CHECKSUM POINTER / THE FOLLOWING ARE LINKAGE POINTERS PROVIDED FOR THE TRAP BLOCK ROUTINES. IOTRAP, JMP I [TRAPIO&177+TRPAGE] /GO HANDLE I/O CALLS THERE ERRTRP, JMP I [TRPERR&177+TRPAG2] /GO HANDLE I/O ERRORS THERE IOWAIT, JMP I [WAITIO&177+TRPAGE] /GO WAIT FOR I/O TO COMPLETE THERE 0 /RESERVED FOR ADDITIONAL HANDLER INTERCEPT / THE FOLLOWING WORD IS USED TO INDICATE INITIAL RELOADING OF THE OVERLAY. / ANY CLEANUP CAUSED BY RELOADING OF THE OVERLAY IS GOVERNED BY THE / VALUE OF THIS WORD. THE TRAP BLOCKS WILL BE RELOADED IF THIS WORD IS -1. INITSW, -1 /FIRST TIME SINCE RELOAD SWITCH / THE INTERRUPT ROUTINE EXITS HERE. INTRET, .-. /WILL BE CIF CDF RETURN FIELD JMP I CONINT /RETURN TO CALLER / THE CONSOLE TURNOFF ROUTINE EXITS HERE. OFFRET, .-. /WILL BE CIF CDF RETURN FIELD JMP I CONOFF /RETURN TO CALLER / THE LPT: ROUTINE EXITS HERE. LPTRET, .-. /WILL BE CIF CDF RETURN FIELD JMP I OUTLPT /RETURN TO CALLER / THE INPUT ROUTINE RETURNS HERE. INRET, .-. /WILL BE CIF CDF RETURN FIELD JMP I INCON /RETURN TO CALLER / THE OUTPUT ROUTINE RETURNS HERE. OUTRET, .-. /WILL BE CIF CDF RETURN FIELD JMP I OUTCON /RETURN TO CALLER / PRINTER BAUD RATE VARIABLE. BAUDRAT,IRATE /HOLDS PRINTER BAUD RATE VALUE ZBLOCK 77-. /EMPTY SPACE ESTATUS,.-. /ERROR STATUS STORED HERE DURING ERROR RECOVERY / THE FOLLOWING ENTRY IS USED FOR ANY HOUSEKEEPING NEEDED BY / THE OVERLAY ROUTINES WHEN THE OVERLAY IS REQUESTED TO SHUT DOWN / BY VARIOUS PROGRAMS SUCH AS "BIN" ETC., WHICH CAN'T FUNCTION DURING / DMA, ETC. CAUSED BY VARIOUS VERSIONS OF THE OVERLAY. CONOFF, .-. /CONSOLE OFF ROUTINE JMP I [OFFCON] /HANDLE IT THERE / THE FOLLOWING IS THE SPECIAL ENTRY POINT FOR THE KEYBOARD MONITOR. IT IS / DELIBERATELY PLACED WITHIN THE "ROM" AREA (WHICH STARTED ONE WORD AGO) / AS A DELIBERATE MEASURE TO CAUSE RELOAD IN CASE THE OVERLAY IS PARTIALLY / CLOBBERED, BUT NOT WITHIN THE "ROM" AREA. SHOULD THE MONITOR INITIALIZATION / FAIL TO COMPLETE, THIS LOCATION WILL BE NON-ZERO, THUS FURTHER ATTEMPTS / TO REBOOT THE SYSTEM WILL RELOAD THE OVERLAY. THIS ENTRY WILL INITIALIZE / THE MONITOR'S CONSOLE ROUTINES TO CALL THE OVERLAY, AND WILL INTERCEPT / ALL SYSTEM READ/WRITE I/O ACCORDING TO THE DICTATES OF THE TRAP BLOCKS. XIOMON, 0 /KEYBOARD MONITOR INITIALIZATION ENTRY POINT JMP I [MONINIT] /GO HANDLE IT THERE / THE FOLLOWING WORD WILL EVENTUALLY CONTAIN THE ID VALUE FOR THE / PARTICULAR READ/WRITE I/O SYSTEM. THIS VALUE IS INCLUDED IN THE CHECKSUM / FOR THE "ROM" AREA AND SHOULD BE SET TO ZERO INITIALLY. DEVWRD, 0 /WILL BE HARDWARE ID NUMBER NOPUNCH /FOOL THE ASSEMBLER / THE FOLLOWING WORD IS PROVIDED TO "KLUDGE" THE CHECKSUM TO A UNIQUE VALUE / TO PREVENT INCORRECT MONITOR/OVERLAY LINKAGE WHEN BOOTING TO A NEW / SYSTEM DEVICE/OVERLAY COMBINATION. THE OVERLAY TYPE*100+HARDWARE ID# / SHOULD BE THE TOTAL CHECKSUM VALUE (INVERTED). FUDWRD, .-. /WILL BE CHANGED AS NECESSARY / OVERLAY ID NAME FIELD. / THE FOLLOWING WORDS WILL BE UPDATED FROM THE BINARY OVERLAY FILES' / SPECIAL ORIGIN SETTINGS IN THEIR HEADERS. OVID, NMCH1 /FIRST PAIR OF DEVICE NAME CHARACTERS NMCH2 /SECOND PAIR OF DEVICE NAME CHARACTERS NMCH3 /THIRD PAIR OF DEVICE NAME CHARACTERS ENPUNCH /UN-FOOL THE ASSEMBLER *. /ESTABLISH CURRENT ORIGIN AGAIN / THE FOLLOWING WORD WILL BE USED TO CALCULATE THE CHECKSUM FOR THE / OVERLAY AND WILL BE ITS FINAL CHECKSUM VALUE. IT SHOULD CONTAIN THE / UNIQUE OVERLAY TYPE NUMBER*100. OVRWRD, OVTYPE^100 /OVERLAY TYPE WORD PAGE / MONITOR INITIALIZATION STARTS HERE. MONINIT,TAD INITSW /GET FIRST TIME SWITCH SZA CLA /SKIP IF NOT FIRST TIME JMS I (TRPINIT) /ELSE RELOAD THE TRAP BLOCKS JMS I [SETFLD] /SET OUR DATA FIELD TAD (ADRLST&177+TRPAGE-1) /SETUP DCA CXR1 /ADDRESS POINTER TAD (ZAPLST&177+TRPAGE-1) /SETUP DCA CXR2 /REPLACEMENT POINTER NL7776 /SETUP THE DCA INCON /ZAPPING COUNT IOZAPLP,TAD I CXR1 /GET AN ADDRESS TO ZAP SNA /END OF A LIST? JMP IOZAPEND /YES DCA OUTLPT /NO, STASH THE POINTER TAD I CXR2 /GET A REPLACEMENT VALUE DCA OUTCON /STASH IT TAD OUTCON /GET IT BACK TAD (-CIF10) /COMPARE TO MAGIC VALUE SZA CLA /SKIP IF IT MATCHES JMP IOZAPOK /JUMP IF NOT RIF /GET OUR FIELD TAD [CDF] /FORM CDF OUR FIELD IAC /TAD (CIF-CDF) /MAKE IT CIF OUR FIELD DCA OUTCON /SAVE AS NEW REPLACEMENT VALUE IOZAPOK,CDF 00 /GO TO FIELD ZERO TAD OUTCON /GET REPLACEMENT VALUE DCA I OUTLPT /ZAP IT IN JMS I [SETFLD] /BACK TO OUR FIELD JMP IOZAPLP /KEEP GOING IOZAPEN,TAD (MONADR-1) /SETUP THE DCA CXR1 /MONITOR ZAP LIST TAD (MONZAP-1) /SETUP THE DCA CXR2 /MONITOR CONTENTS LIST ISZ INCON /DONE BOTH LISTS? JMP IOZAPLP /NO, GO DO MONITOR ZAPS ISZ INITSW /FIRST TIME? JMP INITNORM /NO, JUST KEEP GOING JMS I (INITEST) /GO PROVE THE CONSOLE HARDWARE EXISTS / CLEAR EVERYTHING UPON OVERLAY RELOAD HERE. JMS I (CLEAR) /DO CLEAR OPERATIONS NOW INITNOR,DCA INITSW /CLEAR THE SWITCH JMS I (INTSET) /ENABLE DEVICE INTERRUPTS JMS I (PDP12ENABLE) /ENABLE PDP-12 INTERRUPTS TAD BAUDRATE /GET PRINTER BAUD RATE FOR DECMATE LSBIOT /SET THE BAUD RATE NOP /JUST IN CASE CLA /CLEAN UP TAD (-10) /SETUP THE DCA INCON /TIME-OUT COUNTER OUTTST, TSFIOT /FLAG UP? JMP OUTIME /NO, TIME IT OUT TFLIOT /RESET IT FOR DECMATE JMP OUTCOMMON /CONTINUE THERE OUTIME, ISZ OUTLPT /WAITED ENOUGH? JMP OUTTST /NO, KEEP GOING ISZ INCON /WAITED TOO LONG? JMP OUTTST /NO, KEEP GOING TLSIOT /YES, SET THE FLAG NOW OUTCOMM,DCA XIOMON /RESET "ROM" LOCATION NL7775 /-3 TAD INCHAR /COMPARE TO LATEST INPUT AND [177] /JUST SEVEN BITS SNA CLA /SKIP IF NOT <^C> NL7777 /ELSE SET <^C> INDICATOR CIF CDF 00 /GOING TO FIELD 0 JMP I (OVRCOMMON) /RETURN TO THE MONITOR ONCE-ONLY CODE / KEYBOARD MONITOR REPLACEMENT ADDRESSES. MONADR, P7TSF /WAS TSFIOT P7JMP /WAS JMP I P7OUT P7TLS /WAS TLSIOT CCHECK+2 /WAS KSFIOT CCHECK+3 /WAS JMP I CCHECK CCHECK+4 /WAS KRBIOT 0 /THIS ENDS THE LIST / KEYBOARD MONITOR REPLACEMENT VALUES. MONZAP, CIF 10 /WILL BECOME CIF OUR FIELD JMS OUTCON /CALL OUTPUT ROUTINE P7OUT&177+JMPIC /JMP I P7OUT CIF 10 /WILL BECOME CIF OUR FIELD JMS INCON /CALL INPUT ROUTINE CCHECK&177+JMPIC /JMP I CCHECK PAGE / CONSOLE INPUT ROUTINE. CONIN, NL0002 /SET CIF BIT RDF /GET CALLING FIELD TAD [CDF] /TURN INTO CIF CDF CALLING FIELD DCA INRET /STORE IN-LINE FOR EXIT LATER JMS I (INTEST) /TEST FOR KEYBOARD INPUT JMP INRET /WASN'T ANY, TAKE IMMEDIATE RETURN ISZ INCON /BUMP RETURN ADDRESS BECAUSE THERE WAS INPUT TAD INCHAR /GET THE CHARACTER JMP INRET /FINISH IT THERE / CONSOLE OUTPUT ROUTINE. CONOUT, DCA OUTAC /SAVE PASSED VALUE TAD OUTAC /GET IT AGAIN AND [177] /JUST SEVEN-BIT DCA OUTCHR /STASH THE CHARACTER NL0002 /SET CIF BIT RDF /GET CALLING FIELD TAD [CDF] /MAKE IT CIF CDF RETURN FIELD DCA OUTRET /STORE FOR EXIT LATER JMS I (OUTEST) /TEST (AND OUTPUT) THE CHARACTER SKP /SKIP IF FLAG WASN'T UP ISZ OUTCON /BUMP TO SKIP RETURN TAD OUTAC /GET ORIGINAL AC JMP OUTRET /FINISH IT THERE / LOGICAL LPT: HANDLER. / SETTING LPMODE TO 0000 ALLOWS BUFFERING TO A CHARACTER. / SETTING LPMODE TO 0001 DISABLES ALL BUFFERING. / DURING BUFFERING OPERATIONS, LPMODE WILL CHANGE FROM 0000 TO A / NEGATIVE COUNT FOR INITIALIZATION PURPOSES. LPTOUT, DCA LPTAC /SAVE PASSED AC NL0002 /SET CIF BIT RDF /GET CALLING FIELD TAD [CDF] /TURN INTO CIF CDF RETURN FIELD DCA LPTRET /STORE FOR EXIT LATER TAD LPTAC /GET PASSED AC VALUE CMA /INVERT FOR TEST SNA CLA /SKIP IF 7777 WAS NOT PASSED JMP LPINIT /JUMP IF 7777 WAS PASSED TAD LPTAC /GET ORIGINAL VALUE AND [177] /JUST SEVEN-BIT DCA LPTCHAR /SAVE THE CHARACTER TO BE OUTPUT TAD LPMODE /GET BUFFERING MODE SZA CLA /SKIP IF BUFFERING CURRENTLY ALLOWED JMP BUFOFF /JUMP IF NOT JMS I (BUFCHK) /CHECK CURRENT BUFFER STATUS JMP BUFULL /BUFFER CURRENTLY FULL JMP BUFACTIVE /BUFFER CURRENTLY PARTIALLY FULL BUFEMPT,TAD LPTCHAR /GET THE CHARACTER JMS I (LPOUT) /TRY TO OUTPUT IT SKP /SKIP IF UNSUCCESSFUL JMP LPEXIT /JUMP IF IT WORKED LPFFTST,TAD LPTCHAR /GET THE CHARACTER TAD (-14) /COMPARE TO SNA CLA /SKIP IF DIFFERENT JMP LPFXIT /ELSE TAKE NON-SKIP RETURN JMS I (LPFILL) /BUFFER THE CHARACTER JMP LPEXIT /TAKE SKIP RETURN BUFACTI,JMS I (LPEMPTY) /GET A CHARACTER FROM BUFFER JMS I (LPOUT) /TRY TO OUTPUT IT JMP LPFFTST /COULDN'T, TRY TO BUFFER LATEST CHARACTER BUFULEN,TAD EMPTR /GET TEMPORARY POINTER DCA EMPTPTR /PERMANENTLY EMPTY THE BUFFER POSITION JMS I (BUFCHK) /CHECK THE BUFFER AGAIN HLT /**** IMPOSSIBLE TO BE FULL WHEN JUST EMPTIED ONE **** JMP BUFACTIVE /BUFFER STILL ACTIVE, TRY AGAIN TO EMPTY IT JMP BUFEMPTY /BUFFER NOW EMPTY, GO DEAL WITH LATEST CHARACTER BUFULL, JMS I (LPEMPTY) /GET A CHARACTER FROM BUFFER JMS I (LPOUT) /TRY TO OUTPUT IT JMP LPFXIT /COULDN'T, FORGET IT JMP BUFULENTRY /DID, SO DOWNGRADE THE BUFFER TO ACTIVE AND KEEP GOING BUFOFF, TAD LPTCHAR /GET LATEST CHARACTER JMS I (LPOUT) /TRY TO OUTPUT IT JMP LPFXIT /FORGET IT TAD LPMODE /GET LATEST MODE SPA /SKIP IF BUFFERING NOT ALLOWED IAC /ELSE TRY TO END TEMPORARY PAUSE DCA LPMODE /STORE BACK JMP LPEXIT /TAKE SKIP RETURN FOR NOW LPINIT, TAD [LPTBUFFER] /SETUP THE DCA FILLPTR /FILL POINTER TAD [LPTBUFFER] /SETUP THE DCA EMPTPTR /EMPTYING POINTER TAD LPMODE /GET BUFFERING MODE SPA SNA CLA /SKIP IF BUFFERING NOT ALLOWED TAD [7600] /ELSE SETUP TEMPORARY PAUSE VALUE IAC /RESET NON-BUFFERING VALUE AT LEAST DCA LPMODE /STORE NEW MODE NL7777 /SET THE DCA LPTFLAG /OUTPUT FLAG NL7777 /GET A JMS I (LPOUT) /TRY TO OUTPUT IT SKP /SKIP IF UNSUCCESSFUL LPEXIT, ISZ OUTLPT /BUMP TO SKIP RETURN LPFXIT, TAD LPTAC /RESTORE ORIGINAL AC JMP LPTRET /FINISH IT THERE PAGE / INTERRUPT HANDLER. INTCON, NL0002 /SET CIF BIT RDF /GET CALLING FIELD TAD [CDF] /TURN INTO CIF CDF CALLING FIELD DCA INTRET /STORE IN-LINE FOR EXIT LATER DCA INTFLGS /CLEAR INTERRUPT FLAGS KSFIOT /INPUT FLAG UP? JMP LPRINT /NO, TRY OUTPUT TAD INFLAG /GET CURRENT FLAG SZA CLA /SKIP IF CLEAR TAD (4400) /ELSE SET ERROR, OVERRUN ERROR BITS DCA INFLAG /STORE FOR NOW KRBIOT /GET THE CHARACTER, CLEARING THE FLAG DCA KEYTMP /SAVE IT TAD INFLAG /GET THE FLAG CMA /INVERT IT AND KEYTMP /AND OFF NON-CONFLICTING BITS TAD INFLAG /OR IN THE FLAG SNA /SKIP IF SOMETHING SET TAD (5000) /ELSE SET ERROR, FRAMING ERROR BITS DCA INFLAG /STORE FINAL CHARACTER FLAG VALUE ISZ INTFLGS /SET KEYBOARD INTERRUPT FLAG BIT LPRINT, LISFIOT /INPUT FLAG UP? JMP OUTINT /NO, FORGET IT LIRBIOT /YES, READ IT IN SNA /SKIP IF SOMETHING THERE TAD (5000) /ELSE SET ERROR, FRAMING ERROR BITS DCA LINFLAG /STORE THE INPUT FLAG TAD INTFLGS /GET INTERRUPT FLAGS TAD (4) /SET LPT: INPUT INTERRUPT BIT DCA INTFLGS /STORE BACK OUTINT, TSFIOT /OUTPUT FLAG UP? JMP LPTINT /NO, TRY LPT: TCFIOT /YES, CLEAR IT NL7777 /SET FLAG VALUE DCA OUTFLAG /STORE IT ISZ INTFLGS /SET ON THE ISZ INTFLGS /OUTPUT INTERRUPT BIT LPTINT, LSFIOT /LPT: FLAG UP? JMP VTINT /NO, TRY VT-8/E KEYBOARD LCFIOT /CLEAR THE FLAG NL7777 /SET THE DCA LPTFLAG /EVENT FLAG TAD INTFLGS /GET INTERRUPT FLAGS TAD (10) /SET LPT: INTERRUPT BIT DCA INTFLGS /STORE BACK VTINT, DKSFIOT /VT-8/E KEYBOARD? JMP INTXIT /NO, FORGET IT DKCFIOT /YES, CLEAR THE FLAG TAD INTFLGS /GET INTERRUPT FLAGS TAD (20) /SET EXTRA BIT DCA INTFLGS /STORE BACK INTXIT, TAD INTFLGS /GET INTERRUPT FLAGS JMP INTRET /FINISH IT THERE / INTERRUPT DEVICE LIST. / FLAG SKIP INSTRUCTIONS FOR ALL DEVICES HANDLED BY THE OVERLAY. / POSITIONAL DESCRIPTION. / ENTRY 0: KEYBOARD SKIP / ENTRY 1: CONSOLE OUTPUT SKIP / ENTRY 2: LPT: INPUT SKIP / ENTRY 3: LPT: OUTPUT SKIP / ENTRY 4-N: EXTRA DEVICE SKIPS (VT-8/E, ETC.) / 0000 END OF LIST / ENTRIES 0-3 MUST BE PRESENT; 7777 MEANS DEVICE DOES NOT INTERRUPT FOR / THIS FUNCTION. ENTRIES 4-N ARE OPTIONAL. INTDEV, KSFIOT /KEYBOARD SKIP TSFIOT /CONSOLE OUTPUT SKIP -ONEWAY!LISFIOT /LPT: INPUT SKIP LSFIOT /LPT: OUTPUT SKIP -VT8LPT&DKSFIOT /VT-8/E KEYBOARD SKIP ZBLOCK 7 /FOR EXTRA DEVICE SKIPS 0000 /THIS ENDS THE LIST / CONSOLE TURNOFF ROUTINE. OFFCON, IOF /PREVENT PROBLEMS NL0002 /SET CIF BIT RDF /GET CALLING FIELD TAD [CDF] /TURN INTO CIF CDF CALLING FIELD DCA OFFRET /STORE IN-LINE JMP OFFRET /FINISH IT THERE / ERROR BLURBS. REDBLB, "R&177 /READ BLURB "E&177+40 "A&177+40 "D&177+40 WRIBLB, "W&177 /WRITE BLURB "R&177+40 "I&177+40 "T&177+40 FRMBLB, "F&177+40 /FROM BLURB "R&177+40 "O&177+40 "M&177+40 TOBLB, "I&177+40 /TO BLURB "N&177+40 "T&177+40 "O&177+40 PAGE ENDROM= . /END OF "ROM" AREA / ERROR BLURB HANDLING ROUTINES. BLBFILL,.-. /FORMAT ERROR BLURB ROUTINE CLA /CLEAN UP TAD CALFLD /GET CDF CALLING FIELD DCA EBLOCK /STORE IN-LINE EBLOCK, .-. /WILL BE CDF CALLING FIELD TAD CALADR /GET CALLING ADDRESS DCA EBLOCK /STASH IT TAD I EBLOCK /GET TRANSFER ADDRESS DCA EADDR /STASH IT ISZ EBLOCK /BUMP TO FUNCTION WORD TAD I EBLOCK /GET FUNCTION WORD DCA EFUN /STASH IT ISZ EBLOCK /BUMP TO BLOCK NUMBER TAD I EBLOCK /GET BLOCK NUMBER DCA EBLOCK /STASH IT JMS I [SETFLD] /SET OUR FIELD TAD EFUN /GET FUNCTION WORD SPA CLA /SKIP IF READING JMP EWRITE /JUMP IF WRITING JMS I (MOV4) /MOVE IN REDBLB-1 /THE READ FUNBLB-1 /BLURB JMS I (MOV4) /MOVE IN TOBLB-1 /THE "TO" FTBLB-1 /BLURB JMP ECOMMON /CONTINUE THERE EWRITE, JMS I (MOV4) /MOVE IN WRIBLB-1 /THE WRITE FUNBLB-1 /BLURB JMS I (MOV4) /MOVE IN FRMBLB-1 /THE "FROM" FTBLB-1 /BLURB ECOMMON,TAD EFUN /GET THE FUNCTION WORD AND [7] /JUST UNIT BITS TAD ["0&177] /MAKE IT ASCII DCA I (UNTBLB) /STORE IN MESSAGE TAD EFUN /GET FUNCTION WORD AGAIN RTR;RAR /MOVE OVER AND [7] /ISOLATE FIELD BITS TAD ["0&177] /MAKE IT ASCII DCA I (FLDBLB) /STORE IN MESSAGE TAD EBLOCK /GET BLOCK NUMBER JMS I (OCTMOVE) /PRINT IT BLKBLB-1 /IN MESSAGE TAD EADDR /GET TRANSFER ADDRESS JMS I (OCTMOVE) /PRINT IT ADDBLB-1 /IN MESSAGE TAD ESTATUS /GET ERROR STATUS JMS I (OCTMOVE) /PRINT IT STATBLB-1 /IN MESSAGE JMP I BLBFILL /RETURN BLBMOVE,.-. /BLURB MOVE ROUTINE DCA EFUN /SAVE BLURB ADDRESS IOF /PREVENT PROBLEMS! JMS I [SETFLD] /SETUP OUR FIELD TAD I BLBMOVE /GET MOVE LENGTH DCA EADDR /SAVE IT ISZ BLBMOVE /BUMP PAST ARGUMENT TAD EADDR /GET THE LENGTH CLL RAL /*2 TAD (ERRBLB-1) /POINT TO BEGINNING OF BLURB REGION DCA CXR1 /STASH THE POINTER DCA CXR2 /CLEAR FLAG BLMVLUP,TAD I EFUN /GET A PAIR RTR;RTR;RTR /LEFT ONE FIRST JMS I (BLBCHAR) /PUT IT IN MESSAGE TAD I EFUN /GET PAIR AGAIN JMS I (BLBCHAR) /PUT IT IN MESSAGE ISZ EFUN /BUMP TO NEXT PAIR ISZ EADDR /DONE ALL PAIRS YET? JMP BLMVLUP /NO, KEEP GOING JMP I BLBMOVE /YES, RETURN BLBDISP,.-. /BLURB DISPLAY AND REPLY ROUTINE CLA /CLEAN UP TAD INCHAR /GET FORMER INPUT CHARACTER DCA EADDR /SAVE IT TAD (BLURB) /POINT TO MESSAGE DCA EFUN /SET IT UP JMS I [SETFLD] /SETUP OUR FIELD PLOOP, TAD I EFUN /GET A CHARACTER SNA /END OF LIST? JMP PEND /YES SPA /PRINTABLE? JMP NOPRNT /NO, FORGET THIS ONE JMS OUTCON /PRINT IT JMP .-1 /WAIT FOR IT NOPRNT, CLA /CLEAN UP ISZ EFUN /BUMP TO NEXT JMP PLOOP /KEEP GOING PEND, JMS INCON /GET SOME INPUT JMP .-1 /WAIT FOR IT AND [177] /JUST SEVEN-BIT DCA EFUN /SAVE IT NL7775 /-3 TAD EFUN /COMPARE TO LATEST SMA SZA /SKIP IF <^C> OR LESS JMP NOTUPC /JUMP IF <^D> OR GREATER SMA CLA /SKIP IF LESS THAN <^C> JMP GOTUPC /JUMP IF <^C> TAD EADDR /GET PREVIOUS CHARACTER DCA INCHAR /RESTORE IT GOTUPC, CIF CDF 00 /GOING TO FIELD 0 JMP I [SBOOT] /GOODBYE! NOTUPC, CLA /CLEAN UP TAD EADDR /GET PREVIOUS CHARACTER DCA INCHAR /RESTORE IT CDF 00 /SOME I/O ROUTINES MIGHT WANT THIS JMP I BLBDISPLAY /RETURN EADDR, .-. /ADDRESS TEMPORARY EFUN, .-. /FUNCTION TEMPORARY PAGE OCTMOVE,.-. /FOUR DIGIT MOVE ROUTINE DCA BLBCHAR /SAVE PASSED VALUE TAD [-4] /SETUP THE DCA I MOVBLB /MOVE COUNT TAD I OCTMOVE /GET THE MESSAGE ADDRESS DCA CXR1 /SET IT UP ISZ OCTMOVE /BUMP PAST ARGUMENT OCTLUP, TAD BLBCHAR /GET THE VALUE CLL RTL;RAL /MOVE UP DCA BLBCHAR /STORE BACK TAD BLBCHAR /GET IT AGAIN RAL /MOVE UP AND [7] /JUST LATEST DIGIT TAD ["0&177] /MAKE IT ASCII DCA I CXR1 /STORE IN MESSAGE ISZ I MOVBLB /DONE YET? JMP OCTLUP /NO, KEEP GOING JMP I OCTMOVE /YES, RETURN BLBCHAR,.-. /BLURB CHARACTER FILLING ROUTINE AND (77) /JUST SIX-BIT SNA /? TAD (" &77) /MAKE IT A TAD (40) /INVERT QUADRANT BIT AND (77) /REMOVE EXCESS TAD (40) /INVERT AGAIN DCA OCTMOVE /SAVE IT FOR NOW TAD OCTMOVE /GET IT BACK TAD (-" !200) /COMPARE TO SZA CLA /SKIP IF IT MATCHES JMP BLBCHOK /JUMP IF NOT TAD CXR2 /GET FLAG SNA CLA /SKIP IF NON- SEEN NL4000 /ELSE SET IGNORE FLAG SKP /DON'T CHANGE FLAG BLBCHOK,ISZ CXR2 /BUMP FLAG TAD OCTMOVE /GET THE CHARACTER DCA I CXR1 /STORE IN MESSAGE JMP I BLBCHAR /RETURN / MAIN ERROR MESSAGE. BLURB, "M&37 / "J&37 / "J&37 / 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE 4000 /ERROR GOES HERE ERRBLB, " &177 /ERROR BLURB STARTS HERE "E&177 "R&177 "R&177 "O&177 "R&177 " &177 "W&177+40 "H&177+40 "I&177+40 "L&177+40 "E&177+40 " &177 FUNBLB, ZBLOCK 4 /WILL BE "READ" OR "WRIT" "I&177+40 "N&177+40 "G&177+40 " &177 "S&177 "Y&177 "S&177 UNTBLB, .-. /UNIT DIGIT WILL GO HERE ":&177 BLKBLB, ZBLOCK 4 /BLOCK NUMBER WILL GO HERE " &177 FTBLB, ZBLOCK 4 /"FROM" OR "INTO" WILL GO HERE " &177 FLDBLB, .-. /FIELD DIGIT WILL GO HERE ADDBLB, ZBLOCK 4 /TRANSFER ADDRESS DIGITS WILL GO HERE " &177 " &177 " &177 " &177 "S&177 "T&177+40 "A&177+40 "T&177+40 "U&177+40 "S&177+40 ":&177 " &177 STATBLB,ZBLOCK 4 /STATUS DIGITS WILL GO HERE "M&37 / "J&37 / "J&37 / 0 /THIS ENDS THE MESSAGE PAGE / LPT: SUPPORT ROUTINES. LPOUT, .-. /LPT: OUTPUT ROUTINE DCA BUFCHK /SAVE PASSED VALUE TAD BUFCHK /GET IT BACK TAD (-177) /ADD ON UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD (37) /ADD ON RANGE SZL CLA /SKIP IF OUT OF RANGE TAD LCMODE /ELSE ADD ON FOLD VALUE TAD BUFCHK /GET ORIGINAL EITHER WAY DCA BUFCHK /STORE BACK TAD LSTATUS /GET CURRENT STATUS SMA CLA /SKIP IF IN <^S>/<^Q> WAIT JMP LPOTEST /JUMP IF NOT JMS LINPUT /TRY TO CHANGE STATUS SPA SNA CLA /SKIP IF <^Q> RECEIVED JMP I LPOUT /ELSE TAKE FAILURE RETURN LPOTEST,SKP /**** NOT 6120 **** 0000 JMP LPOCIF /KEEP GOING SKON /INTERRUPT ON? IAC /TAD (IOF-ION) /NO, MAKE IT "IOF" TAD [ION] /GET "ION" INSTRUCTION DCA LOBARE /STORE IN-LINE SKP /DON'T DO CIF OUR FIELD LPOCIF, .-. /WILL BE CIF OUR FIELD TAD LPTFLAG /GET OUTPUT FLAG LSFIOT /FLAG UP NOW? SKP /SKIP IF NOT NL7777 /ELSE SET FLAG VALUE SNA /SKIP IF EITHER FLAG IS OR WAS SET JMP LOBARE /JUMP IF NEITHER AND BUFCHK /GET THE CHARACTER LLSIOT /OUTPUT IT NOW CLA /CLEAN UP DCA LPTFLAG /CLEAR EVENT FLAG ISZ LPOUT /BUMP TO SKIP RETURN LOBARE, NOP /**** 6120 **** ION OR IOF JMS LINPUT /GET NEW INPUT STATUS DCA LSTATUS /STORE IT JMP I LPOUT /RETURN BUFCHK, .-. /BUFFER STATUS ROUTINE NL0001 /SETUP INCREMENT TAD FILLPTR /GET FILL POINTER+1 CIA /INVERT FOR TESTING TAD EMPTPTR /COMPARE TO EMPTYING POINTER AND (BUFSIZE-1) /JUST RELATIVE BITS SNA /SKIP IF BUFFER IS NOT FULL JMP I BUFCHK /TAKE FIRST RETURN ISZ BUFCHK /BUMP TO SKIP RETURN IAC /CHECK IF EMPTY AND (BUFSIZE-1) /JUST RELATIVE BITS SNA CLA /SKIP IF PARTIALLY USED ISZ BUFCHK /ELSE TAKE DOUBLE-SKIP EMPTY RETURN JMP I BUFCHK /RETURN EITHER WAY LPFILL, .-. /BUFFER FILL ROUTINE NL0001 /SET INCREMENT TAD FILLPTR /GET THE POINTER AND (BUFSIZE-1) /JUST RELATIVE BITS TAD [LPTBUFFER] /ADD ON BUFFER BASE DCA FILLPTR /STORE UPDATED POINTER LPFCDF, .-. /WILL BE CDF OUR FIELD TAD LPTCHAR /GET THE CHARACTER DCA I FILLPTR /STORE IN THE BUFFER JMP I LPFILL /RETURN LPEMPTY,.-. /BUFFER EMPTY ROUTINE NL0001 /SET INCREMENT TAD EMPTPTR /GET THE POINTER AND (BUFSIZE-1) /JUST RELATIVE BITS TAD [LPTBUFFER] /ADD ON BUFFER BASE DCA EMPTR /STORE IN TEMPORARY POINTER LPECDF, .-. /WILL BE CDF OUR FIELD TAD I EMPTR /GET THE CHARACTER JMP I LPEMPTY /RETURN LINPUT, .-. /LPT: INPUT ROUTINE LINPROT,SKP /**** NOT 6120 **** 0000 JMP LICIF1 /KEEP GOING SKON /INTERRUPT ON? IAC /TAD (IOF-ION) /NO, MAKE IT "IOF" TAD [ION] /GET "ION" INSTRUCTION DCA LINBARE /STORE IN-LINE SKP /DON'T DO CIF OUR FIELD LICIF1, .-. /WILL BE CIF OUR FIELD TAD LINFLAG /GET INPUT FLAG SNA /SKIP IF SET JMP LIFLGTEST /JUMP IF NOT DCA LINCHAR /STORE FOR NOW DCA LINFLAG /CLEAR EVENT FLAG TAD LINCHAR /GET THE CHARACTER JMP GOTLINPUT /CONTINUE THERE LIFLGTE,SKP /**** NOT 6120 **** 0000 LICIF2, .-. /WILL BE CIF OUR FIELD ONEWAY-1&LISFIOT /FLAG UP NOW? JMP LINBARE /NO, JUST RETURN LIRBIOT /YES, READ THE CHARACTER AND CLEAR THE FLAG GOTLINP,AND [177] /JUST SEVEN-BIT TAD (-"S!300) /IS IT <^S>? SNA /SKIP IF NOT JMP LPSETS /JUMP IF SO TAD (-"Q+"S) /IS IT <^Q>? SZA CLA /SKIP IF SO JMP LINBARE /JUMP IF NOT NL2000 /SET <^Q> VALUE SKP /NOT <^S> VALUE LPSETS, NL4000 /SET <^S> VAUE LINBARE,NOP /**** 6120 **** ION OR IOF JMP I LINPUT /RETURN / INTERRUPT SETUP ROUTINE. INTSET, .-. /INTERRUPT SETUP NL7777 /SET ALL BITS KINLOCA,KIEIOT /**** PRE-OMNIBUS DEVICE 03 **** 0000 NOP /JUST IN CASE NL7777 /SET ALL BITS TINLOCA,TIEIOT /**** PRE-OMNIBUS DEVICE 03 **** 0000 NOP /JUST IN CASE NL7777 /SET ALL BITS LINLOCA,ONEWAY-1&LIEIOT /ENABLE INTERRUPTS, ERRORS ON KL-8/JA NOP /JUST IN CASE NL7777 /SET ALL BITS LOTLOCA,LPEIOT /ENABLE INTERRUPTS ON LS-8/E NOP /JUST IN CASE NL7777 /SET ALL BITS DKILOCA,-VT8LPT&DKIEIOT /ENABLE INTERRUPTS ON VT-8/E KEYBOARD, LPT: NOP /JUST IN CASE CLA /CLEAN UP JMP I INTSET /RETURN PAGE / SUPPORT ROUTINES. TRPINIT,.-. /TRAP BLOCK INITIAL READIN ROUTINE TAD I (SBTFUN) /GET MONITOR'S UNIT AND [7] /JUST UNIT BITS TAD [2^100] /ADD ON READ BITS RIF /ADD ON FIELD BITS DCA TRDFUN /STORE IN-LINE JMS I [SETFLD] /SETUP OUR FIELD CIF 00 /GOTO MONITOR FIELD JMS I (SYSIO) /CALL I/O ROUTINES TRP, TRPAGE /TRANSFER ADDRESS TRDFUN, 2^100+.-.+.-. /FIELD, UNIT BITS WILL BE FILLED IN TRPBLK /TRAP BLOCK NUMBER TAD I TRP/(HIDWRD&7600+TRPAGE)/GET ID NUMBER DCA DEVWRD /STORE IT JMP I TRPINIT /RETURN / INPUT FLAG TEST ROUTINE. INTEST, .-. /INPUT TEST ROUTINE INPROT, SKP /**** NOT 6120 **** 0000 JMP INCIF1 /KEEP GOING SKON /INTERRUPT ON? IAC /TAD (IOF-ION) /NO, MAKE IT "IOF" TAD [ION] /GET "ION" INSTRUCTION DCA INBARE /STORE IN-LINE SKP /DON'T DO CIF OUR FIELD INCIF1, .-. /WILL BE CIF OUR FIELD TAD INFLAG /GET INPUT FLAG SNA /SKIP IF SET JMP IFLGTEST /JUMP IF NOT DCA INCHAR /SAVE IN INPUT BUFFER DCA INFLAG /CLEAR EVENT FLAG JMP INCOME /CONTINUE THERE IFLGTES,SKP /**** NOT 6120 **** 0000 INCIF2, .-. /WILL BE CIF OUR FIELD KSFIOT /FLAG UP? JMP INBARE /NO, TAKE IMMEDIATE RETURN KRBIOT /YES, GET THE CHARACTER AND CLEAR HARDWARE FLAG DCA INCHAR /SAVE IN INPUT BUFFER INCOME, ISZ INTEST /BUMP RETURN ADDRESS INBARE, NOP /**** 6120 **** ION OR IOF JMP I INTEST /RETURN TO INPUT ROUTINE OUTEST, .-. /OUTPUT TEST (AND PRINT) ROUTINE OUTPROT,SKP /**** NOT 6120 **** 0000 JMP OUTCIF /KEEP GOING SKON /INTERRUPT ON? IAC /TAD (IOF-ION) /NO, MAKE IT "IOF" TAD [ION] /GET "ION" INSTRUCTION DCA OUTBARE /STORE IN-LINE SKP /DON'T USE CIF OUR FIELD OUTCIF, .-. /WILL BE CIF OUR FIELD TAD OUTFLAG /GET OUTPUT FLAG TSFIOT /OUTPUT FLAG SET? SKP /SKIP IF NOT NL7777 /ELSE INDICATE SO SNA /SKIP IF INTERRUPT OR FLAG UP NOW JMP OUTBARE /ELSE TAKE IMMEDIATE RETURN AND OUTCHR /GET THE CHARACTER TLSIOT /OUTPUT IT NOW CLA /CLEAN UP DCA OUTFLAG /CLEAR INTERRUPT FLAG ISZ OUTEST /BUMP TO GOOD RETURN OUTBARE,NOP /**** 6120 **** ION OR IOF JMP I OUTEST /TAKE SKIP RETURN TO CALLER SETFLD, .-. /DATA FIELD SETUP ROUTINE CLA /CLEAN UP RIF /GET OUR FIELD TAD [CDF] /TURN INTO CDF INSTRUCTION DCA SETCDF /STORE IN-LINE SETCDF, .-. /WILL BE CDF OUR FIELD JMP I SETFLD /RETURN / RELOAD CLEAR ROUTINE. CLEAR, .-. /CLEAR ROUTINE CLA CLL /CLEAN UP JMP I CLEAR /RETURN MOV4, .-. /MOVE FOUR CHARACTERS ROUTINE TAD [-4] /SETUP THE DCA CLEAR /MOVE COUNT TAD I MOV4 /GET THE "FROM" LOCATION DCA CXR1 /SET IT UP ISZ MOV4 /BUMP TO NEXT TAD I MOV4 /GET THE "TO" LOCATION DCA CXR2 /SET IT UP ISZ MOV4 /BUMP PAST ARGUMENT TAD I CXR1 /GET A WORD DCA I CXR2 /PUT A WORD ISZ CLEAR /DONE YET? JMP .-3 /NO, KEEP GOING JMP I MOV4 /YES, RETURN PDP12EN,.-. /PDP-12 INTERRUPT ENABLE ROUTINE PDP12ZA,JMP I PDP12ENABLE /**** PRE-OMNIBUS DEVICE 03 **** 0000 LINC /GOTO LINC MODE COM /COMPLEMENT AC PDP /BACK TO PDP-8 MODE SNA CLA /SKIP IF AC CHANGED JMP I PDP12ENABLE /RETURN IF NOT PDP-12 LINC /GOTO LINC MODE SFA /GET CURRENT SPECIAL FUNCTIONS VALUE BCLI; 40 /TURN OFF INTERRUPT INHIBIT BIT ESF /WRITE BACK NEW VALUE PDP /BACK TO PDP-8 MODE CLA /CLEAN UP JMP I PDP12ENABLE /RETURN PAGE LPTBUFF=. /LPT: BUFFER STARTS HERE NOPUNCH /FOOL THE ASSEMBLER ZBLOCK 2600-. /END OF CHECKSUM CALCULATION REGION ZBLOCK LPTBUFF+BUFSIZE-. /GET TO END OF LPT: BUFFER INITEST,*6000-400 /GET TO END OF CONSOLE AREA TRPAGE, ZBLOCK 200 /FIRST TRAP BLOCKS PAGE TRPAG2, ZBLOCK 200 /SECOND TRAP BLOCKS PAGE ENPUNCH /UN-FOOL THE ASSEMBLER *INITEST /ESTABLISH CURRENT ORIGIN / ONCE-ONLY TEST FOR EXISTENCE CODE. THIS CAN BE LOCATED WITHIN A BUFFER / ETC., SINCE IT IS ONLY USED WHEN THE OVERLAY IS RELOADED. INITEST,.-. /EXISTENCE TEST ROUTINE NL7776 /SETUP THE DCA OUTCON /TIME-OUT COUNTER JMS I [SETFLD] /SETUP OUR DATA FIELD NL0001 /TAD (CIF-CDF) /SETUP CIF OFFSET TAD I (SETCDF) /FORM CIF OUR FIELD DCA I (INCIF1) /STORE IN-LINE TAD I (INCIF1) /GET IT BACK DCA I (INCIF2) /STORE IN-LINE TAD I (INCIF2) /GET IT BACK DCA I (LICIF1) /STORE IN-LINE TAD I (LICIF1) /GET IT BACK DCA I (LICIF2) /STORE IN LINE TAD I (LICIF2) /GET IT BACK DCA I (OUTCIF) /STORE IN-LINE TAD I (OUTCIF) /GET IT BACK DCA I (LPOCIF) /STORE IN LINE TAD I (SETCDF) /GET CDF OUR FIELD DCA I (LPECDF) /STORE IN-LINE TAD I (SETCDF) /GET CDF OUR FIELD DCA I (LPFCDF) /STORE IN-LINE NL7777 /SETUP TEST VALUE KTILOCA,KTIIOT /EXECUTE CONSOLE TEST IOT SNA CLA /SKIP IF AC NOT CLEAR AND WE WEREN'T SKIPPED JMP OLDWAY /JUMP IF IOT CLEARED AC OR SKIPPED DMTEST, NL0010 /ATTEMPT 6120 FEAT TAD (-10) /DID IT WORK? SNA CLA /SKIP IF NOT JMP TSTAGN /JUMP IF IT DID DCA I (INPROT) /ALLOW INPUT PROTECTION VIA CIF DCA I (IFLGTEST) /SAME FOR HARDWARE TEST DCA I (LINPROT) /ALLOW LPT: INPUT PROTECTION VIA CIF DCA I (LIFLGTEST) /SAME FOR HARDWARE TEST DCA I (OUTPROTECT) /ALLOW CONSOLE OUTPUT PROTECTION VIA CIF DCA I (LPOTEST) /ALLOW LPT: OUTPUT PROTECTION VIA CIF TSTAGN, TAD (-10) /SETUP THE DCA INCON /TIME-OUT TIMER TIMTST, TSFIOT /FLAG UP? JMP TIMOUT /NO, GO TEST IT CLA CLL /YES, CLEAN UP JMP I INITEST /RETURN OLDWAY, CLA /CLEAN UP DCA I (KINLOCATION) /PREVENT KEYBOARD INTERRUPT ENABLE DCA I (TINLOCATION) /PREVENT TERMINAL INTERRUPT ENABLE DCA I (PDP12ZAP) /ALLOW PDP-12 INTERRUPT ENABLE TEST JMP DMTEST /CONTINUE THERE TIMOUT, ISZ OUTLPT /WASTE JMP TIMTST /SOME TIME ISZ INCON /WAITED TOO LONG? JMP TIMTST /NO, TRY AGAIN / THE FLAG MAY NEVER COME UP, SO LET'S ATTEMPT TO SET IT. TLSIOT /THIS SHOULD SET THE FLAG EVENTUALLY ISZ OUTCON /TRIED TO SET IT TOO MANY TIMES? JMP TSTAGN /NO, KEEP GOING / SINCE THE CONSOLE HARDWARE (PRESUMABLY SPECIFIC) IS NOT AVAILABLE, WE / RESTORE THE ORIGINAL KEYBOARD MONITOR AND LET IT FEND FOR ITSELF. NL7776 /SETUP THE DCA INCON /ZAP COUNT TAD (ADRLST&177+TRPAGE-1) /POINT AT DCA CXR1 /ADDRESS LIST TAD (CNTLST&177+TRPAGE-1) /POINT AT DCA CXR2 /NORMAL CONTENTS LIST PTBKLP, TAD I CXR1 /GET AN ADDRESS SNA /END OF LIST? JMP PTBKDONE /YES DCA OUTCON /NO, STASH IT TAD I CXR2 /GET A VALUE CDF 00 /GOTO MONITOR'S FIELD DCA I OUTCON /ZAP IT BACK JMS I [SETFLD] /BACK TO OUR FIELD JMP PTBKLP /KEEP GOING PTBKDON,TAD (MONADR-1) /POINT AT MONITOR'S DCA CXR1 /ADDRESS LIST TAD (MONCON-1) /POINT AT MONITOR'S DCA CXR2 /CONTENTS LIST ISZ INCON /DONE WITH BOTH YET? JMP PTBKLP /NO, KEEP GOING JMP I (PTBMORE) /CONTINUE THERE / MONITOR LOCATIONS' NORMAL CONTENTS LIST. MONCON, MONTSF /FOR P7TSF P7OUT&177+JMPIC /FOR P7JMP MONTLS /FOR P7TLS MONKSF /FOR CCHECK+2 CCHECK&177+JMPIC /FOR CCHECK+3 MONKRB /FOR CCHECK+4 PAGE / NOW DETERMINE HOW WE SHOULD READ THE MONITOR'S KEYBOARD FOR <^S>/<^Q> / ETC. PURPOSES. PTBMORE,CDF 00 /GOTO MONITOR'S FIELD TAD I (SBOOT) /GET THE BOOTSTRAP INSTRUCTION TAD (-SYSINST) /COMPARE TO POSSIBLE VALUE SZA CLA /SKIP IF IT MATCHES JMP EROK /JUMP IF OTHER ISZ CTZAP1 /CHANGE "MONKRS" ISZ CTZAP1 /TO "MONKRB" DCA CTZAP2 /ELIMINATE "MONKCC" EROK, JMS I [SETFLD] /RESTORE OUR FIELD MONTLS /SET THE OUTPUT FLAG NOW TAD (ERBLURB-1) /POINT TO DCA CXR1 /ERROR MESSAGE ERBLUP, TAD I CXR1 /GET A CHARACTER DCA CXR2 /SAVE IT PAGN, JMS CTLCTST /CHECK FOR INPUT TAD (-"S!300) /IS IT <^S>? SZA CLA /SKIP IF SO JMP PTRY /JUMP IF NOT JMS CTLCTST /CHECK AGAIN TAD (-"Q!300) /IS IT <^Q>? SZA CLA /SKIP IF SO JMP .-3 /ELSE WAIT FOR IT PTRY, TAD CXR2 /GET THE CHARACTER MONTSF /FLAG UP? JMP PAGN /NO, TRY INPUT WHILE WAITING MONTLS /YES, SEND IT NOW SMA CLA /END OF LIST? JMP ERBLUP /NO, KEEP GOING CIF CDF 00 /GOING TO FIELD 0 NL7775 /SETUP MASK AND I (SCRSIZE) /GET OTHER BITS DCA I (SCRSIZE) /STORE CORE WORD WITHOUT "C" BIT JMP I (TTYTST) /CONTINUE THERE CTLCTST,.-. /CONTROL CHARACTER INPUT ROUTINE CLA /CLEAN UP MONKSF /FLAG UP? JMP I CTLCTST /NO, FORGET IT CTZAP1, MONKRS/OR MONKRB /GET THE CHARACTER AND (177) /JUST SEVEN-BIT DCA INCHAR /SAVE IT CTZAP2, MONKCC/OR 0000 /CLEAR THE FLAG TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN / ERROR BLURB. ERBLURB,"G&37 / "G&37 / "G&37 / "G&37 / "M&37 / "J&37 / "J&37 / "G&37 / "G&37 / "G&37 / "M&37 / "J&37 / "J&37!4000 / WHICH ENDS THE LIST FIELD 0 /HERE COME THE LITERALS! $ /THAT'S ALL FOLK!