*20 PMODE /PROGRAM CONSTANTS, PAGE ZERO *40 C0077, 77 TEMP, 0 M215, -215 M212, -212 CHTABL, 2001 /2001=TEXT BELL, 207 M377, -377 M43, -43 PLACE, 0 /TEXT POINTER C7400, 7400 M20, -20 MBLK, 0 TBLK, 0 CHSIZE, 0 FULL, 200 C1000, 1000 PWTABL, PATRN-2 /AD-2 OF PW TABL FIRST, 2000 /FINAL TEXT ADDR CHAR, 0 M56, -56 CHMASK, MASKON+2 WARN, 4141 /WARN SIG PW MON, MONIT LOCHAR, 0 /DISPLAY POINTER LMHC, 0 /HC OF L MASK HCWIND, 0 /HC OF WINDOW RMHC, 0 /HC OF R MASK C10, 10 M40, -40 PSTART, EPROG MASKIT, MASK SHOW, WINDOW NTIME, 0 ONCE, 0 HOLD, 0 KLOCK, 4100 /MSEC CLOCK KLOCKP, 5100 /HSEC CLOCK ANALOG, ANADIG CHECK, 0 REM, 0 COUNT, 0 M200, -200 C400, 400 M1777, -1777 LASTCH, 0 C40, 40 /DISPLAY PARAMETERS WINDSP, 1 /CHAR SPACING MASKSP, 2 /MASK-CHAR " BOUND, -700 /-R DISP BORDER INSERT, 0 /NO EXTRA BLANKS IHORCO, 0 /LEFTMOST HC VERCO, 0 /VERT DISP COOR SLIDE, 1 /NEW CHARS/FRAME LSIZE, -6 /-SIZE OF L MASK RSIZE, -6 /-SIZE OF R MASK WSIZE, -3 /-WINDOW WIDTH MOVE, 0 /DELTA HC/FRAME /TIME PARAMETERS DISPON, -24 /-MSEC/FRAME ON DISPOF, -50 /-MSEC/FRAME OFF PAUSET, -310 /-HSEC BET STRNG WARNON, -144 /-HSEC E-LINE SG OFFMAX, 1000 /MAX OFF TIME RSAMP, 144 /MSEC/SAMPLE /SUBR DOUBLES AC IF FULL-SIZE CHAR DOUBLE, 0 DCA HOLD /SAVE AC TAD CHSIZE SZA CLA /RETURN IF ZERO JMP .+3 TAD HOLD JMP I DOUBLE TAD HOLD CLL RAL /DOUBLE JMP I DOUBLE /SUBR SETS HCS RELATIVE TO LMHC SETUP, 0 CLA TAD LSIZE CIA CLL RTL TAD MASKSP JMS DOUBLE TAD LMHC DCA HCWIND TAD WSIZE DCA TEMP SKP TAD WINDSP TAD C10 ISZ TEMP JMP .-3 TAD MASKSP JMS DOUBLE TAD HCWIND DCA RMHC JMP I SETUP /SPECIAL INITIALIZATION *2000 2200 /STOPS TEXT LOSS /PROGRAM MONITOR *200 MONIT, CLA TLS TAD BELL /ASCII CODE BELL TSF JMP .-1 TLS /RING BELL CLA LINC LMODE ADD TBLK /DIS LAST TBLK ACT, HLT CLR SNS I 5 JMP SHOWIT /SW 5=DISPLAY SNS I 4 JMP SAVEIT /SW 4=SAVE TEXT SNS I 3 JMP FINDIT /SW 3=TEXT-TAPE SNS 2 JMP ACT /NO SW=HLT AGAIN SNS 1 /TT INPUT:ADD ON JMP START-1 /TT INPUT: NEW PDP PMODE JMP READ-1 LMODE PDP PMODE START, TLS TAD CHTABL /START AD D TEXT DCA PLACE KCC READ, KSF JMP .-1 KRB TSF JMP .-1 TLS /ECHO CHAR DCA TEMP /SAVE CHAR TAD TEMP TAD M200 /CHECK FOR L/T SNA CLA JMP READ /SKIP L/T TAD TEMP SNA JMP READ /SKIP NO PUNCH TAD M215 /CHECK FOR CR SNA CLA JMP READ /SKIP CR TAD TEMP TAD M212 /CHECK FOR LF SNA CLA JMP READ /SKIP LF TAD TEMP TAD M377 /RUBOUT? SZA CLA JMP .+5 STA /RUBOUT:AC=-1 TAD PLACE DCA PLACE /DECR TEXT AD JMP READ /REREAD LAST CH TAD TEMP AND C0077 /STRIP ASCII DCA TEMP TAD TEMP DCA I PLACE /STORE CHAR TAD TEMP TAD M43 SZA CLA /END OF TEXT? JMP .+4 TAD PLACE DCA I FIRST /SAVE LAST LOC JMP MONIT /DONE ISZ PLACE /INCR TEXT AD JMP READ HLT /OUT OF ROOM /MAG TAPE I/O SEGMENT LMODE FINDIT, LDA I 0 /MODE INSTR= RDC U /READ TAPE 1 JMP LAB SAVEIT, LDA I 0 /MODE INSTR= WRC U /WRITE TAPE 1 LAB, STC MODE /STORE MODE INST STC ONCE /ONCE THRU FLAG LDF 1 /LINC DF = 1 LDA I 0 4000 STC MBLK /MEM BLK=4 HLT RSW /OFF R SW GET STC TBLK /INIT TAPE BLK FIX, ADD TBLK ADD MBLK /FORM 2ND TAPE STC MODE+1 /INSTR MODE, 0 /RDC-WRC 1 0 /2ND TAPE INSTR PDP PMODE CLA TAD ONCE SZA CLA /DO ONLY ONCE JMP CONT TAD I FIRST /GET ADD OF DCA TEMP /LAST TEXT TAD LAB+2 /SET LDF=1 FOR DCA HOKEY /LATER USE TAD TEMP AND C7400 /HOW MANY I/O CLL RTR /BLOCKS MORE? CLL RTR CLL RTR TAD M20 CLL RTR /LEAVE 0-13 BLKS SNA JMP CONT+2 /DONE: RETURN CIA DCA TEMP /ISZ LOOP ISZ ONCE /SET ONCE FLAG JMP CLAW CONT, ISZ TEMP /ANOTHER BLK? JMP CLAW TAD I FIRST DCA PLACE /SET TEXT-END JMP MONIT /DONE: RETURN CLAW, TAD C1000 TAD MBLK /NEXT MBLK SZA /RESET IF MBLK=0 JMP .+3 TAD LAB+4 /MBLK=4 ISZ HOKEY /INCR LDF DCA MBLK /NEW MBLK ISZ TBLK /NEW TBLK LINC LMODE HOKEY, 0 /LDF N INSTR JMP FIX /NEXT I/O /MASKING SUBROUTINE PMODE MASK, 0 /HOLDS RET ADR CLA DCA ONCE /LEFT FIRST TAD LSIZE /-LEFT M SIZE SMA /ANY L M AT ALL? JMP RIGHT DCA NTIME /SET UP ISZ LOOP TAD LMHC /HC OF L MASK DCA 1 /LINC BETA-1 REG TAD VERCO /VERT. COOR. MASKON, LINC LMODE DSC I 0 /DISP MASK PW 7777 /FOUND HERE PDP PMODE ISZ NTIME /MORE MASK AREA? JMP MASKON /MORE MASK CLA TAD ONCE /DONE RIGHT YET? SZA JMP I MASK /RETURN RIGHT, ISZ ONCE TAD RSIZE /-R MASK SIZE SMA JMP I MASK /NO R MASK DCA NTIME TAD RMHC JMP MASKON-2 /WINDOW DISPLAY SUBROUTINE WINDOW, 0 /HOLDS RET AD CLA TAD WSIZE DCA NTIME /SET UP ISZ LOOP TAD HCWIND /PUT WINDOW HC DCA 1 /INTO LINC B-2 TAD LOCHAR /AD-1 OF FIRST DCA 10 /INTO AUTO IND WNEXT, TAD I 10 /GET NEXT CHAR DCA CHAR TAD CHAR TAD M56 /END OF STRING? SNA CLA JMP I WINDOW /RETURN TAD CHAR CLL RAL /DOUBLE CODE TAD PWTABL /AD PW TABLE DCA 2 /INTO LINC B-2 TAD VERCO /VERT. CO. LINC LMODE DSC 2 /DISPLAY PWS DSC I 2 PDP PMODE ISZ NTIME /DONE? JMP .+2 JMP I WINDOW /RETURN CLA TAD WINDSP JMS DOUBLE TAD 1 DCA 1 /INCR H.C. JMP WNEXT /DO NEXT CHAR /SUBR SAMPLES A-D CHAN 10:EVERY -RSAMP /TIMES PUTS AC=1 IF ABOVE 200, AC=-1 IF /BELOW -200, AC=0 OTHERWISE SAMPLE, 0 LINC LMODE SAM 10 PDP PMODE TAD M200 SMA JMP .+6 TAD C400 SMA CLA JMP I SAMPLE /NEITHER:AC=0 STA /LOW:AC=-1 JMP I SAMPLE CLA IAC /HIGH:AC=1 JMP I SAMPLE /SUBR INCR OR DECR DISPOF ACCORDING /TO OUTPUT OF SAMPLE ANADIG, 0 CLA JMS SAMPLE SNA JMP I ANADIG /NO CHANGE SMA CLA JMP POS STA TAD DISPOF DCA CHECK /INCREASE DISPOF TAD OFFMAX /PAST LIMIT? TAD CHECK SPA CLA JMP I ANADIG /NO CHANGE TAD CHECK DCA DISPOF JMP I ANADIG POS, ISZ DISPOF /DECREASE DISPOF JMP I ANADIG STA DCA DISPOF /NO CHANGE JMP I ANADIG /DISPLAY SEGMENT *600 LMODE SHOWIT, LDA I 0 2000 /INIT TEXT AD-1 STC 12 WAIT, SNS I 1 /HALT SW1 OFF JMP NOSTOP PDP PMODE TAD DISPON TAD DISPOF CIA /FRAME TIME HLT /PAUSE,DISPLAY CLA LINC LMODE NOSTOP, SNS I 0 /CHAR SIZE: SW0 ADD FULL ESF STC CHSIZE /SET CHAR SIZE PDP PMODE TAD IHORCO /SET INITIAL HC DCA LMHC CLLR /CLEAR CLOCK TAD KLOCKP / CLLR /LOAD CLOCK JMS SETUP /SET HCS /LOAD TEXT BUFFER WITH NEXT SENTENCE, /EXTRA BLANKS AS PER INSERT TAD PSTART DCA 11 /FIRST BUF LOC TAD PSTART DCA LOCHAR TAD WSIZE DCA NTIME TAD C40 JMS BUFFER /LEADING BLANKS ISZ NTIME JMP .-3 NEXTCH, TAD I 12 /NEXT TEXT CHAR DCA CHAR TAD CHAR TAD M40 SZA CLA /BLANK? JMP .+4 TAD INSERT /NO. EXTRA BLNKS CMA /+TEXT BLANK JMP NEXTCH-5 /ADD BLANKS TAD CHAR JMS BUFFER /STORE CHAR TAD CHAR TAD M56 SNA CLA /END SENTENCE? JMP PAUSE TAD CHAR TAD M43 SZA CLA /LAST SENT? JMP NEXTCH JMP I MON /DONE DISPLAYING /SUBR STORES CHAR AND CHECKS FOR ROOM BUFFER, 0 DCA I 11 /STORE IN NEXT TAD M1777 TAD 11 SPA CLA /MORE ROOM? JMP I BUFFER HLT /NOT USED:HOPE PAUSE, TAD 11 CIA DCA LASTCH /SAVE LAST POSN JMS I MASKIT /MASK THRU PAUSE CLCA /CLOCK READING TAD PAUSET SPA CLA /DONE PAUSING? JMP .-4 GO, TAD DISPON /FRAME STARTS TAD DISPOF TAD REM DCA COUNT /SAMPLE INTERVAL TAD COUNT TAD RSAMP SMA /SAMPLE TIME? JMP .+4 DCA COUNT JMS I ANALOG /READ A-D CHAN JMP .-6 /TRY AGAIN CIA TAD RSAMP CIA DCA REM /FOR NEXT SAMP T CLLR TAD KLOCK CLLR JMS I MASKIT JMS I SHOW CLCA TAD DISPON SPA CLA JMP .-5 CLLR TAD KLOCK CLLR JMS I MASKIT CLCA TAD DISPOF SPA CLA JMP .-4 TAD MOVE JMS DOUBLE /DOUBLE IF FULL TAD LMHC DCA LMHC /INCR LMHC JMS SETUP /NEW HCS TAD SLIDE TAD LOCHAR DCA LOCHAR /NEW CHARS TAD LOCHAR TAD LASTCH SPA CLA /PAST END? JMP .+3 LINC LMODE JMP WAIT PMODE /ENOUGH ROOM LEFT ON DISP LINE? TAD RMHC TAD BOUND SPA CLA /HC PAST BOUND? JMP GO /O.K.:NEXT FRAME TAD WARN /PW FOR END- DCA I CHMASK /LINE SIGNAL TAD IHORCO DCA LMHC /RESET CLLR TAD KLOCKP /LOAD CLOCK CLLR AGAIN, JMS I MASKIT /WARN SIGNAL CLCA /CLOCK TIME TAD WARNON SPA /DONE WARNING? JMP I BACK STA /RESTORE MASK PW DCA I CHMASK JMS SETUP /RESET HCS JMP I IGO /NEXT FRAME IGO, GO BACK, AGAIN /PATTERN WORDS FOR CHAR DISPL. PATRN, 4477 /A 7744 5177 /B 2651 4136 /C 2241 4177 /D 3641 4577 /E 4145 4477 /F 4044 4136 /G 2645 1077 /H 7710 7741 /I 0041 4142 /J 4076 1077 /K 4324 177 /L 301 3077 /M 7730 3077 /N 7706 4177 /O 7741 4477 /P 3044 4276 /Q 376 4477 /R 3146 5121 /S 4651 4040 /T 4077 177 /U 7701 176 /V 7402 677 /W 7701 1463 /X 6314 770 /Y 7007 4543 /Z 6151 4177 /[ 0000 2040 /\ 0410 0 /] 7741 2000 /^ 2077 3410 /BACK ARROW 1010 0 /SPACE 0 7500 /! 0 6006 /" 60 3614 /NUMBER SIGN 1436 7721 /DOLLAR SIGN 4677 1446 /% 6130 5166 /& 0523 500 /APOSTROPHY 6 4163 /( 0 0 /) 6341 2050 /* 50 404 /+ 437 605 /, 0 404 /- 404 1 /. 0 601 // 4030 4136 /0 3641 2101 /1 177 4523 /2 2151 4122 /3 2651 2414 /4 477 5172 /5 651 1506 /6 4225 4443 /7 6050 5126 /8 2651 5120 /9 3651 4200 /: 0 2601 /; 0 2410 /< 0042 1212 /= 1212 4200 /> 1024 4020 /? EPROG, 2055