/3 PDP-12 DISPLAY CODE FOR TECO /ENTRY POINTS: .GLOBAL DSPLAY /CALL TO REFRESH VR12 /EXTERNALS: .ZTERNAL P /TEXT BUFFER POINTER .ZTERNAL NUMLNS /NUMBER OF LINES (+ AND -) TO DISPLAY .ZTERNAL R /LINKAGE TEMPORARY .ZTERNAL NAME /4 WORDS OF TEMPORARIES /PAGE 0 LITERALS: .ZTERNAL Z7 /7 .ZTERNAL CAHT /11 .ZTERNAL Z177 /177 .ZTERNAL Z4 /4 .ZTERNAL ZM40 /-40 /EXTERNALS: .EXTERNAL CHRL1 /ADVANCES LINES .EXTERNAL PUSHJ /RECURSUVE PUSH JUMP ROUTINE MTHREE=CLL STA RTL YPOS= NAME /USE SOME FREE PAGE ZERO LOCATIONS DR= NAME+1 /FOR OUR TEMPORARIES DQ= NAME+2 DM= NAME+3 .XSECT TEC12X DX, 0 /AUTO-INDEX REGISTER USED BY DISPLAY .ASECT TECO12 *4000 /DISPLAY ROUTINE FOR PDP-12 SCOPE WASTE, 0 /** MUST BE AT MULTIPLE OF 2000 XPOS, 0 /PDP-12 BETA REGISTER 1 BETA2, 0 /PDP-12 BETA REGISTER 2 DSPLAY, 0 /TEXT DISPLAY ROUTINE FOR TECO MTHREE /THIS ROUTINE DEPENDS ON THE FACT THAT THE TAD DSPLAY /HIGH ORDER BITS OF THE X-COORD ARE IGNORED DCA DX /BY THE VR12 HARDWARE TAD I DX /GET THE SKIP DCA DLPTST /PUT IT IN THE LOOP TAD P DCA DX TAD NUMLNS STL CIA /LOOK BACKWARD PUSHJ /FOR BEGINNING OF DISPLAY AREA CHRL1 D360, STA STL /=7360 TAD P DCA DM TAD DX DCA P /RESTORE POSITION TAD NUMLNS /NOW SCAN FORWARD CLL IAC PUSHJ /FOR THE END OF THE DISPLAY AREA CHRL1 TAD P CIA TAD DM DCA R /*K* THIS NUMBER MUST GO IN R - TAD DX /THE W COMMAND NEEDS IT THERE DCA P /RESTORE ORIGINAL P DSETUP, TAD P CIA TAD DM DCA DQ /SAVE COUNT OF CHARS TO CURSOR POSITION TAD DM DCA DX TAD R DCA DR TAD D360 DCA YPOS DISCR, TAD DISLF SETXPS, DCA XPOS /SET X POSITION/COLUMN COUNTER JMP DLPTST /DISPLAY LOOP DGETCH, CDF 10 TAD I DX CDF 0 /GET THE CHARACTER FROM FIELD 1 AND Z177 /AND OFF THE HIGH ORDER BITS TAD (-33 SNA /CHANGE ALTMODES TAD CAHT /TO DOLLAR SIGNS TAD (-5 SMA SZA /IF NOT A CONTROL CHARACTER JMP DLOOP /DISPLAY IT AND KEEP GOING SNA JMP DBLANK /DO BLANKS FAST TAD (40-15 SNA /CR? JMP DISCR /YES - RESET X COORD STL TAD Z4 SNA /TAB? JMP DTABB SNL JMP DISLF /LINE FEED, VERTICAL TAB, OR FORM FEED TAD (51 /ORDINARY CONTROL CHAR - RESTORE IT + 40 DCA WASTE /SAVE CHAR JMS DISCHR /DISPLAY ^ TAD WASTE /NOW DISPLAY ALTERED CHAR DLOOP, JMS DISCHR DLPTST, HLT /EITHER KSF OR TSF OR "ISZ R" SKP JMP I DSPLAY /EXIT IMMEDIATELY IF TEST SKIPS ISZ DQ /ARE WE AT THE CURRENT POINTER POSITION? JMP TSTEDS /NO TAD (-5 TAD XPOS DCA XPOS /BACK UP X POSITION A HALF-CHARACTER TAD DM20 TAD YPOS 6141 /ENTER LINC MODE DM20, 1760 /DSC I 2000 1760 /DISPLAY A ^ 2076 0002 /PDP MTHREE /AND MOVE X POSITION BACK TO WHERE IT WAS JMP DBLANK+1 TSTEDS, ISZ DR /ARE WE THROUGH? JMP DGETCH /NO JMP DSETUP /YES - START OVER DTABB, TAD XPOS /DISPLAY TAB CMA AND Z7 DCA WASTE /GET NUMBER OF COLUMNS TO GO (-1) TAD WASTE CLL RTL RAL TAD WASTE /MULTIPLY BY 9 DBLANK, TAD CAHT /BUMP ONE MORE COLUMN TAD XPOS SZA /OVERFLOW? JMP SETXPS /NO - SET XPOS AND CONTINUE JMP LINOFL /YES - GO TO THE NEXT LINE /SUBROUTINE TO DISPLAY A CHARACTER DISCHR, DLPTST /*K* DISCHR MUST CONTAIN "DLPTST" WHEN WE CLL RAL /ARE EXAMINING CHARACTERS ** TAD (DTABLE-1 DCA BETA2 /STORE ADDRESS OF TABLE ENTRY FOR CHAR -1 TAD YPOS 6141 /ENTER LINC MODE 1762 /DSC I 2 1762 /DSC I 2 0002 /RE-ENTER PDP-8 MODE CLA ISZ XPOS /BUMP THE X COORDINATE/COLUMN COUNTER JMP I DISCHR /RETURN LINOFL, TAD (7054 /INDENT ALL CONTINUATION LINES DCA XPOS DISLF, RAR /*K* RAR=7010 AC MAY HAVE A SMALL NUMBER TAD YPOS /IN IT HERE - THATS OK AS LONG AS ITS SMALL, TAD ZM40 /SINCE ONLY THE HIGH 8 BITS OF YPOS COUNT. DCA YPOS JMP I DISCHR /*K* THIS ALWAYS RETURNS TO DLPTST ** PAGE DTABLE, 2000;2076; 7500;0000; 7000;0070; 7714;1477 5721;4671; 6661;4333; 5166;0526; 0000;0070 3600;0041; 4100;0036; 2050;0050; 0404;0437 0500;0006; 0404;0404; 0001;0000; 0601;4030 4536;3651; 2101;0177; 4523;2151; 4122;2651 2414;0477; 5172;0651; 1506;4225; 4443;6050 5126;2651; 5122;3651; 2200;0000; 4601;0000 1000;4224; 1212;1212; 2442;0010; 4020;2055 4077;5751; 4477;7744; 5177;2651; 4136;2241 4177;3641; 4577;4145; 4477;4044; 4136;2645 1077;7710; 7741;0041; 4142;4076; 1077;4324 0177;0301; 3077;7730; 3077;7706; 4177;7741 4477;3044; 4276;0376; 4477;3146; 5121;4651 4040;4077; 0177;7701; 0176;7402; 0677;7701 1463;6314; 0770;7007; 4543;6151; 4177;0000 3040;0106; 0000;7741; 2000;2076; 1604;0404