File SACPACK

Directory of image this file is from
This file as a plain text file

*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 SEC<EYE RT?
	APO I
	JMP TRER5	/TOO QUICK ONSET
	LDA I
SACMAX,	0		/MAX SAC DUR.
	JMP HOLREG
	JMP .+3		/END OF SAC?
	JMP TRER6	/SAC TOO LONG
	JMP TRER3	/PREMATURE RESP
	SAE I
FIX2RG,	1		/IN TARGET REG?
	JMP TRER7	/ILLEGAL SAC
	STC KEYREG
	ADD TIMER
	COM
	ADD SACMIN
	APO I		/SAC TOO FAST?
	JMP TRER8
	LDA
	TIMER
	STA I
SACDUR,	0		/SAVE SAC TIME
/TARGET FIXATION BEGINS. PRESENT THREE
/STIMULUS INTERVALS. NO RESP ALLOWED
/UNTIL START OF 3RD INTERVAL, DURING
/WHICH RESP MUST OCCUR.
	LDA I
	JMP STIM1
	STC STIMUL
	LDA I
S1DUR,	0
	JMP HOLREG
	JMP TRER9	/ILLEGAL SAC
	SKP		/S1 OVER - OK
	JMP TRER3	/PREMATURE RESP
	LDA I
	JMP STIM2
	STC STIMUL
	LDA I
S2DUR,	0
	JMP HOLREG
	JMP TRER9	/ILLEGAL SAC
	SKP		/S2 OVER - OK
	JMP TRER3	/PREMATURE RESP
	LDA I
	JMP STIM3
	STC STIMUL
	LDA I
MAXRT,	3000		/S3 ON TILL RESP
	JMP HOLREG
	JMP TRER9	/ILLEGAL SAC
	JMP TRER10	/RT TOO LONG
/STIMULUS SEQUENCE OVER - HAVE RESP
/SAVE TRIAL DATA: 1ST WORD=TRIAL TYPE
/(+4000 IF RESP WRONG). 2ND WORD=EYERT,
/3RD WORD=SACDUR, 4TH WORD=RESP RT
	SAE I
BUTCOR,	0		/CORRECT?
	JMP .+3
	LDA 7
	JMP .+3
	LDA 7
	ADD C4000
	STA I 11	/1ST WORD
	LDA
	EYERT
	STA I 11	/2ND WORD
	LDA
	SACDUR
	STA I 11	/3RD WORD
	LDA		/RT MEASURED
	TIMER		/FROM S3 ONSET
	STA I 11	/ = 4TH WORD
STRLRJ,	HLT		/RETURN
/
/SECTION HANDLES VARIOUS TRIAL ERRORS.
/TYPES OUT ERROR MESSAGE ON TTY, THEN
/RERUNS TRIAL.
/
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
/TYPE ERROR MESSAGE
/PUT TRIAL TYPE AT BOTTOM OF TRIAL
/BUFFER FOR LATER RERUN. B-5 POINTS TO
/BOTTOM OF STACK
/
TRERR,	JMP MESSAG
	LDA 7
	STA I 5
	JMP NXTRL	/DO NEXT TRIAL
/
/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
/



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search