File SINPRE

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

*20
/SINPRE
/PAGE 0
	PMODE
	*10
XR0,	0
XR1,	1
XR2,	2
	*20
	LINC
	LMODE
	LIF 2
	JMP BEGIN
	PMODE
	*50
FTB,	0
LTB,	0
ITU,	0
OFTB,	0
OTU,	0
	*70
C700,	700
C704,	704
RTBLK,	0
STSW,	0
BBUFA,	TBUF+377
TBUFA,	TBUF
READA,	READ
WRITEA,	WRITE
INWORD,	0
	0
MAX,	0
	0
PTR,	0
C7400,	7400
CTR,	0
OTBLK,	0
OBUFA,	OBUF-1
OEND,	OBUF+377
TCTR,	0
C777,	777
TTYOA,	TTYO
C1X,	10
CRLFA,	CRLF
ALDONE,	DONEAL
XOINP,	0
XOOUT,	0
C4X,	4000
C5X,	5000
RSTRTA,	RSTRT
M4X,	-400
	*200
XEGIN,	CLA CLL
	DCA MAX
	DCA MAX+1
	TAD ITU
	CLL RAR
	DCA XOINP
	TAD C700
	SZL
	TAD C1X
	DCA R2
	TAD OTU
	CLL RAR
	DCA XOOUT
	TAD C704
	SZL
	TAD C1X
	DCA W2
	DCA CTR
	TLS
	JMS I CRLFA
	JMP I .+1
	SRCH
/
/
/THIS ROUTINE WILL SHIFT THE 
/MAX DP VALUE TO 8 BITS
/THE NUMBER OF SHIFTS IS IN CTR
/
/
SHIFT,	CLA CLL
	TAD MAX
	RAL
	SZA SNL CLA
	JMP S3
	TAD MAX+1
	SZA
	JMP S3
	TAD C17X
	DCA CTR
	JMP I S4
S3,	CLA
	TAD MAX
	SZA CLA CLL
	JMP S1
	TAD MAX+1
	AND C7400
	SNA CLA
	JMP I S4
	CLL
	JMP S2
S1,	TAD MAX
	RAR
	DCA MAX
S2,	TAD MAX+1
	RAR
	DCA MAX+1
	ISZ CTR
	JMP SHIFT
S4,	TRAN
C17X,	17
/
/
/READ OR WRITE 1 BLOCK TO 
/THE SPECIFIED UNITS
/
/
READ,	0
	TAD RTBLK
	AND C777
	TAD C4X
	DCA R1
	LINC
	LMODE
	ADD XOINP
	AXO
	CLR
	LDF 1
R2,	0
R1,	0
	CLR
	PDP
	PMODE
	JMP I READ
WRITE,	0
	TAD OTBLK
	AND C777
	TAD C5X
	DCA W1
	LINC
	LMODE
	ADD XOOUT
	AXO
	CLR
	LDF 1
W2,	0
W1,	0
	CLR
	PDP
	PMODE
	JMP I WRITE
/
/ALL ERROR CONDITIONS END UP HERE
/RETURN TO MSG 1 OF SET UP
/
RSTRT,	LINC
	LMODE
	LIF 2
	JMP BEGIN
	PMODE
/
/
/
/SEARCH THE INPUT FILE FOR THE
/THE MAX VALUE (ABSOLUTE)
/IF A VALUE IS NEG. MAKE IT POS
/SEARCHES FROM THE END OF THE
/INPUT FILE AND SKIPS THE
/ENDING ZEROS
/THE MAX VALUE IS LEFT IN MAX
	*400
SRCH,	CLA
	TAD LTB
	DCA RTBLK
	IAC
	DCA STSW
TAG1,	IAC
	TAD BBUFA
	DCA PTR
	JMS I READA
	TAD STSW
	SNA CLA
	JMP TAG2
TAG4,	JMS GETWRD
	TAD INWORD
	SZA CLA
	JMP TAG3
	TAD INWORD+1
	SZA CLA
	JMP TAG3
/
/CHECK FOR TOP OF BUFFER
/
	TAD PTR
	CIA
	TAD TBUFA
	SPA CLA
	JMP TAG4
/
/CHECK FOR START OF FILE
/
	TAD RTBLK
	CIA
	TAD FTB
	SNA CLA
	JMP TAGA
	CMA
	TAD RTBLK
	DCA RTBLK
	JMP TAG1
/
/HERE AFTER FIRST NON ZERO VALUE
/
TAG3,	ISZ PTR
	ISZ PTR
	DCA STSW
/
/NON ZERO VALUES
/
TAG2,	JMS GETWRD
	TAD INWORD
	SMA CLA
	JMP TAG5
/
/IF NEG  MAKE POS
/
	TAD INWORD
	CMA
	DCA INWORD
	TAD INWORD+1
	CIA
	SNA
	ISZ INWORD
	DCA INWORD+1
/
/COMPARE TO MAX
/
TAG5,	TAD MAX
	CLL CML CIA
	TAD INWORD
	SZL SPA
	JMP TAG6
	SZA CLA
	JMP FMAX
	TAD MAX+1
	CIA CLL
	TAD INWORD+1
	SNL CLA
	JMP TAG6
/
/REPLACE MAX IF INWORD 
/IS LARGER (OR EQUAL)
/
FMAX,	TAD INWORD
	DCA MAX
	TAD INWORD+1
	DCA MAX+1
/
/TOP OF BUFFER CHECK
/
TAG6,	TAD PTR
	CIA
	TAD TBUFA
	SPA CLA
	JMP TAG2
/
/END OF TAPE CHECK
/
	TAD RTBLK
	CIA
	TAD FTB
	SNA CLA
/
/DONE IF END OF FILE
/
	JMP I TAG7
	CMA
	TAD RTBLK
	DCA RTBLK
	JMP TAG1
TAG7,	SHIFT
TAGA,	TAD NDAT
	JMS I TTYOA
	JMP I RSTRTA
NDAT,	NODAT-1
/
/DECREMENTS PTR AND LEAVES DP WORD
/AT INWORD
/
GETWRD,	0
	CMA
	TAD PTR
	DCA PTR
	TAD I PTR
	DCA INWORD
	CMA
	TAD PTR
	DCA PTR
	TAD I PTR
	DCA INWORD+1
	JMP I GETWRD
/
/
/TRANSLATES EACH VALUE OF THE
/INPUT FILE TO A SINGLE PRECISION
/NUMBER
/IT CONSTRUCTS THE OUTPUT FILE
/STARTING AT OFTB
/DOES NOT LET THE OUTPUT FILE
/OVERLAP THE INPUT FILE IF THE UNITS
/ARE COMMON
	*600
TRAN,	CLA
	TAD FTB
	DCA RTBLK
	TAD OFTB
	DCA OTBLK
	TAD OBUFA
	DCA XR2
TR1,	JMS I READA
	CMA
	TAD TBUFA
	DCA XR1
TR2,	TAD I XR1
	DCA INWORD+1
	TAD I XR1
	DCA INWORD
/
/NO SHIFT IF CTR IS 0
/
	TAD CTR
	SNA
	JMP TR6
	CIA
	DCA TCTR
/
/SHIFT RIGHT TCTR TIMES
/
TR3,	CLL
	TAD INWORD
	SPA
	STL
	RAR
	DCA INWORD
	TAD INWORD+1
	RAR
	DCA INWORD+1
	ISZ TCTR
	JMP TR3
/
/LSB TO OUTPUT BUFFER
/
TR6,	TAD INWORD+1
	DCA I XR2
/
/CHECK OUTPUT BUFFER FULL
/
	TAD XR2
	CIA
	TAD OEND
	SZA CLA
	JMP TR5
	JMS I WRITEA
	ISZ OTBLK
	TAD OBUFA
	DCA XR2
/
/CHECK TAPE LIMIT
/
	TAD OTBLK
	CIA
	TAD C777
	SMA CLA
	JMP TR4
/
/NO MORE INPUT IF AT LIMIT
/
	JMS CIBF
	SNA CLA
	JMP ERROR
	JMS CIPT
	SNA CLA
	JMP ERROR
	JMP I ALDONE
ERROR,	TAD OUTOVA
	JMS I TTYOA
	JMP I RSTRTA
OUTOVA,	OUTOV-1
DATOVA,	DATOV-1
/
/CHECK FOR OVERFLOW IF UNITS 
/ARE EQUAL
/
TR4,	TAD ITU
	CIA
	TAD OTU
	SZA CLA
	JMP TR5
	TAD OTBLK
	CIA
	TAD FTB
	SZA CLA
	JMP TR5
	TAD DATOVA
	JMS I TTYOA
	JMP I RSTRTA
/
/CHECK FOR END OF INPUT
/
TR5,	JMS CIBF
	SNA CLA
	JMP TR2
	JMS CIPT
	SZA CLA
	JMP I ALDONE
	ISZ RTBLK
	JMP TR1
/
/
/CHECK STATUS OF INPUT BUFFER
/
CIBF,	0
	TAD XR1
	CIA
	TAD BBUFA
	SNA CLA
	IAC
	JMP I CIBF
/
/
/CHECK STATUS OF INPUT FILE
/
CIPT,	0
	TAD RTBLK
	CIA
	TAD LTB
	SNA CLA
	IAC
	JMP I CIPT
/
/
/FILL REMAINING PORTION OF THE
/OUTPUT BUFFER WITH ZEROS
/THEN WRITE IT ON TAPE
DONEAL,	TAD XR2
	CIA
	TAD OEND
	TAD M4X
	SNA CLA
	JMP DONE1
DONE2,	DCA I XR2
	TAD XR2
	CIA
	TAD OEND
	SZA CLA
	JMP DONE2
	JMS I WRITEA
DONE1,	LINC
	LMODE
	LIF 2
	JMP M5
/
/
/
	PMODE
	*1000
TTYO,	0
	DCA XR0
	JMS CRLF
TT1,	TSF
	JMP .-1
	TAD I XR0
	SNA
	JMP TT2
	TLS
	CLA
	JMP TT1
TT2,	JMS CRLF
	JMP I TTYO
CRLF,	0
	TAD CC
	TSF
	JMP .-1
	TLS
	CLA
	TAD LF
	TSF
	JMP .-1
	TLS
	CLA
	JMP I CRLF
CC,	215
LF,	212
/
/
NODAT,	316
	317
	240
	304
	301
	324
	301
	207
	212
	0
OUTOV,	317
	325
	324
	320
	325
	324
	240
	317
	326
	305
	322
	306
	314
	317
	327
	207
	212
	0
DATOV,	304
	301
	324
	301
	240
	317
	326
	305
	322
	306
	314
	317
	327
	207
	212
	0
/
/
/INPUT FILE BUFFER
	*2000
TBUF,	0
/
/
/OUTPUT FILE BUFFER
	*2400
OBUF,	0
	LMODE
	SEGMNT 2
	*20
BEGIN,	LDA I
	20
	ESF		/SET IO PRESET
START,	JMP M1
	JMP M2
	JMP M3
	JMP M4
	PDP
	PMODE
	JMP I .+1
	200
	LMODE
	JMP M5
M1,	SET 17
	0
M1A,	JMP QAINIT
	MESS1
	ANSWER
	JMP CHKSNS
	SET I 10
	ANSWER
	LDH I 10
	SHD I
	0300		/A  C?
	JMP 17
	JMP M1A
M2,	SET 17
	0
M2A,	JMP QAINIT
	MESS2
	ANSWER
	JMP CHKSNS
	SET I 10
	ANSWER
	LDA I 		/SET UP FOR
	10		/OCTAL INPUT
	STA		/TO OCTAL
	MULWD		/CONVERSION
	COM
	STC UPLIM
	JMP CHAR
	SKP
	JMP M2A
	LDA
	OCTAC
	JMP ZERO
	STC FBLK2	/FIRST BLK NO
	JMP CHAR
	SKP
	JMP M2A
	LDA
	OCTAC
	JMP ZERO
	STC LBLK2	/LAST BLK NO
	LDA
	FBLK2
	ADA I 
	-1
	COM
	ADD LBLK2
	APO		/LSTBLK>FSTBLK?
	JMP M2A		/NO
	JMP CHAR	/YES
	SKP
	JMP M2A
	LDA
	OCTAC
	JMP ZERO
	STC UNIT2	/UNIT NO
	JMP 17
M3,	SET 17
	0
M3A,	JMP QAINIT
	MESS3
	ANSWER
	JMP CHKSNS
	SET I 10
	ANSWER
	JMP CHAR
	SKP
	JMP M3A
	LDA
	OCTAC
	JMP ZERO
	STC FBLK3	/FIRST BLK TEMP
	JMP CHAR
	SKP
	JMP M3A
	LDA
	OCTAC
	JMP ZERO
	STA
	UNIT3		/UNIT3 TEMP
	SAE
	UNIT2		/UNIT3 = UNIT2?
	JMP OK
	LDA		/YES
	FBLK2
	COM
	ADD FBLK3
	AZE I
	JMP M3A
	APO
	JMP OK
	LDA
	FBLK3
	COM
	ADD LBLK2
	AZE I
	JMP M3A
	APO
	SKP		/NO
	JMP M3A		/YES
OK,	JMP CHARLY
	JMP 17
M4,	SET 17
	0
M4A,	JMP QAINIT
	MESS4
	ANSWER
	JMP CHKSNS
	SET I 10
	ANSWER
	LDH I 10
	SHD I
	0300		/A  C?
	JMP 17
	JMP M4A		/NO
M5,	JMP QAINIT
	MESS5
	ANSWER
	JMP QARFSH
	SET I 10
	ANSWER
	LDH I 10
	SHD I
	2200		/AN R?
	JMP BEGIN
	HLT		/STOP
CHAR,	SET 16
	0
	CLR
	STC OCTAC
LOOP1,	LDH I 10
	SHD I
	7400		/E O ANS.F.
	JMP 16
	SHD I
	3400		/E O M?
	JMP 16
	SHD I
	0		/A BLANK?
	JMP LOOP1
	ADA I
	-60		/A DIGIT?
	STA
	NUM
	ADA I
	1
	APO		/NUM IS NONNEG?
	JMP XIT		/SHOULD BE
	ADA I
UPLIM,	0		/IS NUM LESS
	APO I		/THAN 10?
	JMP XIT		/SHOULD BE
	LDA
	OCTAC
	MUL I
MULWD,	0
	ADD NUM
	STC OCTAC
	JMP LOOP1
CHARLY,	LDA
	0
	STC RTN1
	SET 15
	INPTR
	LDF 0
	LDA
	FBLK2
	STA I 15
	LDA
	LBLK2
	STA I 15
	LDA
	UNIT2
	STA I 15
	LDA
	FBLK3
	STA I 15
	LDA
	UNIT3
	STA I 15
RTN1,	0
XIT,	XSK I 16
	JMP 16
CHKSNS,	SNS 0
	JMP QARFSH
	JMP START
ZERO,	SAE I
	7777
	SKP
	CLR
	JMP 0
OCTAC,	0
NUM,	0
FBLK2,	0
LBLK2,	0
UNIT2,	0
FBLK3,	0
UNIT3,	0
INPTR,	2047
MESS1,	TEXT ZF       SINPRE
	
	
H    CONVERT A DOUBLE PRECISION FILE
H       TO A SINGLE PRECISION FILE
	
FTYPE C TO CONTINUE <1\Z
MESS2,	TEXT ZFDBLE PRECISION FILE
	
F  FIRST BLOCK <3
F   LAST BLOCK <3
F         UNIT <1\Z
MESS3,	TEXT ZFSNGL PRECISION FILE
	
F  FIRST BLOCK <3
F         UNIT <1\Z
MESS4,	TEXT ZF    MOUNT TAPES
F  ON PROPER UNITS
	
FTYPE C TO CONVERT <1\Z
MESS5,	TEXT ZF   REQUESTED DATA
F HAS BEEN CONVERTED
	
H         TYPE R FOR ANOTHER JOB
	
F      REPLY <1\Z
ANSWER,	0
	*.+7
	NOLIST
/QANDA SUBROUTINE FOR THE
/PDP-12
/REMOVE *1000 BELOW IF
/INSERTING SOURCE DIRECTLY
/INTO YOUR PROGRAM SOURCE
/
/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
/END OF S\R GETKBD
	LIST
AAAEND,	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