*20 /SACSYS1: / /BASIC SUBROUTINE PACKAGE FOR CONTINGENT /EYE-MOVEMENT STIMULUS CONTROL AND /RESPONSE DETECTING, + DECIMAL TTY/SCOPE /I/O HANDLERS. / /FOLLOWING PARAMETERS MUST BE DEFINED / (DURATIONS IN MSECS): / /XA1,XA2,XA3: X-COORDINATES OF LEFT, / MIDDLE & RIGHT OF LEFT FIXATION REGION / /XB1,XB2,XB3: AS ABOVE FOR RIGHT FIX REG / /DOTPW & YDOTS: PATTERN WORD AND Y-COOR. / FOR FIXATION DOTS (AT XA2 & XB2) / /GOKEY: 4-PANEL CODE OF START/CALIBR KEY / /MAXSAC & MINSAC: MAX & MIN DURATIONS / FOR CALIBRATION SACCADES / /FIX1RG & FIX2RG: CODES FOR STARTING & / TARGET FIXATION REGIONS: LEFT-RIGHT / =(-0,1), R-L=(1,-0) / /MXSCRT & MNSCRT: MAX & MIN DURATIONS / FOR SACCADE ONSET AFTER START KEY HIT / /PRESTM,SACSTM,STIM1,STIM2,STIM3: / =JMP SUBR INSTRUCTIONS FOR SINGLE / REFRESH OF VARIOUS STIMULI (W/O FIX. / DOTS)-PRESTM & SACSTM=STIMULI BEFORE / & DURING SACCADE; STIM1,STIM2,STIM3= / STIMULI AFTER SACCADE - SOME MAY BE / VACUOUS OR REPEATS TO INDUCE TIMING / /S1DUR,S2DUR: DURATIONS OF STIM1 & STIM2 / /MAXRT: LONGEST STIM3 DURATION WHILE / AWAITING RESPONSE (NO RESPONSE ALLOWED / EXCEPT DURING STIM3). / /BUTCOR: 10-BUTTON PANEL KEY CODE FOR / CORRECT RESP ON A TRIAL / SAMPLE=SAM 17 /SUBR SAMPLES X-EPS AND RETURNS VALUE /THRU AC CORRESPONDING TO X-REGION / REGION, SAMPLE DJR ADA I MVA1, -0 /LEFT OF A1? APO I JMP REGM1 ADA I DVA1A3, 0 APO I /IN (A1,A3)? JMP REGM0 ADA I DVA3B1, 0 APO I /IN (A3,B1)? JMP REGP0 ADA I DVB1B3, 0 APO I /IN (B1,B3)? JMP REGP1 JMP REGP2 /USE UP DJR REGP2, LDA I 2 /RIGHT OF B3 JMP /RETURN REGP1, LDA I 1 /IN (B1,B3) JMP REGP0, CLR /IN (A3,B1) JMP REGM0, LDA I -0 /IN (A1,A3) JMP REGM1, LDA I -1 /RIGHT OF A1 JMP / /SUBR STARTS 100KHZ CLOCK WITH BEATS /EVERY MSEC; WAITS FOR 1ST ONE / SYNC0, PDP PMODE CLA TAD MFRESH /-BASIC TIME CLAB CLA CLEN CLLR TAD CRATE CLLR CLSA CLA CLSA SMA CLA JMP .-2 /WAIT FOR 1ST LINC LMODE JMP /RETURN PMODE MFRESH, -144 /-TICKS/"BEAT" CRATE, 2100 /CLOCK CLLR LMODE / /SUBR WAIT FOR NEXT BEAT. IF PRESENT AT /ENTRY, CALLS TIMING ERROR / SYNC, PDP PMODE CLA CLSA SPA CLA JMP TIMERR /TIMING ERROR CLSA SMA CLA JMP .-2 LINC LMODE JMP /RETURN PMODE TIMERR, LINC LMODE SET I 1 LTIMER-4000 /AD-1/2 ER LABEL JMP MESSAG HLT JMP .-1 /TRAP FATAL ERR LTIMER, TEXT "INTERNAL TIMING FAILURE" / /SUBR DISPLAYS FIXATION DOTS AT A2 & B2 / DOTS, SET I 1 XA2, 260 CLR ESF LDA I YDOTS, 0 DSC I DOTPW, 0606 SET I 1 XB2, 520 DSC DOTPW JMP / /SUBR DISPLAYS "DOTS" AND OTHER STUFF /EVERY MSEC WHILE SAMPLING UNTIL 1 OF 3 /EVENTS OCCUR: (1) FIXATION LEAVES /"KEYREG" REGION (EXIT CALL+1 W/NEW REG /IN AC (2) TIMEOUT: C(AC) MSECS ELAPSE /(EXIT CALL+2) (3) A BUTTON IS PRESSED /ON 4-KEY RESPONSE PANEL (EXIT CALL+2 /WITH RESP. CODE IN AC) ..."OTHER STUFF" /DISPLAYED CALLED BY JMP ? IN "STIMUL" / HOLREG, STC TIMOUT STC TIMER /12-BIT TIMER SET 10 0 /R.J. HS, JMP SYNC JMP DOTS STIMUL, NOP /OTHER-DISP SUBR JMP REGION SAE I KEYREG, -0 /"HOLD" REGION JMP EXIT1+2 /NEW REGION LDA I 1 ADM I TIMER, 0 SAE I TIMOUT, 0 /TIMEOUT YET? SKP JMP EXIT1+1 /TIMEOUT JMP READ2 /CHECK PANEL JMP HS /SKIPS ON INPUT EXIT1, XSK I 10 /CALL+3 XSK I 10 /CALL+2 JMP 10 /CALL+1 HLT /PROGRAM ERROR! / /SUBR OBTAINS CALIB. READING AT /(XCAL,YDOTS) AND RETURNS ITS TRANSFORM /THRU AC. XCAL PASSED THRU AC. WAITS FOR /RIGHT BUTTON-PRESS ON 4-KEY PANEL / CALPT, STC XCAL ADD STC CLPTRT /RJ JMP WAIT1 /CLR LOWER PANEL JMP SYNC SET I 1 XCAL, 0 LDA YDOTS DSC DOTPW JMP READ1 JMP XCAL-2 /WAIT FOR KEY SAE I GOKEY, 4000 JMP CALER1 SAMPLE STA XCAL /TEMP JMP DECPUT ADD XCAL CLPTRT, HLT /RETURN / /SUBR WAITS FOR LOWER PANEL TO BE CLEAR, /DISPLAYING "KEYS UP!" TO S UNTIL CLEAR. / WAIT1, CLR IOB 6306 AZE I JMP /RETURN: CLEAR LDA /NOT CLEAR: 0 /SAVE RJ STC WAT1RJ SET I 3 WAT1RJ+4000 /TEXT PTR JMP SCOPE /FOR SCOPE IOB 6306 AZE JMP .-6 /UNTIL CLEAR WAT1RJ, HLT /RETURN TEXT "KEYS UP!!" / /WAIT2 LIKE WAIT1 BUT FOR UPPER PANEL / WAIT2, CLR IOB 6316 AZE I JMP LDA 0 STC WAT2RJ SET I 3 WAT1RJ+4000 JMP SCOPE IOB 6316 AZE JMP .-6 WAT2RJ, HLT / /SUBR RETURNS WITH LOWER PANEL INPUT IN /AC (=0 IF NONE). RETURNS CALL+1 IF NONE /OR CALL+2 IF SOME. THERE SHOULD BE A /PRECEDING CALL TO WAIT1 SUBR. / READ1, CLR IOB 6306 AZE I XSK I JMP / /READ2 LIKE READ1 FOR UPPER PANEL / READ2, CLR IOB 6316 AZE XSK I JMP / /SUBR REFRESHES SCOPE BUFFER, STARTING /AT Y=YDOTS (HALF-SIZE) / SCOPE, LDA 0 STC SCOPRJ SET I 1 4100 /CHAN 2 ESF / 1/2 SIZE LDH I 3 AZE I SCOPRJ, HLT /RJ ROL 1 ADA I ADPWS, PATRN-2 STC 2 ADD YDOTS DSC 2 DSC I 2 XSK I 1 JMP SCOPRJ-2 / /CALIBRATION: OF END-POINTS OF TWO /FIXATION INTERVALS: (XA1,XA3)&(XB1,XB3) / CALIBR, LDA 0 STC CALRJ CAL1, JMP CRLF JMP CRLF LDA I XA1, 240 JMP CALPT COM STC MVA1 LDA I XB1, 500 JMP CALPT STA I VB1, 0 ADD MVA1 APO I /VA1 > VB1 JMP CALER2 LDA I XA3, 300 JMP CALPT STA I VA3, 0 ADD MVA1 COM APO /VA1 > VA3? JMP CALER2 STC DVA1A3 ADD VB1 COM ADD VA3 APO /VA3 > VB1? JMP CALER2 STC DVA3B1 LDA I XB3, 540 JMP CALPT COM ADD VB1 APO JMP CALER2 /VB1 > VB3? STC DVB1B3 CALRJ, HLT /RJ / /SECTION HANDLES CALIBRATION ERRORS: /TYPES MESSAGE AND THEN RESTARTS PROG. /AFTER DISPLAYING MESSAGE / CALER1, SET I 1 CEL1-4000 JMP CALERR CALER2, SET I 1 CEL2-4000 CALERR, SET 4 1 JMP MESSAG /TYPE MESSAGE SNS 0 /SHOW MESSAGE IF JMP CAL1 /SW 0 UP JMP WAIT1 SET 3 4 JMP SCOPE /DISPLAY MESSAGE JMP READ1 /UNTIL LOWER HIT JMP .-4 JMP CAL1 /RECALIBRATE!! / /CALIBRATION ERROR MESSAGES / CEL1=TEL1 CEL2, TEXT "VALUES NON-MONOTONE " 4300 / /SUBR RUNS TRIAL TYPES CALLING FOR /PREMASK OFFSET - STIM ONSET /TRIGGERED BY PRESCRIBED SACCADE. /ANY TIME SW 5 THROWN UP & DOWN, A NEW /CALIBRATION IS OBTAINED BEFORE TRIAL. /STIMULUS SEQUENCE (+DOTS AT ALL TIMES): / / ON OFF STIM SUBR / / - - - START KEY "DOTS" / START KEY SAC ONSET "PRESTM" / SAC ONSET SAC OFFSET "SACSTM" / SAC OFFSET S1DUR MSECS "STIM1" / STIM1 OFF S2DUR MSECS "STIM2" / STIM2 OFF RESP/TIMEOUT "STIM3" / STRIAL, LDA 0 STC STRLRJ SNS 5 JMP .+4 /GET NEW CALIBRATION WHEN SW 5 BACK DOWN SNS I 5 JMP .-1 JMP CALIBR JMP WAIT1 JMP WAIT2 /CLEAR PANELS F1, JMP SYNC JMP DOTS /SHOW ONLY FIX. JMP READ1 /DOTS UNTIL JMP F1 /START KEY HIT SAE GOKEY JMP TRER1 /WRONG KEY / /NOW EYES MUST REMAIN IN FIXATION REGION /(FIX1RG) UNTIL SACCADE STARTS. IF NO /SACCADE WITHIN MXSCRT MSECS, ERROR. / LDA I FIX1RG, -0 /FIXATION REGION STC KEYREG LDA I PRESTM, NOP /PRESET DISP SUB STC STIMUL LDA I MXSCRT, 3000 /MAX EYE RT JMP HOLREG JMP .+3 /CHECK FOR SAC. JMP TRER2 /TOO LONG EYE RT JMP TRER3 /ILLEGAL RESP SAE I 0 /SACCADE REG? JMP TRER4 /SPURIOUS SAC. STC KEYREG LDA I SACSTM, NOP /PRESET DISP SUB STC STIMUL ADD TIMER STA I EYERT, 0 /SAVE EYE RT COM ADA I MNSCRT, 310 /.2 SEC0 IF CORRECT, AND -N FOR /TRIAL ERROR N, WHERE N=JMP ADDR OF ERR. / SAE I BUTCOR, 0 /CORRECT? CLR STC RESP /IF SW 1 UP, TYPE OUT SACCADE DURATION SNS 1 JMP STRLRJ JMP CRLF ADD SACDUR JMP DECPUT STRLRJ, HLT /RETURN / / /SECTION HANDLES VARIOUS TRIAL ERRORS. /TYPES OUT ERROR MESSAGE ON TTY, THEN /SETS RESP=PC OF ERROR (<0) & RETURNS / TRER1, SET I 1 TEL1-4000 JMP TRERR /MESSAGE+RERUN TRER2, SET I 1 TEL2-4000 JMP TRERR TRER3, SET I 1 TEL3-4000 JMP TRERR TRER4, SET I 1 TEL4-4000 JMP TRERR TRER5, SET I 1 TEL5-4000 JMP TRERR TRER6, SET I 1 TEL6-4000 JMP TRERR TRER7, SET I 1 TEL7-4000 JMP TRERR TRER8, SET I 1 TEL8-4000 JMP TRERR TRER9, SET I 1 TEL9-4000 JMP TRERR TRER10, SET I 1 TEL10-4000 JMP TRERR /GET PC TRERR, LDA 0 /JMP PC STC RESP SET 4 1 JMP MESSAG /ERR MESSAGE SNS 0 /SHOW MESSAGE IF JMP ENDTRL /SW 0 UP JMP WAIT1 SET 3 4 JMP SCOPE JMP READ1 JMP .-4 JMP ENDTRL / /TRIAL-ERROR MESSAGES / TEL1, TEXT "WRONG START KEY " 4300 TEL2, TEXT "MOVED TOO LATE" 4300 TEL3, TEXT "PREMATURE RESP" 4300 TEL4, TEXT "OFF FIX BEFORE MOVE " 4300 TEL5, TEXT "MOVED TOO SOON" 4300 TEL6, TEXT "MOVE TOO SLOW " 4300 TEL7, TEXT "MOVE NOT ON TARGET" 4300 TEL8, TEXT "MOVE TOO QUICK" 4300 TEL9, TEXT "OFF TARGET BEFORE RESP" 4300 TEL10, TEXT "RT TOO LONG " 4300 / /SUBR TYPES AC AS SIGNED DECIMAL INTEGER / DECPUT, STC INVAL /SAVE ARG ADD STC DECRET /RET AD ADD INVAL APO I JMP .+6 />0:NO "-" COM STC INVAL /ABS(ARG) ADD C255 JMP TYPE /"-" SET I 17 260 /"0"-COUNT DIGIT ADD INVAL ADA I -144 /HUNDREDS APO JMP .+3 XSK I 17 JMP .-5 AZE I /-0? JMP .-3 /KEEP GOING ADA I 144 /RSETORE REM. STC INVAL ADD 16 JMP TYPE /HUNDREDS SET I 16 C260, 260 ADD INVAL ADD MD10 APO JMP .+3 XSK I 16 JMP .-4 AZE I JMP .-3 ADD D10 STC INVAL ADD 16 JMP TYPE /TENS ADD C260 ADD INVAL JMP TYPE /UNITS 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 AND LEFT IN ADDRESS /SPECIFIED BY 17. INITIAL CR LEAVES OLD /VALUE INTACT AND RETURNS CALL+1. /ELSE RETURNS CALL+2. ILLEGAL ENTRY /IGNORED AND RESTARTED. / GETDEC, LDA 0 STC GETRET /R.J. ENTRY, LDA I 240 JMP TYPE /SPACE JMP INPUT ADD DIGITS SAE I M4, -4 /ANYTHING INPUT? SKP JMP GETRET /RETURN CALL+1 LDA I 1 ADM GETRET /RETURN CALL+2 LDA INVAL STA 17 /SET NEW VALUE GETRET, HLT /RJ ADD ASCII SAE I 215 /LAST CHAR=CR? JMP ENTERR LDA INVAL GETRET, HLT /WITH AC=VAL / INPUT, LDA 0 STC INPTRJ STC INVAL /BUILDS VALUE ADD INOP /SIGN="NOP" STC SIGN ADD M4 STC DIGITS /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 LDA I COM STC SIGN /SIGN SET NEXDIG, JMP INCHAR SAE I 215 /CR? SKP JMP HAVEIT ADA I /DIGIT? -257 APO JMP ENTERR /ILLEGAL CHAR ADA I MD10, -12 /DIGIT? APO I JMP ENTERR ADD C11 /RESTORE DIGIT AZE I C11, CLR /-0 TO +0 STC TT /TEMP ADD C1 ADM I DIGITS, 0 /=-0 IF 4TH DIG AZE I JMP ENTERR LDA I INVAL, 0 MUL I D10, 12 /DEC. SHIFT LEFT ADA I TT, 0 STC INVAL JMP NEXDIG HAVEIT, LDA INVAL SIGN, NOP /NOP OR COM STC INVAL INPTRJ, HLT /RJ / /SUBR ACCEPTS TTY CHAR AND ECHOES NON-CR /LEAVES CHAR IN "ASCII" & AC. IF CTRL/C, /RESTARTS AT MONIT. / INCHAR, LDA 0 STC INCRET IOB 6031 /KSF JMP .-2 IOB 6036 /KRB STA I ASCII, 0 SAE I 203 /CTRL/C? SKP JMP MONIT 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 JMP ENTRY /REDO IT! / /SUBR TYPES OUT MESSAGE FROM PACKED /ASCII CODE - 43 GENERATES CR&LF, AND 00 /TERMINATES OUTPUT. ADDRESS OF SOURCE /POINTED (-1/2) BY 12. / MESSAG, LDA 0 STC MESRET /R.J. NXCHAR, LDH I 12 AZE I MESRET, HLT /RJ 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 / /SUBR TYPES CR&LF / CARRET, LDA I C215, 215 PDP PMODE JMP TYPE TAD C212 JMP TYPE LINC LMODE JMP PMODE C212, 212 LMODE / /SUBR TYPES AC / TYPE, PDP PMODE TLS TSF JMP .-1 CLA LINC LMODE JMP / /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 /