File FLXDISPX

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

*20
	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
/
/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
NXCHP,	LDH I 7		/NEXT PERIPH CHR
	SHD I
BLKDEF,	4000
	JMP BLANK
	SHD I
	4300		/END OF LINE?
	JMP CHNXLN
/PERDEF=-33:ONLY NON-LETTER CHARS SHOWN
/IN PERIPHERY;PERDEF=0,ALL CHARS SHOWN
	ADA I
PERDEF,	-33		/SHOW NON-LETTER
	APO		/CHARS IN PERIPH
	JMP MASKCH	/LETTER: MASK IT
	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,	7007		/MASK PW
	LDA I
	5
	ADM
ONE,	1		/SKIP 2ND PW
	XSK I 5		/ANOTHER P-CHAR?
	JMP NXCHP
/DONE WITH LEFT PERIPHERY. NOW DO WINDOW
WINDOW,	SET I 5
MWIDTH,	-10		/WINDOW WIDTH
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
	JMP NXCHP
/
/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
/(AC=+0) OR AT BOTTOM LINE (AC=-0 WHEN
/FIXATION BELOW BOTTOM LINE: CAN"T OCCUR
/UNLESS <"LINES" SHOWN & FIXATION BELOW
/BOTTOM LINE.)
/
WRAPUP,	SET I 3
ADLIN1,	LINADS+1777	/L ADS-1 LDF 2
	SET I 4
ADLIN2,	LINCON+1777	/L CTRL-1 LDF 2
	LDA I
YTOP,	360		/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	/R.J.
	DTEXT		/TEXT,PWS,CTRLS
	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	/ENTRY END BUFFR
	AZE I
	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		/6>0:QUEST.-MODE
	JMP ERROR
	AZE I		/MUST HAVE>0 LNS
	JMP ERROR
	COM
	STC MLINES	/MLINES=-6
	JMP NXTCH
	JMP SETPAG+4	/PUSH-DOWN BUFFR
	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,IN WHICH
/CASE QUESTIONS DONE.)
/
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,	DJR		/PROTECT RJ
	LDA
	7
	SAE I
	7377		/7377=END BUFFER
	JMP NXTRET+1	/NOT END
	JMP .+1		/DISABLE DJR
	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,	HLT		/RETURN
	XSK I 0		/RETURN CALL+2
	LDH I 7		/WITH CHAR IN AC
	JMP
/
/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	/DEFINES TBLK
	ADD
	STC TXIRET	/RETURN JUMP
	STD
	JMP .-1		/WAIT IF BUSY
	AXO		/NO EXT.TAPE OPS
	DTEXT		/TEXT LDF
	ADD C4000
	JMP TBLKIN	/1ST BLOCK IN
	LDA I
	5001
	JMP TBLKIN	/2ND BLOCK
	LDA I
	6002
	JMP TBLKIN	/3RD BLOCK
TXIRET,	HLT		/RETURN
/
/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		/RETURN
/
/SUBR POSITIONS TAPE UNIT 0 AT TBLK=AC
/WITH "NO PAUSE" OPTION
/
TAPPOS,	STC TAPRET-1	/2ND LTAPE INSTR
	ADD
	STC TAPRET	/RJ
	STD
	JMP .-1		/WAIT IF BUSY
	LDA I
	10
	AXO		/NO PAUSE
	CHK
	0
TAPRET,	HLT		/RJ,NO PAUSE
/
/ERROR ROUTINE. CONTROL ARRIVES HERE
/WHEN FATAL OPERATIONAL ERROR OCCURS.
/TYPES OUT "ERROR" AND HALTS WITH
/JMP-TO-PC INSTR. IN AC.CONTINUES:MONIT
/
ERROR,	LDA
	0
	STC D
	SET I 1
	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
/NOW READ IN PARAMETER VALUES FOR NEXT
/READING TASK. EACH PARAMETER
/NAME IS TYPED OUT, FOLLOWED BY "=",
/AND THEN ITS CURRENT VALUE AND
/THEN A SPACE. THEN A NUMBER (SIGNED
/DECIMAL INTEGER) IS ENTERED,
/IF A NEW VALUE IS DESIRED (LEADING
/ZEROES MAY BE SURPRESSED), OR A DIRECT
/CR IF THE SAME VALUE IS DESIRED. A
/"RUBOUT" BEFORE THE CR RESTARTS THE
/INPUT AT THE "=" FOR THE PARAMETER.
/
	SET I 13
	PGCODE		/PGCODE FIXED
	SET I 1		/AD-1/2 PARAM
	LABEL1-4000	/LABELS (HF-WDS)
	SET I 6
	-12
PGET,	XSK I 13
	PROG1
	JMP MESSAG	/TYPE PARAM LABL
TYVAL,	LDA 13
	PROG1
	JMP DECPUT	/"=XXX"SG DECIM.
	PROG1
	JMP GETDEC	/I3 DEC INPUT
	STC Y		/SAVE INPUT
	DATA		/C(3) IN LIF 1
	LDA 		/=-4 MEANS
	2003		/INITIAL CR:KEEP
	ADD C4		/CURRENT VALUE
	AZE I
	JMP .+4
	LDA
	Y
	STA 13
	XSK I 6		/ANOTHER PARAM?
	JMP PGET
/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 AND
/WINDOW CONTROL AND DATA ACQUISITION.
/
RUNPAG,	LDA I
	1
	ADM
	NPAGE		/INCR NPAGE&PUT
	JMP STORE	/INTO DATA FILE
	LDA
	MLINES
	COM
	JMP STORE	/SAVE LINES/PAGE
/INITIALIZE EYE-POSITION SAMPLERS SO
/THAT PROGRAM STARTS IN "MOVING" MODE 
/WITH LAST FIXATION AT (0,0). WILL GIVE
/DUMMY (15,14) TIMING WORD AT TOP OF 
/DATA. ALLOWS IST WINDOW TO BE SET
/IMMEDIATELY.
INIT,	STC FIXING	/>0:MOVING FROM
	ADD C361	/ASSUMED FIXATON
	STC XFIX	/(360,0):CANT BE
	STC YFIX	/THERE:INITIAL
	STC 14		/FIXATION SETUP
	STC 15		/0 DURATION
/TURN ON CLOCK INTERRUPT
	LDA I
	100
	PDP
	PMODE
	CLEN		/CLOCK ENABLED
	TAD C3000	/3000+100=3100
	CLLR		/10 KHZ CLOCK
	CLA
	TAD MDT		/SAMPLING RATE
	CLAB		/TO BUFFER PRSET
	CLSA		/CLEAR REQUESTS
	6314		/CLEAR PANEL
	LINC
	LMODE
DISPLA,	IOB
	6001		/ION
	JMP SHPAGE	/DISPLAY ON
	JMP .-1		/KEEP DISPLAYING
/
/END OF PAGE-RUNNING SECTION
/
/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	/3-LINE ADJ PATT
	ADD CALBLK	/READ POS"NED
	JMP NEWTEX	/ADJ/CAL/VER TXT
	ADD TEXBLK	/POSN TAPE AT
	JMP TAPPOS	/TEXT, NO PAUSE
	SNS 5
	JMP CALIBR	/OFF:TO CALIBRAT
	LDA I
M1,	-1
	ADD LINES
	MUL
	SPACIN
	SCR 1
	MUL I
	-20
	STC DY
	STC PERDEF	/ALL TEXT
	JMP SHPAGE	/PATTERN ON
	SNS I 5		/KEEP DISPLAYING
	JMP .-2		/UNTIL SW 5 OFF
/
/CALIBRATION SECTION.USES NEXT "LINES"OF
/"CALBLK" SYSTEM FILE READ IN DURING
/ADJUST FOR TEXT AND SUPERIMPOSES SMALL
/SQUARES ONE-BY-ONE FOR VOLTAGE SAMPLING
/THIS CALIBRATION IS LINES BY 8 POINTS,
/WITH X AVERAGED W/R/T Y ("LINES") AND Y
/W/R/T X (8 OF THEM).
/USES JOB PARAMETERS, AND AFTER CHECKING
/THEM, SKIPS TO "VERIFY" IF SW 4 DOWN.
/
CALIBR,	LDA I
	-33
	STC PERDEF	/NORMAL PERIPHER
	ADD LINES
	ADD M20
	APO I		/NO MORE THAN 16
	JMP ERROR	/LINES/PAGE
	ADA I
	20		/MUST BE>0
	APO
	JMP ERROR
	STC DLINES
	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 NO.
	JMP ERROR	/MUST <32
	LDA
	ENDPAG
	STC PAGEPT	/SETUP NEXT 
	JMP SETPAG	/LINES OF CALBLK
	SNS 4
	JMP VERIFY
/ACQUIRE X & Y READINGS AT 8 POINTS FOR
/EACH OF "LINES". TEMPORARY STORAGE IN
/TABLES LDF FOR RUNNING SUM OF Y READING
/W/R/T X (16:3000 UP) AND X READINGS
/W/R/T Y (17,3400 UP).
/S FIXATES EACH SQUARE SUPERIMPOSED ON
/CALIB. TEXT (ALL PERIPH.) AND WHILE
/FIXATING HITS PANEL KEY, THEN MOVES ON.
/SW 0 ON: GET TYPEOUT OF TRANSFORMED
/VOLTAGE AVGS: 1ST LINE=X"S, 2ND=Y"S.
	ADD MLINES
	STC 14
	SET I 15
	-10		/ZERO 8 X-SUMS
	SET I 17
	3377
	TABLES		/LDF
	STA I 17
	XSK I 15
	JMP .-2
	SET I 16
	3000
	ADD YTOP
CLINE,	STC D   	/V.C. CURRENT LN
	ADD M2		/INIT HC/LINE
	STC XFIX	/H.C. CALIB PT.
	STA 16		/ZERO Y SUM
	SET I 15
	-10		/8 PTS./LINE
	SET I 17	/AD-1 X-SUMS
	3377
CSPOT,	IOB
	6314		/CLEAR PANEL
	JMP SHPAGE	/DISPLAY PAGE
	SET 1
	XFIX
C1000,	LDA
	D
	DSC I		/SUPERIMPOSE
	7777		/SQUARE AT
	DSC I		/(XFIX,YFIX)
	7777
	IOB
	6311		/DISPLAY UNTIL
	JMP CSPOT+2	/PANEL HIT
	TABLES
	YSAMP		/GET Y-VOLTAGE
	ADD C1000
	SCR 2		/INTO (0,377)
	ADM 16		/ADD TO Y-SUM
	XSAMP		/GET X-VOLTAGE
	ADD C1000
	SCR 2
	ADM I 17	/ADD TO X-SUM
	LDA I
CDX,	110
	ADM
	XFIX		/H.C. NEXT PT.
	XSK I 15	/ANOTHER PT/LINE
	JMP CSPOT
/END-OF-LINE: AVERAGE Y-VALUE OVER 8 PTS
	LDA 16
	SCR 3
	STA 16
	XSK I 16	/NEXT LINE Y-SUM
	LDA
	DY
	ADD D
	XSK I 14	/ANOTHER LINE?
	JMP CLINE
/SAMPLING COMPLETE: AVERAGE X-VALUES
/BY DIVIDING EACH BY "LINES"
	SNS 0
	JMP .+5
	SET I 1
	XLABEL-4000	/CR,"X-VOLTS:"
	PROG1		/IF SW 0 UP
	JMP MESSAG
	SET I 15
M10,	-10
	SET I 17
	3377
/DIVIDE BY "LINES"(12 BITS - IGNORE SIGN
XAVG,	CLR		/CLEAR LINK
	STC 3		/QUOTIENT COUNTR
	SET I 2
	-2		/INDEX PSEUDO"-"
	LDA I 17
	APO I		/PSEUDO SIGN?
	JMP .+3
/SIGN BIT (AC0) SET: ROTATE IT OUT WITH
/ROR I 1 (LINK CLEAR) AND INDEX 2 TO -1
/LATER WILL HAVE TO DOUBLE QUOTIENT
	XSK I 2		/YES:SET IT AND
	ROR I 1		/ROTATE IT OUT
	ADD MLINES	/BEGIN SUBTRACTN
	APO
	JMP .+3
	XSK I 3		/INCR.QUOTIENT
	JMP .-4
	AZE I		/INCR. IF -0
	XSK I 3
	LDA
	3		/GET QUOTIENT
	XSK I 2		/DOUBLE " IF
	SKP		/PSEUDO-SIGN WAS
	ROL 1		/ROTATED OUT
/PROPER QUOTIENT NOW IN AC
	STA 17
	SNS 0
	JMP .+3
	PROG1
	JMP DECPUT	/TYPE IF SW 0 UP
	LDA I
C2400,	2400
	ADM 17		/FORM VOLT-ADR.
	XSK I 15	/ANOTHER?
	JMP XAVG
/NOW SET-UP (0,377) MATRIX FOR X-LOOKUP
/AS FUNCTION OF HORIZ. VOLTAGE. FOR
/EACH VOLTAGE V, PUT INTERPOLATED X POSN
/IN (0,70) AT 2400+V IN TABLES LDF.
	SET I 17
	2377
	SET I 15
	-400
	CLR
	STC XFIX	/WILL HOLD X-POS
	ADD M1
	STA I 17	/INIT ALL=-1
	XSK I 15
	JMP .-2
/NOW FILL IN OBTAINED CALIB PTS.
	SET I 17
	3377
	SET I 15
	-10
FILLX,	LDA I 17	/NEXT X VOLT-ADR
	STC 1
	ADD XFIX
	STA 1		/STORE X-POSN
	ADA I
	10
	STC XFIX	/NEXT X-POSN
	XSK I 15	/ANOTHER CAL PT?
	JMP FILLX
/NOW FILL IN EACH OF THE 7 INTERVALS
/BETWEEN SUCCESSIVE CALIB. PTS. WITH 8
/LINEARLY INTERPOLATED POINTS.
	SET I 17
	3377
	SET I 10
	3400
	SET I 11
	-7
	SET I 6
	0		/HOLDS X-POSN
INTERX,	LDA I 10	/FORM DIFF TWEEN
	COM		/NEXT PAIR PTS
	ADA I 17	/MUST BE>0!!
	APO
	JMP ERROR
	AZE I
	JMP ERROR	/MUST BE>0!
	STC D
	ADD M10
	STC 12		/8 INTERIOR PTS
/1ST PT. 1/16 THRU INTERVAL, 2ND 3/16,
/...,8TH 15/16 THRU INTERVAL.
	ADD ONE
	STA
	XFIX		/NUM OF ABOVE/16
INTX1,	MUL
	D
	SCR 4		/DIV 16
	COM
	ADA 17		/INTERP. VOLT AD
	STC 1
	XSK I 6		/NEXT INT. X-POS
	ADD 6
	STA 1
	LDA I
	2
	ADM
	XFIX		/NEXT NUMERATOR
	XSK I 12	/ANOTHER INT.PT?
	JMP INTX1	/NEXT INT. PT.
	XSK I 11	/ANOTHER INTRVL?
	JMP INTERX	/NEXT INTERVAL
/NOW GO THRU AND FILL IN REMAINING
/VOLTAGE ADDRESSES: ENTRIES NOT YET SET
/=-1; FILL THEM WITH NEAREST (I.E.,
/LEFTMOST) DEFINED X-POSN. SINCE TOP OF
/VOLTAGE ARRAY=2777 REPRESENTS MAX VOLTS
/, WHICH IS LEFTMOST X-P0SN=0, MUST WORK
/DOWN THRU ARRAY
	SET I 17
	2777
	CLR
	STC XFIX	/RUNNING X-POSN
INTX2,	LDA 17
	APO I		/ALREADY FILLED?
	JMP .+4		/YES: SKIP
	LDA
	XFIX
	STA 17		/FILL WITH CUR X
	STC XFIX	/RESET CUR X
	ADD M1
	ADM
	17		/DECREMENT V-ADR
	SAE I
	2377		/LAST VOLT-AD?
	JMP INTX2
/DONE FILLING IN X-LOOKUP TABLE.
/NOW FILL IN Y-LOOKUP TABLE, CREATING
/MATRIX IN 2000-2377 IN TABLES LDF:
/Y-VOLTAGE V SHOULD CORRESPOND TO LINE
/NO. L IN (0,LINES-1) AT 2000+V.
/
/ASSUMES LOW VOLTAGE - LOW LINE NO.
	SET I 16
	2777		/AD-1 Y-AVGS
	SET I 10
	3000
	SET I 6		/HOLDS LN NO.
	0
	SET I 17
	3777		/AD-1 2000
	SET 15
	MLINES
	SNS 0
	JMP .+5
	SET I 1
	YLABEL-4000
	PROG1		/"Y-VOLTS:"
	JMP MESSAG	/IF SW 0 UP
/FILL VOLTAGE ADDRESSES FROM 1/2 LAST
/INTERVAL TO 1/2 NEXT INTERVAL WITH
/CURRENT LINE NO.
INTERY,	LDA I 16
	SNS 0
	JMP .+3
	PROG1
	JMP DECPUT	/TYPE IF SW 0 UP
	XSK I 15	/LAST INTERVAL?
	JMP .+4
	LDA I
	2377
	JMP FILLY-1	/FILL TO END
	LDA 16
	COM
	ADA I 10	/VOLT. DIFF.
	APO
	JMP ERROR	/MUST BE>0
	SCR 1		/VOLT.DIF./2
	AZE I
	JMP ERROR
	ADD C2000	/=ADR. TOP VOLT.
	ADA 16
	STC VSTOP	/FOR CURRENT LN
FILLY,	LDA
	6		/CURRENT LN NO.
	STA I 17	/INTO NEXT V-AD
	LDA
	17
	SAE I
VSTOP,	0		/LIMIT FOR CUR L
	JMP FILLY	/KEEP GOING
	XSK I 6		/NEXT LINE NO.
	XSK 15		/DONE LAST ONE?
	JMP INTERY	/DO NEXT ONE.
/
/END CALIBRATION SECTION. GO TO "VERIFY"
/
/"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
	-5		/USE 5-CHAR
	STC MWIDE	/WINDOW CENTERED
	ADD M2		/ON FIXATION PT.
	STC MLW
	ADD C4		/FIXING NON-0
	JMP INIT	/START DISPLAY
/
/THIS SECTION EXECUTES "READ" TASK. 
/CONTROL REACHES HERE ONLY FROM PANEL
/INTERRUPT DURING "VERIFY" TASK.
/
READ,	LDA I
	STA I 13	/DISINHIBIT
	STC STORE+1	/DATA WRITING
	STC 11
	SET I 10	/INITIALIZE
	-144		/TIMERS 10,11
	ADD POSN
	STC MLW
	ADD WIDTH
	COM
	STC MWIDE
	STC NPAGE	/INIT NPAGE=0
	ADD TEXBLK
	JMP NEWTEX	/FETCH TEXT
/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
	-13
	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 TWO 7777"S. IF NO
/TEST, WRITE A THIRD 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 1
	LABEL2-4000
	PROG1
	JMP MESSAG	/"TIME"
	ADD 11
	PROG1
	JMP DECPUT	/N SECS.
	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	/N LINES READ
	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
	-20
	STC DY		/SINGLE SPACING
	STC PERDEF	/ALL CHARS SHOWN
	ADD C361
	STC YTOP	/TOP DISPLAY
	STC YFIX	/NO WRAP-UP
	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
	SKP		/NOY 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		/WAIT FOR TAPE
	JMP .-1
	CLR
	JMP WRITE	/WRITE IT
WDONE,	STD
	JMP .-1		/WAIT FINAL BLOC
/FINALLY TYPE OUT NO QUESTIONS/NO.CORREC
	SET I 1
	LABEL3-4000
/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!!
/
/FOLLOWING SUBROUTINES AND OUTPUT LABELS
/FIT INTO PROG1 (LIF 1) BELOW THE 2-BLOK
/DATA OUTPUT BUFFER
/
	SEGMNT 1
	*20
/SUBR TYPES AC AS SIGNED DECIMAL INTEGER
/IN FORMAT "="XXX ". ENTRY HERE BUT
/JUMPS TO SEGMENT 1 BELOW TEXT BUFFER.
/
DECPUT,	STC 4		/SAVE ARG
	ADD
	STC DECRET	/RET AD
	LDA I
	275
	JMP TYPE	/"="
	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
	LDA I
	240
	JMP TYPE	/FINAL SPACE
	PROG0		/RETURN IN PROG0
DECRET,	HLT		/R.J.
/
/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.
	STC 4		/BUILDS VALUE
	SET I 2
	-2		/INDEXES SIGN
	SET I 3
	-4		/INDEXES DIGITS
NEXDIG,	IOB
	6031		/KSF
	JMP .-2
	IOB
	6036		/KRB
	SAE I
C215,	215		/CR?
	JMP GETRET+1
	LDA
	4		/NO:CHECK FOR
	XSK I 2		/SKIP ON SIGN
	SKP
	COM		/NEGATE 
	PROG0		/RETURN PROG0
GETRET,	HLT		/R.J.
NOTYET,	STC 5		/SAVE CHAR
	ADD 5
	JMP TYPE	/ECHO
	ADD 5
	SAE I
C255,	255		/="-"?
	JMP .+4		/NO
	XSK I 2		/SECOND SIGN?
	JMP NEXDIG	/YES:SIGN SET
	JMP ENTERR	/YES:ERROR
	XSK I 3		/TOO MANY DIGITS
	SKP		/NO
	JMP ENTERR	/YES:ERROR
	ADA I		/IS CHAR DIGIT?
	-257
	APO
	JMP ENTERR	/NON-DIGIT
	ADA I
MD10,	-12		/DIGIT?
	APO I
	JMP ENTERR	/NON-DIGIT
	ADD C11		/RESTORE DIGIT
	AZE I
C11,	CLR		/-0 TO +0
	STC 5
	ADD 4
	MUL I
D10,	12		/DEC. SHIFT LEFT
	ADD 5
	STC 4
	JMP NEXDIG
/CONTROL ARRIVES HERE WHEN TYPED ENTRY
/FOR PARAMETER IS ILLEGAL: >1"-",>3 DIGS
/OR ILLEGAL CHAR. TYPES "?" : TRY AGAIN!
/
ENTERR,	LDA I
	277
	JMP TYPE	/"?"
	PROG0		/TRY AGAIN AT
	JMP TYVAL	/TYVAL IN PROG0
/
/SUBR TYPES OUT MESSAGE FROM PACKED
/ASCII CODE - 43 GENERATES CR&LF, AND 00
/TERMINATES OUTPUT. ADDRESS OF SOURCE
/POINTED (+1/2) BY 1 FROM PROG0;HENCE
/MUST BE READ AND RETURNED THERE.
/
MESSAG,	LDA
	0
	STC MESRET	/R.J.
	PDP
	PMODE
	TAD 1		/PASS PROG0(1)
	LINC		/W/O DIFF LDF
	LMODE
	STC 1
NXCHAR,	LDH I 1
	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 1		/PASS PTR BACK
	PDP		/TO 1 IN PROG0
	PMODE
	DCA 1
	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
/
TYPE,	PDP
	PMODE
	TLS
	TSF
	JMP .-1
	CLA
	LINC
	LMODE
	JMP		/RETURN
/
/TEXT (PACKED ASCII) PARAMETER LABELS
/
ERLABL,	4343
	TEXT *ERROR*
LABEL1,	4343
	TEXT *SUB-SES ID*
	0043
	TEXT *TEXT TAPE *
	0043
	TEXT *TEXT BLOCK*
	0043
	TEXT *DATA BLOCK*
	0043
	TEXT *TOP LINE  *
	0043
	TEXT *NO. LINES *
	0043
	TEXT *SPACING   *
	0043
	TEXT *WINDOW    *
	0043
	TEXT *POSITION  *
	0043
	TEXT *QUES-BLOCK*
	0043
LABEL2,	4343
	TEXT *TIME*
	0040
	TEXT *SECS. FOR*
	TEXT *LINE*
	2343		/*S*,CR
	TEXT *COMPREHENSION*
LABEL3,	TEXT *OF *
XLABEL,	4343
	TEXT *X-VOLTS: *
YLABEL,	4343
	TEXT *Y-VOLTS: *
/
/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
	2000		/^
	2077
	3410		/BACK ARROW
	1010
	0		/BLANK
	0
	7500		/!
	0
	6006		/"
	60
	3614		/NUMBER SIGN
	1436
	7721		/DOLLAR SIGN
	4677
	1446		/%
	6130
	5166		/&
	0523
	500		/APOSTROPHY
	
	6
	4163		/(
	0
	0		/)
	6341
	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		/<
	0042
	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 MAORDS: 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