File CLUTCHA

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

*20
	PMODE
	*20
/PARAMETERS OF OPERATION: MEASURED
/IN NUMBERS OF REFRESH CYCLES: WHEN
/REFRESH(=-RFRESH)=144 (1 MSEC),
/TIMES ARE MEASURED IN MSECS.
/
PAUSE,	764		/NOW=1/2 SEC.
/LENGTH OF INTERTRIAL INTERVAL: FIXATION
/DOTS ON THROUGHOUT EXPT EXCEPT HERE.
/MEASURED FROM OFFSET OF POSTMASK.
/
AFTER,	764		/NOW=1/2 SEC.
/POSTMASK: DISPLAYED AFTER CHAR DISPLAY
/UNTIL S RESPONDS (10-KEY PANEL) AND
/THEN FOR ADDITIONAL "AFTER" COUNTS
/
/TO CHANGE POSTMASK PATTERN WORDS, PUT
/DESIRED ONES (NOW 7777 7777) INTO
/LOCATIONS PATRN-2 AND PATRN-1
/
BEFORE,	144		/NOW=1/10 SEC.
/PREMASK (USUALLY BLANK) ON (WITH FIXATN
/ION DOTS UNTIL S HITS "READY" AND THEN
/FOR ADDITIONAL "BEFORE" COUNTS.
/
/TO CHANGE PREMASK FROM BLANK, FILL
/LOCATIONS PATRN+100 & PATRN+101 WITH
/DESIRED PATTERN WORDS FOR PREMASK
/
M50,-50
K7,	7
TEMP,	0
R1,	0
R2,	0
R3,	0
INDEX6,	0
RNDM3,	0
RNDM2,	0
ADTIMS,	TIME1		/AD TIME CONDS.
ADCHRS,	CHAR1		/AD CHAR CODES
RNDM1,	RNDM
SH1,	0
SH2,	0
SH3,	0
SHUFEL,	SHUFL
RMNDR,	RMNDRX
TIMER,	0
DX,	24		/POSN SPACING
CHAR,	0
IRX,	IR
RNX,	RN
NTRIAL,	0
TIME,	0
TRTYPE,	0
KEY,	0
CHARS,	12		/NO. CHARS/COND
POSNS,	5		/NO. DISP POSNS
TIMES,	3		/NO. TIME CONDS
ADSDIF,	RESP1-CHAR1
C40,	40
/SUBR TYPES OUT AC (LESS THAN 100)
/AS 2 DIGIT DECIMAL NUMBER PLUS SPACE
DECPUT,	0
	DCA 0
	TAD C260
	DCA TIMER
	TAD 0
	TAD MD10
	SPA
	JMP .+3
	ISZ TIMER
	JMP .-4
	TAD C272
	DCA 0
	TAD TIMER
	JMS TYPE
	TAD 0
	JMS TYPE
	TAD C240
	JMS TYPE
	JMP I DECPUT
C240,	240
MD10,	-12
C260,	260
C272,	272
/SUBR TYPES CHAR FROM AC
TYPE,	0
	TLS
	TSF
	JMP .-1
	CLA
	JMP I TYPE
/SUBR GIVES CR+LF
CRLF,	0
	TAD C212
	JMS TYPE
	TAD C215
	JMS TYPE
	JMP I CRLF
C212,	212
C215,	215
/SUBR STARTS CLOCK AT 1OO KHZ RATE
CLOCK,	0
	CLA
	CLLR
	TAD C2100
	CLLR
	CLA
	JMP I CLOCK
C2100,	2100
/SUBR PAUSES UNTIL RFRESH SECS*10^-5
DELAY,	0
	CLCA
	CIA
	TAD RFRESH
	SPA SNA CLA
	JMP I DELAY	/DONE WAITING
	JMP DELAY+1	/KEEP WAITING
RFRESH,	144		/REFRESH RATE
/SUBR DISPLA SHOWS FIXATION POINTS
/AND KEY CHAR IN KEY POSN
/CHAR=40 IS THE PREMASK CODE:
/(NORMALLY BLANK:NO PREMASK)
/CHAR=0 IS THE POSTMASK CODE (NORMALLY
/=7777S:FULL POSTMASK)
DISPLA,	0
	JMS CLOCK	/START CLOCK
	LINC
	LMODE
	SNS I 0
	ADD C200	/CHAR SIZE: SW 0
	ESF		/1/2-SIZE CHARS
	SET I 1
X0,	374		/FIXATION CENTER
	LDA I
	20		/LINE ABOVE CHAR
	SNS I 0
	ROL 1		/DOUBLE IF FULL
	ADD VERCO
	DSC I
FIXAT1,	400		/LEFT FIX.N PW
	DSC I
FIXAT2,	4		/RIGHT FIXN. PW
	SET 1
	X0
	LDA I
	-20		/LINE BELOW CHAR
	SNS I 0
	ROL 1		/DOUBLE IF FULL
	ADD VERCO
	DSC I
FIXAT3,	1000
	DSC I
FIXAT4,	10
	LDA
	DX
	MUL I
KEYPOS,	0
	ADD IHORCO
	STC 1
	ADD CHAR
	ROL 1
	ADA I
	LMODE
/CORE MAP: MAINLINE PROGRAM IN LIF 0.
/TELETYPE I/O SUBROUTINES IN LIF 1 UP TO
/2777. 2-BLOCK DATA BUFFER IN LDF 1 3000
/TO 3777. 3-BLOCK TEXT BUFFER IN LDF 2
/4000-5377. DISPLAY PATTERN WORDS IN LDF
/2 5400-5577. DISPLAY CONTROL CONSTANTS
/IN LDF 2 5600-5777. EYE-POSITION LOOKUP
/TABLES IN LDF 3: Y TABLES 6000-6377;
/X-TABLES 6400-6777. CALIBRATION WORK
/AREA ABOVE TABLES IN LDF 3.
	DATA=LDF 1
	DTEXT=LDF 2
	TABLES=LDF 3
	PROG0=LIF 0
	PROG1=LIF 1
	YSAMP=LSW
	XSAMP=RSW
/FOR DEBUGGING, XSAMP=RSW/SAM 4, YSAMP=
/LSW/SAM 0; FOR EXPTS, XSAMP=SAM 17,
/YSAMP=SAM 16
/
/JOB PARAMETERS STORED HERE: ARE WRITTEN
/OUT AS HEADER ON DATA FILES
	SEGMNT 0
	*20
PGCODE,	1111		/PROGRAM CODE
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
POSN,	0		/REL. WINDOW POS
QBLK,	-1		/QUESTION BLOCK
NPAGE,	0		/DISPLAY PAGE NO
/
	PMODE
MDT,	-144		/10 MSEC/SAMPLE
C3000,	3000
	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
/"POSN"  : POSITION OF LEFT WINDOW EDGE
/	   W/R/T FIXATION PT: -N MEANS
/	   N TO LEFT,+N N TO RIGHT
/"QBLK"  : QUESTION TBLK:<0=NO QUESTIONS
/
/THIS SECTION HANDLES INTERRUPTS.
/TWO POSSIBLE INTERRUPTS: ON RESP.PANEL,
/SUBJECT SIGNALS END OF PAGE/END VERIFY.
/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. EACH CLOCK INTER-
/RUPT IS COUNTED BY 10&11.
	ADD
	STC SAVE0
	IOB
	6135		/CLSA
	APO I		/<0:CLOCK OFLOW
	JMP PANEL	/CHECK PANEL INT
	XSK I 10	/ANOTHER SECOND?
	JMP .+5
	XSK I 11	/INCR SECONDS
	NOP		/MAX=1023 SECS.
	SET I 10
	-144		/100 SAMPLES/SEC
/SAMPLE Y AND X SIGNALS (A-D 16 & 17)
/COMPUTE TABLE LOOKUP FOR EACH OF THEM
	TABLES		/LDF FOR LOOKUP
	YSAMP		/GET Y-VOLTAGE
	ADD C1000
	SCR 2		/INTO (0,377)
	ADD C2000	/INTO VOLT-ADDR.
	STC 16		/Y-POINTER
	XSAMP		/GET X-VOLTAGE
	ADD C1000
	SCR 2
	ADD C2400	/X VOLT-ADDR.
	STC 17		/X-POINTER
/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 DISPLAY IN PROGRESS.
RESTOR,	LDA
C40,	40
	BSE I
	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
C6001,	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
/WHEN NEW FIXATION POINT ESTABLISHED,
/CURRENT DISPLAY NOT COMPLETED, BUT
/RATHER RESTARTED AT "YFIX" LINE.
/NOW RESET LINE CONTROLS IN TEXT LDF.
	DTEXT
	SET I 4
	LINCON+1777
	SET 6
	MLINES
	ADD C7000	/EACH LINE SET
	STA I 4		/TO ALL PERIPH.
	XSK I 6
	JMP .-2
	LDA
	YFIX
	ADD ADLIN2	/=AD-1 WINDOW
	STC 4		/LINE
	ADD XFIX
	ADA I
MLW,	0		/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
NOROOM,	ADD MWIDE	/DECREASE WINDOW
	STC MWIDTH
	COM
	STA I 4		/CONTROL WORD=-0
	JMP DISPLA
/
/CONTROL REACHES HERE WHENEVER INTERRUPT
/OCCURS FROM RESPONSE PANEL.
/THIS SIGNALS END OF PAGE, AND TWO END-
/MARKERS (7777) ARE STORED IN DATA FILE.
/THEN THE NEXT PAGE (IF ANY) IS RUN.
/IF DURING "VERIFY", THIS SIGNALS 
/PROCEED TO "READ" TASK.
/
PANEL,	IOB
	6311		/PANEL FLAG?
	JMP RESTOR	/NO:SPURIOUS
	IOB
	6314		/CLEAR FLAG
	LDA
	TBLK
	SAE		/IN "VERIFY" IF
	CALBLK		/TBLK=CALBLK
	SKP
	JMP READ
	LDA I
	7777
	JMP STORE
	LDA I 
	7777
	JMP STORE
/NOW CHECK IF THERE"S MORE OF TEXT.
	LDA I
DLINES,	0
	ADD MLINES	/LAST PAGE DONE
	AZE 		/IF MLINES<LINES
	JMP QUESTN	/DO QUESTIONS
/STILL MIGHT BE END OF TEXT: FETCH NEXT
/PAGE TO SEE.
	LDA I
ENDPAG,	0		/PTR END CURR PG
	STC PAGEPT
	JMP SETPAG	/GET NEXT PAGE
	ADD MLINES	/0 LINES:DONE
	AZE I
	JMP QUESTN	/DONE!DO QUESTNS
	JMP RUNPAG	/DO NEXT PAGE
/
/SUBR STORES AC VIA 13 INTO DATA BUFFER;
/WHENEVER END OF MBLK REACHED, ITS
/WRITTEN OUT VIA THE "NO PAUSE" AXO OPT.
/
STORE,	DATA		/DTA LDF
	STA I 13	/=JMP IF INHIBIT
	LDA
	13
	BSE I
	7400		/WILL BE 7777
	AZE		/IFF END MBLK
	JMP		/NOT END:RETURN
/END MBLK: WRITE IT UNIT 1 & INCR DATBLK
	STD		/HAVE TIMING ERR
	JMP ERROR	/IF IN PROGRESS
WRITE,	ADD 13		/CONVERT TO ABS.
	BCL I		/ADDR.BEGIN.MBLK
	377		/=3000 OR 3400
	TMA
	LDA I
	30		/ENABLE EX AD &
	AXO		/NO PAUSE OPTION
	LDA
	DATBLK
	STC .+2
	WRC U		/START WRITING
	0
	ADD		/SAVE RET JMP
	STC STORET
	XSK 13		/IF LAST MBLK OF
	JMP .+3		/BUFFER, RESET
	SET I 13	/13 TO AD-1 1ST
	2777		/BUFFER MBLK
	ADD ONE
	ADM
	DATBLK		/INCR.FOR NEXT
	SAE I
	1000
STORET,	HLT		/R.J.
	JMP ERROR	/NO WRITE-AROUND
/
/SUBROUTINE DISPLAYS PAGE OF TEXT =
/"MLINES" OF TEXT, USING THE ARRAY OF
/TEXT-LINE POINTERS AND LINE CONTROL
/WORD ARRAYS. CONTROL=0 MEANS LINE NOT
/SHOWN, BUT ITS LEFT AND RIGHT MARGINS
/ARE MARKED. CONTROL<0 (EVEN -0) MEANS
/(UP TO) -CONTROL CHARS SHOWN LEFT OF
/WINDOW (IF ANY), FOLLOWED BY WINDOW
/AND THEN (IF ANY) REMAINING CHARS IN
/PERIPHERAL DISPLAY CONDITION.
/ALWAYS BEGINS DISPLAYING LINE NO. L,
/WHERE L=MIN(YFIX,-1-MLINES)
/
SHPAGE,	LDA
	0
	STC PGEXIT	/SETUP RETURN
	DTEXT		/TEXT,PWS,CONTRL
	ADD MLINES
	ADD YFIX
	APO I
	JMP TOOLOW	/BEGIN BOTTOM LN
	AZE I		/-0: " " "
	JMP TOOLOW
	LDA
	YFIX		/BEGIN "YFIX" LN
	JMP TOOLOW+4
TOOLOW,	LDA I
	1
	ADD MLINES
	COM
C4000,	STC		/TEMP
	SET I 6
MLINES,	-10		/-LINES TO SHOW
	ADD		/STARTING LINE
	ADD ADLIN1	/=LINADS-1
	STC 3		/AD-1 ST. LIN AD
C2000,	ADD
	ADD ADLIN2	/=LINCON-1
	STC 4		/AD-1 ST.LIN.CON
	ADD
	MUL
	DY
	ADD YTOP
	STC Y		/STARTING Y V.C.
NXLINE,	SET I 1
M2,	-2		/STARTING H.C.
	LDA I 3
	AZE I		/LINAD=0:GO TO
	JMP WRAPUP	/TOP OF DISPLAY
	STC 7		/AD-1/2 LINE TXT
	LDA I 4		/LINE C-WORD
	APO
	JMP SHOLIN	/<0: SHOW LINE
	ADD Y		/=0: SHOW MARGNS
	DSC I
	7777		/LEFT MARGIN
	SET I 1
	772
	DSC I
	7777		/RIGHT MARGIN
CHNXLN,	LDA I
DY,	-40		/LINE SPACING
	ADM
	Y		/Y FOR NEXT LINE
	XSK I 6		/ANOTHER LINE?
	JMP NXLINE
PGEXIT,	HLT		/RETURN
/



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