File FLEXDISP

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

*20
	LMODE
	DATA=LDF 3	/LDF FOR DATA
	TABLES=LDF 2	/LOOKUP LDF
	DTEXT=LDF 1	/TEXT BUF LDF
	SEGMNT 0
/JOB PARAMETERS STORED HERE: ARE WRITTEN
/OUT AS HEADER ON DATA FILES
	*20
PGCODE,	1111		/PROGRAM CODE
JOB,	0		/JOB CONTROL WD
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
MLW,	0		/REL. WIND.POSN.
NPAGE,	0		/DISPLAY PAGE NO
/
	PMODE
MDT,	-144		/10 MSEC/SAMPLE
C2720,	2720
	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
/"MLW"   : POSITION OF LEFT WINDOW EDGE
/	   W/R/T FIXATION PT: -N MEANS
/	   N TO LEFT,+N N TO RIGHT
/
/NOTE THAT (LINES-1)*SPACIN+TOPLIN<40 OC
/
/THIS SECTION HANDLES INTERRUPTS.
/TWO POSSIBLE INTERRUPTS: ON SCHMIDT
/TRIGGER, SUBJECT SIGNALS FROM PULSE BOX
/SIGNAL END OF READING FOR PAGE OR
/END OF FIXATION DURING CALIBRATION.
/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
	ADD
	STC SAVE0
	IOB
	6135		/CLSA
	APO I		/<0:CLOCK OFLOW
	JMP TRIGGR	/>0:PULSE I"RUPT
/SAMPLE Y AND X SIGNALS (A-D 16 & 17)
/COMPUTE TABLE LOOKUP FOR EACH OF THEM
	TABLES		/LDF FOR LOOKUP
	SAM 16		/Y SIGNAL
	ADA I
C1000,	1000		/MAKE POS
	SCR 2		/SCALE=(0,377)
	ADA I
	2000		/Y TABLE IN LDF
	STC 16		/LOOKUP ADDRESS
	SAM 17		/X SIGNAL
	ADD C1000
	SCR 2		/(0,377)
	ADA I
	2400		/LDF + 400
	STC 17		/LOOKUP ADDRESS
/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 MAINLINE DISPLAY
RESTOR,	LDA
	40
	BSE I
C6000,	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
	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
/DON"T NEED TO REDEFINE YFIX, SINCE IT
/MUST BE IDENTICAL FOR NEW FIXATION.
/NOW REDEFINE DISPLAY CONTROL WORDS.
	SET I 4
	LINCON-1
	SET 6
	MLINES
	ADD C7000	/EACH LINE SET
	STA I 4		/TO ALL PERIPH.
	XSK I 6
	JMP .-2
	LDA 16		/16=YFIX
	ADD ADLIN2	/=AD-1 WINDOW
	STC 4		/LINE
	ADD XFIX
	ADD MLW		/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
/WHEN NEW FIXATION POINT ESTABLISHED,
/THE ABOVE EXIT IS DIRECTLY TO THE
/DISPLAY ROUTINE, SO THAT REFRESHING MAY
/BEGIN ON THE NEW WINDOW LINE, RATHER
/THAN CONTINUING FROM THE INTERRUPT SPOT
/
NOROOM,	ADD MWIDE	/DECREASE WINDOW
	STC MWIDTH
	COM
	STA I 4		/CONTROL WORD=-0
	JMP DISPLA
/
/CONTROL REACHES HERE WHENEVER INTERRUPT
/OCCURS ON SCHMIDT TRIGGER 1 (I.E.,
/POSITIVE PULSE). IF DURING READING,
/THIS SIGNALS END OF PAGE, AND ANY DATA
/STORED BUT NOT YET WRITTEN OUT BY THE
/OUTPUT BUFFERING ROUTINES IS OUTPUT;
/THEN THE NEXT PAGE (IF ANY) IS RUN.
/IF DURING CALIBRATION (SW 0 UP), PULSE
/MEANS SAMPLE CHANNELS FOR CALIB POINT.
/
TRIGGR,	BCL I
	7737		/SAVE BIT 6
	AZE I		/EVENT 1?
	JMP RESTOR	/SPURIOUS INTER.
	SNS I 0		/READING OR CALI
	JMP EXCALB	/CALIBRATION
/MUST BE END OF PAGE: SAVE TWO 7777"S
/AS END-MARKERS.
	LDA I
	7777
	JMP STORE
	LDA I 
	7777
	JMP STORE
/NORMALLY HAVE CURRENT DATA BLOCK TO
/WRITE OUT, UNLESS THE END-MARK (7777)
/HAPPENED TO END AN MBLK, IN WHICH CASE
/BLOCK WILL HAVE BEEN WRITTEN ALREADY.
/RETURN FROM ABOVE CALL TO "STORE" WILL
/HAVE AC=DATBLK>0 IF SO WRITTEN, ELSE<0
	APO I
	JMP EPAGE	/ALREADY WRITTEN
	LDA
	13
	BCL I
	6377		/GET MBLK 1ST AD
	ADD C6000	/ABS WRITE ADDR
	STD		/WAIT FOR TAPE
	JMP .-1
	JMP WRITE	/ENTRY IN "STORE
/RETURNS WHEN OUTPUT STARTED (NO PAUSE).
/NOW CHECK IF THERE"S MORE OF TEXT.
EPAGE,	LDA
	LINES
	ADD MLINES	/LAST PAGE DONE
	AZE I		/IF MLINES<LINES
	JMP NEXPAG	/DO NEXT PAGE
/
/NORMALLY QUESTION-RUNNING ROUTINE FITS
/HERE: TEMPORARY RETURN TO MONITOR
QUESTN,	HLT
/
/SUBR STORES AC VIA 13 INTO DATA FIELD
/WHENEVER END OF MBLK REACHED, ITS
/WRITTEN OUT VIA THE "NO PAUSE" AXO OPT.
/
STORE,	DATA		/DTA LDF
	STA I 13
	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
	LDA I
	3401		/CONVERT 13 INTO
	ADD 13		/6000+400*MBLK
WRITE,	TMA		/ABS ADR TO TMA
	LDA I
	30		/ENABLE EX AD &
	AXO		/NO PAUSE OPTION
	LDA
	DATBLK
	STC .+2
	WRC U		/START WRITING
	0
	ADD ONE
	ADM
	DATBLK		/INCR.FOR NEXT
	SAE I
	1000
	JMP		/RETURN
	JMP ERROR	/NO WRITE-AROUND
/
/THIS SECTION "RUNS" PAGE DISPLAY AND
/WINDOW CONTROL AND DATA ACQUISITION.
/
NEXPAG,	LDA I		/ANOTHER PAGE?
ENDPAG,	0		/PTR END LAST PG
	STC PAGEPT	/NEXT PAGE PTR
	JMP SETPAG	/GET PAGE TEXT
	ADD MLINES
	AZE I		/NO LINES: DONE!
	JMP QUESTN	/DO QUESTIONS
/BEFORE RUNNING PAGE DISPLAY, SET-UP
/PARAMETER HEADER BLOCK AT BEGINNING OF
/DATA FIELD.
RUNPAG,	DATA
	SET I 13
	3777		/START AT 2000
	SET I 12
	PGCODE-1	/PARAMETER ARRAY
	SET I 6
	-13
	LDA I 12
	STA I 13
	XSK I 6
	JMP .-3
	LDA I
	1
	ADM I 12	/INCR. NPAGE
	STA I 13	/AND COPY
/13 NOW IS AT DATA STORAGE ADDRESS-1
/INITIALIZE EYE-POSITION SAMPLERS
	CLR
	STC FIXING	/START WITH
	STC XFIX	/ASSUMED FIXATON
	STC YFIX	/AT (0,0) OF 0
	STC 14		/DURATION
/TURN ON CLOCK INTERRUPTS FOR EITHER
/CLOCK OVERFLOW OR SCHMIDT TRIGGER 1
	LDA I
	160
	PDP
	PMODE
	CLEN		/CLOCK ENABLED
	TAD C2720	/160+2720=3100
	CLLR		/10 KHZ CLOCK
	CLA
	TAD MDT		/SAMPLING RATE
	CLAB		/TO BUFFER PRSET
	CLSA		/CLEAR REQUESTS
	LINC
	LMODE
	LDA I
	40		/SET 1/2 SIZE &
	ESF		/NO TTY INTERPT.
DISPLA,	IOB
	6001		/ION
	JMP SHPAGE	/DISPLAY ON
	JMP .-1		/KEEP DISPLAYING
/
/END OF PAGE-RUNNING SECTION
/
/THIS SECTION DISPLAYS 3 X 3 "X" MATRIX
/FOR SENSOR ALIGNMENT. CALLED FROM
/MONITOR WITH SW 5 UP. ENDS SW 5 DOWN.
/
ADJUST,	CLR
	ESF		/HALF-SIZE
	SET I 6
	-3
	LDA I
C360,	360
	STC Y
ADJLN,	SET I 1
	-2
	SET I 5
	-3
ADJCH,	LDA
	Y
	DSC I
	1463
	DSC I
	6314		/"X"
	LDA I
	364
	ADM
	1
	XSK I 5
	JMP ADJCH
	LDA I
	-360
	ADM
	Y
	XSK I 6
	JMP ADJLN
	SNS I 5
	JMP ADJUST+2	/REPEAT CYCLE
	JMP MONIT	/BACK TO MONITOR
/
/END OF ADJUSTMENT SECTION
/
/
/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 AT "YFIX" LINE
/
SHPAGE,	LDA
	0
	STC PGEXIT	/SETUP RETURN
	SET I 6
MLINES,	-10		/-LINES TO SHOW
	ADD YFIX	/STARTING LINE
	ADD ADLIN1	/=LINADS-1
	STC 3		/AD-1 ST. LIN AD
	ADD YFIX
	ADD ADLIN2	/=LINCON-1
	STC 4		/AD-1 ST.LIN.CON
	ADD YFIX
	MUL
	DY
	ADD YTOP
	STC Y		/STARTING Y V.C.
	DTEXT		/TEXT LDF
NXLINE,	SET I 1
XLEFT,	-2
	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
/
SHOLIN,	AZE I
	JMP WINDOW	/-0:NO LEFT PER.
	STC 5
NXCHP,	LDH I 7		/NEXT PERIPH CHR
	SHD I
	4000		/DONT DISPLAY
	JMP BLANK	/BLANKS
	SHD I
	4300		/END OF LINE?
	JMP CHNXLN
	ADA I
M32,	-32		/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-2		/FORM PW ADDR.
	STC 2
	LDA
	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.
/
WRAPUP,	SET I 3
ADLIN1,	LINADS-1	/AD-1 LINAD VECT
	SET I 4
ADLIN2,	LINCON-1	/AD-1 LINCON VEC
	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.
/
SETPAG,	LDA
	0
	STC STEXIT	/SETUP RETURN
	ADD LINES
	COM
	STA
	MLINES
	STC 6
	SET I 7
PAGEPT,	6001		/PTR START PAGE
	DTEXT		/TEXT LDF
	SET I 3
	LINADS-1	/LINE POINTERS
	SET I 4
	LINCON-1	/CONTRL WDS
CODLIN,	JMP NXTCH	/SUBR CHECKS BUF
	LDH I 7
	AZE I
	JMP ENDFIL	/END OF FILE
	SAE I
	57		/SKIP LEAD "/"
	JMP ERROR	/FIRST NOT "/"
	LDA
	7
	STA I 3		/NEXT LINE PTR
	JMP NXTCH
	LDH I 7
	SAE I		/SKIP TO END OF
	43		/LINE=43
	JMP .-4
	CLR		/EACH LINE CONTR
	COM		/INIT.=-0:
	STA I 4		/IN ALL-PERIPH.
	XSK I 6		/ANOTHER LINE?
	JMP CODLIN
	ADD 7
	STC ENDPAG	/SAVE END PTR
	STA I 3		/DUMMY LINAD=0
STEXIT,	HLT		/RETURN JUMP
/END OF FILE ENCOUNTERED: DECREASE NO.
/OF LINES TO BE DISPLAYED.
ENDFIL,	ADD 6
	COM
	ADD MLINES
	STC MLINES
	JMP STEXIT-1	/RETURN
/
/SUBR CHECKS FOR TEXT POINTER=END OF
/DTEXT LDF. IF AT END, SHIFTS ENTIRE
/TEXT LDF DOWN SO THAT PAGEPT IS IN
/FIRST SEGMENT OF IT.
/
NXTCH,	LDA
	7		/TEXT PTR
	AZE		/7777=END
	JMP		/NOT END:RETURN
	ADD PAGEPT
	BCL I
	6377		/GET BITS 2-3
	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 SEGM.
	JMP SETPAG+3	/REENCODE TEXT
/
/SUBR TAKES AC=TBLK, STRIPS BITS 0-2,
/AND THEN READS IN 4 TBLKS (UNIT 0)
/INTO DTEXT LDF
/
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
	LDA I
C4000,	4000
	JMP TBLKIN	/SUBR READS TBLK
	LDA I
	5001
	JMP TBLKIN	/2ND BLOCK
	LDA I
	6002
	JMP TBLKIN	/3RD BLOCK
	LDA I
	7003
	JMP TBLKIN	/4TH 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
/
/ARRAY OF LINE CONTROL WORDS:
LINCON,	0
	*.+20
/ARRAY OF TEXT-LINE ADDRESSES (-1/2)
LINADS,	0
	*.+20
/
/ERROR ROUTINE. CONTROL ARRIVES HERE
/WHEN FATAL OPERATIONAL ERROR OCCURS.
/TYPES OUT "ERROR=XXXX", WHERE XXXX IS
/LAST JUMP INSTR (TO ERROR). RETURNS TO
/MONITOR
/
ERRMES,	4343
	0522
	2217
	2200		/CR,CR,"ERROR"
ERROR,	LDA
	0
	STC ERRRET
	SET I 1
	ERRMES-4000	/PTR TO "ERROR"
	JMP MESSAG	/CR,CR,"ERROR"
	LDA I
ERRRET,	0
	JMP OCTPUT	/"=XXXX"
/SYSTEM MONITOR HERE. HALTS AND WHEN
/STARTED, SW 5 UP: SENSOR ADJUSTMENT
/SECTION. SW 0 UP: CALIBRATION SECTION.
/BOTH DOWN, READING SECTION.
/
MONIT,	HLT
	SNS I 5
	JMP ADJUST
	SNS I 0
	JMP CALIBR
/NOW READ IN PARAMETER VALUES FOR NEXT
/READING TASK. EACH PARAMETER
/NAME IS TYPED OUT, FOLLOWED BY "=",
/AND THEN ITS CURRENT VALUE (OCTAL) AND
/THEN A SPACE. THEN A NUMBER (UNSIGNED
/OCTAL) MAY BE ENTERED FOLLOWED BY A CR
/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.
/
PARAMS,	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
	JMP CRLF	/CR,LF
	JMP MESSAG	/TYPE PARAM LABL
TYVAL,	LDA 13
	JMP OCTPUT	/"=XXXX" (OCT.)
	LDA I
	240
	JMP TYPE	/" "
	JMP GETPAR	/INPUT PAR BY 13
	XSK I 6		/ANOTHER PARAM?
	JMP PGET
/
/PARAMETERS OBTAINED. FILL NEEDED VALUES
/
	LDA
	TOPLIN
	APO
	JMP ERROR	/CANT BE <0
	MUL I
	-20
	ADD C360
	STC YTOP
	ADD SPACIN
	APO
	JMP ERROR
	AZE I
	JMP ERROR	/SPACING MUST>0
	MUL I
	-20
	STC DY
	ADD WIDTH
	APO
	JMP ERROR
	COM
	STC MWIDE
	LDA I
	-1
	ADD LINES
	MUL
	SPACIN
	ADD TOPLIN
	ADA I
	-37		/LAST LINE NO.
	APO I		/MUST <40
	JMP ERROR
	CLR
	STC NPAGE	/INIT. NPAGE=0
/READ IN 1ST 4 BLOCKS OF TEXT SOURCE
	ADD TEXBLK
	JMP TEXTIN
	LDA I
	6001		/SKIP "*20"CR
	STC PAGEPT	/TEXT AD-1/2
	JMP SETPAG	/SETUP PAGE
	JMP RUNPAG	/RUN 1ST PAGE
/
/SUBR TYPES AC AS UNSIGNED OCTAL INTEGER
/IN FORMAT "=XXXX". USES "Y" FOR STORE.
/
OCTPUT,	STC Y
	ADD
	STC OCTRET	/RETURN JMP
	LDA I
	275
	JMP TYPE	/"="
	LDA
	Y
	ROL 3
	JMP OUTDIG	/TYPE DIGIT
	ROR 6
	JMP OUTDIG
	ROR 3
	JMP OUTDIG
	JMP OUTDIG
OCTRET,	HLT		/RETURN
/
/SUBR TYPES OCTAL DIGIT FROM AC 9-11
/
OUTDIG,	BCL I
	7770		/STRIP DIGIT
	ADA I
C260,	260		/ASCII CODE
	STC D		/TEMP
	ADD
	STC DIGRET	/RETRN JMP
	ADD D
	JMP TYPE
	LDA
	Y		/RESTORE AC
DIGRET,	HLT		/RETURN
/
/SUBR ACCEPTS UNSIGNED OCTAL INTEGER
/FROM TTY. LEADING
/ZEROES NEEDNT ENTER, AND A CR IS THE
/TERMINATOR. THE OBTAINED VALUE IS 
/STORED VIA 13 (ONLY ON VALID INPUT).
/AN INITIAL CR LEAVES CURRENT VALUE
/INTACT. THE ENTRY IS RUBBED OUT AND
/RESTARTED BY ANY NON-CR,NON-OCTAL KEY.
/
GETPAR,	LDA
	0
	STC GETRET	/R.J.
	STC D		/D BUILDS VALUE
	STC 2		/INDEXES INPUT
	JMP INDIG	/GET CHAR
	JMP INDIG
	JMP INDIG
	JMP INDIG
	JMP INDIG
/RETURNS FROM INDIG ONLY WHEN OCTAL
/INTEGER ENTERED: IF RETURNS AFTER LAST
/CALL, MORE THAN 4 DIGITS ENTERED: ENTRY
/IS INVALID AND "?" TYPED ANY ENTRY
/RESTARTED AT "TYVAL"
ENTERR,	LDA I		/INVALID
	277
	JMP TYPE	/"?"
	JMP TYVAL	/REDO ENTRY
/
/SUBR ACCEPTS CHAR FROM TTY. IF A CR,
/TERMINATES ENTRY BY GOING TO "VALENT"
/(UNLESS INITIAL CR, SIGNALLED BY Y<0,
/IN WHICH CASE KEEP CURRENT VALUE AND
/RETURN TO GETRET). IF AN OCTAL DIGIT,
/SHIFTS Y TO LEFT AND ADDS DIGIT (CLEARS
/Y FIRST IF <0 MEANING NEW ENTRY).
/ANY OTHER CHARACTER RESTARTS ENTRY
/
INDIG,	LDA
	0
	STC INDRET	/R.J.
	IOB
	6031		/KSF
	JMP .-2
	IOB
	6036		/KRB
	SAE I
C215,	215		/CR?
	JMP NOTCR
/HAVE CR: END ENTRY. IF 2=0, THEN WAS
/NULL ENTRY (I.E., INITIAL CR): RETAIN
/CURRENT PARAMETER VALUE. 2>0 STORE
/NEW VALUE (D). RETURN FROM GETPAR
	LDA
	2		/2 NON-0 IF DIG
	AZE I
GETRET,	HLT		/RETRN GETPAR
	LDA
	D
	STA 13		/STORE NEW VALUE
	JMP GETRET
NOTCR,	JMP TYPE	/ECHO NON-CR
	ADA I
	-257
	APO		/OCTAL DIGIT?
	JMP ENTERR	/NO:RESTART
	ADA I
	-10		/OCTAL DIGIT?
	APO I
	JMP ENTERR	/NO: RESTART
	ADA I
	7		/RESTORE DIGIT
	AZE I
	CLR		/-0=0
	STC 0		/TEMP.
	ADD D
	ROL 3		/SHIFT ENTRY
	ADD 0		/NEXT DIGIT
	STC D
	XSK I 2		/SET NON-NULL
INDRET,	HLT		/RETURN INDIG
/
/SUBR TYPES OUT MESSAGE FROM PACKED
/ASCII CODE - 43 GENERATES CR&LF, AND 00
/TERMINATES OUTPUT. ADDRESS OF SOURCE
/POINTED (+1/2) BY 1.
/
MESSAG,	LDA
	0
	STC MESRET	/R.J.
	LDH I 1
	AZE I
MESRET,	HLT		/RETRN
	SAE I
	43		/CR?
	JMP .+3
	JMP CRLF	/DO CR,LF
	JMP MESRET-2	/NEXT CHAR
	ADA I
	-37		/ADD 200 OR 300
	APO		/FOR 8-BIT CODE?
	ADD C100
	ADA I
	237
	JMP TYPE	/TYPE 8-BIT CODE
	JMP MESRET-2	/NEXT CHAR
C100,	100
/
/SUBR GENERATES CR&LF
/
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
/
TYPE,	PDP
	PMODE
	TLS
	TSF
	JMP .-1
	LINC
	LMODE
	JMP		/RETURN
/
/TEMPORARY DEBUGGING SECTION
EXCALB,	HLT
CALIBR,	HLT
/
/TEXT (PACKED ASCII) PARAMETER LABELS
/
LABEL1,	4312		/CR,J
	1702		/OB
	4027		/ W
	1722		/OR
	0400		/D
	2325		/SU
	0212		/BJ
	0503		/EC
	2455		/T-
	2305		/SE
	2323		/SS
	1117		/IO
	1600		/N
	2405		/TE
	3024		/XT
	4024		/ T
	0120		/AP
	0500		/E
	2405		/TE
	3024		/XT
	4002		/ B
	1417		/LO
	0313		/CK
	0004		/ D
	0124		/AT
	0140		/A
	0214		/BL
	1703		/OC
	1300		/K
	2417		/TO
	2040		/P
	1411		/LI
	1605		/NE
	0014		/ L
	1116		/IN
	0523		/ES
	0023		/ S
	2001		/PA
	0311		/CI
	1607		/NG
	0027		/ W
	1116		/IN
	0417		/DO
	2700		/W
	2017		/PO
	2311		/SI
	2411		/TI
	1716		/ON
	0000		/
/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



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