/ P?S/8 MONITOR CONSOLE OVERLAY / LAST EDIT: 17-DEC-1986 23:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / THIS IS THE P?S/8 MONITOR CONSOLE OVERLAY UTILITY FOR REDIRECTING / KEYBOARD, PRINTER, AND LINEPRINTER I/O TO LOGICAL HANDLERS INSTEAD OF THE / NORMAL PHYSICAL DEVICES (04, 04, 66). THIS PROGRAM ALSO REDIRECTS ERROR / HANDLING TO THE CONSOLE INSTEAD OF HALTING OR RETRYING. / CONSOLE OPTIONS. / /D DISABLE OVERLAY. BLOCK ZERO OF THE SYSTEM BOOTSTRAP UNIT IS MODIFIED / TO TURN OFF THE OVERLAY. / /E ENABLE OVERLAY. IF SUFFICIENT MEMORY IS AVAILABLE, IT IS SELECTED / AND ALSO CLEARED TO MAKE ROOM FOR A NEW COPY OF THE OVERLAY. / BLOCKS ZERO AND THIRTEEN OF THE SYSTEM BOOTSTRAP UNIT ARE MODIFIED / TO TURN ON THE OVERLAY. / /R REFRESH OVERLAY. IF THE OVERLAY IS ENABLED, THEN THE MEMORY / ASSOCIATED WITH THE OVERLAY WILL BE CLEARED. IF THE MEMORY IMAGE / OF THE OVERLAY MAINTAINED BY THE CONSOLE UTILITY IS UPDATED, THEN / THE RESIDENT COPY WILL BE RELOADED EVEN IF /R IS NOT PASSED. / /U UPDATE MEMORY IMAGE OF THE OVERLAY WITH THE CONTENTS OF PASSED / VALID BINARY CONSOLE OVERLAY FILES. THE OVERLAY NEED NOT BE / ENABLED, NOR IS THE EXTRA MEMORY OR POSSIBLE OPTIONAL HARDWARE / REQUIRED TO EFFECTIVELY USE THE OVERLAY NEEDED WHEN UPDATING THE / MEMORY IMAGE. IF THE PASSED FILES REPRESENT A PRIMARY OVERLAY / UPDATE, THIS SWITCH IS IMPLIED. IF THE PASSED FILES ARE SECONDARY / ONLY (PARAMETER PATCHES, ETC.) THEN /U IS REQUIRED TO UPDATE THE / MEMORY IMAGE. IF SECONDARY FILES ONLY ARE PASSED WITHOUT /U, THE / MEMORY COPY WILL BE MODIFIED (ONLY IF THE CONSOLE OVERLAY IS / CURRENTLY ENABLED). / FILES PASSED VALID BINARY FILES CAN BE USED TO MODIFY THE OVERLAY IN / MEMORY OR TO PERMANENTLY UPDATE THE COPY OF THE OVERLAY CODE / MAINTAINED BY THE CONSOLE UTILITY ON THE SYSTEM DEVICE. / FILE RULES. / NO OUTPUT FILES MAY BE PASSED. ATTEMPTS TO DO SO WILL YIELD AN ERROR / MESSAGE. THIS IS TO PREVENT ACCIDENTAL MISUSE. / ALL INPUT FILES MUST BE UNIQUE; EACH INPUT FILE IS CHECKED AGAINST ALL / OTHER FILES FOR UNIQUENESS. THIS IS TO PREVENT ACCIDENTAL MISUSE. / ALL INPUT FILES MUST BE VALID BINARY FILES WITH SPECIAL HEADER CODING. / FILES MAY BE CODED AS PRIMARY UPDATE (ENTIRE DEVICE OVERLAY CODING) OR / SECONDARY UPDATE (PARAMETER PATCHES, ETC.). / THERE MAY ONLY BE ONE PRIMARY UPDATE FILE, AND IF USED IT MUST BE PASSED / AS THE FIRST INPUT FILE. ANY ADDITIONAL CONTINUATION OR OTHER SECONDARY / FILES MUST FOLLOW THE PRIMARY FILE. / ALL INPUT FILES MUST HAVE IDENTICAL DEVICE NAME FIELDS. / IF ONLY SECONDARY FILES ARE PASSED, THEY MUST HAVE DEVICE NAME FIELDS / MATCHING THE CURRENT CONSOLE OVERLAY IMAGE. / SOME SECONDARY FILES (SUCH AS THE BINARY FILES PRODUCED BY "KL8PCH") HAVE / DEVICE NAME FIELDS IDENTICAL TO THE INTENDED PRIMARY FILE ("KL8). HOWEVER, / THE SECONDARY FILE CHANGES THE DEVICE NAME FIELD WITHIN THE OVERLAY ITSELF. / THESE FILES THEN CANNOT BE USED WITHOUT THE ORIGINAL PRIMARY FILE, AS THEY / ARE INCOMPATIBLE WITH THE THEN CURRENT CONSOLE OVERLAY IMAGE. (THE INTENDED / USAGE IS: .CONSOLE KL8,KL8PCH) / CONSOLE UTILITY MESSAGES. / [CONSOLE OVERLAY UPDATED] / THE CONSOLE OVERLAY UTILITY WAS INVOKED WITH VALID BINARY FILES AND /U / SET (OR IMPLIED BY A PRIMARY FILE). THE OVERLAY IMAGE ON THE SYSTEM DEVICE / WAS UPDATED TO REFLECT THE CONTENTS OF THE PASSED FILES. / [CONSOLE OVERLAY MODIFIED] / THE CONSOLE OVERLAY MEMORY-RESIDENT COPY WAS MODIFIED ACCORDING TO THE / CONTENTS OF PASSED SECONDARY VALID BINARY FILES WITH /U NOT SET. THE / PERMANENT COPY OF THE OVERLAY IS NOT MODIFIED. THIS CAN BE USEFUL FOR / TRANSIENT CHANGES OR TESTING OF NEW OVERLAY FEATURES BY AN OVERLAY PROGRAM / IMPLEMENTOR. THE /R OPTION CAN BE INVOKED TO CANCEL THE EFFECT OF THE / MODIFICATION. (SOME VALID SECONDARY FILES CAN ONLY UPDATE THE PERMANENT / COPY IN ORDER TO BE EFFECTIVE, AS DISTURBING THE OVERLAY CHECKSUM CAUSES / AUTOMATIC RELOAD!) / [CONSOLE OVERLAY DISABLED] / THE /D SWITCH WAS USED TO TO DISABLE THE CONSOLE OVERLAY. ALL CONSOLE, / LPT: INPUT/OUTPUT REVERTS TO THE PHYSICAL DEVICES NORMALLY ASSOCIATED / WITH THESE FUNCTIONS (DEVICES 03, 04, 66). / [CONSOLE OVERLAY ENABLED] / THE /E SWITCH WAS USED TO ENABLE THE CONSOLE OVERLAY. ALL CONSOLE, LPT: / INPUT/OUTPUT IS REDIRECTED TO THE CONSOLE OVERLAY. / [CONSOLE OVERLAY WILL BE RELOADED] / /THE /R SWITCH OR PASSED SECONDARY VALID BINARY FILES WITH /U SET OR A / PASSED PRIMARY VALID BINARY FILE (WITH OR WITHOUT SECONDARY FILES OR /U / SET) WERE GIVEN THUS REQUIRING RELOADING OF THE OVERLAY. / CONSOLE UTILITY ERROR MESSAGES. / DUPLICATE CONSOLE OVERLAY FILES! / MULTIPLE REFERENCES TO THE SAME FILE APPEAR IN THE FILE LIST AS THE USER / PASSED SEVERAL FILES TO THE CONSOLE OVERLAY UTILITY. TO PREVENT ACCIDENTAL / MISUSE OF THE CONSOLE FACILITY, ALL FILE SPECIFICATIONS MUST BE UNIQUE. / CONSOLE OVERLAY ALREADY ENABLED! / AN ATTEMPT WAS MADE TO USE /E TO ENABLE THE CONSOLE OVERLAY WHILE IT / ALREADY WAS ENABLED. / INVALID CONSOLE OVERLAY FILE #N (N=1-17) / THE SPECIFIED FILE IS NOT A VALID BINARY CONSOLE OVERLAY FILE OR IT IS / INCOMPATIBLE WITH OTHER VALID PASSED BINARY CONSOLE OVERLAY FILES / (NON-MATCHING DEVICE NAMES, ETC.). TO PREVENT ACCIDENTAL MISUSE OF THE / CONSOLE UTILITY, ONLY SPECIALLY CODED BINARY OVERLAY FILES IN PROPER / COMBINATION ARE VALID FOR INPUT TO THE CONSOLE UTILITY. / INVALID OVERLAY ADDRESS! / AN OTHERWISE VALID BINARY FILE ATTEMPTS TO LOAD INTO A LOCATION BEYOND / THE UPPER LIMIT OF MEMORY RESERVED FOR THE OVERLAY. THIS INDICATED EITHER / AN INVALID BINARY FILE, OR MISCODING/MISASSEMBLY OF THE OVERLAY FILE / SOURCE PROGRAM. THIS MESSAGE IS PRIMARILY INTENDED TO WARN DEVELOPERS OF / THE OVERLAY CODING OF ERROR(S) IN THEIR PROGRAM. / CONSOLE OVERLAY DISABLED, OVERLAY LOADING NOT ALLOWED! / AN ATTEMPT WAS MADE TO PASS VALID SECONDARY BINARY FILES WITHOUT /U SET / WHILE THE CONSOLE OVERLAY WAS DISABLED. SINCE /U IS NOT SPECIFIED, THERE / IS NO COPY OF THE OVERLAY PRESENT TO LOAD OVER. / INVALID OUTPUT FILES! / OUTPUT FILES WERE PASSED TO THE CONSOLE OVERLAY UTILITY. TO PREVENT / ACCIDENTAL MISUSE OF THE CONSOLE OVERLAY UTILITY, THIS IS NOT ALLOWED. / INVALID POSITION FOR PRIMARY CONSOLE OVERLAY FILE! / A COMPLETE CONSOLE OVERLAY UPDATE (PRIMARY) FILE WAS PASSED TO THE / CONSOLE OVERLAY UTILITY, BUT WAS NOT THE FIRST FILE PASSED IN THE LIST. / THERE MUST BE ONLY ONE SUCH FILE (IF ANY) AND IT MUST BE THE FIRST INPUT / FILE SPECIFIED. TO PREVENT ACCIDENTAL MISUSE OF THE CONSOLE OVERLAY / UTILITY, THIS CONVENTION MUST BE ADHERED TO. / SECONDARY CONSOLE OVERLAY FILE INCOMPATIBLE WITH CONSOLE OVERLAY! / A VALID CONSOLE OVERLAY FILE CONTAINING PARAMETER MODIFICATION ONLY / (SECONDARY FILE) WAS PASSED TO THE CONSOLE OVERLAY UTILITY WITH ITS / DEVICE NAME FIELD DIFFERENT FROM THE PREVAILING DEVICE NAME FIELD WITHIN / THE CURRENT MEMORY IMAGE OF THE CONSOLE OVERLAY. ONLY PRIMARY FILES ARE / ALLOWED TO HAVE DIFFERENT DEVICE NAME FIELDS (SINCE THEY SUPPORT DIFFERENT / DEVICES!). SINCE EACH PRIMARY CONSOLE OVERLAY CONFIGURATION HAS UNIQUE / INTERNAL RULES GOVERNING MODIFICATION BY SECONDARY FILES, THE SECONDARY / FILES MUST HAVE MATCHING DEVICE NAMES AS A PREREQUISITE FOR ALLOWING ANY / UPDATE. / CONSOLE OVERLAY NOT AVAILABLE IN ONLY 4K! / THE CURRENT LOGICAL CORE SIZE OF THE SYSTEM IS 4K. SINCE THE OVERLAY / REQUIRES ADDITIONAL MEMORY TO OPERATE, THE LOGICAL CORE SIZE MUST BE / AT LEAST 8K BEFORE INSTALLING THE OVERLAY. IF MORE MEMORY IS ACTUALLY / AVAILABLE, USE THE "CORE" COMMAND TO OBTAIN IT BEFORE ATTEMPTING TO USE / THE CONSOLE OVERLAY UTILITY. ALAS, 4K MACHINES CANNOT USE THE CONSOLE / OVERLAY UTILITY. (PROGRAMMERS NOTE: DON'T TELL ME THERE AREN'T ANY 4K / MACHINES OUT THERE; I OWN ONE!) / CONSOLE OVERLAY NOT ENABLED! / AN ATTEMPT WAS MADE TO EITHER DISABLE (/D) OR REFRESH (/R) THE CONSOLE / OVERLAY WHILE IT IS NOT ENABLED. / NO VIABLE OPTIONS GIVEN! / NO USEFUL COMBINATION OF OPTIONS WERE PASSED TO THE CONSOLE OVERLAY / UTILITY, THE CONSOLE OVERLAY UTILITY MUST BE PASSED EITHER: / A) VALID BINARY INPUT FILES WITH OR WITHOUT /U POSSIBLY WITH /R, /E, / OR /D AS APPROPRIATE TO MODIFY OR UPDATE THE OVERLAY. / B) /R (IF THE OVERLAY IS ENABLED) TO REFRESH THE CURRENT / MEMORY-RESIDENT COPY OF THE OVERLAY. / C) /D (IF THE OVERLAY IS ENABLED) TO DISABLE THE OVERLAY. / D) /E (IF THE OVERLAY IS DISABLED) TO ENABLE THE OVERLAY. / ANY OTHER COMBINATION OF SWITCHES (INCLUDING /U WITHOUT FILES) WILL YIELD / THIS ERROR MESSAGE. / SPECIAL HEADER CODING FOR BINARY OVERLAY FILES. / EACH FILE MUST CONTAIN THE FOLLOWING HEADER INFORMATION: / 5252 FLAG WORD PROVIDED BY ASSEMBLER / *0200 *200 PROVIDED BY ASSEMBLER / *0200 *200 PROVIDED BY ASSEMBLER / *"D^100+"E-300 ORIGIN TO FIRST PAIR OF DEVICE NAME CHARACTERS / *"V^100+"I-300 ORIGIN TO SECOND PAIR OF DEVICE NAME CHARACTERS / *"C^100+"E-300 ORIGIN TO THIRD PAIR OF DEVICE NAME CHARACTERS / *0000-0077 *00XX TO DELIMIT THE DEVICE NAME. IF XX=00 THEN / A PRIMARY FILE; IF NON-ZERO THEN A SECONDARY FILE. / ALL TRAILING DEVICE NAME CHARACTERS MUST BE ZERO IF THE NAME IS LESS / THAN SIX CHARACTERS. / ALL DEVICE NAMES MUST BE IDENTICAL THROUGHOUT THE PASSED FILE LIST. / ALL DATA WITHIN THE FILE MUST LOAD BETWEEN 0000 AND 5777. ALL FIELD / SETTINGS ARE IGNORED. // P?S/8 DEFINITIONS. ADRLST= 7603 /ZAPS CALADR= 0020 /CALL CALFLD= 0021 /FIELD CATCORE=0150 /CATALOG CCHECK= 2343 /CHECK CHKCNT= 0043 /CHECKSUM COUNT CHKPTR= 0044 /CHECKSUM POINTER CONINT= 0000 /INTERRUPT CNTLST= 7615 /CONTENTS CONOFF= 0100 /CONSOLE OFF CTCPZAP=2363 /<^C> PRINT CTCZAP= 2365 /<^C> ZAP DEVWRD= 0104 /DEVICE WORD DSPBLB= 0024 /BLURB DISPLAY ERRTRP= 0046 /ERROR TRAP ESTATUS=0077 /ERROR STATUS FILBLB= 0023 /BLURB FILL FUDWRD= 0105 /FUDGE GETBASE=0031 /HALF BASE GETHAF= 0104 /HALF GETNDX= 0026 /HALF INDEX HIDWRD= 7600 /ID WORD INCON= 0031 /CONSOLE INPUT INFLAG= 0025 /INPUT FLAG INTFLGS=0002 /INTERRUPT INTLST= 0003 /FLAG, LIST IOTRAP= 0045 /I/O TRAP IOWAIT= 0047 /I/O WAIT LCMODE= 0006 /LPT: CASE LINFLAG=0030 /LPT: INPUT FLAG LNOPRT= 0105 /NUMBER PRINT LPMODE= 0004 /MODE LPTFLAG=0027 /FLAG L10= 0174 /0010 L100= 0006 /0100 L200= 0105 /0200 L7= 0177 /0007 L7600= 0113 /7600 L7756= 0065 /7756 L7757= 0034 /7757 L7770= 0040 /7770 L7772= 0013 /7772 MESSAGE=0112 /MESSAGE PRINT MOVBLB= 0022 /MOVE BLURB NAME= 0054 /NAME POINTER NAMPRT= 0066 /NAME PRINT OUTCON= 0033 /CONSOLE OUTPUT OUTFLAG=0026 /OUTPUT FLAG OUTLPT= 0035 /LOGICAL LPT: OVID= 0106 /ID OVRBLK= 2571 /BLOCK OVRCHK= 2555 /CDF MCS+10 OVRCNT= 2575 /CHECKSUM COUNT OVRCOMM=2511 /OVERLAY ADDRESS OVRFUN= 2570 /RELOAD OVRLOAD=2572 /CIF MCS+10 OVRPTR= 2576 /POINTER OVRSUM= 2577 /CHECKSUM OVRWRD= 0111 /OVERLAY WORD PBEGIN= 0071 /BEGIN POINTER PBUTIO= 0161 /BOOTSTRAP I/O PMOVE= 0127 /MOVE ROUTINE PR6BIT= 0047 /, PSCRSIZ=0170 /CORE SIZE P7JMP= 2337 /\ P7OUT= 2335 / \CONSOLE P7TLS= 2340 / /OUTPUT P7TSF= 2336 // SBLOCK= 7635 /LOADER BLOCK SBOOT= 7600 /MONITOR SBTFUN= 7602 /FUNCTION SCRSIZE=7611 /CORE SIZE SFUN= 7634 /LOADER FUNCTION SOUTFLS=7607 /OUTPUT COUNT SSYSIO= 0172 /SYSIO POINTER SWAL= 7604 /A-/L SWAPIT= 0423 /MONITOR SWAP SWMX= 7605 /M-/X SYSIO= 7640 /SYSTEM I/O TCNT1= 0122 /\ TPTR1= 0001 / >TEMPORARIES TPTR2= 0007 // TRAPIO= 1041 /I/O TRAP TRPBLK= 0113 /TRAP BLOCKS TRPERR= 1200 /ERROR TRAP TTY= 0003 /TTY: CODE TTYTST= 2506 /TTY: TEST VTMODE= 0005 /VT-8/E MODE WAITIO= 1110 /I/O WAIT TRAP WRITE= 4000 /WRITE BIT XGETHAF=0444 /GET HALF XIOMON= 0102 /MONITOR START XPRTNAM=1102 /PRINT NAME XR1= 0016 /INDEX XR2= 0017 /REGISTERS ZAPLST= 7627 /ZAP LIST ZROFIL= 0241 /SUPRESS // END OF P?S/8 DEFINITIONS. / OTHER DEFINITIONS. CIF10= CIF 10 /CIF CONSTANT DKEY= 43 /VT-8/E KEYBOARD CODE JMPIC= JMP I . /CURRENT PAGE JMP INDIRECT INSTRUCTION JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION KEY= 03 /KEYBOARD CODE LIN= 65 /LPT: INPUT CODE LPBUFF= 0 /DISABLE LPT: BUFFERING LPT= 66 /LPT: CODE NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 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 ONEWAY= 0 /TWO-WAY LPT: HANDLING OUT= 04 /TELEPRINTER CODE OVTYPE= 77 /CHANGE THIS WHEN HARDWARE CONFIGURATION CHANGES! SRINST= JMP I PBEGIN/[BEGIN] /INSTRUCTION DEFINITION SYSINST=SYSIO&177+JMSC /I/O CALL INSTRUCTION DEFINITION VT8LPT= 1 /ALLOW VT-8/E KEYBOARD AND LPT: INTERRUPTS / IOT 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 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 LCFIOT= LPT^10+6002 /CLEAR LPT: FLAG LIEIOT= LIN^10+6005 /LPT: INPUT INTERRUPT ENABLE PER AC[11] LIRBIOT=LIN^10+6006 /READ LPT: INPUT, CLEAR FLAG LISFIOT=LIN^10+6001 /SKIP ON (CLEAR IF 6120) LPT: INPUT FLAG LLEIOT= LPT^10+6005 /LPT: INTERRUPT ENABLE PER AC[11] LLSIOT= LPT^10+6006 /OUTPUT LPT: CHARACTER, CLEAR FLAG LSFIOT= LPT^10+6001 /SKIP ON (CLEAR IF 6120) LPT: FLAG 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 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 PAGE 14 /OVER FILE AREA / THIS AREA WILL BE USED LATER AS THE BLOCK-MODIFYING BUFFER FOR / READBLK, WRITEBLK. IFNZRO .&177 CONSUL= . /OVERLAY UTILITY STARTS HERE CONSUL, ZROFIL/NOP /HERE IN CASE WE'RE CHAINED TO PS, TAD (XGETHAF&177+JMPIC) /GET RETURN JUMP INSTRUCTION DCA I (SWAPIT+11) /ZAP IT IN TAD (NEXT) /GET OUR NEXT ADDRESS DCA I GETHAF/[XGETHAF] /STASH IT JMP I (SWAPIT) /GO SWAP IN THE MONITOR AND COME BACK / COMES BACK HERE AFTER SWAPPING IN THE MONITOR. NEXT, TAD I (CTCZAP) /GET <^C> INSTRUCTION TAD (-SRINST) /COMPARE TO POSSIBLE VALUE SZA CLA /SKIP IF IT MATCHES JMP NEXT2 /JUMP IF NOT TAD (JMP I L7600/[SBOOT]) /MAKE IT BOOTSTRAP DCA I (CTCZAP) /ON <^C> NL0002 /SETUP "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SZA CLA /SKIP IF OVERLAY CURRENTLY OFF DCA I (CTCPZAP) /ELSE PREVENT EXTRA <^C> NEXT2, TAD (SKP) /ELIMINATE DCA I (ZROFIL) /LEADING ZERO CHARACTERS TAD (SKP) /ELIMINATE DCA I (ZROFIL+13) /TRAILING CHARACTER TAD L7756/[SFILES-1] /SETUP THE DCA MESSAGE /FILE POINTER TAD I PSCRSIZE/[SCRSIZE] /GET THE CORE SIZE WORD RTR;RAR /MOVE DOWN AND AND (70) /ISOLATE MCS BITS TAD (CDF 10) /TURN INTO CDF MCS+10 DCA I (OVRCDF) /STORE IN LOADER TAD I L7757/[SFILES] /GET FIRST FILE ARGUMENT SNA CLA /SKIP IF SOMETHING THERE JMP I (NOFILES) /JUMP IF NONE TAD I (SOUTFLS) /GET OUTPUT FILE COUNT SNA CLA /SKIP IF ANY JMP FILELP /ELSE KEEP GOING JMS I (REPORT) /COMPLAIN OF OBADMSG /OUTPUT FILES PRESENT FILELP, ISZ MESSAGE /BUMP TO NEXT FILE ARGUMENT TAD I MESSAGE /GET LATEST ARGUMENT SNA /SKIP IF SOMETHING THERE JMP FILESOK /JUMP IF WE DID ALL FILES DCA TPTR1 /SAVE LATEST FILE ARGUMENT DCA TCNT1 /CLEAR SEARCH COUNT TAD L7756/[SFILES-1] /POINT TO DCA TPTR2 /FILE LIST FLUKLP, ISZ TPTR2 /BUMP TO NEXT FILE TAD I TPTR2 /GET LATEST FILE ARGUMENT SNA /END OF LIST? JMP FLUKEND /YES CIA /NO, INVERT FOR TESTING TAD TPTR1 /IS IT OUR LATEST TEST VALUE? SNA CLA /SKIP IF NOT ISZ TCNT1 /ELSE COUNT IT JMP FLUKLP /KEEP GOING FLUKEND,NL7777 /-1 TAD TCNT1 /COMPARE TO SEARCH COUNT SNA CLA /SKIP IF NOT EXACTLY ONE JMP FLENTOK /JUMP IF EXACTLY ONE JMS I (REPORT) /COMPLAIN OF DBADMSG /DUPLICATION FLENTOK,JMS I (FLSETUP) /SETUP FILE ARGUMENT JMS I SSYSIO/[SYSIO] /CALL I/O ROUTINES FILBUFFER /TRANSFER ADDRESS BFUN, 3^100+.-. /UNIT BITS WILL BE FILLED IN BBLOCK, .-. /BLOCK NUMBER JMS I (FILVALIDATE) /VALIDATE FILE HEADER TAD MESSAGE /GET THE FILE POINTER TAD (21) /ADJUST TO FILE COUNT SZA CLA /SKIP IF FIRST FILE JMP SECTST /JUMP IF NOT TAD I (FILBUFFER+6) /GET PRIMARY/SECONDARY INDICATOR DCA PS /SAVE FOR LATER JMP SECOK /CONTINUE THERE SECTST, TAD I (FILBUFFER+6) /GET PRIMARY/SECONDARY INDICATOR SZA CLA /SKIP IF PRIMARY FILE JMP SECOK /JUMP IF NOT JMS I (REPORT) /COMPLAIN OF PBADMSG /BAD POSITION FOR PRIMARY FILE SECOK, NL7777 /INDICATE NOLOAD TESTING JMS I (FILOAD) /GO TEST THE FILE FOR LOAD LIMITS JMP FILELP /KEEP GOING FILESOK,TAD I (SBLOCK) /GET OUR LOADING BLOCK TAD (BINBUFFER-CONSUL%200) /ADD ON OFFSET TO IMAGE OF OVERLAY JMP I (FILOK2) /CONTINUE THERE DBADMSG,TEXT "DUPLICATE CONSOLE OVERLAY FILES!";0 PAGE TRPBUFF=. /TRAP BLOCKS WILL BE READ IN HERE LATER FILOK2, DCA I (BASBLK) /STORE AS BASE LOADING BLOCK TAD I (BASBLK) /GET IT BACK DCA I (WRIBLK) /STORE IN WRITE ROUTINE TAD I (BASBLK) /GET IT AGAIN DCA I (REDBLK) /STORE IN READ ROUTINE TAD I (SFUN) /GET OUR LOADING FUNCTION AND L7/[7] /JUST UNIT BITS TAD I (READFUN)/(10^100) /ADD ON PAGE BITS DCA I (READFUN) /STORE BACK NL4000 /SET WRITE BIT TAD I (READFUN) /NOW HAVE WRITE FUNCTION DCA I (WRTFUN) /STORE IN WRITE ROUTINE TAD L7756/[SFILES-1] /RESET THE DCA MESSAGE /FILE POINTER / IF /U SWITCH IS PASSED, DO A VIRTUAL LOAD. / IF /U SWITCH IS NOT PASSED, THEN THE FIRST FILE MUST BE PRIMARY TO / IMPLY /U. / IF /U NOT GIVEN THEN THE OVERLAY MUST BE ON TO ALLOW PATCHING BY A / SECONDARY FILE. TAD I (SWMX) /GET /M-/X SWITCHES AND L10/[10] /JUST /U SZA CLA /SKIP IF OFF JMP VIRLOAD /JUMP IF ON TAD I (PS) /GET PRIMARY/SECONDARY INDICATOR SNA CLA /SKIP IF SECONDARY LOAD JMP VIRLOAD /PRIMARY LOADING IMPLIES /U NL0002 /SETUP "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SZA CLA /SKIP IF OFF JMP MLOAD /JUMP IF ON JMS I (REPORT) /COMPLAIN OF NBADMSG /IMPOSSIBLE LOADING ATTEMPT MLOAD, DCA I (MLODZAP) /MEMORY LOADING INSTEAD OF VIRTUAL LOADING / IF SECONDARY LOADING, THE DEVICE NAME MUST MATCH THE OVERLAY. VIRLOAD,TAD I (PS) /GET PRIMARY/SECONDARY INDICATOR SNA CLA /SKIP IF SECONDARY JMP MOVNAME /JUMP IF PRIMARY TAD (OVID+BINBUFFER-1) /POINT AT DCA XR1 /OVERLAY DEVICE NAME TAD (DEVNAME-1) /POINT AT DCA XR2 /FILES DEVICE NAME NL7775 /SETUP THE DCA TCNT1 /COMPARE COUNTER NCHKLUP,TAD I XR1 /GET A WORD CIA /INVERT IT TAD I XR2 /COMPARE TO FILES' WORD SNA CLA /SKIP IF THEY DON'T MATCH JMP NMATCH /JUMP IF THEY DO JMS I (REPORT) /TELL THEM MBADMSG /THEY CAN'T DO THAT NMATCH, ISZ TCNT1 /DONE ALL YET? JMP NCHKLUP /NO, KEEP GOING MOVNAME,NL7775 /SETUP MOVE COUNT JMP I (MOVNM1) /CONTINUE THERE NBADMSG,TEXT "CONSOLE OVERLAY DISABLED, OVERLAY LOADING NOT ALLOWED!";0 OBADMSG,TEXT "INVALID OUTPUT FILES!" PBADMSG,TEXT "INVALID POSITION FOR PRIMARY CONSOLE OVERLAY FILE!";0 PAGE MOVNM1, JMS I PMOVE/[MOVE] /CALL MOVE ROUTINE NEWLCS, DEVNAME /MOVE DEVICE NAME NEWMCS, OVID+BINBUFFER /TO HERE LODLUP, ISZ MESSAGE /BUMP TO NEXT TAD I MESSAGE /GET A FILE ARGUMENT SNA CLA /SKIP IF VALID JMP LODEND /JUMP IF AT END OF LIST JMS I (FLSETUP) /SETUP FILE ARGUMENTS / NL0000 /INDICATE LOADING JMS I (FILOAD) /LOAD THE FILE JMP LODLUP /KEEP GOING LODEND, TAD I (MLODZAP) /GET VIRTUAL INDICATOR SZA CLA /SKIP IF MEMORY LOAD JMP VIRDONE /JUMP IF VIRTUAL LOAD JMS I (PROMESSAGE) /TELL THEM MMODMSG /MEMORY WAS UPDATED JMP NOFILES /KEEP GOING VIRDONE,JMS I (DUMP) /WRITE LAST BUFFER JMS I (CALCHK) /CALCULATE CHECKSUM TAD XR2 /GET THE CHECKSUM CIA /INVERT IT TAD I (OVRWRD+BINBUFFER) /ADD ON OVERLAY TYPE WORD TAD I (FUDWRD+BINBUFFER) /ADD ON CURRENT FUDGE WORD DCA I (FUDWRD+BINBUFFER) /STORE BACK TAD I (OURBLK) /GET BLOCK NUMBER DCA I (WRIBLK) /STASH IT JMS I (DUMP) /WRITE BACK UPDATED IMAGE JMS I (PROMESSAGE) /TELL THEM THAT THE CMODMSG /MODIFICATIONS WERE MADE NL0002 /SETUP "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SNA CLA /SKIP IF "C" BIT SET JMP NOFILES /JUMP IF NOT DCA TESTE /FORCE ENABLE BIT DCA I (UPDZAP) /FORCE PROPER MESSAGE AFTER ENABLE NOFILES,TAD I (SWAL) /GET /A-/L SWITCHES AND (400) /JUST /D SNA CLA /SKIP IF SET JMP TESTE /JUMP IF NOT JMS I (READBLK) /READ IN 0 /BLOCK ZERO NL0002 /SETUP "C" BIT MASK AND I (SCRSIZE&177+CONSUL) /GET THE "C" BIT FROM THE SYSTEM DEVICE SZA CLA /SKIP IF OFF JMP TURNOFF /JUMP IF ON NOTENAB,JMS I (REPORT) /TELL THEM WBADMSG /THEY GOOFED TURNOFF,TAD I PSCRSIZE/[SCRSIZE] /GET THE CORE SIZE WORD AND (4) /JUST "J" BIT SZA CLA /SKIP IF OFF TAD CATCORE/[7000] /ELSE BACKUP ONE FIELD TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE AND CATCORE/[7000] /ISOLATE PCS BITS JMS I (MEMSET) /SETUP NEW MCS, PCS, J BITS JMS I (ONOCOMMON) /GO DO COMMON STUFF JMS I (PROMESSAGE) /TELL THEM OOFFMSG /WE TURNED IT OFF DCA I (DOCLZAP) /PREVENT PROBLEMS JMP I (DOCLR1) /CONTINUE THERE TESTE, SKP /**** OVERLAY UPDATED AND ENABLED **** 0000 JMP TSTMEMORY /CONTINUE THERE TAD I (SWAL) /GET SWITCHES /A-/L AND L200/[200] /JUST /E SNA CLA /SKIP IF SET JMP I (TESTR) /JUMP IF NOT NL0002 /SETUP "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SNA CLA /SKIP IF OVERLAY ENABLED JMP TSTMEMORY /JUMP IF NOT JMS I (REPORT) /TELL THEM THAT THE EBADMSG /OVERLAY IS ALREADY ENABLED TSTMEMO,TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD RTL;RTL;RTL /MOVE UP LCS BITS AND CATCORE/[7000] /ISOLATE SHIFTED LCS BITS DCA NEWLCS /SAVE FOR NOW TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD AND CATCORE/[7000] /JUST PCS BITS SZA /SKIP IF 4K JMP TSTMOK /JUMP IF MORE JMS I (REPORT) /TELL THEM SBADMSG /THEY COME UP SHORT TSTMOK, CIA /INVERT PCS BITS TAD NEWLCS /COMPARE TO LCS BITS SNA CLA /SKIP IF LCS <> PCS TAD CATCORE/[7000] /ELSE MAKE LCS < PCS TAD NEWLCS /GET LCS BITS JMS I (MEMSET) /SETUP NEW MCS, LCS BITS DCA TPTR2 /SAVE FOR LATER JMS I (READBLK) /READ IN OVRSUM%200+1 /BLOCK 13 TAD I (SBLOCK) /GET OUR LOAD BLOCK TAD (BINBUFFER-CONSUL%200) /ADD ON OFFSET DCA I (OVRBLK&177+CONSUL) /STORE IMAGE BASE BLOCK IN THEIR CALL TAD I (SFUN) /GET OUR LOADING FUNCTION AND L7/[7] /JUST UNIT BITS TAD NEWLCS /ADD ON NEW MCS BITS TAD (26^100+10) /ADD ON PAGE BITS AND EXTRA FIELD JMP I (CHKSET) /CONTINUE THERE PAGE CHKSET, DCA I (OVRFUN&177+CONSUL) /STORE IN OVERLAY READ FUNCTION WORD TAD I (NEWLCS) /GET NEW MCS BITS TAD (CDF 10) /MAKE IT CDF MCS+10 DCA I (OVRCHK&177+CONSUL) /STORE OVER ONCE-ONLY CODE IMAGE TAD I (OVRCHK&177+CONSUL) /GET CDF MCS+10 BACK IAC /TAD (CIF-CDF) /MAKE IT CIF MCS+10 DCA I (OVRLOAD&177+CONSUL) /STORE OVER ONCE-ONLY CODE IMAGE JMS I (CALCHK) /CALCULATE CHECKSUM TAD I (CHKCNT+BINBUFFER) /GET CHECKSUM COUNT DCA I (OVRCNT&177+CONSUL) /STORE OVER ONCE-ONLY CODE TAD I (CHKPTR+BINBUFFER) /GET CHECKSUM POINTER DCA I (OVRPTR&177+CONSUL) /STORE OVER ONCE-ONLY CODE / THE TRAP BLOCKS ARE ABOUT TO BE READ IN OVER THE PRIOR TWO PAGES. / ALL REFERENCES TO THIS PRIOR CODE ARE NO LONGER VALID! JMS I (TRPREAD) /READ IN TRAP BLOCKS TAD XR2 /GET CURRENT CHECKSUM TAD I (HIDWRD&177+TRPBUFFER) /ADD ON ID WORD FROM TRAP BLOCKS CIA /INVERT IT DCA I (OVRSUM&177+CONSUL) /STORE OVER CHECKSUM WORD JMS I (WRITEBLK) /WRITE THE BLOCK BACK JMS I (READBLK) /READ IN 0 /BLOCK ZERO NL0002 /SET "C" BIT TAD TPTR2 /GET NEW CORE SIZE WORD JMS ONOCOMMON /DO COMMON STUFF UPDZAP, SKP /**** OVERLAY UPDATED AND ENABLED **** 0000 JMP DOCLEAR /CONTINUE THERE JMS I (PROMESSAGE) /TELL THEM OONMSG /WE DID IT JMP DOCLR2 /CONTINUE THERE TESTR, TAD I L7757/[SFILES] /GET FIRST FILE ARGUMENT SZA CLA /SKIP IF NO FILES JMP DOCHK /ELSE CHECK FURTHER TAD I (SWMX) /GET /M-/X SWITCHES AND L100/[100] /JUST /R SZA CLA /SKIP IF OFF JMP DOCLCHK /JUMP IF ON JMS I (REPORT) /TELL THEM ZBADMSG /WE HAVE NOTHING TO DO DOCHK, TAD I (MLODZAP) /GET VIRTUAL LOAD INDICATOR SZA CLA /SKIP IF MEMORY WAS LOADED NL0002 /ELSE SETUP "C" BIT MASK IF VIRTUAL LOAD AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SZA CLA /SKIP IF OFF JMP DOCLEAR /JUMP IF ON JMP I L7600/[SBOOT] /DON'T CLEAR IF NOT ENABLED DOCLCHK,NL0002 /SETUP "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SNA CLA /SKIP IF SET JMP I (NOTENABLED) /JUMP IF NOT DOCLEAR,JMS I (PROMESSAGE) /TELL THEM THAT ZMEMMSG /WE ARE RELOADING DOCLR1, JMS I (TRPREAD) /READ IN TRAP BLOCKS JMS I (READBLK) /READ IN 0 /BLOCK ZERO JMS I (OVOFF) /TURN OFF OVERLAY DOCLR2, TAD (ADRLST&177+TRPBUFFER-1)/POINT AT DCA XR1 /ADDRESS LIST CLRLUP, TAD I XR1 /GET AN ADDRESS SNA /END OF LIST? JMP CLRIT /YES DCA TPTR1 /NO, STASH THE POINTER TAD TPTR1 /GET IT BACK TAD (CONSUL-SBOOT) /ADJUST TO POINT TO BUFFER DCA TPTR2 /STASH THE POINTER TAD I TPTR2 /GET THE NORMAL CONTENTS DCA I TPTR1 /STORE IT JMP CLRLUP /KEEP GOING CLRIT, JMS I (FLDSET) /GET CDF MCS+10 DOCLZAP,DCA CLRFLD /STORE IN-LINE; **** CONSOLE/D **** 0000 CLRFLD, CDF 10+.-. /WILL BE CDF MCS+10 NL2000 /SETUP THE DCA TPTR1 /CLEAR COUNT NL7777 /SETUP THE DCA XR1 /CLEAR POINTER DCA I XR1 /CLEAR A WORD ISZ TPTR1 /DONE YET? JMP .-2 /NO, KEEP GOING CDF 00 /BACK TO OUR FIELD JMP I L7600/[SBOOT] /GOODBYE! ONOCOMM,.-. /COMMON ON/OFF ROUTINE DCA I (SCRSIZE&177+CONSUL) /STORE OVER IMAGE JMS I (WRITEBLK) /WRITE THE BLOCK BACK TAD I PSCRSIZE/[SCRSIZE] /GET THE CORE SIZE WORD AND CATCORE/[7000] /JUST PCS BITS TAD I (SCRSIZE&177+CONSUL) /ADD ON NEW MCS, LCS, J BITS DCA I PSCRSIZE/[SCRSIZE] /STORE IN MEMORY FOR THOSE WHO NEED IT JMP I ONOCOMMON /RETURN WBADMSG,TEXT "CONSOLE OVERLAY NOT ENABLED!";0 PAGE / FILE VALIDATION ROUTINE. / CHECKS FOR PROPER HEADER VALUES AND DEVICE NAME MATCHES. FILVALI,.-. /FILE VALIDATION ROUTINE TAD I (FILBUFFER) /GET FLAG WORD TAD (-5252) /COMPARE TO MAGIC VALUE SZA CLA /SKIP IF IT MATCHES JMP FILBAD /ELSE COMPLAIN TAD I (FILBUFFER+1) /GET FIRST FILE ORIGIN TAD L7600/[-200] /COMPARE TO ASSEMBLER VALUE SZA CLA /SKIP IF IT MATCHES JMP FILBAD /ELSE COMPLAIN TAD I (FILBUFFER+2) /GET USER/ASSEMBLER ORIGIN TAD L7600/[-200] /COMPARE TO PROPER VALUE SZA CLA /SKIP IF IT MATCHES JMP FILBAD /ELSE COMPLAIN TAD I (FILBUFFER+6) /GET DELIMITER ORIGIN AND FL7700/(7700) /JUST HIGH-ORDER HALF SZA CLA /SKIP IF ZERO JMP FILBAD /ELSE COMPLAIN TAD (FILBUFFER+3) /POINT TO DCA GETBASE /NAME BASE DCA GETNDX /CLEAR INPUT INDEX JMS I NAME/[XNAME] /SEE IF A NAME IS THERE JMP FILBAD /COMPLAIN IF NOT DCA GETNDX /CLEAR INDEX AGAIN VNMLUP, JMS I GETHAF/[XGETHAF]/GET A CHARACTER SNA CLA /SKIP IF NOT JMP ENDNAME /JUMP IF ISZ GETNDX /BUMP TO NEXT JMP VNMLUP /KEEP GOING ENDNAME,TAD GETNDX /GET INDEX TAD L7772/[-6] /COMPARE TO END VALUE FL7700, SMA CLA /SKIP IF NOT THERE YET JMP NAMEOK /JUMP IF AT END ISZ GETNDX /BUMP TO NEXT JMS I GETHAF/[XGETHAF]/GET THE CHARACTER SNA CLA /BETTER BE JMP ENDNAME /ELSE KEEP GOING FILBAD, DCA I (XPRTNAM+5) /MAKE IT NOT DO ANY LENGTH MESSAGE JMS I NAMPRT/[XPRTNAM]/COMPLAIN OF FBADMSG /BAD FILE TAD MESSAGE /GET FILE POINTER TAD (21+1) /ADJUST TO FILE NUMBER JMS I LNOPRT/[XLNOPRT]/PRINT THE NUMBER JMS I PR6BIT/[XPR6BIT]/DO A , JMP I L7600/[SBOOT] /GOODBYE! NAMEOK, TAD (FILBUFFER+3-1) /POINT AT DCA XR1 /NAME IN BINARY BUFFER TAD (DEVNAME-1) /POINT AT DCA XR2 /DEVICE NAME BUFFER NL7775 /SETUP THE DCA TCNT1 /COUNTER NAMLOOP,TAD MESSAGE /GET FILE POINTER TAD (21) /MAKE IT A NUMBER SNA CLA /SKIP IF NOT FIRST FILE JMP NAMOVE /JUMP IF FIRST FILE TAD I XR1 /GET TWO CHARACTERS CIA /INVERT FOR TESTING TAD I XR2 /COMPARE TO DEVICE NAME CHARACTERS SZA CLA /SKIP IF THEY MATCH JMP FILBAD /ELSE COMPLAIN JMP NMCOUNT /CONTINUE THERE NAMOVE, TAD I XR1 /GET TWO CHARACTERS DCA I XR2 /STORE IN DEVICE NAME AREA NMCOUNT,ISZ TCNT1 /DONE YET? JMP NAMLOOP /NO, MORE TO DO JMP I FILVALIDATE /YES, RETURN TO CALLER CALCHK, .-. /CHECKSUM CALCULATION ROUTINE TAD I (SBLOCK) /GET OUR LOADING BLOCK TAD (BINBUFFER-CONSUL%200) /ADD ON OFFSET TO OVERLAY IMAGE DCA OURBLK /STORE IN-LINE TAD I (SFUN) /GET OUR LOADING FUNCTION AND L7/[7] /JUST UNIT BITS TAD (13^100) /FORM READ FUNCTION DCA OURFUN /STORE IN-LINE JMS I SSYSIO/[SYSIO] /READ IN HEAD OF IMAGE OBINBUF,BINBUFFER /TRANSFER ADDRESS OURFUN, 13^100+.-. /UNIT BITS WILL BE FILLED IN OURBLK, .-. /BLOCK WILL BE FILLED IN TAD I (CHKCNT+BINBUFFER) /GET CHECKSUM COUNT DCA OURFUN /STASH IT TAD I (CHKPTR+BINBUFFER) /GET CHECKSUM POINTER AGAIN TAD OBINBUF/(BINBUFFER-0) /ADJUST TO WHERE CODE IS NOW DCA FLDSET /STASH THE POINTER TAD I FLDSET /GET A WORD ISZ FLDSET /BUMP TO NEXT ISZ OURFUN /DONE YET? JMP .-3 /NO, KEEP GOING DCA XR2 /SAVE FOR NOW JMP I CALCHK /RETURN FLDSET, .-. /CDF MCS+10 SETUP ROUTINE TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD RTR;RAR /MOVE OVER AND AND (70) /ISOLATE MCS BITS TAD (CDF 10) /TURN INTO CDF MCS+10 JMP I FLDSET /RETURN FLSETUP,.-. /FILE ARGUMENT SETUP ROUTINE TAD I MESSAGE /GET LATEST ENTRY AND L7770/[7770] /JUST BLOCK BITS DCA I (BBLOCK) /STORE IN-LINE TAD I MESSAGE /GET IT AGAIN AND L7/[7] /JUST UNIT BITS TAD (3^100) /ADD ON READ FUNCTION DCA I (BFUN) /STORE IN-LINE JMP I FLSETUP /RETURN PAGE / FILE LOADING ROUTINE. / IF CALLED WITH NEGATIVE AC, FILES WILL BE CHECKED FOR LOADING LIMIT; / EXCEEDING 0-5777 WILL CAUSE AN ERROR MESSAGE. / IF CALLED WITH CLEAR AC, FILES WILL BE LOADED. IF /U IS NOT SET OR / IMPLIED, THE CONTENTS OF THE FILE WILL BE LOADED INTO FIELD MCS+1. IF /U / IS SET OR IMPLIED, THE CONTENTS OF THE FILE WILL MODIFY THE OVERLAY IMAGE / MAINTAINED JUST PAST THE CONSOLE UTILITY ITSELF. THE 0-1777 PORTION OF THE / IMAGE IS INITIALLY LOADED INTO THE VIRTUAL BUFFER MERELY BY RUNNING THE / CONSOLE UTILITY. FILOAD, .-. /FILE LOADING ROUTINE DCA TPTR1 /SAVE LOADING SWITCH TAD I (BBLOCK) /GET LOAD BLOCK DCA LODBLK /STASH IT TAD I (BFUN) /GET LOAD FUNCTION DCA LODFUN /STASH IT TAD TPTR1 /GET LOADING SWITCH SPA CLA /SKIP IF LOADING REQUIRED JMP BNWBUF /JUMP IF JUST TESTING BLOAD, JMS I SSYSIO/[SYSIO] /CALL I/O ROUTINES LODCORE,FILBUFFER /TRANSFER ADDRESS LODFUN, 3^100+.-. /UNIT BITS WILL BE FILLED IN LODBLK, .-. /BLOCK WILL BE FILLED IN BNWBUF, TAD LODCOR/[FILBUFF]/SETUP THE DCA BINPTR /WORD POINTER NL7775/TAD (-3) /SETUP THE DCA BLKCNT /BLOCK COUNTER BNWBLK, TAD L7756/[-22] /SETUP THE DCA BGRPCT /GROUP COUNTER BNWGRP, TAD L7772/[-6] /SETUP THE DCA BWDCT /WORD COUNTER JMS BGETWD /GET FLAG WORD DCA BRLBTS /STASH IT BGRPLP, TAD BRLBTS /GET THE FLAG WORD CLL RTL /MOVE IT AROUND DCA BRLBTS /STORE BACK CLA IAC CML /SETUP MASK AND BRLBTS /GET LATEST PAIR SNL / OR FIELD SETTING? JMP BEOF /YES SZA CLA /ORIGIN SETTING? JMP BORGIN /YES TAD TPTR1 /GET LOADING SWITCH SPA CLA /SKIP IF LOADING REQUIRED JMP TESTIT /JUMP IF ONLY TESTING MLODZAP,JMP VLOAD /**** NOT /U AND SECONDARY LOAD **** 0000 JMS BGETWD /GET THE WORD OVRCDF, CDF 10+.-. /WILL BE CDF MCS+10 DCA I BLOC /STORE THE WORD CDF 00 /BACK TO OUR FIELD BNXTLOC,ISZ BLOC /BUMP TO NEXT NOP /JUST IN CASE BNXTWD, ISZ BWDCT /DONE WITH THIS GROUP? JMP BGRPLP /NO, KEEP GOING ISZ BGRPCT /DONE WITH THIS BLOCK? JMP BNWGRP /NO, KEEP GOING ISZ BINPTR /GET PAST ISZ BINPTR /WASTE WORDS ISZ BLKCNT /DONE WITH THIS GROUP OF BLOCKS? JMP BNWBLK /NO, KEEP GOING TAD LODBLK /GET LOADING BLOCK TAD (3) /UPDATE IT DCA LODBLK /STORE BACK JMP BLOAD /KEEP GOING BORGIN, JMS BGETWD /GET ORIGIN WORD DCA BLOC /STASH IT JMP BNXTWD /KEEP GOING TESTIT, JMS BGETWD /GET THE WORD NL2000 /SETUP LIMIT WITH CLEAR LINK TAD BLOC /COMPARE TO ORIGIN SNL CLA /SKIP IF TOO HIGH JMP BNXTLOC /ELSE KEEP GOING JMS I (REPORT) /TELL THEM IBADMSG /THE FILE IS ILLEGAL VLOAD, TAD BLOC /GET ADDRESS RTL;RTL;RTL /%200 AND (30) /JUST RELATIVE PAGE BITS TAD BASBLK /ADD ON BASE BLOCK DCA TPTR2 /SAVE AS NEW BUFFER BLOCK TAD REDBLK /GET CURRENT BLOCK CIA /INVERT FOR TESTING TAD TPTR2 /COMPARE TO NEW BLOCK SNA CLA /SKIP IF DIFFERENT JMP ADROK /JUMP IF IN CURRENT BUFFER JMS DUMP /DUMP THE CURRENT BUFFER TAD TPTR2 /GET NEW BUFFER BLOCK DCA WRIBLK /SETUP WRITE ROUTINE TAD TPTR2 /GET NEW BLOCK AGAIN DCA REDBLK /SETUP READ ROUTINE JMS I SSYSIO/[SYSIO] /CALL I/O ROUTINES BINBUFFER /TRANSFER ADDRESS READFUN,10^100+.-. /UNIT BITS WILL BE FILLED IN REDBLK, .-. /BLOCK WILL BE FILLED IN ADROK, TAD BLOC /GET ADDRESS AND (10^200-1) /JUST RELATIVE BITS TAD WRTCOR/(BINBUFF)/ADD ON BUFFER BASE DCA TPTR2 /STASH THE POINTER JMS BGETWD /GET THE WORD DCA I TPTR2 /STORE IT JMP BNXTLOC /KEEP GOING BEOF, SNA CLA /? JMP I FILOAD /YES, RETURN JMS BGETWD /NO, GET FIELD SETTING CLA /THROW IT AWAY JMP BNXTWD /KEEP GOING BGETWD, .-. /GET A WORD ROUTINE TAD I BINPTR /GET A WORD ISZ BINPTR /BUMP TO NEXT JMP I BGETWD /RETURN REPORT, .-. /MESSAGE REPORTING ROUTINE TAD I REPORT /GET MESSAGE ADDRESS DCA REPARG /STORE IN-LINE JMS MESSAGE /GO PRINT THE REPARG, .-. /PASSED MESSAGE JMP I L7600/[SBOOT] /GOODBYE! DUMP, .-. /BUFFER DUMP ROUTINE JMS I SSYSIO/[SYSIO] /CALL I/O ROUTINES WRTCORE,BINBUFFER /TRANSFER ADDRESS WRTFUN, 10^100+WRITE+.-. /UNIT BITS WILL BE FILLED IN WRIBLK, .-. /BLOCK WILL BE FILLED IN JMP I DUMP /RETURN BASBLK, .-. /BASE BLOCK OF IMAGE BGRPCT, .-. /GROUP COUNTER BINPTR, .-. /WORD POINTER BLKCNT, .-. /BLOCK COUNTER BLOC, .-. /LOCATION COUNTER BRLBTS, .-. /FLAG WORD BWDCT, .-. /WORD COUNTER PAGE TRPREAD,.-. /TRAP BLOCK READ ROUTINE JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES TRPBUFFER /TRANSFER ADDRESS 2^100+.-. /UNIT BITS WILL BE FILLED IN TRPBLK /BLOCK NUMBER JMP I TRPREAD /RETURN READBLK,.-. /READ IN BLOCK TO ZAP ROUTINE TAD I READBLK /GET THE BLOCK ISZ READBLK /BUMP PAST THE ARGUMENT DCA RBLOCK /STORE IN-LINE JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES CONSUL /TRANSFER ADDRESS 1^100+.-. /UNIT BITS WILL BE FILLED IN RBLOCK, .-. /BLOCK WILL BE FILLED IN JMP I READBLK /RETURN WRITEBL,.-. /WRITE OUT ZAPPED BLOCK ROUTINE TAD RBLOCK /GET READ BLOCK DCA WBLOCK /MAKE IT WRITE BLOCK JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES CONSUL /TRANSFER ADDRESS 1^100+WRITE+.-. /UNIT BITS WILL BE FILLED IN WBLOCK, .-. /BLOCK WILL BE FILLED IN JMP I WRITEBLK /RETURN PROMESS,.-. /PROTECTED MESSAGE PRINT ROUTINE TAD I PROMESSAGE /GET MESSAGE ADDRESS DCA PROMARG /STORE IN-LINE ISZ PROMESSAGE /BUMP PAST ARGUMENT TAD I (CCHECK+12) /GET CURRENT <^C> INSTRUCTION DCA PROTEMP /SAVE IT DCA I (CCHECK+12) /DISABLE <^C> CHECKING JMS MESSAGE /TELL THEM PROMARG,.-. /THE PASSED MESSAGE TAD PROTEMP /RESTORE THE DCA I (CCHECK+12) /ORIGINAL VALUE JMP I PROMESSAGE /RETURN OVOFF, .-. /OVERLAY TURNOFF ROUTINE TAD PSCRSIZE/[-167] /SETUP THE DCA PROMARG /WASTE COUNTER ISZ PROTEMP /WASTE JMP .-1 /SOME TIME ISZ PROMARG /WASTED ENOUGH? JMP .-3 /NO, KEEP GOING TAD I (OVRCDF) /GET CDF MCS+10 IAC /MAKE IT CIF MCS+10 DCA PROTEMP /STORE IN-LINE PROTEMP,.-. /WILL BE CIF MCS+10 JMS CONOFF /TURN OFF THE OVERLAY JMP I OVOFF /RETURN MEMSET, .-. /MCS, ETC. SETUP ROUTINE CLL RTR;RAR /MOVE TO MCS BITS DCA I (NEWMCS) /SAVE FOR NOW TAD I (NEWMCS) /GET IT BACK CLL RTR;RAR /MOVE TO LCS BITS DCA I (NEWLCS) /SAVE FOR NOW TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD AND (4) /JUST "J" BIT TAD I (NEWMCS) /ADD ON NEW MCS BITS TAD I (NEWLCS) /ADD ON NEW LCS BITS JMP I MEMSET /RETURN DEVNAME,ZBLOCK 3 /DEVICE NAME CMODMSG,TEXT "[CONSOLE OVERLAY UPDATED]" EBADMSG,TEXT "CONSOLE OVERLAY ALREADY ENABLED!";0 FBADMSG,TEXT "INVALID CONSOLE OVERLAY FILE #";0 IBADMSG,TEXT "INVALID OVERLAY ADDRESS!";0 PAGE MBADMSG,TEXT "SECONDARY CONSOLE OVERLAY FILE INCOMPATIBLE WITH CONSOLE OVERLAY!" MMODMSG,TEXT "[CONSOLE OVERLAY MODIFIED]";0 OOFFMSG,TEXT "[CONSOLE OVERLAY DISABLED]";0 OONMSG, TEXT "[CONSOLE OVERLAY ENABLED]" SBADMSG,TEXT "CONSOLE OVERLAY NOT AVAILABLE IN ONLY 4K!" ZBADMSG,TEXT "NO VIABLE OPTIONS GIVEN!";0 ZMEMMSG,TEXT "[CONSOLE OVERLAY WILL BE RELOADED]";0 PAGE / 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. BINBUFF,FIELD 0 /FORGET ALL LITERALS *BINBUFF /RESTORE ORIGIN BINBUFF,RELOC 0 /WHERE THIS LOADS *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, 0 /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 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 / 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, 7005 /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, 0000 /FIRST PAIR OF DEVICE NAME CHARACTERS 0000 /SECOND PAIR OF DEVICE NAME CHARACTERS 0000 /THIRD PAIR OF DEVICE NAME CHARACTERS / 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 /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 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 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, IFZERO ONEWAY < 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, IFNZRO VT8LPT < 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 / 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 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 "O&177+40 "N&177+40 " &177 "U&177 "N&177+40 "I&177+40 "T&177+40 " &177 UNTBLB, .-. /UNIT DIGIT WILL GO HERE " &177 "A&177+40 "T&177+40 " &177 "B&177 "L&177+40 "O&177+40 "C&177+40 "K&177+40 " &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 "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 LOUTRY /JUMP IF NOT JMS LINPUT /TRY TO CHANGE STATUS SPA SNA CLA /SKIP IF <^Q> RECEIVED JMP I LPOUT /ELSE TAKE FAILURE RETURN LOUTRY,.-. /WILL BE CIF CDF 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 LPSTRD /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 LPSTRD, 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 LPCIDF, .-. /WILL BE CIF CDF OUR FIELD TAD LINFLAG /GET INPUT FLAG SNA /SKIP IF SET JMP LINETST /JUMP IF NOT DCA LINCHAR /STORE FOR NOW DCA LINFLAG /CLEAR THE EVENT FLAG TAD LINCHAR /GET THE CHARACTER JMP GOTLINPUT /CONTINUE THERE LINETST,.-. /WILL BE CIF CDF OUR FIELD ONEWAY-1&LISFIOT /FLAG UP NOW? JMP I LINPUT /NO, JUST RETURN LIRBIOT /YES, GET THE CHARACTER 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 I LINPUT /RETURN WITH CLEAR AC IF NOT NL2000 /SET <^Q> VALUE SKP /NOT <^S> VALUE LPSETS, NL4000 /SET <^S> VAUE JMP I LINPUT /RETURN / INTERRUPT SETUP ROUTINE. INTSET, .-. /INTERRUPT SETUP NL7777 /SET ALL BITS KIEIOT /ENABLE INTERRUPTS, ERRORS ON KL-8JA NOP /JUST IN CASE NL7777 /SET ALL BITS TIEIOT /ENABLE OUTPUT INTERRUPTS ON DECMATE NOP /JUST IN CASE NL7777 /SET ALL BITS ONEWAY-1&LIEIOT /ENABLE INTERRUPTS, ERRORS ON KL-8JA NOP /JUST IN CASE NL7777 /SET ALL BITS LLEIOT /ENABLE INTERRUPTS ON LS-8/E NOP /JUST IN CASE IFNZRO VT8LPT < NL7777 /SET ALL BITS DKIEIOT /ENABLE INTERRUPTS ON VT-8/E KEYBOARD, LPT: NOP /JUST IN CASE > CLA /CLEAN UP JMP I INTSET /RETURN / 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 IFNZRO VT8LPT < DKSFIOT /VT-8/E KEYBOARD SKIP > 0000 /THIS ENDS THE LIST 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 INCIDF, .-. /WILL BE CIF CDF OUR FIELD TAD INFLAG /GET INPUT FLAG SNA /SKIP IF SET JMP INTST2 /JUMP IF NOT DCA INCHAR /SAVE IN INPUT BUFFER DCA INFLAG /CLEAR EVENT FLAG JMP I INTEST /RETURN TO INPUT ROUTINE INTST2, .-. /WILL BE CIF CDF OUR FIELD KSFIOT /FLAG UP? JMP INRET /NO, RETURN TO ORIGINAL CALLER KRBIOT /YES, GET THE CHARACTER AND CLEAR HARDWARE FLAG DCA INCHAR /SAVE IN INPUT BUFFER JMP I INTEST /RETURN TO INPUT ROUTINE OUTEST, .-. /OUTPUT TEST (AND PRINT) ROUTINE CNOCIDF,.-. /WILL BE CIF CDF 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 I OUTEST /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 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 / 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 PAGE ZBLOCK 10^200-. /END OF INITIALLY LOADED REGION OVEND= . /END OF INITIALLY LOADED OVERLAY SEGMENT TRPAGE, ZBLOCK 200 /FIRST TRAP BLOCK LOADED HERE TRPAG2, ZBLOCK 200 /SECOND TRAP BLOCK LOADED HERE / 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 NL0002 /SETUP CIF BIT TAD I (SETCDF) /FORM CIF CDF OUR FIELD DCA I (INCIDF) /STORE IN-LINE TAD I (INCIDF) /GET IT BACK DCA I (INTST2) /STORE IN-LINE TAD I (INCIDF) /GET IT BACK DCA I (CNOCIDF) /STORE IN-LINE TAD I (INCIDF) /GET IT BACK DCA I (LPCIDF) /STORE IN-LINE TAD I (INCIDF) /GET IT BACK DCA I (LOUTRY) /STORE IN-LINE TAD I (INCIDF) /GET IT BACK DCA I (LINETST) /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 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 TIMOUT, ISZ OUTLPT /WASTE JMP TIMTST /SOME TIME ISZ INCON /WAITED TOO LONG? JMP TIMTST /NO, TRY AGAIN / THE FLAG MAY NEVER JUST 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 / NOW DETERMINE HOW WE SHOULD READ THE MONITOR'S KEYBOARD FOR <^S>/<^Q> / ETC. PURPOSES. 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 / 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 NOPUNCH /FOOL THE ASSEMBLER ZBLOCK 2600-. /END OF REGION AVAILABLE FOR CHECKSUM CALCULATION ZBLOCK 4000-. /GET TO LPT: BUFFER LPTBUFF=. /LPT: BUFFER STARTS HERE BUFSIZE=6000-. /SIZE OF LPT: BUFFER ENPUNCH /UN-FOOL THE ASSEMBLER FIELD 0 /DUMP PAGE ZERO LITERALS NOW *OVEND /RESTORE PREVIOUS ORIGIN RELOC /RESTORE ORIGIN NOPUNCH /FOOL THE ASSEMBLER / DURING FILE LOADING, THIS REGION IS USED AS A BUFFER FOR THE FILE CONTENTS. / IT LATER IS USED TO EXTEND THE IMAGE OF THE OVERLAY LOADED INTO MEMORY / FROM 0000-1777 UP TO 0000-2577 FOR CHECKSUMMING PURPOSES. FILBUFF,ZBLOCK 3^200 /BINARY FILE BUFFER IFNZRO SBOOT-.&4000 $ /THAT'S ALL FOLK!