File SACPACK1

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

*20
/SACPACK1:
/
/BASIC SUBROUTINE PACKAGE FOR CONTINGENT
/EYE-MOVEMENT STIMULUS CONTROL AND
/RESPONSE DETECTION. ABSOLUTE BINARY
/LOAD OVER PS-12 MAINLINE PROGRAM: 16000
/PASSES VARIABLES FROM FORTRAN COMMON,
/WHICH MUST BEGIN WITH THE FOLLOWING
/INTEGER VARIABLES:
/
/XA1, XA2, XA3, XB1, XB2, XB3, FIX1RG,
/FIX2RG, MXSCRT, MNSCRT, MAXSAC, MINSAC,
/S1DUR, S2DUR, HOLMIN, MAXRT, EYERT,
/SACDUR, RESP, RT, PRESTM(10),
/SACSTM(10), STIM1(10), STIM2(10),
/STIM3(10)
/
/ALL DURATIONS EXPRESSED IN MSECS.
/
/XA1,XA2,XA3: X-COORDINATES OF LEFT,
/ MIDDLE & RIGHT OF LEFT FIXATION REGION
/
/XB1,XB2,XB3: AS ABOVE FOR RIGHT FIX REG
/
/MAXSAC & MINSAC: MAX & MIN DURATIONS
/ FOR 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:
/ ADDRESSES OF STIMULUS CONTROL VECTORS
/ IN MAINLINE COMMON: GUIDE SINGLE
/ REFRESH OF VARIOUS STIMULI (W/O FIX.
/ DOTS)-PRESTM & SACSTM=STIMULI BEFORE
/ & DURING SACCADE; STIM1,STIM2,STIM3=
/ STIMULI AFTER SACCADE. VECTOR FORMAT:
/   1ST WD=NO. OF PWS (0=NULL STIM)
/   2ND WD=STARTING H.C. OF STIMULUS
/   3RD WD=0 (HALF-SIZE) OR 200 (FULL)
/   4TH-10TH = STIMULUS PWS
/
/S1DUR,S2DUR: DURATIONS OF STIM1 & STIM2
/
/MINHOL: MINIMUM TIME TARGET MUST BE
/HELD AFTER STIM3 ONSET - SHOULD BE LONG
/ENOUGH TO INSURE SACCADE STOPPED THERE
/
/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
/
/SECTION ESTABLISHES DUMMY "COMMON" AT
/10200 UP (LDF 4) - NOT LOADED!!!
/
	SEGMNT 4
	*200
XA1,	0
XA2,	0
XA3,	0
XB1,	0
XB2,	0
XB3,	0
FIX1RG,	0
FIX2RG,	0
MXSCRT,	0
MNSCRT,	0
MAXSAC,	0
MINSAC,	0
S1DUR,	0
S2DUR,	0
MINHOL,	0
MAXRT,	0
BUTCOR,	0
EYERT,	0
SACDUR,	0
RESP,	0
RT,	0
PRESTM,	0
	*.+11
SACSTM,	0
	*.+11
STIM1,	0
	*.+11
STIM2,	0
	*.+11
STIM3,	0
/
/ACTUAL PACKAGE BEGINS HERE
/
	PMODE
	*6020
/
/PS-12 ENTRY FOR CALIBRATION: FIELD 1
/ASSUMED FOR BOTH ENTRIES & EXITS
/
CENTRY,	0
	LINC
	LMODE
	LDF 4		/"COMMON" ACCESS
	JMP CALIBR
	PDP
	PMODE
	CLA CLL
	JMP I CENTRY	/RETURN
/
/RUN-A-TRIAL ENTRY POINT
/
TENTRY,	0
	LINC
	LMODE
	LDF 4
	JMP STRIAL
	PDP
	PMODE
	CLA CLL
	JMP I TENTRY
/
/SUBR SAMPLES X-EPS AND RETURNS VALUE
/THRU AC CORRESPONDING TO X-REGION
/
	LMODE
REGION,	SAM 15
	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 WAITS 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 4
	LTIMER-4000	/AD-1/2 ER LABEL
	JMP SCOPE
	JMP .-3		/TRAP ERROR
LTIMER,	TEXT "INTERNAL TIMING FAILURE"
/
/SUBR DISPLAYS FIXATION DOTS AT A2 & B2
/
DOTS,	SET 1
	XA2+2000	/FROM COMMON
	CLR
	ESF
	LDA I
YDOTS,	20
	DSC I
DOTPW,	7777
	SET 1
	XB2+2000
	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 UNDER CONTROL OF STIMULUS
/VECTOR WHOSE ADDR IN STIMUL.
/
HOLREG,	STC TIMOUT
	STC TIMER	/12-BIT TIMER
	SET 10
	0		/R.J.
HS,	JMP SYNC
	JMP DOTS
	SET I 2		/GET ADDR-1 STM
STIMUL,	PRESTM+1777	/CONTROL VECTOR
	LDA I 2
	AZE I
	JMP KEYREG-2	/NULL STIM
	COM
	STC 3		/XSK ON PWS
	LDA I 2
	STC 1		/INIT HC
	LDA I 2		/0 OR 200
	ESF
	LDA I
YSTIM,	60		/Y FOR STIMULI
	DSC I 2		/SHOW PW VECTOR
	XSK I 3
	JMP .-2
	JMP REGION
	SAE I
KEYREG,	-0		/"HOLD" REGION
	JMP 10		/EXIT CALL+1
	LDA I
	1
	ADM I
TIMER,	0
	SAE I
TIMOUT,	0		/TIMEOUT YET?
	SKP
	JMP EXIT1+1	/TIMEOUT
	IOB
	6311		/RESP YET?
	JMP HS		/SKIPS KEY HIT
EXIT1,	XSK I 10	/CALL+3
	XSK I 10	/CALL+2
	JMP 10
/
/SUBR OBTAINS CALIB. READING AT
/(XCAL,YDOTS) AND RETURNS IT
/THRU AC. XCAL PASSED THRU AC.
/
CALPT,	STC XCAL
	ADD
	STC CLPTRT	/RJ
	ESF		/HALF-SIZE
	IOB
	6135		/INITIAL CLSA
	IOB
	6304		/CLEAR 4-PANEL
	JMP SYNC
	SET I 1
XCAL,	0
	ADD YDOTS
	DSC
	DOTPW
	IOB
	6301		/READY YET?
	JMP XCAL-2	/WAIT FOR KEY UP
	JMP SYNC
	SAM 15
CLPTRT,	HLT		/RETURN
/
/SUBR DISPLAYS MESSAGE AFTER BRIEF PAUSE
/MESSAGE VECTOR PTR IS 4
/
SCOPE,	LDA
	0
	STC SCOPRJ
	ESF
	SET I 5
	-400
	JMP SYNC
	XSK I 5
	JMP .-2
SLOOP,	SET 3
	4
	SET I 1
	240
NEXCH,	LDH I 3
	AZE I
	JMP SCOPRJ-2	/00=END VECTOR
	ROL 1
	ADA I
ADPWS,	PATRN-2
	STC 2
	LDA I
YMESS,	200
	DSC 2
	DSC I 2
	XSK I 1
	JMP NEXCH
	XSK I 5
	JMP SLOOP
SCOPRJ,	HLT
/
/CALIBRATION FOR END-POINTS OF TWO
/FIXATION INTERVALS: (XA1,XA3)&(XB1,XB3)
/
	PMODE
MFRESH,	-144		/CLOCK CONSTANTS
CRATE,	2100		/SO 1 MSEC/BEAT
	LMODE
/
CALIBR,	LDA
	0
	STC CALRJ
CAL1,	PDP		/TURN CLOCK ON
	PMODE
	CLA
	TAD MFRESH	/-BEATS/SYNC
	CLAB
	CLA
	CLEN
	CLLR
	TAD CRATE
	CLLR
	LINC
	LMODE
/
/SW 4 UP: SHOW DOTS FOR INITIAL ADJUST
/UNTIL SW 4 BACK DOWN
/
	SNS 4
	JMP POINTS
	IOB
	6135
	JMP SYNC
	JMP DOTS
	SNS I 4
	JMP .-3
POINTS,	LDA
	XA1+2000	/FROM "COMMON"
	JMP CALPT
	SAE I
	777		/EXTREME LEFT?
	SKP
	JMP CALER1
	COM
	STC MVA1
	LDA
	XB1+2000
	JMP CALPT
	STA I
VB1,	0
	ADD MVA1
	APO I		/VA1 > VB1
	JMP CALER2
	LDA
	XA3+2000
	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
	-1000
	ADD DVA3B1
	APO
	JMP CALER4	/GAIN TOO LOW
	LDA
	XB3+2000
	JMP CALPT
	SAE I
	7000		/EXTREME RIGHT?
	SKP
	JMP CALER3
	COM
	ADD VB1
	APO
	JMP CALER2	/VB1 > VB3?
	STC DVB1B3
CALRJ,	HLT		/RJ
/
/SECTION HANDLES CALIBRATION ERRORS:
/DISPLAYS MESSAGE & RESTARTS
/
CALER1,	SET I 4
	CEL1-4000
	JMP CALERR
CALER2,	SET I 4
	CEL2-4000
	JMP CALERR
CALER3,	SET I 4
	CEL3-4000
	JMP CALERR
CALER4,	SET I 4
	CEL4-4000
CALERR,	JMP SCOPE	/DISPLAY MESSAGE
	JMP CAL1	/RECALIBRATE!!
/
CEL1,	TEXT "EXTREME LEFT "
CEL2,	TEXT "BAD READINGS "
CEL3,	TEXT "EXTREME RIGHT"
CEL4,	TEXT "GAIN TOO LOW "
/
/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
	IOB
	6135		/CLSA INITIALIZE
	IOB
	6304		/CLEAR LOWER
TWAIT,	JMP SYNC
	JMP DOTS
/GET NEW CALIBRATION IF SW 5 UP & DOWN
	SNS 5
	JMP .+5
	SNS I 5
	JMP .-1
	JMP CALIBR
	JMP STRIAL+3
	IOB
	6301
	JMP TWAIT
	IOB
	6314		/CLEAR UPPER
/
/NOW EYES MUST REMAIN IN FIXATION REGION
/(FIX1RG) UNTIL SACCADE STARTS. IF NO
/SACCADE WITHIN MXSCRT MSECS, ERROR.
/
	JMP REGION
	SAE
	FIX1RG+2000	/FIXATING?
	JMP TRER4
	STC KEYREG
	LDA I
	PRESTM+1777	/AD-1 STIM VECTO
	STC STIMUL
	LDA
	MXSCRT+2000	/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+1777	/SAC STIM VEC
	STC STIMUL
	ADD TIMER
	STA
	EYERT+2000	/SAVE EYE RT
	COM
	ADA
	MNSCRT+2000	/TOO QUICK?
	APO I
	JMP TRER5	/TOO QUICK ONSET
	LDA
	MAXSAC+2000	/MAX SAC DUR
	JMP HOLREG
	JMP .+3		/END OF SAC?
	JMP TRER6	/SAC TOO LONG
	JMP TRER3	/PREMATURE RESP
	SAE
	FIX2RG+2000	/IN TARGET REG?
	JMP TRER7	/ILLEGAL SAC
	STC KEYREG
	ADD TIMER
	COM
	ADA
	MINSAC+2000	/MIN SAC DUR
	APO I		/SAC TOO FAST?
	JMP TRER8
	LDA
	TIMER
	STA
	SACDUR+2000	/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
	STIM1+1777	/STIM 1 VEC
	STC STIMUL
	LDA
	S1DUR+2000
	AZE I
	JMP .+5		/NO STIM1 PHASE
	JMP HOLREG
	JMP TRER9	/ILLEGAL SAC
	SKP		/S1 OVER - OK
	JMP TRER3	/PREMATURE RESP
	LDA I
	STIM2+1777	/STIM 2 VEC
	STC STIMUL
	LDA
	S2DUR+2000
	AZE I
	JMP .+5		/NO STIM2 PHASE
	JMP HOLREG
	JMP TRER9	/ILLEGAL SAC
	SKP		/S2 OVER - OK
	JMP TRER3	/PREMATURE RESP
	LDA I
	STIM3+1777	/STIM 3 VEC
	STC STIMUL
	LDA
	MINHOL+2000	/MIN S3 FIXAT.
	JMP HOLREG
	JMP TRER9	/BAD TARGET FIX.
	SKP		/OK!
	JMP HAVRSP	/HAVE RESP!
/TARGET FIXATION ACCEPTABLE - MAINTAIN
/STIM3 UNTIL RESP OCCURS OR TIMEOUT,
/WITH NO DEMAND THAT FIXATION BE HELD
	LDA
	TIMOUT
	COM
	ADA
	MAXRT+2000	/REMAINING TIME
	JMP HOLREG
	JMP .+3
	JMP TRER1	/TIMEOUT!
	JMP HAVRSP
/LEFT TARGET, SO REDEFINE IT AS NEW
/KEY REGION & KEEP WAITING FOR RESP:
/RE-ENTER HOLREG W/0 ZEROING TIMERS -
/RETURN AS ABOVE
/
	STC KEYREG
	JMP KEYREG+2	/RESUME HOLREG
/
/STIMULUS SEQUENCE OVER - SAVE RESP=0
/IF ERROR,=KEY>0 IF CORRECT, AND -N FOR
/TRIAL ERROR N, WHERE N=JMP ADDR OF ERR.
/
HAVRSP,	CLR
	IOB
	6312		/READ RESP
	SAE
	BUTCOR+2000	/CORRECT?
	CLR
	STA
	RESP+2000
	LDA
	TIMER
	STA
	RT+2000
STRLRJ,	HLT		/RETURN
/
/
/SECTION HANDLES VARIOUS TRIAL ERRORS.
/DISPLAYS ERROR MESSAGE, THEN
/SETS RESP=PC OF ERROR (<0) & RETURNS
/
TRER1,	SET I 4
	TEL1-4000
	JMP TRERR
TRER2,	SET I 4
	TEL2-4000
	JMP TRERR
TRER3,	SET I 4
	TEL3-4000
	JMP TRERR
TRER4,	SET I 4
	TEL4-4000
	JMP TRERR
TRER5,	SET I 4
	TEL5-4000
	JMP TRERR
TRER6,	SET I 4
	TEL6-4000
	JMP TRERR
TRER7,	SET I 4
	TEL7-4000
	JMP TRERR
TRER8,	SET I 4
	TEL8-4000
	JMP TRERR
TRER9,	SET I 4
	TEL9-4000
	JMP TRERR
TRERR,	LDA
	0		/JMP PC
	STA
	RESP+2000
	JMP SCOPE	/SHOW MESSAGE
	JMP STRLRJ
/
/TRIAL-ERROR MESSAGES
/
TEL1,	TEXT "RESP TOO LATE"
TEL2,	TEXT "MOVE TOO LATE"
TEL3,	TEXT "EARLY RESPNSE"
TEL4,	TEXT "OFF FIXATION "
TEL5,	TEXT "MOVE TOO SOON"
TEL6,	TEXT "MOVE TOO SLOW"
TEL7,	TEXT "MISSED TARGET"
TEL8,	TEXT "MOVE TOO FAST"
TEL9,	TEXT "LEFT TARGET  "
/
/PATTERN WORDS FOR CHAR DISPLAY
/
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
/



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