File MARK12

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

*20
 
 
/MARK PROGRAM FOR PDP-12
/BY R.J.CLAYTON
/5-30-69
/COPYRIGHT 1969, DIGITAL EQUIPMENT CORP,
/MAYNARD MASS.
 
/VERSION MARK12-0
 
SEGMNT 2
 
LMODE
*16
STDIAL,	701		/READ A GROUP INST.
	7300		/THIS WILL OVERLAY DIAL
			/WHICH STARTS AT 4020
 
 
DT=2000		/THIS IS A CONSTANT USED 
		/FOR REFERENCING CHAR TABLES
		/IN THE DATA FIELD
 
/THIS IS THE STARTING POINT OF 
/THE MARK PROGRAM.  DSP1 IS THE
/FIRST DISPLAY WHERE THE USER
/PICKS THE TYPE OF TAPE TO 
/FORMAT
 
DSP1,	LDF 3		/JUST IN CASE
	JMP QAINIT	/GO TO Q AND A SUBROUT.
	DT DS1		/FIRST FRAME
	ANS		/LOCATION FOR ANS.
	JMP DSP1R	/COME HERE TO REFRESH
 
	LDA		/HERE AFTER LINE FEED
	ANS
	SHD I
	6100
	JMP LTAPE	/GOOD SELECTION
	SHD I
	2000
	JMP PTAPE/	/ALSO GOOD SELECTION
	JMP DSP1	/GO BACK FOR A GOOD
			/SELECTION
 
DSP1R,	LDA		/COME HERE TO REFRESH
	ANS
	SHD I
	0000		/NO ANS YET
	JMP REFRESH
	SHD I
	6100
	JMP REFRESH
	SHD I
	2000
	JMP REFRESH
	JMP DSP1	/A WRONG ANSWER HAS
			/BEEN GIVEN
 
 
 
 
/PROGRAM TO WRITE A
/STANDARD LINC FORMAT TAPE
 
LTAPE,	PDP
PMODE
	JMS ONMARK	/GET MARK TURNED ON
	JMS I KWRTAP	/GO WRITE THE TAPE
	2000	/BEGINING EM
	7777	/BEGINING IM
	0400	/256 WORDS PER BLOCK
	-10	/FIRST FWD BLK NUMB
	-10	/FIRST BKWD BLK NUMB
	1024	/TOTAL NUMBER OF BLOCKS
		/INCLUDES A FEW AT FRONT
		/AND BACK FOR TURN AROUND
	0005	/NO OF IM BETWEEN BLOCKS
	0010	/NUMBER OF FINAL IM CODES
	4000	/NUMBER OF FINAL EM CODES
 
	LINC		/TO LINC MODE
LMODE
	LDA I
	1000		/NO OF BLOCKS TO CHECK
	JMP CHECK	/CHECK WILL FINISH
			/THE JOB
 
 
 
/PROGRAM TO WRITE 129 WORD
/LINC FORMAT TAPE FOR TCO1
/SIMULATION
 
PTAPE,	PDP
PMODE
	JMS ONMARK
	JMS I KWRTAP
	2000
	7777
	0201
	-20
	-15		/THE OFFSET HELPS SEARCH
			/ON TAPE WITH SHORT BLOCKS
	3040
	005
	1777
	2000
 
	LINC
LMODE
	LDA I
	3000		/NUMBER OF DATA BLOCKS
	JMP CHECK
 
 
 
 
 
 
 
KWRTAP,	WRTAP	/CROSS PAGE REF.
 
 
 
 
 
/SUBROUTINE TO TEST TAPE TRANSPORTS
/AND MARK SWITCH TO DETERMINE THAT
/IT IS OK TO MARK TAPE.
/MUST HAVE UNIT 1 SELECTED
/MUST HAVE UNIT 1 WRITE ENABLED
/MUST THEN PRESS MARK SWITCH
/SUBROUTINE WILL PREVENT BASHING
/TAPE ON UNIT 0
 
 
PMODE
ONMARK,	0000
	LINC
LMODE
 
 
DSP2,	JMP QAINIT	/USE Q AND A ROUTINE
DT DS2A		/AS A DISPLAY ROUTINE
			/THIS WILL BE THE FIRST
			/HALF OF THE DISPLAY, IT
			/IS DONE WITH THE TAPE 
			/GOING BACKWARD.
	ANS
	NOP
	LDA I
	0144		/SET UP FOR UNIT 1 AND
			/FORWARD MOTION
	IOB
	6152
 
	JMP QAINIT	/DO SECOND HALF OF THIS
	DT DS2B		/DISPLAY
	ANS
	NOP
 
 
	SET I 4		/THIS LOOP EQUALIZES
	-100
	XSK I 4		/THE FWD AND BKWD
	JMP .-1		/MOTION TIMES
 
	LDA I 
	5000	/SELECT MAINT REG TO
	IOB	/LOOK AT UNITS AND MTN
	6151
	CLR
	IOB
	6154	/SHOULD HAVE UNIT 1,
	SAE I	/WRITE ENABLED, AND 
	5777	/FWD MOTION
	JMP .+2	/NOT YET
	JMP MARKSW
 
OMKST,	LDA I
	0024		/START BACKWARD MOTION
	IOB
	6152
	JMP DSP2	/GO BACK AND TRY AGAIN
 
MARKSW,	LDA I
	0200
	AXO		/TRY TO SET MARK FLOP
	CLR
	MSC I 1		/READ IT BACK
	ROL I 5
	LZE I
	JMP OMKST	/NOT YET PRESSED
 
RET2,	PDP		/TO PDP8 MODE
			/MARK FLIP FLOP IS ON
			/AND TAPE IS FWD MTN.
PMODE
	CLA
	6151		/SET TAPE MAINT REG.
			/SO IOT 6154 WILL
			/TRANSFER AC TO TB
	JMP I ONMARK
 
 
 
*4200
 
/DSP3
/THIS ROUTINE IS USED AFTER CHECKING
/A TAPE THAT THIS PROGRAM MARKED
/FROM HERE THE USER CALLS DIAL OR 
/MARKS ANOTHER TAPE
 
LMODE
DSP3,	JMP QAINIT	/TO DISPLAY ROUTINE
DT DS3		/CHECKING ROUTINE SETS
			/THIS LOCATION FOR FRAME
			/3 OR FRAME 4
	ANS	
	JMP DSP3R	/REFRESH RETURN
	LDA		/RETURN FROM LINE FEED
	ANS
	SHD I		/NOW TEST THE ANSWER
	6100
	JMP DSP1
	SHD I
	6200
	JMP STDIAL
	JMP DSP3
 
DSP3R,	LDA		/REJECT WRONG ANSWERS
	ANS
	SHD I
	6100
	JMP REFRESH
	SHD I 
	6200
	JMP REFRESH
	SHD I 
	0000
	JMP REFRESH
	JMP DSP3	/A BAD ANSWER WAS GIVEN
 
 
 
 
PMODE
 
/SUBROUTINE TO WRITE TAPE
/CALLING SEQUENCE:
/JMS WRTAP
/NO OF BEGINING END MARKS
/NO OF BEGINING IM
/NUMBER OF WORDS OF DATA
/FIRST FWD BLOCK NUMBER
/FIRST BKWD BLOCK NUMBER
/NUMBER OF BLOCKS
/NO OF IM BETWEEN BLOCKS
/NO OF FINAL IM
/NO OF FINAL EM
/RETURN 10TH WORD AFTER JMS
 
WRTAP,	0000
	CLA
	TAD I WRTAP
	ISZ WRTAP
	DCA KIEM 	/SAVE NO OF END MARKS
	TAD I WRTAP
	ISZ WRTAP
	DCA KIIM
	TAD I WRTAP
	ISZ WRTAP
	DCA WRLOOP+2	/SET UP NO OF WRDS.
	TAD I WRTAP
	ISZ WRTAP
	DCA FBLK	/SET FWD BLOCK NO.
	TAD I WRTAP
	ISZ WRTAP
	DCA WRLOOP+3	/SET BKWD BLOCK NO.
	TAD I WRTAP
	ISZ WRTAP
	CMA
	DCA BLKCNT
 
	TAD KHERE	/GO SYNC WITH TAPE WORD
	DCA I KWAIT1
	TAD K0200	/CLEAR TAPE WORD FLAG
	6152		/IOT TO CLEAR
	LINC
	6000 FRSTGO	/THIS IS LINC JMP INST.
			/RETURN WILL BE IN 8 MODE
 
HERE,	TAD KIEM	/NOW WRITE FIRST END MKS.
	JMS I KWMKD	/ACTUALLY GO WRITE IT
	0000		/CODE FOR EM
	TAD KIIM	/NOW WRITE THE BEGINING 
	JMS I KWMKD	/IM MARKS
	0017		/CODE FOR IM
 
WRLOOP,	TAD FBLK
	JMS I KBLOCK	/GO WRITE IT
	0000		/NUMBER OF WORDS
	0000		/BKWD BLOCK NUMBER
	TAD I WRTAP
	JMS I KWMKD
	0017		/WRITE IM BETWEEN BLOCKS
	ISZ FBLK	/INCREMENT BLOCK NUMB.
	NOP
	ISZ WRLOOP+3
	NOP
	ISZ BLKCNT	/DONE ALL BLOCKS YET?
	JMP WRLOOP	/NO
	ISZ WRTAP
 
	JMS I KWAIT1	/WRITE FIRST OF THE
	0017		/THE FINAL IM, CALLED THIS
			/WAY TO CUT DOWN ON TIME,
			/THINGS ARE A BIT PRESSED
			/AT THIS POINT
 
	CLA CMA
	TAD I WRTAP
	ISZ WRTAP
	JMS I KWMKD
	0017		/WRITE FINAL IM MARKS
	TAD I WRTAP
	ISZ WRTAP
	JMS I KWMKD
	0000		/WRITE FINAL END MARKS
	LINC	
LMODE
	CLR
	AXO		/CLEAR MARK FLOP
	SET I 4
	-50		/DELAY A WHILE AND
	LDA I		/BACK UP THE TAPE ON
	0024		/UNIT 1 SO THAT CHECK
	IOB		/PROGRAM CAN TEST THE
	6152		/TAPE
	XSK I 5
	JMP .-5
	XSK I 4
	JMP .-7
	PDP
PMODE
	CLA
	JMP I WRTAP	/ALL DONE GO BACK
 
 
FBLK,	0000		/VARIABLES
BLKCNT,	0000
KIEM,	0000
KIIM,	000
KWAIT1,	WAIT
KHERE,	HERE-1		/WILL BE INCREMENTED
K0200,	0200
 
KBLOCK,	BLOCK		/CROSS PAGE REF.
KWMKD,	WMKWD
 
 
*4400
 
 
/SUBROUTINE TO WRITE A BLOCK
/OF TAPE
/CALLING SEQUENCES:
/JMS BLOCK WITH FWD BLOCK NO IN
/THE AC.
/FIRST LOCATION AFTER JMS CONTAINS
/NUMBER OF DATA WRDS IN BLOCK
/SECOND LOCATION AFTER JMS CONTAINS
/BACKWARD BLOCK NUMBER
/ THIS ROUTINE WILL WRITE:
/	BM  (FWD)
/	GM
/	DM  (MIN. 14, MAX. 4096)
/	FM
/	CM  (THREE WORDS)
/	GM
/	BN  (BKWD)
/
 
 
BLOCK,	0000
	CMA		/USED IN COMP. FORM
	JMS I KWAIT	/WRITE FWD BM
	0016		/BLOCK NO CODE WORD
	TAD I BLOCK	/GET NO OF DATA WORDS
	CMA CLL
	TAD K0016
	SZL		/LESS THAN 14 WORDS
	HLT
	SNA
	HLT		/SPECIFIED 14 WORDS
	DCA COUNTA	/SAVE NUMBER OF WORDS
	ISZ BLOCK	/MOVE POINTER
	TAD I BLOCK	/GET BKWD BLOCK NO
	DCA BKBNS	/SAVE IT
	DCA BKBNA	/CLEAR BKWRD BLK
			/ASSEMBLY REGISTER
	JMS I KWAIT	/WRITE GUARD WORD
	0002		/GUARD MARK CODE
	TAD K7764
	DCA COUNTB	/COUNT OF 12
	TAD KB1TAB	/SET UP BIT TABLE POINTER
	DCA TEMPA
BLKLP1,	TAD K5252	/WRITE 1ST 12
	JMS I KWAIT	/WORDS AND FORM
	0011		/BKWRD BLK NO FOR
	TAD BKBNS	/WRITING ON TAPE
	RAL
	DCA BKBNS
	SZL
	TAD I TEMPA	/GET A BIT
	TAD BKBNA	/COMBINE WITH OTHER
	DCA BKBNA	/BITS AND SAVE THEM
	ISZ TEMPA	/MOVE POINTER
	ISZ COUNTB	/DONE 12 YET
	JMP BLKLP1	/NO
BLKLP2,	TAD K5252	/WRITE REST OF DATA WORDS
	JMS I KWAIT	/WRITE DATA WORD
	0011		/DATA MARK CODE
	ISZ COUNTA	/DONE YET
	JMP BLKLP2	/NO
	TAD K5252	
	JMS I KWAIT	/WRITE FINAL MARK
	0013		/FINAL MARK CODE
	CLA IAC STL RAL	/WRITE 3 CHECK WORDS
	JMS I KWMKWD
	0001		/CHECKMARK CODE
	JMS I KWAIT	/WRITE GUARD MARK
	0002		/GUARD MARK CODE
	TAD BKBNA
	JMS I KWAIT	/WRITE BKWD BLOCK NO.
	0007		/BACKWARD BLK NO CODE
	ISZ BLOCK	/INCREMENT RETURN
	JMP I BLOCK	/OR BACK
COUNTA,	0		/COUNTER NO OF DATA WRDS
COUNTB,	0		/COUNTER 1ST 12 WORDS
TEMPA,	0		/RANDOM USAGE
BKBNS,	0000		/SAVE BKWD BN AS CALLED
BKBNA,	0000		/FORM BKBWD BN THAT
			/WILL BE WRITTEN ON TAPE
B1TAB,	0400		/TABLE USED TO FORM
	1000		/BACKWARD BLOCK NO.
	2000
	4000
	0020
	0040
	0100
	0200
	0001
	0002
	0004
	0010
 
 
K0016,	0016		/CONSTANTS
K7764,	7764
KB1TAB,	B1TAB
KWAIT,	WAIT
KWMKWD,	WMKWD
K5252,	5252
 
 
 
 
*4600
 
/SUBROUTINE TO WAIT FOR COMPLETION
/OF CURRENT TAPE WORD
/AND THEN TRANSFER DATA TO TAPE
/CONTROL FOR THE NEXT WORD
/(4 LINES) 
 
/CALLING SEQUENCE:
/JMS WAIT FOLLOWED BY MARK CODE
/TO BE GENERATED.  THE AC 
/CONTAINS THE DATA WORD TO 
/BE WRITTEN WITH THE ABOVE
/MARK CODE.
 
/PROGRAM MUST RETURN WITH THE
/NEXT WORD TO BE WRITTEN WITHIN
/42 MICROSECONDS
/THIS SUBROUTINE TAKES UP TO
/52 MICROSECONDS IF SYSTEM CYCLE
/TIME WERE TO GET AS SLOW AS
/1.9 MICROSEC.
 
 
 
WAIT,	0000
	6154		/PUT DATA WORD IN TB
			/THE ACTUAL WORD WRITTEN
			/ON THE TAPE WILL BE THE
			/COMP OF THE NUMBER JUST
			/PLACED IN THE TB REG.
	CLA CLL
	TAD I WAIT	/GET MARK CODE
	LINC		/GO TO LINC MODE
LMODE
	SXL I 17	/TEST TO SEE IF TAPE
	HLT		/WORD FF IS UP, IF SO
			/THEN WE HAVE DELAYED
			/AND ALL IS LOST.
FRSTGO,	SXL 17		/NOW WAIT FOR TAPE WORD
	JMP .-1		/FLIP FLOP
	LDA I
	0200
	PDP		/TO PDP 8 MODE
PMODE
	6152		/CLEAR TAPE FLAG
	ISZ WAIT	/INCREMENT RETURN
	CLA
	JMP I WAIT	/GO BACK
 
 
 
 
 
/SUBROUTINE TO WRITE A NUMBER
/WORDS OF A GIVEN MARK CODE
/CALLING SEQUENCE:
/ IS JMS MKWRD FOLLOWED BY CODE WORD.
/ AC CONTAINS NO OF WORDS TO BE WRITTEN
/THIS SUBROUTINE ADDS 17 CYCLES TO THE
/WAIT ROUTINE AND MUST BE CALLED WITHIN
/20 MICROSEC.OF THE LAST WAIT EXIT.
/THIS ADDS 10 MICROSEC. TO THE WAIT
/EXIT TIME
 
 
 
WMKWD,	0000
	CMA IAC
	DCA WMCNT	/SET UP NO OF WRDS.
	TAD I WMKWD	/PICK UP MARK CODE
	DCA WMCODE
	JMS WAIT	/GO WRITE A WORD
WMCODE,	0000		/HOLDS MARK CODE 
	ISZ WMCNT		/DONE ALL WORDS YET
	JMP .-3		/NO
	CLA		/YES GO BACK
	ISZ WMKWD	/INCREMENT RETURN
	JMP I WMKWD
 
 
WMCNT,	0000
 
 
 
 
 
/SUBROUTINE TO CHECK THE TAPE THAT HAS
/JUST BEEN WRITTEN. ENTER CHECK WITH THE
/TOTAL NUMBER OF POSITIVE DATA BLOCKS
/IN THE AC.THE SUBROUTINE WILL WRITE
/A PATTERN OF 11+11+11 ETC. IN EACH BLOCK
/THEN BACKWARD BLOCK NUMBERS ARE CHECKED
/THEN ALL BLOCKS ARE READ INTO CORE AND
/THEIR CHECKSUMS VERIFIED.  THEN THE LAST
/DATA BLOCK IS CHECKED TO BE SURE ALL
/DATA IS CORRECT.
 
/EXIT IS TO DSP3 ROUTINE WHICH TELLS
/THE USER IF THE TAPE IS GOOD OR BAD
/AND ALLOWS MORE MARKING OR RETURN TO
/DIAL
 
LMODE
CHECK,	STC CFBLK	/SAVE NUMBER OF BLOCKS
	LDF 0
	SET I 1		/GENERATE TEST PATTERN
	3777
	LDA I
	11
	STA I 1
	ADD .-2
	XSK 1
	JMP .-3		/NOT DONE YET
 
 
	CLR
	STC WBLKNO
	LDA I
	0020		/SET UP EXTENDED ADDRESS
	AXO		/FORMAT FOR TAPE
WLOOP,	LDA I
	0000
	TMA		/LOAD TMA SETUP REG.
	WRI I U		/WRITE ON TAPE
WBLKNO,	0000
	LDA I
	1
	ADM
	WBLKNO
	SAE I 		/WRITTEN LAST BLK YET
CFBLK,	0000		/HOLDS FINAL BLOCK NO
	JMP WLOOP
 
 
	MTB I U		/NOW TEST BKWD BLK NO.
	0000
	MTB I U
	0000
	ADA I 
	0001
	STA I
BTEST,	0000
	MTB I U
	0000
	SAE 
	BTEST
	JMP RERROR	/BKWN BN WRONG
	AZE
	JMP BTEST-3	/NOT DONE YET
 
 
	LDA I 		/NOW CHECK WRITTEN TAPE
	0020
	AXO		/EX ADD FORMAT
	CLR
	STC RBLKNO
RLOOP,	LDA I 
	0000
	TMA
	RDE I U
RBLKNO,	0000
	SAE I
	7777		/CHECKSUM OK
	JMP RERROR	/NO
	LDA I 		/YES
	0001
	ADM
	RBLKNO
	SAE 
	CFBLK
	JMP RLOOP
 
	SET I 1		/DONE NOW CHECK LAST
	3777		/BLOCK
	LDA I		/THIS IS DATA TEST
	0011
DLOOP,	SAE I 1
	JMP RERROR
	ADD .-3
	XSK 1
	JMP DLOOP
 
	LDA I
	DT DS3		/SET UP FOR GOOD TAPE
			/DISPLAY FRAME
	JMP .+3
 
RERROR,	LDA I		/COME HERE ON CHECKING 
	DT DS4		/ERROR, SET UP FOR ERROR
			/DISPLAY FRAME
 
	STC DSP3+1
	LDF 3
	CLR
	AXO		/CLEAR EXTENDED ADD.
			/FORMAT AND HEAD THE
	MTB I U		/TAPE FOR THE FRONT
	0000		/END
	MTB I U
	0000
 
	JMP DSP3
 
ANS,	0000	/LOCATION FOR ANSWERS 
	0000	/FROM Q AND A
 
/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
	377		/NOTE VERT IS SET HIGH
	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
 
 
 
 
 
REFRESH=QAINIT+53
 
 
 
SEGMNT3
*0001
 
 
/FRAME 1
/   MARK12
/THIS PROGRAM WILL FORMAT AND CHECK 
/LINC TAPES FOR THE PDP-12
 
/SELECT OPTION AND PRESS LINE FEED 
/ON THE CONSOLE TELETYPE
 
/SELECT -
 
/ 1 STD LINC FORMAT
 
/ 2 129 WORD FORMAT
 
 
/FRAME 2
 
/MOUNT TAPE TO BE
/MARKED ON THE RIGHT
/REEL OF UNIT 1
 
/PLACE UNIT 1 IN
/REMOTE WITH
/WRITE ENABLED, THEN
 
/PRESS THE MARK SWITCH
 
 
/FRAME 3
 
/   GOOD TAPE
 
/ALLOW MARKED TAPE TO REWIND
/THEN SELECT OPTION AND TYPE
/LINE FEED ON THE TELETYPE
 
/SELECT -
 
/ 1 MARK ANOTHER TAPE
 
/ 2 RESTART DIAL
 
 
 
/FRAME 4
 
/TAPE CHECK FAILED
 
/SELECT -
 
/ 1 MARK ANOTHER TAPE
 
/ 2 RESTART DIAL
 
 
DS1,	TEXT ZF    MARK 12
H
H    THIS PROGRAM WILL FORMAT AND CHECK
H    LINC TAPES FOR THE PDP-12
H
H    SELECT OPTION AND PRESS LINE FEED
H    ON THE CONSOLE TELETYPE
 
FSELECT  <1
 
F  1  STD LINC FORMAT
F
F  P  129 WORD FORMAT
\Z
 
 
DS2A,	TEXT Z
F MOUNT TAPE TO BE
F MARKED ON THE RIGHT
F REEL OF UNIT 1.
F
F PLACE UNIT 1 IN
\Z
DS2B,	TEXT Z
 
 
 
 
 
F REMOTE WITH 
F WRITE ENABLED, THEN
F 
F PRESS THE MARK SWITCH
\Z
 
 
DS3,	TEXT ZF
F   GOOD TAPE
F
H   ALLOW MARKED TAPE TO REWIND
H   THEN SELECT OPTION AND TYPE
H   LINE FEED ON THE TELETYPE
F
FSELECT  <1
F
F 1 MARK ANOTHER TAPE
F
F 2 RESTART DIAL
\Z
 
 
DS4,	TEXT ZF
F   TAPE CHECK FAILED
F
F
F
FSELECT <1
F
F 1 MARK ANOTHER TAPE
F
F 2  RESTART DIAL
F
\Z
 
 



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