*20 LMODE DATA=LDF 3 /LDF FOR DATA TABLES=LDF 2 /LOOKUP LDF DTEXT=LDF 1 /TEXT BUF LDF SEGMNT 0 /JOB PARAMETERS STORED HERE: ARE WRITTEN /OUT AS HEADER ON DATA FILES *20 PGCODE, 1111 /PROGRAM CODE JOB, 0 /JOB CONTROL WD 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 MLW, 0 /REL. WIND.POSN. NPAGE, 0 /DISPLAY PAGE NO / PMODE MDT, -144 /10 MSEC/SAMPLE C2720, 2720 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 /"MLW" : POSITION OF LEFT WINDOW EDGE / W/R/T FIXATION PT: -N MEANS / N TO LEFT,+N N TO RIGHT / /NOTE THAT (LINES-1)*SPACIN+TOPLIN<40 OC / /THIS SECTION HANDLES INTERRUPTS. /TWO POSSIBLE INTERRUPTS: ON SCHMIDT /TRIGGER, SUBJECT SIGNALS FROM PULSE BOX /SIGNAL END OF READING FOR PAGE OR /END OF FIXATION DURING CALIBRATION. /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 ADD STC SAVE0 IOB 6135 /CLSA APO I /<0:CLOCK OFLOW JMP TRIGGR />0:PULSE I"RUPT /SAMPLE Y AND X SIGNALS (A-D 16 & 17) /COMPUTE TABLE LOOKUP FOR EACH OF THEM TABLES /LDF FOR LOOKUP SAM 16 /Y SIGNAL ADA I C1000, 1000 /MAKE POS SCR 2 /SCALE=(0,377) ADA I 2000 /Y TABLE IN LDF STC 16 /LOOKUP ADDRESS SAM 17 /X SIGNAL ADD C1000 SCR 2 /(0,377) ADA I 2400 /LDF + 400 STC 17 /LOOKUP ADDRESS /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 MAINLINE DISPLAY RESTOR, LDA 40 BSE I C6000, 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 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 /DON"T NEED TO REDEFINE YFIX, SINCE IT /MUST BE IDENTICAL FOR NEW FIXATION. /NOW REDEFINE DISPLAY CONTROL WORDS. SET I 4 LINCON-1 SET 6 MLINES ADD C7000 /EACH LINE SET STA I 4 /TO ALL PERIPH. XSK I 6 JMP .-2 LDA 16 /16=YFIX ADD ADLIN2 /=AD-1 WINDOW STC 4 /LINE ADD XFIX ADD MLW /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 /WHEN NEW FIXATION POINT ESTABLISHED, /THE ABOVE EXIT IS DIRECTLY TO THE /DISPLAY ROUTINE, SO THAT REFRESHING MAY /BEGIN ON THE NEW WINDOW LINE, RATHER /THAN CONTINUING FROM THE INTERRUPT SPOT / NOROOM, ADD MWIDE /DECREASE WINDOW STC MWIDTH COM STA I 4 /CONTROL WORD=-0 JMP DISPLA / /CONTROL REACHES HERE WHENEVER INTERRUPT /OCCURS ON SCHMIDT TRIGGER 1 (I.E., /POSITIVE PULSE). IF DURING READING, /THIS SIGNALS END OF PAGE, AND ANY DATA /STORED BUT NOT YET WRITTEN OUT BY THE /OUTPUT BUFFERING ROUTINES IS OUTPUT; /THEN THE NEXT PAGE (IF ANY) IS RUN. /IF DURING CALIBRATION (SW 0 UP), PULSE /MEANS SAMPLE CHANNELS FOR CALIB POINT. / TRIGGR, BCL I 7737 /SAVE BIT 6 AZE I /EVENT 1? JMP RESTOR /SPURIOUS INTER. SNS I 0 /READING OR CALI JMP EXCALB /CALIBRATION /MUST BE END OF PAGE: SAVE TWO 7777"S /AS END-MARKERS. LDA I 7777 JMP STORE LDA I 7777 JMP STORE /NORMALLY HAVE CURRENT DATA BLOCK TO /WRITE OUT, UNLESS THE END-MARK (7777) /HAPPENED TO END AN MBLK, IN WHICH CASE /BLOCK WILL HAVE BEEN WRITTEN ALREADY. /RETURN FROM ABOVE CALL TO "STORE" WILL /HAVE AC=DATBLK>0 IF SO WRITTEN, ELSE<0 APO I JMP EPAGE /ALREADY WRITTEN LDA 13 BCL I 6377 /GET MBLK 1ST AD ADD C6000 /ABS WRITE ADDR STD /WAIT FOR TAPE JMP .-1 JMP WRITE /ENTRY IN "STORE /RETURNS WHEN OUTPUT STARTED (NO PAUSE). /NOW CHECK IF THERE"S MORE OF TEXT. EPAGE, LDA LINES ADD MLINES /LAST PAGE DONE AZE I /IF MLINES0 MUL I -20 STC DY ADD WIDTH APO JMP ERROR COM STC MWIDE LDA I -1 ADD LINES MUL SPACIN ADD TOPLIN ADA I -37 /LAST LINE NO. APO I /MUST <40 JMP ERROR CLR STC NPAGE /INIT. NPAGE=0 /READ IN 1ST 4 BLOCKS OF TEXT SOURCE ADD TEXBLK JMP TEXTIN LDA I 6001 /SKIP "*20"CR STC PAGEPT /TEXT AD-1/2 JMP SETPAG /SETUP PAGE JMP RUNPAG /RUN 1ST PAGE / /SUBR TYPES AC AS UNSIGNED OCTAL INTEGER /IN FORMAT "=XXXX". USES "Y" FOR STORE. / OCTPUT, STC Y ADD STC OCTRET /RETURN JMP LDA I 275 JMP TYPE /"=" LDA Y ROL 3 JMP OUTDIG /TYPE DIGIT ROR 6 JMP OUTDIG ROR 3 JMP OUTDIG JMP OUTDIG OCTRET, HLT /RETURN / /SUBR TYPES OCTAL DIGIT FROM AC 9-11 / OUTDIG, BCL I 7770 /STRIP DIGIT ADA I C260, 260 /ASCII CODE STC D /TEMP ADD STC DIGRET /RETRN JMP ADD D JMP TYPE LDA Y /RESTORE AC DIGRET, HLT /RETURN / /SUBR ACCEPTS UNSIGNED OCTAL INTEGER /FROM TTY. LEADING /ZEROES NEEDNT ENTER, AND A CR IS THE /TERMINATOR. THE OBTAINED VALUE IS /STORED VIA 13 (ONLY ON VALID INPUT). /AN INITIAL CR LEAVES CURRENT VALUE /INTACT. THE ENTRY IS RUBBED OUT AND /RESTARTED BY ANY NON-CR,NON-OCTAL KEY. / GETPAR, LDA 0 STC GETRET /R.J. STC D /D BUILDS VALUE STC 2 /INDEXES INPUT JMP INDIG /GET CHAR JMP INDIG JMP INDIG JMP INDIG JMP INDIG /RETURNS FROM INDIG ONLY WHEN OCTAL /INTEGER ENTERED: IF RETURNS AFTER LAST /CALL, MORE THAN 4 DIGITS ENTERED: ENTRY /IS INVALID AND "?" TYPED ANY ENTRY /RESTARTED AT "TYVAL" ENTERR, LDA I /INVALID 277 JMP TYPE /"?" JMP TYVAL /REDO ENTRY / /SUBR ACCEPTS CHAR FROM TTY. IF A CR, /TERMINATES ENTRY BY GOING TO "VALENT" /(UNLESS INITIAL CR, SIGNALLED BY Y<0, /IN WHICH CASE KEEP CURRENT VALUE AND /RETURN TO GETRET). IF AN OCTAL DIGIT, /SHIFTS Y TO LEFT AND ADDS DIGIT (CLEARS /Y FIRST IF <0 MEANING NEW ENTRY). /ANY OTHER CHARACTER RESTARTS ENTRY / INDIG, LDA 0 STC INDRET /R.J. IOB 6031 /KSF JMP .-2 IOB 6036 /KRB SAE I C215, 215 /CR? JMP NOTCR /HAVE CR: END ENTRY. IF 2=0, THEN WAS /NULL ENTRY (I.E., INITIAL CR): RETAIN /CURRENT PARAMETER VALUE. 2>0 STORE /NEW VALUE (D). RETURN FROM GETPAR LDA 2 /2 NON-0 IF DIG AZE I GETRET, HLT /RETRN GETPAR LDA D STA 13 /STORE NEW VALUE JMP GETRET NOTCR, JMP TYPE /ECHO NON-CR ADA I -257 APO /OCTAL DIGIT? JMP ENTERR /NO:RESTART ADA I -10 /OCTAL DIGIT? APO I JMP ENTERR /NO: RESTART ADA I 7 /RESTORE DIGIT AZE I CLR /-0=0 STC 0 /TEMP. ADD D ROL 3 /SHIFT ENTRY ADD 0 /NEXT DIGIT STC D XSK I 2 /SET NON-NULL INDRET, HLT /RETURN INDIG / /SUBR TYPES OUT MESSAGE FROM PACKED /ASCII CODE - 43 GENERATES CR&LF, AND 00 /TERMINATES OUTPUT. ADDRESS OF SOURCE /POINTED (+1/2) BY 1. / MESSAG, LDA 0 STC MESRET /R.J. LDH I 1 AZE I MESRET, HLT /RETRN SAE I 43 /CR? JMP .+3 JMP CRLF /DO CR,LF JMP MESRET-2 /NEXT CHAR ADA I -37 /ADD 200 OR 300 APO /FOR 8-BIT CODE? ADD C100 ADA I 237 JMP TYPE /TYPE 8-BIT CODE JMP MESRET-2 /NEXT CHAR C100, 100 / /SUBR GENERATES CR&LF / 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 / TYPE, PDP PMODE TLS TSF JMP .-1 LINC LMODE JMP /RETURN / /TEMPORARY DEBUGGING SECTION EXCALB, HLT CALIBR, HLT / /TEXT (PACKED ASCII) PARAMETER LABELS / LABEL1, 4312 /CR,J 1702 /OB 4027 / W 1722 /OR 0400 /D 2325 /SU 0212 /BJ 0503 /EC 2455 /T- 2305 /SE 2323 /SS 1117 /IO 1600 /N 2405 /TE 3024 /XT 4024 / T 0120 /AP 0500 /E 2405 /TE 3024 /XT 4002 / B 1417 /LO 0313 /CK 0004 / D 0124 /AT 0140 /A 0214 /BL 1703 /OC 1300 /K 2417 /TO 2040 /P 1411 /LI 1605 /NE 0014 / L 1116 /IN 0523 /ES 0023 / S 2001 /PA 0311 /CI 1607 /NG 0027 / W 1116 /IN 0417 /DO 2700 /W 2017 /PO 2311 /SI 2411 /TI 1716 /ON 0000 / /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