*20 LMODE /X BY (MINIMAX) Y VERSION - 1/2-"X" / DATA=LDF 1 DTEXT=LDF 2 TABLES=LDF 3 PROG0=LIF 0 PROG1=LIF 1 XSAMP=SAM 15 YSAMP=SAM 17 /JOB PARAMETERS STORED HERE SEGMNT 0 *20 PGCODE, 145 /PROGRAM CODE SUBSES, 0 TEXTAP, 0 TEXBLK, 0 DATBLK, 0 QBLK, -1 TOPLIN, 8 LINES, 4 SPACIN, 6 XCRIT, 4 / PMODE MDT, -144 /10 MSEC/SAMPLE C3000, 3000 LMODE / /"SUBSES": SUBJECT-SESSION ID /"TEXTAP": TAPE ID FOR SOURCE & QUESTS. /"TEXBLK": 1ST TBLK TEXT FILE /"DATBLK": " " " DATA OUTPUT (UNIT 1) /"QBLK" : " " " QUESTIONS (<0:NONE) /"TOPLIN": TOP OF DISPLAY LINE NO.(0,31) /"LINES" : LINES PER PAGE /"SPACIN": 1=SINGLE SPACING,2=DOUBLE,ETC /"XCRIT" : MIN. CHANGE IN X-POS FOR MOVE / /THIS SECTION HANDLES INTERRUPTS. /TWO POSSIBLE INTERRUPTS: ON RESP.PANEL, /SUBJECT SIGNALS END OF PAGE/END VERIFY. /CLOCK INTERRUPT=RESAMPLE EYE-POSN *40 0 /INTERRUPT PC STC ACSAVE /SAVE AC AND 0000 BUT NOT L OR MQ. /10&11 COUNT ELAPSED SECS.:100 SAMPS/SEC ADD STC SAVE0 IOB 6135 /CLSA APO I JMP PANEL /CHECK PANEL INT XSK I 10 /ANOTHER SECOND? JMP .+5 XSK I 11 /INCR SECONDS NOP SET I 10 -144 /SAMPLE Y AND X SIGNALS (A-D 17 & 15) /COMPUTE TABLE LOOKUP FOR EACH OF THEM TABLES YSAMP ADD C1000 SCR 2 /INTO (0,377) ADA I 3400 /INTO VOLT AD STC 16 /Y-POINTER LDA 16 ROR 4 /C(16)*256 STC /AD CDF 10 X-TAB XSAMP ADD C1000 SCR 2 ADD /12-BIT AD X-POS STC PDP PMODE CDF 10 /IN PDP DF 1 TAD I CDF LINC LMODE STC 17 /17 HOLDS X-POS /NOW COMPARE X-POS WITH LAST ONE="XFIX" /IF DIFFERENCE IS LESS THAN OR EQUAL TO /"XCRIT" CHAR POSNS, NO CHANGE IS JUDGED LDA I XFIX, 0 COM ADD 17 APO I COM /COMPARE X-CHANG ADD XCRIT /WITH X CRIT. STC D /"FIXING"=0: FIXATION; ELSE, MOVING SAE I FIXING, 0 JMP MOVING ADD D />0:NO X CHANGE APO JMP SACCAD /FIXATION ENDS! /NO CRITERIAL CHANGE IN X; CHECK Y LDA I YFIX, 0 /FIX. LINE NO. SAE 16 JMP SACCAD /Y HAS CHANGED! /FIXATION PERSISTS: INCREMENT FIXATION /TIMER (REGISTER 14) ONLY UP TO 776 LDA 14 SAE I 776 XSK I 14 /NOW RETURN TO DISPLAY IN PROGRESS. 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 FIXATIN ENDS: /ZERO SACCADE-TIMER (REGISTER 15), SET /"FIXING" NON-ZERO, SAVE (XFIX,YFIX) / SACCAD, SET I 15 0 /INIT SACCADE TM ADD C361 STC FIXING /NON-ZERO=MOVING ADD XFIX ROL 6 ADD YFIX /SAVE(XFIX,YFIX) JMP STORE TABLES /INCREMENT SACCADE TIMER TO MAX OF 7 MORMOV, LDA 15 SAE I 7 XSK I 15 LDA 16 STC YFIX /UPDATE Y ADD 17 STC XFIX /UPDATE X JMP RESTOR /RETURN / /CONTROL REACHES HERE WHENEVER SUBJECT /IN "MOVEMENT" PHASE ("FIXING" NOT 0) /STAYS IN "MOVEMENT" UNTIL TWO SUCCESSIV /X AND Y SAMPLES WITHIN FIXATION CRITERI / MOVING, LDA I D, 0 /<0:STILL MOVING APO JMP MORMOV LDA YFIX /X STOPPED:CHECK SAE 16 /Y POSN. JMP MORMOV /END OF MOVEMENT: NEW FIXATION BEGINS. /STORE TIMES OF LAST FIXATION AND SACCAD /AS DATA: BITS 0-2 SACCADE+3-11 FIXATION LDA 15 C303, ROR 3 ADD 14 JMP STORE TABLES CLR STC FIXING /FIXATION MODE SET I 14 /INIT FIX TIMER 1 ADD 17 STC XFIX /NEW XFIX /RESTART PAGE DISPLAY ON (POSSIBLY) NEW /FIXATION LINE="YFIX", AFTER RESETTING /DISPLAY LINE CONTROLS. DTEXT SET I 4 LINCON+1777 SET 6 MLINES ADD C7000 /EACH LINE SET STA I 4 /TO ALL PERIPH. XSK I 6 JMP .-2 LDA YFIX ADD ADLIN2 /=AD-1 WINDOW STC 4 /LINE ADD XFIX ADA I POSN, 0 /NO. CHARS TO COM /LEFT OF WINDOW APO I /TOO FAR LEFT? JMP NOROOM STA I 4 /=CONTROL WORD LDA I MWIDE, -10 /-WINDOW WIDTH STC MWIDTH JMP DISPLA /START NEW DISPL NOROOM, ADD MWIDE /DECREASE WINDOW AZE I /(MIN=1) JMP .+3 APO JMP .+3 LDA I -1 STC MWIDTH COM STA I 4 /CONTROL WORD=-0 JMP DISPLA / /CONTROL REACHES HERE WHENEVER INTERRUPT /OCCURS FROM RESPONSE PANEL. IF TBLK= /CALBLK, MEANS END "VERIFY"-GO TO "READ /ELSE, ALREADY IN "READ": END OF PAGE. /STORE END-MARKER (7777) IN DATA FILE / PANEL, IOB 6311 /PANEL FLAG? JMP RESTOR /NO:SPURIOUS IOB 6314 /CLEAR FLAG LDA TBLK SAE CALBLK SKP JMP READ /FIRST STORE CURRENT DATA LDA FIXING AZE JMP .+7 ADD XFIX ROL 6 ADD YFIX JMP STORE CLR JMP .+4 LDA 15 ROR 3 ADD 14 JMP STORE LDA I 7777 JMP STORE /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 C17, 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 ADD C7000 /EACH LINE INIT= STA I 4 /ALL PERIPH<<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-1 /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 / /ERROR ROUTINE. CONTROL ARRIVES HERE /WHEN FATAL OPERATIONAL ERROR OCCURS. /TYPES OUT "ERROR" AND HALTS WITH /JMP-TO-PC INSTR. 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 / /SYSTEM MONITOR HERE. HALTS AND WHEN /STARTED, RUNS NEW JOB / MONIT, HLT 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 /NOW READ IN PARAMETER VALUES FOR NEXT /READING TASK. EACH PARAMETER /NAME IS TYPED OUT, FOLLOWED BY "=", /AND THEN ITS CURRENT VALUE AND /THEN A SPACE. THEN A NUMBER (SIGNED /DECIMAL INTEGER) IS ENTERED, /IF A NEW VALUE IS DESIRED (LEADING /ZEROES MAY BE SURPRESSED), OR A DIRECT /CR IF THE SAME VALUE IS DESIRED. A /"RUBOUT" BEFORE THE CR RESTARTS THE /INPUT AT THE "=" FOR THE PARAMETER. / 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 LDA Y STA 13 XSK I 6 /ANOTHER PARAM? JMP PGET /NOW ACCEPT VECTOR INPUT FOR WINDOW SIZE /,POS"N, AND PERIPHERY-TYPE. AFTER LABEL /FOR EACH, INPUT 1-15 NUMBERS AS ABOVE, /SEPARATED BY ",", WITH CR AFTER LAST. / LDA I 17 /AD-1 1ST VECTOR STA ADVEC+2000 /VECTORS IN LDF1 SET I 16 -3 VECTOR, PROG1 JMP MESSAG /VECTOR LABEL PROG1 JMP GETVEC /INPUT XSK I 16 JMP VECTOR /PARAMETERS OBTAINED. COMPUTE YTOP AND /PROCEED TO "ADJUST". 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 / /THIS SECTION "RUNS" PAGE DISPLAY, /WINDOW CONTROL AND DATA ACQUISITION. / RUNPAG, PROG1 JMP PAGPAR /FETCH VECTORS JMP STORE /AC=INCR. NPAGE LDA MLINES COM JMP STORE LDA MWIDE COM JMP STORE LDA POSN JMP STORE LDA 1 JMP STORE /INITIALIZE EYE-POSITION SAMPLERS SO /THAT PROGRAM STARTS IN "MOVING" MODE /WITH LAST FIXATION AT (0,361). GIVES /DUMMY (15,14) TIMING WORD AT TOP OF /DATA. ALLOWS IST WINDOW TO BE SET /IMMEDIATELY. INIT, STC FIXING ADD C361 STC XFIX STC YFIX STC 14 STC 15 /TURN ON CLOCK INTERRUPT LDA I 100 PDP PMODE CLEN TAD C3000 CLLR /10 KHZ CLOCK CLA TAD MDT /SAMPLING RATE CLAB CLSA /CLEAR REQUESTS 6314 /CLEAR PANEL LINC LMODE DISPLA, IOB 6001 /ION JMP SHPAGE JMP .-1 /KEEP DISPLAYING / /END OF PAGE-RUNNING SECTION / /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, /AND THEN (WITHOUT PAUSING) MOVES TAPE /TO TEXT SOURCE (DOESN"T READ IT YET). / ADJUST, LDA I 3 STC DLINES ADD CALBLK JMP NEWTEX ADD TEXBLK JMP TAPPOS LDA I M1, -1 ADD LINES MUL SPACIN SCR 1 MUL I -20 STC DY STC PERDEF /ALL TEXT JMP SHPAGE /PATTERN ON SNS I 5 /KEEP DISPLAYING JMP .-2 /UNTIL SW 5 OFF / /CALIBRATION SECTION.USES NEXT "LINES"OF /"CALBLK" SYSTEM FILE READ IN DURING /ADJUST FOR TEXT AND SUPERIMPOSES SMALL /SQUARES ONE-BY-ONE FOR VOLTAGE SAMPLING /THIS CALIBRATION IS 8 POINTS /LINE, /WITH A SEPARATE X-CALIB. FOR EACH LINE. /Y-CALIB. AVERAGED WRT TO 8 X-VALUES. /USES JOB PARAMETERS, AND AFTER CHECKING /THEM, SKIPS TO "VERIFY" IF SW 4 DOWN. / CALIBR, LDA LINES ADD M20 APO I /00? AZE I JMP ERROR MUL I -20 STC DY ADD M1 ADD LINES MUL SPACIN ADD TOPLIN ADA I -37 APO I /LAST LINE<32? JMP ERROR LDA XCRIT /XCRIT>0? APO JMP ERROR AZE I JMP ERROR C1000, LDA ENDPAG STC PAGEPT JMP SETPAG /SETUP CALBLK LDA I -33 STC PERDEF /NORMAL PERIPH. ADD C4000 STC BLKDEF /WITH BLANKS SNS 4 JMP VERIFY /SET "TYPE" FOR DISPLAY THRU TTY OUTPUT ADD JMPCAL /=JMP SHOCAL STC HOLDIS /SAMPLE X&Y AT "LINES" X 8 PTS; STORE /(TABLES) X-VALUES VIA 17 AT 7200-7377 & /YMAX/YMIN PAIRS FOR EACH LINE 7140-7177 /S FIXATES EACH SQUARE SUPERIMPOSED ON /CALIB. TEXT (ALL PERIPH.) AND WHILE /FIXATING HITS PANEL KEY, THEN MOVES ON. ADD MLINES STC 14 SET I 16 3137 /AD-1 Y PAIRS SET I 17 3177 /AD-1 X-STORE TABLES ADD YTOP CLINE, STC YCAL /V.C. CURRENT LN ADD M2 STC XFIX /H.C. CALIB PT. STC YMAX ADD C1000 STC YMIN /CR,LF IF CALIB. TYPEOUT (SW 0 ON) SNS 0 JMP .+5 SET I 12 LINLAB-4000 PROG1 JMP MESSAG SET I 15 M10, -10 CSPOT, IOB 6314 /CLEAR PANEL JMP SHPAGE JMPCAL, JMP SHOCAL /AND CALIB. SQ. IOB 6311 /DISPLAY UNTIL JMP .-4 /PANEL HIT YSAMP /GET Y-VOLTAGE ADD C1000 SCR 2 /INTO (0,377) STC 10 /TEMP Y XSAMP /GET X-VOLTAGE ADD C1000 SCR 2 STC 11 /TEMP X /TYPE X/Y FOR EACH POINT IF SW 0 ON /DISPLAY REMAINS ON THROUGH TYPE-OUT SNS 0 JMP NOTYPE ADD 11 PROG1 JMP DECPUT /TYPE X SET I 12 CALLAB-4000 /"/" PROG1 JMP MESSAG ADD 10 PROG1 JMP DECPUT /TYPE Y PROG1 JMP MESSAG /" " NOTYPE, ADD 11 TABLES STA I 17 /STORE X-VAL LDA I YMIN, 0 COM ADD 10 APO /MIN? JMP NEWMIN LDA I YMAX, 0 COM ADD 10 APO /MAX? JMP NXPT LDA 10 STC YMAX JMP NXPT NEWMIN, LDA 10 STC YMIN JMP YMAX-1 /CHECK MAX ALSO NXPT, LDA I 110 /CAL PT SPACING ADM XFIX /H.C. NEXT PT. XSK I 15 /ANOTHER PT/LINE JMP CSPOT /END-OF-LINE: STORE (YMIN,YMAX) PAIR LDA YMAX STA I 16 LDA YMIN STA I 16 LDA DY ADD YCAL XSK I 14 /ANOTHER LINE? JMP CLINE /READY FOR INTERPOLATION: EXECUTED LIF 3 LIF 3 EXIT1, JMP INTERP / 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. / INTERP, LDF 0 SET 11 MLINES+2000 /INDEX X-TABLES SET I 15 1177 /AD-1 X-VALUES SET I 16 1200 /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 APO JMP CALERR /MUST >0 AZE I JMP CALERR STC DV SET I 10 /INTERP. 8 PTS -10 /PER INTERVAL SET I 2 /AT 1/16,3/16, 1 /...,15/16 *DV ADD 2 INTX2, MUL I /FORM NEXT PT. 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 INTERY /DONE:DO Y-TABLE 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 / /SECTION CREATES Y-LOOKUP TABLE. FOR /EACH V, INTERP. LINE NO. IN (0,LINES-1) /AT 7400+V IN TABLES. ASSUMES HIGH VOLT. /FOR TOP LINES (LOW LN NO.S) / INTERY, SET I 15 1140 /AD-1 YMIN(0) SET I 16 1141 /AD-1 YMAX(1) LDA I 1400 /Y-TAB IN TABLES STC LOOKUP /AD Y-TABLE STC 6 /START LN=0 SET I 17 1777 /TOP Y TABLE LDF 0 SET 14 MLINES+2000 /FILL VOLT. ADDRS. WITH C(6)=LN NO.=L /DOWN TO (YMAX(L)-YMIN(L+1))/2+YMIN(L+1) /FOR L=0,LINES-1 / INTY1, XSK I 14 /LAST INTERVAL? JMP .+4 CLR JMP TABFIL /FILL DOWN TO 0 JMP CALERR+3 /CALIBR DONE!!! LDA I 16 /FORM VOLT DIFF= COM /YMIN(L)- ADA I 15 /YMAX(L+1) APO JMP CALERR /MUST >0 SCR 1 /VOLT.DIF./2 AZE I JMP CALERR ADA 16 /1/2-WAY PT. JMP TABFIL XSK I 15 XSK I 16 /PTRS NEXT PAIR XSK I 6 /NEXT LINE NO. JMP INTY1 / CALERR, PROG0 DJR /SAVE ERROR PC JMP ERROR /ERROR ROUTINE PROG0 JMP VERIFY /CALIBR 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 INTERPOLATION SECTION / SEGMNT 0 *EXIT1+1 / /SUBR DISPLAYS FIX. SQ. AT (XFIX,YCAL) / SHOCAL, SET 1 XFIX LDA I YCAL, 0 DSC I 7777 DSC I 7777 JMP / /"VERIFY" SECTION: PUTS WINDOW /WHEREVER SUBJECT FIXATES;USES CALIBR. /TEXT AND INHIBITS DATA STORAGE/OUTPUT. /PANEL KEY PROCEEDS TO "READ" TASK. SW /3 DOWN SKIPS TO "READ" / VERIFY, SNS 3 JMP READ /SKIP VERIFY LDA I JMP STC STORE+1 /INHIBIT WRITING LDA I -5 /USE 5-CHAR STC MWIDE /WINDOW CENTERED ADD M2 /ON FIXATION PT. STC POSN ADD C4 /FIXING NON-0 JMP INIT /START DISPLAY / /THIS SECTION EXECUTES "READ" TASK. /CONTROL REACHES HERE ONLY FROM PANEL /INTERRUPT DURING "VERIFY" TASK. / READ, LDA I STA I 13 /DISINHIBIT STC STORE+1 /DATA WRITING STC 11 SET I 10 /INITIALIZE -144 /TIMERS 10,11 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 2014 ADD C17 STA I 1 /14: 2020 UP ADD C20 STA I 1 /15: 2040 UP ADD C20 STA I 1 /16: 2060 UP LDA TEXBLK JMP NEWTEX /FETCH TEXT /POSITION DATA FILE (UNIT 1) AT DATBLK /WITH NO PAUSE ADD DATBLK STC .+4 ADD C10 AXO /NO PAUSE CHK U 0 /WRITE PARAMETER HEADER BLOCK OUT AT /BEGINNING OF DATA FILE 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 / /CONTROL REACHES HERE WHEN TEXT-READING /COMPLETE. IF QBLK>=0, COMPREHENSION /TEST IS TO BE GIVEN. SIGNALLED BY AN /NPAGE=0 AFTER THE TWO 7777"S. IF NO /TEST, WRITE A THIRD 7777 AND QUIT. /BEFORE DOING EITHER, TYPE OUT TOTAL /READING TIME IN SECS.& TOTAL LINES READ / QUESTN, LDA QBLK />0:POSN TAPE APO I /W/NO PAUSE AT JMP TAPPOS /QUEST. FILE SET I 12 LABEL2-4000 PROG1 JMP MESSAG /"TIME" ADD 11 PROG1 JMP DECPUT PROG1 JMP MESSAG /" SECS FOR " /NO LINES READ=LINES*NPAGE IF TEXT ENDED /WITH FULL PAGE(I.E.,MLINES=-0),ELSE= /LINES*(NPAGE-1)-MLINES ADD MLINES AZE ADD LINES COM STC D ADD NPAGE MUL LINES ADD D PROG1 JMP DECPUT PROG1 JMP MESSAG /"LINES" /NOW DO QUESTIONS STC 10 /COUNT CORRECTS STC 11 /COUNT QUESTIONS COM /DLINES=-0 FOR STC DLINES /"SETPAG" Q-MODE ADD QBLK APO JMP FINISH /NO QUESTIONS JMP NEWTEX /FETCH Q-FILE LDA I -40 STC DY /DOUBLE SPACING STC PERDEF /ALL CHARS SHOWN ADD C303 STC YTOP JMP STORE /NPAGE=0 /QUESTION-FILE FORMAT: ANY NUMBER OF /TEXT LINES FOR DISPLAYING EACH QUESTION /AND ALTERNATIVE ANSWERS. FOLLOWING CR /AFTER LAST ALTERNATIVE SHOULD BE THE /ANSWER RATHER THAN "/": LEFTMOST KEY /CORRESPONDS TO "A",NEXT TO "B",ETC. /AFTER CORRECT ANSWER (1 CHAR), HAVE /ANOTHER CR. THEN TEXT FOR NEXT QUESTION /ETC, WITH 0 AS USUAL = END FILE. / NXQST, IOB 6314 /CLEAR PANEL JMP SHPAGE /DISPLAY IOB 6311 /RESP YET? JMP .-3 CLR IOB 6312 /READ RESP /HAVE RESP IN AC: COUNT ROTATIONS OF AC /UNTIL RESP BIT IN BIT 2 (LEFTMOST RESP) SET I 1 1 /COUNTS ROTS. SAE I 1000 C456, SKP /NOT YET:ROTATE JMP .+4 XSK I 1 ROL 1 JMP .-6 /1 NOW HOLDS ASCII RESP CODE. 7 ENDS UP /AT LAST CR BEFORE TAB&ANSWER (SHPAGE) /COMPARE THEM; IF CORRECT, INCR. 10. /SAVE CORECT&OBTAINED RESPS IN LEFT HALF /AND RIGHT HALF OF NEXT DATA WORD. LDH I 7 /SKIP TAB=47 LDH I 7 /LOAD ANSWER SHD 4001 /RIGHT HALF 1 XSK I 10 /INC.NO.CORRECT XSK I 11 /" " QUESTIONS ROL 6 /CORRECT TO LH ADD 1 /OBTAINED LH JMP STORE LDA ENDPAG STC PAGEPT JMP SETPAG /ENCODE NEXT Q JMP NXQST /DO NEXT ONE /NOW WRITE FINAL END-MARKER (7777) - /WILL BE THIRD IF NO QUESTIONS FINISH, LDA I 7777 JMP STORE /BEFORE QUITTING, MUST WRITE OUT LAST /DATA MBLK NOT YET BUFFERED OUT. ONLY /IF LAST END-MARKER TRIGGERED BUFFER, /WON"T NEED TO DO THIS. 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 /FINALLY TYPE OUT NO QUESTIONS/NO.CORREC /LAST MESSAGE INCLUDED "COMPREHENSION" CLR ADD 10 PROG1 JMP DECPUT /NO.CORRECT PROG1 JMP MESSAG /" OF" ADD 11 PROG1 JMP DECPUT /NO.QUESTIONS ENDJOB, JMP MONIT /DONE!! / /SECTION HANDLES DIVERSION FROM TYPE /(PROG1): DISPLAYS PAGE & CALIB. PT. IF /HOLDIS=JMP SHOCAL (BUT NEITHER IF =SKP) /WHENEVER TTY BUSY. / HOLDIS, HLT /=SKP/JMP SHOCAL JMP SHPAGE PROG1 JMP TYPE+3 /RETURN TO TSF / /FOLLOWING SUBROUTINES AND OUTPUT LABELS /FIT INTO PROG1 (LIF 1) BELOW THE 2-BLOK /DATA OUTPUT BUFFER.20-77:VECTOR STORAGE / SEGMNT 1 *100 /SECTION CALLED BY "RUNPAG" EACH TIME /PAGE OF TEXT RUN: SETS WINDOW SIZE,POSN /AND PERIPHERY-COND.FROM THEIR VECTORS /AT 20,40,60 VIA (15,16,17).=5000,RESET /TO START OF VECTOR. / PAGPAR, LDF LDA I 15 SAE I 5000 JMP .+4 SET I 15 17 JMP .-6 COM STA MWIDE+2000 LDA I 16 SAE I 5000 JMP .+4 SET I 16 37 JMP .-6 STA POSN+2000 LDA I 17 SAE I 5000 JMP .+4 SET I 17 57 JMP .-6 BCL I 3777 STA BLKDEF+2000 LDA 17 STA 2001 APO I COM STA PERDEF+2000 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 / INCHAR, LDA 0 STC INCRET IOB 6031 /KSF JMP .-2 IOB 6036 /KRB STA I ASCII, 0 SAE I C215, 215 JMP TYPE /ECHO NON-CR LDA ASCII INCRET, HLT /RJ / /CONTROL ARRIVES HERE WHEN TYPED ENTRY /FOR PARAMETER IS ILLEGAL. / 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;HENCE /MUST BE READ AND RETURNED THERE. / 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 GENERATES CR&LF:CALLED ONLY FROM /PROG1, WHERE IT RESIDES / CRLF, LDA 0 STC CARRET /R.J. ADD C215 JMP TYPE /CR LDA I 212 JMP TYPE /LF CARRET, HLT /RETURN / /SUBR TYPES OUT 8-BIT ASCII AC /CALLED FROM & RESIDES IN PROG1. HAS /SPECIAL "DISPLAY" MODE (WHEN HOLDIS= /JMP SHPAGE) IN WHICH CURRENT PAGE & /CALIB. PT. DISPLAYED WHILE TSF-ING. / TYPE, SET 13 0 /RJ STC 14 /SAVE ASCII IOB 6041 /TSF JMP .+7 /BUSY:WAIT LDA 14 /RECOVER & IOB 6046 /TYPE CHAR CLR JMP 13 /RJ PROG0 JMP HOLDIS /DISPLAY & WAIT? / /TEXT (PACKED ASCII) PARAMETER LABELS / 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 *WINDOW SIZES* 4375 0043 TEXT *WINDOW POSNS* 4375 0043 TEXT *PERIPHERAL CONDS* 4375 0000 LABEL2, 4343 TEXT *TIME=* TEXT * SECS. FOR * TEXT * LINES* 4303 /CR,*C* TEXT *OMPREHENSION=* LABEL3, TEXT * OF * LINLAB, 4300 /CR CALLAB, 5700 /"/" 4000 /" " /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-CONTRL /WORDS FOR DISPLAY (5600 UP) / /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-CONTRL /WORDS FOR DISPLAY (5600 UP) / 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 /< 0042 1212 /= 1212 4200 /> 1024 4020 /? 2055 / /LINE ADDRESS POINTERS (1/2 WORD).UP TO /16 OF THEM + 1 EXTRA FOR WRAP-UP / LINADS, 0 *.+20 /LINE CONTROL WORDS: 16 MAX LINCON, 0