File KNUT

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

*20
	SEGMNT 0
/A/D 17 IS IN PLACE OF A/D 12
/2 LIM1 PTR DURING SMPL
/3 CURSAM PTR "     "
/14 PRECS CS SKIP
/11 PRECS TIMER
/13 CS US TIMER
/1 IS COMMITTED TO PDP INT
/USES A FIXED TIME OF 10MSEC/BIN
/  SET AT TIMSET (1303 LINE?)
/ MSEC IN OCTAL -1 IS CORRECT SETTING
/ FIXED BIN SIZE OF 256 BINS(10)
	LIM=10
	AVGPTR=12
	TIME=20
	SBINS=21
	TPEBLK=22
	SAMN=23
	N=24
	WRTBLK=25
	*1
	PMODE
	JMP INT+3
	LMODE
	*41
	JMP INT
FACTOR,	0
	*170
INT,	NOP
	NOP
	PDP
	7300
	6135
	6141
	APO I
	JMP SYNC
	LDA I
        4100
	SAE I
CS,	0
	JMP US
	XSK I 17	/CLOCK SERVICE
CONT,	XSK I 4
	XSK I 5
	XSK I 6
	XSK I 7
	XSK I 15	/END OF RUNTIME
	JMP .+2
	JMP ENDBLK
	IOB 
        6001
	XSK I 11
	JMP SMPL
	LDA I 
        0040
	ATR
	SET I 14
	1777		/SHOW CS TIME
SMPL,	NOP
	/SFA		/GET SPEC FUNCTION REG
	/BSE I
	/0100		/ENABLE FAST SAMPLE
	/ESF
        /SAM 10
	SET I 1
	5173
 SMPL1,	SET I 3
	CURSAM-1
	SET I 2
	LIM1-1
	CLR
	NOP
	NOP
	SAM 10
	XSK I 3
	ADA I
DED,	7777
	APO
	SKP
	STA 3		/SAV SAM 10
	CLR
	JMP HGHT	/BYPASS OTHER A/DS
	NOP
	NOP
	SAM 17
	XSK I 3
	ADA
	DED
	APO
	SKP
	STA 3		/SAV SAM 11
	CLR
	NOP
	NOP
	SAM 13
	XSK I 3
	ADA
	DED
	APO 
	SKP
	STA 3
	CLR
	NOP
	NOP
	SAM 14
	XSK I 3
	ADA
	DED
	APO
	SKP 
	STA 3
	CLR
	NOP
	NOP
	SAM 10
	XSK I 3
	ADA
	DED
	APO
	SKP
	STA 3
HGHT,	SET I 3		/AMPLITUDE SERVICE
	CURSAM-1
	SET I 2
	LIM1-1
	SET I 16
	PRESAM-1
	JMP HGET
	APO I
	JMP BMP10	/PEAKED
	NOP
TEST11,	JMP SMPL1	/S/B JMP HGET
/
/
	APO I
	JMP BMP11
	NOP
TEST12,	JMP HGET
	APO I
	JMP BMP12
	NOP
TEST13,	JMP HGET
	APO I
	JMP BMP13
	NOP
TEST14,	JMP HGET
	APO I
	JMP BMP14
	NOP
	JMP SMPL1
HGET,	LDA
	0
	STC HGTRET
	XSK I 16
	LDA I 3		/CURSAM(I)
	COM
	ADA I 2		/LIM(I)-CURSAM(I)
	APO		/+ IF PEAKED
	JMP HPLUS	/POSITIVE SLOPE
	LDA 16		/PRESAM FLAG(I)
	APO		/+ IF PEAKED
	JMP FLGSET	/PEAKED BUT NOT SET,DO IT
	LDA 2		/LIM-PASS-CURSAM
	ADA I
PASS,	-10
	COM
	ADA 3
	APO I		/-IF OK TO BUMP
	JMP HGTRET-1
	LDA
	HGTRET
	STC 0
	LDA I
	100
	JMP 0
	LDA I		/FLAG PREVIOUSLY SET GO TO NEXT TEST
HGTRET,	0
	ADA I
	3
	STC 0
	JMP 0
/
FLGSET,	LDA I
	100		/+ FLAG
	STA 16
	JMP 0
/
HPLUS,	LDA 3
	STA 2		/MOVE CURSAM TO LIM1
	LDA I 
	-100
	STA 16
	JMP HGTRET-1
/
/
/
BMP10,	LDF 7
	JMP BMP
	LDA I
	2200
	JMP INC
	JMP TEST11
BMP11,	LDF 6
	JMP BMP
	LDA I
	2210
	JMP INC
	JMP TEST12
BMP12,	LDF 5
	JMP BMP
	LDA I
	2220
	JMP INC
	JMP TEST13
BMP13,	LDF 4
	JMP BMP
	LDA I
	2230
	JMP INC
	JMP TEST14
BMP14,	LDF 3
	JMP BMP
	LDA I
	2240
	JMP INC
	JMP SMPL1
/
SWAP,	LDA 3
	STA 2
	JMP 0
/
BMP,	LDA 
	0
	STC HRET
	LDA 2
	ADA I
	-600
	APO
	JMP .+10
	LDA I 
KU,	1
	ADM 7          
	LDA I
	0
	STC BMPPTR
        JMP HRET-1
	LDA 2
	ADA I 
	-400
	APO
	JMP .+10
	LDA
	KU
	ADM 6
	LDA I
	1
	STC BMPPTR
        JMP HRET-1
	LDA 2
	ADA I
	-200
	APO
	JMP .+10
	LDA
	KU
	ADM 5
	LDA I
	2
	STC BMPPTR
	JMP HRET-1
	LDA
	KU
	ADM 4
	LDA I
	3
	STC BMPPTR
	LDA I
HRET,	0
	STC 0
	JMP 0
/
CURSAM,	0
	0
	0
	0
	0
	0
	0
	0
LIM1,	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
BMPPTR,	0
PRESAM,	0
	0
	0
	0
	0
	0
/
/ 
INC,	NOP
	ADM
	BMPPTR		/AC=ELECTRODE,1=AMPLITUDE
	DJR
	XSK 14		/CS PERIOD
	JMP .+6		/NO
	LDA I
	4		/YES AMP+4+ELECTRODE
	ADM
	BMPPTR
	JMP .+1		/DISABLE DJR
	LDF 2
	LDA
	16
	STA I
SAV16,	0
	LDA
	BMPPTR
	STC 16
	LDA I
	1
	ADM 16		/BMP CNT AAFO AMP,ELEC,PERIOD
	LDA
	SAV16
	STC 16
	LDA I
	-777
	STA 2
	STA 3		/RESET CURSAM AND LIM(I)
	JMP 0
ENDBLK,	SET I 1
	5173
MORE,	LDA I
	0060
	STA
	CS
	ATR
	SET I 13
	-63		/END OF CS TIME SET US (K1) AND CS(K0) FOR 50 BINS
US,	XSK I 13
	JMP ASTART-3	/KEEP RELAYS SET
	LDA I
	0
	ATR		/CLEAR THEM
	SNS I 5
	JMP .+3
	LIF 2
	JMP TYPER
TRT,    XSK I AVGPTR
	JMP CLKSET
	JMP AVG
/
SYNC,	SET I 17
TABLE,	3777
	SET 15
BINS,	SBINS
	SET 4
	TABLE
	SET I 5
DELBIN,	2377
	SET I 6
DLBIN2,	2777
	SET I 7
DLBIN3,	3377
	SET I 11
	-200		/PRECS TIMER
	SET I 2
	LIM1-1
	SET I 3
	PRESAM-1
	SET I 14
	CURSAM-1
	SET I 16
	-5
	LDA I
	-777
	STA I 2
	STA I 3
	STA I 14
	XSK I 16
	JMP .-4
	SET I 14
	1		/SHOW CS
	LDA
	WRTBLK
	ADA I 
	1
	STA
	WRTBLK
	LDA
	TIME
	IOB
	6133		/PRESET TIMER
	LDA I
	4100		/1KC AND PRESET
	STA
	CS		/SHOW SYNC
	IOB
	6132		/CLLR
	IOB
	6135		/CLSA POSSIBLE FLAG
	LDA I
	300		/ENABLE CLOCK
	IOB
	6134		/SET CLOCK INT
	IOB
	6001
	JMP SMPL	/WAIT FOR CLOCK
ASTART,	LDA I  
        4000
	BSE 
	TPEBLK
	STA 
	WRTBLK		/INITIALIZE WRTBLK
	STA
	AVGBLK
	LDA I
	60
	ESF		/IO PRESET
	CLR
	IOB
	6132		/CLLR TO STOP CLOCK
AVGSET, SET I AVGPTR
	3777
	LDF 3
	CLR
	STA I AVGPTR
	LDF 4
	STA AVGPTR
	LDF 5
	STA AVGPTR
	LDF 6
	STA AVGPTR
	LDF 7
	STA AVGPTR
	XSK AVGPTR
	JMP AVGSET+2
	SET I AVGPTR
	-400
	SET I 13
	2177
	CLR
	LDF 2
	STA I 13
	XSK I AVGPTR
	JMP .-2
	CLR
	SET AVGPTR
	SAMN		/N FOR AVERAGE
CLKSET,	LDA
	TIME
	IOB
	6133		/CLAB, PRESET NUMBER
	CLR
	IOB
	6132      /CLLR TO STOP CLOCK
	LDA I
	60
	IOB
	6134		/CLEN 
	IOB
	6135		/CLSA TO CLEAR CLOCK
	IOB
	6001
	LIF 1
	JMP DISPLA	/WAIT FOR SYNC ---
/CUT IN HERE FOR TTY SERVICE BEFORE IOB AND 6001
/
/
AVG,	STD
	JMP .-1
	LDA I 
	60
	ESF
	SET I 17
	3777
	CLR
	SET 14
	SBINS
	SNS I 0
	JMP RESET	/SUPPRESS TAPE
	FIELD 1
	LDF 7
	JMP WRTSET
	JMP RESET
	LDF 6
	JMP WRTSET
	LDF 5
	JMP WRTSET
	LDF 4
	JMP WRTSET
	LDF 3
	JMP WRTSET
	JMP RESET
/
WRTSET,	LDA
	0
	STC WRET
	SET I 17
	4000
	JMP SET1
	JMP WRITE
	SET I 17
	5000
	JMP SET1
	JMP WRITE
	SET I 17
	6000
	JMP SET1
	JMP WRITE
	SET I 17
	7000
	JMP SET1
	JMP WRITE
	LDA I
WRET,	0
	STC 0
	JMP 0
/
SET1,	LDA
	0
	STC RET4
	LDA
	AVGBLK
	BCL I
	7000
	BSE
	17
	STC AVGBLK
	LDA I
RET4,	0
	STC 0
	JMP 0
/
WRITE,	LDA 
	0
	STC RET
	LDA
	AVGBLK
	ADA I
	1
	STA
	AVGBLK
	STD
	JMP .-1
	WRI U
AVGBLK,	0
	LDA I
RET,	0
	STC 0
	JMP 0
/
RESET,	SET I 17
	3777
	SET 15
	SAMN
	LDA I 
	60
	ESF		/IO PRESET TO STOP TAPE
	JMP AVGSET
/
/
/DISPLAY PROGRAM FOR DATA COLLECTION
/
	SEGMNT 1
	*20
DISPLA,	CLR
	LDF 0
	JMP .+1		/ENABLE INTERUPT
	LDA
	SBINS!2000
	STA I
DBINS,	0
	SET I 17
	WRTABL-1
	SET I 16
	-3		/DISPLAY TRIAL NUMBER
	LDA
	WRTBLK!2000
	ROL 3
	STC TEMWRT
UNPACK,	LDA I
TEMWRT,	0
	ROL 3
	STA
	TEMWRT
	BCL I
	7770
	ROL 1
	ADA I
	PATERN
	STA
	3
	LDA 3
	STA I 17	/GET HALF CHAR
	LDA I 3		/GET OTHER HALF
	STA I 17
	XSK I 16
	JMP UNPACK
DISGO,	SET I 17
	WRTABL-1
	SET I 1
	10
	SET I 16
	-6
	SET 3
	DBINS
	LDA I 
	300
	DSC I 17
	XSK I 16
	JMP .-4		/DIS TRIAL NUMBER
	LDF 0
	SET I 17
	BLKTBL-1
	SET I 16
	-3		/DIS BLOCK NUMBER
	LDA
	AVGBLK!2000
	ROL 3
	STC TEMWRT
BKPACK,	LDA 
	TEMWRT
	ROL 3
	STA
	TEMWRT
	BCL I
	7770
	ROL 1
	ADA I
	PATERN
	STA 
	3
	LDA 3
	STA I 17
	LDA I 3
	STA I 17
	XSK I 16
	JMP BKPACK
DISBK,	SET I 17
	BLKTBL-1
	SET I 1
	600
	SET I 16
	-6
	SET 3
	DBINS
	LDA I
	300
	DSC I 17
	XSK I 16
	JMP .-4		/DIS BLOCK NUMB
	CLR
	RSW
	BCL I
	7770
	BSE I 
	0640
	STA
	IELD
IELD,	0	/SET DF SELECTED BY RITE SWTCHS
	SNS I 1		/SMALLEST
	JMP .+5
	SET I 2
K3777,	3777
	SAM 1
	JMP DISLOP
	SET I 2
KBMP2,	2377
	SNS I 2
	JMP .+3
	SAM 2
	JMP DISLOP
	SET I 2
KBMP3,	2777
	SNS I 3
	JMP .+3
	SAM 3
	JMP DISLOP
	SET I 2
KBMP4,	3377
	SNS I 4
	JMP .+3
	SAM 4
	JMP DISLOP
	JMP DISGO
/
/
/DISPLAY SUBROUTINE
DISLOP,	STA I
DTEM,	0
	LDA
	0
	STC DRET
	SET 3
	DBINS
	XSK I 2
	LDA
	DTEM
	ADA 2
	DIS 2
	XSK I 3
	JMP .-6
	LDA I
DRET,	0
	STC 0
	JMP 0
/
/
PATERN,	4136
	3641
	2101
	0177
	4523
	2151
	4122
	2651
	2414
	0477
	5172
	0651
	1506
	4225
	4443
	6050
	5126
	2651
	5120
WRTABL,	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
	00
	0
	0
	0
	0
	0
	0
	0
	0
BLKTBL,	0
	0
	0
	0
	0
	0
	0
	0
	0
AAHERE,	CLR		/STARTING POINT FOR PROGRAM
	IOB
	6046
	LDF 0
	JMP QAINIT
	COMNT
	ANSWER
	JMP QARFSH
	JMP QAINIT
	QEST1
	ANSWER
	JMP QARFSH	/GET TAPEBLOCK AND N FOR AVG
	LDA I
TIMSET,	7612
	STA 
	TIME!2000	/SET TIME TO 10 MSEC PER BIN
	LDA I
	-400
	STA
	SBINS!2000	/SET BINS TO 256
	SET I 14
	ANSWER
	CLR
	STA I
TEMP,	0
	JMP FETCH
	JMP RTEMP	/GET TAPEBLOCK
	COM
	STA
	TPEBLK!2000
	CLR
	STC TEMP
	LDH I 14
	JMP FETCH	/GET N FOR AVG
	JMP RTEMP
	STA
	SAMN!2000
	COM
	STA
	N!2000
	CLR
	JMP QAINIT
	COACH
	ANSWER
	JMP QARFSH
PATCH,	JMP GETFTR
ANSWER,	0
	0
	0
	0
	0
	0
	0
	0
	0
	0
FETCH,	SET I 13
	-3
	LDH I 14
	BCL I
	7770
	ADD TEMP
	ROL 3
	STC TEMP
	XSK I 13
	SKP
	JMP 0
	DJR
	JMP FETCH+2
QEST1,	TEXT ZFSTART TAPE BLOCK<3
FN FOR AVG<3\Z
COACH,	TEXT ZFDATA IS COLLECTED
FON TAPE 1
FDEPRESS LF TO START<1\Z
COMNT,  TEXT ZFALL ANSWERS IN OCTAL
FRESTART BY I/O PRESET
FLEFT SWITCHES TO 2313
FDEPRESS LS, NOW - L/F<1\Z
/
/
/SCALE FACTOR SUBROUTINE TO SET FACTOR
	CNTR=11
GETFTR,	CLR
	STC CNTR
	LDA
	N!2000
	ROR I 1
	LZE 
	JMP .+3
	XSK I CNTR	/BMP CNTR, LINK=0
	JMP .-4
	LDA 
	FACTOR!2000
	BSE
	CNTR
	STA
	FACTOR!2000
	LDF 3
	LIF 2
AATCH,	JMP HEADER
/
RTEMP,	LDA
	TEMP
	ROR 3
	COM
	JMP 0
	SEGMNT 2
	*1200
/
/TYPE OUT ROUTINE
/
TYPER,	CLR
	IOB
	6046		/TLS
	JMP CRLF
	LDF 2
	SET I 1
TSTRT,	2177
	SET I 2
	2477		/PRE AND PRE-CS TABLE
	SET I 3
	-50		/NUMBER OF DIFFERENCES
	SET I 4
	2203
	SET I 5
	-4
	JMP DIFF	/ELEC 1
	SET I 1
	2207
	SET I 4
	2213
	JMP DIFF	/ELEC 2
	SET I 1
	2217
	SET I 4
	2223
	
        JMP DIFF	/ELEC 3
	SET I 1
	2227
	SET I 4
	2233
	JMP DIFF	/ELEC 4
	SET I 1
        2237
	SET I 4
	2243		/ELEC 5
	JMP DIFF
TBSET,	SET I 1
        2477		/START OF P,P-C TABLE
	SET I 5		/NUM OF LINES
	-1
WDSET,	SET I 2
	-10		/NUM OF WORDS/LINE
CHRSET,	SET I 3
	-5		/NUM OF CHARS B4 3 BLANKS
	LDA I 1
	JMP MINUS	/TEST +-
	JMP PRINT	
	XSK I 2
	JMP CHRSET
	JMP CRLF
	XSK I 5		/END OF LINES
	JMP WDSET	/NO
	JMP CRLF
	SET I 1
	2177
	SET I 2
	-400
	CLR
	STA I 1
	XSK I 2
	JMP .-2
	LIF 0
	SET I 1
	5173
	JMP TRT		/
/
/
DIFF,	LDA I 1
	STA I 2		/MOVE PRECS
	COM
	ADA I 4		/CS-PRECS
	STA I 2		/INTERLACE
	DJR
	XSK I 5
	JMP DIFF
	SET I 5
	-4
	JMP 0
/
/ 
CRLF,	LDA 
	0
	STC RET9
	LDA I
	215
	JMP TYPEIT
	LDA I
	212
	JMP TYPEIT
	SET I 17
	0000
	XSK I 17
	JMP .-1
	LDA I
RET9,	0
	STC 0
	JMP 0
/
PRINT,	LDA 
	0
	STC RET6
	CLR
	LDA
	MINUS+1
	ROL 3
	STA
	MINUS+1
	BCL I
	7770
	ADA I
	260
	JMP TYPEIT
	XSK I 3
	JMP PRINT+3
	SET I 4
	-3
BLANK,	LDA I 
	240
	JMP TYPEIT
	XSK I 4
	JMP BLANK
	LDA I
RET6,	0
	STC 0
	JMP 0
/
TYPEIT,	STA I
	0
	LDA
	0
	STC RET8
	LDA
	TYPEIT+1
	IOB
	6041
	JMP .-2
	IOB 
        6046
	LDA I
RET8,	0
	STC 0
	JMP 0
/
/
MINUS,	STA I
	0
	LDA
	0   
        STC RET10
	LDA
	MINUS+1
	APO I
	JMP T100+4
	COM
	STA
	MINUS+1
	LDA I
	255		/NUMBER WAS NEGATIVE
	JMP TYPEIT
T100,	XSK I 3
	JMP TOUT
	JMP CRLF
	JMP TOUT
	LDA I
	240
	JMP T100-1	/NUMBER WAS PLUS TYPE A SPACE
TOUT,	LDA I
RET10,	0
	STC 0
EOP,	JMP 0
/
HEADER,	CLR
	SNS I 5		/SUPPRESS HEADER
	JMP START
	IOB
	6046
	JMP CRLF
	JMP SPACE
	JMP SPACE
	JMP SPACE
	SET I 1
	PTAB-1
	SET I 2
	-7
	LDA I 1
	JMP TYPEIT
	XSK I 2
	JMP .-3
	SET I 2
	-21
	JMP SPACE
	XSK I 2
	JMP .-2
	SET I 2
	-5
	LDA I 1
	JMP TYPEIT
	XSK I 2		/UNITS
	JMP .-3
	SET I 2
	-21
	JMP SPACE
	XSK I 2
	JMP .-2
	SET I 2
	-10
	LDA I 1
	JMP TYPEIT
	XSK I 2
	JMP .-3
	JMP CRLF
	JMP CRLF
	SET I 2
	-4
	SET I 3
	-20
	SET I 1
	CRTAB-1
	LDA I 1
	JMP TYPEIT
	XSK I 3		/
	JMP .-3
	XSK I 2
	JMP .-11
	JMP CRLF
	JMP CRLF
START,  LIF 0
	JMP ASTART
/
/
CRTAB,	320
	322
	305
	303
	323
	240
	240
	303
	323
	255
	320
	322
	305
	240
	240
	240
/
SPACE,	LDA
	0
	STC SPRET
	LDA I
	240
	JMP TYPEIT
	LDA I
SPRET,	0
	STC 0
	JMP 0
/
PTAB,	314
	301
	322
	307
	305
	323
	324		/LARGEST
	325
	316
	311
	324
	323		/UNITS
	323
	315
	301
	314
	314
	305
	323
	324		/SMALLEST
/END OF TYPEING
	NOLIST
	SEGMNT 1
/QANDA SUBROUTINE FOR THE
/PDP-12
/REMOVE *1000 BELOW IF
/INSERTING SOURCE DIRECTLY
/INTO YOUR PROGRAM SOURCE
 *1000/REMOVE,IF DESIRED
/
/TO HERE TO INITIALIZE THE ROUTINE
/
QAINIT,	LDA I		/SAVE JMP RETURN
	2
	ADD 0
	STA I
QAB,	0		/JMP 	+3
	ADD QAL+3
	STC 1		/PTR TO FIRST PARAM
	LDA 1		/GET FIRST PARAM
	ADD QAQ+1	/PTR TO HALFWORD-1
	STC QAG-3
	LDA I 1
	STC QARFSH-1
	STC 6		/XR6 USED AS A SWITCH. =0 IF NO ANSWER FIELD, =1777 IF YES
QACA,	SET 3	/XR3 TO PTR TO ANSWERS
	QARFSH-1
	SET 4		/XR4 TO PTR TO QUESTIONS
	QAG-3
			/TO HERE IF FIRST TIME THROUGH OR FOLLOWING A CR
	SET 1
	4
	JMP QAT
	NOP		/F
	LDH I 4		/H. BUMP PTR IF H OR F
QAD,	JMP QAO
	JMP .+6		/74
	JMP QAE		/34
	SAE I		/CR?
	43
	JMP QAD		/NO
	JMP QACA+4 /EXAMINE NEXT CHAR
			/INITIALIZE ANSWER BUFR
	STH 3		/74 TO ANSWERS
	LDH I 4		/NEXT HALFWORD
	ADA I
	-60
	COM
	STC 6
	STH I 3		/0 IN AC
	XSK I 6
	JMP .-2
	LDH I 3		/BUMP PTR TO ANSWERS
	JMP QAD
			/ANSWER BUFR IS INITIATED
QAE,	STH 3
	SET I 4		/XR4 TO PTR TO LAST TYPED CHAR IN ANSWER BUFR
	0
			/----RE-ENTER HERE TO REFRESH----
QARFSH,	LDA I		/INITIAL Y POSITION
277
	STC QAH-1
	SET I 3		/XR3 TO PTR TO HALFWORD QUESTIONS-1
	0
	SET 5		/XR5 TO PTR TO LAST DISPLAYED CHAR IN ANSWER BUFR
	QARFSH-1
QAG,	SET 1
	3
	JMP QAT
	JMP .+7		/F
	LDH I 3		/H. BUMP PTR
	LDA I		/NEITHER. ASSUME HALF SIZE
	BCL I
	STC QAM+2	/SET INSTR TO CLEAR FF FOR HALF SIZE
	ADD QAW		/NOP IN AC
	JMP QAM
	LDH I 3		/BUMP PTR
	LDA I
	BSE I
	STC QAM+2	/SET INSTR TO SET FF FOR FULL SIZE
	ADD QAW+1	/ADD 9U IN AC
QAM,	STC QAP+3
	MSC I 4		/EAD CONTROL REGISTER
	BSE I		/THIS INSTR CHANGES. EITHER BSE & OR BCL &
	200
	MSC 4		/AC TO CONTROL REGISTER
	SET I 1		/XR1 TO INITIAL X POSITION
	100
	LDA I		/Y COORDINATE MULTIPLE
	-40
	ADM I		/Y COORDINATE
	0
QAH,	LDH I 3
	JMP QAO+1
	JMP QAZ		/74 BUMP PTR TO NEXT CHAR, PUT 40 IN AC
	JMP QAJ		/34
	SHD I		/NEITHER
	4300
	JMP QAG		/CR. MOVE X AND Y COORDINATE
	JMP QAP		/ISPLAY CHAR
	JMP QAH		/PICK UP NEXT CHAR
	JMP QAP		/TO HERE IF DISPLAYING ANSWER BUFR
	SRO I	/SWITCH TO DISPLAY CURSOR. EITHER 0000 OR 7777
	0		/IFXR4=XR5, THEN SWITCH=7777
	JMP QAF
			/QUESTION MODE
QAI,	LDH I 5
	JMP QAO+1
	JMP QAH		/74
	JMP QAH		/34
	JMP QAI-4	/NEITHER. DISPLAY IT
QAJ,	JMP GETKBD	/TO HERE IF DISPLAYED BUFFER
	AZE I
	JMP QAB	/NOTHING TYPED . EXIT
	SET I 2
	QAY
	SHD 2		/LF?
	JMP QAK+4	/YES. EXIT
	SHD I 2		/CR?
	JMP QAN
	XSK 6		/IS THERE AN ANSWER FIELD?
	JMP QARFSH
	SHD I 2		/<?
	JMP QAL
	SHD I 2		/>?
	JMP QAK
	SHD I 2		/ALT?
	JMP QACA /REINITIALIZE
	SHD I 2		/BACK SLASH?
	JMP QARFSH	/IGNORE
	SHD I 2		/RUBOUT?
	JMP QAL		/IGNORE
	SHD I 2		/TAB?
	JMP QARFSH	/IGNORE
	STC .+5		/ACCEPTABLE CHAR
	JMP QAO		/TEST NEXT CHAR
	JMP QAQ		/74 BACK PTR UP BY 1
	JMP QAQ		/34 ^
	LDA I		/OK. STORE IT
	0
	STH 4
	JMP QARFSH	/REDISPLAY
QAL,	LDH 4		/TO HERE IF RUBBOUT OR <
	JMP QAO+1
	JMP QARFSH	/74 IGNORE
	-6002
	LDH 2		/TEST THE CHAR
	SAE I		/RUBOUT?
	37
	JMP QAQ		/NO. BACK PTR UP BY 1
	SET 5
	4
	SET 3
	4
	JMP .+2
	LDH I 5		/BUMP PTR
	LDH I 3		/GET NEXT CHAR
	JMP QAO+1
	NOP		/IF 74 OR 34, REPLACE CURRENT CHAR WITH 0
	CLR
	STH 5
	AZE		/WAS IT 74 OR 34?
	JMP .-7		/NO. CONTINUE
	JMP QAQ		/BACK PTR UP BY 1
			/TO HERE IF CR
QAN,	XSK 6	
	JMP QAK+4	/EXIT ROUTINE IF NO ANSWER FIELD
	JMP QAO
	JMP QARFSH	/74 MOVE PTR TO NEXT QUESTION FIELD
	JMP QAE+1	/34 END OF BUFR. MOVE PTR TO FIRST QUESTION FIELD
	JMP QAN+2
	
QAO,	LDH I 4		/S\R
	SHD I		/	+1 74 BEGIN FIELD
	7400		/	+2 34 END BUFR
	JMP 0		/	+3 NEITHER 74 NOR 34
	SAE I
	34
	XSK I 0
	XSK I 0
	JMP 0
			/S\R TO DISP LINC CHAR IN AC
QAP,	ROL 1		/MULT BY 2 FOR INDEX TO ADDRESS OF TABLE
	ADD QAX+4
	STC 2		/ADDRESS OF CHAR TO DISP IN XR2
	ADD QAU		/THIS INSTR CHANGES. EITHER OP OR ADD 9U
	ADD QAU
	ADD 1		/ADD 4 TO XR1 TO SPACE CHAR
	STC 1
	ADD 5		/GET ADDRESS OF ANSWER BUFR
	COM
	ADD 4
	AZE
	CLR
	STC QAI-2	/SWITCH=0 OR 7777
	ADD QAH-1	/Y COORDINATE IN AC
	DSC 2
	DSC I 2		/DISPLAY CHAR
	JMP 0
QAQ,	LDA I		/BACK UP PTR BY 1
	-4000
	ADM
	4
	JMP QARFSH	/REDISPLAY
			/
QAT,	LDH I 1		/S\R
	SHD I		/	+1 F
	0600		/	+2 H
	JMP 0		/	+3 NEITHER
	SAE I
	10
	XSK I 0
	XSK I 0
	JMP 0
			/
QAZ,	LDH I 3
	LDA I
	40
	JMP QAI-4
			/TO HERE IF >
QAK,	LDH I 4
	AZE I		/IS CURRENT CHAR BLANK?
	JMP QAQ		/YES. IGNORE
	JMP QAX		/MOVE DOT FORWARD
			/TO HERE TO EXIT WITH SKIP
	LDA I
	1
	ADM
	QAB
	JMP QAB
			/CHARACTER PATTERNS
QAV,	0101		/KBD 0, ILLEGAL. USED AS MARKER
	0101
	4477		/1:A
	7744
	5177		/2:B
	2651
	4136		/3:C
	2241
	4177		/4:D
	3641
	4577		/5:E
	4145
	4477		/6:F
	4044
	4136		/7:G
	2645
	1077		/10:H
	7710
	7741		/11:I
	0041
	4142		/12:J
	4076
	1077		/13:K
	4324
	0177		/14:L
	0301
	3077		/15:M
	7730	
	3077		/16:N
	7706	
	4177		/17:O
	7741
	4477		/20:P
	3044
	4276		/21:Q
	0376
	4477		/22:R
	3146
	5121		/23:S
	4651
	4040		/24:T
	4077
	0177		/25:U
	7701	
	0176		/26:V
	7402
	0677		/27:W
	7701
	1463		/30:X
	6314
	0770		/31:Y
	7007
	4543		/32:Z
	6151
	4177		/33:/
	0000
			/34:BACKSLASH IGNORED ON INPUT
	0		/NOT USED
	0		/NOT USED
	0000		/35:]
	7741
			/CODES 36:ALT, 37:RUBOUT NOT DISPLAYED
QAY,	4543		/LF,CR
	7476		/<,>
	3634		/ALT, BACKSLASH
	3747		/RUBOUT, TAB
	0000		/40:SPACE
	0000
	7500		/41:X!
	0000
	7000		/42:"
	0070
			/CODES 43:, 44:, 45:LF NOT DISPLAYED
QAX,	JMP QAO+1
	JMP QAQ
	JMP QAQ
	JMP QARFSH
	QAV
	0		/NOT USED
	5166		/46: &
	0526
			/CODE 47:TAB NOT DISPLAYED
	0		/NOT USED
	0		/NOT USED
	3600		/50:(
	0041
	4100		/51:)
	0036
	2050		/52:*
	0050
	0404		/53:+
	0437
	0500		/54:,
	0006
	0404		/55:-
	0404
	0001		/56:.
	0000
	0601		/57:\
	4030
	4536	/60:0
	3651
	2101		/61:1
	0177
	4523		/62:2
	2151
	4122		/63:3
	2651
	2414		/64:4
	0477
	5172		/65:5
	0651
	1506		/66:6
	4225
	4443		/67:7
	6050
	5126	/70:8
	2651
	5122		/71:9
	3651
	2200		/72::
	0000
	4601		/73:;
	0000
			/CODE 74:<NOT DISPLAYED
QAU,	2		/CONSTANT
	0	/NOT USED
	1212		/75:=
	1212
			/CODE 76:> NOT DISPLAYED
QAW,	NOP
	ADD QAU
	4020		/77:?
	2055
/
QAF,	DSC I
	6000
	JMP QAI
/
			/END Q+A
/
/
/
/
/KEYBOARD INPUT ROUTINE
/
QAKRB=6036	/PDP-8 IOT KBD
QATSF=6041	/TSF
QATLS=6046	/TLS
/
GETKBD,	LDA
	0
	STC QAEXIT+6	/SAVE RETURN
	ADD 1		/SAVE XRS 1 AND 2
	STC QAEXIT+3
	ADD 2
	STC QAEXIT+5
	STC QAEXIT+1
	KST	/WAS SOMETHING TYPED?
	JMP 0		/NO: EXIT
	IOB
	QAKRB	/GET TTY CHAR, CLEAR FLAG
	STA I		/SAVE IT
QATY,	0
	ADA I
	-237
	APO		/BETWEEN 200 AND 237?
	JMP QACNTR	/CONTROL CHAR. CHECK FOR CR,LF,TAB
/
	SET I 1		/NO
	QACHAR-1
	SET I 2
	-7
	LDA
	QATY
	SAE I 1
	JMP .+2
	JMP QAEXIT	/ILLEGAL CHAR. DONT ECHO
	XSK I 2	/CHECKED THEM ALL?
	JMP .-4
/
	ADA I
	-337
	APO		/BETWEEN 240 AND 337?
	JMP QALEGL	/YES. LEGAL CHAR
/
	SAE I 1		/NO. CHECK FURTHER.
	JMP .+7
	LDA I		/RUBOUT
	334
	JMP QATPE	/ECHO BACKSLASH
	LDA I
	37
	JMP QAEXIT+2	/LEGAL EXIT
/
	SAE I 1
	JMP QAEXIT	/ILLEGAL
			/ALT
	JMP QAEXIT+2	/EXIT, DONT ECHO
/
QALEGL,	LDA
	QATY
	JMP QATPE	/ECHO CHAR
	ADD QATY
	BCL I		/STRIP IT TO 6-BIT
	7700
	JMP QAEXIT+2
/TO HERE IF CONTROL CHAR
QACNTR,	SAE I
	7755
	JMP QACKLF
	LDA I		/CR
	43
	STC QAEXIT+1
	LDA I
	215
	JMP QATPE
	LDA I
	212
	JMP QATPE
	JMP QAEXIT
/
QACKLF,	SAE I
	7752
	JMP .+4
	LDA I		/LF
	45
	JMP QACNTR+5
	SAE I
	7751
	JMP QAEXIT	/ILLEGAL
	LDA I
	47
	JMP QAEXIT+2	/EXIT, DONT ECHO
/
QAEXIT,	LDA I	/GET 6-BIT ASCII
	0
	SET I 1		/RESTORE XRS
	0
	SET I 2
	0
	JMP		/EXIR S\R GETKBD
/S\R TO PRINT C(AC)
QATPE,	IOB
	QATLS	/PDP-8 IOT TLS
	LDA
	0
	STC .+4	/SAVE RETURN
	IOB
	QATSF	/WAIT FOR FLAG
	JMP .-2
	JMP 	/EXIT
/
QACHAR,	243	/HASH
	244	/DOLLAR SIGN
	245	/PER CENT
	247	/APOSTROPHE
	300	/AT SIGN
	336	/UP ARROW
	337	/BACK ARROW
	40	/RUBOUT
        36	/ALT



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