File X-READ3A

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

*20
	LMODE
/AUTOMATIC-LINE VERSION (NO Y):RECT MASK
/120 CPS SAMPLING
/NEW SW OPTIONS: 1 UP=DOUBLE PRECISION X
/SAMPLING. 2 UP=CALIB. ALT. LINES
	DATA=LDF 1
	DTEXT=LDF 2
	TABLES=LDF 3
	PROG0=LIF 0
	PROG1=LIF 1
	XSAMP=SAM 15
/JOB PARAMETERS
	SEGMNT 0
	*20
PGCODE,	313
SUBSES,	0
TEXTAP,	0
TEXBLK, 0
DATBLK,	0
QBLK,	-1
TOPLIN,	8
LINES,	4
SPACIN,	6
XCRIT,	2
LINEXL,	20
LINEXR,	22
	PMODE
MDT,	-1501		/120 CPS SAMPLES
C2000,	2000		/100 KHZ CLOCK
	LMODE
/THIS SECTION HANDLES INTERRUPTS.
/TWO POSSIBLE INTERRUPTS: RESP PANEL=END
/PAGE,UP A LINE, OR END "VERIFY"
/CLOCK INTERRUPT=RESAMPLE EYE-POSN
	*40
	0		/INTERRUPT PC
	STC ACSAVE
/SAVE AC AND 0000 BUT NOT L OR MQ.
/10&11 COUNT ELAPSED SECS.:120 SAMPS/SEC
	ADD
	STC SAVE0
	IOB
	6135		/CLSA
	APO I
	JMP PANEL	/CHECK PANEL INT
	XSK I 10	/ANOTHER SECOND?
	JMP .+5
	XSK I 11	/INCR SECONDS
	NOP
	SET I 10
	-170
/SAMPLE X SIGNAL (A-D 15) 
/COMPUTE TABLE LOOKUP FOR X, GIVEN YFIX
	LDA I
YFIX,	0		/FIXATION LINE
	SNS I 2		/SW 2 ON: USE
	SCR 1		/1 CAL/2 LINES
	ROR 4		/C(16)*256
	STC		/AD CDF 10 X-TAB
	XSAMP
	ADD C1000
	SCR 2
	ADD		/12-BIT AD X-POS
	STC
	PDP
	PMODE
	CDF 10		/IN PDP DF 1
	TAD I
	CDF
	LINC
	LMODE
	STC 17		/17 HOLDS X-POS
/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
	ADD 17
	APO I
	COM		/COMPARE X-CHANG
	ADD XCRIT	/WITH X CRIT.
	STC D
/"FIXING"=0: FIXATION; ELSE, MOVING
	SAE I
FIXING,	0
	JMP MOVING
	ADD D		/>0:NO X CHANGE
	APO
	JMP SACCAD	/FIXATION ENDS!
/FIXATION PERSISTS: INCREMENT FIXATION
/TIMER (REGISTER 14) ONLY UP TO 776
	LDA
	14
	SAE I
	776
	XSK I 14
/NOW RETURN TO DISPLAY IN PROGRESS.
RESTOR,	LDA
C40,	40
	BSE I
	6000		/FORM RETURN JMP
	STC RETURN
	SET I 0
SAVE0,	0		/RESTORE SUBR PC
	DJR
	LDA I
ACSAVE,	0		/RESTORE AC
	IOB
	6244		/RMF
	IOB
C6001,	6001		/ION
RETURN,	HLT		/RETURN JUMP
/
/CONTROL HERE WHENEVER FIXATION ENDS:
/ZERO SACCADE-TIMER (REGISTER 15), SET
/"FIXING" NON-ZERO, SAVE (XFIX,YFIX)
/
SACCAD,	SET I 15
	0		/INIT SACCADE TM
	ADD C2000
	STC FIXING	/NON-ZERO=MOVING
	ADD XFIX
	ROL 6
	ADD YFIX	/SAVE(XFIX,YFIX)
	JMP STORE
/INCREMENT SACCADE TIMER TO MAX OF 7
MORMOV,	LDA
	15
	SAE I
	7
	XSK I 15
	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 SAMPLES WITHIN FIXATION CRITERION.
/
MOVING,	LDA I
D,	0		/<0:STILL MOVING
	APO
	JMP MORMOV
/END OF MOVEMENT: NEW FIXATION BEGINS.
/STORE TIMES OF LAST FIXATION AND SACCAD
/AS DATA: BITS 0-2 SACCADE+3-11 FIXATION
	LDA 
	15
C303,	ROR 3
	ADD 14
	JMP STORE
	CLR
	STC FIXING	/FIXATION MODE
	SET I 14	/INIT FIX TIMER
	1
	ADD 17
	STC XFIX	/NEW XFIX
/SET LNFLAG NON-0 IF XFIX BEYOND MXR
	ADD XFIX
	ADA I
MXR,	0
	APO I
	STC LNFLAG	/LNFLAG SET>0
/CHECK FOR CHANGE TO NEXT FIXATION LINE
/(LNFLAG>0 AND XFIX<LINEXL)
	LDA I
LNFLAG,	0
	AZE I
	JMP RESET	/SAME LINE
	LDA
	XFIX
	ADA I
MXL,	0
	APO I
	JMP RESET
/NEXT LINE (UNLESS ON LAST): YFIX=YFIX+1
	LDA
	YFIX
	ADD ONE
	SAE
	LINES
	SKP
	JMP RESET	/LAST LN: SKIP
	STC YFIX
	STC LNFLAG	/CLR IF INC YFIX
	JMP SETXR	/SUBR RESETS MXR
/RESET LINE CONTROL WORD ARRAYS
RESET,	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
POSN,	0		/NO. CHARS TO
	COM		/LEFT OF WINDOW
	APO I		/TOO  FAR LEFT?
	JMP NOROOM
	STA I 4		/=CONTROL WORD
	LDA I
MWIDE,	-10		/-WINDOW WIDTH
	STC MWIDTH
	JMP DISPLA	/START NEW DISPL
NOROOM,	ADD MWIDE	/DECREASE WINDOW
	AZE I
	JMP .+3
	APO
	JMP .+3
	LDA I
	-1		/MIN W=1
	STC MWIDTH
C17,	COM
	STA I 4		/CONTROL WORD=-0
	JMP DISPLA
/
/SUBR SETS UP RETURN SWEEP DETECTORS FOR
/LINE HAVING D CHARS. MXR=-D+LINEXR &
/MXL=-LINEXL IF LINEXR+LINEXL+8<D;ELSE
/MXR=-3/4*D-1 & MXL=-D/4.
/
SETXR,	DJR		/PROTECT RJ
	LDA
	YFIX
	ADD ADLIN1
	STC 1		/AD-1 Y LINE PTR
	DTEXT
	CLR		/CLR LINK
	LDA I 1
	COM
	ADA I 1
	ROL I 1		/NO CHARS/LINE
	STC 2
	ADD LINEXR
	ADD LINEXL
	ADD C10
	COM
	ADD 2
	APO I
	JMP WIDLIN
	LDA
	2
	SCR 2
	ADD ONE
	COM
	STC MXL
	ADD 2
	SCR 2
	COM
	ADD 2
	COM
	JMP .+10	/USE UP DJR
WIDLIN,	LDA
	LINEXL
	COM
	STC MXL
	ADD 2
	COM
	ADD LINEXR
	STC MXR
	JMP
/
/CONTROL REACHES HERE WHENEVER INTERRUPT
/OCCURS FROM RESPONSE PANEL. IF TBLK=
/CALBLK, MEANS END "VERIFY"-GO TO "READ
/ELSE, ALREADY IN "READ": END OF PAGE IF
/LEFT BUTTON, SHIFT UP LINE IF RIGHT
/
PANEL,	IOB
	6311		/PANEL FLAG?
	JMP ERROR	/NO:SPURIOUS
/RECORD CURRENT FIX DATA
	LDA
	FIXING
	AZE
	JMP .+7
	ADD XFIX
	ROL 6
	ADD YFIX
	JMP STORE
	CLR
	JMP .+4
	LDA
	15
	ROR 3
	ADD 14
	JMP STORE
	CLR
	IOB
	6316		/READ&CLR PANEL
	SHD I
	0		/LEFT KEY?
	JMP NUPAGE
/SHIFT UP LINE: Y=MAX(0,Y-1)
	LDA
	YFIX
	ADD M1
	APO
	CLR
	STC YFIX
	JMP SETXR	/RESET MXR
	JMP RESET	/PREPARE NEW FIX
/HERE IF LEFT KEY: UNLESS TBLK=CALBLK,
/SIGNALS END-PAGE
NUPAGE,	LDA
	TBLK
	SAE
	CALBLK
	SKP
	JMP READ	/END "VERIFY"
	LDA I
	7777
	JMP STORE	/PAGE END-MARKER
/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 LAST PAGE? 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		/DATA FILE 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
	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		/RJ
	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 THAT
/(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
	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
	SET I 6
MLINES,	-10		/-LINES TO SHOW
	ADD		/STARTING LINE
	ADD ADLIN1
	STC 3		/AD-1 ST. LIN AD
	ADD
	ADD ADLIN2
	STC 4		/AD-1 ST.LIN.CON
	ADD
	MUL
	DY
	ADD YTOP
	STC Y		/INITIAL V.C.
NXLINE,	SET I 1
C776,	776		/=-2 HC CHAN 1
	LDA I 3
	AZE I		/LINAD=0:CONT ON
	JMP WRAPUP	/TOP OF DISPLAY
	STC 7		/AD-1/2 LINE TXT
	LDA I 4		/LINE C-WORD
	APO
	JMP SHOLIN	/<0: SHOW LINE
	JMP ERROR	/NEVER?
CHNXLN,	LDA I
DY,	-40		/LINE SPACING
	ADM
	Y		/Y FOR NEXT LINE
	XSK I 6		/ANOTHER LINE?
	JMP NXLINE
PGEXIT,	HLT		/RETURN
/
/SHOW LINE: FIRST CONTROL CHARS ARE
/SHOWN IN PERIPHERAL STATUS, THEN UP TO
/"WIDTH" IN WINDOW STATUS, AND THEN
/REMAINING ONES IN PERIPH. STATUS
/PERIPHERAL SPACES ARE SHOWN IF BLKDEF=
/4000; WONT BE IF BLKDEF=0
/
SHOLIN,	AZE I
	JMP WINDOW	/-0:NO LEFT PER.
	STC 5
	ADD MASKPW
	STA
	PATRN+2076	/MASK FOR BLANKS
NXCHP,	LDH I 7		/NEXT PERIPH CHR
	SHD I
BLKDEF,	4000
	JMP BLANK
	SHD I
	4300		/END OF LINE?
	JMP CHNXLN
/PERDEF=-32:ONLY NON-LETTER /DIGIT SHOWN
/IN PERIPHERY;PERDEF=0,ALL CHARS SHOWN
	ADA I
PERDEF,	-32	
	APO	
	JMP MASKCH	/LETTER: MASK IT
	LDH 7
	ADA I
	-57
	APO
	JMP ONPER
	ADA I
	-12
	APO
	JMP MASKCH	/DIGIT: MASK IT
ONPER,	LDH 7
	ROL 1
	ADD ADPWS	/FORM PW ADDRESS
	STC 2
	ADD Y
	DSC 2		/SHOW CHAR
	DSC I 2
	XSK I 1		/ADVANCE H.C.
	XSK I 5		/ANOTHER P-CHAR?
	JMP NXCHP
	JMP WINDOW
BLANK,	LDA I
	11
	ADM
	1		/SKIP BLANK CHAR
	XSK I 5		/ANOTHER P-CHAR?
	JMP NXCHP
	JMP WINDOW
MASKCH,	LDA I
Y,	0
	DSC I
MASKPW,	7777
	LDA I
	5
	ADM
ONE,	1		/SKIP 2ND PW
	XSK I 5		/ANOTHER P-CHAR?
	JMP NXCHP
/DONE WITH LEFT PERIPHERY. NOW DO WINDOW
/AFTER DISPLAYING FIXATION DOTS
WINDOW,	SET I 5
MWIDTH,	-0		/WIND WIDTH
	SET 2		/HOLD HC
	1
	LDA
	XFIX
	MUL I
	11
	ADD C4000	/CHAN 2
	STC 1
	ADD Y
	ADD C20
	DSC I
	77
	SET 1
	2		/RESTORE HC
	CLR
	STA
	PATRN+2076	/RESTORE BLANK
NXCHW,	LDH I 7
	SHD I
	4300		/END OF LINE?
	JMP CHNXLN
	ROL 1
	ADA I
ADPWS,	PATRN+1776	/PW AD IN LDF 2
	STC 2
	ADD Y
	DSC 2
	DSC I 2		/SHOW W-CHAR
	XSK I 1		/ADVANCE HC
	XSK I 5		/ANOTHER W CHAR?
	JMP NXCHW
/DONE WITH WINDOW: FINISH LINE IN
/PERIPHERAL MODE; 5 IS AT -0 AND HENCE
/WILL XSK UNTIL END OF LINE DETECTED
	CLR
	JMP NXCHP-3
/
/CONTROL PASSES HERE WHEN DISPLAY BEGAN
/AT NON-TOP LINE OF PAGE. NOW MUST RESET
/POINTERS 3 (LINADS) AND 4 (LINCONS)
/AND Y. CONTINUE DISPLAY AT TOP LINE
/
WRAPUP,	SET I 3
ADLIN1,	LINADS+1777
	SET I 4
ADLIN2,	LINCON+1777
	LDA I
YTOP,	361		/TOP LINE Y
	JMP NXLINE-1
/
/END OF PAGE DISPLAY SUBROUTINE.
/
/SUBROUTINE SETS UP PAGE DISPLAY.
/FILLS ARRAY "LINADS" WITH 1/2 WORD
/POINTERS-1/2 FOR EACH OF NEXT "LINES"
/OF TEXT, WITH EXTRA +0 AT END FOR WRAP-
/AROUND DISPLAY. SKIPS LEADING 57 ("/")
/AT BEGINNING OF EACH LINE.
/
/QUESTION MODE:
/WHEN DLINES INITIALIZED=-0 (THEN 6
/COUNTS LINES). END OF TEXT FOR EACH
/QUESTION SIGNALLED BY NON-"/" AT LINE
/START, FOLLOWED BY ANSWER, THEN CR.
/
SETPAG,	LDA
	0
	STC SETRET
	DTEXT
	ADD DLINES	/NO. TO DISPLAY
	COM
	STA
	MLINES
	STC 6
	SET I 7
PAGEPT,	6001		/PTR START PAGE
	SET I 3
	LINADS+1777	/LINE POINTERS
	SET I 4
	LINCON+1777	/LINE CONTRL WDS
CODLIN,	JMP NXTCH	/SUBR GETS NX CH
	JMP SETPAG+4	/RET.HERE BF FLO
	AZE I		/" " AC=NEXT CH.
	JMP ENDFIL	/END OF FILE
	SHD I
	5700		/START OF LINE?
	JMP NEWLN
/LINE DOESN"T BEGIN WITH "/": SHOULD BE
/QUESTION MODE. IF SO (6>0), 
/NEXT CHAR=DIAL-TAB (47),FOLLOWED BY
/ASCII ANSWER AND THEN CR. IF NOT:ERROR!
	SAE I
	47		/DIAL-TAB?
	JMP ERROR
	LDA
	6
	APO
	JMP ERROR
	AZE I		/MUST HAVE>0 LNS
	JMP ERROR
	COM
	STC MLINES	/MLINES=-C(6)
	JMP NXTCH
	JMP SETPAG+4	/BUFFER END
	JMP NXTCH	/ANSWER IN BUFFR
	JMP SETPAG+4	/CR NOT  "  "
	SAE I
	43		/CR?
	JMP ERROR
	JMP SETRET-4
/BEGINNING OF LINE OF TEXT
NEWLN,	LDA
	7
	STA I 3		/NEXT LINE PTR
	JMP NXTCH
	JMP SETPAG+4	/RESET BUFFER
	SAE I		/SKIP TO END OF
	43		/LINE=43
	JMP .-4
	ADD C7000	/EACH LINE INIT=
	STA I 4		/ALL PERIPH<<0
	XSK I 6		/ANOTHER LINE?
	JMP CODLIN
	LDA
	7
	STC ENDPAG	/SAVE END PTR
	STA I 3		/DUMMY LINAD=0
SETRET,	HLT		/RJ
/END OF FILE ENCOUNTERED: DECREASE NO.
/OF LINES TO BE DISPLAYED (NORMAL MODE)
/OR JMP "FINISH" (QUESTION-MODE).
/
ENDFIL,	ADD 6
	APO		/>-0:QUEST.-MODE
	JMP .+4
	AZE
	JMP ERROR	/>0:QST W/O ANSW
	JMP FINISH	/NO MORE QUESTS.
	COM
	ADD MLINES
	STC MLINES
	JMP SETRET-1	/RETURN
/
/SUBR INPUTS NEXT CHAR FROM TEXT FILE BY
/LDH I 7. CHECKS FOR TEXT POINTER=END OF
/TEXT BUFFER. IF AT END, PUSHES ENTIRE
/BUFFER DOWN SO THAT "PAGEPT" IS IN 1ST
/BUFFER BLOCK; THEN RETURNS CALL+1 WITH
/AC=0. ELSE RETURNS CALL+2 WITH AC=CHAR.
/
NXTCH,	SET 5
	0		/SAVE RJ
	LDA
	7
	SAE I
	7377		/7377=END BUFFER
	JMP NXTRET+1	/NOT END
	LDA
	PAGEPT
	BCL I
	6377		/BITS 2,3=BLOCK
	SCR 10		/=NO. SHIFT DOWN
	ADD TBLK	/NEW LOW TBLK
	JMP TEXTIN	/SUBR READS TEXT
	ADD PAGEPT
	BCL I
	1400		/RESET PAGEPT
	STC PAGEPT	/INTO 1ST BLOCK
NXTRET,	JMP 5		/RETURN CALL+1
	XSK I 5
	LDH I 7		/WITH AC=CHAR,
	JMP 5		/RETURN CALL+2
/
/SUBR TAKES AC=TBLK, STRIPS BITS 0-2,
/AND THEN READS IN 3 TBLKS (UNIT 0) INTO
/TEXT BUFFER (BLOCKS 0-2 LDF 2)
/
TEXTIN,	BCL I
C7000,	7000
	STC TBLK
	ADD
	STC TXIRET	/RJ
	STD
	JMP .-1		/WAIT IF BUSY
	AXO		/NO EXT.TAPE OPS
	DTEXT
	ADD C4000
	JMP TBLKIN	/1ST BLOCK IN
	LDA I
	5001
	JMP TBLKIN	/2ND BLOCK
	LDA I
	6002
	JMP TBLKIN	/3RD BLOCK
TXIRET,	HLT		/RJ
/
/SUBR TAKES MBLK FROM AC, ADDS TBLK
/TO IT, AND THEN READS BLOCK (UNIT 0)
/
TBLKIN,	ADA I
TBLK,	0
	STC .+2
	RDC
	0
	JMP
/
/END OF PAGE ENCODING ROUTINE
/
/SUBR INPUTS 1ST 3 BLOCKS OF TEXT FILE
/INTO BUFFER, TAKING TBLK FROM AC.
/SETS PAGEPT=6001 (SKIPS INITIAL "*20"
/LINE OF FILE) AND THEN CALLS "SETPAG".
/
NEWTEX,	STC D		/SAVE AC=TBLK
	ADD
	STC NEWRET
	ADD C6001
	STC PAGEPT
	ADD D
	JMP TEXTIN
	JMP SETPAG
NEWRET,	HLT		/RJ
/
/SUBR POSITIONS TAPE UNIT 0 AT TBLK=AC
/WITH "NO PAUSE" OPTION
/
TAPPOS,	STC TAPRET-1
	ADD
	STC TAPRET	/RJ
	STD
	JMP .-1		/WAIT IF BUSY
	LDA I
C10,	10
	AXO		/NO PAUSE
	CHK
	0
TAPRET,	HLT		/RJ
/
/ERROR ROUTINE. CONTROL ARRIVES HERE
/WHEN FATAL OPERATIONAL ERROR OCCURS.
/TYPES OUT "ERROR" AND HALTS WITH
/JMP-TO-PC INSTR. IN AC.
/
ERROR,	LDA
	0
	STC D
	SET I 12
	ERLABL-4000	/PTR TO "ERROR"
	PROG1		/LIF 1
	JMP MESSAG	/CR,CR,"ERROR"
	ADD D		/JMP PC IN AC
/
/SYSTEM MONITOR HERE. HALTS AND WHEN
/STARTED, RUNS NEW JOB
/
MONIT,	HLT
	LDA I
CALBLK,	270		/GET ADJ&CALIBR&
	JMP TAPPOS	/VFY TEXTS NO PS
/INITIALIZE "TYPE" FOR NO DISPLAY PAUSE
	CLR
	IOB
	6046		/DUMMY TLS INIT.
	ADD C456	/=SKP
	STC HOLDIS
/START CLOCK AT 120 CPS PULSE RATE
	LDA I
	100
	PDP
	PMODE
	CLEN
	TAD C2000	/2100=100 KHZ
	CLLR
	CLA
	TAD MDT
	CLAB
	LINC
	LMODE
/NOW READ IN PARAMETER VALUES FOR NEXT
/READING TASK.
/CTRL/C DURING INPUT RESTARTS AT MONIT
	DATA
	SET I 13
	PGCODE		/PGCODE FIXED
	SET I 12	/AD-1/2 PARAM
	LABEL1-4000	/LABELS (HF-WDS)
	SET I 6
	-13
PGET,	XSK I 13
	PROG1
	JMP MESSAG	/TYPE PARAM LABL
TYVAL,	LDA 13
	PROG1
	JMP DECPUT	/TYPE CUR VAL
	PROG1
	JMP GETDEC	/I3 DEC INPUT
	STC Y		/SAVE INPUT
	LDA 		/C(2003)=-4:
	2003		/INITIAL CR:KEEP
	ADD C4		/CURRENT VALUE
	AZE I
	JMP .+4
	LDA
	Y
	STA 13
	XSK I 6		/ANOTHER PARAM?
	JMP PGET
/NOW ACCEPT VECTOR INPUT FOR WINDOW SIZE
/,POS"N, AND PERIPHERY-TYPE. AFTER LABEL
/FOR EACH, INPUT 1-15 NUMBERS AS ABOVE,
/SEPARATED BY ",", WITH CR AFTER LAST.
	LDA I
	17		/AD-1 1ST VECTOR
	STA
	ADVEC+2000	/VECTORS IN LDF1
	SET I 16
	-3
VECTOR,	PROG1
	JMP MESSAG	/VECTOR LABEL
	PROG1
	JMP GETVEC	/INPUT
	XSK I 16
	JMP VECTOR
/PARAMETERS OBTAINED. COMPUTE YTOP AND
/PROCEED TO "ADJUST".
	LDA
	TOPLIN
	APO
	JMP ERROR	/CANT BE <0
	MUL I
M20,	-20
	ADA I
C361,	361
	STC YTOP
	ADD C40		/ENABLE 1/2-SIZE
C4,	ESF		/NO TTY INTERUPT
	JMP ADJUST
/
/THIS SECTION "RUNS" PAGE DISPLAY, 
/WINDOW CONTROL AND DATA ACQUISITION.
/
RUNPAG,	PROG1
	JMP PAGPAR	/FETCH VECTORS
	JMP STORE	/AC=INCR. NPAGE
	LDA
	MLINES
	COM
	JMP STORE
	LDA
	MWIDE
	COM
	JMP STORE
	LDA
	POSN
	JMP STORE
	LDA
	1
	JMP STORE
/INITIALIZE EYE-POSITION SAMPLERS SO
/THAT PROGRAM STARTS IN "MOVING" MODE 
/WITH LAST FIXATION AT (0,20). GIVES
/DUMMY (15,14) TIMING WORD AT TOP OF 
/DATA. ALLOWS IST WINDOW TO BE SET
/IMMEDIATELY.
INIT,	STC FIXING
	ADD C20
	STC XFIX
	STC YFIX
	STC 14
	STC 15
	STC LNFLAG
	JMP SETXR	/INITIAL MXR
	IOB
	6314		/CLEAR PANEL
DISPLA,	IOB
	6001		/ION
	JMP SHPAGE
	JMP .-1		/KEEP DISPLAYING
/
/THIS SECTION DISPLAYS 3 X 3 "X" PATTERN
/OVER PARAMETER-SELECTED DISPLAY AREA,
/PROCEEDING TO CALIBRATE WHEN SW 5 DOWN.
/FIRST READS IN TBLKS=270-272:3 LINES
/ADJUST PATTERN+16 LINES CALIBR/VERIFY,
/AND THEN (WITHOUT PAUSING) MOVES TAPE
/TO TEXT SOURCE (DOESN"T READ IT YET).
/
ADJUST,	LDA I
	3
	STC DLINES
	ADD CALBLK
	JMP NEWTEX
	ADD TEXBLK
	JMP TAPPOS
	LDA I
M1,	-1
	ADD LINES
	MUL
	SPACIN
	SCR 1
	MUL I
	-20
	STC DY
	STC PERDEF	/ALL TEXT
	IOB
	6314		/CLR PANEL
	JMP SHPAGE	/PATTERN ON
	SNS 5
	JMP CALIBR	/UNTIL SW 5 OFF
	IOB
	6311		/OR PANEL HIT
	JMP .-5
/
/CALIBRATION SECTION.
/THIS CALIBRATION IS 8 POINTS /LINE,
/WITH A SEPARATE X-CALIB. FOR EACH LINE,
/UNLESS SW 2 UP: THEN ONE CALIB/2 LINES
/
CALIBR,	LDA
	LINES
	ADD M20
	APO I		/0<LINES<17
	JMP ERROR
	ADA I
C20,	20
	APO
	JMP ERROR
	STC DLINES
	ADD C20-1
	STC PERDEF-1	/PERDEF CHECK ON
	ADD SPACIN
	APO
	JMP ERROR	/SPACING>0?
	AZE I
	JMP ERROR
	MUL I
	-20
	STC DY
	ADD M1
	ADD LINES
	MUL
	SPACIN
	ADD TOPLIN
	ADA I
	-37
	APO I		/LAST LINE<32?
	JMP ERROR
	LDA
	XCRIT		/XCRIT>0?
	APO
	JMP ERROR
	AZE I
	JMP ERROR
C1000,	LDA
	ENDPAG
	STC PAGEPT
	JMP SETPAG	/SETUP CALBLK
	LDA I
	-32
	STC PERDEF	/NORMAL PERIPH.
	ADD C4000
	STC BLKDEF	/WITH BLANKS
	SNS 4
	JMP VERIFY
/SET "TYPE" FOR DISPLAY THRU TTY OUTPUT
	ADD JMPCAL	/=JMP SHOCAL
	STC HOLDIS
/SAMPLE X AT "LINES" X 8 PTS; STORE
/SCALED X-VALUES VIA 17 AT 2420-2617
/S FIXATES EACH SQUARE SUPERIMPOSED ON
/CALIB. TEXT (ALL PERIPH.) AND WHILE
/FIXATING HITS PANEL KEY, THEN MOVES ON.
	ADD LINES
	SNS 2		/1/2 SW 2
	JMP .+3
	ADD ONE
	SCR 1
	COM
	STC 14
	SET I 17
	2417		/AD-1 X-STORE
	TABLES
	ADD YTOP
CLINE,	STC YCAL   	/V.C. CURRENT LN
	ADD C776
	STC XFIX	/H.C. CALIB PT.
/CR,LF IF CALIB. TYPEOUT (SW 0 ON)
	SNS 0
	JMP .+5
	SET I 12
	LINLAB-4000
	PROG1
	JMP MESSAG
	SET I 15
M10,	-10
CSPOT,	IOB
	6314		/CLEAR PANEL
	JMP SHPAGE
JMPCAL,	JMP SHOCAL	/AND CALIB. SQ.
	IOB
	6311		/DISPLAY UNTIL
	JMP .-4 	/PANEL HIT
/DONT SAMPLE UNTIL CLOCK INTERRUPT FOR
/AC SYNCHRONY
	IOB
	6135		/CLSA
	IOB
	6131		/CLSK
	JMP .-2
	XSAMP		/GET X-VOLTAGE
	ADD C1000
	SCR 2
	STC 11		/TEMP X
/TYPE X FOR EACH POINT IF SW 0 ON
/DISPLAY REMAINS ON THROUGH TYPE-OUT
	SNS 0
	JMP NOTYPE
	ADD 11
	PROG1
	JMP DECPUT	/TYPE X
	SET I 12
	CALLAB-4000	/" "
	PROG1
	JMP MESSAG
NOTYPE,	ADD 11
	TABLES
	STA I 17	/STORE X-VAL
	LDA I
	110		/CAL PT SPACING
	ADM
	XFIX		/H.C. NEXT PT.
	XSK I 15	/ANOTHER PT/LINE
	JMP CSPOT
	LDA
	DY
	SNS I 2		/SKIP LINE SW 2
	ADD DY
	ADD YCAL
	XSK I 14	/ANOTHER LINE?
	JMP CLINE
/READY FOR INTERPOLATION: EXECUTED LIF 3
	LIF 3
EXIT1,	JMP INTERP
/
	SEGMNT 3
	*20
/NOW FOR EACH L (L=0,LINES-1), SETUP A
/256-ELEMENT MATRIX FOR X-POSN AS
/FUNCTION OF X-VOLT.: FOR EACH VOLTAGE V
/(0,377 OCT) INTERPOLATE X-POS (0,70 O)
/AT 256*L+V IN PDP FIELD 1.
/2 LINES/INTERP SW 2 UP
INTERP,	LDF
	LDA
	LINES+2000
	SNS 2
	JMP .+4
	ADA I
	1
	SCR 1
	COM
	STC 11
	SET I 15
	417		/AD-1 X-VALUES
	SET I 16
	420		/AD X-VALS
	LDA I
	LDF 4		/INITIAL LDF=4
NEWLDF,	STC TABLDF
	LDA I
	2000
INTERX,	STC LOOKUP	/BEGIN CUR LDF
	ADD LOOKUP
	ADA I
	377
	STC 17		/TOP OF TABLE
	STC 6		/START X-POS=0
	SET I 14
	-7		/8-1 INTERVALS
INTX1,	LDA I 16
	COM		/FORM VOLT. DIFF
	ADA I 15	/NEXT INTERVAL
	APO
	JMP CALERR	/MUST BE>0
	AZE I
	JMP CALERR
	STC DV
	SET I 10	/INTERP. 8 PTS
	-10		/PER INTERVAL
	SET I 2		/AT 1/16,3/16,
	1		/...,15/16 *D
	ADD 2
INTX2,	MUL I   	/FORM NEXT POINT
DV,	0		/=N*DV/16
	SCR 4
	COM		/POSN REL.TO TOP
	ADA 15		/(LEFT)OF INTER.
	JMP TABFIL	/AND FILL DOWN
	XSK I 6		/NEXT X-POSN
	LDA I
	2
	ADM
	2		/NUMER. NEXT PT.
	XSK I 10	/ANOTHER PT/INT?
	JMP INTX2
	XSK I 14	/ANOTHER INTERV?
	JMP INTX1
	CLR		/FILL DOWN REST
	JMP TABFIL	/X=70 (RIGHTMOST
/END OF INTERPOLATION CURRENT TABLE.
/INCREMENT LOOKUP BY 400 (AND TABLDF IF
/NEEDED) AND DO NEXT TABLE.
	XSK I 11	/ANOTHER TABLE?
	SKP
	JMP CALERR+3	/CALIB. DONE
	XSK I 15	/POINTERS TO
	XSK I 16	/NEXT SET X-AVGS
	LDA I
	400
	ADD LOOKUP	/AD NEXT TABLE
	SAE I
	4000		/END CUR LDF?
	JMP INTERX	/DO NEXT TABLE
	ROL 1		/AC=1
	ADD TABLDF
	JMP NEWLDF	/NEW LDF,LOOKUP
/
CALERR,	PROG0
	DJR		/SAVE ERROR PC
	JMP ERROR
	PROG0
	JMP VERIFY	/CALIB DONE!!
/
/SUBROUTINE FILLS DOWN THRU ADR=AC
/(INCLUSIVE), SETTING EACH ELEMENT=C(6).
/STARTING FILL AD=C(17) IN LDF=TABLDF
/
TABFIL,	ADA I
LOOKUP,	0		/PARAM=AD TABLE
	STC FILEND	/LOWEST FILL ADR
TABLDF,	HLT		/LDF OF TABLE
	LDA
	6		/X POSN
	STA 17
	LDA I
	-1
	ADM
	17		/NEXT LOWER ADR
	COM
	ADA I
FILEND,	0		/DONE IF >-0
	APO I
	JMP		/DONE:RETURN
	DJR		/PROTECT RJ
	JMP TABFIL+4
/
/END INTERP. SEC.
/
	SEGMNT 0
	*EXIT1+1
/
/SUBR DISPLAYS "X"(XFIX,YCAL)
/
SHOCAL,	SET 1
	XFIX
	LDA I
YCAL,	0
	DSC I
	1463
	DSC I
	6314
	JMP
/
/"VERIFY" SECTION: PUTS WINDOW OF TEXT
/WHEREVER SUBJECT FIXATES;USES CALIBR.
/TEXT AND INHIBITS DATA STORAGE/OUTPUT.
/PANEL KEY PROCEEDS TO "READ" TASK. SW
/3 DOWN AT START SKIPS DIRECTLY TO "READ
/
VERIFY,	SNS 3
	JMP READ	/SKIP VERIFY
	LDA I
	JMP
	STC STORE+1	/INHIBIT WRITING
	LDA I
	-3		/USE 3-CHAR
	STC MWIDE	/WINDOW CENTERED
	ADD M1		/ON FIXATION PT.
	STC POSN
	ADD C4		/FIXING NON-0
	JMP INIT	/START DISPLAY
/
/THIS SECTION EXECUTES "READ" TASK. 
/
READ,	LDA I
	STA I 13	/DISINHIBIT
	STC STORE+1	/DATA WRITING
	STC 11
	SET I 10	/INITIALIZE
	-170		/TIMERS 10,11
	STA I
NPAGE,	0		/INIT.PAGE=0
	ADD C456	/RESET "TYPE" TO
	STC HOLDIS	/NO-DISPLAY MODE
/INITIALIZE PROG1 PTRS TO PARAM.-VECTORS
	DATA
	SET I 1
	2014
	ADD C17
	STA I 1		/14: 2020 UP
	ADD C20
	STA I 1		/15: 2040 UP
	ADD C20
	STA I 1		/16: 2060 UP
	LDA
	TEXBLK
	JMP NEWTEX	/FETCH TEXT
/POSITION DATA FILE (UNIT 1) AT DATBLK
/WITH NO PAUSE
	ADD DATBLK
	STC .+4
	ADD C10
	AXO		/NO PAUSE
	CHK U
	0
/WRITE PARAMETER HEADER BLOCK OUT AT
/BEGINNING OF DATA FILE
	DATA
	SET I 13
	2777		/START AT 3000
	SET I 12
	PGCODE-1	/PARAMETER ARRAY
	SET I 6
	-14
	LDA I 12
	STA I 13
	XSK I 6
	JMP .-3
	JMP RUNPAG	/RUN 1ST PAGE
/
/CONTROL REACHES HERE WHEN TEXT-READING
/COMPLETE. IF QBLK>=0, COMPREHENSION
/TEST IS TO BE GIVEN. SIGNALLED BY AN
/NPAGE=0 AFTER THE 7777. IF NO
/TEST, WRITE ANOTHER 7777 AND QUIT.
/BEFORE DOING EITHER, TYPE OUT TOTAL
/READING TIME IN SECS.& TOTAL LINES READ
/
QUESTN,	LDA
	QBLK		/>0:POSN TAPE
	APO I	        /W/NO PAUSE AT
	JMP TAPPOS	/QUEST. FILE
	SET I 12
	LABEL2-4000
	PROG1
	JMP MESSAG	/"TIME"
	ADD 11
	PROG1
	JMP DECPUT
	PROG1
	JMP MESSAG	/" SECS FOR "
/NO LINES READ=LINES*NPAGE IF TEXT ENDED
/WITH FULL PAGE(I.E.,MLINES=-0),ELSE=
/LINES*(NPAGE-1)-MLINES
	ADD MLINES
	AZE
	ADD LINES
	COM
	STC D
	ADD NPAGE
	MUL
	LINES
	ADD D
	PROG1
	JMP DECPUT
	PROG1
	JMP MESSAG	/"LINES"
/NOW DO QUESTIONS
	STC 10		/COUNT CORRECTS
	STC 11		/COUNT QUESTIONS
	COM		/DLINES=-0 FOR
	STC DLINES	/"SETPAG" Q-MODE
	ADD QBLK
	APO
	JMP FINISH	/NO QUESTIONS
	JMP NEWTEX	/FETCH Q-FILE
	LDA I
	-40
	STC DY		/DOUBLE SPACING
	ADD C4000
	STC BLKDEF
	ADD ONPER-5
	STC PERDEF-1	/ALL CHARS SHOWN
	ADD C303
	STC YTOP
	JMP STORE	/NPAGE=0
/QUESTION-FILE FORMAT: ANY NUMBER OF
/TEXT LINES FOR DISPLAYING EACH QUESTION
/AND ALTERNATIVE ANSWERS. FOLLOWING CR
/AFTER LAST ALTERNATIVE SHOULD BE THE
/ANSWER RATHER THAN "/": LEFTMOST KEY
/CORRESPONDS TO "A",NEXT TO "B",ETC.
/AFTER CORRECT ANSWER (1 CHAR), HAVE
/ANOTHER CR. THEN TEXT FOR NEXT QUESTION
/ETC, WITH 0 AS USUAL = END FILE.
/
NXQST,	IOB
	6314		/CLEAR PANEL
	JMP SHPAGE	/DISPLAY 
	IOB
	6311		/RESP YET?
	JMP .-3
	CLR
	IOB
	6312		/READ RESP
/HAVE RESP IN AC: COUNT ROTATIONS OF AC
/UNTIL RESP BIT IN BIT 2 (LEFTMOST RESP)
	SET I 1
	1		/COUNTS ROTS.
	SAE I
	1000
C456,	SKP		/NOT YET:ROTATE
	JMP .+4
	XSK I 1
	ROL 1
	JMP .-6
/1 NOW HOLDS ASCII RESP CODE. 7 ENDS UP
/AT LAST CR BEFORE TAB&ANSWER (SHPAGE)
/COMPARE THEM; IF CORRECT, INCR. 10.
/SAVE CORECT&OBTAINED RESPS IN LEFT HALF
/AND RIGHT HALF OF NEXT DATA WORD.
	LDH I 7		/SKIP TAB=47
	LDH I 7		/LOAD ANSWER
	SHD 
	4001		/RIGHT HALF 1
	XSK I 10	/INC.NO.CORRECT
	XSK I 11	/" " QUESTIONS
	ROL 6		/CORRECT TO LH
	ADD 1		/OBTAINED LH
	JMP STORE
	LDA
	ENDPAG
	STC PAGEPT
	JMP SETPAG	/ENCODE NEXT Q
	JMP NXQST	/DO NEXT ONE
/NOW WRITE FINAL END-MARKER (7777) -
/WILL BE THIRD IF NO QUESTIONS
FINISH,	LDA I
	7777
	JMP STORE
/BEFORE QUITTING, MUST WRITE OUT LAST
/DATA MBLK NOT YET BUFFERED OUT. ONLY
/IF LAST END-MARKER TRIGGERED BUFFER,
/WON"T NEED TO DO THIS.
	LDA
	13
	BSE I
	7400		/WILL BE 7777
	AZE I		/IFF END MBLK
	JMP WDONE	/IN PROG:WAIT
/NOT YET OUTPUT: WRITE CURRENT MBLK
	STD
	JMP .-1
	CLR
	JMP WRITE
WDONE,	STD
	JMP .-1
/FINALLY TYPE OUT NO QUESTIONS/NO.CORREC
/LAST MESSAGE INCLUDED "COMPREHENSION"
	CLR
	ADD 10
	PROG1
	JMP DECPUT	/NO.CORRECT
	PROG1
	JMP MESSAG	/" OF"
	ADD 11
	PROG1
	JMP DECPUT	/NO.QUESTIONS
ENDJOB,	JMP MONIT	/DONE!!
/
/SECTION HANDLES DIVERSION FROM TYPE
/(PROG1): DISPLAYS PAGE & CALIB. PT. IF
/HOLDIS=JMP SHOCAL (BUT NEITHER IF =SKP)
/WHENEVER TTY BUSY.
/
HOLDIS,	HLT		/=SKP/JMP SHOCAL
	JMP SHPAGE
	PROG1
	JMP TYPE+3	/RETURN TO TSF
/
/FOLLOWING SUBROUTINES AND OUTPUT LABELS
/FIT INTO PROG1 (LIF 1) BELOW THE 2-BLOK
/DATA OUTPUT BUFFER.20-77:VECTOR STORAGE
/
	SEGMNT 1
	*100
/SECTION CALLED BY "RUNPAG" EACH TIME
/PAGE OF TEXT RUN: SETS WINDOW SIZE,POSN
/AND PERIPHERY-COND.FROM THEIR VECTORS
/AT 20,40,60 VIA (15,16,17).=5000,RESET
/TO START OF VECTOR.
/
PAGPAR,	LDF
	LDA I 15
	SAE I
	5000
	JMP .+4
	SET I 15
	17
	JMP .-6
	COM
	STA
	MWIDE+2000
	LDA I 16
	SAE I
	5000
	JMP .+4
	SET I 16
	37
	JMP .-6
	STA
	POSN+2000
	LDA I 17
	SAE I
	5000
	JMP .+4
	SET I 17
	57
	JMP .-6
	BCL I
	3777
	STA
	BLKDEF+2000
	LDA 17
	STA
	2001
	APO I
	COM
	STA
	PERDEF+2000
	LDA I
	1
	ADM
	NPAGE+2000	/INCR NPAGE
	PROG0
	JMP RUNPAG+2	/RJ,AC=NPAGE
/
/SUBR TYPES AC AS SIGNED DECIMAL INTEGER
/
DECPUT,	STC 4		/SAVE ARG
	ADD
	STC DECRET	/RET AD
	ADD 4
	APO I
	JMP .+6		/>0:NO "-"
	COM
	STC 4		/ABS(ARG)
	ADD C255
	JMP TYPE	/"-"
	ADD 4
	SET I 2
	260		/COUNT DIGIT
	ADA I
	-144		/HUNDREDS
	APO
	JMP .+3
	XSK I 2		/INCR. DIGIT
	JMP .-5
	AZE I		/-0?
	JMP .-3		/KEEP GOING
	ADA I
	144		/RSETORE REM.
	STC 4
	ADD 2
	JMP TYPE	/HUNDREDS
	SET I 2
C260,	260
	ADD 4
	ADD MD10
	APO
	JMP .+3
	XSK I 2
	JMP .-4
	AZE I
	JMP .-3
	ADD D10
	STC 4
	ADD 2
	JMP TYPE	/TENS
	ADD C260
	ADD 4
	JMP TYPE	/UNITS
	PROG0		/RETURN IN PROG0
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. 
/AN INITIAL CR LEAVES AC=0&3=-4 (LIF 1)
/ILLEGAL CHARS/SIGN GENRATE JMP "ENTERR"
/
GETDEC,	LDA
	0
	STC GETRET	/R.J.
	LDA I
	240
	JMP TYPE	/SPACE
	JMP INPUT
	ADD ASCII
	SAE I
	215		/LAST CHAR=CR?
	JMP ENTERR
	LDA
	4
	PROG0		/RETURN PROG0
GETRET,	HLT		/WITH AC=VAL
/
/SUBR TAKES SIGNED DECIMAL INTEGER FROM
/TTY. LEAD BLANKS IGNORED, LEAD 0"S MAY
/BE SUPPRESSED. ECHOES ALL NON-CR CHARS.
/AND EXITS WHEN NON-DIGIT APPEARS (CHAR
/LEFT IN ASCII), WITH SIGNED VAL IN 4.
/
INPUT,	LDA
	0
	STC INPRET
	STC 4		/BUILDS VALUE
	SET I 2
	-2		/INDEXES SIGN
	SET I 3
	-4		/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
	XSK I 2		/SIGN FLAG
NEXDIG,	JMP INCHAR
	ADA I		/DIGIT?
	-257
	APO
	JMP HAVEIT	/NO:RETURN
	ADA I
MD10,	-12		/DIGIT?
	APO I
	JMP HAVEIT
	ADD C11		/RESTORE DIGIT
	AZE I
C11,	CLR		/-0 TO +0
	STC 5
	XSK I 3		/>3 DIGITS?
	SKP
	JMP HAVEIT
	ADD 4
	MUL I
D10,	12		/DEC. SHIFT LEFT
	ADD 5
	STC 4
	JMP NEXDIG
HAVEIT,	LDA
	4
	XSK I 2		/SIGN?
	SKP
	COM
	STC 4
INPRET,	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?
	JMP .+3
	PROG0
	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
	PROG0		/REDO ENTRY
	JMP TYVAL
/
/INPUT FOR VECTOR-PARAMETERS: SAME INPUT
/BUT NULL ENTRIES AREN"T ALLOWED, ","
/SEPARATES MULTIPLE ENTRIES,AND ERRORS
/RESTART ENTIRE VECTOR INPUT. VECTOR AT
/C(ADVEC)+1 UP.
/
GETVEC,	SET I 1
	-17		/MAX 15/VECTOR
	SET I 15
ADVEC,	0
	JMP INPUT	/GET & STORE
	ADD 4
	STA I 15	/VECTOR ENTRY
	LDA I
	4
	ADD 3		/NULL ENTRY?
	AZE I
	JMP VECERR
	LDA
	ASCII		/LAST INPUT CHAR
	SHD I
	5400		/","?
	JMP NXITEM	/YES:GET NEXT N
	SAE I
	215		/CR?
	JMP VECERR
VECFIN,	LDA I
	5000		/END VECTOR=5000
	STA I 15
	LDA I
	20
	ADM
	ADVEC		/AD-1 NEXT VECT.
	PROG0
	JMP VECTOR+4	/RETURN
NXITEM,	XSK I 1		/ROOM 4 1 MORE?
	JMP ADVEC+1
	JMP VECFIN	/NO:CLOSE VEC.
/
/CONTROL HERE IF ERROR DURING VECTOR
/INPUT. TYPES ?,CR,= & RESTART " ".
/
VECERR,	LDA I
	277
	JMP TYPE	/?
	JMP CRLF
	ADD C275
	JMP TYPE	/=
	PROG0
	JMP VECTOR+2	/RESTART VECTOR
/
/SUBR TYPES OUT MESSAGE FROM PACKED
/ASCII CODE - 43 GENERATES CR&LF, AND 00
/TERMINATES OUTPUT. ADDRESS OF SOURCE
/POINTED (+1/2) BY 12 FROM PROG0;HENCE
/MUST BE READ AND RETURNED THERE.
/
MESSAG,	LDA
	0
	STC MESRET	/R.J.
	PDP
	PMODE
	TAD 12		/PASS PROG0(12)
	LINC		/W/O DIFF LDF
	LMODE
	STC 12
NXCHAR,	LDH I 12
	AZE I
	JMP C100+1	/SETUP RETURN
	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
	ADD 12		/PASS PTR BACK
	PDP		/TO 1 IN PROG0
	PMODE
	DCA 12
	LINC
	LMODE
	PROG0		/RETURN IN PROG0
MESRET,	HLT		/R.J.
/
/SUBR GENERATES CR&LF:CALLED ONLY FROM
/PROG1, WHERE IT RESIDES
/
CRLF,	LDA
	0
	STC CARRET	/R.J.
	ADD C215
	JMP TYPE	/CR
	LDA I
	212
	JMP TYPE	/LF
CARRET,	HLT		/RETURN
/
/SUBR TYPES OUT 8-BIT ASCII AC
/CALLED FROM & RESIDES IN PROG1. HAS 
/SPECIAL "DISPLAY" MODE (WHEN HOLDIS=
/JMP SHPAGE) IN WHICH CURRENT PAGE &
/CALIB. PT. DISPLAYED WHILE TSF-ING.
/
TYPE,	SET 13
	0		/RJ
	STC 14		/SAVE ASCII
	IOB
	6041		/TSF
	JMP .+7		/BUSY:WAIT
	LDA
	14		/RECOVER &
	IOB
	6046		/TYPE CHAR
	CLR
	JMP 13		/RJ
	PROG0
	JMP HOLDIS	/DISPLAY & WAIT?
/
/TEXT (PACKED ASCII) PARAMETER LABELS
/
ERLABL,	4343
	TEXT *ERROR*
LABEL1,	4343
	TEXT *SUB-SESS ID=*
	0043
	TEXT *TEXT TAPE  =*
	0043
	TEXT *TEXT BLOCK =*
	0043
	TEXT *DATA BLOCK =*
	0043
	TEXT *QUEST.BLOCK=*
	0043
	TEXT *TOP LINE NO=*
	0043
	TEXT *NO.OF LINES=*
	0043
	TEXT *LN SPACING =*
	0043
	TEXT *X-CRITERION=*
	0043
	TEXT *LEFT LN POS=*
	0043
	TEXT *RIGHT "  " =*
	0043
	TEXT *WINDOW SIZES*
	4375
	0043
	TEXT *WINDOW POSNS*
	4375
	0043
	TEXT *PERIPHERAL CONDS*
	4375
	0000
LABEL2,	4343
	TEXT *TIME=* 
	TEXT * SECS. FOR *
	TEXT * LINES*
	4303		/CR,*C*
	TEXT *OMPREHENSION=*
LABEL3,	TEXT * OF  *
LINLAB,	4300		/CR
CALLAB,	4000		/" "
/END OF PROG1 SECTION. 3000-4000 THIS
/SEGMENT USED FOR DATA OUTPUT BUFFERING.
/
/SEGMENT 2: 1ST 3 BLOCKS TEXT BUFFERING
/(4000-5377). THEN PATTERN WORDS (5400-
/5577). THEN LINE ADRESS AND LINE-CONTRL
/WORDS FOR DISPLAY (5600 UP)
/
/END OF PROG1 SECTION. 3000-4000 THIS
/SEGMENT USED FOR DATA OUTPUT BUFFERING.
/
/SEGMENT 2: 1ST 3 BLOCKS TEXT BUFFERING
/(4000-5377). THEN PATTERN WORDS (5400-
/5577). THEN LINE ADRESS AND LINE-CONTRL
/WORDS FOR DISPLAY (5600 UP)
/
	SEGMNT 2
	*1400
/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
/
/LINE ADDRESS POINTERS (1/2 WORD).UP TO
/16 OF THEM + 1 EXTRA FOR WRAP-UP
/
LINADS,	0
	*.+20
/LINE CONTROL WORDS: 16 MAX
LINCON,	0



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