*20 LMODE /CORE MAP: MAINLINE PROGRAM IN LIF 0. /TELETYPE I/O SUBROUTINES IN LIF 1 UP TO /2777. 2-BLOCK DATA BUFFER IN LDF 1 3000 /TO 3777. 3-BLOCK TEXT BUFFER IN LDF 2 /4000-5377. DISPLAY PATTERN WORDS IN LDF /2 5400-5577. DISPLAY CONTROL CONSTANTS /IN LDF 2 5600-5777. EYE-POSITION LOOKUP /TABLES IN LDF 3: Y TABLES 6000-6377; /X-TABLES 6400-6777. CALIBRATION WORK /AREA ABOVE TABLES IN LDF 3. DATA=LDF 1 DTEXT=LDF 2 TABLES=LDF 3 PROG0=LIF 0 PROG1=LIF 1 YSAMP=LSW XSAMP=RSW /FOR DEBUGGING, XSAMP=RSW/SAM 4, YSAMP= /LSW/SAM 0; FOR EXPTS, XSAMP=SAM 17, /YSAMP=SAM 16 / /JOB PARAMETERS STORED HERE: ARE WRITTEN /OUT AS HEADER ON DATA FILES SEGMNT 0 *20 PGCODE, 1111 /PROGRAM CODE SUBSES, 0 /SUBJ.-SESS. ID TEXTAP, 0 /SOURCE TAPE ID TEXBLK, 0 /1ST TEXT TBLK DATBLK, 0 /1ST DATA TBLK TOPLIN, 0 /TOP LINE NO. LINES, 0 /DISPLAY LINES SPACIN, 0 /LINE SPACING WIDTH, 0 /WINDOW WIDTH POSN, 0 /REL. WINDOW POS QBLK, -1 /QUESTION BLOCK NPAGE, 0 /DISPLAY PAGE NO / PMODE MDT, -144 /10 MSEC/SAMPLE C3000, 3000 LMODE / /BEGINNING OF EACH JOB, PROGRAM ACCEPTS /INPUTS FOR ABOVE PARAMETERS, EXCEPT FOR /"PGCODE" AND "NPAGE", WHICH ARE AUTOM- /ATICALLY SET. / /"SUBSES": ID FOR SUBJECT AND SESSION /"TEXTAP": TAPE ID FOR SOURCE AND QUEST. /"TEXBLK": STARTING TBLK FOR TEXT SOURCE /"DATBLK": " " " DATA OUTPUT (UNIT 1) /"TOPLIN": LINE NO. FOR UPPER DISPLAY / LINE: 0=TOP,...,37=BOTTOM /"LINES" : NO. LINES DISPLAYED PER PAGE /"SPACIN": 1=SINGLE SPACING,2=DOUBLE,ETC /"WIDTH" : WINDOW WIDTH IN CHARS /"POSN" : POSITION OF LEFT WINDOW EDGE / W/R/T FIXATION PT: -N MEANS / N TO LEFT,+N N TO RIGHT /"QBLK" : QUESTION TBLK:<0=NO QUESTIONS / /THIS SECTION HANDLES INTERRUPTS. /TWO POSSIBLE INTERRUPTS: ON RESP.PANEL, /SUBJECT SIGNALS END OF PAGE/END VERIFY. /CLOCK OVERFLOW INTERRUPT SIGNALS TIME /TO RESAMPLE X AND Y SIGNALS AND PERFORM /THE NECESSARY UPDATING. *40 0 /INTERRUPT PC STC ACSAVE /SAVE AC /INTERRUPT LINK&MQ AREN"T SAVED! /HOWEVER, SUBROUTINE PC=0000 MUST BE /SAVED AND RESTORED. EACH CLOCK INTER- /RUPT IS COUNTED BY 10&11. ADD STC SAVE0 IOB 6135 /CLSA APO I /<0:CLOCK OFLOW JMP PANEL /CHECK PANEL INT XSK I 10 /ANOTHER SECOND? JMP .+5 XSK I 11 /INCR SECONDS NOP /MAX=1023 SECS. SET I 10 -144 /100 SAMPLES/SEC /SAMPLE Y AND X SIGNALS (A-D 16 & 17) /COMPUTE TABLE LOOKUP FOR EACH OF THEM TABLES /LDF FOR LOOKUP YSAMP /GET Y-VOLTAGE ADD C1000 SCR 2 /INTO (0,377) ADD C2000 /INTO VOLT-ADDR. STC 16 /Y-POINTER XSAMP /GET X-VOLTAGE ADD C1000 SCR 2 ADD C2400 /X VOLT-ADDR. STC 17 /X-POINTER /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 ADA 17 APO I COM /GET -ABS.VAL. ADA I /OF X-DIFF AND XCRIT, 4 /COMPARE WITH STC D /X-MOVE CRITERIA /"FIXING"=0 IF SUBJECT LAST IN FIXATION /MODE,NOT=0 IF IN MOVEMENT MODE SAE I FIXING, 0 JMP MOVING ADD D />0:NO X CHANGE APO JMP SACCAD /NO LONGER FIXIN /X POSITION HAS NOT CHANGED: CHECK Y /POSITION FOR PERSISTING FIXATION LDA I YFIX, 0 /Y FIX. POS. SAE 16 JMP SACCAD /Y HAS CHANGED! /FIXATION PERSISTS: INCREMENT FIXATION /TIMER (REGISTER 14) ONLY UP TO 777 LDA 14 SAE I 777 XSK I 14 /NOW RETURN TO DISPLAY IN PROGRESS. RESTOR, LDA C40, 40 BSE I 6000 /FORM RETURN JMP STC RETURN /JUMP INTSR. SET I 0 SAVE0, 0 /RESTORE SUBR PC DJR /HOLD PC ON EXIT LDA I ACSAVE, 0 /RESTORE AC IOB 6244 /RMF IOB C6001, 6001 /ION RETURN, HLT /RETURN JUMP / /CONTROL ARRIVES HERE WHENEVER CHANGE IN /X OR Y DEFINES END OF FIXATION. /ZERO SACCADE-TIMER (REGISTER 15), SET /"FIXING" NON-ZERO (MOVEMENT MODE), /SAVE (XFIX,YFIX) AS DATA, AND THEN /REDEFINE XFIX AND YFIX AND RETURN. SACCAD, SET I 15 0 /INIT SACCADE TM ADD C215 /WILL BE >0 STC FIXING /NON-ZERO=MOVING ADD XFIX ROL 6 ADD YFIX /(XFIX,YFIX) JMP STORE /SUBR STORES WD TABLES /LDF FOR LOOKUP /INCREMENT SACCADE TIMER TO MAX OF 7 MORMOV, LDA 15 SAE I 7 XSK I 15 LDA 16 STC YFIX /UPDATE Y LDA 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 /STILL MOVING LDA YFIX /X STOPPED:CHECK SAE 16 /Y POSN. JMP MORMOV /Y CHANGED /END OF MOVEMENT: NEW FIXATION BEGINS. /STORE DURATIONS OF LAST FIXATION AND OF /SUCCEEDING SACCADE AS NEXT DATA WORD: /BITS 0-2 SACCADE+BITS 3-11 FIXATION. /THEN SETUP NEW DISPLAY CONTROLS. LDA 15 /SACCADE DURATIO ROR 3 /INTO BITS 0-2 ADD 14 /FIXATION DURAT. JMP STORE /SAVE WORD TABLES /LOOKUP LDF CLR STC FIXING /FIXATION MODE SET I 14 /INIT FIX TIMER 1 LDA 17 STC XFIX /NEW XFIX /WHEN NEW FIXATION POINT ESTABLISHED, /CURRENT DISPLAY NOT COMPLETED, BUT /RATHER RESTARTED AT "YFIX" LINE. /NOW RESET LINE CONTROLS IN TEXT LDF. 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 MLW, 0 /NO. CHARS TO COM /LEFT OF WINDOW APO I /TOO FAR LEFT? JMP NOROOM /TOO FAR LEFT STA I 4 /=CONTROL WORD LDA I MWIDE, -10 /-WINDOW WIDTH STC MWIDTH JMP DISPLA /EXIT TO DISPLAY NOROOM, ADD MWIDE /DECREASE WINDOW STC MWIDTH COM STA I 4 /CONTROL WORD=-0 JMP DISPLA / /CONTROL REACHES HERE WHENEVER INTERRUPT /OCCURS FROM RESPONSE PANEL. /THIS SIGNALS END OF PAGE, AND TWO END- /MARKERS (7777) ARE STORED IN DATA FILE. /THEN THE NEXT PAGE (IF ANY) IS RUN. /IF DURING "VERIFY", THIS SIGNALS /PROCEED TO "READ" TASK. / PANEL, IOB 6311 /PANEL FLAG? JMP RESTOR /NO:SPURIOUS IOB 6314 /CLEAR FLAG LDA TBLK SAE /IN "VERIFY" IF CALBLK /TBLK=CALBLK SKP JMP READ LDA I 7777 JMP STORE LDA I 7777 JMP STORE /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 /6>0:QUEST.-MODE JMP ERROR AZE I /MUST HAVE>0 LNS JMP ERROR COM STC MLINES /MLINES=-6 JMP NXTCH JMP SETPAG+4 /PUSH-DOWN BUFFR 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,IN WHICH /CASE QUESTIONS DONE.) / 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, DJR /PROTECT RJ LDA 7 SAE I 7377 /7377=END BUFFER JMP NXTRET+1 /NOT END JMP .+1 /DISABLE DJR 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, HLT /RETURN XSK I 0 /RETURN CALL+2 LDH I 7 /WITH CHAR IN AC JMP / /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 /DEFINES TBLK ADD STC TXIRET /RETURN JUMP STD JMP .-1 /WAIT IF BUSY AXO /NO EXT.TAPE OPS DTEXT /TEXT LDF ADD C4000 JMP TBLKIN /1ST BLOCK IN LDA I 5001 JMP TBLKIN /2ND BLOCK LDA I 6002 JMP TBLKIN /3RD BLOCK TXIRET, HLT /RETURN / /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 /RETURN / /SUBR POSITIONS TAPE UNIT 0 AT TBLK=AC /WITH "NO PAUSE" OPTION / TAPPOS, STC TAPRET-1 /2ND LTAPE INSTR ADD STC TAPRET /RJ STD JMP .-1 /WAIT IF BUSY LDA I 10 AXO /NO PAUSE CHK 0 TAPRET, HLT /RJ,NO PAUSE / /ERROR ROUTINE. CONTROL ARRIVES HERE /WHEN FATAL OPERATIONAL ERROR OCCURS. /TYPES OUT "ERROR" AND HALTS WITH /JMP-TO-PC INSTR. IN AC.CONTINUES:MONIT / ERROR, LDA 0 STC D SET I 1 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 /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. / SET I 13 PGCODE /PGCODE FIXED SET I 1 /AD-1/2 PARAM LABEL1-4000 /LABELS (HF-WDS) SET I 6 -12 PGET, XSK I 13 PROG1 JMP MESSAG /TYPE PARAM LABL TYVAL, LDA 13 PROG1 JMP DECPUT /"=XXX"SG DECIM. PROG1 JMP GETDEC /I3 DEC INPUT STC Y /SAVE INPUT DATA /C(3) IN LIF 1 LDA /=-4 MEANS 2003 /INITIAL CR:KEEP ADD C4 /CURRENT VALUE AZE I JMP .+4 LDA Y STA 13 XSK I 6 /ANOTHER PARAM? JMP PGET /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 AND /WINDOW CONTROL AND DATA ACQUISITION. / RUNPAG, LDA I 1 ADM NPAGE /INCR NPAGE&PUT JMP STORE /INTO DATA FILE LDA MLINES COM JMP STORE /SAVE LINES/PAGE /INITIALIZE EYE-POSITION SAMPLERS SO /THAT PROGRAM STARTS IN "MOVING" MODE /WITH LAST FIXATION AT (0,0). WILL GIVE /DUMMY (15,14) TIMING WORD AT TOP OF /DATA. ALLOWS IST WINDOW TO BE SET /IMMEDIATELY. INIT, STC FIXING />0:MOVING FROM ADD C361 /ASSUMED FIXATON STC XFIX /(360,0):CANT BE STC YFIX /THERE:INITIAL STC 14 /FIXATION SETUP STC 15 /0 DURATION /TURN ON CLOCK INTERRUPT LDA I 100 PDP PMODE CLEN /CLOCK ENABLED TAD C3000 /3000+100=3100 CLLR /10 KHZ CLOCK CLA TAD MDT /SAMPLING RATE CLAB /TO BUFFER PRSET CLSA /CLEAR REQUESTS 6314 /CLEAR PANEL LINC LMODE DISPLA, IOB 6001 /ION JMP SHPAGE /DISPLAY ON 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 /3-LINE ADJ PATT ADD CALBLK /READ POS"NED JMP NEWTEX /ADJ/CAL/VER TXT ADD TEXBLK /POSN TAPE AT JMP TAPPOS /TEXT, NO PAUSE SNS 5 JMP CALIBR /OFF:TO CALIBRAT 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 LINES BY 8 POINTS, /WITH X AVERAGED W/R/T Y ("LINES") AND Y /W/R/T X (8 OF THEM). /USES JOB PARAMETERS, AND AFTER CHECKING /THEM, SKIPS TO "VERIFY" IF SW 4 DOWN. / CALIBR, LDA I -33 STC PERDEF /NORMAL PERIPHER ADD LINES ADD M20 APO I /NO MORE THAN 16 JMP ERROR /LINES/PAGE ADA I 20 /MUST BE>0 APO JMP ERROR STC DLINES ADD SPACIN APO JMP ERROR /SPACING>0? AZE I JMP ERROR MUL I -20 STC DY ADD M1 ADD LINES MUL SPACIN ADD TOPLIN ADA I -37 APO I /LAST LINE NO. JMP ERROR /MUST <32 LDA ENDPAG STC PAGEPT /SETUP NEXT JMP SETPAG /LINES OF CALBLK SNS 4 JMP VERIFY /ACQUIRE X & Y READINGS AT 8 POINTS FOR /EACH OF "LINES". TEMPORARY STORAGE IN /TABLES LDF FOR RUNNING SUM OF Y READING /W/R/T X (16:3000 UP) AND X READINGS /W/R/T Y (17,3400 UP). /S FIXATES EACH SQUARE SUPERIMPOSED ON /CALIB. TEXT (ALL PERIPH.) AND WHILE /FIXATING HITS PANEL KEY, THEN MOVES ON. /SW 0 ON: GET TYPEOUT OF TRANSFORMED /VOLTAGE AVGS: 1ST LINE=X"S, 2ND=Y"S. ADD MLINES STC 14 SET I 15 -10 /ZERO 8 X-SUMS SET I 17 3377 TABLES /LDF STA I 17 XSK I 15 JMP .-2 SET I 16 3000 ADD YTOP CLINE, STC D /V.C. CURRENT LN ADD M2 /INIT HC/LINE STC XFIX /H.C. CALIB PT. STA 16 /ZERO Y SUM SET I 15 -10 /8 PTS./LINE SET I 17 /AD-1 X-SUMS 3377 CSPOT, IOB 6314 /CLEAR PANEL JMP SHPAGE /DISPLAY PAGE SET 1 XFIX C1000, LDA D DSC I /SUPERIMPOSE 7777 /SQUARE AT DSC I /(XFIX,YFIX) 7777 IOB 6311 /DISPLAY UNTIL JMP CSPOT+2 /PANEL HIT TABLES YSAMP /GET Y-VOLTAGE ADD C1000 SCR 2 /INTO (0,377) ADM 16 /ADD TO Y-SUM XSAMP /GET X-VOLTAGE ADD C1000 SCR 2 ADM I 17 /ADD TO X-SUM LDA I CDX, 110 ADM XFIX /H.C. NEXT PT. XSK I 15 /ANOTHER PT/LINE JMP CSPOT /END-OF-LINE: AVERAGE Y-VALUE OVER 8 PTS LDA 16 SCR 3 STA 16 XSK I 16 /NEXT LINE Y-SUM LDA DY ADD D XSK I 14 /ANOTHER LINE? JMP CLINE /SAMPLING COMPLETE: AVERAGE X-VALUES /BY DIVIDING EACH BY "LINES" SNS 0 JMP .+5 SET I 1 XLABEL-4000 /CR,"X-VOLTS:" PROG1 /IF SW 0 UP JMP MESSAG SET I 15 M10, -10 SET I 17 3377 /DIVIDE BY "LINES"(12 BITS - IGNORE SIGN XAVG, CLR /CLEAR LINK STC 3 /QUOTIENT COUNTR SET I 2 -2 /INDEX PSEUDO"-" LDA I 17 APO I /PSEUDO SIGN? JMP .+3 /SIGN BIT (AC0) SET: ROTATE IT OUT WITH /ROR I 1 (LINK CLEAR) AND INDEX 2 TO -1 /LATER WILL HAVE TO DOUBLE QUOTIENT XSK I 2 /YES:SET IT AND ROR I 1 /ROTATE IT OUT ADD MLINES /BEGIN SUBTRACTN APO JMP .+3 XSK I 3 /INCR.QUOTIENT JMP .-4 AZE I /INCR. IF -0 XSK I 3 LDA 3 /GET QUOTIENT XSK I 2 /DOUBLE " IF SKP /PSEUDO-SIGN WAS ROL 1 /ROTATED OUT /PROPER QUOTIENT NOW IN AC STA 17 SNS 0 JMP .+3 PROG1 JMP DECPUT /TYPE IF SW 0 UP LDA I C2400, 2400 ADM 17 /FORM VOLT-ADR. XSK I 15 /ANOTHER? JMP XAVG /NOW SET-UP (0,377) MATRIX FOR X-LOOKUP /AS FUNCTION OF HORIZ. VOLTAGE. FOR /EACH VOLTAGE V, PUT INTERPOLATED X POSN /IN (0,70) AT 2400+V IN TABLES LDF. SET I 17 2377 SET I 15 -400 CLR STC XFIX /WILL HOLD X-POS ADD M1 STA I 17 /INIT ALL=-1 XSK I 15 JMP .-2 /NOW FILL IN OBTAINED CALIB PTS. SET I 17 3377 SET I 15 -10 FILLX, LDA I 17 /NEXT X VOLT-ADR STC 1 ADD XFIX STA 1 /STORE X-POSN ADA I 10 STC XFIX /NEXT X-POSN XSK I 15 /ANOTHER CAL PT? JMP FILLX /NOW FILL IN EACH OF THE 7 INTERVALS /BETWEEN SUCCESSIVE CALIB. PTS. WITH 8 /LINEARLY INTERPOLATED POINTS. SET I 17 3377 SET I 10 3400 SET I 11 -7 SET I 6 0 /HOLDS X-POSN INTERX, LDA I 10 /FORM DIFF TWEEN COM /NEXT PAIR PTS ADA I 17 /MUST BE>0!! APO JMP ERROR AZE I JMP ERROR /MUST BE>0! STC D ADD M10 STC 12 /8 INTERIOR PTS /1ST PT. 1/16 THRU INTERVAL, 2ND 3/16, /...,8TH 15/16 THRU INTERVAL. ADD ONE STA XFIX /NUM OF ABOVE/16 INTX1, MUL D SCR 4 /DIV 16 COM ADA 17 /INTERP. VOLT AD STC 1 XSK I 6 /NEXT INT. X-POS ADD 6 STA 1 LDA I 2 ADM XFIX /NEXT NUMERATOR XSK I 12 /ANOTHER INT.PT? JMP INTX1 /NEXT INT. PT. XSK I 11 /ANOTHER INTRVL? JMP INTERX /NEXT INTERVAL /NOW GO THRU AND FILL IN REMAINING /VOLTAGE ADDRESSES: ENTRIES NOT YET SET /=-1; FILL THEM WITH NEAREST (I.E., /LEFTMOST) DEFINED X-POSN. SINCE TOP OF /VOLTAGE ARRAY=2777 REPRESENTS MAX VOLTS /, WHICH IS LEFTMOST X-P0SN=0, MUST WORK /DOWN THRU ARRAY SET I 17 2777 CLR STC XFIX /RUNNING X-POSN INTX2, LDA 17 APO I /ALREADY FILLED? JMP .+4 /YES: SKIP LDA XFIX STA 17 /FILL WITH CUR X STC XFIX /RESET CUR X ADD M1 ADM 17 /DECREMENT V-ADR SAE I 2377 /LAST VOLT-AD? JMP INTX2 /DONE FILLING IN X-LOOKUP TABLE. /NOW FILL IN Y-LOOKUP TABLE, CREATING /MATRIX IN 2000-2377 IN TABLES LDF: /Y-VOLTAGE V SHOULD CORRESPOND TO LINE /NO. L IN (0,LINES-1) AT 2000+V. / /ASSUMES LOW VOLTAGE - LOW LINE NO. SET I 16 2777 /AD-1 Y-AVGS SET I 10 3000 SET I 6 /HOLDS LN NO. 0 SET I 17 3777 /AD-1 2000 SET 15 MLINES SNS 0 JMP .+5 SET I 1 YLABEL-4000 PROG1 /"Y-VOLTS:" JMP MESSAG /IF SW 0 UP /FILL VOLTAGE ADDRESSES FROM 1/2 LAST /INTERVAL TO 1/2 NEXT INTERVAL WITH /CURRENT LINE NO. INTERY, LDA I 16 SNS 0 JMP .+3 PROG1 JMP DECPUT /TYPE IF SW 0 UP XSK I 15 /LAST INTERVAL? JMP .+4 LDA I 2377 JMP FILLY-1 /FILL TO END LDA 16 COM ADA I 10 /VOLT. DIFF. APO JMP ERROR /MUST BE>0 SCR 1 /VOLT.DIF./2 AZE I JMP ERROR ADD C2000 /=ADR. TOP VOLT. ADA 16 STC VSTOP /FOR CURRENT LN FILLY, LDA 6 /CURRENT LN NO. STA I 17 /INTO NEXT V-AD LDA 17 SAE I VSTOP, 0 /LIMIT FOR CUR L JMP FILLY /KEEP GOING XSK I 6 /NEXT LINE NO. XSK 15 /DONE LAST ONE? JMP INTERY /DO NEXT ONE. / /END CALIBRATION SECTION. GO TO "VERIFY" / /"VERIFY" SECTION: PUTS WINDOW OF TEXT /WHEREVER SUBJECT FIXATES;USES CALIBR. /TEXT AND INHIBITS DATA STORAGE/OUTPUT. /PANEL KEY PROCEEDS TO "READ" TASK. SW /3 DOWN AT START SKIPS DIRECTLY 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 MLW 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 ADD POSN STC MLW ADD WIDTH COM STC MWIDE STC NPAGE /INIT NPAGE=0 ADD TEXBLK JMP NEWTEX /FETCH TEXT /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 -13 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 1 LABEL2-4000 PROG1 JMP MESSAG /"TIME" ADD 11 PROG1 JMP DECPUT /N SECS. 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 /N LINES READ 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 -20 STC DY /SINGLE SPACING STC PERDEF /ALL CHARS SHOWN ADD C361 STC YTOP /TOP DISPLAY STC YFIX /NO WRAP-UP 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 SKP /NOY 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 /WAIT FOR TAPE JMP .-1 CLR JMP WRITE /WRITE IT WDONE, STD JMP .-1 /WAIT FINAL BLOC /FINALLY TYPE OUT NO QUESTIONS/NO.CORREC SET I 1 LABEL3-4000 /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!! / /FOLLOWING SUBROUTINES AND OUTPUT LABELS /FIT INTO PROG1 (LIF 1) BELOW THE 2-BLOK /DATA OUTPUT BUFFER / SEGMNT 1 *20 /SUBR TYPES AC AS SIGNED DECIMAL INTEGER /IN FORMAT "="XXX ". ENTRY HERE BUT /JUMPS TO SEGMENT 1 BELOW TEXT BUFFER. / DECPUT, STC 4 /SAVE ARG ADD STC DECRET /RET AD LDA I 275 JMP TYPE /"=" 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 LDA I 240 JMP TYPE /FINAL SPACE PROG0 /RETURN IN PROG0 DECRET, HLT /R.J. / /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. STC 4 /BUILDS VALUE SET I 2 -2 /INDEXES SIGN SET I 3 -4 /INDEXES DIGITS NEXDIG, IOB 6031 /KSF JMP .-2 IOB 6036 /KRB SAE I C215, 215 /CR? JMP GETRET+1 LDA 4 /NO:CHECK FOR XSK I 2 /SKIP ON SIGN SKP COM /NEGATE PROG0 /RETURN PROG0 GETRET, HLT /R.J. NOTYET, STC 5 /SAVE CHAR ADD 5 JMP TYPE /ECHO ADD 5 SAE I C255, 255 /="-"? JMP .+4 /NO XSK I 2 /SECOND SIGN? JMP NEXDIG /YES:SIGN SET JMP ENTERR /YES:ERROR XSK I 3 /TOO MANY DIGITS SKP /NO JMP ENTERR /YES:ERROR ADA I /IS CHAR DIGIT? -257 APO JMP ENTERR /NON-DIGIT ADA I MD10, -12 /DIGIT? APO I JMP ENTERR /NON-DIGIT ADD C11 /RESTORE DIGIT AZE I C11, CLR /-0 TO +0 STC 5 ADD 4 MUL I D10, 12 /DEC. SHIFT LEFT ADD 5 STC 4 JMP NEXDIG /CONTROL ARRIVES HERE WHEN TYPED ENTRY /FOR PARAMETER IS ILLEGAL: >1"-",>3 DIGS /OR ILLEGAL CHAR. TYPES "?" : TRY AGAIN! / ENTERR, LDA I 277 JMP TYPE /"?" PROG0 /TRY AGAIN AT JMP TYVAL /TYVAL IN PROG0 / /SUBR TYPES OUT MESSAGE FROM PACKED /ASCII CODE - 43 GENERATES CR&LF, AND 00 /TERMINATES OUTPUT. ADDRESS OF SOURCE /POINTED (+1/2) BY 1 FROM PROG0;HENCE /MUST BE READ AND RETURNED THERE. / MESSAG, LDA 0 STC MESRET /R.J. PDP PMODE TAD 1 /PASS PROG0(1) LINC /W/O DIFF LDF LMODE STC 1 NXCHAR, LDH I 1 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 1 /PASS PTR BACK PDP /TO 1 IN PROG0 PMODE DCA 1 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 / TYPE, PDP PMODE TLS TSF JMP .-1 CLA LINC LMODE JMP /RETURN / /TEXT (PACKED ASCII) PARAMETER LABELS / ERLABL, 4343 TEXT *ERROR* LABEL1, 4343 TEXT *SUB-SES ID* 0043 TEXT *TEXT TAPE * 0043 TEXT *TEXT BLOCK* 0043 TEXT *DATA BLOCK* 0043 TEXT *TOP LINE * 0043 TEXT *NO. LINES * 0043 TEXT *SPACING * 0043 TEXT *WINDOW * 0043 TEXT *POSITION * 0043 TEXT *QUES-BLOCK* 0043 LABEL2, 4343 TEXT *TIME* 0040 TEXT *SECS. FOR* TEXT *LINE* 2343 /*S*,CR TEXT *COMPREHENSION* LABEL3, TEXT *OF * XLABEL, 4343 TEXT *X-VOLTS: * YLABEL, 4343 TEXT *Y-VOLTS: * / /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 2000 /^ 2077 3410 /BACK ARROW 1010 0 /BLANK 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 /? 2055 / /LINE ADDRESS POINTERS (1/2 WORD).UP TO /16 OF THEM + 1 EXTRA FOR WRAP-UP / LINADS, 0 *.+20 /LINE CONTROL WORDS: 16 MAORDS: 16 MAX. LINCON, 0