*20 LMODE /X-W-AUTO: SELF-RUNNING X-WORD4T PROG. DATA=LDF 1 DTEXT=LDF 2 TABLES=LDF 3 PROG0=LIF 0 PROG1=LIF 1 XSAMP=SAM 15 SEGMNT 0 *20 PGCODE, 0 /NULL: NO EXPTS SUBSES, 0 TEXTAP, 0 TEXBLK, 0 DATBLK, 0 QBLK, -1 TOPLIN, 8 LINES, 4 SPACIN, 6 XCRIT, 3 PMODE MDT, -1501 /120 CPS SAMPLES C2000, 2000 /100 KHZ CLOCK LMODE /THIS SECTION HANDLES INTERRUPTS. /TWO POSSIBLE INTERRUPTS: RESP PANEL=END /PAGE,UP A LINE, OR END "VERIFY" /CLOCK INTERRUPT=RESAMPLE EYE-POSN *40 0 /INTERRUPT PC STC ACSAVE /SAVE AC AND 0000 BUT NOT L OR MQ. ADD STC SAVE0 IOB 6135 /CLSA APO I JMP PANEL /PANEL INT? /SAMPLE X SIGNAL (A-D 15) /COMPUTE TABLE LOOKUP FOR X, GIVEN YFIX LDA I YFIX, 0 /FIXATION LINE SNS I 2 /SW 2 ON: USE SCR 1 /1 CAL/2 LINES ROR 4 /C(16)*256 STC /AD CDF 10 X-TAB XSAMP ADD C1000 SCR 2 ADD /12-BIT AD X-POS C4000, STC PDP PMODE CDF 10 /IN PDP DF 1 TAD I CDF LINC LMODE STC 17 /17 HOLDS X-POS /"FIXING"=0: FIXATION; ELSE, MOVING SAE I FIXING, 0 JMP MOVING /CURRENTLY FIXATING: X CHANGE>=XCRIT CHS /LEADS TO POSSIBLE SACCADE ADD XFIX COM ADD 17 APO I COM ADD XCRIT /XCRIT-/X-X0/ APO JMP SACCAD /POSIBL SACCADE /NO X-CHANGE: INCREMENT FIXATION TIMER /& RETURN TO DISPLAY IN PROGRESS PERSIS, LDA 14 SAE I 776 XSK I 14 RESTOR, LDA C40, 40 BSE I 6000 /FORM RETURN JMP STC RETURN SET I 0 SAVE0, 0 /RESTORE SUBR PC DJR LDA I ACSAVE, 0 /RESTORE AC IOB 6244 /RMF IOB C6001, 6001 /ION RETURN, HLT /RETURN JUMP / /CONTROL HERE WHENEVER FIXATION ENDS: /SET STATE=MOVING, TIME POSSIBLE SACCADE /AND WAIT FOR VERIFICATION OF NEW FIXATN / SACCAD, ADD C2000 STC FIXING /NON-0 ADD 17 STC XMOVE SET I 15 1 /INIT SAC TIME JMP RESTOR /SAME DISPLAY / /ARRIVES HERE DURING (POSSIBLE) SACCADE /LOOKING FOR NO FURTHER X-CHANGE. IF /FOUND, VERIFIES ONSET OF NEW FIXATION. / MOVING, LDA I XMOVE, 0 /LAST X COM ADD 17 APO I COM ADD XCRIT APO JMP MORMOV /STILL MOVING /MOVEMENT OVER: NEW FIXATION ONLY IF />=XCRIT AWAY FROM LAST XFIX LDA I XFIX, 0 COM ADD 17 STA I D, 0 APO I COM ADD XCRIT APO I JMP SAMFIX /SAME FIXATION!! /BONAFIDE ONSET OF NEW FIXATION: SAVE /X,Y,D,S DATA FROM LAST ONE & SETUP DISP /FOR NEW FIXATION LDA XFIX ROL 6 ADD YFIX JMP STORE /(X,Y) LDA 15 C303, ROR 3 ADD 14 JMP STORE /(S,D) SET I 14 1 /NEW FIX TIMER CLR STC 15 /NEW SAC TIMER STC FIXING /FIX MODE ADD 17 STC XFIX /NEW FIX /CHECK FOR RETURN SWEEP=REGRESSION<=1/2 /CHARS/LINE. DONT"T CHECK UNLESS 3 FIXES /MADE ON LINE ADD ONE ADM I NFIXLN, 0 /INCR FIXES/LN APO JMP RESET /TOO SOON FOR RS LDA I CH2, 0 /=NO CHARS/2 ADD D /=X-X0 APO I JMP RESET /RETURN SWEEP DETECTED: GO TO /NEXT LINE: YFIX=MIN (YFIX+1,-MLINES) LDA YFIX ADD MLINES SAE I -1 SKP JMP RESET /LAST LN: SKIP LDA I 1 ADM YFIX JMP SETXR /SET NEXT LN JMP RESET /SETUP NEW DISP / /ARRIVES HERE FROM "MOVING" IF MOVEMENT /PERISTS: INCREMENT SACCADE TIMER / MORMOV, LDA 15 SAE I 7 XSK I 15 /TO MAX=7 LDA 17 STC XMOVE /CURRENT POSN JMP RESTOR /CONT DISP / /ARRIVES HERE IF POSSIBLE SACCADE WASNT /ONE: ADD SAC TIME TO FIX TIME AND /RESUME CURRENT FIXATION / SAMFIX, CLR STC FIXING /RESET FIX ADD 15 ADM 14 COM ADD C776 /MAX=776 APO I JMP .+3 SET I 14 776 SET I 15 0 JMP PERSIS / /RESET LINE CONTROL WORD ARRAY SO THAT /WINDOW WIDTH=-MWDL-MWDR WORDS AROUND /FIXATION POINT. OFFSET=-MWDL WORDS, /UNLESS YOKE NON-0: THEN ADD IT TO OFSET / RESET, DTEXT SET I 4 LINCON+1777 SET 6 MLINES CLR /EACH LINE SET STA I 4 /TO ALL PERIPH. XSK I 6 JMP .-2 ADD YFIX ADD ADLIN2 /=AD-1 WINDOW STC 1 /LINE CONTR WD ADD YFIX ADD ADLIN1 STC 2 LDA I 2 /AD-1/2 TEXT LN STC 2 /FIXATED CHAR=XFIX-TH OR LAST IF XFIX /BEYOND END OF LINE. ADD XFIX ADD MNCH APO I JMP .+4 LDA XFIX JMP .+4 LDA I MNCH, 0 COM ROR 1 ADD 2 /=AD-1/2 FIX CHR STA 5 ADD ONE STC 3 SET I 4 MWDR, -2 /WDS RIGHT FIX JMP LETFOR SKP JMP .-2 /WAIT FOR LETTER JMP LETFOR JMP .-1 /WD=LETTER,NON-L XSK I 4 /ANOTHER WORD R? JMP MWDR+1 SET I 4 MWDL, -1 /WDS LEFT FIX JMP LETBAK C456, SKP JMP .-2 /WAIT FOR LETTER JMP LETBAK JMP .-1 /GOING LEFT XSK I 4 /ANOTHER WORD L? JMP MWDL+1 ENDL, LDA 3 C17, COM ADD 5 ROL 1 ADD M1 /CHARS IN CENTER COM STC MWIDTH ADD 2 COM ADD 3 ROL 1 /CHARS IN "LEFT" ADA I YOKE, 0 /WORD-NON-W PARA APO CLR COM STA I 1 /=LINE CONTROL /YOKE=-YOKE FOR RANDOMLY VARYING LDA YOKE COM STC YOKE JMP DISPLA / /SUBR RETURNS .+1 IF NEXT TEXT CHAR IS /LETTER, .+2 IF NON-LETTER, AND TO /"MWDL"-1 IF END OF LINE (43) / LETFOR, LDH I 5 SHD I 4300 JMP MWDL-1 ADD M32 APO I XSK I JMP / /SUBR DOES REVERSE OF "LETFOR", GOING /BACKWARD THRU TEXT. GOES TO ENDL IF AT /LINE START (57) / LETBAK, LDA I -4000 ADM 3 LDH 3 SHD I 5700 JMP ENDL ADD M32 APO I XSK I JMP / /SUBR SETS UP RETURN SWEEP DETECTOR=NO. /CHARS/LINE/2 / SETXR, LDA 0 STC SETXRJ ADD YFIX ADD ADLIN1 STC 1 /AD-1 Y LINE PTR DTEXT LDA I 1 STC XRJ /AD-1/2 TEXT LN ADD YFIX ADD MLINES SAE I -1 /BOTTOM LINE? JMP XRJ-1 LDA XRJ COM ADD ENDPAG JMP .+5 LDA I XRJ, 0 COM ADA I 1 ROL 1 ADD M1 /IGNORE 43 & 57 COM STA MNCH COM SCR 1 STC CH2 LDA I -2 STC NFIXLN /INIT LINE TRIGR SETXRJ, HLT /RJ / /CONTROL REACHES HERE WHENEVER INTERRUPT /OCCURS FROM RESPONSE PANEL. END OF PAGE /IF LEFT BUTTON, SHIFT UP LINE IF RIGHT. / PANEL, IOB 6311 /PANEL FLAG? JMP ERROR /NO:SPURIOUS CLR IOB 6316 /READ&CLR PANEL SHD I 0 /LEFT KEY? JMP NUPAGE /SHIFT UP LINE: Y=MAX(0,Y-1) LDA YFIX AZE I JMP RESET /NO CHANGE ADD M1 APO CLR STC YFIX /-0=0 JMP SETXR /NEW LINE JMP RESET /HERE IF LEFT KEY: TURN PAGE / NUPAGE, LDA I 7777 JMP STORE /PAGE END-MARKER /NOW CHECK IF THERE"S MORE OF TEXT. LDA I DLINES, 0 ADD MLINES /LAST PAGE DONE AZE /IF MLINES0), /NEXT CHAR=DIAL-TAB (47),FOLLOWED BY /ASCII ANSWER AND THEN CR. IF NOT:ERROR! SAE I 47 /DIAL-TAB? JMP ERROR LDA 6 APO JMP ERROR AZE I /MUST HAVE>0 LNS JMP ERROR COM STC MLINES /MLINES=-C(6) JMP NXTCH JMP SETPAG+4 /BUFFER END JMP NXTCH /ANSWER IN BUFFR JMP SETPAG+4 /CR NOT " " SAE I 43 /CR? JMP ERROR JMP SETRET-4 /BEGINNING OF LINE OF TEXT NEWLN, LDA 7 STA I 3 /NEXT LINE PTR JMP NXTCH JMP SETPAG+4 /RESET BUFFER SAE I /SKIP TO END OF 43 /LINE=43 JMP .-4 CLR /EACH LINE CONT STA I 4 /INIT=+0 XSK I 6 /ANOTHER LINE? JMP CODLIN LDA 7 STC ENDPAG /SAVE END PTR STA I 3 /DUMMY LINAD=0 SETRET, HLT /RJ /END OF FILE ENCOUNTERED: DECREASE NO. /OF LINES TO BE DISPLAYED (NORMAL MODE) /OR JMP "FINISH" (QUESTION-MODE). / ENDFIL, ADD 6 APO />-0:QUEST.-MODE JMP .+4 AZE JMP ERROR />0:QST W/O ANSW JMP FINISH /NO MORE QUESTS. COM ADD MLINES STC MLINES JMP SETRET-4 /RETURN / /SUBR INPUTS NEXT CHAR FROM TEXT FILE BY /LDH I 7. CHECKS FOR TEXT POINTER=END OF /TEXT BUFFER. IF AT END, PUSHES ENTIRE /BUFFER DOWN SO THAT "PAGEPT" IS IN 1ST /BUFFER BLOCK; THEN RETURNS CALL+1 WITH /AC=0. ELSE RETURNS CALL+2 WITH AC=CHAR. / NXTCH, SET 5 0 /SAVE RJ LDA 7 SAE I 7377 /7377=END BUFFER JMP NXTRET+1 /NOT END LDA PAGEPT BCL I 6377 /BITS 2,3=BLOCK SCR 10 /=NO. SHIFT DOWN ADD TBLK /NEW LOW TBLK JMP TEXTIN /SUBR READS TEXT ADD PAGEPT BCL I 1400 /RESET PAGEPT STC PAGEPT /INTO 1ST BLOCK NXTRET, JMP 5 /RETURN CALL+1 XSK I 5 LDH I 7 /WITH AC=CHAR, JMP 5 /RETURN CALL+2 / /SUBR TAKES AC=TBLK, STRIPS BITS 0-2, /AND THEN READS IN 3 TBLKS (UNIT 0) INTO /TEXT BUFFER (BLOCKS 0-2 LDF 2) / TEXTIN, BCL I C7000, 7000 STC TBLK ADD STC TXIRET /RJ STD JMP .-1 /WAIT IF BUSY AXO /NO EXT.TAPE OPS DTEXT ADD C4000 JMP TBLKIN /1ST BLOCK IN LDA I 5001 JMP TBLKIN /2ND BLOCK LDA I 6002 JMP TBLKIN /3RD BLOCK TXIRET, HLT /RJ / /SUBR TAKES MBLK FROM AC, ADDS TBLK /TO IT, AND THEN READS BLOCK (UNIT 0) / TBLKIN, ADA I TBLK, 0 STC .+2 RDC 0 JMP / /END OF PAGE ENCODING ROUTINE / /SUBR INPUTS 1ST 3 BLOCKS OF TEXT FILE /INTO BUFFER, TAKING TBLK FROM AC. /SETS PAGEPT=6001 (SKIPS INITIAL "*20" /LINE OF FILE) AND THEN CALLS "SETPAG". / NEWTEX, STC D /SAVE AC=TBLK ADD STC NEWRET ADD C6001 STC PAGEPT ADD D JMP TEXTIN JMP SETPAG NEWRET, HLT /RJ / /SUBR POSITIONS TAPE UNIT 0 AT TBLK=AC /WITH "NO PAUSE" OPTION / TAPPOS, STC TAPRET-1 ADD STC TAPRET /RJ STD JMP .-1 /WAIT IF BUSY LDA I C10, 10 AXO /NO PAUSE CHK 0 TAPRET, HLT /RJ / /WHEN FATAL ERROR OCCURS, TYPE "ERROR" & /RESTART AT "MONIT" :JMP PC IN AC / ERROR, LDA 0 STC D SET I 12 ERLABL-4000 /PTR TO "ERROR" PROG1 /LIF 1 JMP MESSAG /CR,CR,"ERROR" ADD D /JMP PC IN AC JMP MONIT / /LOAD-TIME ONLY: SETUP 3000-377 REBUILD / LOAD, HLT DATA WRC 6274 /274:03000-3377 MONIT, HLT CLR AXO /NORM MODE DATA RDC 6274 /RESET 3000-377 LDA I CALBLK, 270 /GET ADJ&CALIBR& JMP TAPPOS /VFY TEXTS NO PS /INITIALIZE "TYPE" FOR NO DISPLAY PAUSE CLR IOB 6046 /DUMMY TLS INIT. ADD C456 /=SKP STC HOLDIS /START CLOCK FOR 120 CPS SAMPLING LDA I 100 PDP PMODE CLEN TAD C2000 /2100=100 KHZ CLLR CLA TAD MDT CLAB LINC LMODE /TYPE-IN OF PARAMETERS /CTRL/C DURING INPUT RESTARTS AT INPAR INPAR, DATA SET I 13 PGCODE /PGCODE FIXED SET I 12 /AD-1/2 PARAM LABEL1-4000 /LABELS (HF-WDS) SET I 6 -11 PGET, XSK I 13 PROG1 JMP MESSAG /TYPE PARAM LABL TYVAL, LDA 13 PROG1 JMP DECPUT /TYPE CUR VAL PROG1 JMP GETDEC /I3 DEC INPUT STC Y /SAVE INPUT LDA /C(2003)=-4: 2003 /INITIAL CR:KEEP ADD C4 /CURRENT VALUE AZE I JMP .+4 C1000, LDA Y STA 13 XSK I 6 /ANOTHER PARAM? JMP PGET /INPUT VECTOR LISTS FOR NO. WORDS LEFT /RIGHT OF CENTER + CENTER&PER CONDS /FOR EACH, TYPE 1-15 VALUES /SEPARATED BY ",", WITH CR AFTER LAST. LDA I 17 /AD-1 1ST VECTOR STA ADVEC+2000 /VECTORS IN LDF1 SET I 16 -5 /5 VECTORS VECTOR, PROG1 JMP MESSAG /VECTOR LABEL PROG1 JMP GETVEC /INPUT XSK I 16 JMP VECTOR /HAVE PARAMETERS LDA TOPLIN APO JMP ERROR /CANT BE <0 MUL I M20, -20 ADA I C361, 361 STC YTOP ADD C40 /ENABLE 1/2-SIZE C4, ESF /NO TTY INTERUPT JMP ADJUST / /BEGIN NEXT PAGE "RUN" / RUNPAG, PROG1 JMP PAGPAR /FETCH VECTORS JMP STORE /AC=INCR. NPAGE LDA MLINES COM JMP STORE LDA 2 /MWDR W/YOKE JMP STORE LDA MWDL JMP STORE LDA 1 /COMBINED PERIPH JMP STORE /INITIALIZE EYE-POSITION SAMPLERS SO /THAT PROGRAM STARTS IN "FIXING" MODE /AT (0,0). GIVES DUMMY (X,Y) (D,S) PAIR /AT TOP OF PAGE-FILE. / INIT, CLR STC XFIX STC FIXING /"FIXATING" STC YFIX STC 14 STC 15 JMP SETXR /INITIAL LINE JMP CLRPAN DISPLA, IOB 6001 /ION JMP SHPAGE JMP .-1 /KEEP DISPLAYING M32, -32 / /THIS SECTION DISPLAYS 3 X 3 "X" PATTERN /OVER PARAMETER-SELECTED DISPLAY AREA, /PROCEEDING TO CALIBRATE WHEN SW 5 DOWN. /FIRST READS IN TBLKS=270-272:3 LINES /ADJUST PATTERN+16 LINES CALIBR/VERIFY, /SUPERIMPOSES RAW X-VOLTAGE FOR SELF- /ADJUSTMENT BY SUBJECT. / ADJUST, LDA I 3 STC DLINES STC YFIX /SO SHPAGE WORKS ADD CALBLK JMP NEWTEX ADD TEXBLK JMP TAPPOS LDA I M1, -1 ADD LINES MUL SPACIN SCR 1 MUL I -20 STC DY ADD JMPPER STC STPERD ADD C4000 STC STBLNK /ALL TEXT SHOWN JMP CLRPAN /CLEAR PANEL / /DISPLAY ADJUST PATTERN & X-VOLTAGE EACH /CLOCK "BEAT" UNTIL PANEL STRUCK / ADJSHO, IOB 6135 /CLSA IOB 6131 /CLSK JMP .-2 JMP SHPAGE XSAMP ADD C1000 SCR 1 COM BCL I 7000 /CONVERT TO H.C STC ADJLN+1 SET I 2 -3 ADD YTOP ADJLN, SET I 1 0 /PRESET HC DSC I 77 ADD DY XSK I 2 JMP ADJLN IOB /REPEAT 6311 /UNTIL PANEL HIT JMP ADJSHO / /CALIBRATION SECTION. /THIS CALIBRATION IS 8 POINTS /LINE, /WITH A SEPARATE X-CALIB. FOR EACH LINE, /UNLESS SW 2 UP: THEN ONE CALIB/2 LINES / CALIBR, LDA LINES STC DLINES ADD SPACIN MUL I -20 STC DY LDA I AM32, ADD M32 STC STPERD /SET STANDARD ADD C4000 /PERIPHS STC STBLNK COM STC STMASK ADD ENDPAG STC PAGEPT /SETUP CALBLK JMP SETPAG /SETUP CALBLK SNS 4 JMP READ /SET "TYPE" FOR DISPLAY THRU TTY OUTPUT ADD JMPCAL /=JMP SHOCAL STC HOLDIS /S FIXATES EACH SQUARE SUPERIMPOSED ON /CALIB. TEXT (ALL PERIPH.) AND WHILE /FIXATING HITS PANEL KEY, THEN MOVES ON. / RECAL, ADD LINES /ERROR RESTART SNS 2 /1/2 SW 2 JMP .+3 ADD ONE SCR 1 COM STC 14 SET I 17 2417 /AD-1 X-STORE TABLES ADD YTOP CLINE, STC YCAL /V.C. CURRENT LN ADD C776 STC XFIX /H.C. CALIB PT. SET I 12 CELAB+4000 PROG1 JMP MESSAG /CR,LF SET I 15 M10, -10 LDA I /STAY AWAY FROM 417 /HIGH VALUES STC LASTV CSPOT, JMP CLRPAN /CLEAR PANEL JMP SHPAGE JMPCAL, JMP SHOCAL /AND CALIB. SQ. IOB 6311 JMP .-4 JMP CLRPAN /SYNCHRON SAMPLE ON CLOCK BEAT IOB 6135 /CLSA IOB 6131 /CLSK JMP .-2 XSAMP /GET X-VOLTAGE ADD C1000 SCR 2 STA 11 /TEMP X /TYPE X FOR EACH POINT /DISPLAY REMAINS ON THROUGH TYPE-OUT PROG1 JMP DECPUT /TYPE X SET I 12 CRLF+4000 /" " PROG1 JMP MESSAG ADD 11 AZE I JMP CALERR /RIGHT EDGE!! TABLES STA I 17 /STORE X-VAL ADA I MINDV, 20 /MIN GAIN X-X0 COM ADD LASTV APO JMP CALERR /GAIN TOO SMALL LDA 17 STA I LASTV, 0 LDA I 110 /CAL PT SPACING ADM XFIX /H.C. NEXT PT. XSK I 15 /ANOTHER PT/LINE JMP CSPOT LDA DY SNS I 2 /SKIP LINE SW 2 ADD DY ADD YCAL XSK I 14 /ANOTHER LINE? JMP CLINE /INTERPOLATE: LIF 3 LIF 3 JMP INTERP /CALIB ERROR: TYPE "?" & RESTART / CALERR, SET I 12 CELAB-4000 PROG1 JMP MESSAG EXIT1, JMP ADJUST /RESTART / SEGMNT 3 *20 /NOW FOR EACH L (L=0,LINES-1), SETUP A /256-ELEMENT MATRIX FOR X-POSN AS /FUNCTION OF X-VOLT.: FOR EACH VOLTAGE V /(0,377 OCT) INTERPOLATE X-POS (0,70 O) /AT 256*L+V IN PDP FIELD 1. /2 LINES/INTERP SW 2 UP INTERP, LDF LDA LINES+2000 SNS 2 JMP .+4 ADA I 1 SCR 1 COM STC 11 SET I 15 417 /AD-1 X-VALUES SET I 16 420 /AD X-VALS LDA I LDF 4 /INITIAL LDF=4 NEWLDF, STC TABLDF LDA I 2000 INTERX, STC LOOKUP /BEGIN CUR LDF ADD LOOKUP ADA I 377 STC 17 /TOP OF TABLE STC 6 /START X-POS=0 SET I 14 -7 /8-1 INTERVALS INTX1, LDA I 16 COM /FORM VOLT. DIFF ADA I 15 /NEXT INTERVAL STC DV SET I 10 /INTERP. 8 PTS -10 /PER INTERVAL SET I 2 /AT 1/16,3/16, 1 /...,15/16 *D ADD 2 INTX2, MUL I /FORM NEXT POINT DV, 0 /=N*DV/16 SCR 4 COM /POSN REL.TO TOP ADA 15 /(LEFT)OF INTER. JMP TABFIL /AND FILL DOWN XSK I 6 /NEXT X-POSN LDA I 2 ADM 2 /NUMER. NEXT PT. XSK I 10 /ANOTHER PT/INT? JMP INTX2 XSK I 14 /ANOTHER INTERV? JMP INTX1 CLR /FILL DOWN REST JMP TABFIL /X=70 (RIGHTMOST /END OF INTERPOLATION CURRENT TABLE. /INCREMENT LOOKUP BY 400 (AND TABLDF IF /NEEDED) AND DO NEXT TABLE. XSK I 11 /ANOTHER TABLE? SKP JMP CALDON /CALIB DONE! XSK I 15 /POINTERS TO XSK I 16 /NEXT SET X-AVGS LDA I 400 ADD LOOKUP /AD NEXT TABLE SAE I 4000 /END CUR LDF? JMP INTERX /DO NEXT TABLE ROL 1 /AC=1 ADD TABLDF JMP NEWLDF /NEW LDF,LOOKUP / CALDON, PROG0 JMP READ /CALIB DONE!! / /SUBROUTINE FILLS DOWN THRU ADR=AC /(INCLUSIVE), SETTING EACH ELEMENT=C(6). /STARTING FILL AD=C(17) IN LDF=TABLDF / TABFIL, ADA I LOOKUP, 0 /PARAM=AD TABLE STC FILEND /LOWEST FILL ADR TABLDF, HLT /LDF OF TABLE LDA 6 /X POSN STA 17 LDA I -1 ADM 17 /NEXT LOWER ADR COM ADA I FILEND, 0 /DONE IF >-0 APO I JMP /DONE:RETURN DJR /PROTECT RJ JMP TABFIL+4 / /END INTERP. SEC. / SEGMNT 0 *EXIT1+1 / /SUBR DISPLAYS "X"(XFIX,YCAL) / SHOCAL, SET 1 XFIX LDA I YCAL, 0 DSC I 1463 DSC I 6314 JMP / /EXECUTE "READ" TASK. / READ, CLR STA I NPAGE, 0 /INIT.PAGE=0 ADD C456 /RESET "TYPE" TO STC HOLDIS /NO-DISPLAY MODE /INITIALIZE PROG1 PTRS TO PARAM.-VECTORS DATA SET I 1 2012 SET I 2 -5 ADD C17 STA I 1 ADD C20 XSK I 2 JMP .-3 LDA TEXBLK JMP NEWTEX /FETCH TEXT /POSITION DATA FILE (UNIT 1) AT DATBLK ADD DATBLK STC .+4 ADD C10 AXO /NO PAUSE CHK U 0 /BEGIN DATA FILE W/ PARAMETER LIST DATA SET I 13 2777 /START AT 3000 SET I 12 PGCODE-1 /PARAMETER ARRAY SET I 6 -12 LDA I 12 STA I 13 XSK I 6 JMP .-3 JMP RUNPAG /RUN 1ST PAGE / /DIVERSION FROM "TYPE" WHEN TTY NOT /READY: DO NOTHING (HOLDIS=SKP) OR /REFRESH PAGE & CALIB SQ (=JMP SHOCAL) / HOLDIS, HLT JMP SHPAGE PROG1 JMP TYPE+3 / /FAIL-SAFE PANEL CLEAR / CLRPAN, IOB 6314 IOB 6311 JMP DJR /ERROR:TRY AGAIN JMP CLRPAN / /QUESTION-SECTION VOID RIGHT NOW!!! /WRITE FINAL END-MARKER / QUESTN, LDA I 7777 JMP STORE FINISH=QUESTN /WRITE OUT LAST DATA-FILE BLOCK UNLESS /LAST END-MARKER TRIGGERED IT LDA 13 BSE I 7400 /WILL BE 7777 AZE I /IFF END MBLK JMP WDONE /IN PROG:WAIT /NOT YET OUTPUT: WRITE CURRENT MBLK STD JMP .-1 CLR JMP WRITE WDONE, STD JMP .-1 ENDJOB, JMP MONIT /DONE!! / /END Q-CHAIN INSERT / /FOLLOWING SUBROUTINES AND OUTPUT LABELS /FIT INTO PROG1 (LIF 1) BELOW THE 2-BLOK /DATA OUTPUT BUFFER.20-137:VECTOR STORAG / SEGMNT 1 *140 /ARRIVES FROM "RUNPAG" BEFORE EACH NEW /PAGE OF TEXT RUN: SETS EACH OF 4 VECTS /TO NEXT ELEMENT (5000=RESET TO TOP) /AT 20,40,60,100,120 VIA 13,14,15,16,17 / PAGPAR, LDF LDA I 13 SAE I 5000 JMP .+4 SET I 13 17 JMP .-6 /RWORDS/LWORDS: NO. R/L, EXCLUDES /FIXATED WORD. RWORD<0 MEANS YOKE=+-2 /ELSE YOKE=0. YOKE="SLIDE" OF WINDOW STA 2002 APO COM ADA I C1, 1 COM STA MWDR+2000 LDA 13 APO I JMP .+4 LDA I 2 SKP CLR STA YOKE+2000 LDA I 14 SAE I 5000 JMP .+4 SET I 14 37 JMP .-6 ADD C1 COM STA MWDL+2000 LDA I 15 SAE I 5000 JMP .+4 SET I 15 57 JMP .-6 /CENTER,LEFT,RIGHT CONDS: BIT 8: 1=7777 /MASK, 0=0000 MASK. BIT 9: 1=MASK BLANK /BITS 10-11: 00=SHOW ALL NON-BLANKS, 10= /MASK LETTERS&DIGITS,11=MASK NON-BLANKS. BCL I 7767 AZE I JMP .+3 CLR COM STA WMASK+2000 LDA 15 BCL I 7773 ROR 3 STA WBLANK+2000 LDA 15 BCL I 7774 AZE I JMP SC-2 SAE I 2 JMP .+4 LDA I ADD M32 JMP SC LDA I JMP MASKCH JMP SC LDA I JMP ONPER SC, STA WPERD+2000 LDA I 16 SAE I 5000 JMP .+4 SET I 16 77 JMP .-6 BCL I 7767 AZE I JMP .+3 CLR COM STA LMASK+2000 LDA 16 BCL I 7773 ROR 3 STA LBLANK+2000 LDA 16 BCL I 7774 AZE I JMP SL-1 SAE I 2 JMP .+4 LDA I ADD M32 JMP SL LDA I JMP MASKCH SKP ADD SC-1 SL, STA LPERD+2000 LDA I 17 SAE I 5000 JMP .+4 SET I 17 117 JMP .-6 BCL I 7767 AZE I JMP .+3 CLR COM STA RMASK+2000 LDA 17 BCL I 7773 ROR 3 STA RBLANK+2000 LDA 17 BCL I 7774 AZE I JMP SR-1 SAE I 2 JMP .+4 LDA I ADD M32 JMP SR LDA I JMP MASKCH SKP ADD SC-1 SR, STA RPERD+2000 LDA 15 ROL 4 ADA 16 ROL 4 ADA 17 STA 2001 /COMPOSITE CONDS LDA I 1 ADM NPAGE+2000 /INCR NPAGE PROG0 JMP RUNPAG+2 /RJ,AC=NPAGE / /SUBR TYPES AC AS SIGNED DECIMAL INTEGER / DECPUT, STC 4 /SAVE ARG ADD STC DECRET /RET AD ADD 4 APO I JMP .+6 />0:NO "-" COM STC 4 /ABS(ARG) ADD C255 JMP TYPE /"-" ADD 4 SET I 2 260 /COUNT DIGIT ADA I -144 /HUNDREDS APO JMP .+3 XSK I 2 /INCR. DIGIT JMP .-5 AZE I /-0? JMP .-3 /KEEP GOING ADA I 144 /RSETORE REM. STC 4 ADD 2 JMP TYPE /HUNDREDS SET I 2 C260, 260 ADD 4 ADD MD10 APO JMP .+3 XSK I 2 JMP .-4 AZE I JMP .-3 ADD D10 STC 4 ADD 2 JMP TYPE /TENS ADD C260 ADD 4 JMP TYPE /UNITS PROG0 /RETURN IN PROG0 DECRET, HLT /R.J. / /AFTER TYPING INITIAL SPACE, /SUBR ACCEPTS SIGNED 3-DIGIT DECIMAL /INTEGER FROM TTY. LEADING ZEROES NEEDNT /BE ENTERED; AND A CR IS THE /TERMINATOR. THE OBTAINED VALUE IS /RETURNED VIA AC. /AN INITIAL CR LEAVES AC=0&3=-4 (LIF 1) /ILLEGAL CHARS/SIGN GENRATE JMP "ENTERR" / GETDEC, LDA 0 STC GETRET /R.J. LDA I 240 JMP TYPE /SPACE JMP INPUT ADD ASCII SAE I 215 /LAST CHAR=CR? JMP ENTERR LDA 4 PROG0 /RETURN PROG0 GETRET, HLT /WITH AC=VAL / /SUBR TAKES SIGNED DECIMAL INTEGER FROM /TTY. LEAD BLANKS IGNORED, LEAD 0"S MAY /BE SUPPRESSED. ECHOES ALL NON-CR CHARS. /AND EXITS WHEN NON-DIGIT APPEARS (CHAR /LEFT IN ASCII), WITH SIGNED VAL IN 4. / INPUT, LDA 0 STC INPRET STC 4 /BUILDS VALUE SET I 2 -2 /INDEXES SIGN SET I 3 -4 /INDEXES DIGITS JMP INCHAR /CH&ECHO NON-CR SHD I 4000 /SKIP LEAD BLNK JMP .-3 SAE I 215 SKP JMP HAVEIT /INITIAL CR SAE I C255, 255 /"-"? JMP NEXDIG+1 /SHOULD BE DIGIT XSK I 2 /SIGN FLAG NEXDIG, JMP INCHAR ADA I /DIGIT? -257 APO JMP HAVEIT /NO:RETURN ADA I MD10, -12 /DIGIT? APO I JMP HAVEIT ADD C11 /RESTORE DIGIT AZE I C11, CLR /-0 TO +0 STC 5 XSK I 3 />3 DIGITS? SKP JMP HAVEIT ADD 4 MUL I D10, 12 /DEC. SHIFT LEFT ADD 5 STC 4 JMP NEXDIG HAVEIT, LDA 4 XSK I 2 /SIGN? SKP COM STC 4 INPRET, HLT /RJ / /SUBR ACCEPTS TTY CHAR AND ECHOES NON-CR /LEAVES CHAR IN "ASCII" & AC. IF CTRL/C, /RESTARTS AT INPAR. / INCHAR, LDA 0 STC INCRET IOB 6031 /KSF JMP .-2 IOB 6036 /KRB STA I ASCII, 0 SAE I 203 /CTRL/C? JMP .+3 PROG0 JMP INPAR SAE I C215, 215 JMP TYPE /ECHO NON-CR LDA ASCII INCRET, HLT /RJ / /CONTROL ARRIVES HERE ON ILLEGAL INPUT / ENTERR, LDA I 277 JMP TYPE /? LDA I C275, 275 /= JMP TYPE PROG0 /REDO ENTRY JMP TYVAL / /INPUT FOR VECTOR-PARAMETERS: SAME INPUT /BUT NULL ENTRIES AREN"T ALLOWED, "," /SEPARATES MULTIPLE ENTRIES,AND ERRORS /RESTART ENTIRE VECTOR INPUT. VECTOR AT /C(ADVEC)+1 UP. / GETVEC, SET I 1 -17 /MAX 15/VECTOR SET I 15 ADVEC, 0 JMP INPUT /GET & STORE ADD 4 STA I 15 /VECTOR ENTRY LDA I 4 ADD 3 /NULL ENTRY? AZE I JMP VECERR LDA ASCII /LAST INPUT CHAR SHD I 5400 /","? JMP NXITEM /YES:GET NEXT N SAE I 215 /CR? JMP VECERR VECFIN, LDA I 5000 /END VECTOR=5000 STA I 15 LDA I 20 ADM ADVEC /AD-1 NEXT VECT. PROG0 JMP VECTOR+4 /RETURN NXITEM, XSK I 1 /ROOM 4 1 MORE? JMP ADVEC+1 JMP VECFIN /NO:CLOSE VEC. / /CONTROL HERE IF ERROR DURING VECTOR /INPUT. TYPES ?,CR,= & RESTART " ". / VECERR, LDA I 277 JMP TYPE /? JMP CRLF ADD C275 JMP TYPE /= PROG0 JMP VECTOR+2 /RESTART VECTOR / /SUBR TYPES OUT MESSAGE FROM PACKED /ASCII CODE - 43 GENERATES CR&LF, AND 00 /TERMINATES OUTPUT. ADDRESS OF SOURCE /POINTED (+1/2) BY 12 FROM PROG0 / MESSAG, LDA 0 STC MESRET /R.J. PDP PMODE TAD 12 /PASS PROG0(12) LINC /W/O DIFF LDF LMODE STC 12 NXCHAR, LDH I 12 AZE I JMP C100+1 /SETUP RETURN SAE I 43 /CR? JMP .+3 JMP CRLF /DO CR,LF JMP NXCHAR ADA I -37 /ADD 100 OR 200 APO /FOR 8-BIT CODE ADD C100 ADA I 237 JMP TYPE /TYPE 8-BIT CODE JMP NXCHAR C100, 100 ADD 12 /PASS PTR BACK PDP /TO 1 IN PROG0 PMODE DCA 12 LINC LMODE PROG0 /RETURN IN PROG0 MESRET, HLT /R.J. / /SUBR TYPES CR,LF / CRLF, LDA 4000 /REG 0 STC CARRET /R.J. ADD C215 JMP TYPE /CR LDA I 212 JMP TYPE /LF CARRET, HLT /RETURN / /SUBR TYPES AC /SPECIAL "DISPLAY" MODE (WHEN HOLDIS= /JMP SHPAGE) IN WHICH CURRENT PAGE & /CALIB. PT. DISPLAYED WHILE TSF-ING. / TYPE, STC SAVASC ADD STC TYPRET /RJ IOB 6041 /TSF JMP TYPRET+1 /WAIT LDA I SAVASC, 0 IOB 6046 /TLS CLR TYPRET, HLT /RJ PROG0 JMP HOLDIS /REFRESH,WAIT / /MESSAGES&LABELS / CELAB, 7743 /"?" 4300 ERLABL, 4343 TEXT *ERROR* LABEL1, 4343 TEXT *SUB-SESS ID=* 0043 TEXT *TEXT TAPE =* 0043 TEXT *TEXT BLOCK =* 0043 TEXT *DATA BLOCK =* 0043 TEXT *QUEST.BLOCK=* 0043 TEXT *TOP LINE NO=* 0043 TEXT *NO.OF LINES=* 0043 TEXT *LN SPACING =* 0043 TEXT *X-CRITERION=* 0043 TEXT *WORDS RIGHT * 4375 0043 TEXT *WORDS LEFT* 4375 0043 TEXT *WINDOW CONDS* 4375 0043 TEXT *LEFT-P CONDS* 4375 0043 TEXT *RITE-P CONDS* 4375 0000 / /END OF PROG1 SECTION. 3000-4000 THIS /SEGMENT USED FOR DATA OUTPUT BUFFERING. /SEGMENT 2: 1ST 3 BLOCKS TEXT BUFFERING /(4000-5377). THEN PATTERN WORDS (5400- /5577). THEN LINE ADRESS AND LINE-CONTR SEGMNT 2 *1400 /PATTERN WORDS FOR CHAR DISPLAY FOLLOWS 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 7000 /APOST.(TYPE ^) 0 3410 /BACK ARROW 1010 0 /BLANK 0 7500 /! 0 7000 /" 70 3614 /NO. SIGN 1436 7721 /$ 4677 1446 /% 6130 5166 /& 0523 500 /APOSTROPHY 6 3600 /( 41 4100 /) 36 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 /< 42 1212 /= 1212 4200 /> 1024 4020 /? 2055 /16 LINE ADDRESS POINTERS+1 WRAPUP LINADS, 0 *.+20 LINCON, 0