File: CONFIG.06 of Tape: Various/Tests/m1
(Source file text) 

/	OS/8 SYSTEM CONFIGURATOR	CONFIG.06

/13 JULY 1972	RL/EF
/COPYRIGHT 1971,1972		DIGITAL EQUIPMENT CORP.
/				MAYNARD,MASS.

/ABSTRACT---
/CONFIG IS THE SYSTEM CONFIGURATOR FOR OS/8.CONFIG
/CONTAINS CONDITIONAL ASSEMBLY PARAMETERS WHICH DEFINE
/MONITOR TABLES AND DEVICE HANDLERS.ANY CHANGES TO DEVICE
/HANDLERS MUST BE MADE IN CONFIG.


/THIS ASSEMBLY INCLUDES CODE FOR THE TD8E DECTAPE
/SYSTEM. ONLY DRIVES 0&1 ARE SUPPORTED, IN A SYSTEM
/CONFIGURATION.
/	OS/8 SYSTEM CONFIGURATOR

/I)	DETAILS OF CONDITIONAL ASSEMBLY

/	CONFIG USES PARAMETERS WHICH MAY BE SPECIFIED AT
/ASSEMBLY TIME.THESE PARAMETERS ARE USED IN CONSTRUCTING
/CORE RESIDENT TABLES,AND ALSO IN DETERMINING WHICH DEVICES
/ARE IN THE SYSTEM.SPECIFICALLY,WHICH DEVICE WILL BE THE
/SYSTEM DEVICE.

/PARAMETERS:
/A)	DIRECT
/	IFNDEF DIRECT <DIRECT=0>

/THIS SWITCH CONTROLS THE WRITING OF THE DIRECTORY AND ABSLDR
/FILES ON THE SPECIFIED SYSTEM DEVICE. IF DIRECT IS DEFINED
/NON-ZERO, THOSE RECORDS CONTAINING THE DIRECTORY
/AND THE ABSOLUTE LOADER ARE NOT REWRITTEN WHEN A NEW SYSTEM
/IS GENERATED. A NEW SYSTEM CAN BE BUILT WITHOUT DESTROYING
/PREVIOUSLY LOADED FILES.

/B) SYSTEM DEVICE PARAMETERS
/DEFINING ONE OF THESE AT ASSEMBLY TIME SPECIFIES WHICH DEVICE
/IS TO BE USED AS THE SYSTEM DEVICE. INTERNAL TABLES ARE ASSEMBLED
/TO REFLECT THIS DEVICE.

/	DECTAPE
/	IFNDEF DECTAPE <DECTAPE=0>

/	DEFINING DECTAPE WILL DESIGNATE DTA0 AS SYS:
/	NOTE:IF DECTAPE=1, DEVICE DSK: WILL BE DTA0:
/	IF DECTAPE =2, DEVICE DSK: WILL BE DTA1:


/	TD8E
/	THIS VERSION OF CONFIG SUPPORTS TD8E IN A NONSYSTEM
/	CAPACITY. THIS IS WITH RESTRICTIONS. NO MONITOR
/	OPERATIONS (GET, RUN, SAVE) CAN BE DONE TO THE
/	NONSYSTEM TD8E. SETTING TD8E=1 WILL DISABLE DECTAPE
/	AND ASSEMBLE TD8E HANDLER. TD8E AND DECTAPE ARE
/	INCOMPATIBLE, AND ASSEMBLY ERRORS OCCUR IF THEY ARE
/	BOTH PRESENT.

/	TD8ESYS
/	DEFINING TD8ESYS CAUSES AN ASSEMBLY FOR THE TD8E
/	DECTAPE. IF TD8ESYS=1, A SINGLE TAPE SYSTEM WILL
/	RESULT; I.E. SYS=DSK=UNIT 0. IF TD8ESYS=2, A TWO
/	TAPE SYSTEM WILL BE DEFINED, WITH SYS=UNIT 0, AND
/	DSK=UNIT 1. NO TWO PAGE HANDLERS ARE SUPPORTED BY
/	CONFIG AT THIS TIME.

/	RF08
/	IFNDEF RF08 <RF08=0>
/	DEFINING RF08=N, WHERE N IS AN INTEGER FROM 1 TO 4
/	WILL CAUSE AN N DISK RF08 TO BE THE SYSTEM DEVICE.

/	LINCSYS
/	IFNDEF LINCSYS <LINCSYS=0>
/	FOR PDP-12 USERS. IF LINCSYS IS SPECIFIED, LINCTAPE UNIT
/	0 WILL BE THE SYSTEM DEVICE.
/	NOTE:IF LINCSYS=1, DEVICE DSK: IS TAPE UNIT 0(DTA0:)
/	IF LINCSYS=2, DEVICE DSK: IS TAPE UNIT 1 (DTA1:)

/	RK8
/	IFNDEF RK8 <RK8=0>
/	DEFINING RK8 WILL SPECIFY A SINGLE RK8 UNIT AS
/	THE SYSTEM DEVICE.

/	RK01
/	IFNDEF RK01 <RK01=0>
/	DEFINING RK01=N WILL CAUSE AN ASSEMBLY IN WHICH
/	THERE ARE ENTRIES FOR N NON-SYSTEM RK8 HANDLERS
/	NAMED RKA0-RKA3 (IF N=4). THE ASSEMBLY WILL DELETE
/	DECTAPE HANDLERS TO MAKE ROOM FOR THE RK8 HANDLERS.
/	THUS RK01=2 INSERTS HANDLERS FOR RKA0,RKA1 AND
/	DELETES HANDLERS FOR DTA6 AND DTA7.

/	DF32
/	IFNDEF DF32 <DF32=0>
/	DEFINING DF32=N, WHERE N IS AN INTEGER FROM 1 TO 4
/	WILL CAUSE AN ASSEMBLY FOR AN N DF32 DISK SYSTEM.
/ROM
/DEFINING ROM=1 CAUSES AN ASSEMBLY FOR THE
/256 WORD READ-ONLY-MEMORY DEVICE HANDLER.

/IF NO SYSTEM DEVICE PARAMETERS ARE SPECIFIED, THE ASSEMBLY
/RESULTING WILL BE A ONE DECTAPE SYSTEM;I.E. THE SAME AS
/AN ASSEMBLY IN WHICH DECTAPE WAS SET=1.
/C) DEVICE HANDLER PARAMETERS
/CERTAIN I/O HANDLERS ARE ALSO SPECIFIED BY ASSEMBLY TIME
/SWITCHES.

/	LINE PRINTER
/OS/8 SUPPLIES TWO LINE PRINTER HANDLERS: ONE FOR THE
/OLDER TYPE---- AND ONE FOR THE LP08.
/	IFNDEF LP08 <LP08=1>
/THE DEFAULT LINE PRINTER HANDLER WILL BE THE LP08.

/	LINCTAPE
/FOR PDP-12 USERS, OS/8 CAN RUN WITH LINCTAPE INSTEAD OF
/DECTAPE, BOTH AS I/O HANDLER AND AS SYSTEM DEVICE.
/NOTE:CONFIG'S TABLES ARE SET UP SUCH THAT LINCTAPES
/ARE STILL REFERRED TO AS DTAN: WHEN REFERENCED. TO CHANGE
/THIS THE DEVICE NAME TABLE WILL HAVE TO BE ALTERED. SEE
/THAT TABLE FOR THE PROPER FORMAT.

/PLEASE NOTE: SPECIFYING MORE THAN ONE SYSTEM DEVICE
/PARAMETER OR SPECIFYING BOTH DECTAPE AND LINCTAPE WILL
/CAUSE ASSEMBLY ERRORS.

/	HIGH SPEED PAPER TAPE
/IF THE USER DOES NOT HAVE HIGH SPEED I/O, A PARAMETER
/IS PROVIDED WHICH USES THE TTY AS A SIMULATED HIGH SPEED
/I/O UNIT. REFERENCES TO PTP AND PTR WILL USE THE
/TTY IN THE SAME WAY THAT PTP AND PTR WOULD BE USED.
/	IFNDEF NOHSPT <NOHSPT=0>
/THE DEFAULT ASSEMBLY ASSUMES THE USER HAS HIGH SPEED I/O.


/II) REFERENCES TO THE MAIN OS/8 ASSEMBLY
/CERTAIN LOCATIONS FROM THE MAIN ASSEMBLY OF OS/8 MUST BE
/USED IN CONFIG. IF THESE LOCATIONS CHANGE FROM THEIR CURRENT
/VALUE, THESE CHANGES MUST BE MADE IN CONFIG, OR UNPREDICTABLE
/RESULTS WILL OCCUR.

/	MFREE=FIRST RECORD OF FILE STORAGE ON SYS:
/	IT IS CURRENTLY SET TO 70 (OCTAL)

/	SDNAME=SYSTEM DEVICE NAME TABLE
/	CURRENTLY AT 564
/	SET AASDNAME=SDNAME IN CONFIG

/	SDVHND=SYSTEM DEVICE HANDLER TABLE
/	CURRENTLY SET TO 767
/	SET AASDVHND=SDVHND

/LOCATION 20 IN FIELD 0 IS THE DIRECT PARAMETER. CONFIG
/EXPECTS LOCATION 20 TO HAVE THE TAG RBFLAG. RBFLAG SHOULD
/BE AT LOCATION 20.

/CONFIG EXPECTS THE INITIAL OS/8 DIRECTORY (ABSLDR.SV)
/TO TERMINATE AT LOCATION 1413 IN FIELD 1. THIS LOCATION IS
/OVERLAID WITH THE NUMBER OF BLOCKS REMAINING ON THE
/SPECIFIED SYSTEM DEVICE. IF THE INITIAL DIRECTORY IS
/ALTERED, CONFIG SHOULD BE ALTERED TO CORRESPOND WITH THE
/NEW DIRECTORY.

/	LIST
/	LIST IS A LISTING SUPPRESIION PARAMETER. IF LIST
/	IS NOT EQUAL TO 0, ALL HANDLERS WILL BE LISTED,
/	WHETEHER THEY WERE ASSEMBLED OR NOT. IF LIST=0,
/	ONLY THE HANDLERS THAT WERE ASSEMBLRD ARE PRODUCED
/	IN THE ASSEMBLY LISTING. DEFAULT IS LIST=0.

/III) TABLES IN OS/8 SET UP BY CONFIG

/CERTAIN MONITOR TABLES ARE ASSEMBLED WITH CONFIG.
/CONDITIONAL PARAMETERS ARE USED TO CORRECTLY ASSEMBLE THESE 
/TABLES.

/	SDNAME
/SDNAME SPECIFIES THE STANDARD NAMES FOR THE OS/8 DEVICES.

/	SDVHND
/SDVHND CONTAINS INFORMATION ABOUT THE HANDLERS, SUCH AS
/WHERE THEY WILL BE FOUND ON THE SYSTEM DEVICE
/AND THE RELATIVE LOCATION OF THEIR ENTRY POINTS. SEE THE
/TABLE FOR DETAILED FORMAT.

/NOTE: THE ENTRIES IN THESE TABLES MUST BE KEPT IN THE
/SAME RELATIVE POSITIONS.
/SDVHND USES THE ADDRESSES IN CONFIG WHICH ARE THE ACTUAL
/ASSEMBLY POINTS OF THE HANDLERS. IF THE ASSEMBLY POINTS
/SHOULD CHANGE, THIS CHANGE MUST BE REFLECTED IN SDVHND.


/IV) THE SUPPLIED DEVICE HANDLERS.

/CONFIG CONTAINS THE DEVICE HANDLERS WHICH ARE CURRENTLY
/SUPPORTED. SEE THE INDIVIDUAL HANDLERS FOR RESTRICTIONS AND
/DETAILS.


/V) SYSTEM DEVICE HANDLER MAP
/CONFIG WRITES DEVICE HANDLER RECORDS ONTO THE SYSTEM
/DEVICE. THE FOLLOWING IS THE HANDLER "MAP":

/	RECORD NO.		HANDLER RESIDENT
/
/	20,21			CDR,LPT (CARD READER,LINE PRINTER)
/	16			PTR,PTP (HI SPEED READER/PUNCH)
/	17			TTY (TELETYPE)
/	22			DTAN: (8 DECTAPE HANDLERS)
/	23			RKAN. N NON-SYSTEM RK8 HANDLERS



/ANY DEVICE HANDLERS SUPPLIED BY DEC IN THE FUTURE WILL
/BE PLACED IN FIELD 0 OF CONFIG. FOR THIS REASON WE SUGGEST
/THAT ANY USER WRITTEN HANDLER BE EDITED INTO FIELD 1.
/THE AVAILABLE LOCATIONS IN FIELD 1 ARE:
/
/	4000 THRU 7500
	/DEVICE DEPENDENT CODE FOR OS/8 MONITOR


/THESE ARE CONDITIONAL PARAMETERS. SEE INTRODUCTORY COMMENTS.

	IFNDEF DIRECT	<DIRECT=0>	/"DON'T REWRITE DIRECTORY" FLAG
	IFNDEF NOHSPT	<NOHSPT=0>	/"NO HIGH-SPEED PAPER TAPE" FLAG
	IFNDEF LIST	<LIST=0>
	IFNDEF RF08	<RF08=0>
	IFNDEF LP08	<LP08=1>
	IFNDEF LINCTAPE	<LINCTAPE=0>
	IFNDEF LINCSYS	<LINCSYS=0>
	IFNDEF RK8	<RK8=0>
	IFNDEF DF32	<DF32=0>
	IFNDEF RK01 <RK01=0>
	IFNDEF ROM <ROM=0>
	IFNZRO ROM <
	TD8E=1
	TD8ESYS=1
	>
	IFNDEF TD8E <TD8E=0>
	IFNDEF TD8ESYS	<TD8ESYS=0>
	IFNDEF DECTAPE	<
	IFZERO DF32+RF08+RK8+LINCSYS+TD8ESYS	<DECTAPE=1>
	IFNZRO DF32+RF08+RK8+LINCSYS+TD8ESYS	<DECTAPE=0>
	>

	IFNZRO DECTAPE <	/CAN'T ALLOW TD8E AND DECTAPE!!
	IFNZRO TD8ESYS+TD8E <
REASMB,	BAD PARAMETERS
	>>


	SBLOCK=7776	/RANDOM DEFINITIONS FROM MAIN ASSEMBLY
	MFREE=70	/FIRST FREE BLOCK ON THE SYSTEMS DEVICE
			/(FIELD 1)
	SOFSET=7747	/NOT REALLY NECESSARY!

	FIELD 1

/LAST INITIAL DIRECTORY LOCATION. CHANGE IF NECESSARY.
/THESE CONDITIONALS PUT IN DIRECTORY LENGTHS.

	*1413
	IFNZRO DECTAPE+LINCSYS+TD8ESYS	<MFREE+5-1341	/IF DECTAPE>
	IFNZRO RF08	<6000^RF08+MFREE+6	/IF RF08>
	IFNZRO RK8	<MFREE+5-6260	/IF RK8>
	IFNZRO	DF32	<7600^DF32+MFREE+6	/IF DF32>

	AASDNAME=564		/DEPENDS ON PS8 ASSEMBLY
	*AASDNAME
	/SYSTEM DEVICE NAME TABLE
	/THE ENTRIES ARE THE TWO WORD SUM OF THE SIXBIT FOR THE SYSTEM
	/DEVICES, WITH THE HIGH ORDER BIT FORCED ON

/CHANGES IN SDNAME MUST BE ACCOMPANIED BY CHANGES IN
/SDVHND. KEEP CORRESPONDENCE ONE TO ONE.

SDNAME,	4631	/SYS
	5723	/DSK
	5524	/TTY
	4020	/LPT
	4604	/DTA0
	4605	/DTA1
	4606	/DTA2
	4607	/DTA3
	4610	/DTA4
	4611	/DTA5
	4612	/DTA6
	4613	/DTA7
	4024	/PTP
	4224	/PTR
	6504	/CDR

	IFNZRO TD8ESYS+TD8E	<
	*572		/ZERO OUT DECTAPE NAMES
	ZBLOCK 6>



	AASDVHND=766		/DEPENDS ON PS8 ASSEMBLY
	*AASDVHND

	/SYSTEM HANDLER TABLE
	/CONTENTS:
	/BIT 0		- ON IF THE HANDLER IS A TWO-PAGE HANDLER
	/BITS 1-4	- OFFSET FROM "DVHORG-1" OF RECORD CONTAINING HANDLER
	/BITS 5-11	- ENTRY POINT OF HANDLER RELATIVE TO LOADING ADDRESS


/EACH DEVICE HANDLER HAS AN ENTRY IN SDVHND. THE EQUATION
/USED IN EACH ENTRY IS: OFFSET *200+ENTRY POINT-ASSEMBLY POINT
/THE OFFSET IS BITS 1-4.
/FOR A TWO PAGE HANDLER, ADD 4000.

SDVHND,	0	/SYSTEM HANDLER HAD BETTER BE RESIDENT
		/OR PAGE 17600 IS PROBABLY BLOWN
	IFNZRO TD8ESYS	<0>	/BOTH SYS,DSK RESIDENT
	IFZERO TD8ESYS <
	IFZERO LINCSYS+DECTAPE-2	<5^200+DTA1-5000
			/FOR MULTIPLE DECTAPE SYSTEMS,DTA1=DSK>
	IFNZRO LINCSYS+DECTAPE-2	<0	/OTHERS,DSK=SYS>
	>

	2^200+TTY-7000
	4^200+LPT-6200
	5^200+DTA0-5000
	5^200+DTA1-5000
	5^200+DTA2-5000
	5^200+DTA3-5000
	5^200+DTA4-5000
	5^200+DTA5-5000
	5^200+DTA6-5000
	5^200+DTA7-5000

	1^200+PTP-6400
	1^200+PTR-6400
	3^200+CDR-5600+4000	/TWO PAGE HANDLER
	IFNZRO TD8ESYS	<*772
	ZBLOCK 10>		/WIPE OUT TRACES OF DECTAPE


	IFNZRO TD8E <*772
	5^200+DTA0-5000+4000	/2 PAGE HANDLER
	5^200+DTA1-5000+4000
	>



	IFNZRO TD8ESYS <SYSD=4210>
	IFNZRO DECTAPE <SYSD=4160>
	IFNZRO LINCSYS	<SYSD=4170>
	IFNZRO RF08	<SYSD=RF08^10+4050>
	IFNZRO RK8	<SYSD=4050>
	IFNZRO DF32	<SYSD=DF32^10+4110>
	IFNZRO TD8E <DTADCB=4210>
	IFZERO TD8E <DTADCB=LINCTA^10+4160>
	FIELD 0
/NOTE:RBFLAG MUST BE AT LOC. 20 OF MAIN ASSEMBLY!!!!
	IFNZRO DIRECT	<*20; 1 /DON'T REWRITE DIRECTORY OR ABSLDR>



	/DEVICE CONTROL BLOCK TABLE - ONE WORD PER DEVICE
	/BIT 0 - 1 IF FILE STRUCTURED DEVICE
	/BIT 1 - 1 IF READ ONLY DEVICE
	/BIT 2 - 1 IF WRITE ONLY DEVICE
	/BITS 3-8	- THE DEVICE TYPE
	/0		TELETYPE
	/1		HIGH SPEED READER
	/2		HIGH SPEED PUNCH
	/3		CARD READER (CR8/I)
	/4		LINE PRINTER
	/5		RK8 DISK
	/6		RF08 DISK(ONE PLATTER)
	/7		RF08 DISK(TWO PLATTERS)
	/10		RF08 DISK(THREE PLATTERS)
	/11		RF08 DISK(FOUR PLATTERS)
	/12		DF32 DISK(ONE PLATTER)
	/13		DF32 DISK(TWO PLATTERS)
	/14		DF32 DISK(THREE PLATTERS)
	/15		DF32 DISK(FOUR PLATTERS)
	/16		DECTAPE
	/17		LINCTAPE(PDP12 ONLY - FORMATTED 128 WDS/BLOCK)
	/20		IBM-COMPATIBLE MAGNETIC TAPE(TYPE 57A)
	/21		TD8E DECTAPE
	/22-77		TO BE ASSIGNED
	/BITS 9-11	- FLAG FOR WHETHER AN OUTPUT FILE IS CURRENTLY OPEN

	*7560
DCB,	SYSD;SYSD;0;1040;DTADCB;DTADCB;DTADCB;DTADCB
	DTADCB;DTADCB;DTADCB;DTADCB;1020;2010;2030


/THIS HORRENDOUS CODE INSERTS THE RK8 HANDLERS.

	IFNZRO RK01 <

	IFZERO RK01-1 <
	*7573
	4050
	FIELD 1
	*1001
	6^200+RKA0-4600
	*577
	6373		/RKA0
	>

	IFZERO RK01-2 <
	*7572
	4050
	4050		/RK8 DEVICE TYPE
	FIELD 1
	*1000
	6^200+RKA1-4600
	6^200+RKA0-4600
	*576
	6374
	6373		/RKA0 AND RKA1
	>

	IFZERO RK01-3 <
	*7571
	4050
	4050
	4050
	FIELD 1
	*777
	6^200+RKA2-4600
	6^200+RKA1-4600
	6^200+RKA0-4600
	*575
	6375
	6374
	6373		/RKA0,RKA1, AND RKA2
	>

	IFZERO RK01-4 <
	*7570
	4050
	4050
	4050
	4050
	FIELD 1
	*776
	6^200+RKA3-4600
	6^200+RKA2-4600
	6^200+RKA1-4600
	6^200+RKA0-4600
	*574
	6376
	6375
	6374
	6373		/RKA0,RKA1,RKA2,RKA3
	>>

	FIELD 0

	IFNZRO TD8E <*7453;0;0;>	/DTA0,1 NONRES.
	IFNZRO TD8ESYS	<
	*7447
	7607		/SYS ENTRY AT 7607
	IFZERO TD8ESYS-2 <*7450;SDTA1>
	*7453
	7607	/MAKE DTA0 AND DTA1 RESIDENT
	SDTA1

	>
	*6777	/THIS IS SETUP FOR CD AT BUILD TIME
	0
	IFNZRO TD8ESYS <*6777;66>
	IFNZRO ROM <*6777;0>
	IFNZRO RK8 <IFNZRO RK01 <*7462;7607>>
	IFZERO DECTAPE+LINCSYS-2	<*7450;0	/USE TAPE 1 AS DSK>
	IFNZRO	DECTAPE+LINCSYS		<*7453;7607	/DTA0 IS RESIDENT>



/THE MAJOR FUNCTION OF CONFIG FOLLOWS: WRITE THE DEVICE
/HANDLER RECORDS.NOTE THAT LOC. 0 CONTAINS 7607, OR THE SYSTEM
/DEVICE HANDLER ENTRY POINT.
/SYSTEM GENERATION STARTS AT LOC. 4000 AND CONTINUES THROUGH
/THIS CODE.

*4200
WRDEVH,	0		/SUBR TO WRITE OUT DEVICE HANDLER RECORDS
	WRITE=JMS I 0
	DVHORG=16
	WRITE;	4301;	5600;DVHORG+2;	JMP BERR	/CDR AND LPT HANDLERS
	WRITE;	4100;	7000;DVHORG+1;	JMP BERR	/TTY HANDLER
	WRITE;	4200;	5000;DVHORG+4;	JMP BERR	/DTA HANDLERS
	WRITE;	4100;	6400;DVHORG+0;	JMP BERR	/PTR & PTP HANDLERS

	IFZERO ROM <
	IFNZRO TD8ESYS <
	WRITE	/WRITE OUT TD8E BOOTSTRAP
	4120
	7400		/WE PUT IT IN 47200
	0
	JMP BERR

	WRITE;4221;7400;66;JMP BERR	/FIELD 1&2 RES.
	WRITE;4100;7400;66;JMP BERR
	>>

	IFNZRO RK01 <
	WRITE		/WRITE OUT RK8 HANDLERS
	4100
	4600
	DVHORG+5
	JMP BERR
	>

	ISZ WRDEVH
BERR,	JMP I WRDEVH

/THIS IS THE MULTIPLE RK8 HANDLER. IT IS A MODIFICATION OF
/THE SINGLE ENTRY SYSTEM HANDLER. SELECT ERRORS ARE NOT
/TREATED IN A SPECIAL WAY IN THIS HANDLER.

	IFZERO RK01+LIST <XLIST>
	IFNZRO RK01 <

	DLDC=6732
	DCLS=6742
	DRDS=6741
	DSKD=6745
	DSKE=6747
	DCLA=6751
	DLWC=6753
	DLCA=6755
	DLDR=6733

	*4600
/THE ENTRY POINTS FOR RK8 ARE SET AT 20-23. VITAL!!

RLOC,	0		/FOR BUFFER ADDRESS
RREC,	0		/HOLDS RECORD NO.
R76,	76
RDLDR,	DLDR
RKANO,	0
RKAISZ,	ISZ RKANO
RBLKCT,	0		/HOLDS TOTAL WORD COUNT
RERRCT,	0		/# ERROR TRIES
R177,	177
R40,	40
RM3,	-3
R400,	400
R7400,	7400
RKA,	0		/HOLDS ARGUMENT ADDRESS
RZERO,	0
R34,	34
	ZBLOCK 4620-.
RKA0,	ISZ RKANO
RKA1,	ISZ RKANO
RKA2,	ISZ RKANO
RKA3,	ISZ RKANO
R7600,	7600
	TAD RM3
	DCA RERRCT	/3 TRIES ON ERROR
	TAD RKANO	/THIS CODE RESTORES THE ISZ RKANO
	CMA		/WHICH WAS DESTROYED IN THE CALL
	TAD RKATAD
	DCA RFUNCT
	CLA CLL CML RTR
	TAD RFUNCT	/FORM DCA RKAN,WHERE RKAN WAS CALLED
	DCA RKADCA
	RDF
	TAD RCDIF	/RESTORE TO PROPER FIELD
	DCA REXIT
RFUNCT,	HLT		/CONTAINS TAD RKAN WHEN EXECUTED
	DCA RKA		/SO WE SAVE ADDRESS OF ARGUMENTS
	TAD RKAISZ	/AND NOW RESTORE THE ISZ RKANO
RKADCA,	HLT
	TAD I RKA	/FUNCTION WORD
	DCA RFUNCT
	ISZ RKA
	CLA CMA		/BUFFER ADDRESS -1
	TAD I RKA
	DCA RLOC
	ISZ RKA
	TAD I RKA	/RECORD NUMBER
	DCA RREC
	TAD RFUNCT	/NOW FORM RK8 IOT FROM FUNCTION.
	CLL RAL		/READ/WRITE TO LINK
	AND R7600	/ISOLATE WORD COUNT
	DCA RBLKCT
	RTL		/READ=6733,WRITE=6735
	TAD RDLDR
	DCA RINST
RLOOP,	TAD RLOC	/LOAD CURRENT ADDRESS
	DLCA
	TAD RBLKCT	/TEST WORD COUNT FOR SIZE.
RKATAD,	TAD R7600	/FULL=256, HALF=128
	SZA CLA
	TAD R7600
	TAD R7600
	DLWC		/LOAD WORD COUNT
	TAD RFUNCT	/LOADING COMMAND WORD WITH FIELD
	CMA RAR		/AND DISK SELECTION
	AND R34
	TAD RKANO
	CMA RAL
	AND R76
	DLDC
	DCLS		/CLEARS SELECT ERROR IF STILL UP
	TAD RREC
RINST,	HLT		/GETS DISK IOT
	DSKD		/TEST COMPLETION FLAG
	SKP CLA		/NOT DONE YET
	JMP RCTLC	/DONE. CHECK FOR ^C
	DSKE		/IS ERROR UP?
	JMP .-4
RERROR,	ISZ RERRCT	/ERROR BUMP COUNT
	JMP .+4
	DCA RKANO	/IT'S ALL OVER. CLEAR FOR RECALL
	CLA CLL CML RAR
	JMP RETRN+1	/FATAL ERROR
	DRDS		/LOOK AT STSTUS
	AND R40		/TRACK NOT FOUND BIT
	ISZ RZERO	/CARRY OVER FROM SYSTEM HANDLER
	JMP .-1
	SNA CLA
	JMP RLOOP	/TRY AGAIN
	DCLA		/RECALIBRATE
	DSKD
	JMP .-1
	JMP RLOOP	/AND TRY AGAIN


RNEXT,	DSKE		/TRANSFER DONE. IS ERROR UP?
	SKP
	JMP RERROR	/YEP.TOUGH LUCK
	ISZ RREC	/BUMP RECORD NUMBER
	TAD RLOC
	TAD R400	/BUMP CURRENT ADDRESS
	DCA RLOC
	TAD RBLKCT	/DONE WITH ALL TRANSFERS?
	CLL CML
	TAD R7400
	SZL SNA
	JMP .+3
	DCA RBLKCT	/NO..UPDATE TOTAL WORD COUNT
	JMP RLOOP	/AND DO THE TRANSFER
	CLA
	DCA RKANO	/CLEAR FOR RECALL
RETRN,	ISZ RKA
	ISZ RKA
REXIT,	HLT
	JMP I RKA

RCTLC,	KRS		/TEST FOR ^C IN KEYBOARD BUFFER
	AND R177	/WITH THE FLAG UP
	TAD RM3
	SNA CLA
	KSF
	JMP RNEXT	/NO ^C, KEEP GOING
RCDIF,	CIF CDF 0
	JMP I R7600
	>
	IFZERO RK01+LIST <XLIST>
	*5600

/CARD READER HANDLER FOR PS8


/DEFINITIONS OF CARD READER IOTS
RCSF=6631
RCRA=6632
RCSP=6671
RCSE=6672

CDR,	0		/ENTRY POINT RELATIVE ZERO
CDR770,	7700		/"SMA CLA" CLEARS THE AC
CDRTMP,	0		/LESS THAN 400 - PROTECTS THE "SMA CLA"
	JMP CDRSET	/INITIALIZATION - BECOMES "RDF"
	TAD CDRCIF	/FORM "CIF CDF N" TO CALLING FIELDS
	DCA CDRXIT	/SAVE CALLING FIELDS
	TAD CDRCCF-1
	DCA CDRXIT-1	/RESTORE THE "ISZ CDR"
	TAD I CDR	/GET FUNCTION WORD
	AND CDR070	/GET BUFFER FIELD BITS
	TAD CDRCCF	/MAKE A "CDF N"
	DCA CDRTM2	/SAVE IT TEMPORARILY
	TAD I CDR	/GET FUNCTION WORD AGAIN
	ISZ CDR
	SPA		/IS IT A WRITE FUNCTION?
	JMP CDRERR	/YES - HARD ERROR
	AND CDR770	/GET COUNT BITS
	CIA
	DCA CDRWC	/SAVE WORD COUNT (DIVIDED BY 2)
	TAD I CDR	/GET BUFFER ADDRESS
	DCA CDRCA	/AND SAVE IT
	ISZ CDR		/THE BLOCK NUMBER IS IGNORED
CDRCCF,	CDF		/WE ARE IN FIELD 0
	DCA I CDRIN2	/RESET ^Z FLAG TO ZERO
	TAD CDRTM2
	DCA I CDRIN3	/SET THE BUFFER FIELD "CDF N"
CDRLP,	JMS I CDRIN4	/GET A CHARACTER
	DCA I CDRCA	/BUFFER FIELD IS RETURNED CORRECTLY
	JMS I CDRIN4	/GET NEXT CHARACTER
	DCA CDRTMP	/AND SAVE IT
	JMS I CDRIN4	/GET NEXT CHARACTER
	RTL
	RTL		/GET THE FIRST FOUR BITS OF IT
	DCA CDRTM2	/SAVE THE REST FOR LATER
	TAD CDRTM2
	AND CDR740	/ONLY 4 BITS
	TAD I CDRCA
	DCA I CDRCA	/ADD THOSE BITS TO 1ST CHARACTER
	ISZ CDRCA	/BUMP POINTER TO BUFFER
CDR740,	7400		/PROTECT THE ISZ AGAINST SKIPS
	TAD CDRTM2
	RTL
	RTL		/NOW GET LOW ORDER 4 BITS
	AND CDR7400	/AND ONLY 4 BITS
	TAD CDRTMP	/ADD IN THE 2ND CHARACTER
	DCA I CDRCA	/AND STORE THE WORD
	ISZ CDRCA	/BUMP POINTER AGAIN
CDR070,	70		/PROTECT THE ISZ
	ISZ CDRWC	/DONE?
	JMP CDRLP	/NO - LOOP
	ISZ CDR
	ISZ CDR		/IF ^Z THIS IS "CLL CLA IAC"
CDRXIT,	HLT		/RESTORE CALLING FIELDS
	JMP I CDR	/EXIT

CDRERR,	CLL CLA CML RAR	/HARD ERROR
	JMP CDRXIT-2

CDRCA,	0		/BUFFER POINTER
CDRWC,	0		/WORD COUNT DIVIDED BY 2
CDRTM2,	0		/SPLIT WORD TEMPORARY
CDRCIF,	CIF CDF 0	/TO FORM EXIT WORD

CDRIN2,	CDRJMP-CDRLOC	/CORRECTED AT INITIALIZATION TIME
CDRIN3,	CDRCDF-CDRLOC
CDRIN4,	CDRGCH-CDRLOC

CDRTBL,	0021;2223;2425;2627;3031;3203;4007;3502
	2017;6364;6566;6770;7172;7514;0577;3637
	1552;5354;5556;5760;6162;0104;1211;3374
	0641;4243;4445;4647;5051;7316;3410;1376

/DO NOT INSERT ANYTHING BETWEEN "CDRTBL" AND "CDRBUF"!!

CDRBUF=.		/CARD BUFFER

CDRSET,	RDF		/INITIALIZATION CODE
	TAD CDRCCF
	DCA CDRSE1	/SAVE CALLING FIELDS
	CDF		/WE ARE IN FIELD 0
	JMS .		/FIND OUT OUR LOCATION
CDRLOC,	TAD CDRSE2	/ADDRESS TO MODIFY
	TAD CDRLOC-1	/CORRECT IT
	DCA CDRSE3	/SAVE IT
	TAD I CDRSE3	/GET DATA TO MODIFY
	TAD CDRLOC-1	/CORRECT IT
	DCA I CDRSE3	/AND RESTORE IT
	ISZ CDRLOC	/NEXT ADDRESS
	ISZ CDRSE4	/MORE?
	JMP CDRLOC	/YES - LOOP
	TAD CDRSET
	DCA CDR+3	/SET THE "RDF"
CDRSE1,	HLT		/RESTORE CALLING FIELDS
	JMP CDR+3	/AND BACK TO NORMAL

CDRSE3,	0		/MODIFY POINTER
CDRSE4,	-6		/SIX LOCATIONS TO MODIFY

CDRSE2,	CDRIN2-CDRLOC	/LOCATIONS TO MODIFY
	CDRIN3-CDRLOC
	CDRIN4-CDRLOC
	CDRIN5-CDRLOC
	CDRABF-CDRLOC
	CDRTAD-CDRLOC
*CDRBUF+50		/END OF THE BUFFER

CDRGCH,	0		/GET A CHARACTER ROUTINE
	CDF		/WE ARE IN FIELD 0
CDRJMP,	0		/THIS IS "JMP CDRCDF" AFTER A ^Z
	ISZ CDRCNT	/MORE CHARACTERS IN THE INTERNAL BUFFER?
	JMP CDRGET	/YES - GET ONE
CDRGE4,	ISZ CDRCT2	/GIVE A 215, 212 FOR EVERY CARD
	JMP CDRCLF	/215, 212 ROUTINE
	CLL CLA CMA RTL
	DCA CDRCT2	/RESET COUNT TO -3
	TAD CDRABF
	DCA CDRPT	/SET POINTER TO INTERNAL BUFFER
CDRGE0,	KSF		/KEYBORAD FLAG UP?
	JMP CDRGE7	/NO - TRY TO READ A CARD
	KRS		/READ STATIC FROM KEYBOARD
	AND CDR177	/IGNORE PARITY
	TAD CDRM03	/IS IT ^C?
	SNA
	JMP I CDR760	/YES - TO MONITOR VIA 07600
	TAD CDRM27	/IS IT ^Z?
	SZA CLA
	JMP CDRGE7	/NO - GET A CARD
	KCC		/KILL FLAG
CDRGEZ,	CLA CMA
	DCA CDRCNT	/RESET COUNTS TO SKIP
	CLA CMA
	DCA CDRCT2
	TAD CDRMOD
	DCA CDRJMP	/SET TO GIVE 0'S
	TAD CDROPR
	DCA I CDRIN5	/AND A SOFT ERROR
	TAD CDR232	/^Z
CDRCDF,	HLT		/TO BUFFER FIELD
	JMP I CDRGCH	/EXIT

CDRGE7,	RCSE		/SELECT A CARD
	JMP CDRGE0	/NO GO - TRY AGAIN
	DCA CDRSW	/SET PACKING SWITCH
CDRGE1,	RCSP		/CARD DONE?
	JMP CDRGE2	/NO - TRY FOR DATA READY
CDRGE3,	TAD I CDRPT	/GET LAST TWO CHARACTERS
	SZA		/BOTH SPACES?
	JMP CDRGE5	/NO
	CLA CMA
	TAD CDRPT
	DCA CDRPT	/BACK UP POINTER ONE
	ISZ CDRCNT
	ISZ CDRCNT	/AND TAKE COUNT DOWN BY 2
	JMP CDRGE3	/TEST AGAIN OR...
	JMP CDRGE4	/IF COUNT IS ZERO THE A BLANK CARD

CDRGE5,	AND CDR077	/IS RIGHT HAND CHARACTER A SPACE?
	SNA CLA
	ISZ CDRCNT	/YES A SPACE - REDUCE COUNT
	TAD I CDRPT	/GET LAST NON-SPACE
	TAD CDRM77	/IS IT "_ "?
	SNA CLA
CDROPR,	CLL CLA IAC	/YES - 1 INTO AC
	TAD CDRCNT	/IS COUNT ALSO 1?
	SNA CLA
	JMP CDRGEZ	/YES - MUST BE END OF FILE
CDRGE6,	TAD CDR077
	DCA CDRSW	/SET OFFSET FROM "CDRTBL"
CDRGET,	ISZ CDRSW	/BUMP OFFSET
	TAD CDRSW	/OFFSET INTO AC
	JMS CDRGE8	/GET A CHARACTER
	TAD CDR240	/MAKE IT ASCII
CDRMOD,	JMP CDRCDF

CDRGE8,	0		/GET FROM BUFFER ROUTINE
	CLL RAR		/DIVIDE BY 2 - AND INTO LINK IS INDICATOR
	TAD CDRTAD	/ADDRESS OF "CDRTBL"
	DCA CDRTM3	/SET POINTER
	TAD I CDRTM3	/GET WORD
	SZL		/SHIFT?
	JMP .+4		/NO
	RTR		/YES
	RTR
	RTR
	AND CDR077	/GET 6 BITS
	JMP I CDRGE8

CDRGE2,	RCSF		/DATA READY?
	JMP CDRGE1	/NO - TRY FOR END OF CARD
	CLA CMA
	TAD CDRCNT
	DCA CDRCNT	/COUNT THE CHARACTERS
	RCRA		/READ ALPHA
	JMS CDRGE8	/GET TABLE ENTRY
	ISZ CDRSW	/WHICH SIDE?
	JMP CDRGE9	/LEFT SIDE
	TAD I CDRPT
	DCA I CDRPT	/FORM RIGHT SIDE
	JMP CDRGE1	/CONTINUE

CDRGE9,	CLL RTL		/SHIFT LEFT
	RTL
	RTL
	ISZ CDRPT	/BUMP POINTER
	DCA I CDRPT	/STORE LEFT SIDE
	CLA CMA
	JMP CDRGE1-1	/CONTINUE - SET SWITCH

CDRCLF,	CLA CMA
	DCA CDRCNT	/SET MAIN COUNT TO SKIP
	TAD CDRCT2
	CLL CMA RTL	/ALL THIS DOES IS...
	TAD CDRCT2	/MAKE A 2 OR -1
	TAD CDR213	/SO THIS MAKES A 215 OR 212
	JMP CDRCDF

CDR760,	7600		/MONITOR ADDRESS
CDRM03,	-3		/^C TEST
CDRM27,	-27		/-27-3=-32 ^Z TEST
CDRCNT,	-1		/MAIN COUNT
CDRCT2,	-1		/215, 212 COUNT
CDRPT,	0		/BUFFER POINTER
CDRSW,	0		/SWITCH
CDRTM3,	0		/TEMPORARY
CDR240,	240		/ASCII SPACE
CDR213,	213		/215, 212 CORRECTION FACTOR
CDR232,	232		/ASCII ^Z
CDR177,	177		/PARITY MASK
CDR077,	77		/SIX BIT MASK
CDRM77,	-7700		/-"_ "

CDRABF,	CDRBUF-1-CDRLOC	/MODIFIED LOCATIONS
CDRTAD,	CDRTBL-CDRLOC
CDRIN5,	CDRXIT-1-CDRLOC
	IFNZRO LP08 <IFZERO LIST <XLIST>>
	IFZERO LP08	<
	*6200
	/LINE PRINTER HANDLER FOR "OLD STYLE" LINE PRINTER
	/RECOGNIZES TAB,LINE FEED,VERTICAL TAB AND FORM FEED
	/IGNORES CARRIAGE RETURNS, TREATS ^N AS "CARRIAGE RETURN
	/ WITHOUT LINE FEED" CONTROL CHARACTER.
	LSE=6651
	LCF=6652
	LLB=6654
	LSD=6661
	LCB=6662
	LPR=6664
LPT,	0
LP7700,	7700
LPT11,	11	/FALLS THROUGH HARMLESSLY, CLEARING THE AC
	RDF
	TAD LPTCIF
	DCA LPTXIT
	TAD I LPT
	AND LPT70
	TAD LP6201
	DCA LPTCDF
	CLA CLL CML RAR
	TAD I LPT	/LINK IS NOW 1 IF COMMAND WAS A "WRITE"
	AND LP7700
	CMA
	DCA LPTWC	/LPTWC=WORD COUNT/2
	ISZ LPT
	TAD I LPT
	DCA LPTCA
	ISZ LPT
	TAD I LPT
	ISZ LPT
	SNL
	JMP LPTERR
	SZA CLA
	JMP LPTCDF
	LCB
	JMS LPWAIT
	TAD LPT214
	JMS LPTPCH	/FORM FEED, INITIALIZES COUNT
LPTCDF,	HLT
	JMP LPT7
LPTLP,	TAD I LPTCA
	JMS LPTPCH
	TAD I LPTCA
	AND LP7400
	DCA LPTTMP
	ISZ LPTCA
LP7400,	7400
	TAD I LPTCA
	JMS LPTPCH
	TAD I LPTCA
	AND LP7400
	CLL RTR
	RTR
	TAD LPTTMP
	RTR
	RTR
	JMS LPTPCH
	ISZ LPTCA
LPT7,	7
	ISZ LPTWC
	JMP LPTLP
LPTRTN,	ISZ LPT
LPTXIT,	HLT
	JMP I LPT
LPTWC,	0
LPTCA,	0
LPTPCH,	0
	AND LPT177
	SZA
	TAD LPM140
	SMA
	JMP LPFLSH
	TAD LPT106
	SNA
	JMP LPTCTZ
	TAD LPT13
	CLL
	TAD LPT6
	SZL SNA
	JMP LPTCTL
	TAD LPT11
	LLB
	JMP LPTKSF
LPWAIT,	-1
	LSD
	JMP .-1
	LCF
	ISZ LPLPTR
	JMP I LPWAIT
	CLA IAC
LPTCTL,	SNA
	JMP LPTTAB
	TAD LPTTAD
	DCA LPTXXX
	TAD LP7607
	DCA LPLPTR
LPTXXX,	HLT
	SNA
	JMP .+3
	LPR
LPTKSF,	JMS LPWAIT
	KRS
LPFLSH,	TAD LPM203
	SNA CLA
	KSF
	JMP I LPTPCH
LPTCIF,	CDF CIF 0
	JMP I .+1
	7600
LPTCTZ,	TAD LPT214
	JMS LPTPCH
	JMP LPTRTN
LPT6,	6
LPTTAB,	TAD LPT40
	LLB
	JMS LPWAIT
	TAD LPLPTR
	AND LPT7
LPM140,	SZA CLA
	JMP LPTTAB
	JMP LPTKSF+1
LPTERR,	CLA CLL CML RAR
	JMP LPTXIT
LPTTAD,	TAD .
LPT70,	70	/LF
LPT13,	13	/VT
LPT177,	177	/FF
	0	/CR
LPT40,	40	/CR, NO LF
LPM203,	-203
LPT106,	106
LPT214,	214
LP7607,	7607
LP6201,	CDF 0
LPTTMP,	0
LPLPTR,	0
	>
	IFNZRO LP08 <IFZERO LIST <XLIST>>
	IFZERO LP08+LIST <XLIST>
	IFNZRO LP08	<
	*6200
	/LINE PRINTER HANDLER FOR LP08 LINE PRINTER - HANDLES TABS,
	/VERTICAL TABS. LP08 HARDWARE HANDLES FORM FEEDS, CARRIAGE RETURNS  AND
	/LINE FEEDS.
	/ACCEPTS ^N AS EQUAL TO CARRIAGE RETURN FOR PSEUDO-COMPATIBILITY
	/WITH 645 HANDLER

	LSF=6661
	LSR=6663
	LLS=6666

LPT,	0
	CLL CML CLA RAR
	TAD I LPT	/LINK GOES ON HERE. IF NOT READ WAS REQUESTED
LPT215,	AND LP7700
	CMA
	DCA LPTWC
LPT214,	RDF
	TAD LPTCIF
	DCA LPTXIT	/SAVE CALLING FIELD IN RETURN SEQUENCE
	TAD I LPT
	AND LPT70
	TAD LPCDF0
	DCA LPTCDF	/GET BUFFER FIELD
/NOTE!!!!!!!! 
LP7700,	7700		/MUST BE AT LOC. 15 OF PAGE!
	ISZ LPT
	TAD I LPT
	DCA LPTCA	/LPTCA GETS BUFFER ADDRESS
	ISZ LPT
	TAD I LPT
LPTCDF,	HLT
	ISZ LPT
	SNL		/IF LINK NOT SET,GIVE ERROR
	JMP LPTERR
	SNA CLA
	TAD LPT214
	JMP LPTKLG

/NOW PICK UP THE CHARACTERS, UNPACK THEM AND PRINT.
/TEST FOR:TABS, LINE FEEDS,VERTICAL TABS

LPTLP,	TAD I LPTCA
	JMS LPTPCH
	TAD I LPTCA
	AND LP7400
	DCA LPTCDF
	ISZ LPTCA
LP7400,	7400
	TAD I LPTCA
	JMS LPTPCH
	TAD I LPTCA
	AND LP7400
	CLL RTR
LPTLF,	RTR
	TAD LPTCDF
	RTR
	RTR
	ISZ LPTCA
LPTKLG,	JMS LPTPCH
LPT177,	177
	ISZ LPTWC
	JMP LPTLP
LPRTRN,	ISZ LPT
LPTXIT,	HLT
	JMP I LPT
LPTWC,	0
LPTCA,	0
LPTPCH,	0
	AND LPT177
	CIA
	CLL CML
	TAD LPT175
	SZL SNA
	JMP LPFLSH
	TAD LPM143
	SNA
	JMP LPTCTZ
	TAD LPTM15
	CLL CML CMA
	TAD LPT7
	SNL SZA
	JMP LPTCTL
	TAD LPT7
	JMS LPWAIT
LPTJMP,	JMP	LPJTAB-2	/LPJTAB-2 = "JMP I LPTPCH"
LPTCTZ,	TAD LPT214
	JMS LPTPCH
	JMP LPRTRN

LPWAIT,	0
	LLS
LP7600,	7600
	TAD LP7600
	KRS
	TAD LPT175
	SNA CLA
	KSF
	JMP .+3
LPTCIF,	CDF CIF 0
	JMP I LP7600
	LSF
	JMP LP7600
	LSR
	JMP LPWISZ
LPTERR,	CLA CLL CML RAR	/FATAL ERROR EXIT
	JMP LPTXIT
LPWISZ,	ISZ LPLPTR
	JMP I LPWAIT
LPLF,	CLA CLL CMA RAL
LPTFF,	TAD LPT214
	DCA LPLPTR
	TAD LPLPTR
	JMS LPWAIT
	TAD LPM120
	DCA LPLPTR	/FALL THROUGH LPTCTL!
LPTCTL,	TAD LPTJMP
	DCA .+1
LPTXXX,	HLT
LPTTAB,	TAD LPM140
	JMS LPWAIT
	TAD LPLPTR
	AND LPT7
	SNA CLA
	JMP I LPTPCH	/MUST BE AT LPJTAB-2!!!
LPT7,	7
LPJTAB,	JMP LPTTAB
	JMP LPLF
	JMP LPTVTB
	JMP LPTFF
LPFLSH,
LPM120,	-120		/CLEAR AC AND RETURN
LPT70,	70
	JMP I LPTPCH
LPTM15,	-15
LPT175,	175
LPM143,	-143
LPCDF0,	CDF	0
LPLPTR,	0
LPTVTB,	TAD LPTM15
	DCA LPLPTR
	TAD LPTLF
	JMS LPWAIT
	JMP .-2
LPM140,	-140
	>
	IFZERO LP08+LIST <XLIST>
	*7000
	/TELETYPE HANDLER - NOT VERY INTELLEGENT.
	/ONLY RECOGNIZES ^Z AND ^C ON INPUT
	/AND ^C AND ^O ON OUTPUT
	/OH WELL, WHAT CAN YOU EXPECT IN ONE PAGE.
	/ THE LOGIC IS VERY SIMILIAR TO THE PTR AND PTP HANDLERS.
TTY360,	360		/MUST BE FIRST LOC ON PAGE!
TTY,	0
TT7600,	7600
	RDF
	TAD TTYCIF
	DCA TTYXIT	/SAVE RETURN FIELD
	TAD I TTY
	AND TT70
	TAD TTCDF
	DCA TTYCDF	/DATA FIELD OF BUFFER
	CLA CLL CML RAR
	TAD I TTY
	AND TT3700
	CMA
	DCA TTYWC
	ISZ TTY
	TAD I TTY
	DCA TTYCA	/SAVE BUFFER ADDRESS
	ISZ TTY
	ISZ TTY
	JMP TTKLG
TTYLP,	SNL CLA
	JMP TTYGLP	/ZER LINK MEANS READ
	JMS TTYTST	/TEST FOR ^C
	TAD TTYM14	/-203-14=-217 =-"^O"
	SNA CLA
	JMP TTYCTO
	TAD I TTYCA	/CHARACTER 1 IS LOW ORDER 8 BITS OF WORD 1
	JMS TTYPCH
	AND TT7400
	DCA TTYGCH
	ISZ TTYCA
TT7400,	7400
	TAD I TTYCA	/CHARACTER 2 IS LOW ORDER 8 BITS OF WORD 2
	JMS TTYPCH
	AND TT7400
	CLL RTR
	RTR
	TAD TTYGCH
	RTR
	RTR	/CHARACTER 3 IS HIGH ORDER 4 BITS OF WORDS 1 AND 2
	JMS TTYPCH	/WILL SET LINK ON!
			/AC IS NON-ZERO HERE BUT WE DON'T CARE
TTLOOP,	ISZ TTYCA
TT70,	70
TTKLG,	ISZ TTYWC
	JMP TTYLP
TTYRTN,	TAD TTYCDF
	CLL CIA
	SNL CLA
	ISZ TTY	/SKIP PAST ERROR RETURN
TTYXIT,	HLT	/RESTORE CALLING FIELDS
	RAL
	JMP I TTY
TTYPCH,	0
	TAD TTM232
	SNA
	JMP TTYRTN
	TAD TTY232
	JMS TTPRNT
	JMP I TTYPCH
TTYTST,	0
TTYCDF,	0
	TAD TTY200
	KRS		/TEST FOR ^C WITH FLAG UP
	TAD TTM203
	KSF
	CLA IAC
	SZA		/YES..BACK TO MONITOR
	JMP I TTYTST
TTYCIF,	CDF CIF 0
	JMP I TT7600
TTPRNT,	0
	TLS
	TSF
	JMP .-1
	JMP I TTPRNT
TTYCA,	0
TTYWC,	0
TTCDF,	CDF 0

/FOLLOWING CODE READS TTY AND PACKS IN BUFFER.
TTYGLP,	JMS TTYGCH
	DCA I TTYCA
	JMS TTYGCH
	DCA TTYPCH
	JMS TTYGCH
	RTL
	RTL
	DCA TTYGCH
	TAD TTYGCH
	AND TT7400
	TAD I TTYCA
	DCA I TTYCA
	TAD TTYGCH
TTY200,	AND TTY360
	CLL RTL
	RTL
	TAD TTYPCH
	ISZ TTYCA
	DCA I TTYCA
	JMP TTLOOP
TTYGCH,	0
	TAD TTYCDF
TT7700,	SMA CLA
	JMP I TTYGCH
	ISZ TTYTST
	JMP TTYKSF
	TAD TTY212
	JMP TTECHO
TTYKSF,	KSF
	JMP .-1
	JMS TTYTST
	TAD TTM27
	SNA		/IS IT A ^Z?
	DCA TTYCDF	/YES - SET END-OF-FILE FLAG
	TAD TTY14
	DCA TTYTST	/TTYTST=-1 IF CARRIAGE RETURN
	KRB
TTECHO,	JMS TTPRNT	/ECHO THE INPUT CHARACTER
	JMP I TTYGCH
TTY232,	232		/THIS CAN BE OPTOMIZED OUT!
TTY212,	212
TTY14,	14
TTM203,	-203
TTM27,	-27
TTYM14,	-14
TTM232,	-232
TTYCTO,	6032
	JMP TTYRTN
TT3700,	3700
	IFNZRO LINCTAPE+TD8E+TD8ESYS <IFZERO LIST <XLIST>>
	IFZERO LINCTAPE+TD8E	<
	*5000
	/DECTAPE HANDLERS(PAGE RELOCATABLE) FOR OS/8 MONITOR
DFUN,	0
DM203,	-203
DBLOCK,	0
DBLKCT,	0
D3,	3
WC,	7754
CA,	7755
DERRCT,	0
DTA0,	ISZ DTANO
DTA1,	ISZ DTANO
DTA2,	ISZ DTANO
DTA3,	ISZ DTANO
DTA4,	ISZ DTANO
DTA5,	ISZ DTANO
DTA6,	ISZ DTANO
DTA7,	ISZ DTANO
D400,	400
	CLA CLL CMA RTL
	DCA DERRCT	/SET TO REPEAT THREE TIMES IN CASE OF ERROR
	TAD DTANO
	CMA
	TAD DTATAD	/GENERATE "TAD DTAN" WHERE DTAN IS THE ONE THAT
	DCA DTANO	/WAS CALLED.
	CLA CLL CML RTR
	TAD DTANO	/ALSO GENERATE "DCA DTAN" SO WE CAN RESTORE IT
	DCA DTADCA
	RDF
	TAD DCDIF0
	DCA DSTOP	/STORE CALLING FIELD FOR RETURNING
DTANO,	0		/GET CALLING ADDRESS
	DCA DTA		/SAVE IT
	TAD DTAISZ
DTADCA,	0		/RESTORE ENTRY POINT
	DLOC=DTADCA
DTAISZ,	ISZ DTANO	/BUMP DTANO FOR VARIOUS GROOVY REASONS
			/WHICH WILL BE APPARENT LATER
	TAD I DTA
	DCA DFUN		/STORE AWAY FUNCTION WORD FOR FUTURE USE
	ISZ DTA
DT7140,	CLL CMA		/THE "CLL" IS ONLY NECESSARY TO FORM THE 7140
	TAD I DTA
	DCA DLOC	/BUFFER ADDRESS -1
	ISZ DTA
	TAD I DTA
	CLL RAL		/MULTIPLY BY 2 FOR 256-WORD SIMULATED RECORDS
	DCA DBLOCK	/DECTAPE BLOCK #
	ISZ DTA
DTATRY,		TAD WC
DCDIF0,	CDF CIF 0
	DCA I CA
	TAD DFUN
	RAR
	CLA CML	/COMPLEMENT OF BIT 11 OF DFUN NOW IN THE LINK
	TAD DTANO	/DTANO = "TAD DTAN+1"
	RTR
	RTR		/THESE TWO ROTATES FORM THE FLLOWING NUMBER
			/IN THE AC: YYYF00101000, WHERE YYY =DTAN+1
			/AND F IS THE COMPLEMENT OF DFUN(11)
	TAD DT7140	/THE MAGIC STEP - THIS SIMULTANEOUSLY BUMPS DOWN
			/THE RECORD NUMBER IN AC(0-2) AND TRANSFORMS
			/THE REST OF THE AC TO F10001000 WHICH IS A
			/SEARCH IN DIRECTION F(F=1 MEANS BACKWARDS) WITH
			/THE MOTION BIT ON.
	DTCA DTXA
	DTLB		/SET DECTAPE FIELD TO 0 FOR SEARCHING
	JMP DC+3	/JUMP INTO THE BLOCK SEARCH ROUTINE
DERR,	RTL	/DECTAPE STATUS REGISTER B IS USUALLY IN THE AC HERE
	RAL
D7600,	7600	/GET THE "END OF TAPE" FLAG INTO THE LINK AND CLEAR THE AC
	TAD D200	/GET MOTION BIT
DC,	SZL	/AND, IF LINK IS ON
DTATAD,	TAD D400	/REVERSE DIRECTION OF MOTION
	DTXA
	TAD	D200
	KRS
	TAD	DM203
	SNA CLA
	KSF		/CHECK FOR ^C TYPED
	JMP DTAWT
	TAD D7600
	DCA DTA		/FAKE DTA SO WE GO TO LOC 7600 IN FIELD 0
	JMP DSTOP+1	/AFTER STOPPING THE TAPE
DTAWT,	DTSF DTRB
	JMP .-1	/WAIT FOR SEARCH TO COMPLETE
	SPA	/HAS AN ERROR OCCURED?
	JMP DERR	/DO SOMETHING APPROPRIATE
	DTRA
	RTL
	CMA RTL
	SNL CLA	/WAS MOTIOZ OF TAPE FORWARDS?
	TAD D3	/NO, SO ONLY SUCCEED IF WE ARE 3 BLOCKS IN FRONT 
		/OF TARGET BLOCK
	TAD I WC
	CMA
	TAD DBLOCK
	CMA	/AFTER THIS OPERATION WE HAVE THE FOLLOWING 4 POSSIBILITIES
		/1)AC=0, L=1	/SEARCH COMPLETE
		/2)AC=0, L=0	/RIGHT PLACE ON TAPE,WRONG DIRECTION
		/3)AC .GT. 0, L=0	/WEVE PASSED THE CORRECT BLOCK
		/4)AC .GT. 0, L=1	/WE HAVENT REACHED THE CORRECT BLOCK YET
	SZA CLA
	JMP DC
	SNL
	JMP DC+1
	TAD DLOC
	DCA I CA	/SET THE CURRENT ADDRESS REGISTER TO THE BUFFER -1
	TAD DFUN
	DTLB		/SET FIELD TO BUFFER FIELD
	TAD D7700
D200,	AND DFUN
	CLL RAL
	DCA DBLKCT	/GET UNCOMPLEMENTED WORD COUNT INTO DBLKCT
	RAL
	IAC
	CLL CML RTL
	RTL	/FORM A 50 IF L=1, A 30 IF L=0
DL,	DTXA	/XOR IN 50(WRITE) OR 30(READ) OR 0(CONTINUE PREVIOUS OP)
	TAD D7600
	DCA I WC	/READ/WRITE 128 WORDS FROM/INTO EACH BLOCK
	DTSF DTRB
	JMP .-1
	CLL CML	/SET ERROR FLAG ON INITIALLY
D7700,	SMA CLA
	JMP .+4
	ISZ DERRCT	/ERROR-IS IT THE THIRD?
	JMP DTATRY	/NO-TRY AGAIN
	JMP DSTOP	/3 ERRORS-STOP TAPE!
	TAD DBLKCT
	TAD D7600
	SNA	/BUMP WORD COUNT BY -128 AND SEE IF 0
		/ALSO REVERSE LINK.
	JMP DOVER	/YES - DONE
	DCA DBLKCT	/RESTORE BUMPED WORD COUNT
	JMP DL		/AND LOOP
DOVER,	ISZ DTA		/SKIP ERROR RETURN
DSTOP,	HLT		/RESTORE CALLING FIELD
	TAD D200	/STOP THE TAPE
	DTXA
	DCA DTANO	/INITIALIZE DTANO FOR THE NEXT CALL
	RAR	/GET ERROR CODE FROM LINK INTO AC0
	JMP I DTA	/AND EXIT
DTA,	0
	>
	IFNZRO LINCTAPE+TD8E+TD8ESYS <IFZERO LIST <XLIST>>
/TD8E HANDLER..2 PAGE   8/17/71

/TWO PAGE, PAGE RELOCATABLE HADLER FOR THE TD8E DECTAPE.
/THIS HANDLER DRIVES UNITS 0&1, AND HAS ENTRY POINTS
/AT LOCATIONS 10 AND 14 RELATIVE TO THE LOAD POINT.


	IFZERO TD8E+LIST <XLIST>
	IFNZRO TD8E <
/THE IOT'S ARE:

	SDSS=6771	/SKIP ON SINGLE LINE FLAG
	SDST=6772	/SKIP ON TIME ERROR
	SDSQ=6773	/SKIP ON QUAD LINE FLAG
	SDLC=6774	/LOAD TAPE COMMAND REGISTER
	SDLD=6775	/LOAD DATA REGISTER
	SDRC=6776	/READ COMMAND REGISTER
	SDRD=6777	/READ DATA REGISTER



	*5000

NXINIT,	7600	/CLEAR AC HERE!!!
	JMS I CINIT2	/PART OF INITIALIZATION..DO THE PART
BASE2,	DCA JINIT	/ON SECOND PAGE AND THEN TO JINIT
	JMP JINIT

BUFF,	0
PGCT,	0
FUNCT,	0
C1000,	1000

DTA0,	0		/ENTRY FOR UNIT 0
	CLA CLL
	JMP DTA1X
UNIT,	0		/FILLER WORD
DTA1,	0		/ENTRY FOR UNIT 1
	CLA CLL CML
	TAD DTA1
	DCA DTA0	/PICK UP ARGS AT DTA0
DTA1X,	RAR
	DCA UNIT	/UNIT # FROM LINK
	RDF
	TAD C6203
	DCA LEAVE	/SET UP EXIT FROM HANDLER
	TAD I DTA0
	DCA FUNCT	/SAVE FUNCTION WORD
	TAD FUNCT
	CLL RAL
C200,	AND CM200	/GET A PAGE COUNT
	DCA PGCT
	TAD FUNCT
C374,	AND C70		/ISOLATE FIELD OF TRANSFER
	TAD C6203
	DCA XFIELD
	ISZ DTA0	/POINT TO BUFFER
	TAD I DTA0
	DCA BUFF
	ISZ DTA0	/POINT TO RECORD
	TAD I DTA0
	CLL RAL		/CONVERT TO DECTAPE BLOCKS
	DCA TBLOCK
	ISZ DTA0	/POINT TO ERROR RET.
C6203,	CIF CDF 0

JINIT,	JMP INIT	/FIRST TIME THRU IT GETS EXECUTED
			/THE RETURN FROM INIT ZEROES IT
	CLA CLL CMA RTL
	DCA ERCNT	/3 ERROR TRIES
	TAD UNIT
	DCA I CXUNIT
	JMS I CSELCT	/CHECK FOR SELEC ERROR
	JMP .-1		/LOOPS IF NO ^C AND SELECT ERROR
	TAD FUNCT
	CLL RAR
	JMP GO		/OK.. START THE SEARCH
TRWCOM,	SDST		/TIME OR CHECK SUM ERROR?
	SZA CLA
	JMP TRY3	/YES TRY UP TO 3 TIMES
	TAD PGCT	/NO.. IS PAGE COUNT EXHAUSTED?
	TAD CM200
	SNA
	JMP EXIT	/YES.. DONE THIS TRANSFER
	DCA PGCT	/NEW PAGE COUNT
	ISZ TBLOCK
	TAD BUFF
	TAD C200	/GET NEW BUFFER ADDRESS
	DCA BUFF
	CLL CML		/FORCE FORWARD MOTION
GO,	CLA CML RTR	/PUT IN DIRECTION BIT
	TAD C1000
	TAD UNIT
	SDLC		/INITIATE THE MOTION
	JMS I CRDQAD	/WAIT FOR 8 LINES TO PASS
	JMS I CRDQAD
M20,	7760		/DON'T CARE IF IT DOES SKIP!!!
TSRCH,	SDSS		/WAIT FOR BLOCK MARK OR END ZONE
	JMP .-1
	SDRC
	CLL RTL		/DIRECTION TO LINK, DATA TO AC 4-9
	AND C374	/ISOLATE M.T BITS
	TAD M110	/IS IT END ZONE?
	SNA
	JMP ENDZ	/YES..DO SOMETHING REASONABLE
	TAD M20		/HOW ABOUT BLOCK MARK?
	SZA CLA
	JMP TSRCH	/NEITHER..KEEP LOOKING
	SDRD		/WHAT IS THIS BLOCK'S #?
	SZL		/IF IN REVERSE, LOOK FOR 3 BEFORE
	TAD TC3		/THE ACTUAL TARGET BLOCK
	CMA
	TAD TBLOCK
	CMA 
	SNA		/IS THIS THE BLOCK?
	JMP TFOUND	/YES..HAVE CORRECT ONE
M110,	SZL SNA CLA	/ARE WE HEADED PROPERLY?
	JMP TSRCH	/YES.. KEEP LOOKING
ENDZ,	SDRC		/IF WE ARE IN END ZONE FORWARD, WE LOSE
	CLL RTL
	SZL CLA
	JMP GO		/EXECUTE TURN AROUND AND SEARCH

TRY3,	ISZ ERCNT	/TRIED 3 TIMES?
	JMP GO
	CLA CLL		/YES.. TAKE FATAL RETURN
	JMP FATAL
EXIT,	ISZ DTA0	/NORMAL RETURN
	CLL CML
FATAL,	TAD UNIT	/STOP TAPE FIRST
	SDLC
	CLA CML RAR	/EITHER 0 OR 4000 IN AC
LEAVE,	HLT	/GETS CIF CDF N
	JMP I DTA0

INIT,	JMS .		/FIND OUT WHERE WE GOT LOADED
BASE,	TAD CRDQAD
	SPA		/NEGATIVE ENDS LIST
	JMP NXINIT
	TAD INIT
	DCA CRDQAD
	ISZ .-1
	ISZ BASE
	JMP BASE

CRDQAD,	R4LINE-BASE
CINIT2,	INIT2-BASE
CSELCT,	SELECT-BASE
CXUNIT,	XUNIT-BASE

	*5167
TFOUND,	SZL CLA		/ARE E IN RIGHT DIRECTION
	JMP GO		/NOT YET
	TAD FUNCT
	CLL RAL		/R/W TO LINK
	CLA
C70,	70
TC3,	3
	TAD BUFF
XFIELD,	HLT		/CONTROL 'TRICKLES THROUGH

TBLOCK=DTA1
ERCNT=INIT+1
CM200=NXINIT
DTA2=DTA0
DTA3=DTA1
DTA4=DTA0
DTA5=DTA1
DTA6=DTA0
DTA7=DTA1
	*5200
	CIF 0		/WE ARE IN FIELD 0
	DCA XBUFF
	RAR
	DCA XFUNCT	/READ/WRITE TO FUNCTION
	TAD C7600
	DCA WORDS	/128 WORDS/BLOCK
RGRD,	SDSS
	JMP .-1		/LOOK FOR REVERSE GUARD PATTERN
	SDRC
	AND K77
	TAD CM32
	SZA CLA		/IF NOT REV. GUARD, KEEP LOOKING
	JMP RGRD
	TAD XFUNCT
K7700,	SMA CLA		/IS IT READ OR WRITE?
	JMP TREAD
	SDRC		/CHECK FOR WRITE LOCKOUT
	AND TC300
	CLL		/SETUP TO RETRY IF WRITE LOCK
	SZA CLA
	JMP I CTRY3	/IF LOCKED OUT, ERROR
	JMS R4LINE	/SKIP A WORD
C7600,	7600		/CLA
	TAD C1400
	TAD XUNIT
	SDLC		/TURN ON WRITE HEAD
	CLA CMA
	JMS W4LINE	/7777 IN REV. CHECKSUM
	CLA CMA
	DCA CSUM	/AND ALSO TAPE CHECKSUM
WRTLP,	TAD I XBUFF
	JMS W4LINE
	ISZ XBUFF	/INCREMENT BUFF. ADD.
K77,	77
	ISZ WORDS	/DONE A BLOCK?
	JMP WRTLP
	JMS W4LINE	/A 129 TH WORD OF 0
	JMS GCHK	/GET 6 BIT CHECKSUM
	JMS W4LINE	/WRITE IT TO TAPE
	JMS W4LINE	/LET CHECK SUM FINISH
	JMP I CRWCOM	/SEE IF WE ARE FINISHED

TREAD,	JMS R4LINE
	JMS R4LINE	/SKIP CONTROL WORDS
	JMS R4LINE
	AND K77		/CHECKSUM
	TAD K7700
	DCA CSUM
RDLP,	JMS R4LINE
	JMS EFUN	/ADD WORD TO CHECKSUM
	DCA I XBUFF
	ISZ XBUFF
TC300,	300
	ISZ WORDS	/DONE BLOCK?
	JMP RDLP
	JMS R4LINE
	JMS EFUN	/CHECK SUM 129 TH WORD
	JMS R4LINE
	AND K7700	/READ CHECKSUM
	JMS EFUN
	JMS GCHK	/COMPARE TAPE AND OUR CHECKSUM
	JMP I CRWCOM

W4LINE,	0		/ADD TO CHECKSUM AND WRITE A 12 BIT
	JMS EFUN	/WORD
	SDSQ
	JMP .-1		/SKIP ON QUAD LINE FLAG
	SDLD
	CLA		/AC IS NOT CLEARED AFTER SDLD
	JMP I W4LINE

R4LINE,	0		/WAIT FOR QUAD FLAG AND READ
	SDSQ
	JMP .-1
	SDRD
	JMP I R4LINE

EFUN,	0		/COMPUTE EQUIVALENCE CHECKSUM
	CMA
	DCA ETMP	/ACTUALLY CHECKSUMS ON DECTAPE ARE
	TAD ETMP	/EQUIVALENCE OF ALL WORDS IN A RCORD
	AND CSUM	/6 BITS AT A TIME. SINCE EQUIVALENCE
	CIA		/IS ASSOCIATIVE WE DO IT 12 AT A TIME
	CLL RAL		/AND CONDENSE LATER.
	TAD ETMP	/IDENTITIES USED ARE:
	TAD CSUM	/A+B=(A.XOR.B)+2*(A.AND.B)
	DCA CSUM	/A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B)
	TAD ETMP	/A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B))
	CMA
	JMP I EFUN

GCHK,	0		/FORM 6 BIT CHECKSUM
	CLA 
	TAD CSUM
	CLL CMA RTL
	RTL
	RTL
	JMS EFUN
	CLA CLL CML
	TAD CSUM
	AND K7700
	JMP I GCHK

INIT2,	0		/TIS INITIALIZES LOCS IN PAGE 2
INIT3,	TAD CTRY3
	SNA
	JMP I INIT2	/0 ENDS LIST
	TAD INIT2
	DCA CTRY3	/UPDATE THE LIST
	ISZ .-1
	ISZ INIT3
	JMP INIT3

CTRY3,	TRY3-BASE2
CRWCOM,	TRWCOM-BASE2
XBUFF,	0		/0 MUST TERMINATE IT!!
CM32,	-32
C1400,	1400

SELECT,	0		/THIS ROUTINE CHECKS FOR SELECT
	TAD XUNIT	/AND ^C TYPED
	SDLC
	SDRC		/GET STATUS AND SEE IF SELECT ERROR ON
	AND C100
	SNA CLA
	ISZ SELECT	/NOPE .TAKE NORMAL OUT
	KSF		/SEE IF FLAG IS UP
	JMP I SELECT	/NO..EXIT
	KRB
	TAD M203	/IS IT A ^C?
	SZA CLA
	JMP I SELECT	/NO..EXIT
	JMP I C7600

C100,	100
M203,	-203

XFUNCT=INIT2
CSUM=XFUNCT+1
WORDS=CSUM+1
ETMP=WORDS+1
XUNIT=ETMP+1
	>
	IFZERO TD8E+LIST <XLIST>
	IFZERO LINCTAPE+LIST <XLIST>
	IFNZRO LINCTAPE <
	*5000
	/LINCTAPE HANDLER FOR OS/8 - CRUDE VERSION (WRITE OPERATION CHECKS
	/AFTER EACH BLOCK)
	/ALL 8 HANDLERS ARE IN THIS PAGE - SEE DECTAPE HANDLER FOR
	/DUMB COMMENT

	/PDP-12 OPCODES NEEDED
	LINC=	6141
	PDP=	0002
	CLR=	0011
	AXO=	0001
	TMA=	0023
	TAC=	0003
	STDI=	0436
	COM=	0017
	ROLI1=	0261
	ESF=	0004

LTM203,	-203
LTA,	0
LTA7,	7
LTA30,	30
LTA70,	70
LTA702,	702
LT3700,	3700
LTATMP,	0
DTA0,	ISZ LTANO
DTA1,	ISZ LTANO
DTA2,	ISZ LTANO
DTA3,	ISZ LTANO
DTA4,	ISZ LTANO
DTA5,	ISZ LTANO
DTA6,	ISZ LTANO
DTA7,	ISZ LTANO
LTA200,	200
	TAD LTANO
	CMA
	TAD LTATAD
	DCA LTANO
	CLA CLL CML RTR
	TAD LTANO
	DCA LTADCA
	RDF
	TAD LCDIF0
	DCA LTAXIT
LTANO,	0
	DCA LTA
	TAD LTAISZ
LTADCA,	0
	TAD I LTA
	DCA LTARG1
	ISZ LTA
	TAD I LTA
	DCA LTARG2
	ISZ LTA
	TAD I LTA
	CLL RAL	/MOVE ARGUMENTS TO WORK AREA
	DCA LTARG3
	ISZ LTA
	ISZ LTA
	TAD LTARG1	/GET CORE FIELD
	AND LTA70
	TAD LTCDF
	DCA LTSET
	TAD LTSET
	AND LTA70
	CLL RTL
	RTL		/MOVE TO BITS 0-2. CONTROLLER
	RTL		/WANTS THEM THERE
SLTARG3,DCA LTATMP
	TAD LTANO	/GET UNIT NO.
	AND LTA7
	CLL RAR
	TAD LTATMP
	TAD LTA30	/SET BIT 7 ON. EXTENDED ADD. MODE
	LINC
	AXO		/SEND DATA TO CONTROLLER
	PDP
LT7600,	7600
	DCA LTANO	/RESET UNIT NO.
	TAD LTARG1
	RTL
	AND LTA3
	CLL RTL
	TAD LTA702	/ADD TAPE INST; STORE IT
	DCA LTINST
LTALP,	TAD LTARG2	/CORE ADDRESS TO CONTROLLER
LTATAD,	TAD LTA200	/SAVE 129 TH WORD
	DCA LTATMP
LTSET,	0
	TAD I LTATMP
	DCA LTASVC	/SAVE LOC.
	TAD LTARG2
	LINC
	TMA
LTINST,	0		/TAPE INSTRUCTION HERE
LTARG3,	0		/BLOCK NO. HERE
LTAWLP,	PDP
	CLA
	TAD LTASVC	/RESTORE 129TH WORD
	DCA I LTATMP
	TAD LTA200	/ADD 200 FOR PARITY TTY
	KRS
	TAD LTM203	/TEST FOR ^C
	SNA CLA
	KSF		/IS FLAG UP?
	JMP NOTFUG	/EITHER NOT ^C OR NO FLAG
	TAD LTA30
	LINC
	ESF
	PDP
LT7700,	7700
	TAD LTASVC
	DCA I LTATMP
LCDIF0,	CDF CIF 0
	JMP I LT7600
NOTFUG,	LINC
	STDI
	COM
	ROLI1
LTA3,	TAC
	PDP
	SNL
	JMP LTAWLP
LTADUN,	CLL IAC
	CLA IAC RTL
	AND LTINST
	SNA CLA
	JMP LTALP
LTNERR,	TAD LTARG1
	AND LT3700
	TAD LT7700
	SNA		/ALL DONE?
	JMP LTAXIT
	DCA LTARG1	/NO.. SAVE COUNT
	TAD LTATMP
	DCA LTARG2
	ISZ LTARG3
	JMP LTALP
LTAXIT,	HLT
	JMP I LTA
LTAISZ,	ISZ LTANO
LTARG1,	0
LTARG2,	0
LTCDF,	CDF 0
LTASVC=LTADCA
	>
	IFZERO LINCTAPE+LIST <XLIST>
	*6400
	/THIS IS THE REAL HIGH SPEED HANDLER.
	/HIGH SPEED PAPER TAPE HANDLER FOR BLEEP MONITOR
	/PACKS 3 CHARACTERS IN 2 WORDS ON INPUT, UNPACKS ON OUTPUT
	/PAGE RELOCATABLE
	IFNZRO NOHSPT <IFZERO LIST <XLIST>>
	IFZERO NOHSPT	<
PTP,	0
	CLA CLL CML	/SET LINK ON TO INDICATE PUNCH
	JMS PSETUP	/DO COMMON CRAP
PTPLP,	TAD I PTPCA
	JMS PTPPCH	/FIRST CHAR IN LOW ORDER 8 BITS OF WORD 1
	DCA PTR
	ISZ PTPCA
PT7700,	7700
	TAD I PTPCA
	JMS PTPPCH	/SECOND CHAR IN LOW ORDER 8 BITS OF WORD 2
	CLL RTR
	RTR
	TAD PTR
	RTR
	RTR	/THIRD CHARACTER NOW IN AC
	JMS PTPPCH
PTPEND,	ISZ PTPCA
PT70,	70	/JUST IN CASE WERE PUNCHING PG 7600 KEEP THIS LITERAL HERE
	KSF
	JMP PTPISZ	/KEYBOARD FLAG OFF - DON'T WORRY ABOUT ^C
PTPKRS,	KRS
	AND PTP177
	TAD PTPM3
	SZA CLA	/IS THERE A ^C IN THE TTY BUFFER?
	JMP PTPISZ	/NO
PTPCIF,	CDF CIF 0
	JMP I .+1
	7600
PSETUP,	0
	RDF	/GET FIELD OF CALLING PROGRAM
	TAD PTPCIF
	DCA PTPXIT	/SET UP RETURN SEQUENCE
	TAD I PTP
	AND PT70
	TAD PCDF
	DCA PTPCDF
	RAR		/GET LINK(1=PTP,0=PTR)
	TAD I PTP	/GET FUNCTION WORD
	ISZ PTP
	SPA		/CHECK CORRECT MODE
	JMP PTPERR	/SIGNAL "UNRECOVERABLE DEVICE ERROR"
	AND PT7700
	CMA		/SET UP -(WORD COUNT)/2-1
	DCA PTPWC
	TAD I PTP	/SET UP STARTING ADDRESS
	ISZ PTP
	DCA PTPCA
	TAD I PTP
PTPCDF,	0		/SET DATA FIELD TO ACCESS BUFFER
	PTPEOF=PTPCDF
	SNA CLA
	SZL
	JMP PTPKRS
	TAD PTP336	/INPUT INITIALIZATION - TYPE "^" AND WAIT
	TLS
	KSF
	JMP .-1
	JMS PTRGCH	/INITIALIZE THE PTR BUFFER CHAR
	6032		/CLEAR AC AND KEYBOARD FLAG
	JMP PTPKRS	/CHECK FOR ^C
PTPISZ,	ISZ PTPWC
	JMP I PSETUP	/LOOP FOR BUFFER SIZE (128 WORDS)
PTPRTN,	TAD PTPEOF
	SZA CLA		/DID WE RUN OUT OF TAPE?
	ISZ PTP
	ISZ PTP
PTPXIT,	HLT	/EXIT CDF GOES HERE
	JMP I PTP
PTPPCH,	0
	PLS	/NOTICE THE GLORIOUS LACK OF OVERLAP
	PSF
	JMP .-1
	AND PT7400
	JMP I PTPPCH
PTPCA,	0
PTR,	0		/CORRECT ENTRY IN MAIN ASSEMBLY IF THIS IS MOVED!
	CLA CLL
	TAD PTR
	DCA PTP
	JMS PSETUP	/SET UP ADDRESS, COUNT, FIELDS
PTRLP,	JMS PTRGCH	/READ FIRST CHARACTER OF 3
	DCA I PTPCA
	JMS PTRGCH
	DCA PTPPCH
	JMS PTRGCH
	RTL
	RTL
	AND PT7400
	TAD I PTPCA
	DCA I PTPCA	/HIGH ORDER 4 BITS INTO WORD 1
	TAD PTR		/GET THE CHAR FROM THE PTR BUFFER
	RTR
	RTR
	RAR		/PUT THE LOW ORDER BITS INTO AC 0-3
	AND PT7400
	TAD PTPPCH
	ISZ PTPCA
PT7400,	7400
	DCA I PTPCA	/LOW ORDER 4 BITS INTO WORD 2
	JMP PTPEND
PTRGCH,	0
	TAD PTPEOF
	SNA CLA
	JMP PTRBF0	/ZERO OUT BUFFER
	RFC
	DCA PTPEOF
PTTIME,	ISZ PTPEOF	/THIS LOOP OVERFLOWS IN APPROX. 100 MS ON A PDP-8,
	JMP PGCHLP	/72 MS ON A PDP-8/E
	TAD PTP232	/SEND ^Z TO BUFFER
PTRBF0,	DCA PTR
	JMP PTRXX	/AND 0 GARBAGE CHARACTER
PGCHLP,	TAD PTPTMP
	DCA PTR
PTP232,	232
PTP336,	336		/FALL THROUGH CONSTANTS TO STALL FOR TIME
PTP177,	177
	RSF
	JMP PTTIME	/READER NOT READY - CHECK TIMING
	RRB		/READER READY - READ CHAR
PTRXX,	DCA PTPTMP	/BUFFER READER BY ONE CHARACTER TO ELIMINATE
	TAD PTR		/GARBAGE CHARACTER AT END OF TAPE
	JMP I PTRGCH	/AND RETURN
PTPERR,	CLA CLL CML RAR	/SIGNAL A "PERMANENT I/O ERROR" ON THE DEVICE
	JMP PTPXIT-2
PCDF,	CDF 0
PTPTMP,	0
PTPWC,	0
PTPM3,	-3
	>
	IFNZRO NOHSPT <IFZERO LIST <XLIST>>
	/THIS IS THE PTP,PTR HANDLER FOR PEOPLE WITH
	/NO HIGH SPEED I/O.

	IFZERO NOHSPT+LIST <XLIST>
	IFNZRO NOHSPT	<
PTP,	0
	CLA CLL CML	/SET LINK ON TO INDICATE PUNCH
	JMS PSETUP	/DO COMMON CRAP
PTPLP,	KSF
	JMP PTPCNT	/KEYBOARD FLAG OFF - DON'T WORRY ABOUT ^C
	KRS
	AND PTP177
	TAD PTPM3
	SZA CLA	/IS THERE A ^C IN THE TTY BUFFER?
	JMP PTPCNT	/NO
PTPCIF,	CDF CIF 0
	JMP I PT7600
PTPCNT,	TAD I PTPCA
	JMS PTPPCH	/FIRST CHAR IN LOW ORDER 8 BITS OF WORD 1
	DCA PTR
	ISZ PTPCA
PT7700,	7700
	TAD I PTPCA
	JMS PTPPCH	/SECOND CHAR IN LOW ORDER 8 BITS OF WORD 2
	CLL RTR
	RTR
	TAD PTR
	RTR
	RTR	/THIRD CHARACTER NOW IN AC
	JMS PTPPCH
PTPEND,	ISZ PTPCA
PT70,	70	/JUST IN CASE WERE PUNCHING PG 7600 KEEP THIS LITERAL HERE
	JMP PTPISZ
PSETUP,	0
	RDF	/GET FIELD OF CALLING PROGRAM
	TAD PTPCIF
	DCA PTPXIT	/SET UP RETURN SEQUENCE
	TAD I PTP
	AND PT70
	TAD PCDF
	DCA PTPCDF
	RAR		/GET LINK(1=PTP,0=PTR)
	TAD I PTP	/GET FUNCTION WORD
	ISZ PTP
	SPA		/CHECK CORRECT MODE
	JMP PTPERR	/SIGNAL "UNRECOVERABLE DEVICE ERROR"
	AND PT7700
	CMA		/SET UP -(WORD COUNT)/2-1
	DCA PTPWC
	TAD I PTP	/SET UP STARTING ADDRESS
	ISZ PTP
	DCA PTPCA
	TAD I PTP
PTPCDF,	0		/SET DATA FIELD TO ACCESS BUFFER
	PTPEOF=PTPCDF
	SNA CLA
	SZL
	JMP PTPISZ
	TAD PTP336	/INPUT INITIALIZATION - TYPE "^" AND WAIT
	TLS
	KSF
	JMP .-1
PT7600,	7600
PTPISZ,	ISZ PTPWC
	JMP I PSETUP	/LOOP FOR BUFFER SIZE (128 WORDS)
PTPRTN,	TAD PTPEOF
	SZA CLA		/DID WE RUN OUT OF TAPE?
	ISZ PTP
	ISZ PTP
PTPXIT,	HLT	/EXIT CDF GOES HERE
	JMP I PTP
PTPPCH,	0
	TLS
	TSF		/NOTICE THE GLORIOUS LACK OF OVERLAP
	JMP .-1
	AND PT7400
	JMP I PTPPCH
PTPCA,	0
PTR,	0		/CORRECT ENTRY IN MAIN ASSEMBLY IF THIS IS MOVED!
	CLA CLL
	TAD PTR
	DCA PTP
	JMS PSETUP	/SET UP ADDRESS, COUNT, FIELDS
PTRLP,	JMS PTRGCH	/READ FIRST CHARACTER OF 3
	DCA I PTPCA
	JMS PTRGCH
	DCA PTPPCH
	JMS PTRGCH
	RTL
	RTL
	DCA PTR
	TAD PTR
	AND PT7400
	TAD I PTPCA
	DCA I PTPCA	/HIGH ORDER 4 BITS INTO WORD 1
	TAD PTR		/GET THE CHAR FROM THE PTR BUFFER
	RTL
	RTL
	AND PT7400
	TAD PTPPCH
	ISZ PTPCA
PT7400,	7400
	DCA I PTPCA	/LOW ORDER 4 BITS INTO WORD 2
	JMP PTPEND
PTRGCH,	0
	TAD PTPEOF
	SNA CLA
	JMP I PTRGCH
	CLA CLL CMA RTL		/-3
	DCA PTPEOF
	DCA PTR
PTTIME,	ISZ PTR		/TIMEOUT LOOP FOR LOW SPEED READER
	JMP PTP232
	ISZ PTPEOF	/TIMES OUT IN 132 MS(PDP 8/E) OR 205 MS(PDP 8)
	JMP PTP232
	TAD PTP232
	JMP I PTRGCH	/OVERFLOWED - PTPEOF IS NOW 0, RETURN ^Z
PTP232,	232		/WASTE SOME TIME
PTP177,	177
	KSF
	JMP PTTIME	/READER NOT READY - CONTINUE TIMEOUT
	KRB
	JMP I PTRGCH	/RETURN WITH CHARACTER
PTPERR,	CLA CLL CML RAR	/SIGNAL A "PERMANENT I/O ERROR" ON THE DEVICE
	JMP PTPXIT-2
PCDF,	CDF 0
PTP336,	336
PTPWC,	0
PTPM3,	-3
	>
	IFZERO NOHSPT+LIST <XLIST>
/THE NOPUNC AND ENPUNC PSEUDO OPS ARE USED TO
/'FAKE OUT' THE ASSEMBLER. THE CODE ASSEMBLES AS IF THE
/ORIGIN WERE AT 7607, BUT WHEN IT IS LOADED, THAT CODE GETS
/LOADED INTO 6607! THIS MEANS THAT ONE CAN BULID A DISK
/VERSION OF OS/8 WHILE RUNN ING UNDER A DECTAPE VERSION, AS
/THE SYSTEM HANDLERS ARE NOT OVERLAPPED.

/IN EACH SYSTEM HANDLER THE CODE
/		IFNZRO .-7700 <NZERR>
/APPEARS. THIS WILL CAUSE AN ASSEMBLY ERROR IF THINGS ARE
/SHUFFLED AROUND. THE SKP;HLT FOLLOWING ARE TO PREVENT
/MISTAKENLY DOING A JMS I (7700 WITH IF=0.
/THIS MISTAKE COULD DESTROY A SYSTEM.


	*6607	/SYSTEM HANDLER IN FIELD 0
	NOPUNCH
	*7607
	ENPUNCH
	IFZERO RF08+DF32+LIST <XLIST>
	IFNZRO	RF08+DF32	<
SHNDLR,	0
	CLA CLL CMA RTL	/-3
	DCA SYSCNT		/# TRYS ON ERROR
	TAD I SHNDLR
	RAL
	CLA RTL
	TAD S6603
	DCA SFUN	/EITHER A READ OR WRITE
	TAD I SHNDLR
	AND S70
	DCA SFIELD	/GET FIELD OF BUFFER
	TAD I SHNDLR
	RAL
	AND S7600
	CIA
	DCA SWC		/SET UP WORD COUNT
	CLA CMA
	ISZ SHNDLR
	TAD I SHNDLR
	DCA SCA		/BUFFER ADDRESS-1
	ISZ SHNDLR
	IFNZRO	DF32 <TAD I SHNDLR
/NOTE----SOFSET IS ZERO CURRENTLY

	TAD SOFSET
	RTL
	AND S3700>
	TAD SFIELD
	6615		/LOAD DISK EXTENDED MEMORY
S7600,	7600
	IFNZRO RF08 <TAD I SHNDLR
	TAD SOFSET
	RTR
	RTR
	AND S377
	6643	/LOAD HIGH ORDER>
	TAD I SHNDLR
	TAD SOFSET
	RTR
	RTR
	RAR
	AND S7400
SFUN,	HLT		/BECOMES DISK IOT.(READ OR WRITE)
	RDF
	TAD SCIF
	DCA SFIELD
	IFNZRO	DF32	<6622>
	IFNZRO	RF08	<6623>
	JMP .-1
	ISZ SHNDLR
	6621		/SKIP ON ERROR
	IFNZRO RF08 <SKP	/SENSE OF SKIP IS REVERSED>
	JMP SYSER
	ISZ SHNDLR
SFIELD,	HLT		/RETURN TO PROPER FIELD
	6601	/CLEAR TROUBLESOME FLAG
	JMP I SHNDLR
SYSER,	CLA CLL CML RAR	/4000
	ISZ SYSCNT	/TRY AGAIN?
	SKP CLA
	JMP SFIELD	/WHY BOTHER
	CLA CLL CMA RTL
	TAD SHNDLR
	DCA SHNDLR	/RESET PARAMETERS AND TRY AGAIN
	IFNZRO RF08	<IFNZRO .-7700	<NZERR>;	SKP;	HLT>
	JMP SHNDLR+3
SCIF,	CIF 0
SYSCNT,	0
	IFNZRO DF32	<IFNZRO .-7700	<NZERR>;	SKP;	HLT>
S6603,	6603
S70,	70
S7400,	7400
	IFNZRO	DF32 <S3700,	3700>
	IFNZRO RF08 <S377,	377>
	SCA=7751
	SWC=7750
	>
	IFZERO RF08+DF32+LIST <XLIST>
	IFZERO DECTAPE+LIST <XLIST>
	IFNZRO DECTAPE <
SHNDLR,	0
	CLA CLL CMA RTL
	DCA SYSCNT	/3 TRIES ON ERROR
	RDF
	TAD SCIF
	DCA SFIELD	/RETURN FIELD SETUP
	TAD I SHNDLR
	DCA SFUN
	ISZ SHNDLR
	CLA CMA
	TAD I SHNDLR
	DCA SLOC	/BUFFER ADDRESS-1
	ISZ SHNDLR
STRY,	TAD S410	/SETUP DTA0 TO DO SEARCH REVERSE
	DTCA DTXA	/BUT MOTION BIT IS NOT ON
	DTLB
	CLA CMA CLL RAL
	DCA SCA	/7776=SBLOCK FROM OS/8 ASSEMBLY
	TAD SFUN
	RTR
	RTR
SERR,	RTL
	RAL		/LAST 4 INST. PUT MOTION BIT IN LINK
			/IF THIS BIT WAS SET IN THE CALLING
			/SEQUENCE, SEARCH STARTS FORWARD.
S7600,	7600
	TAD S200
SC,	SZL
	TAD S400
	DTXA		/ZAP MOTION BIT ON
	DTSF DTRB
	JMP .-1
	SPA		/CHECK FOR ANY ERRORS
	JMP SERR
	DTRA		/NO ERRORS
	RTL
	CMA RTL		/COMPLEMENT OF DIRECTION TO LINK
			/IF LINK ON, SEARCHING FORWARD.
	SNL CLA
	CML RTL
	TAD SBLOCK	/SEARCH FOR ONE RECORD BEFORE THE
			/REQUIRED ONE. THEN REVERSE DIRECTION
	CMA
	TAD I SHNDLR
	TAD I SHNDLR	/X+X=2*X; RECORDS TO BLOCKS
	TAD SOFSET
	TAD SOFSET	/ALSO DOUBLE OFFSET
	CMA
	SZA CLA	/IS IT PROPER RECORD?
	JMP SC
	SNL		/YES..IF LINK IS ON,WAS FWD SRCH
	JMP SC+1	/REVERSE..REVERSE TAPE MOTION
			/AND SEARCH FORWARD
	TAD SLOC
	DCA SCA
	TAD SFUN
	DTLB		/SET UP FIELD
	TAD SFUN
	CLL RAL
	AND S7600
	DCA SBLKCT	/BLOCK COUNT
	RAL		/FUNCTION TO BIT 11
	IFNZRO .-7700	<NZERR>
	SKP
	HLT		/TO PROTECT AGAINST BAD PROGRAMMERS
	IAC
	CLL CML RTL
	RTL		/FORMS EITHER READ OR WRITE
SL,	DTXA
	TAD S7600
	DCA SWC	/TRANSFER 200 (8)
	DTSF DTRB
	JMP .-1
	CLL CML	/IN CASE OF FATAL ERROR
	SPA CLA
	JMP SERR2
	TAD SBLKCT
	TAD S7600
	SNA		/ALL DONE?
	JMP SOVER	/YES
	DCA SBLKCT
	JMP SL
SERR2,	ISZ SYSCNT	/TRY AGAIN?
	JMP STRY
	SKP		/DON'T BOTHER
SOVER,	ISZ SHNDLR
	ISZ SHNDLR
	TAD S200	/STOP THE TAPE
	DTXA
	RAR		/GIVE FATAL RETURN
SFIELD,	HLT
	JMP I SHNDLR
SCIF,	CIF 0
S400,	400
S200,	200
S410,	410
	SBLKCT=7753
	SYSCNT=7750
	SFUN=7751
	SLOC=7752
	SWC=7754
	SCA=7755
	>
	IFZERO DECTAPE+LIST <XLIST>
	IFZERO RK8+LIST <XLIST>
	IFNZRO RK8	<
	DCLA=6751
	DLDR=6733
	DLDC=6732
	DRDS=6741
	DRWC=6752
	DCLS=6742
	DSKD=6745
	DSKE=6747
	DLWC=6753
	DLCA=6755

		/I WILL ADMIT THAT THE FOLLOWING HANDLER
		/IS WRITTEN TERRIBLY, BUT IT WAS WRITTEN WHILE THE
		/RK8 HARDWARE WAS BEING DEBUGGED AND SO I COULD NOT
		/USE SOME OF THE COOL FEATURES OF THE CONTROLLER.
		/THE RK8 NOW WORKS BUT I AM TOO LAZY TO REWRITE THIS HANDLER

SHNDLR,	0
	CLA CLL CMA RTL
	DCA SYSCNT	/NO. ERROR TRIES
	RDF
	TAD SCIF
	DCA SFIELD	/CALLING FIELD..FOR RETURN
	TAD I SHNDLR
	DCA SFUN	/FUNCTION WORD
	ISZ SHNDLR
	CLA CMA
	TAD I SHNDLR
	DCA SLOC	/BUFFER ADDRESS-1
	ISZ SHNDLR
STRY,	TAD I SHNDLR
	TAD SOFSET	/SOFSET=0
	DCA SREC
	TAD SFUN
	RAL
	AND S7600
	DCA SBLKCT	/WORD COUNT
	RTL
	TAD SDLDR
	DCA SINST	/SINST=6733 (READ) OR 6735 WRITE
SLOOP,	TAD SLOC
	DLCA		/LOAD CURRENT ADDRESS
	TAD SBLKCT
	TAD S7600	/FULL OR HALF RECORD READ?
	SZA CLA
	TAD S7600	/FULL..2 PAGES
	TAD S7600	/HALF..1 PAGE
	DLWC		/WORD COUNT
	CLA CMA
	DCLS		/CLEAR ALL FLAGS
S7600,	7600
S7400,	7400
	TAD SFUN
	AND S70
	DLDC		/LOAD DATA FILED OF BUFFER
	TAD SREC
SINST,	0		/READ OR WRITE IOT
	DSKD
	SKP
	JMP SNEXT
	DSKE		/SKIP ON ERROR
	JMP SINST+1
SERROR,	ISZ SYSCNT
	JMP .+3		/TRY AGAIN!
	CLA CLL CML RAR	/DON'T BOTHER..YOU LOSE
	JMP SRTRN+1
	DRDS
	AND S40		/INSPECT 'SECTOR NOT FOUND BIT'
	ISZ SZERO
	JMP .-1		/DELAY TO LET UNIT QUIET DOWN (KLUDGE!)
	SNA CLA
	JMP SLOOP	/ERROR, BUT SECTOR FOUND
	CLA CMA
	DCLS
	IFNZRO .-7700	<NZERR>
	SKP CLA
	HLT
	DCLA		/SEEK TRACK 0
	DSKD
	JMP .-1
	JMP SLOOP	/AND RETRY
SNEXT,	DSKE		/DONE..IS ERROR FLAG UP?
	SKP
	JMP SERROR	/YEAH?!
	ISZ SREC	/NO..BUMP RECORD NO.
S70,	70
	TAD SLOC
	TAD S400
	DCA SLOC
	TAD SBLKCT
	CLL CML
	TAD S7400
	SZL SNA		/WORD COUNT EXHAUSTED?
	JMP .+3		/YES
	DCA SBLKCT
	JMP SLOOP
	CLA
SRTRN,	ISZ SHNDLR
	ISZ SHNDLR
SFIELD,	HLT
	JMP I SHNDLR
SLOC,	0
SREC,	0
SBLKCT,	0
SYSCNT,	0
SFUN,	0
SZERO,	0
S400,	400
SCIF,	CIF 0
SDLDR,	DLDR
S40,	40
	>
	IFZERO RK8+LIST <XLIST>
	IFZERO LINCSYS+LIST <XLIST>
	IFNZRO LINCSYS <
SHNDLR,	0
S7600,	7600
	RDF
	TAD SCIF
	DCA SXIT
	TAD I SHNDLR
	DCA SFUN	/FUNCTION
	ISZ SHNDLR
	TAD I SHNDLR
	DCA SADR	/BUFFER ADDRESS
	ISZ SHNDLR
	TAD I SHNDLR
	TAD SOFSET	/SOFSET=0
	CLL RAL
	DCA SBLOK	/BLOCK NO.
	ISZ SHNDLR
	CLL CML RAR
	AND SFUN
	RTL
	RTL
	TAD S702	/GET FUNCTION;CREATE READ OR WRITE
	DCA SINST	/READ OR WRITE INSTRUCTION.
	TAD SFUN
	AND S70		/FIELD BITS TO AC 0-2
	TAD SADCDF
	DCA SADSET
	TAD SADSET
	AND S70
	RTL
	IAC RTL		/SET EXTENDED ADDRESS
	RTL
	LINC=6141
	PDP=2
	AXO=1		/SEND TO CONTROLLER
	TMA=23

	LINC
	AXO
	PDP
	CLA
	TAD SFUN
	RAL
	AND S7600
	DCA SFUN
SADSET,	0
SLOOP,	CLA CLL CMA RTL
	DCA SERRCT	/NO. ERROR TRIES
STRY,	TAD SADR
	TAD S200
	DCA SADNXT
	TAD I SADNXT
	DCA SADSVC
	TAD SADR
	LINC
	TMA		/CORE ADDRESS TO CONTROL
SINST,	0		/READ OR WRITE
SBLOK,	0		/BLOCK NO. HERE
	PDP
	CMA		/CHECKSUM HERE. 7777=GOOD
	DCA SADSET
	TAD SADSVC
	DCA I SADNXT
	IFNZRO .-7700 <NZERR>
	SKP
	HLT
	TAD SADSET
	SZA CLA
	JMP SERR
SOK,	ISZ SBLOK
	TAD SADNXT
	DCA SADR
	TAD SFUN
	TAD S7600
	SNA		/ALL DONE?
	JMP SDONE	/YES
	DCA SFUN
	JMP SLOOP
SERR,	TAD SINST
	RTR;RTR
	SPA CLA	/WAS IT READ?
	JMP SOK		/NO..WRITE. CONTINUE
	ISZ SERRCT	/READ..RETRY IT?
	JMP STRY
	CLA CLL CML RAR	/DON'T BOTHER
	SKP
SDONE,	ISZ SHNDLR
SXIT,	0
	JMP I SHNDLR
SFUN,	0
SADR,	0
SERRCT,	0
S702,	702
S200,	200
S70,	70
SCIF,	CDF CIF 0
SADCDF,	CDF 0
SADNXT,	0
SADSVC,	0
	>
	IFZERO LINCSYS+LIST <XLIST>
	/MONITOR BOOTSTRAP AND GENERATOR
	IFZERO RF08+DF32+LIST <XLIST>
	IFNZRO	RF08+DF32	<

	*7400
	NOPUNC
	*6604
	ENPUNC
	NOP		/FOR "SWAP"
B6653,	6653
B7647,	7647
B7577,	7577
B200,	200
B7605,	7605
B7751,	7751
	ZBLOCK	6622-.
	TAD I B6653
	CDF 10
	DCA I B7647
	CDF 0
	ISZ B6653
	ISZ B7647
	JMP .-6		/MOVE FIELD 1 RESIDENT UP
	IFNZRO	RF08	<6643>
	6615
	7600
	TAD B7577
	DCA I B7751
	TAD B200
	6603		/NOW READ IN FIELD 0 RESIDENT FROM RECORD 1/2

	IFNZRO	RF08	<6623>
	IFNZRO	DF32	<6622>
	JMP .-1
	6621
	IFNZRO	RF08	<SKP>
	HLT		/ERROR READING SYSTEM IN
	JMP I B7605



	/BOOTSTRAP FOR DISK MONITOR IS AS FOLLOWS:

	/	LOCATION	CONTENTS
	/	7750		7600
	/	7751		6603
	/	7752		6622
	/	7753		5352
	/	7754		5752
	>
	IFZERO RF08+DF32+LIST <XLIST>
	IFZERO DECTAPE+LIST <XLIST>
	IFNZRO DECTAPE <
	*7400		/DECTAPE BOOTSTRAP - LOADS INTO 7600
	NOPUNCH
	*7600
	ENPUNCH
	TAD B600	/THIS CODE ONLY EXECUTED ON DMS-TYPE BOOTSTRAP
	DTCA DTXA	/ALL IT DOES IS SIMULATE THE OTHER TYPE OF BOOTSTRAP
	DTSF		/MORAL: DISK MONITOR SYSTEM SUCKS
	JMP .-1
	DCA BOOTX
	DCA BOOTX+1	/FUDGE TO MAKE USE OF SOME COMMON CODE
	TAD B620
	JMP BOOT3	/START READING OVER OURSELVES WITH RECORD 0 AGAIN
	ZBLOCK	7611-.
BM7642,	-7641		/MUST BE BEFORE 7617
BOOT1,	TAD 7755
	TAD BM7642
	SNA CLA		/WATCH THE PROGRESS OF THE READ
	JMP BOOT2	/WHEN IT GETS PAST 7643, SWITCH TO FIELD 1
	NOP		/LOADS OVER DTSF IN 7616
	JMP BOOT1	/LOADS OVER JMP .-1 IN 7617 - STARTS BOOTSTRAP
BOOT2,	TAD B10
	DTLB		/ZAP A 10 INTO STATUS REG B TO LOAD INTO FIELD 1
	DTSF		/FROM HERE ON - LOAD THE FIELD 1 RESIDENT INTO FIELD 1
	JMP .-1
BOOT3,	DTXA	/CONTINUE READING NEXT RECORD(ALSO SEE CODE AT 7600)
	DTLB		/INTO FIELD 0
	TAD B7577
	DCA 7755	/PAGE 7600
	DCA 7754
BOOTX,	CDF CIF 10
	JMP 7642	/JUMP INTO WAIT LOOP IN FIELD 1
	JMP BOOT1	/DISK MONITOR FUDGE - JUMP INTO WAITING LOOP
B7577,	7577
B10,	10
B600,	600
B620,	620
	ZBLOCK	7642-.
	DCA 7744
	DTSF		/THIS IS LOADED INTO FIELD 1 WITH MONITOR RESIDENT
	JMP .-1		/IT IS IN THE CD OUTPUT AREA AND SO WILL BE ZAPPED
	CDF CIF 0	/BY THE KEYBOARD MONITOR
	JMP 7605	/OK, FIELD 0 RESIDENT READ IN, START UP MONITOR
	*7544
	NOPUNCH
	*7744
	ENPUNCH
	JMP 7600	/PATCH FOR DIODE LOADER


	/BOOTSTRAP FOR DECTAPE MONITOR IS THE SAME AS FOR THE 
	/DEC LIBRARY SYSTEM, RL MONITOR AND POLY BASIC - OR JUST
	/READ RECORD 0 INTO 7600 AND TRANSFER TO 7600 A LA DISK
	/MONITOR SYSTEM ON DECTAPE
	>
	IFZERO DECTAPE+LIST <XLIST>
	IFZERO RK8+LIST <XLIST>
	IFNZRO RK8 <
	*7400
	NOPUNC
	*1
	ENPUNC
BOOT,	TAD I BOOTX1
	DCA I BOOTX2
	TAD I BOOTX3
	CDF 10
	DCA I BOOTX4
	CDF 0
	TAD BOOTX2
	SZA CLA
	JMP BOOT
	JMP I B7605
BOOTX1,	200
BOOTX2,	7577
BOOTX3,	47
BOOTX4,	7646
	ZBLOCK	27-.
B7605,	7605
	DSKD		/MUST LOAD OVER LOC. 30
	JMP .-1		/MUST LOAD OVER 31
	JMP BOOT



	/THE BOOTSTRAP FOR THE RK8 IS AS FOLLOWS:

	/	LOCATION	CONTENTS
	/	30		6733
	/	31		5031

	/LOAD ADDRESS 30 AND START
	>
	IFZERO RK8+LIST <XLIST>
	IFZERO LINCSYS+LIST <XLIST>
	IFNZRO LINCSYS <
	*7416		/ACTUALLY LOADS INTO 4016
B4047,	4047
B7647,	7647
	1020;20;4		/IO PRESET
	1020;20;AXO	/LOAD SOME LINCTAPE FLAGS
	1020;7600;TMA	/LOAD MEMORY ADDRESS
	720;1		/READ RECORD 1
	PDP		/BACK TO PDP-8 MODE
	CLA
	TAD I B4047
	CDF 10
	DCA I B7647
	CDF 00
	ISZ B4047
	ISZ B7647
	JMP .-6
	JMP I .+1
	7605



	/THE BOOTSTRAP FOR A LINCTAPE SYSTEM IS AS FOLLOWS:

	/LEFT SWITCHES=700,RIGHT SWITCHES=0
	/I-O PRESET IN LINC MODE AND PRESS "D0". TAPE WILL MOVE
	/WHEN TAPE STOPS PRESS "START 20".
	>
	IFZERO LINCSYS+LIST <XLIST>
/TD8E DECTAPE BOOTSTRAP RECORD
	IFZERO ROM <
	IFZERO TD8ESYS+LIST <XLIST>
	IFNZRO TD8ESYS <

	FIELD 2
	*7420
	NOPUNCH
	*7400
	ENPUNCH

/THE BINARY GETS LOADED INTO 27220 INITIALY, AND
/WRITTEN OUT AS PART OF RECORD 0. WHEN THE 30 WORD
/BOOTSTRAP IS USED, THIS CODE GETS READ INTO 7400.



	SDSS=6771
	SDST=6772
	SDSQ=6773
	SDLC=6774
	SDLD=6775
	SDRC=6776
	SDRD=6777

TDBOOT,	TAD K7600	/128 WORDS PER PAGE
	DCA TDWCT
	SDSS		/WAIT FOR A BLOCK MARK (TAPE IS
	JMP .-1		/STILL MOVING)
	SDRC
	AND TD77
	TAD KM26	/IS IT A BLOCK MARK?
	SZA CLA
	JMP TDBOOT+2	/NO..WAIT A WHILE LONGER
	SDRD		/GET THE BLOCK NO.
TDBKNO,	TAD TDM14	/NEED BLOCKS 14&15 (REC. 6)
	SZA CLA
	JMP TDBOOT+2	/NOT YET, BUSTER
TDRGRD,	SDSS
	JMP .-1		/NOW LET'S LOOK FOR A REVERSE GUARD WORD
	SDRC
	AND TD77
	TAD KM32
	SZA CLA
	JMP TDRGRD	/KEEP LOOKING FOR IT
	JMS TDRQD
	JMS TDRQD
	JMS TDRQD	/SKIP CONTROL WORDS
	CDF 10		/LOAD UP FIELD 1
TDREAD,	JMS TDRQD	/GET A DATA WORD
	DCA I TDPTR
	ISZ TDPTR	/ARE WE DONE?
	JMP TDREAD	/NOT YET
	ISZ TDBKNO	/YES..LOOK AT BLOCK 15
	TAD KCDF20
	DCA TDREAD-1	/LOAD UP FIELD 2
	ISZ M2		/DONE THIS JUNK?
	JMP TDBOOT	/GO DO FIELD 2
	SDLC		/STOP THE TAPE
	CIF CDF 0
	JMP I K7605

TDM14,	-154
	-155	/USE RECORD 66
TDWCT,	7600
TDRQD,	0
	SDSQ
	JMP .-1
	SDRD
	JMP I TDRQD
TDPTR=TDWCT

K7600,	7600
KM26,	-26
KM32,	-32
KCDF20,	CDF 20
M2,	-2
K7605,	7605
TD77,	77
	>
/TD8E DECTAPE SYSTEM HANDLER
/THIS HANDLER CAN DRIVE UNITS 0&1, AND IS PERMANENTLY
/RESIDENT IN FIELDS 0&2.

	IFNZRO TD8ESYS <

	FIELD 0
	*6607
	NOPUNCH
	*7607
	ENPUNCH


SHNDLR,	0		/UNIT 0 ENTRY POINT
	CLA CLL
	JMP SHND2
C3,	3
S70,	70
SDTA1,	0		/UNIT 1 ENTRY
	CLA CLL CML
SC1000,	TAD SDTA1	/DOUBLES AS CONSTANT 1000
	DCA SHNDLR	/GET ARGS AT SHNDLR
SHND2,	RAR		/UNIT #
	DCA SUNIT
	RDF		/SETUP FOR EXIT
	TAD S6203
	DCA EFLD
	TAD I SHNDLR	/FUNCTION WORD
	SDLD		/PUT IT IN DATA EGISTER
	AND S70		/SDLD DOES NOT 0 AC..GET FIELD
	TAD S6203	/CIF CDF N FOR TRANSFER FIELD
	DCA TFLD
	ISZ SHNDLR
	TAD I SHNDLR	/BUFFER ADDRESS
	DCA BPTR
	ISZ SHNDLR
	TAD I SHNDLR	/BLOCK #. TIMES 2 FOR REAL #
	CLL RAL
	DCA BLOCK
	ISZ SHNDLR	/POINT TO ERROR EXIT
	CIF CDF 20	/PUT UNIT # INTO FIELD 2
	TAD SUNIT
	DCA I SUNIT2
	JMP F2SET	/TO FIELD 2 FOR INIT.

F1GO,	SDRD		/INITIAL DIRECTION TO LINK
	RAR
	JMP RGO

RENTER,	TAD BPTR	/DONE THIS BLOCK..NEXT ADDRESS
	TAD SC200
	DCA BPTR
	ISZ BLOCK	/NEXT TAPE BLOCK..CAN'T SKIP
	CLL CML		/FORCE FORWARD MOTION
RGO,	CLA CML RTR	/LINK TO MOTION BIT
	TAD SC1000
	TAD SUNIT
	SDLC		/MOVE THE TAPE
	SDSQ
	JMP .-1
	SDRD		/KNOCK DOWN QUAD FLAG
	SDSQ
	JMP .-1
	SDRD		/THIS IS NEEDED, ELSE TIME ERROR!!!

SRCH,	SDSS		/WAIT FOR A BLOCK MARK
	JMP .-1
	SDRC		/GET MARK TRACK BITS
	CLL RTL		/DIRECTION TO LINK
	AND SC374
	TAD SM110	/IS IT A N END ZONE?
	SNA
	JMP SENDZ	/YES
	TAD SM20	/MAYBE A BLOCK MARK?
	SZA CLA
	JMP SRCH	/NEITHER..KEEP GOING
	SDRD		/READ THE BLOCK #
	SZL		/IF REVERSE, LOOK 3 AHEAD OF TARGET
	TAD C3
	CMA
	TAD BLOCK
	CMA
	SNA		/IS IT THE RIGHT ONE?
	JMP FOUND	/YES
SM110,	CLA SNA SZL	/SNA SUPERFLUOUS..ONLY SZL VALID
	JMP SRCH	/HEADED FOR IT..KEEP GOING
SENDZ,	SDRC
	CLL RTL
	SZL CLA		/IF IN END ZONE FORWARD, GIVE ERROR
	JMP RGO
	CIF 20		/IF IT IS REALL END ZONE, AN ERROR
	JMP ERROR

FOUND,	SZL CLA		/RIGHT BLOCK..HOW ABOUT DIRECTION?
	JMP RGO		/WRONG..EXECUTE TURNAROUND
	TAD BPTR
TFLD,	HLT		/GETS CIF CDF N
	CIF 20
	JMP RDWT	/LET'S TRANSFER DATA

SEXIT,	ISZ SHNDLR	/NORMAL RETURN
SEREX,	TAD SUNIT	/STOP THE TAPE
	SDLC
	CML CLA RAR	/EITHER 0 OR 4000 IN AC ON RETURN
EFLD,	HLT
	JMP I SHNDLR

BPTR=7755
BLOCK=7754
SUNIT=SDTA1
S6203,	6203
SC200,	200
SC374,	374
SM20,	-20
SUNIT2,	SXUNIT

	FIELD 2
	*7600

XPTR,	0		/BUFFER POINTER
F2SET,	CLA CLL CMA RTL	/3 ERROR TRIES
	DCA TRYCNT
	TAD SXUNIT	/MAKE SURE TAPE IS STOPPED
	SDLC
F26203,	CIF CDF 0
	SDRD		/FUNCTION WORD
	CLL RAL
	AND CX7600	/PAGE COUNT
	DCA XPGCT
	SDRD
	DCA SXFUN	/SAVE THE FUNCTION WORD
	JMP F1GO

RDWT,	DCA XPTR	/SAVE NEW BUFFER ADDRESS
	TAD CX7600
	DCA XWCNT	/128 WORDS PER BLOCK
REVGRD,	SDSS		/WAIT FOR REVERSE GUARD WORD
	JMP .-1
	SDRC
	AND X77
	TAD XM32		/IS IT REVERSE GUARD?
	SZA CLA
	JMP REVGRD	/NO
	TAD SXFUN
SK7700,	SMA CLA		/READ OR WRITE?
	JMP READ		/READ
	SDRC
	AND C300	/ERRORS ON WRITE LOCKOUT AND TIME
	SZA CLA
	JMP ERROR
	JMS RDQUAD	/SKIP A WORD
CX7600,	7600
	TAD WRLP
	TAD SXUNIT
	SDLC		/TURN ON THE WRITE
	CLA CMA
	JMS WRQUAD	/WRITE 7777 IN REV. CHECKSUM
	CLA CMA
	DCA SCKSUM	/AND ALSO IN COMPUTE CHECKSUM
WRLP,	TAD I XPTR
	JMS WRQUAD	/WRITE THE DATA
	ISZ XPTR
X77,	77		/JUST IN CASE
	ISZ XWCNT	/DONE 128?
	JMP WRLP
	JMS WRQUAD	/WRITE AND CHECKSUM A WORD OF 0
	JMS GETCHK	/GET CHECKSUM
	JMS WRQUAD
	JMS WRQUAD	/LET CHECKSUM GET WRITTEN

RWCOM,	SDST		/CHECK FOR TIME AND CHECKSUM ERRORS
	SZA CLA
	JMP ERROR	/NOTE THAT LINK IS OFF AT RWCOM
	CIF CDF 0
	TAD XPGCT	/FINISHED TRANSFER?
	TAD CX7600	/LINK GOES ON HERE
	SNA
	JMP SEXIT	/YES..GETOUT
	DCA XPGCT
	JMP RENTER

READ,	JMS RDQUAD	/SKIP CONTROL WORDS
	JMS RDQUAD
	JMS RDQUAD	/GET CHECKSUM
	AND X77
	TAD SK7700
	DCA SCKSUM
SRDLP,	JMS RDQUAD
	DCA I XPTR
	TAD I XPTR
	JMS EQUFUN
	ISZ XPTR
C300,	300
	ISZ XWCNT	/DONE ALL?
	JMP SRDLP	/NO
	JMS RDQUAD	/READ AND CHECKSUM LAST WORD
	JMS EQUFUN
	JMS RDQUAD	/GET CHECKSUM
	AND SK7700
	JMS EQUFUN
	JMS GETCHK
	JMP RWCOM

ERROR,	CLA CLL		/THIS CAUSES SEARCH REVERSE AT RGO
	CIF CDF 0
	ISZ TRYCNT	/EXHAUSTED ERROR TRIES?
	JMP RGO
	JMP SEREX	/YES..FATAL EXIT

WRQUAD,	0		/WRITE A 12 BIT WORD
	SDSQ
	JMP .-1
	SDLD
	JMS EQUFUN
	JMP I WRQUAD

RDQUAD,	0		/READ A 12 BIT WORD
	SDSQ
	JMP .-1
	SDRD
	JMP I RDQUAD

EQUFUN,	0		/EQUIVALENCE CHECKSUM
	CMA
	DCA EQUTMP
	TAD EQUTMP
	AND SCKSUM
	CIA
	CLL RAL
	TAD EQUTMP
	TAD SCKSUM
	DCA SCKSUM
	JMP I EQUFUN

GETCHK,	0
	TAD SCKSUM
	CLL CMA RTL
	RTL
	RTL
	JMS EQUFUN
	TAD SCKSUM
	AND SK7700
	JMP I GETCHK

SXUNIT,	0
XPGCT,	0
SXFUN,	0
TRYCNT,	0
XWCNT,	0
XM32,	-32
SCKSUM,	0
EQUTMP,	0
	ZBLOCK 4	/USED BY BATCH MONITOR
	>>
	IFZERO TD8ESYS+LIST <XLIST>

/FOLLOWING IS THE BOOTSTRAP FOR THE TD8E 12K SYSTEM
	IFZERO TD8ESYS+LIST <XLIST>


/	*7300
/7300 1312	K1000,	TAD GET		/PUT DRIVE IN REVERSE
/7301 4312		JMS GET		/LOOK FOR END ZONE
/7302 4312		JMS GET		/LOOK FOR 31 CODE
/7303 6773	RD,	SDSQ		/NOW READ ALL WORDS INTO CORE
/7304 5303		JMP .-1
/7305 6777		SDRD		/READ 12 BIT WORD
/7306 3726		DCA I WCT	/AND PUT IT IN CORE
/7307 2326		ISZ WCT
/7310 5303		JMP RD		/LOOP UNTIL FIELD 0
/7311 5732		JMP I STRT	/IS LOADED, THEN START
/7312 2000	GET,	2000
/7313 1300		TAD K1000	/SET MOTION &DIRECTION
/7314 6774		SDLC
/7315 6771	BSRCH,	SDSS	/HERE WAIT FOR EITHER 22 OR 31 CODE
/7316 5315		JMP .-1		/22 IS END ZONE, 31 IS
/7317 6776		SDRC		/CODE BEFORE DATA WORD
/7320 0331		AND K77		/IS THIS WHAT WE WANT?
/7321 1327		TAD BM22	/THIS GETS INCREMENTED
/7322 7640		SZA CLA		/IF YES, RETURN.
/7323 5315		JMP BSRCH	/NO.KEEP LOOKING.
/7324 2321		ISZ .-3		/LOOK FOR NEXT IN LIST
/7325 5712		JMP I GET
/7326 7354	WCT,	7354	/START LOADING CORE AT 7354
/7327 7756	BM22,	-22	/THE OTHER BOOTSTRAP GETS LOADED
/7330 7747		-31	/AT 7400.
/7331 0077		77
/7332 7400	STRT,	7400



	FIELD 0
	IFZERO ROM+LIST <XLIST>
	IFNZRO ROM <
	RGO=7405
	F2SET=7552
	ROMFLD=70

	*6607
	NOPUNC
	*7607
	ENPUNC
/FOLLOWING IS CODE FOR 8K-ROM OS/8 SYSTEM.

SHNDLR,	0		/UNIT 0 ENTRY
	CLA CLL
	JMP SHND2
S70,	70
S6201,	6201
SDTA1,	0		/UNIT 1 ENTRY
	CLA CLL CML
	TAD SDTA1	/GET ARDGS AT SHNDLR
	DCA SHNDLR
SHND2,	RAR		/UNIT BIT IS ON LINC
	DCA SUNIT
	RDF
	TAD S6203	/SETUP RETURN FIELD
	DCA EFLD
	TAD I SHNDLR
	SDLD		/STORE FUNCTION WORD IN DATA REG.
	AND S70		/SDLD DOESN'T CLEAR AC
	TAD S6201	/ISOLATE FIELD OF XFER
	DCA TFLD
	TAD TFLD
	DCA TFLD2
	ISZ SHNDLR
	TAD I SHNDLR	/BUFFER ADDRESS
	DCA BPTR
	ISZ SHNDLR
	TAD I SHNDLR	/OS/8 RECORD #
	CLL RAL		/TIMES 2 FOR ABSOLUTE BLOCK
	DCA BLOCK
	ISZ SHNDLR
	CDF 0
	CIF ROMFLD	/ROM IS IN FIELD 7
	JMP I XF2SET	/INITIALIZE.

GET,	0
TFLD,	HLT		/ROUTINE TO LOAD DATA FROM BUFFER
	TAD I XPTR
	CIF ROMFLD
	JMP I GET

PUT,	0		/PUT DATA INTO BUFFER
TFLD2,	HLT
	DCA I XPTR
	CIF ROMFLD
	JMP I PUT

ERROR,	CLA CLL		/FORCE TURNAROUND AT RGO
	CIF ROMFLD
	ISZ TRYCNT	/TRIED 3 TIMES?
	JMP I XRGO
S6203,	CIF CDF 0
	JMP SEREX	/YES..FATAL EXIT

XRGO,	RGO
XF2SET,	F2SET

/EQUIVALENCES FOR HANDLER

	EQUTMP=7750
	BPTR=7751
	XPGCT=7752
	XPTR=7753
	XWCNT=7754
	WRQ=7724
WRQUAD,	0		/WRITE A 12 BIT TAPE WORD
	CIF ROMFLD
	JMP WRQ
CIFR,	CIF ROMFLD
	JMP I WRQUAD

RDQUAD,	0		/READ A 12 BIT DATA WORD
	SDSQ
	JMP .-1
	SDRD
	CIF ROMFLD
	JMP I RDQUAD

EQUFUN,	0		/EQUIVALENCE CHECKSUM
	CMA
	DCA EQUTMP
	TAD EQUTMP
	AND SCKSUM
	CIA
	CLL RAL
	TAD EQUTMP
	TAD SCKSUM
	DCA SCKSUM
	TAD EQUTMP
	CLL CMA
	CIF ROMFLD
	JMP I EQUFUN

SEXIT,	ISZ SHNDLR	/NORMAL EXIT
SEREX,	TAD SUNIT	/STOP THE DRIVE
	SDLC
	CLA CML RAR	/EXIT CONDITION IN BIT 0
EFLD,	HLT
	JMP I SHNDLR

TRYCNT,	0
SXUNIT,	0
SXFUN,	0
SCKSUM,	0
BLOCK,	0
SUNIT,	0

	*7420
	NOPUNCH
	*7400
	ENPUNCH
/BOOTSTRAP FOR 8K-ROM SYSTEM.

	CDF 0		/BOOTSTRAP TO MOVE FIELD 1
	TAD I ROM1	/CODE UP TO FIELD 1
	CDF 10
	DCA I ROM2
	ISZ ROM1
	NOP
	ISZ ROM2
	NOP
	ISZ ROMCT
	JMP 7400
	CIF CDF 0	/DONE
	SDLC		/STOP THE TAPE
	JMP I .+1
	7605		/START HER UP
ROM1,	7427		/FIELD 1 CODE GETS LOADED HERE
ROM2,	7647		/AND GOES UP HERE
ROMCT,	-130

	>
IFZERO ROM+LIST <XLIST>

$$$$