*20 /BASIC SUBROUTINE PACKAGE FOR CONTINGENT /EY-MOVEMENT STIMULUS CONTROL AND /RESPONSE DETECTING. /ANY TIME SW 5 UP, PROGRAM ABORTS & /RESTARTS AT "MONIT". SAMPLE=SAM 17 READ=6306 CLEAR=6304 /SUBR SAMPLES X-EPS AND RETURNS VALUE /THRU AC CORRESPONDING TO X-REGION / REGION, SAMPLE ADD C1000 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 M144 /100 TICKS/BEAT CLAB CLA CLEN CLLR TAD C2100 CLLR CLSA CLA CLSA SMA CLA JMP .-2 /WAIT FOR 1ST LINC LMODE JMP /RETURN PMODE M144, -144 C2100, 2100 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 JMP MONIT /FATAL ERROR LTIMER, TEXT "INTERNAL TIMING FAILURE " 4300 / /SUBR DISPLAYS FIXATION DOTS AT A2 & B2 / DOTS, SET I 1 XA2, 0 CLR ESF LDA I YDOTS, 0 DSC I DOTPW, 0606 SET I 1 XB2, 0 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 CLR IOB READ /READ PANEL AZE I JMP HS /NO RESP:CON"T EXIT1, XSK I 10 /CALL+3 XSK I 10 /CALL+2 JMP 10 /CALL+1 / /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 /TYPES OUT VOLTAGE IF SW 0 UP. / CALPT, STC XCAL ADD STC CLPTRT /RJ IOB CLEAR /CLEAR PANEL C1, JMP SYNC SET I 1 XCAL, 0 LDA YDOTS DSC DOTPW CLR IOB READ AZE I JMP C1 /WAIT FOR KEY SAE I CALKEY, 4000 /CORRECT KEY? JMP CALER1 SAMPLE ADD C1000 STA XCAL /TEMP SNS I 0 JMP DECPUT SNS I 5 JMP MONIT LDA XCAL CLPTRT, HLT /RETURN / /CALIBRATION SECTION I: CALIBRATES /INTERVAL END-POINTS AROUND TWO FIXATION /POINTS. (XA1,XA3) & (XB1,XB3) / CAL1, LDA 0 STC CAL1RJ SNS I 0 JMP CRLF LDA I XA1, 0 JMP CALPT COM STC MVA1 LDA I XB1, 0 JMP CALPT STA I VB1, 0 ADD MVA1 APO I /VA1 > VB1 JMP CALER2 LDA I XA3, 0 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, 0 JMP CALPT COM ADD VB1 APO JMP CALER2 /VB1 > VB3? STC DVB1B3 /NOW DISPLAY 4 VOLTAGE VALUES ON SCOPE /CHAN 2 FROM SW 5 UP TO SW 5 DOWN. ADD C2000 ADD MVA1 SCR 1 ADD C4000 STC 3 ADD DVA1A3 SCR 1 ADD 3 STC 4 ADD DVA3B1 SCR 1 ADD 4 STC 5 ADD DVB1B3 SCR 1 ADD 5 STC 6 SNS 5 JMP CAL1RJ C2, JMP SYNC CLR DIS 3 DIS 4 DIS 5 DIS 6 SNS I 5 JMP C2 CAL1RJ, HLT /RETURN / /CALIBRATION SECTION 2: TIMES SACCADES /FROM FIX1RG TO FIX2RG. SAVES MIN & MAX /OF SACCADES. WHEN READY, S FIXATES /FIX1RG & PRESSES START KEY, THEN MOVES /TO TARGET (FIXRG2) REGION, WHERE HE /STAYS UNTIL HITTING ANOTHER KEY. /DOES 4 SACCADES OR 8 IF SW 1 UP. /ABORTS IF ERROR OCCURS OR IF SW 5 UP. / CAL2, LDA 0 STC CAL2RJ STC SACMAX STC SACSUM ADD C2000 STC SACMIN SNS I 0 JMP CRLF LDA I 4 SNS I 1 ROL 1 /4 OR 8 COM STC 4 ADD JMPNOP /DOTS ON ONLY STC STIMUL /NO STIMULUS C3, IOB CLEAR C4, JMP SYNC JMP DOTS IOB READ AZE I JMP C4 SAE CALKEY /RIGHT ONE? JMP CALER1 LDA FIX1RG /FIX. REG. CODE STC KEYREG ADD MXSCRT /MAX EYE RT JMP HOLREG JMP .+3 /HAS LEFT FIX PT JMP CALER3 /TOO LONG ON FIX JMP CALER4 /ILLEGAL RESP. SAE I 0 /IN (A3,B1) ? JMP CALER5 STC KEYREG LDA I MAXSTM, 62 /50 MSEC MAX JMP HOLREG JMP .+3 /CHECK IT JMP CALER6 /TOO LONG JMP CALER4 SAE FIX2RG /INTO TARGET? JMP CALER7 /WRONG PLACE STC KEYREG LDA I MINSTM, 12 /10 MSEC MIN COM ADD TIMER APO JMP CALER8 /TOO QUICK LDA TIMER STC SACTIM /SAVE SAC TIME /NOW S MUST HOLD TARGET REGION UNTIL /BUTTON PRESS LDA RTMAX /RESP. TIMEOUT JMP HOLREG JMP CALER9 /LEFT BEFORE KEY JMP CALE10 /NO RESP /END OF CAL SAC: PROCESS IT & DO NEXT LDA SACTIM ADM I SACSUM, 0 /TOTAL OVER SACS LDA SACTIM COM ADD SACMAX APO JMP NUMAX /NEW MAX SAC LDA I SACMIN, 0 COM ADD SACTIM APO I JMP AGAIN /DO NEXT ONE LDA SACTIM STC SACMIN /NEW MIN JMP AGAIN NUMAX, LDA SACTIM STC SACMAX /NEW MAX JMP SACMIN-1 /CHECK MIN AGAIN, LDA SACTIM SNS I 0 JMP DECPUT /TYPE IF SW 0 SNS I 5 JMP MONIT /ABORT SW? XSK I 4 /ANOTHER? JMP C3 /TYPE OUT MIN, MAX, AVG JMP CRLF LDA SACMIN JMP DECPUT LDA SACMAX JMP DECPUT LDA SACSUM ADD C2 SCR 2 /DIV 4 OR 8=AVG SNS I 1 SCR 1 JMP DECPUT JMP MONIT LDA I DECMIN, -2 ADM SACMIN /ADJUST MIN LDA I INCMAX, 2 ADM SACMAX /& MAX CAL2RJ, HLT /RETURN / /SECTION HANDLES CALIBRATION ERRORS: /TYPES MESSAGE AND THEN RESTARTS PROG. / CALER1, SET I 1 CEL1-4000 JMP CALERR CALER2, SET I 1 CEL3-4000 JMP CALERR CALER3, SET I 1 CEL3-4000 JMP CALERR CALER4, SET I 1 CEL4-4000 JMP CALERR CALER5, SET I 1 CEL5-4000 JMP CALERR CALER6, SET I 1 CEL6-4000 JMP CALERR CALER7, SET I 1 CEL7-4000 JMP CALERR CALER8, SET I 1 CEL8-4000 JMP CALERR CALER9, SET I 1 CEL9-4000 JMP CALERR CALE10, SET I 1 CEL10-4000 CALERR, JMP MESSAG JMP MONIT / /CALIBRATION ERROR MESSAGES - MOST FROM /TRIAL-ERROR MESSAGES / CEL1=TEL1 CEL2, TEXT "VALUES NON-MONOTONE " 4300 CEL3=TEL2 CEL4=TEL3 CEL5=TEL4 CEL6=TEL6 CEL7=TEL7 CEL8=TEL8 CEL9=TEL9 CEL10=TEL10 / /SUBR RUNS TRIAL TYPES CALLING FOR /PREMASK OFFSET - STIM ONSET /TRIGGERED BY PRESCRIBED SACCADE. / STRIAL, LDA 0 STC STRLRJ IOB CLEAR /DISPLAY DOTS UNTIL START KEY HIT F1, JMP SYNC JMP DOTS CLR IOB READ AZE I JMP F1 /WAIT FOR KEY SAE I BUTST, 4000 /START KEY? 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 JMP PREMSK /PREMASK DISPLAY 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 NOP /ONLY DOTS SHOWN STC STIMUL ADD TIMER STA I EYERT, 0 /SAVE EYE RT COM ADA I MNSCRT, 310 /.2 SEC0: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 /