/ DISPLAY OVERLAY FOR P?S/8 FOCAL / LAST EDIT: 01-APR-1987 18:00:00 CJL / P?S/8 FOCAL OVERLAY FOR BUFFERED DISPLAY OF X-Y POINTS ON A SCOPE INTERFACE. / THIS OVERLAY PROVIDES A DISPLAY FUNCTION TO P?S/8 FOCAL SIMILAR TO FOCAL-12 / OR BASIC-RT. IT CAN BE ASSEMBLED FOR SEVERAL HARDWARE CONFIGURATIONS: / SETTING AA01A=1 CREATES A VERSION FOR THE AA01A (A. S. D-A). / SETTING AX08=1 CREATES A VERSION FOR THE AX08 WITH RM-503 SCOPE. / SETTING S34D=1 CREATES A VERSION FOR THE 34D SCOPE. / SETTING VC12=1 CREATES A VERSION FOR THE PDP-12 SCOPE. / SETTING VC8E=1 CREATES A VERSION FOR THE LAB-8/E SCOPE. / SETTING CSW=1 CAUSES THE CONSOLE SWITCHES TO CONTROL AN ADDITIONAL DELAY. / THIS IS BEYOND THE NORMAL HARDWARE FLAGS, ETC. / FUNCTIONS AVAILABLE: / FDIS(X,Y) INSERT POINT AT (X,Y) INTO DISPLAY BUFFER. / FDIS(0) CLEAR ALL POINTS FROM DISPLAY BUFFER. / FDIS(NON-ZERO) FORCE ALL POINTS TO DISPLAY ONCE. / FIO(NEGATIVE) RETURNS NUMERICAL VALUE (MODULO 128) OF NEXT ASCII CHARACTER / TYPED; P?S/8 FOCAL WILL WAIT FOR INPUT IF NECESSARY (WHILE / BUFFERING THE DISPLAY). SINCE INTEGER CONVERSION IS USED / FOR EVALUATION, THE ARGUMENT MUST BE NEGATIVE OR WITHIN / THE RANGE 2048-4095 MOD 4096. / FIO(CHAR<2048) OUTPUT ASCII CHARACTER; P?S/8 FOCAL WILL BUFFER THE DISPLAY / IF IT MUST WAIT TO OUTPUT THE CHARACTER. SINCE INTEGER / CONVERSION IS USED FOR EVALUATION, THE ARGUMENT MUST BE / POSITIVE AND BETWEEN 0000-2047 MOD 4096. NORMAL OUTPUT / DEVICES GENERALLY REDUCE THE CHARACTER VALUE RANGE TO / 0000-0255 MOD 256 ALLOWING ANY COMBINATION OF ASCII / CHARACTER OUTPUT WITH OR WITHOUT PARITY SET. / ALL CURRENT POINTS WILL BE DISPLAYED WHILE P?S/8 FOCAL WAITS FOR EITHER / KEYBOARD INPUT OR TERMINAL OUTPUT. / THIS OVERLAY CAN BE USED WITH THE "OPATCH" AND "VT8PCH" OVERLAYS, BUT MUST / BE LOADED LAST TO PREVENT PATCH CONFLICT. / USE OF THIS OVERLAY WITH INCOMPATIBLE VERSIONS OF FOCAL/OVERLAYS WILL YIELD / THE ERROR MESSAGE: 'FOCAL/OVERLAY CONFLICT!' FOLLOWED BY EXIT TO P?S/8. / DOMAIN AND RANGE CONSIDERATIONS: / AA01A VERSIONS RANGE FROM -2048 THROUGH 2047. / VC-8/E, 34D VERSIONS RANGE FROM -512 THROUGH 511. / AX08, VC-12 VERSIONS RANGE FROM -256 THROUGH 255. / UP TO 1984 POINTS CAN BE BUFFERED IN THE NORMAL VERSION. / INVOKING '/2' USES AN ADDITIONAL MEMORY FIELD WHICH THEN ALLOWS UP TO / 3968 BUFFERED POINTS. / ASSEMBLY PARAMETERS. / SET ONE OF THE FOLLOWING HARDWARE PARAMETERS BY REMOVING THE "/": / AA01A= 1 /CREATE AA01A (A. S.) VERSION / AX08= 1 /CREATE AX08 VERSION / S34D= 1 /CREATE 34D VERSION / VC12= 1 /CREATE VC-12 VERSION / VC8E= 1 /CREATE VC-8/E VERSION / SET ONE OF THE FOLLOWING PARAMETERS GOVERNING CONSOLE-CONTROLLED DELAY BY / REMOVING THE "/": / CSW= 0 /NO ADDITIONAL CONSOLE-CONTROLLED DELAY / CSW= 1 /USE CONSOLE SWITCHES FOR ADDITIONAL DELAY / SET THE DISPLAY FIELD(S): / DFIELD= 20 /(FIRST OF TWO) DISPLAY FIELD(S) / CONDITIONAL ASSEMBLY PARAMETERS. IFNDEF AA01A /DON'T CREATE AA01A (A. S.) VERSION IFNDEF AX08 /DON'T CREATE AX08 VERSION IFNDEF CSW /DON'T CAUSE CONSOLE DELAY IFNDEF DFIELD /USE FIELD(S) TWO (AND THREE) FOR DISPLAY IFNDEF S34D /DON'T CREATE 34D VERSION IFNDEF TTY /BASE DEVICE CODE OF TTY: IFNDEF VC12 /DON'T CREATE VC-12 VERSION IFNDEF VC8E /DON'T CREATE VC-8/E VERSION / DEFAULT PARAMETERS. H= AA01A!AX08!S34D!VC12 /ACCUMULATE PARAMETERS H= H!VC8E /ACCUMULATE PARAMETERS IFZERO H /DEFAULT TO VC-8/E VERSION XLIST OFF IFNDEF OFF IFNDEF ON IFNDEF OUTBUFFER XLIST ON / I/O AND PERIPHERAL DEFINITIONS. ALPHA= 0000 /DISPLAY ALPHA REGISTER FOR VC-12 DAL1= 6551 /LOAD X ON AA01A (A. S.) DAL2= 6552 /LOAD Y ON AA01A (A. S.) DILX= 6053 /LOAD X ON VC-8/E DILY= 6054 /LOAD Y ON VC-8/E DINT= 6554 /INTENSIFY ON AA01A (A. S.) DIS= 0140 /DISPLAY POINT ON VC-12 DISA= 6304 /INTENSIFY ON AX08 DISD= 6052 /SKIP ON DISPLAY DONE DIXY= 6055 /INTENSIFY ON VC-8/E DXC= 6301 /CLEAR X ON AX08 DXL= 6302 /LOAD X ON AX08 DIXL= 6053 /LOAD X ON 34D DYC= 6311 /CLEAR Y ON AX08 DYL= 6312 /LOAD Y ON AX08 DYS= 6067 /LOAD Y AND INTENSIFY ON 34D LINC= 6141 /GOTO LINC MODE FOR VC-12 PDP= 0002 /GOTO PDP-8 MODE FOR VC-12 KCCIOT= TTY^10+6002 /CLEAR KEYBOARD FLAG KRSIOT= TTY^10+6004 /READ KEYBOARD BUFFER KSFIOT= TTY^10+6001 /SKIP ON KEYBOARD FLAG TLSIOT= TTY+1^10+6006 /OUTPUT TO TELEPRINTER TSFIOT= TTY+1^10+6001 /SKIP ON TELEPRINTER FLAG / DEFINITIONS FROM FOCAL, 1969 (ORIGINAL PAPER-TAPE VERSION). CHAR= 0066 /FOCAL'S CHARACTER BUFFER COMGO= 1163 /COMMAND DISPATCH TABLE ADDRESS C200= 0123 /CONSTANT 0200 EFUN3I= 0136 /FUNCTION RETURN POINTER ERROR5= 2725 /ERROR FUNCTION EVAL= 1613 /EVALUATOR ROUTINE FLAC= 0044 /FLOATING AC FNTABF= 0374 /FUNCTION ADDRESS TABLE FNTABL= 2165 /HASHED FUNCTION NAME TABLE INDEV= 0064 /INPUT ROUTINE POINTER INTEGER=0053 /FLOATING TO FIXED CONVERSION POINTER OUTDEV= 0063 /OUTPUT ROUTINE POINTER PDLXR= 0013 /PUSHDOWN LIST AUTO-INDEX REGISTER PUSHA= JMS I 142 /PUSH WORD ONTO STACK P177= 0106 /CONSTANT 0177 P7600= 0104 /CONSTANT 7600 RETURN= JMP I EFUN3I /FUNCTION RETURN INSTRUCTION XDYS= 1142 /FDIS FUNCTION ADDRESS XINT= 1160 /INTEGER PART ROUTINE / DEFINITIONS FROM P?S/8 AND THE P?S/8 FOCAL OVERLAY. BEOFZAP=7505 /BINARY LOADER ZAP WORD BONCE= 3600 /OVERLAY ONCE-ONLY ADDRESS CINPUT= 2600 /CONSOLE INPUT ROUTINE CINWAIT=2601 /INPUT ROUTINE WAIT LOCATION COUTPUT=2630 /OUTPUT ROUTINE ADDRESS INCON= 0031 /EQUATED FROM CONSOLE! OUTCON= 0033 /EQUATED FROM CONSOLE! SBOOT= 7600 /BOOTSTRAP TO HERE SCRSIZE=7611 /SOFTWARE CORE SIZE WORD SWAPBLK=2417 /SWAP BLOCK SWY9= 7606 /PASSED SWITCHES: Y, Z, 0-9 SYSIO= 7640 /SYSTEM I/O ENTRY / NUMERIC LOAD DEFINITIONS. NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 / INSTRUCTION DEFINITIONS. JMPC= JMP . /CURRENT PAGE JUMP INSTRUCTION JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO ON ITS PAGE FIELD 0 /ENSURE FIELD ZERO *175 /OVER AVAILABLE LOCATION PDSPLAY,DSPLAY /DISPLAY BUFFER ROUTINE POINTER *FNTABF+3 /OVER FUNCTION ADDRESS TABLE XDIS /POINT TO DISPLAY FUNCTION *FNTABF+14 /OVER FNEW ADDRESS XIO /POINT TO INPUT/OUTPUT FUNCTION *XDYS /OVER EXISTING XDIS CODE / FIO FUNCTION. XIO, JMS I INTEGER /GET LOW-ORDER FROM FIXED FLAC SMA CLA /SKIP IF INPUT JMP XOUT /JUMP IF OUTPUT JMS I INDEV /GET A CHARACTER / AC WILL BE NON-ZERO IF FIO(NEGATIVE), ZERO IF FDIS(XX). / FDIS FUNCTION ENTERS HERE WITH CLEAR AC. XDIS, CIF DFIELD /GOTO CODE FIELD JMP XIOMORE /CINTINUE THERE / COMES HERE IF FIN(POSITIVE). XOUT, TAD FLAC+2 /GET LOW-ORDER AGAIN JMS I OUTDEV /PRINT THE CHARACTER XRET, RETURN /RETURN TO FOCAL / FIELD ZERO FLOATING TO FIX CALL. INTPUSH,SNA /ANY PASSED VALUE? JMS I INTEGER /NO, GET LOW-ORDER FROM FIXED FLAC PUSHA /PUSH EITHER WAY EVALRET,CIF DFIELD /GOTO CODE FIELD JMP PUSHMORE /CONTINUE THERE ZBLOCK XINT-. /EMPTY SPACE XINT= . /UPPER LIMIT FOR DISPLAY CODE *FNTABL+3 /OVER HASHED NAME TABLE "D^2+"I^2+"S /MAKE SURE FDIS FUNCTION IS PRESENT *FNTABL+14 /OVER FNEW "I^2+"O /ENTER FIO FUNCTION HASHED NAME *SWAPBLK+3 /OVER EMPTY SPACE PAST SWAPPER / FIELD ZERO DISPLAY BUFFER ENTRY POINT. DSPLAY, .-. /DISPLAY BUFFER ROUTINE CIF DFIELD /GOTO CODE FIELD JMP DSPMORE /CONTINUE THERE *CINPUT-1 /OVER AVAILABLE SPACE SKP /ALLOW EFFECTIVE "JMP .-4" AS WELL AS "JMP .-2" /FOR "CINWAIT" ROUTINE *CINWAIT+2 /OVER JMP CINWAIT JMS I PDSPLAY/[DSPLAY]/DISPLAY BUFFER WHILE WAITING FOR INPUT FIELD DFIELD%10 /IN (FIRST) BUFFER FIELD *ALPHA /START AT THE BEGINNING ALPHA, .-. /ALPHA REGISTER FOR PDP-12 VERSION DSPBACK,-4-1 /**** OPATCH OR VT8PCH **** -2-1 DSPRETU,.-. /BUFFERED DISPLAY CALLER RETURN ADDRESS STKTMP, .-. /TEMPORARY FOR STACK OPERATIONS / FIX THE FLAC AND PUSH ROUTINE. FIXPUSH,.-. /FIX AND PUSH ROUTINE CIF CDF 00 /GOING TO FIELD ZERO JMP I [INTPUSH] /CONTINUE THERE / COMES BACK HERE WHEN THROUGH. PUSHMOR,JMP I FIXPUSH /RETURN *10 /GET TO AUTO-INDEX AREA XR1, .-. /AUTO-INDEX FOR DISPLAY XR2, .-. /SECOND AUTO-INDEX FOR DISPLAY XR3, OUTBUFFER-1 /AUTO-INDEX FOR FDIS, ETC. XR4, OUTBUFFER-1 /SECOND AUTO-INDEX FOR FDIS, ETC. DISCNT, 0 /CURRENT DISPLAY COUNT DSPCNT, .-. /DISPLAY BUFFER COUNTER X, .-. /"X" COORDINATE Y, .-. /"Y" COORDINATE *20 /GET PAST AUTO-INDEX AREA / POP ELEMENT OFF OF STACK ROUTINE. POPAC, .-. /POP INTO AC ROUTINE ISZ I [PDLXR] /BUMP STACK POINTER TAD I [PDLXR] /GET THE NEW VALUE DCA STKTMP /STASH IT TAD I STKTMP /GET THE VALUE JMP I POPAC /RETURN / DISPLAY BUFFER SUBROUTINE. DISPLAY,.-. /DISPLAY ROUTINE TAD DISCNT /GET CURRENT DISPLAY COUNT CMA /INVERT FOR COUNTING DCA DSPCNT /STASH THE COUNTER TAD [OUTBUFFER-1] /POINT TO DCA XR1 /DISPLAY BUFFER TAD [OUTBUFFER-1] /POINT TO DCA XR2 /DISPLAY BUFFER IOF /PREVENT PROBLEMS! JMP DISPIN /CONTINUE THERE DISPLP, CDF DFIELD /GOTO OUR (FIRST) FIELD TAD I XR1 /GET X VALUE IFNZRO AA01A < DAL1 /LOAD X CLA /CLEAN UP > IFNZRO AX08 < DXC DXL /LOAD X CLA /CLEAN UP > IFNZRO S34D < DIXL /LOAD X CLA /CLEAN UP > IFNZRO VC12 < DCA ALPHA /STORE X > IFNZRO VC8E < DILX /LOAD X ON VC-8/E CLA /CLEAN UP > ZAP8K1, CDF DFIELD /**** /2 **** CDF DFIELD+10 ZAP8K2, TAD I XR1 /**** /2 **** TAD I XR2 IFNZRO AA01A < DAL2 DINT /LOAD Y AND INTENSIFY CLA /CLEAN UP AND I 0 /WASTE AND I 0 /SOME TIME > IFNZRO AX08 < DYC DYL DISA /LOAD Y AND INTENSIFY CLA /CLEAN UP > IFNZRO S34D < DYS /LOAD Y AND INTENSIFY CLA /CLEAN UP > IFNZRO VC12 < LINC /GOTO L...MODE DIS ALPHA /DISPLAY THE POINT PDP /BACK TO P...MODE CLA /CLEAN UP > IFNZRO VC8E < DILY /LOAD Y ON VC-8/E CLA /CLEAN UP DISD /WAIT FOR DONE JMP .-1 /ON VC-8/E DIXY /INTENSIFY POINT NOW > IFNZRO CSW < LAS /GET CONSOLE SWITCHES DCA STKTMP /STASH AS COUNTER ISZ STKTMP /WAITED LONG ENOUGH? JMP .-1 /NO, KEEP GOING > / COMES HERE AT THE END OF ONE DISPLAY CYCLE. DISPIN, ISZ DSPCNT /DONE ALL YET? JMP DISPLP /NO, KEEP GOING ION /SAFE TO COME OUT NOW JMP I DISPLAY /YES, RETURN / COMES HERE TO FINISH THE BUFFERED DISPLAY CALL. DSPMORE,TAD I [DSPLAY] /GET THE CALLER TAD DSPBACKUP /GET BACKUP FACTOR OF TWO OR FOUR AS NECESSARY / NOW HAVE EFFECTIVE "JMP .-4" IF "OPATCH" OR "VT8PCH" IS NOT PRESENT, / NOW HAVE EFFECTIVE "JMP .-2" IF "OPATCH" OR "VT8PCH" IS PRESENT. DCA DSPRETURN /STORE EFFECTIVE RETURN ADDRESS AS ABOVE JMS DISPLAY /CALL BUFFER DISPLAY ROUTINE CIF CDF 00 /GOTO CALLING FIELD JMP I DSPRETURN /RETURN TO CALLER / COMES HERE TO FINISH THE "FIO", "FDIS" FUNCTIONS. XIOMORE,SNA /INPUT/OUTPUT FUNCTION? JMP DODISP /NO, MUST BE DISPLAY AND [177] /JUST SEVEN-BIT DCA I [FLAC+1] /STORE IN HIGH-ORDER DCA I [FLAC+2] /CLEAR LOW-ORDER TAD [13] /GET SHIFT FACTOR DCA I [FLAC] /SET EXPONENT DISPRET,CIF CDF 00 /GOING TO FIELD ZERO JMP I [XRET] /FINISH IT THERE / COMES HERE TO FINISH "FDIS" FUNCTION. DODISP, JMS FIXPUSH /FIX AND PUSH FIRST ARGUMENT TAD I [CHAR] /GET THE LATEST CHARACTER TAD [-",] /COMPARE TO "," SZA CLA /SKIP IF IT MATCHES JMP DISP1 /JUMP IF ONLY ONE ARGUMENT TAD [EVALRETURN] /GET OUR RETURN JMS FIXPUSH /PUSH IT ON STACK TAD [EVALMORE] /SETUP THE PROPER DCA FIXPUSH /RETURN ADDRESS CIF CDF 00 /GOING TO FIELD ZERO JMP I [EVAL-1] /EFFECTIVELY PUSHJ;EVAL-1 AND RETURN TO "EVALMORE" / COMES BACK HERE AFTER EVALUATING THE SECOND "FDIS" ARGUMENT. EVALMOR,JMS FIXPUSH /FIX THE SECOND ARGUMENT AND PUSH IT JMS POPAC /GET IT BACK DCA Y /SAVE AS "Y" COORDINATE JMS POPAC /GET PREVIOUS ARGUMENT IFNZRO AX08!VC12 < TAD [400] /MAKE IT SYMMETRICAL > DCA X /SAVE AS "X" COORDINATE TAD XR3 /GET OUTPUT POINTER IAC /SEE IF AT END SZA CLA /SKIP IF TOO FAR JMP DISPOK /JUMP IF NOT TAD [XDYS+6] /GET ERROR ADDRESS CIF 00 /GOING TO FIELD ZERO JMP I [ERROR5] /GO COMPLAIN THERE / INSERT THE LATEST PAIR INTO THE DISPLAY BUFFER. DISPOK, ISZ DISCNT /BUMP UP DISPLAY COUNT CDF DFIELD /GOTO BUFFER FIELD TAD X /GET X VALUE DCA I XR3 /PUT IT IN ZAP8K3, CDF DFIELD /**** /2 **** CDF DFIELD+10 TAD Y /GET Y VALUE ZAP8K4, DCA I XR3 /**** /2 **** DCA I XR4 JMP DISPRETURN /FINISH IT THERE / COMES HERE IF "FDIS(ONE ARGUMENT)". DISP1, JMS POPAC /RETRIEVE THE ARGUMENT SNA CLA /SKIP IF NON-ZERO JMP WIPEOUT /ELSE WIPE OUT THE BUFFER JMS DISPLAY /DISPLAY THE BUFFER ONCE NOW JMP DISPRETURN /FINISH IT THERE WIPEOUT,DCA DISCNT /CLEAR DISPLAY COUNT TAD [OUTBUFFER-1] /RESET THE DCA XR3 /BUFFER POINTER TAD [OUTBUFFER-1] /RESET THE DCA XR4 /SECOND BUFFER POINTER JMP DISPRETURN /FINISH IT THERE PAGE OUTBUFF=. /DISPLAY BUFFER HERE FIELD 0 /BACK TO FIELD ZERO / ONCE-ONLY CODE STARTS HERE. *BONCE /OVER DEFAULT ONCE-ONLY AREA BONCE, TAD I (SWY9) /GET /Y-/9 SWITCHES AND C200/[200] /JUST /2 BIT SNA CLA /SKIP IF SET JMP LTEST /JUMP IF NOT CDF DFIELD /GOTO OUR CODE FIELD TAD I (ZAP8K1) /GET CDF DFIELD TAD (10) /MAKE IT CDF DFIELD+10 DCA I (ZAP8K1) /STORE BACK ISZ I (ZAP8K2) /MAKE IT TAD I XR2 TAD I (ZAP8K1) /GET CDF DFIELD+10 DCA I (ZAP8K3) /STORE OVER CDF DFIELD ISZ I (ZAP8K4) /MAKE IT DCA I XR4 CDF 00 /BACK TO OUR FIELD LTEST, TAD I (COMGO+10) /GET CURRENT "L" COMMAND ADDRESS TAD (-XINT) /ADD ON UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD (XINT-XDYS) /ADD ON RANGE SNL CLA /SKIP IF IN DANGER RANGE JMP DSPFIX /JUMP IF NOT TAD P7600/[SBOOT] /REVERT THE "L" COMMAND DCA I (COMGO+10) /TO ONLY SAFE VALUE DSPFIX, TAD I (COUTPUT+5) /GET POSSIBLE LOCATION TAD (-TESTVALUE) /COMPARE TO TEST VALUE SNA CLA /SKIP IF NOT "OPATCH" OR "VT8PCH" VALUE JMP OPRESENT /JUMP IF ABOVE-MENTIONED OVERLAY PRESENT TAD I (COUTPUT+6) /GET NORMAL LOCATION TAD (-TESTVALUE) /COMPARE TO TEST VALUE SZA CLA /SKIP IF IT MATCHES JMP BADFOCAL /JUMP IF UNKNOWN VERSION TAD (JMS I PDSPLA/[DSPLAY])/GET ZAPPING INSTRUCTION DCA I (COUTPUT+6) /STORE OVER OUTPUT ROUTINE JMP LODFIX /CONTINUE THERE / COMES HERE IF "OPATCH" OR "VT8PCH" HAVE CHANGED THE OUTPUT ROUTINE. OPRESEN,TAD (JMS I PDSPLA/[DSPLAY])/GET ZAPPING INSTRUCTION DCA I (COUTPUT+5) /STORE OVER MODIFIED OUTPUT ROUTINE CDF DFIELD /GOTO CODE FIELD NL7775 /TAD (-2-1) /SETUP NEW DCA I (DSPBACKUP) /BACKUP FACTOR FOR MODIFIED CODE CDF 00 /BACK TO FIELD ZERO LODFIX, DCA I (BEOFZAP) /REPAIR LOADER JMP I (BEOFZAP) /RESUME LOADING / COMES HERE IF UNKNOWN COMBINATION OF FOCAL AND OVERLAYS IS PRESENT. BADFOCA,JMS I (OUTINITIALIZE) /INITIALIZE OUTPUT ROUTINES BADTALK,TAD BMESSAGE /GET A MESSAGE CHARACTER SNA /END OF LIST? JMP I P7600/[SBOOT] /YES, GOODBYE JMS I (P7CH) /NO, SEND IT ISZ BADTALK /BUMP TO NEXT JMP BADTALK /KEEP GOING / COMPLAIN MESSAGE. BMESSAG,"G&37 / "M&37 / "J&37 / "F&177 "O&177 "C&177 "A&177 "L&177 "/&177 "O&177 "V&177+40 "E&177+40 "R&177+40 "L&177+40 "A&177+40 "Y&177+40 " &177 "C&177 "O&177+40 "N&177+40 "F&177+40 "L&177+40 "I&177+40 "C&177+40 "T&177+40 "!&177 0 /THIS ENDS THE LIST PAGE TESTVAL=COUTPUT+3&177+JMPC /JMP COUTPUT+3 ON ITS PAGE / OUTPUT ROUTINE FOR COMPLAINT MESSAGES. P7CH, .-. /SEVEN-BIT PRINT ROUTINE DCA P7TEMP /STASH PASSED VALUE P7AGN, JMS CHKUP /CHECK FOR <^C>, ETC. TAD P7TEMP /GET THE VALUE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP P7AGN /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP P7AGN JMS CHKUP /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN CHKUP, .-. /CHECK FOR <^C>, ETC. ROUTINE JMS CTLCTST /CHECK FOR <^C> SZA /SKIP IF NOTHING CAME IN TAD (-"Q!300) /ELSE COMPARE TO <^Q> SNA /SKIP IF NEITHER CASE JMP CHKCLR /ELSE FORGET IT TAD (-"S+"Q) /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I CHKUP /ELSE RETURN JMS CTLCTST /GET ANOTHER CHARACTER TAD (-"Q!300) /COMPARE TO <^Q> SZA CLA /SKIP IF IT MATCHES JMP .-3 /ELSE KEEP GOING CHKCLR, DCA INCHAR /OBLITERATE <^Q>, ETC. JMP I CHKUP /RETURN CTLCTST,.-. /CHECK FOR <^C> ROUTINE CLA /CLEAN UP CHKKSF, KSFIOT /**** CONSOLE **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE **** JMP I CTLCTST AND P177/[177] /JUST SEVEN BITS DCA INCHAR /STASH THE CHARACTER NL7775 /-3 TAD INCHAR /COMPARE INPUT TO <^C> SNA /SKIP IF OTHER ISZ I (SCRSIZE) /ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF <^D> OR GREATER JMP I P7600/[SBOOT] /ELSE GOODBYE CHKKCC, KCCIOT/OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN OUTINIT,.-. /OUTPUT INITIALIZE ROUTINE TAD I P7600/[SBOOT] /GET BOOTSTRAP INSTRUCTION TAD (-JMSSYSIO) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF DIFFERENT JMP CHKCOVERLAY /JUMP IF IT MATCHES ISZ CHKKRS /TURN "KRSIOT" ISZ CHKKRS /INTO "KRBIOT" DCA CHKKCC /DESTROY "KCCIOT" CHKCOVR,NL0002 /SETUP "C" BIT MASK AND I (SCRSIZE) /GET THE "C" BIT SNA CLA /SKIP IF CONSOLE OVERLAY PRESENT JMP I OUTINITIALIZE /RETURN IF NOT TAD I (SCRSIZE) /GET THE CORE SIZE WORD RTR;RAR /MOVE OVER AND AND (70) /ISOLATE MCS BITS TAD (CIF 10) /TURN INTO CIF MCS+10 DCA P7TSF /STORE OVER "TSFIOT" TAD P7JMP /GET "JMP P7AGN" DCA P7TLS /STORE OVER "TLSIOT" TAD (JMS OUTCON) /GET OUTPUT CALL INSTRUCTION DCA P7JMP /STORE OVER "JMP P7AGN" TAD P7TSF /GET "CIF MCS+10" AGAIN DCA CHKKSF /STORE OVER "KSFIOT" TAD CHKJMP /GET "JMP I CTLCTST" DCA CHKKRS /STORE OVER "KRSIOT" (OR "KRBIOT") TAD (JMS INCON) /GET INPUT CALL INSTRUCTION DCA CHKJMP /STORE OVER "JMP I CTLCTST" DCA CHKKCC /DESTROY "KCCIOT" JMP I OUTINITIALIZE /RETURN INCHAR, .-. /INPUT TEMPORARY P7TEMP, .-. /OUTPUT TEMPORARY PAGE *BEOFZAP /OVER LOADER SKP /MAKE IT COME TO US $ /THAT'S ALL FOLK!