/COS 300 MONITOR			EDITED 11/2/73
/COPYRIGHT 1971, 1972, 1973
/DIGITAL EQUIPMENT CORPORATION
/MAYNARD, MASS.  01754
/
/LIBRARY NUMBERS:
/LINCTAPE:	DEC-12-OCOSA-B-UA
/TC08:		DEC-08-OCOSA-B-UC
/TD8E:		DEC-8E-OCOSA-B-UC
/RK05:		DEC-8E-OCOSA-B-HB
/
/
/SGW WITH GRATEFUL ASSISTANCE FROM RL
/
/THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE
/ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION
/OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT
/AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT
/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
/EQUIPMENT CORPORATION.
/
/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
/
	DECIMAL
	YEARX=	3
	MONTH=	7
	DAYX=	25
	OCTAL
	SYSDAT=	MONTH^40+DAYX^10+YEARX-2	/DATE TO APPEAR IN SYSTEM TAPE LABELS
/
/THE 2 ERROR REPORTING OPTIONS, RK8E&TD8E OR RK8E
/SHOULD BE ASSEMBLED ONLY FOR THE OCTAL LISTING
/TO PATCH THE MONITOR 
/DO NOT SET BOTH EPOT2 AND EPOT.
IFNDEF EPOT2 <EPOT2=0>	/SET TO 1 TO ASSEMBLE RK8E AND TD8E
			/REGISTER EXAMINE RESIDES IN CARD READER HANDLER
IFNDEF EPOT <EPOT=0>	/SET TO 1 TO ASSEMBLE RK8E DISK ERROR PRINTOUT
			/RESIDES IN DECTAPE HANDLER
IFNDEF TAPE <TAPE=0>		/TC01=0, TD8E=1, LINCTAPE=2
IFNDEF RKDISK <RKDISK=1>	/RK8=0, RK8E=1
IFNDEF SYSNUM <SYSNUM=0>	/SET TO 0 FOR DECTAPE SYSTEM DEVICE, 1=RK8
IFNDEF LP645	<LP645=0>	/LP08 = 0, ANELEX = 1

/ONLY PRINT LOCATIONS TO BE PATCHED IF ASSEMBLING
/THE TD8E AND RK8E ERROR REPORTING PATCHES
IFNZRO EPOT+EPOT2 <XLIST>
	BASFLD=	0	/THE FIELD OFFSET FOR THIS WHOLE MESS
	FIELD BASFLD%10
	MQL=	7421
	LSF=	6661
	LCF=	6662
	LSE=	6663
	LIE=	6665
	LLS=	6666
	LIF=	6667
	RCSF=	6631
	RCRA=	6632
	RCSD=	6671
	RCSE=	6672
	RCRD=	6674
/TD8E IOT'S
	SDSS=	6771
	SDST=	6772
	SDSQ=	6773
	SDLC=	6774
	SDLD=	6775
	SDRC=	6776
	SDRD=	6777
	MAGTAP=	0
	/TC08-P IOT'S
	DTRA=	6761
	DTCA=	6762
	DTXA=	6764
	DTLA=	6766
	DTSF=	6771
	DTRB=	6772
	DTXB=	6774
	/RK8E MAINTENANCE IOT
	DMAN=	6747

	*0
	RECOVR		/SEE NOTE AT DEFINITION OF SYSINT
	JMP I	.+1
P7400,	INTRPT
	IFNZRO INTRPT-7400 <???>/ERROR
*10
GETPNT,	CTCFIX		/THIS IS A TEMPORARY POINTER, PRESENT ATLOAD TIME ONLY
PUTPNT,	IODIE		/SO IS THIS
	*20
P77,	77
	IFNZRO P77-20 <???>/ERROR - P77 MUST BE AT LOCATION 20
CTCFG,	1
BSWPTR,	BSWX			/USED IF NON-8/E
KMOVE,	MOVE			/ROUTINE TO MOVE CORE LOCATIONS AROUND
KGETC,	MGETC			/ROUTINE TO GET A CHAR FROM EDP-8 RECORD
KPUTC,	PUTC			/ROUTINE TO PUT A CHAR...
KRDOIO,	RDOIO			/ROUTINE TO R/W ENTIRE EDP-8 RECORDS TO/FROM DTA, ETC
KCDOIO,	CDOIO
	DEVTBL=.	/HANDLER ADDRESS TABLE MUST START ON 10-WORD BOUNDARY
	IFNZRO DEVTBL&7 <???>/ERROR
/N.B. DO NOT CHANGE THE ORDER OF THESE AROUND!
TTYIN,	TTICHR		/KBD IN
TTYOUT,	TTOCHR		/TTYOUT
CDIN,	CDICHR		/CDR
PPOUT,	PPOCHR		/PTP
PRIN,	PRICHR		/PTR
LPOUT,	LPOCHR		/LPT
XIN,	NULLIO		/NULL INPUT DEVICE
YOUT,	NULLIO		/NULL OUTPUT DEVICE
P7,	7
	IFNZRO P7-40 <???>/ERROR - P7 MUST BE AT LOC'N 40 (SEE TAG "ANDP40")
KGPBUF,	GPBUF
IFN,	PICHR		/TEMP STORAGE OF INTERNAL FILE #
KPTRST,	PTRSET		/SET UP W0-W5, U0-U2 FOR GIVEN IFN
	DECIMAL
LENGTH,	-60		/MAX. LENGTH OF A LINE FROM KBD, CDR, OR PTR
	OCTAL
M1,	-1
	/W0-W5 AND U0-U2 ARE POINTERS SET UP BY THE ROUTINE "PTRSET".
	/THEY POINT TO THE ENTRIES IN THE TEMPORARY AND PERMANENT
	/FILE TABLES, RESPECTIVELY, FOR A GIVEN INTERNAL FILE # 0-7.
W0,	0	/BIT 0 = R/W, WRITE = 1
		/BITS 1-4 = NUMBER OF BLOCKS TO READ AT A TIME (0 => 20)
		/BIT 5 IS FREE
		/BITS 6-8 ARE THE FIELD OF THE BLOCK BUFFER.
		/BITS 9-11 GET SET BY THE ROUTINE "PTRSET" TO BE THE
		/PHYSICAL UNIT NUMBER OF THE DEVICE (E.G., DECTAPE #3).
W1,	0	/BITS 0-4 ARE THE BLOCK BUFFER ADDRESS, MOD 200
		/BITS 5-6 ARE FREE
		/BITS 7-11 ARE THE LOGICAL UNIT # FOR THIS OPEN FILE.
W2,	0	/THIS WORD IS THE INTERNAL BUFFER POINTER
W3,	0	/THIS IS THE NUMBER OF WORDS LEFT IN THE BUFFER
W4,	0	/THIS IS THE HI-ORDER RELATIVE BLOCK BITS
W5,	0	/BITS 0-3 ARE THE LOW-ORDER RELATIVE BLOCK BITS
		/BIT 4 IS FREE
		/BIT 5 IS FREE
		/BITS 6-11 IS THE TAPE SEQUENCE #
/ROUTINE "PTRSET" NEEDS U TABLE TO FOLLOW W TABLE
U0,	BADINT-1	/ADDRESS & UNIT OF PHYSICAL DEV. HANDLER
U1,	LPDNFG	/STARTING 4K SEGMENT
U2,	TICHR	/(-) LENGTH IN 4K SEGMENTS
GET,	SBT		/TEMPORARIES, PRESENT AT PROGRAM LOAD TIME ONLY!!!
PUT,	MOUNT		/THEY WILL GO AWAY AFTER ANY CALL TO THE MONITOR
TEMP,	SRTFLG		/SYSTEM PROGRAMS MUST USE THEM IMMEDIATELY
COUNT,	TF0		/IN THEIR INITIALIZATION CODE, IF THEY NEED THEM
NMBR,	IZERO
		/SOME CONSTANTS APPROPRIATE UNTO THE DAY
P17,	17
P70,	70
M4,	-4
HANDLR,	0		/"PTRSET" SETS THIS UP TO POINT TO THE CORRECT
			/LOW-LEVEL HANDLER.
P7600,	7600
PCDF,	CDF 0
KINIT,	INIT
KCTRLO,	CTRLO
KOTOPD,	OTOPD
KCLOSE,	CLOSE
KSPLIT,	SPLIT
SYSHND,	SYSDEV		/THE SYSTEM HANDLER

	DECIMAL
	TTYSIZ=-72-1
	OCTAL
	OVR1=14		/BLOCK NUMBER, FIRST OVERLAY
	COMPWA=100	/BLOCK NUMBER, COMPILER SCRATCH AREA
	RESMON=10	/BLOCK #, RESIDENT MONITOR
	RSYSBL=34	/BLOCK #, RSYS
	EDITBL=20	/BLOCK #, EDITOR/COMMAND DECODER (THIS THING)
	EDITWA=40	/BLOCK NUMBER, EDITOR SCRATCH AREA
	OVRADR=4000	/PLACE TO READ OVERLAYS INTO
	AC0001=	CLA IAC
	AC0002=	CLA CLL CML RTL
	AC2000=	CLA CLL CML RTR
	AC4000=	CLA CLL CML RAR
	AC7775=	CLA CLL CMA RTL
	AC7776=	CLA CLL CMA RAL
	AC7777=	CLA CMA
	PDATE=M1		/SYSTEM DATE IS AT 7777
	BSW=	7002

		*100
NCHARS,	0		/# OF CHARS IN INPUT LINE
LINENO,	0		/THE LINE # OF THE INPUT LINE
WCPTR,	0		/POINTER TO THE WORD COUNT WORD OF A LINE JUST FOUND IN FIELD 1
NAM1,	0		/"NAME" PLACED HERE BY "GETNAM", ETC.
NAM2,	0
NAM3,	0
NAM4,	0
FILORG,	0
FILSZ,	0		/LENGTH, IN BLOCKS, OF FILE LOOKED UP
CHANGF,	0		/GETS SET TO 1 IF ANY EDITING DONE ON SCRATCH FILE
PRTNE,	TTOCHR		/POINTER TO OUTPUT RTNE
TABSET,	-10		/- TAB SETTING
TABCNT,	0
SIZE,	0
MOVSIZ,	0
CHAR,	0
NCPL,	0		/# OF CHARS PER LINE, FOR I/O "WRAP-AROUND" ON PRINTING
WRTPTR,	0
RDPTR,	0
INPNUM,	144
INPINC,	12		/PARAMETERS FOR INPUT
INSWIT,	0		/+1 IF IN "LN" MODE
DBLOCK,	0		/FLAG TO TELL WHAT IS CURRENTLY IN THE DIRECTORY BLOCK BUFFER
DAVICE,	0		/POINTER TO CURENT DEVICE HANDLER
UNIT,	0		/THE CURRENT UNIT OF INTEREST
LSTLIN,	0		/SOME OPTOMIZATION STUFF FOR INPUT MODE
LSTXR,	0
LNPRPG,	0		/LINES PER PAGE
PDCNT,	DIRECT		/POINTERS TO DIRECTORY GOODIES
PDORG,	DIRECT+1
PDLINK,	DIRECT+2
PDWSTE,	DIRECT+4
EPTR,	0
ETMP,	0
/
	PAGE

INPUT1,	JMP I	INPUT2		/START UP HERE TO WRITE OUT SYSTEM
	TAD	INSWIT		/IN SEQUENCE MODE?
	SNA	CLA
	JMP I	INPUT1		/NO
	TAD	INPNUM		/GET CURRENT LINE #
	JMS I	(DECNUM		/& PRINT IT
	DCA I	16		/SUPPLY CHAR TO BE IGNORED
	JMS I	(BUMPNC		/BUMP COUNT
	JMP I	INPUT1
INPUT2,	SYSWRI
	TAD	INSWIT		/IN SEQ MODE?
	SNA	CLA
	JMP I	INPUT2		/NO, RETURN IMMEDIATE
	TAD	INPNUM		/YES RETURN LINE NUMBER
	DCA	LINENO
	CLL
	TAD	INPNUM		/INCREMENT NUMBER
	TAD	INPINC
	SZL
	JMP	LNTB		/LINE # TOO BIG
	DCA	INPNUM
IN2EX,	ISZ	INPUT2		/INCREMENT RETURN
	JMP I	INPUT2
INPUT,	AC0001			/COME HERE FOR "LN X,Y/D"
	DCA	INSWIT
	JMS I	[SCANER
	TAD I	[STRTLN
	SZA			/IF NO RESPONSE, KEEP OLD
	DCA	INPNUM
	TAD I	[FINLIN
	SMA SZA
	DCA	INPINC
KCLA,	CLA
	TAD I	[SWITCH
	SNA
	JMP I	[NXTLIN
	TAD	(-2400
	SNA
	JMP	TTY
	TAD	(2400-0300
	SNA
	JMP	CARDS
	TAD	(0300-2200
	SZA CLA
	JMP I	[NXTLIN
HSR,	AC0002			/SET UP POINTER TO PTR ROUTINE...
CARDS,	TAD	(2		/OR CARD READER...
TTY,	TAD	(JMS I	TTYIN	/OR JUST TTY
	DCA I	(CHRLUP
	ISZ I	KCTRLO		/TURN ON ^O
	JMP I	[NXTLIN

LNTB,	JMS I	[ERRMSG
	LNO-1			/--------------------"LINE # TOO BIG"
	JMP	IN2EX
K240A,	240
BADCOM,	-10			/"ERROR IN COMMAND"
	4663
	6360
	6301
	5257
	0144
	6056
	5642
	5745
DO,	JMS I	[SAVWA
	TAD	(OVR1+2
	JMS I	KSPLIT
	JMS I	SYSHND
	0200
	4400
	0
	JMP I	.+1
	DOVERL&177+4600		/CALL IN "DO" OVERLAY
REPL,	-4			/"REPLACE?"
	6346
	6155
	4244
	4640

/SOMETHING PECULIAR HAPPENS IN THIS ROUTINE.  NORMALLY, RDOIO
/IS INITIALLY SET UP BY "INIT" OR WHATEVER TO INITALLY SEE AN EMPTY
/BUFFER SO THAT WHEN RDOIO IS FIRST CALLED IT GOES AND GETS THE NEXT
/(WHICH HAPPENS TO BE THE FIRST) BLOCK OF THE DATA FILE.  HOWEVER,
/SINCE WE READ THE BLOCK IN FOR RDOIO, THE "DO"
/OVERLAY SETS UP THE FILE TABLE TO SHOW RDOIO IT HAS A FULL BUFFER, AND
/ALL THE POINTERS ARE FOR THE  N E X T  BLOCK TO READ IN.  SO THAT'S
/WHY ALL THE DIDDLING WITH W4 AND W5 HERE...IT SUBTRACTS 1 FROM THE
/BLOCK NUMBER IN THE TEMPORARY FILE TABLE FOR FILE 0, TO GIVE THE BLOCK
/NUMBER ACTUALLY BEING USED, BECAUSE THE FILE TABLE IS ALWAYS ONE
/BUFFER AHEAD.
REREAD,	0			/REGET THE CORRECT BLOCK FOR "DO" FILE
	JMS I	KPTRST		/AFTER IT GOES AWAY (I.E., AFTER IT GETS
	AC7777 CLL		/OVERLAID BY A DIRECTORY OR SOMETHING)
	TAD I	W4
	DCA	DOHI
	TAD I	W5
	AND	P7400
	TAD	P7400
	SNL
	ISZ	DOHI
	JMS I	SYSHND
	0200
	DIRECT
DOHI,	0
	AC7777
	DCA	DBLOCK		/7777 MEANS "DO" BLOCK IS IN AND ALIVE
	JMP I	REREAD
GETC,	0
	TAD I	14		/GET CHAR
	ISZ	NCHARS		/INCR COUNT
	SKP
	SKP CLA			/LOOKS BAD DOESN'T IT?
	ISZ	GETC
	JMP I	GETC
/
	PAGE

GETLIN,	0
	TAD	(NONUMB&377+5000	/JMP NONUMB IN DISGUISE
	DCA I	(SPACOK		/MAKE SPACE LEGAL TERMINATOR FOR NUMBER
	TAD I	[TF0		/CHECK FOR "DO" MODE
	SZA CLA
	JMP I	(TAPLIN		/GET COMMAND FROM FILE
	TAD	(256		/PRINT "."
	JMS I	TTYOUT
	AC0001			/COUNT "DOT" IN TAB CALCULATIONS
TAPRET,	TAD	[-15		/"TAPLIN" RETURNS HERE
	DCA	TABCNT		/SET TAB COUNTER
	TAD	[LINE-1
	DCA	16
	AC0001			/BUMP ONE FOR DOT WE'VE ALREADY PRINTED
	TAD	(TTYSIZ		/-72 IN DISGUISE
	DCA	NCPL
	DCA	NCHARS		/CHAR COUNTER
	JMS I	(INPUT1		/IN INPUT MODE?
CHRLUP,	JMS I	TTYIN		/GET CHAR FROM TTY (THIS LOC'N CHANGES)
TGETCR,	DCA	CHAR
	TAD I	KCTRLO
	RAR
	SNL CLA			/SKIP IF ^O ON
	TAD	(RUBOUT-CHRLUP
	TAD	(JMP	CHRLUP
	DCA	QUEEP
	TAD	CHAR
	TAD	(-215
	SNA			/TEST FOR CAR. RET.
	JMP	ENDLIN
	TAD	(215-377
	SNA			/TEST FOR RUBOUT
QUEEP,	JMP	RUBOUT		/IF ^O ON, THIS IS "JMP CHRLUP"
	TAD	(377-226	/TEST FOR CONTROL V
	SNA
	JMP I	(CTRLV		/GO PRINT MONITOR VERSION #
	IAC
	SNA			/NOW TEST FOR CTRL/U
	JMP	CNTRLU		/START OVER
	TAD	(225-203
	SNA
	JMP	CNTRLU		/TREAT ^C LIKE ^U
	TAD	(203-211	/TEST FOR TAB
	SNA
	JMP	TAB		/DO TAB
	TAD	(211-232	/TEST FOR CONTROL Z
	SNA
	JMP I	(FORM		/LEAVE INPUT MODE
	TAD	(232-334	/TEST FOR BACKSLASH
	SNA
	JMP	CHRLUP		/IGNORE IT
	TAD	(334-240	/IS CHAR BETWEEN 240 AND 336?
	SPA
	AC4000			/SMA WILL NOT SKIP NOW
	TAD	(240-337
	SMA CLA			/SAME AS -100
	JMP	CHRLUP		/CHAR IS >336, IGNORE IT ALSO
	TAD	CHAR
NOECHO,	JMS I	[PRNTC		/ECHO CHAR
	TAD	CHAR
	DCA I	16		/SAVE CHAR
	JMS I	[BUMPNC		/BUMP COUNT
	TAD	NCHARS
	TAD	K170
CLR,	SMA SZA CLA
	JMP	CHRLUP		/NOT TOO BIG
	JMS I	[TCRLF
	JMS I	[ERRMSG
	L2LONG-1		/--------------------"LINE TOO LONG"
	JMP	GETLIN+1
RUBOUT,	TAD	INSWIT		/BACKUP
	IAC
	TAD	NCHARS
	SMA SZA CLA		/BUT NOT PAST START OF LINE
	JMP	CLR+1
	ISZ	NCHARS
K170,	170			/THE ISZ MAY SKIP
	TAD	16
	DCA	CHAR		/POINTER TO LAST CHAR
	AC7777
	TAD	16
	DCA	16
	TAD I	CHAR
	JMS I	[PRNTC
	JMP	CHRLUP
CNTRLU,	JMS I	[TCRLF
	JMP	GETLIN+1	/START OVER
TAB,	TAD	(334
	DCA	CHAR
	JMP	NOECHO-1

ENDLIN,	JMS I	[TCRLF
	DCA I	16		/PUT IN 0 AT END
	TAD	NCHARS
	SNA
	JMP	GETLIN+1	/IF ONLY CAR. RET. TYPED
	TAD	M1
	DCA	NCHARS		/GIVES -NCHARS-1
	TAD	[LINE-1		/SET UP PTR TO LINE
	DCA	14
	JMS I	[INPUT2		/TEST FOR INPUT MODE
	SKP
	JMP	GTLRET		/YUP - IN INPUT MODE, SO RETURN .+2
	JMS I	[NUMBR		/NO - DECODE WHAT WAS TYPED AS A LINE #
	JMP I	GETLIN		/NO #, SO HE MUST HAVE TYPED A COMMAND
	DCA	LINENO
GTLRET,	ISZ	GETLIN
	JMP I	GETLIN
KTGETC,	TGETC
/
	PAGE

NXTLIN,	CLA
	TAD	INSWIT
	AND I	KCTRLO
	DCA I	KCTRLO		/IF IN INPUT MODE, DON'T TURN OFF ^O
	TAD	(NONAME&377+5000	/"JMP NONAME" IN DISGUISE
	DCA I	(SPSW		/MAKE SPACES LEGAL TRMINATOR
DMSM,	JMS I	[GETLIN		/GET LINE
	JMP I	(COMAND		/IT MUST BE A COMMAND
	TAD I	PDATE		/BEFORE WE GO TOO FAR, MAKE SURE
	SNA CLA			/GUY HAS ENTERED A DATE.
	JMP I	(CKDATE		/NOPE, GO PRINT MESSAGE AGAIN.
	AC0002			/THIS IS A TOTAL CROCK
	TAD	NCHARS
	SNA CLA			/TO TAKE CARE OF THE WEIRD CASE OF A
	JMP	DMSM		/GUY TYPING A NUMBER, SPACE, AND RETURN
	TAD	LINENO
	JMS I	[FIND		/LOOK UP THIS LINE NUMBER
	JMP	NEWLIN		/ITS A COMPLETELY NEW LINE
	CDF 10
	TAD I	WCPTR		/GET SIZE OF THIS LINE
	CIA
	TAD	WCPTR		/THIS IS READ POINTER
	DCA	16
	AC7777
	TAD	WCPTR
	DCA	15		/THIS IS THE WRITE POINTER
GETWC,	TAD I	16		/GET LINE SIZE
	SNA
	JMP	ENDREM
	DCA	SIZE
	TAD	SIZE
	DCA I	15		/PUT LINE SIZE INTO NEW PLACE
	TAD I	16
	DCA I	15		/MOVE LINE DOWN
	ISZ	SIZE
	JMP	.-3
	JMP	GETWC		/CONTINUE WITH NEXT LINE
ENDREM,	DCA I	15		/STORE EOF
GETROM,	CDF 0			/WE'VE REMOVED OLD COPY SO IT
				/LOOKS LIKE A NEW LINE
	AC0001			/SET CHANGED FILE SWITCH
	DCA	CHANGF
	JMS I	[GETC		/SKIP A BLANK
	JMP	NXTLIN		/LINE IS FINISHED, SO ARE WE
	TAD	(-334
	SNA CLA			/DON'T SKIP TABS
	JMS I	[BACK1
	TAD	15		/ADDR OF EOF
	CMA
	TAD	WCPTR		/GET NUMBER OF WORDS TO MOVE UP
	DCA	MOVSIZ
	TAD	NCHARS
	CIA			/NCHARS+1
	CLL	RAR		/OVER 2
	IAC			/+1=SIZE OF NEW LINE (= SPACE NEEDED)
	DCA	SIZE
	TAD	SIZE
	CLL IAC			/=SPACE NEEDED
	TAD	15		/WRITE POINTER
	DCA	WRTPTR
	TAD	WRTPTR
	TAD	P17		/TEST FOR FILE TOO BIG
	SZL CLA			/SIZE+1+CURRENT POSITION+17 <=4095
	JMP	FL2BIG
	TAD	15
	DCA	RDPTR		/READ POINTER
	CDF 10
ROMLUP,	TAD I	RDPTR		/MAKE ROOM FOR NEW LINE
	DCA I	WRTPTR
	AC7777			/DECREMENT POINTERS
	TAD	RDPTR
	DCA	RDPTR
	AC7777
	TAD	WRTPTR
	DCA	WRTPTR
	ISZ	MOVSIZ		/BUMP COUN
	JMP	ROMLUP
INSERT,	TAD	SIZE
	CIA
	DCA I	WCPTR		/PUT IN NEW LINE SIZE
	TAD	WCPTR
	DCA	LSTXR
	ISZ	WCPTR
	TAD	LINENO		/ALSO PUT IN LINE NUMBER
	DCA	LSTLIN
	TAD	LSTLIN
INSLUP,	DCA I	WCPTR
	ISZ	WCPTR
	CDF 0
	TAD I	14		/GET CHAR
	SNA
	JMP	NXTLIN
	CDF 10
	TAD	KM237		/CONVERT TO EDP-8 6-BIT
BSW001,	BSW			/CHANGES IF NON-8E
	DCA I	WCPTR		/PUT INTO UPPER CHAR
	CDF 0
	TAD I	14		/GET ANOTHER CHAR
	SNA
	JMP	NXTLIN
	CDF 10
	TAD	KM237
	TAD I	WCPTR		/UNITED WE STAND
	JMP	INSLUP

FL2BIG,	JMS I	[ERRMSG
	FILTOB-1		/--------------------"TEXT AREA FULL"
	JMP I	[NXTLIN
KM237,	-237
NEWLIN,	CDF 10			/FIND END OF FILE
	AC7777
	TAD	WCPTR		/ST. ADDR. OF LAST LINE
NEWLN3,	DCA	15
	TAD I	15
	CIA
	SNA
	JMP	GETROM
	TAD	15
	JMP	NEWLN3
/THE "PLEASE" COMMAND
/WHAT THIS DOES IS:
/TYPE A BELL
/WAIT FOR ANY KEY ON TTY
/GO BACK TO GET NEXT LINE
PLEASE,	TAD	P7		/THIS IS GOOD ENOUGH FOR US
	JMS I	TTYOUT
	JMS I	TTYIN
	JMP I	[NXTLIN
/
	PAGE

/ROUTINE TO FIND THE STARTING LOCATION OF A LINE IN THE TEXT BUFFER.
/IT IS OPTOMIZED SUCH THAT IN "LN" MODE, IF THE LINE # TO FIND
/IS GREATER THATN THE LAST ONE PROCESSED, IT STARTS THERE TO LOOK
/FOR THE PLACE TO PUT THE NEW LINE (KEEPS US FROM CHEWING HIGH-SPEED
/READERS INTO LITTLE PIECES WITH START-STOP READING)
FIND,	0			/FIND A LINE IN THE TEXT BUFFER
	DCA	FLINE		/SAVE THE LINE NUMBER
	TAD	FLINE
	CMA CLL
	TAD	LSTLIN
	SNL CLA
	TAD	LSTXR
	TAD	M1
	CDF 10
FLOOP,	DCA	16		/SET UP PTR
	TAD I	16		/GET LINE SIZE
	SNA
	JMP	FNDEND		/END OF FILE
	CMA CLL
	DCA	FSIZE
	TAD	FLINE
	CIA CLL
	TAD I	16
	SNA	CLA
	JMP	FOUND		/THIS IS THE LINE
	SZL
	JMP	ITSNEW		/IF LINE FOUND IS > LINE WANTED
				/THIS MUST BE A NEW LINE
	TAD	FSIZE
	TAD	16		/SKIP REST OF LINE
	JMP	FLOOP
FOUND,	ISZ	FIND		/BUMP RETURN
ITSNEW,	AC7777
FNDEND,	TAD	16
	DCA	WCPTR		/THIS IS ADDR OF WORD COUNT
	DCA	LSTLIN
	DCA	LSTXR
	CDF 0
	JMP I	FIND
FSIZE,	0
FLINE,	0

COMAND,	JMS I	[GETNAM		/GET COMMAND NAME (2 CHARS)
	JMP	COMERR
	TAD	(GTNMCH&377+5000	/"JMP GTNMCH" IN DISGUISE
	DCA I	(SPSW		/IGNORE ALL SPACES FROM NOW ON 
	TAD	(COMLST-1	/SEARCH COMMAND LIST
COMLUP,	DCA	16
	TAD I	16
	SNA
	JMP	COMERR
	TAD	NAM1
	SZA	CLA
	JMP	CBUMP1
	TAD	NAM1
	TAD	(-0401		/CHECK FOR "DATE" COMMAND
	SNA CLA			/IF IT IS, SKIP NEXT CHECK FOR PRESENCE OF DATE
	JMP	DATOK
	TAD I	PDATE
	SZA CLA
	JMP	DATOK
	JMS I	[ERRMSG
	NODATE-1
	JMP I	[NXTLIN
DATOK,	TAD I	16		/GET ADDR OF COMMAND PROCESSOR
	DCA	LINENO
	JMP I	LINENO		/GO TO IT
CBUMP1,	AC0001
	TAD	16
	JMP	COMLUP
COMLST,	-0605;READ		/"FETCH"
	-2722;WRITE
	-2301;SAVE
	-1411;LIST
	-2200;RUN		/"R" INSTEAD OF "RU"...(A FRILL ONLY)
	-2225;RUN
	-2205;RESEQ
	-0522;DELETE		/"ERASE"
	-0411;CATALG		/"DIRECTORY"
	-0405;PURCAT		/"DELETE"
	-0401;ENDATE
	-1416;INPUT		/"LN" (LINE NUMBERS)
	-0201;DO		/"BATCH"
	-2014;PLEASE		/"PLEASE"
K0,	0			/END OF COMMANDS
COMERR,	JMS I	[ERRMSG
	BADCOM-1		/--------------------"ERROR IN COMMAND"
	JMP I	[NXTLIN
BUMPNC,	0
	AC7777
	TAD	NCHARS
	DCA	NCHARS
	JMP I	BUMPNC
ERRMSG,	0
	CLA
	CDF 0
	DCA I	KCTRLO
	DCA	INSWIT
	DCA I	[TF0
	TAD I	ERRMSG
	ISZ	ERRMSG
	DCA	.+3
	AC0001
	JMS I	KCDOIO
	0
K240,	240
	TAD	(JMS I	TTYIN
	DCA I	(CHRLUP
	JMP I	ERRMSG
/
BACK1,	0		/BACK UP THE COMMAND LINE CHARACTER POINTER 1 CHARACTER
	AC7777
	TAD	14
	DCA	14
	JMS	BUMPNC
	JMP I	BACK1
/
	PAGE

/ROUTINE TO HANDLE "LIST M,N/S"
/
LIST,	JMS I	[SCANER
	DCA	LNPRPG		/LINES PER PAGE
	TAD I	[SWITCH
	TAD	(-1400
	SNA			/L?
	JMP	PRINT
	TAD	P7400		/1400-2000 IN DISGUISE
	SZA CLA			/P?
	JMP	TTYLST
	TAD	PPOUT
	DCA	PRTNE
	TAD	KSKP
	DCA	IFPTP		/IF PTP OUPUT, DON'T PUNCH LINE #S
	TAD	(KMAGIC&177+1200	/TAD KMAGIC IN DISGUISE
	DCA I	(IFPTP2		/& PUNCH TABS AS REAL 211'S
KSKP,	SKP
TTYLST,	TAD	(TTYSIZ		/ FOR LINE #
SVLNSZ,	DCA	LNCNT
LISTEX,	TAD I	[STRTLN
	JMS I	[FIND		/FIND STARTING PLACE
	CLA
	CMA
	TAD	WCPTR
	DCA	16
TTYLUP,	TAD	LNCNT
	DCA	NCPL
	TAD	[-15		/SET TAB COUNTER INITIALLY TO -15
	DCA	TABCNT
	TAD I	KCTRLO
	RAR
	SZL CLA
	JMP	FINLST		/IF ^O ON
	CDF 10
	TAD I	16
	SNA
	JMP	FINLST
	DCA	LSIZE
	TAD I	16		/LINE NUMBER
	CDF 0
	DCA	LINENO
	TAD I	[FINLIN
	CLL CMA
	TAD	LINENO
	SZL CLA
	JMP	FINLST
IFPTP,	TAD	LINENO
	JMS I	(DECNUM		/DECIMAL CONVERSION
	ISZ	LSIZE
LUPTTY,	CDF 10			/NOW PRINT CONTENTS
	TAD I	16
	CDF 0
	DCA	LCHARS
	TAD	LCHARS
BSW002,	BSW			/CHANGES IF NON-8E
	AND	P77
	SNA
	JMP	TTYEND
	TAD	[237
	JMS I	[PRNTC		/PRINT LEFT HALF...
	TAD	LCHARS
	AND	P77
	SNA
	JMP	TTYEND
	TAD	[237
	JMS I	[PRNTC		/& THEN THE RIGHT HALF
	ISZ	LSIZE
	JMP	LUPTTY
TTYEND,	JMS	LCRLF
	ISZ	LNPRPG
	SKP
	JMS	FORMFD		/EJECT AFTER 70 LINES
	JMP	TTYLUP
FINLST,	CDF 0
	DCA I	KCTRLO		/TURN OFF ^O, IF ON
	JMS	FORMFD
	TAD	(PRTABX&377+5000
	DCA I	(IFPTP2
	JMS	LCRLF
	TAD	TTYOUT
	DCA	PRTNE		/RESET TO TTY (AFTER PTP, FOR EX.)
	TAD	(TAD	LINENO
	DCA	IFPTP
	JMP I	[NXTLIN
LNCNT,	0			/MAXIMUM # OF CHARS PER LINE
LSIZE,	0			/THE SIZE OF THE CURRENT LINE
LCHARS,	0
PRINT,	TAD	LPOUT		/SET POINTER TO LPT FOR PRNTC ROUTINE
	DCA	PRTNE
	JMS	FORMFD
	TAD I	(LPTSIZ		/"LPSIZE" IS A LOCATION, NOT A CONSTANT LIKE TTYSIZ"!
	JMP	SVLNSZ
LCRLF,	0			/DO CRLF ON GIVEN DEVICE
	TAD	(215
	JMS I	PRTNE
	TAD	(212
	JMS I	PRTNE
	JMP I	LCRLF
FORMFD,	0
	TAD	PRTNE
	CIA
	TAD	LPOUT
	SNA CLA			/NO FORMFEED EXCEPT TO LPT
	TAD	(214
	JMS I	PRTNE
	TAD	(-70
	DCA	LNPRPG
	JMP I	FORMFD
/
	PAGE

/ROUTINE TO ERASE A LINE OR GROUP OF LINES
/COMMAND IS OF THE FORM "ERASE M,N"
/
DELETE,	JMS I	[SCANER
	TAD I	[FINLIN
	CLL CMA
	TAD I	[STRTLN
	SZL
	JMP I	[COMERR		/FOR "LIST 3,2" CASES
	SNA CLA
	JMP	DELALL
	TAD I	[STRTLN
	JMS I	[FIND
	JMP	NEXDEL+1	/LINE NOT THERE
	AC7777
	TAD	WCPTR
	DCA	12		/POINTER-1 TO LINE
	CDF 10
	TAD I	WCPTR		/GET LINE'S WORD COUNT
	CIA			/MAKE +
	TAD	WCPTR
	DCA	15		/THIS IS NOW POINTER-1 TO LINE AFTER
DELOOP,	TAD I	15
	SNA			/LENGTH=0?
	JMP	NEXDEL		/YES, SEE IF MORE TO DO
	DCA	DELSIZ
	TAD	DELSIZ
	DCA I	12
	TAD I	15
	DCA I	12		/MOVE WORD COUNT DOWN
	ISZ	DELSIZ
	JMP	.-3
	JMP	DELOOP

NEXDEL,	DCA I	12		/PUT IN EOF
	CDF 0
	ISZ I	[STRTLN		/BUMP TO NEXT
	SKP
	JMP	SETCFS
	TAD I	[STRTLN
	CLL CIA
	TAD I	[FINLIN
	CDF 10
	SZL CLA			/DONE ALL ASKED FOR?
	TAD I	WCPTR
SETCF2,	CDF 0
	SZA CLA
	JMP	DELETE+1	/NOT YET
SETCFS,	CLA	IAC
	DCA	CHANGF		/SET CHANGED FILE SWITCH
	DCA	LSTLIN
	DCA	LSTXR		/YOU ONLY NEED TO DO THIS ON "DELALL"
	JMP I	[NXTLIN
DELALL,	CDF 10
	DCA	LINENO
	DCA I	LINENO
	JMP	SETCF2		/RESET CDF TOO!!!
DELSIZ,	0
RESSIZ,	0
INCR,	0

/ROUTINE TO SESEQUENCE THE TEXT AREA.  DEFAULTS ARE 100,10.  IF
/EITHER IS OMITTED, E.G., "RESEQ ,2" THE DEFAULT VALUE IS
/USED FOR THE ONE THAT IS MISSING.
/
RESEQ,	JMS I	[SCANER
	DCA	LSTLIN
	DCA	LSTXR
	TAD I	[STRTLN
	SNA
	TAD	(144		/SET DEFAULTS
	DCA	LINENO
	TAD I	[FINLIN
	IAC
	SNA
	TAD	(13
	TAD	M1
	DCA	INCR
DEFALT,	AC7777
	DCA	16
	CDF 10
RESLUP,	TAD I	16
	SNA
	JMP	SETCF2
	CLL CIA			/MAKE +
	DCA	RESSIZ
	TAD	LINENO
	DCA I	16		/STORE NEW LINE NUMBER
	TAD	LINENO
	TAD	INCR
	DCA	LINENO		/BUMP LINE NUMBER
	SZL			/ADD OVERFLOW?
	JMP	RESOVR
	AC7777
	TAD	RESSIZ
	TAD	16		/SKIP OVER REST OF LINE
	DCA	16
	JMP	RESLUP
RESOVR,	JMS I	[ERRMSG
	LNO-1
	JMP I	[NXTLIN

DECNUM,	0			/DECIMAL OUT CONVERSION
	DCA	DNUM		/SAVE THE NUMBER
	TAD	(TENTBL		/PTR TO POWER OF TEN TABLE
	DCA	FPTR
	TAD	M4		/NUMBER OF DIGITS
	DCA	DCTR
DCLOOP,	TAD	(260		/ASCII ZERO
	DCA	NTMP		/START DIGIT AT ZERO
DCLUP,	TAD	DNUM
	CLL
	TAD I	FPTR		/SUBTRACT THIS POWER OF TEN
	SNL
	JMP	NXTPWR		/NUMBER TOO SMALL, LOWER POWER
	DCA	DNUM		/SAVE RESULT OF SUB
	ISZ	NTMP		/INCREMENT DIGIT
	JMP	DCLUP		/KEEP GOING WITH THIS POWER
NXTPWR,	CLA
	TAD	NTMP		/PRINT THIS DIGIT
	JMS I	[PRNTC		/THEN TRY NEXT LOWER POWER OF 10
	ISZ	FPTR
	ISZ	DCTR
	JMP	DCLOOP
	TAD	(240
	JMS I	[PRNTC		/PRINT BLANK AFTER NUMBER
	JMP I	DECNUM
FPTR,	0
NTMP,	0
DNUM,	0
DCTR,	0
/
	PAGE

/SCANS THE COMMAND LINE FOR UP TO A SIX-CHARACTER NAME.  NAME
/TERMINATORS ARE: SLASH, COMMA, OR END-OF-LINE.  A SPACE CAN ALSO
/BE A TERMINATOR FOR THE FIRST NAME ON A LINE (I.E., THE COMMAND).
/
GETNAM,	0			/GET A FILE NAME
	DCA	NAM1
	DCA	NAM2
	DCA	NAM3
	DCA	NAMSW
	TAD	FILTOB		/-7 IN DISGUISE
	DCA	COUNT
GTNMCH,	JMS	ONECHR		/GET CHAR, CHECK IT FOR SPECIAL CASES
	TAD	(13		/TEST FOR BLANK
	SNA
SPSW,	JMP	NONAME		/"JMP NONAME" OR "JMP GTNMCH"
	TAD	(240
	AND	P77
	DCA	NAMCHR
	TAD	NAMSW		/BEEN HERE BEFOR
	SNA
	ISZ	GETNAM		/NO, BUMP RETURN
	CLL	RAR		/LOW BIT INTO LINK
	TAD	(NAM1
	DCA	NAMPTR
	TAD	NAMCHR
	TAD I	NAMPTR
	SZL
	JMP	LOWNAM		/IF CHAR COUNT IS ODD, LOWER
BSW003,	BSW			/CHANGES IF NON-8E
	ISZ	COUNT
	SKP
	JMP	SCNCLA
LOWNAM,	DCA I	NAMPTR		/STORE IT
	ISZ	NAMSW		/BUMP COUNT
	JMP	GTNMCH
SCANSP,	JMS	ONECHR		/GOTTEN 6, SCAN TO DELIM
SCNCLA,	CLA
	JMP	SCANSP
/
ONECHR,	0		/GET A CHAR FOR NAME, CHECK FOR +,-./ DELIMITERS
	JMS I	[GETC
	JMP	NONAME
	TAD	(-260
	CLL
	TAD	(5
	SNL
	JMP I	ONECHR
NONAME,	JMS I	[BACK1
	JMP I	GETNAM
NAMPRE,	0
NAMCHR,	0
NAMSW,	0

/DIRECTORY COMMAND "DIR DEV" OR "DIR/N"
/
CATALG,	JMS I	[SAVWA
	JMS I	[GETDEV
	TAD I	[SWITCH
	TAD	(-2400
	SNA CLA
	JMP	SYSOVR
	TAD	LPOUT
	DCA	PRTNE
	JMS I	(FORMFD
SYSOVR,	JMS I	(LCRLF
	TAD	(OVR1
	JMS I	KSPLIT
	JMS I	SYSHND
	0400
STRTOV,	OVRADR
NAMPTR,	0
	JMP I	STRTOV

/ROUTINE TO PROCESS THINGS LIKE "M,N/D" AND PERMUTATIONS THEREOF
/
SCANER,	0
	DCA	STRTLN
	AC7777
	DCA	FINLIN
	JMS	SCAN
	DCA	STRTLN		/GOT "M" VALUE
	TAD	STRTLN
	JMP	MUSTBE		/ONLY SPECIAL CHARS ALLOWED NEXT
COMMA,	AC7777			/SEEN A COMMA, SO WE'RE ABOUT TO DO "N"
	DCA	FINLIN		/INITIALIZE TO SOMETHING RIDICULOUS
	JMS	SCAN
MUSTBE,	DCA	FINLIN		/STORE "N"
	JMS	SCAN		/THIS SHOULD NEVER RETURN
SCNERR,	CLA
	JMP I	[COMERR		/...BUT IT DID?
/
SCAN,	0			/CHECKS FOR SLASH, COMMA, SPACE, GETS A #
	JMS I	[GETC
	JMP	DSWITC		/NONE LEFT
	TAD	(-257
	SNA
	JMP	SLASH
	TAD	(257-254
	SNA
	JMP	COMMA
	TAD	(14
	SNA CLA
	JMP	SCAN+1
	JMS I	[BACK1		/NO SPECIAL CHAR, MUST BE START OF A NUMBER
	JMS I	[NUMBR
	JMP	SCNERR		/...IT WASN'T
	JMP I	SCAN
SLASH,	JMS I	[GETNAM
	SKP CLA
	TAD	NAM1		/GET THE SWITCH CHARS
DSWITC,	DCA I	[SWITCH
	JMP I	SCANER
STRTLN,	0
FINLIN,	0
FILTOB,	-7			/"TEXT AREA FULL"
	6546
	7165
	0142
	6346
	4201
	4766
	5555
TENTBL,	-1750;-144;-12;-1
	/
	PAGE

/ROUTINE TO DO LOOKUPS ON PS/8 DIRECTORIES
/CALL:
/JMS LOOKUP
/POINTER-1 TO NAME
/NOT FOUND RETURN
/FOURND RETURN, ST. BLK. # IN AC, LENGHT IN "FILSZ"
/
/PROGRAM MUST HAVE PREVIOUSLY SET UP:
/UINT=PHYSICAL UNIT #
/DAVICE=DEVICE HANDLER ADDRESS
/DBLOCK=0
/DIRECT=ADDRESS OF WHERE TO PUT THE DIRECTORY BLOCK READ IN (FIELD 0)
/
	XR=10
	XR1=12
	XR2=11
LOOKUP,	0
	TAD I	LOOKUP
	DCA	PTNAME
	ISZ	LOOKUP
	JMS	MRDCAT
	JMS	MDSRCH
	JMP I	LOOKUP
	TAD	SBLOCK
	CIA
	TAD I	PDORG
	ISZ	LOOKUP
	JMP I	LOOKUP
/
MRDCAT,	0
	SZA
	JMP	MRDREN
	DCA	SBLOCK
	DCA	FILSZ
	AC0001
MRDREN,	TAD	DAVICE		/FORM A UNIQUE VALUE FOR EACH DEVICE'S DIRECTORY BLOCKS
	CIA
	TAD	DBLOCK
	SNA
	JMP	INLRDY
	CIA
	TAD	DBLOCK
	DCA	DBLOCK
	JMS	MREADC
INLRDY,	TAD I	PDCNT
	DCA	NFILES
	TAD	PDWSTE
	DCA	XR
	JMP I	MRDCAT

MDSRCH,	0
FSRCLP,	TAD	PTNAME
	DCA	XR2
	TAD	M4
	DCA	CT
	TAD I	XR
	SNA
	JMP	SKPMTF
	SKP
SRCWDL,	TAD I	XR
	CIA
	TAD I	XR2
	SZA CLA
	JMP	NXTFIL
	ISZ	CT
	JMP	SRCWDL
	JMS	BUMPXR
	TAD I	XR
	SNA
	JMP	SKPMTF+1
	DCA	FILSZ
	ISZ	MDSRCH
	JMP I	MDSRCH
NXTFIL,	TAD	CT
	IAC
	JMS	BUMPXR
SKPMTF,	TAD I	XR
	TAD	SBLOCK
	DCA	SBLOCK
	ISZ	NFILES
	JMP	FSRCLP
	DCA	SBLOCK
	TAD I	PDLINK
	SZA
	JMP	MRDREN
	JMP I	MDSRCH
/
BUMPXR,	0
	TAD I	PDWSTE
	CIA
	TAD	XR
	DCA	XR
	JMP I	BUMPXR

MREADC,	0
	TAD	(200
	TAD	UNIT
	DCA	DIOCTL
	TAD	DBLOCK
	AND	P7
	JMS I	KSPLIT
	JMS I	DAVICE
DIOCTL,	0
	DIRECT
	0
	TAD I	PDCNT		/QUICK CHECK FOR LEGAL DIRECTORY
	TAD	(100
	SPA CLA
	JMP I	(BADDIR
	TAD I	PDLINK
	AND	TABSET		/7770 IN DISGUISE
	SZA CLA
	JMP I	(BADDIR
	JMP I	MREADC
SBLOCK,	0
CT,	0
NFILES,	0
PTNAME,	0
FORM,	DCA	INSWIT
	DCA I	KCTRLO
	TAD	(JMS I	TTYIN
	DCA I	(CHRLUP
	DCA	LSTLIN		/KILL THE "FIND" OPTOMIZATION STUFF
	DCA	LSTXR
	JMP I	(CNTRLU
L2LONG,	-7			/"LINE TOO LONG"
	5552
	5746
	0165
	6060
	0155
	6057
	5000
MEOVLS,	ZBLOCK 7		/SCRATCH SPACE USED BY DIRECTORY EXPANSION ROUTINE
/
	PAGE

/ROUTINE TO GET A SOURCE FILE AND READ IT INTO THE SOURCE
/EDITING AREA (IN CORE ONLY--DOESN'T AFFECT SOURCE SCRATCH AREA)
/
READ,	JMS I	[GETNAM
	JMP I	[COMERR		/NO NAME
	JMS I	[GETDEV		/GET DEVICE & UNIT OF FILE
	DCA	DBLOCK
	TAD	(0123		/AS
	DCA	NAM4
	JMS I	[LOOKUP
	NAM1-1
	JMP	NOFILE
	DCA	FILORG
	TAD	FILSZ
	CIA
	AND	P17		/MAKE 20 INTO 0
	CLL RTL
	RAL
	CLL CML RTL		/SET LINK TO EVENTUALLY BECOME THE FIELD BIT
	RTL
	TAD	UNIT
	DCA	RECTL
	TAD	FILORG
	JMS I	KSPLIT
	JMS I	DAVICE
RECTL,	10
	0
RDORG,	0
	AC0001
	DCA	CHANGF		/ SWITCH FOR CHANGED FILE
	DCA	LSTLIN		/ATTEMPT TO FIX OBSCURE EDIT BUG
	DCA	LSTXR		/BY TRYING THIS AS A RANDOM GUESS
	JMP I	[NXTLIN
NOFILE,	JMS I	[ERRMSG
	NOTFND-1		/--------------------"NOT FOUND"
	JMP I	[NXTLIN
DIGIT,	0

/ROUTINE TO SCAN COMMAND LINE & PICK OFF A DECIMAL #, < 4096.
/TERMINATORS ARE: SLASH, COMMA, OR NON-NUMERIC.  A SPACE CAN
/TERMINATE THE FIRST NUMBER ON A LINE I.E., THE LINE #.
/
NUMBR,  0			/CALL WITH AC = 0
        DCA     NUMSW           /ZERO SWITCH
NUMLUP,	DCA	NUMBER
        JMS I	[GETC
NONUMB, SKP     CLA             /END LINE, NO NUMBER
        JMP     TSTNUM          /TEST CHAR FOR DIGIT
	JMS I	[BACK1
        TAD     NUMBER          /GET RESULT INTO AC
        JMP I   NUMBR
TSTNUM,	TAD	(-240
	SNA
SPACOK,	JMP	NONUMB-1	/EITHER "JMP NONUMB" OR "JMP NONUMB-1", TO EITHER TAKE SPACES AS A
				/TERMINATOR OR NOT
	TAD     (240-272
	CLL
        TAD     (12
	SNL
        JMP     NONUMB          /IF < 260 NOT A DIGIT
        DCA     DIGIT
        TAD     NUMSW           /HAVE WE BEEN THRU BEFORE
        SNA     CLA
        ISZ     NUMBR           /NO, SO BUMP RETURN ADD
        ISZ     NUMSW           /SET SWITC
        TAD     NUMBER          /MULT BY 10
        CLL RTL
	TAD	NUMBER
        RAL
        TAD     DIGIT           /ADD NEW DIGIT
	SNL
        JMP	NUMLUP
	JMS I	[ERRMSG		/ERRMSG DOES CLA
	LNO-1			/--------------------"LINE # TOO LARGE"
	DCA	NUMBER
	JMP I	[NXTLIN
NUMBER, 0
NUMSW,  0

PRNTC,	0			/PRINT ROUTINE WITH TABS
	DCA	RDORG
	ISZ	NCPL
	JMP	NOCR		/STILL GOT SPACE ON LINE
EOFLIN,	JMS I	(LCRLF
	TAD	(TTYSIZ
	DCA	NCPL
NOCR,	TAD	RDORG
	TAD	(-334		/334 (\) IS TAB
	SNA
IFPTP2,	JMP	PRTABX		/DO THE TAB (THIS INSTRUCTION CHANGES)
	TAD	(334
	JMS I	PRTNE		/PRINT THE CHAR
	ISZ	TABCNT		/BUMP TAB COUNTER
	JMP I	PRNTC		/RETURN
RSTAB,	TAD	TABSET		/RESET TAB COUNT
	DCA	TABCNT
	JMP I	PRNTC
PRTAB,	ISZ	NCPL
	SKP
	JMP	EOFLIN
PRTABX,	TAD	(240		/PRINT BLANKS FOR TAB
	JMS I	PRTNE
	ISZ	TABCNT
	JMP	PRTAB
	JMP	RSTAB		/NOW GO RESET COUNT
KMAGIC,	211-334
BADDIR,	JMS I	[ERRMSG
	ZAPDIR-1		/--------------------"BAD DIRECTORY"
	JMP I	P7600		/MUST RETURN TO MONITOR THIS WAY, BECAUSE WE CAN COME
				/HERE WHEN CALLED FROM AN OVERLAY

CTRLV,	TAD I	(FLAGS
	RAR
	CML RAL
	DCA I	(FLAGS		/FLIP MESSAGE BIT
	JMP I	[NXTLIN
NOMEM,	-11			/"NOT ENOUGH MEMORY"
	5760
	6501
	4657
	6066
	5051
	0156
	4656
	6063
	7200
/
	PAGE

/THE "RUN" COMMAND PROCESSOR.
/RUN WITH NO ARGS: RUNS THE LAST COMPILED DIBOL BINARY.
/RUN WITH ARGS: TAKES THE FIRST AS "SV" FILE TO RUN, OTHERS AS ASCII
/FILES. (CASE 1)
/CASE 2, RUN WITH ARGS, "SV" FILE OF NAME NOT FOUND:
/LOOKS UP DIBOL BINARY FILE OF THAT NAME & RUNS THAT.
/IMPLICATION: YOU CAN'T HAVE A DIBOL BINARY OF THE SAME NAME AS A SYSTEM
/PROGRAM, BECAUSE "RUN" WILL ALWAYS RUN THE "SV" FILE IN PREFERENCE
/TO THE "DB" FILE.  (WHO CARES)
/
NOTHER,	ISZ	FILCNT
	SKP
	JMP I	(NOFILE
	TAD	(0402
	JMP	RLOOP
/
RUNBIN,	TAD	RUNORG
	SKP
RUNSCR,	TAD	(COMPWA		/STARTING BLOCK OF COMPILER SCRATCH AREA
	DCA I	(SBT
	TAD	(34		/STARTING BLOCK OF RSYS ON TAPE
	DCA	RUNORG
	AC0001
	JMP	NWRITF
RUN,	JMS	SAVWA
RGETL,	AC7776
	DCA	FILCNT
	TAD	(EDITWA		/ASSUME EDITOR SCRATCH AREA TO START
	DCA I	(SBT
	TAD	SYSHND
	DCA	DAVICE
	DCA	RUNORG
	DCA	UNIT
	DCA	DBLOCK
	JMS I	[GETNAM
	JMP	RUNSCR		/IF NO ARGS...
	TAD	(2326		/FIRST TRY TO FIND SV FILE OF NAME
RLOOP,	DCA	NAM4
	JMS I	[LOOKUP
	NAM1-1
	JMP	NOTHER
	DCA	RUNORG		/SAVE STARTING BLK. #
	TAD	NAM4		/SEE IF SV OR DB TYPE
	CIA
	TAD	(0402		/"DB"
	SNA CLA
	JMP	RUNBIN
	/IF WE FALL THRU, IT'S A SYSTEM PROGRAM ("SV")
NWRITF,	TAD	(SBT-1		/FORM FILE LIST
	DCA 	13
	TAD	TABSET
	DCA	FILCNT		/MAX NUMBER OF FILES (8)
GFILES,	JMS I	[GETC
	JMP	GOBACK		/END OF FILE LIST
	TAD	(-257
ESNA,	SNA
GOBACK,	JMS I	[BACK1
	TAD	(4
	SNA CLA			/IS IT "+"?
	JMP	KEEPOL		/YES - KEEP OLD EXTENSION
	TAD	(0123		/NO - PUT IN .AS
	DCA	NAM4
KEEPOL,	JMS I	[GETNAM		/GET NAME OF FILE
	JMP	DOSPL
	ISZ	FILCNT
	JMP	LUKN
	JMS I	[ERRMSG
	BADCOM-1		/TOO MANY FILES
	JMP I	[NXTLIN
LUKN,	JMS I	[LOOKUP
	NAM1-1
	JMP I	(NOFILE		/NOT FOUND
	DCA I	13
	JMP	GFILES
RUNORG,	0
/
DOSPL,	JMS I	[SCANER		/GET SWITCH (IF ANY)
	TAD	RUNORG
	JMS I	KSPLIT
	JMS I	SYSHND		/READ IN HEADER BLOCK OF SYSTEM PROGRAM TO RUN
	200
K4000,	4000			/INTO 4000-4377
	0
	TAD I	(4001
	DCA I	(MSTCDF
	TAD I	(4002
	DCA I	(MSTADR
	TAD	P7600
	JMS I	KMOVE
	CDF 0
	MSTART-1
	MSTART&177+4200-1
	JMP I	.+1
	4200			/**** CAREFUL!!!
SAVWA,	0
	TAD	CHANGF
	SNA CLA
	JMP	ENBCTC		/DON'T NEED TO REWRITE
	TAD	(EDITWA
	JMS I	KSPLIT
	JMS I	SYSHND
	4010
	0
	0
ENBCTC,	TAD	ESNA
	DCA I	(CTCFIX		/RE-ENABLE ^C BOOT
	JMP I	SAVWA
FILCNT,	0

/"DATE" COMMAND
ENDATE,	JMS I	[SAVWA
	TAD	(NONUMB&377+5000-1
	DCA I	(SPACOK
	TAD	(OVR1+2		/STARTING BLOCK, OVERLAYS
	JMS I	KSPLIT
	JMS I	SYSHND		/GO GET OVERLAY
	0200
	OVRADR+400
	0
	JMP I	.+1		/GO TO CORRECT PLACE
	DACOM&177+OVRADR+600
/
	PAGE

/THIS CODE MOVES TO 4200-4377 FOR "RUN" COMMAND
MSTART,	TAD I	(RUNORG
	IAC
	DCA	RUNFIL
	TAD	(4004
	DCA	RUNGET
RUN8,	ISZ I	R7000		/LAST PAIR?
	JMP	RUN9
	TAD I	RUNGET
	ISZ	RUNGET
	DCA I	(MREAD+3
	TAD I	RUNGET
	ISZ	RUNGET
	DCA I	(MREAD+2
	TAD	RUNFIL
	JMP I	(MREAD
RUN9,	TAD I	RUNGET
	ISZ	RUNGET
	DCA	RADR
	TAD I	RUNGET
	ISZ	RUNGET
	DCA	RCTL
	TAD	RCTL
	AND	P70
	TAD	PCDF
	CIA CLL
	TAD I	(BIGCDF
	SPA CLA			/CHECK FOR ENOUGH CORE
	JMP	NOCORE		/NOT ENOUGH MEMORY
	TAD	RUNFIL
	JMS I	KSPLIT
	JMS I	SYSHND
RCTL,	0
RADR,	0
	0
	TAD	RCTL
	JMS	ROTAT
	TAD	RUNFIL
	DCA	RUNFIL
	JMP	RUN8
RUNFIL,	0
ROTAT,	0
BSW004,	BSW			/CHANGES IF NON-8E
	AND	(37
	SNA			/TEST FOR FULL FIELD LOAD
	TAD	(37		/IF SO, WE WANT AC = 40
	IAC
	CLL RAR
	JMP I	ROTAT
R7000,	4000
/
NOCORE,	JMS I	[ERRMSG
	NOMEM-1			/NOT ENOUGH MEMORY!
	JMP I	P7600

/ROUTINE TO SAVE A DIBOL BINARY
/
SAVE,	JMS I	[SAVWA		/WRITE OUT FIELD 1
	TAD	(OVR1+2		/GET "SAVE" OVERLAY
	JMS I	KSPLIT
	JMS I	SYSHND
	0200
	OVRADR+400		/SAVE USES GETDEV & ENTER, SO IT CAN'T GO AT
RUNGET,	0
				/4000 LIKE THE OTHER OVERLAYS
	JMP I	.+1
	SAVOVR&377+OVRADR+400
ZAPDIR,	-7
	4342	/BA
	4501	/D
	4552	/DI
	6346	/RE
	4465	/CT
	6063	/OR
	7201	/Y
/

/ROTUINE TO DO THE BATCH THING.
/FIRST CALL TAPLIN TO GET A LINE (I.E., ONE RECORD)
/THEN CALL TGETC AS NEEDED TO GET CHARS FROM RECORD.
/NOTE THAT IT CUNNINGLY UNPACKS THE RECORD INTO WHERE
/IT IS, CHEERFUL IN THE KNOWLEGE THAT IT'LL KEEP AHEAD OF ITSELF.
TAPLIN,	TAD	(KTGETC&177+5600	/JMP I KTGETC IN DISGUISE
	DCA I	(CHRLUP		/CHANGE THE PLACE GETLIN GETS ITS CHARS FROM.
	TAD	DBLOCK
	CMA
	SZA CLA
	JMS I	(REREAD		/"DO" BLOCK NOT IN, SO REGET IT
	JMS I	KRDOIO		/GET A RECORD FROM "DO" FILE
	LINE+103-1		/PUT IT HERE
	JMP	EOFRE		/END OF FILE
	AC0002
	DCA	DORELC		/+2 TO SKIP LINE #
	TAD I	(LINE+103
	DCA	TCNT
	JMP I	(TAPRET		/RETURN TO GETLIN TO GET THE CHARS OUT NOW
DORELC,	0
TCNT,	0
TGETC,	TAD	DORELC
	CLL RAR
	DCA	TEMP
	TAD	TEMP
	TAD	TCNT
	SMA CLA
	JMP	EOTL
	TAD	TEMP
	TAD	(LINE+103
	IAC
	DCA	GET
	TAD I	GET
	SNL
BSW005,	BSW			/CHANGES IF NON-8E
RETAND,	AND	P77
	JMP	MASC

EOTL,	TAD	(215-237	/RETURN CR ON END OF RECORD
MASC,	TAD	(237-334	/MAKE ASCII, CHECK FOR "\"
	SNA
	TAD	(211-334	/CHANGE SUCH THINGS TO TABS
	TAD	(334
	ISZ	DORELC
	JMP I	(TGETCR
EOFRE,	DCA I	[TF0		/TURN OFF "DO"
	JMS I	[SAVWA		/IN CASE BATCH JOB INCLUDED A "FETCH"
	JMP I	P7600
/
	PAGE

/BUFFER FOR THE INPUT COMMAND LINE
/THIS CODE GOES AWAY
/
LINE,	0
	*.-1
START,	TAD I	M4
	IFNZRO START-3000 <???> /ERROR - MONITOR
	DCA	SYSHND
	TAD	SYSHND
	DCA I	(DEVLST
	TAD	SYSHND
	DCA I	(6200		/FIX UP LOGICAL UNITS TABLE
BSWFIX,	TAD	BSWVAL
BSWVAL,	7002			/BSW, IF IT EXISTS
	TAD	(-0270
	SNA CLA
	JMP	BSWLUP
	TAD	(JMS I	BSWPTR
	DCA	BSWVAL
BSWLUP,	TAD	BSWADR
	SNA
	JMP	TRNION
	DCA	BSWT
	TAD	BSWVAL
	DCA I	BSWT
	ISZ	BSWLUP
	JMP	BSWLUP
BSWADR,	BSW001
	BSW002
	BSW003
	BSW004
	BSW005
	BSW006
	BSW007
	BSW008
	BSW009
	0
BSWT,	0
TRNION,	ION			/NOTE THAT THIS CODE IS ONCE-ONLY, AND GOES AWAY
	TAD	KSZACL
	DCA I	(SRTFLG		/RESTORE SORT KLUDGE
	DCA I	(IZERO		/RESET
	TAD	(SKP
	DCA I	(CTCFIX		/MAKE ^C DISABLED, SO GUY WON'T LOSE EDITING CHANGES BY BEING A CLOD
	TAD	KCLAIA
	DCA I	(PIPFX1		/FIX UP AFTER POSSIBLE PIP ABORTION
	TAD	KCDO
	DCA I	(PIPFX2
	DCA I	(SWITCH		/CLEAR PREVIOUS OPTIONS
	TAD	KEWA
	JMS I	KSPLIT
	JMS I	SYSHND		/READ IN EDITOR WORKING AREA
	10
	0
	0
	TAD	(-107
	DCA	COUNT
	TAD	(FTBASE+11-1	/!!!!!!!-------- C A U T I O N --------!!!!!!!!
	DCA	PUTPNT
	DCA I	PUTPNT
	ISZ	COUNT
	JMP	.-2
	DCA I	(DEVNUM		/MAKE SURE TCRLF ECHOES!
	JMS I	[TCRLF
NOMESG,	AC7777
SCANLP,	DCA	15
	CDF 10
	TAD I	15		/CHECK WORKING AREA FOR LEGALITY
	SNA
	JMP	MKTSHT
	CLL
	TAD	K120
	SNL
	JMP	BADFIL
	TAD	(-120
	CLL CIA
	TAD	15
	SNL			/WRAP AROUND?
	JMP	SCANLP
BADFIL,	AC7777
	CDF 10
	DCA	15
	DCA I	15
MKTSHT,	CDF 0
	TAD I	[TF0		/SEE IF BATCH IS RUNNING
	SNA CLA
	TAD I	(FLAGS
	CLL RAR
	SNL CLA			/CHECK FOR ^V SWITCH
	JMP I	(CKFGBG		/THANK HEAVENS
KCLAIA,	AC0001
KCDO,	JMS I	KCDOIO		/PRINT VERSION MESSAGE
	VERMES-1
KEWA,	EDITWA
	JMP I	(CKFGBG
K120,	120
NODATE,	-3			/"DATE?"
	4542
	6546
	4001
KSZACL,	SZA CLA
/
	PAGE

	DIRECT=.
REBUFR,	0
/
/NOTE THAT PAGE 7600 GETS ASSEMBLED INTO HERE
/AND THEN THE INITIALIZATION CODE MOVES IT UP
/WHEN IT GOES TO WRITE OUT THE SYSTEM
/
	PAGE

/FAKE DIRECTORY
	-2
140
/
/1-7 = DIRECTORY
/10-13 = RESIDENT MONITOR
/14-17 = EDITOR OVERLAYS (DIR, DATE, SAVE)
/20-33 = EDITOR
/34-37 = RSYS LOADER
/40-57 = EDITOR WORK AREA
/60-67 = RSYS INTERPRETER
/70-74 = COMP OVERLAYS
/75-77 = DDT
/100-177=COMP SCRATCH AREA (FOR NOW)
/
0
0
7777
/
0317	/CO
1520	/MP
0
2326	/SV
SYSDAT	/DATE
7762
/
0
	6616
SYSWRI,	TAD	P7600		/SAVE OS/8 PAGE 7600
	JMS I	KMOVE
	CDF 10
	7600-1
	6000-1
	TAD	P7600		/MOVE PAGE 7600 INTO ITS PROPER SPOT
	JMS I	KMOVE
	CDF 0
	REBUFR-1
	7600-1
	AC0001
	JMS I	KSPLIT
	JMS I	SYSHND		/WRITE OUT BLANK DIRECTORY
	4200
	.&7400
	0 
	JMS I	SYSHND	/WRITE OUT APPROPRIATE BOOTSTRAP
	4210
	IFZERO SYSDEV-DTA <
	IFZERO TAPE <TC01BT>
	IFNZRO TAPE&1 <TD8EBT>
	IFNZRO TAPE&2 <TC12BT>>
	IFZERO SYSDEV-RK8 <
	IFZERO RKDISK <RK8BT>
	IFNZRO RKDISK <RKEBT>>
	0 
	TAD	(RESMON		/WRITE OUT RESIDENT
	JMS I	KSPLIT
	JMS I	SYSHND
	5000
	6000
	0
	TAD	(OVR1		/WRITE OUT OVERLAYS
	JMS I	KSPLIT
	JMS I	SYSHND
	5010
	OVRADR
	0
	TAD	(EDITBL		/WRITE OUT EDITOR
	JMS I	KSPLIT
	JMS I	SYSHND
	7000
	0
	0 
	TAD	P7600
	CDF 10			/NOW RESTORE OS/8 PAGE 7600
	JMS I	KMOVE
	CDF 0
	6000-1
	7600-1
	IOF
	JMP I	.+1
	7605
	*.&7600+100		/THIS IS TO KEEP TAG "VERMES" FROM BEING MULTIPLY DEFINED
				/BECAUSE OF CONDITIONAL CODE ABOVE
VERMES,	-11			/"COS MONITOR YR.MO.DA"
	4460
	6401
	5660
	5752
	6560
	6301
	YEARX^100+2117	/YR+.
	ZZZ1=MONTH%12
	ZZZ2=ZZZ1^12
	ZZZ3=MONTH-ZZZ2
	ZZZ1^100+ZZZ3+2121	/MO
/	ZZZ4=DAYX%12
/	ZZZ5=ZZZ4^12
/	ZZZ6=DAYX-ZZZ5
/	ZZZ4^100+ZZZ6+2121	/DA
	4300			/FOR PATCH LEVEL

CKFGBG,	TAD I	KFLAGS
	SPA CLA
	JMP I	(CKDATE		/IF FOREGROUND/BACKGROUND, DON'T UPSET FIELD ALLOCATIONS!
CHKMEM,	CLA CLL IAC		/NOW SEE HOW MUCH CORE WE GOT
	DCA	CORSIZ
COR0,	CDF 0
	TAD	CORSIZ
	RTL
	RAL
	AND	P70
	TAD	COREX
	DCA	.+1
COR1,	CDF
	TAD I	CORLOC
COR2,	NOP
	DCA	COR1
	TAD	COR2
	DCA I	CORLOC
	NOP
	TAD I	CORLOC
CORX,	7400
	TAD	CORX
	TAD	CORV
	SZA CLA
	JMP	COREX
	TAD	COR1
	DCA I	CORLOC
	ISZ	CORSIZ
	JMP	COR0
COREX,	CDF 0
	AC7777
	TAD	CORSIZ
	CLL RTL
	RAL
	TAD	COREX
SAVCDF,	DCA I	(BIGCDF
CKDATE,	AC0002
	DCA I	P7600
	TAD I	PDATE
	SZA CLA
	JMP I	[NXTLIN
	AC0001
	JMS I	KCDOIO
	NODATE-1
KFLAGS,	FLAGS
	JMP I	[NXTLIN
CORSIZ,	0
CORLOC,	CORX
CORV,	1400
/
	PAGE

PURCAT,	JMS I	[GETNAM
	JMP I	[COMERR
	JMS I	[GETDEV		/GET DEV, UNIT TO USE
	TAD	(DELLST-2
	DCA	GETPNT
DELLUP,	ISZ	GETPNT
	TAD I	GETPNT
	SMA
	JMP I	[COMERR
	TAD I	[SWITCH
	SZA CLA
	JMP	DELLUP
	TAD I	GETPNT
	DCA	NAM4
	DCA	DBLOCK
	TAD	K3100		/FAKE A /Y
	DCA I	[SWITCH
	JMS	PURGE
	JMP I	(NOFILE		/IT WERN'T THERE
	JMP I	[NXTLIN
/
PURGE,	0
	JMS I	[LOOKUP
	NAM1-1
	JMP I	PURGE
P7700,	SMA CLA
K600,	600
	TAD I	[SWITCH
	TAD	M3100
	SNA CLA			/DID GUY GIVE A /Y?
	JMP	DOPUR		/YUP
	AC0001			/WE DON'T WANT TO KILL BATCH MODE FOR THIS MESSAGE
	JMS I	KCDOIO		/DON'T CALL ERROR MESSAGE ROUTINE HERE
	REPL-1			/--------------------"REPLACE?"
K3100,	3100
	JMS I	KCDOIO
	LINE-1
M3100,	-3100
	TAD I	(LINE+1
	AND	P7700
	TAD	K600
	SZA CLA
	JMP I	[NXTLIN
DOPUR,	ISZ	PURGE
	AC7776
	TAD	XR
	DCA	XR
	TAD	XR
	DCA	XR2
	DCA I	XR2
	AC7775
	TAD I	PDWSTE
	JMS	SQUISH
	JMS	CONSOL
	CLA CLL CML RAR
	JMS I	(MREADC
	JMP I	PURGE
CONSOL,	0
	TAD	PDWSTE
	DCA	XR
	TAD I	PDCNT
	DCA	XR2
CONLP,	TAD I	XR
	SNA CLA
	JMP	PEMPTY
PSKIPF,	TAD	M4
	JMS I	(BUMPXR
	ISZ	XR2
	JMP	CONLP
	JMP I	CONSOL

DELLST,	-2326;	2326		/-SV;	SV
	-2300;	0123		/-S;	AS
	-0200;	0402		/-B;	DB
	-0600;	0406		/-F;	DF
	-1500;	0415		/-M;	DM
PEMPTY,	ISZ	XR		/DELLST MUST TERMINATE WITH A (+) NUMBER !!!
	TAD	XR
	DCA	SQUISH
	ISZ	XR2
	SKP
	JMP I	CONSOL
	TAD I	XR
	SZA CLA
	JMP	PSKIPF
	TAD I	XR
	TAD I	SQUISH
	DCA I	SQUISH
	AC7776
	JMS	SQUISH
	ISZ I	PDCNT
	JMP	CONSOL+1
SQUISH,	0
	TAD	XR
	DCA	XR1
SQLOOP,	TAD I	XR
	DCA I	XR1
	TAD	XR
	TAD	(-DIRECT-377
	SZA CLA
	JMP	SQLOOP
	JMP I	SQUISH

LNO,	-10		/"LINE # TOO LARGE"
	5552
	5746
	0104
	0165
	6060
	0155
	4263
	5046
NOTFND,	-7		/"FILE NOT FOUND"
	4752
	5546
	0157
	6065
	0147
	6066
	5745
/
PAGE

/C A U T I O N :  NOTE THAT AN EDITOR OVERLAY READS INTO THIS BLOCK,
/SO BE CAREFUL WHAT YOU PUT HERE (MAKE SURE THE OVERLAY DOESN'T
/NEED TO USE IT.)
/
/TAD	(LENGTH OF FILE
/JMS	ENTER
/DONE, BLK # IN AC
/
ENTER,	0
	DCA	ELENGT
	JMS I	(PURGE
ELENGT,	0			/ERROR RETURN FOR PURGE, SO ELENGT MUST BE <=777 !!!
RENTER,	JMS I	(MRDCAT
	TAD	(ZERO
	DCA	EPTR
	DCA	EBLOCK
ELOOP,	TAD I	XR
	SNA CLA
	JMP	EMPTY
	AC7775
	JMS I	(BUMPXR
	TAD I	XR
ELEND,	TAD	EBLOCK
	DCA	EBLOCK
	ISZ I	(NFILES
	JMP	ELOOP
	TAD	XR
	DCA	ETMP
	TAD I	EPTR
	SZA
	JMP	EINSRT
	TAD I	PDLINK
	SZA
	JMP I	(MRDREN
	JMP	NOSPAC
/
EMPTY,	TAD I	XR
	DCA	ETMP
	AC7777 CLL
	TAD	ETMP
	TAD	ELENGT
	SZL CLA
	TAD	ETMP
	CIA CLL
	TAD I	EPTR
	SZL CLA
	JMP	ENOGD
	TAD	XR
	DCA	EPTR
	TAD	EBLOCK
	DCA	EBLK
ENOGD,	TAD	ETMP
	JMP	ELEND

EINSRT,	TAD	ELENGT
	SNA CLA			/IF IT JUST FITS, DELETE HOLE
	AC0002
	TAD	M4
	JMS I	(BUMPXR
	TAD I	PDWSTE
	CIA
	TAD	XR
	TAD	(-DIRECT-372
	SMA CLA
	JMP	NOROOM		/EVENTUALLY, AN OVERLAY TO EXPAND DIRECTORY
	JMS	MOVEUP
EMDONE,	TAD I	EPTR
	TAD	ELENGT
	SNA			/NECESSARY IF TWO FREE ENTRIES IN A ROW
	ISZ I	PDCNT
	NOP
	SZA
	DCA I	XR
	AC7777
	TAD	ETMP
	DCA	XR
	TAD	NAM1
	DCA I	XR
	TAD	NAM2
	DCA I	XR
	TAD	NAM3
	DCA I	XR
	TAD	NAM4
	DCA I	XR
	TAD I	PDATE
	DCA I	XR
	AC0001
	JMS I	(BUMPXR
	TAD	ELENGT
	CIA
	DCA I	XR
	AC7777
	TAD I	PDCNT
	DCA I	PDCNT
	AC4000
	JMS I	(MREADC
	TAD	EBLK
	CIA
	TAD I	PDORG
	JMP I	ENTER
EBLOCK,	0
EBLK,	0

NOROOM,	TAD	P7400
	JMS I	SYSHND
	0100
	3000
	0
	JMP I	.-2		/GO TO DIRECTORY EXPANDER OVERLAY
MOVEUP,	0
EMLOOP,	TAD I	ETMP
	DCA I	XR
	TAD	ETMP
	CMA
	TAD	EPTR
	SNA CLA
	JMP I	MOVEUP
	AC7777
	TAD	ETMP
	DCA	ETMP
	AC7776
	TAD	XR
	DCA	XR
	JMP	EMLOOP
NOSPAC,	JMS I	[ERRMSG
	NORM-1
	JMP I	[NXTLIN
/
	PAGE

/ROUTINE TO SAVE A SOURCE FILE ON A SPECIFIED DEVICE. 
/COMMAND:
/WRITE FILENM,DEV
/
WRITE,	JMS I	[GETNAM
	JMP I	[COMERR
	JMS I	[GETDEV
	TAD	(0123
	DCA	NAM4
	DCA	DBLOCK
	CDF 10
	CMA
WRGTLN,	DCA	GETPNT
	TAD I	GETPNT	/GET LENGTH
	CIA CLL		/MAKE +
	SNA
	JMP	ENDFLD
	TAD	GETPNT
	JMP	WRGTLN
ENDFLD,	CDF 0
	TAD	GETPNT
	SNA			/CHECK FOR COMPLETELY EMPTY WORK AREA
	JMP	NONE		/IF SIZE 0, TELL USER HE IS NOT TOO BRIGHT
	TAD	(401		/401 TO TAKE CARE OF EOF WORD NOT INCLUDED IN COUNT
				/(400 DOES NOT WORK, FRIEND! YOU CAN GUESS HOW WE KNOW)
	AND	P7400
	CLL CML RAR
	TAD	UNIT
	TAD	(10
	DCA	WRCTL
	TAD	WRCTL
	RTL
	AND	P7400
	RTL
	RTL
	SNA
	TAD	(20
	JMS I	(ENTER
	JMS I	KSPLIT
	JMS I	DAVICE
WRCTL,	0
0		/THIS WORD MUST BE ZERO, I.E., 0000, ALWAYS!!!
0
	TNAM1=WRCTL
TNAM2=17	/********MOMENTUS AND COLOSSAL KLUDGE**********
	TNAM3=WRCTL+2
	JMP I	[NXTLIN
/

/ROUTINE TO DECODE THE MNEMONICS "DTN," "RKN," INTO SOMETHING
/MEANINGFUL.
/
GSWITC,	JMS I	[BACK1	/GOT SWITCH, BACK UP 1 CHAR
	JMP	CHKDEV
GETDEV,	0
	TAD	NAM1		/PRESERVE CURENT NAME
	DCA	TNAM1
	TAD	NAM2
	DCA	TNAM2
	TAD	NAM3
	DCA	TNAM3
	DCA	NAM2
	DCA I	[SWITCH
	JMS I	[GETC		/SKIP COMMA
	JMP	GSWITC		/IF NONE
	TAD	(-257
	SNA CLA
	JMP	GSWITCH
	JMS I	[GETNAM
	JMP	GSWITC+1
	TAD	NAM1
	TAD	(-0413		/-DK
	SNA
	JMP	RK
	TAD	(0413-0424	/-DT
	SZA CLA
	JMP	BADDEV		/ILLEGAL DEVICE
DT,	IAC
RK,	IAC
CHKDEV,	TAD	(DEVLST-1
	DCA	GETPNT
	TAD	NAM2
	SNA
	TAD	(6000		/IF NO, ASSUME UNIT 0
BSW006,	BSW			/CHANGES IF NON-8E
	TAD	(-67
	SMA SZA
	JMP	BADDEV
	TAD	P7
	DCA	UNIT
	JMS I	[SCANER		/GET SWITCH
	TAD I	GETPNT		/GET HANDLER ADDR
	DCA	DAVICE
	TAD	TNAM1		/RESTORE OLD NAME
	DCA	NAM1
	TAD	TNAM2
	DCA	NAM2
	TAD	TNAM3
	DCA	NAM3
	JMP I	GETDEV

DEVLST,	0		/GETS SET TO SYSTEM DEVICE POINTER
	RK8
	DTA
NONE,	JMS I	[ERRMSG
	NOFL-1		/"NO FILE TO SAVE"
	JMP I	[NXTLIN
NOFL,	-10		/--------------------"NO FILE TO SAVE"
	4057
	6001
	4752
	5546
	0165
	6001
	6442
	6746
BADDEV,	JMS I	[ERRMSG
	ILUNT-1		/MESSAGE IN  MONITOR -------"ILLEGAL UNIT"
	JMP I	[NXTLIN
/
NORM,	-4		/"NO ROOM"
	5760
	0163
	6060
	5600
/
PAGE

/C A U T I O N : EDITOR OVERLAYS THIS OCCASIONALLY
/
	*4400
/ROUTINE TO TAKE CARE OF SEQUENCE NUMBERS, LABEL CHECKING, AND
/SIMILAR TRIVIA.  CALL:
/JMS	MOUNT
/RETURN
/
P7760,	7760		/*!* MUST BE FIRST LOCATION ON PAGE *!*
	IFNZRO P7760&177 <???> /ERROR
MOUNT,	0
	DCA	NMBR		/MAYBE SAVE LOGICAL UNIT # TO USE
	DCA I	KCTRLO		/THEN TURN OFF ^O
	TAD	W5
	DCA	FMAD
	AC7775
	JMS I	KMOVE		/MOVE IN LABEL TO PRINT
	CDF	BASFLD
FMAD,	0
	LBL1-1
	ISZ I	W5		/BUMP SEQUENCE #.
	TAD I	W5		/IF >63...
	AND	P77		/THIS MAKES AC0
	SNA			/AND IF >63
	JMP	BADSEQ		/GENERATE AN ERROR.
	JMS I	KOTOPD		/CONVERT AC TO DECIMAL ASCII
	DCA I	(SEQ		/AND SAVE HERE.
	TAD	LENGTH
	DCA	FMAD		/REMEMBER CURRENT VALUE OF THIS
	TAD I	W0
	SMA CLA			/INPUT OR OUTPUT?
	AC0002			/INPUT
	TAD	(OUTIN-1
	DCA	INOUT
	AC7776
	JMS I	KMOVE		/BRING IN PROPER LETTERS FOR MESSAGE
	CDF 0
INOUT,	0
	IORO-1			/PUT THEM HERE
	TAD	NMBR		/CHECK TO SEE IF GUY IS TRYING TO PRE-ASSIGN LOGICAL UNITS
	SZA CLA
	JMP	MEOS		/YES, SO TAKE IT AND SEE IF IT'S OK
DOMES,	AC0001
	JMS I	KCDOIO
	TMOUNT-1		/"MOUNT XXXXXX #XX FOR XXXPUT"
KM10,	-10			/NOP
	TAD	P7		/"7" IS JUST AS GOOD AS "207" FOR US
	JMS I	TTYOUT		/THIS IS ANOTHER MARKETING GROOVINESS
	AC7775			/RESET BUFFER LENGTH TO THIS
	DCA	LENGTH		/SINCE OUR BUFFER IS ONLY 4 WORDS LONG
	JMS I	KCDOIO		/NOW GET THE RESPONSE &
EBUFR,	BUFR-1			/PUT IT HERE.
	JMP	DOMES		/GUY OVERFLOWED BUFFER
	DCA	CNUM		/REL. CHAR. 0
	DCA	NMBR
NXTDIG,	TAD	EBUFR		/BUFFER POINTER IN AC
	IAC
	JMS I	KGETC
CNUM,	0
	SNA
	JMP	MEOS		/END OF LINE
	ISZ	CNUM		/BUMP FOR NEXT TIME
	TAD	M33		/MAKE SURE CHAR IS A #
	CLL IAC
	TAD	(11
	SNL
	JMP I	(BADUNT
	DCA	TEMP
	TAD	NMBR		/GET CURRENT VALUE
	CLL RTL			/& MULTIPLY IT BY 10
	TAD	NMBR
	RAL
	TAD	TEMP		/ADD IN NEW #
	JMP	NXTDIG-1
MEOS,	TAD	NMBR		/SEE IF IN RANGE 1-15
	SZA
	TAD	P7760		/-16 IN DISGUISE
	SMA CLA
	JMP I	(BADUNT		/>15!
	TAD I	W1
MP200,	AND	P7760		/CEAR THE LOGICAL UNIT #
	DCA I	W1		/THAT WAS PREVIOUSLY ASSIGNED
	TAD	KM10
	DCA	COUNT
	TAD	(FTBASE+1
	DCA	GET
CHKLP,	CIF 0			/TO TURN OFF INTERRUPTS DURING CHECK PROCESS
				/(NECESSARY ONLY FOR EVENTUAL FOREGROUND/BACKGROUND)
	TAD I	GET
	AND	P17
	CIA
	TAD	NMBR
	SNA CLA
	JMP I	(INUSE
	TAD	GET
	TAD	(TF1-TF0
	DCA	GET
	ISZ	COUNT
	JMP	CHKLP
	TAD I	W1		/OK TO PUT IN LOGICAL UNIT NO.
	TAD	NMBR		/BITS 8-11 ALREADY CLEARED
	DCA I	W1
	TAD	IFN		/WE NOW HAVE TO SET UP "HANDLR"
	JMS I	KPTRST		/NOW THAT W1 IS CORRECT AND THEREFORE U0 WILL BE CORRECT
	TAD I	W1		/GET BUFFER ADDRESS
	AND	P7600
	TAD	M1
	DCA I	W2		/SET UP INTERNAL BUFFER POINTER-1
	TAD I	W0
	RAL
	AND	P7400
	SNL			/READ OR WRITE?
	CLA			/SET BUFFER EMPTY FOR READS
	CIA
	JMP I	.+1
	NEXTP1
MOUNTR,	TAD	FMAD		/RESTORE
	DCA	LENGTH		/VALUE THE USER MAY HAVE HAD
	JMP I	MOUNT
OUTIN,	6066;6561		/OUTP
	0152;5761		/INP
BADSEQ,	AC0001
	JMS I	KCDOIO
	BADS-1
M33,	-33
	JMP I	P7600
INU,	-3			/"IN USE"
	5257
	0166
	6446
/
	PAGE

KK377,	377		/MUST BE FIRST LOCATION ON PAGE!
NEXTP1,	DCA I	W3
	DCA I	W4		/0 HI REL. BLK. BITS
	TAD I	W5		/SET INITIAL BLOCK AS 1
K200,	AND	KK377
	TAD	(400
	DCA I	W5		/TO LEAVE LABEL & BOOSTRAP INTACT IN BLOCK 0
	TAD	M4
	DCA	COUNT
	TAD	W4		/POINTER-1 TO CURRENT LABEL
	DCA	GETPNT
	JMS	RDBLK0
	TAD	RD0CDF
	DCA	BFRFLD
	TAD	RD0CDF
	DCA	LBLCHK
	TAD	RD0CDF
	DCA	BDLCDF
	TAD	ARG2
	DCA	PUTPNT		/POINTER-1 TO BUFFER
	TAD	ARG2		/GET SA -1 OF BUFFER
	IAC
	DCA	FRMADR		/THE "FROM" PLACE
LBLCHK,	HLT
	TAD I	PUTPNT
	CDF	BASFLD
	CIA
	TAD I	GETPNT
	SZA CLA
	JMP	BADLBL
	ISZ	COUNT
	JMP	LBLCHK
	JMP	OOSIK		/LABELS AGREE
BADLBL,	TAD I	W0		/LABELS DISAGREE
	SPA CLA
	JMP	BDLCDF		/ASK REPLACE IF OUTPUT
	TAD	P77		/PRINT "?"
	JMS I	TTYOUT		/TO LET GUY KNOW LABEL NOT FOUND
	JMP I	(DOMES		/NOW RE-ASK MOUNT MESSAGE

BDLCDF,	HLT			/THE "FROM" CDF
	TAD I	FRMADR
	AND	P77
	JMS I	KOTOPD
	DCA	SEQLBL
	AC7775
	JMS I	KMOVE		/MOVE LABEL TO MESSAGE PLACE
	CDF	BASFLD		/CDF "TO" FIELD
FRMADR,	0
TOADR,	LABEL1-1
	TAD	LABEL1
	SMA CLA
	JMP	OOSIK		/FIRST CHAR LABEL + MEANS WORK UNIT, OK TO GRUNCH IT
RM,	DCA I	KCTRLO		/BE SURE ^O IS OFF FOR MESSAGE
	AC0001
	JMS I	KCDOIO
	REPLBL-1		/"REPLACE XXXXXX #XX?
KK5,	5
	JMS I	KCDOIO		/FIND OUT YES OR NO
	BUFR-1
KM7200,	-7200			/NOP
	TAD	BUFR+1
	AND	K7700
	TAD	KM7200		/-Y
	SZA CLA
	JMP I	(DOMES		/REPEAT IF NOT Y
OOSIK,	TAD I	W0		/EITHER LABEL AGREES, OR WE DON'T CARE
K7700,	SMA CLA			/READ OR WRITE
	JMP	MEXIT		/IF READ, NO MORE TO DO
	TAD	W4
	DCA	BFRM
	TAD	ARG2
	DCA	BTOADR
	TAD	M4
	JMS I	KMOVE		/MOVE IN NEW LABEL & DATE
BFRFLD,	0			/"TO" FIELD
BFRM,	0			/"FROM" PLACE
BTOADR,	0			/"TO" PLACE
	AC4000
	JMS	RDBLK0
MEXIT,	JMP I	.+1		/FINALLY!
	MOUNTR

BUFR,	0;0;0		/PLUS ENTRY TO RDBLK0
RDBLK0,	0
	TAD	P77
	AND I	W0
	TAD	K200
	DCA	ARG1
	TAD I	W1
	AND	P7600
	DCA	ARG2
	TAD	ARG1
	AND	P70
	TAD	PCDF
	DCA	RD0CDF
	TAD	ARG2
	TAD	KK5
	DCA	HIBLK
	TAD I	W4
	DCA	BTOADR
	TAD I	M1		/GET CURRENT DATE
RD0CDF,	HLT
	DCA I	HIBLK
	ISZ	HIBLK
	TAD	BTOADR
	DCA I	HIBLK
	CDF	BASFLD
	TAD I	U1
	DCA	HIBLK
	JMS I	HANDLR
ARG1,	0
ARG2,	0
HIBLK,	0
	JMP I	RDBLK0
REPLBL,	-12
	6346	/RE
	6155	/PL
	4244	/AC
SEQOUT,	4601	/E
LABEL1,	0
LABEL2,	0
LABEL3,	0
	0104	/ #
SEQLBL,	0	/XX
	4000	/?
/
	PAGE

CTRLO,	0		/MUST BE FIRST LOCATION ON PAGE!!
TSTTTI,	KSF			/KBD?
	JMP	TSTTTO		/NOPE, TRY TTY
	TAD	TTI200
	KRS
	DCA	TICHR
	KCC
	TAD	TICHR
	TAD	(-203		/TEST FOR ^C
CTCFIX,	SNA
	JMP	TICTLC
	TAD	(-13		/& ^N
	CLL RAR
	SZA CLA
	JMP I	(DISMIS
	SNL
	ISZ I	(CTRLN
	SZL
FOFF,	ISZ	CTRLO
PTR232,	232
	DCA	TICHR
	JMP I	(DISMIS
TSTTTO,	TSF			/BETTER BE TTY INTERRUPT
	JMP	BADINT		/IGNORE, ON PENALTY OF DEATH
	TCF
	DCA	TOCHR		/SET NOT BUSY
	JMP I	(DISMIS
IFZERO LP645 <
BADINT,	LSE	/MAKE AN EFFORT (MEAGER AT BEST) TO FIND BAD INTERRUPT
	SKP
	LIF		/LPT ERROR FLAG, DISABLE LPT FROM INTERRUPT>
IFNZRO LP645 <
BADINT,	6651
	SKP
	6652>
	JMP I	(TTYCLR

TTOCHR,	0			/TTY OUTPUT ROUTINE
	DCA	TTICHR
DLYLUP,	AC0001
TTI200,	AND	CTRLO		/INHIBIT OUTPUT IF ^O
	SZA CLA
	JMP I	TTOCHR
	TAD	TOCHR
	SZA CLA
	JMP	.-2
	ISZ	DELAY		/GIVE TIME FOR "FAST" (>300 BAUD) VT05'S TO DO THE THING
	JMP	DLYLUP
	TAD	TTICHR
DLYFAC,	ISZ	TOCHR		/SET "BUSY"
	TLS
	TAD	KM212F
	SNA CLA
	TAD	DLYFAC		/DELAY FOR LINEFEED + DELAY LOOP MUST GIVE TOTAL DELAY OF 1/60 SEC
	CMA			/IF NOT LINEFEED, MAKE ISZ SKIP FIRST TIME
	DCA	DELAY
	JMP I	TTOCHR
DELAY,	0
KM212F,	-212
/RE: THIS DELAY STUFF...FIND UNCLE CHARLIE'S KITE IN TEWSKBURY...IT'S A LONG, SAD STORY
TTICHR,	0
	TAD	TICHR		/WAIT FOR CHAR
	SNA
	JMP	.-2
	DCA	TTOCHR
	DCA	TICHR
	TAD	TTOCHR
	JMS I	KWHYME		/WHY ME, WITH THIS NUMERIC KEYPAD THING?
TTEXIT,	JMP I	TTICHR
KWHYME,	WHYME
TICHR,	0
	IFNZRO TICHR-5077 <???> /ERROR RSYS
TOCHR,	0
TICTLC,	DCA I	(TF0		/TURN OFF "DO" MODE
	TAD	CTCFG		/^C DETECTED - IS IT INHIBITED?
	SMA SZA CLA
	JMP I	P7600		/NO
	AC7777			/YES - SET FLAG
	DCA	CTCFG
	JMP I	(DISMIS		/& RETURN
/
TSTRDR,	RSF			/WAS IT PTR?
	JMP	TSTPTP		/NOPE, TRY PUNCH
	TAD	TTI200
	RRB			/READ CHR, FORCE PARITY
	DCA	PICHR
TSTPTP,	PSF			/PUNCH?
	JMP	TSTTTI		/NO, TRY KBD
	PCF
	DCA	POCHR		/CLEAR FLAG TO SHOW DONE
	JMP I	(DISMIS
PPOCHR,	0
	DCA	TTICHR
	TAD	POCHR
	SZA CLA
	JMP	.-2
	ISZ	POCHR		/SET BUSY
	TAD	TTICHR
	PLS
	CLA
	JMP I	PPOCHR
POCHR,	0
PRICHR,	0
	DCA	TTICHR		/SET COUNTER = 0
	AC7775
	DCA	PPOCHR		/SET OUTER COUNTER TO -3
PTRWT,	TAD	PICHR		/GET CHAR BUFFER WORD
	SMA SZA
	JMP	PTRCHI		/POS MEANS CHAR
	SZA CLA
	JMP	PTRST		/NEG MEANS READER STOPPED
				/ZERO MEANS WAITING
	ISZ	TTICHR		/WAIT FOR CHAR
	JMP	PTRWT		/WITH TIMEOUT
	ISZ	PPOCHR		/TRY OUTER LOOP
	JMP	PTRWT		/KEEP WAITING
	AC4000			/OPPS - TIME 'S UP
	DCA	PICHR		/SET BUFFER NEG
	TAD	PTR232
	JMP I	PRICHR		/RETURN ^Z
PTRCHI,	DCA	TTOCHR
	DCA	PICHR
	RFC			/RESTART RDR
	TAD	TTOCHR
	JMP I	PRICHR		/RETURN CHAR
PTRST,	DCA	PICHR		/START RDR
	RFC
	JMP	PRICHR+1
PICHR,	4000			/SET INITIAL READER STATE AS "QUIET"
/
	PAGE

/CALLING SEQUENCE: SAME AS RDOIO, EXCEPT AC CONTAINS FIELD + DEVICE
/NUMBER, AND "ERROR" RETURN IS TAKEN FOR ^Z ON INPUT.
/DEVICE #S ARE:
/TTYIN = 0
/TTYOUT = 1
/CDR = 2
/PTP = 3
/PTR = 4
/LPT = 5
/NULLIN = 6
/NULOUT = 7
CDOIO,	0
	DCA	DEVNUM
	TAD	DEVNUM
	AND	P70
	TAD	PCDF
	DCA	LINFLD
	TAD I	CDOIO		/GET BUFFER ADDR-1
	ISZ	CDOIO
	IAC
	DCA	RECADR
	TAD	DEVNUM		/GET DEVICE #
	AND	P7	
	TAD	(TAD	DEVTBL
	DCA	DEVADR
DEVADR,	0			/PICK UP HANDLER ADDRESS
	DCA	DEVADR		/SAVE HANDLER ADDRESS HERE
	DCA	WRELC		/0
	TAD	DEVNUM		/HANDLER NUMBER
	RAR
	SNL CLA			/ODD OR EVEN?
	JMP	READC		/EVEN=READ DEVICES (KBD,PTR,CDR)
DOWR,	JMS	SETLDF		/GET CHAR FROM BUFFER
	TAD	RECADR
	JMS I	KGETC
WRELC,	0
	SNA
	JMP	WEOL		/0 RETURNED FOR END-OF-RECORD
	TAD	(237		/MAKE IT GENUINE ASCII
	JMS I	DEVADR		/OUTPUT IT TO TTY,LPT, OR PTP
	ISZ	WRELC		/BUMP REL. CHAR.
	JMP	DOWR
GOTCTU,	JMS	TCRLF
READC,	DCA	RRELC		/0
RAC,	CLA
	JMS I	DEVADR		/GET CHAR FROM KBD,PTR, OR CDR
	TAD	(-334
	SZA
	TAD	(-3
	SMA
	JMP	RAC
	TAD	(337-225
	SNA			/CTRL/U?
	JMP	GOTCTU
	TAD	(225-232
	SNA			/CTRL/Z?
	JMP	GOTCTZ
	TAD	(232-211
	SNA			/TAB?
	TAD	(123
	TAD	M4
	SNA
	JMP	GOTCR
	TAD	(-22
	SPA SNA			/LESS THAN 237 IS IGNORED
	JMP	RAC
	JMS	ECHO
	TAD	RRELC		/NOW SEE IF WE HAVE ROOM TO PUT IN NEXT CHAR
	CLL RAR
	CLL
	TAD	LENGTH
	SZL CLA
	JMP	TOOLNG		/BUFFER FULL!
	TAD	TEMP
	JMS	CDOPUT
	JMP	RAC		/READ NEXT CHAR
CRLF,	0
	TAD	(215
	JMS I	DEVADR
	TAD	(212
	JMS I	DEVADR
	JMP I	CRLF
WEOL,	JMS	CRLF		/AT END OF OUTPUT LINE
	ISZ	CDOIO
	JMP I	CDOIO
GOTCR,	ISZ	CDOIO		/BUMP EXIT RETURN HERE
	TAD	RRELC
	SNA CLA			/WATCH OUT FOR NULL LINES!
	JMS	CDOPUT		/(BUT NOT IF CTRL/Z)
TOOLNG,	TAD	RRELC		/GET BUMPED COUNT
	CIA			/NEGATE
	CLL CML RAR		/DIVIDE BY 2 TO GET WORD COUNT
GOTCTZ,	JMS	SETLDF		/--CDF BUFFER FIELD
	DCA I	RECADR		/PUT IN WORD COUNT
	CDF BASFLD
	JMS	TCRLF
	JMP I	CDOIO

ECHO,	0
	DCA	TEMP
	TAD	DEVNUM
	AND	(6
	IFNZRO TTYIN&7 <???> /ERROR - THIS TEST FOR ECHO WON'T WORK
	SZA CLA
	JMP I	ECHO
	TAD	TEMP
	TAD	(237		/CONVERT TO ASCII
	JMS I	TTYOUT
	JMP I	ECHO
SETLDF,	0
LINFLD,	0
	JMP I	SETLDF
CDOPUT,	0
	JMS	SETLDF		/--CDF RECORD FIELD
	JMS I	KPUTC
RECADR,	0			/RECORD ADDR.
RRELC,	0			/REL. CHAR.
	ISZ	RRELC
	JMP I	CDOPUT
DEVNUM,	0
TCRLF,	0
	TAD	(-22
	JMS	ECHO
	TAD	(-25
	JMS	ECHO
	JMP I	TCRLF
/
	PAGE

UNDEF,	0		/UNDEFINED LOGICAL UNIT JMS
	IFNZRO UNDEF-5400 <???> /ERROR
BADUNT,	CLA
	TAD	(ILUNT-1-INU+1
INUSE,	TAD	(INU-1
	DCA	ERP
	AC0001			/+1 FOR TTY
	JMS I	KCDOIO
ERP,	ILUNT-1			/"?ILLEGAL UNIT
KM12,	-12
	JMP I	(DOMES

/ROUTINE TO CONVERT OCTAL TO PACKED ASCII DECIMAL
/CALL WITH OCTAL # 0-143 IN AC AND "COUNT" =0
/EXIT WITH TWO 6-BIT ASCII DIGITS IN AC, 00-99.
/
OTOPD,	0
	DCA	TEMP
	DCA	COUNT
	TAD	TEMP
	ISZ	COUNT
	TAD	KM12		/-10 IN DISGUISE
	SMA
	JMP	.-3
	DCA	TEMP
	TAD	COUNT		/GET TENS
BSW007,	BSW			/CHANGES IF NON-8E
	TAD	TEMP		/AND ONES IN LOW HALF
	TAD	(2033		/MAKE ASCII
	JMP I	OTOPD
/
CLOSE,	0
	JMS I	KPTRST
	TAD I	W0
	SMA CLA
	JMP	CLOSRD
	TAD I	W3		/(-) # OF WORDS LEFT IN BUFFER
	AND	P7400
	CLL CML RAR		/DIV BY 2
	TAD	(200
	TAD I	W0		/MAKE W0 SHOW AMOUNT ACTUALLY USED
	DCA I	W0
	AC7776			/FUDGE W3
	DCA I	W3		/SO WE NEVER DO OUTPUT
	TAD	IFN
	JMS I	KRDOIO		/INSERT LENGTH OF 0 FOR EOF
	ZERO-1
	/NOTE - RDOIO WILL ALWAYS TAKE ITS ERROR RETURN HERE, SO TWO RETURN
	/POINTS ARE NOT NEEDED
	JMS	GPBUF		/OUTPUT LAST BUFFER.
	JMS I	(RDBLK0
	TAD I	W5		/SEE IF WE HAVE A PARTIAL SEGMENT
	AND	P7400
	SZA CLA
	ISZ I	W4		/IF SO, BUMP W4 TO SHOW IT
	AC4000
	JMS I	(RDBLK0
CLOSRD,	DCA I	W0
	DCA I	W1		/CLEAR UNIT WORD TO PREVENT "IN USE" MESSAGES
	JMP I	CLOSE

GPBUF,	0
	TAD I	W5		/SAVE REL. BLK BITS
	DCA	GTEMP
NOTLST,	TAD I	U1
	TAD I	W4
	DCA	HIBLKA
	TAD I	W0
	AND	(3600
	CLL RAL
	TAD I	W5		/UPDATE LOW REL. BLK BITS
	DCA I	W5
	SZL
	ISZ I	W4
	TAD I	W4
	TAD I	U2
	SZA CLA			/END OF UNIT?
	JMP	FULLOK		/NOT YET
	TAD I	W5		/GET LOW REL BLK BITS
	AND	P7400
	CLL RAR
	CIA
FULLOK,	TAD I	W0
	DCA	ARG1A
	TAD I	W1
	AND	P7600
	DCA	ARG2A
	TAD	GTEMP
	AND	P7400
	JMS I	HANDLR		/CALL THE CORRECT LOW-LEVEL HANDLER
ARG1A,	0
ARG2A,	0
HIBLKA,	0
	TAD I	W0		/BUMP W3 TO NEXT RELATIVE BLOCKS
	RAL
	AND	P7400
	CIA
	DCA I	W3
	TAD I	W1		/RESET W2
	AND	P7600		/TO THE BEGINNING OF THE BUFFER
	TAD	M1
	DCA I	W2
	JMP I	GPBUF

/ROUTINE TO MOVE CORE LOCATIONS AROUND.
/CALL:
/CDF	(FROM FIELD
/TAD	(-COUNT
/JMS	MOVE
/CDF	(TO FIELD
/"FROM" ADDR-1
/"TO" ADDR-1
/RETURN
/
GTEMP,
MOVE,	0
	DCA	COUNT
	JMS	CDFSET
	DCA	FRFLD
	TAD I	MOVE		/GET "TO" CDF
	ISZ	MOVE
	DCA	TOFLD
	TAD I	MOVE		/GET "FROM" ADDR-1
	ISZ	MOVE
	DCA	GETPNT
	TAD I	MOVE		/GET "TO" ADDR-1
	ISZ	MOVE
	DCA	PUTPNT
FRFLD,	HLT			/CDF FROM
	TAD I	GETPNT
TOFLD,	HLT			/CDF TO
	DCA I	PUTPNT
	ISZ	COUNT
	JMP	FRFLD
	CDF	BASFLD
	JMP I	MOVE		/DONE THE THING
CDFSET,	0
	RDF
	TAD	PCDF
	CDF 0
	JMP I	CDFSET
/
	PAGE

/ROUTINE TO GET AND PUT THINGS THAT LOOK LIKE DIBOL DATA RECORDS.
/THAT IS, WITH WORD COUNT FOLLOWED BY PACKED ASCII.  CALL:
/TAD	(FIELD+IFN
/JMS	RDOIO
/RECORD BUFFER ADDR-1
/EOF,EOS,EOU RETURN (EOF=0, EOS=+1, EOU=+2)
/OK RETURN
/END-OF-STRING AND END-OF-UNIT ARE IGNORED EXCEPT BY SORT.
/THE ONLY WAY YOU CAN GET AN EOU RETURN IS BY PATCHING "SRTFLG".
/
RDOIO,	0
/	CIA		/THIS OPTOMIZATION DOESN'T WORK WITH COMP!
/	TAD	TIFN
/	SNA			/DO WE NEED TO CALL PTRSET?
/	JMP	RDOREN		/IF NOT, DON'T
/	CIA
/	TAD	TIFN
	DCA	TIFN
	TAD	TIFN
	JMS I	KPTRST
RDOREN,	TAD I	W0
	SNA
	JMP	NOINIT
BS7700,	SMA CLA
	AC0002
	TAD	(DCA I	DOLIST
	DCA	DOSTOR
	TAD	TIFN
	AND	P70
	TAD	PCDF
	JMS	STORE		/CDF LINE BUFR
	TAD I	RDOIO
	JMS	STORE		/LOC OF LINE BUFR
	TAD I	W0
	AND	P70
	TAD	PCDF
	JMS	STORE		/CDF I/O BUFR
	TAD	DOSTOR
	DCA	RESTOR
	TAD I	W3
	SNA CLA			/BUFR EMPTY?
	JMS I	KGPBUF		/
	TAD I	W2
	JMS	STORE		/CURR. LOC'N CTR IN BUFR
	TAD	GETCDF
	DCA	.+1
	0
	TAD I	GETPNT		/GET WORD CNT
	DCA	COUNT
	CDF	BASFLD
	TAD I	W0
	SMA CLA			/READ OR WRITE?
	JMP	ITSOK		/IF READ, DON'T NEED TO CHECK FOR OVERFLOW
	TAD I	W1		/GET STARTING ADDR OF BUFFER
	AND	P7600
	TAD	COUNT		/SUBTRACT LENGTH OF NEXT RECORD
	TAD	M4		/4 FOR A SAFETY MARGIN
	CIA
	TAD I	W2		/GET INTERNAL BUFFER POINTER
	AND	P7400	/THIS GIVES NUMBER OF TOTALLY FILLED RECORDS WE'LL HAVE IF WE ADD NEXT LINE
		/*** NOTE - THIS IS ONLY APPLICABLE FOR OUTPUT
	CLL
	TAD I	W5
	CLA RAL
	TAD I	W4
	TAD I	U2
	SZA CLA			/WILL THE UNIT BE TOTALLY FILLED BY THIS LAST RECORD?
	JMP	ITSOK		/NO - ALL THOSE GROOVY CHECKS GONE TO WASTE
	AC7777
	DCA I	W3
	AC0002
	JMS	PUTBMP
	JMP	MTTRGN
ITSOK,	TAD	COUNT
	JMS	PUTBMP
	TAD	COUNT		/COUNT = +1 MEANS END-OF-STRING
	SMA
	JMP	GRUNKL		/IF >=0, A SPECIAL THINGIE
	CLL CML CIA
	TAD	LENGTH		/CHECK FOR OVERFLOW OF BUFFER
	SZL SNA CLA
	JMP	GETCDF
GRUNKL,	AC7776			/COUNT = +2 MEANS END-OF-UNIT
	TAD	COUNT
SRTFLG,	SZA CLA			/SET TO "CLA" BY PRESORT - SUPERKLUDGE!
	JMP	RDOIOE
MTTRGN,	JMS I	(MOUNT
	JMP	RDOREN		/RETRY
GETCDF,	HLT
	TAD I	GETPNT
	JMS	PUTBMP
ISZCNT,	ISZ	COUNT
	JMP	GETCDF
	ISZ	RDOIO
RDOIOE,	ISZ	RDOIO
	JMP I	RDOIO
STORE,	0
DOSTOR,	HLT			/DCA I DOLIST+N
	ISZ	DOSTOR
	JMP I	STORE

PUTBMP,	0
PUTCDF,	HLT
	DCA I	PUTPNT
	CDF	BASFLD
	ISZ I	W2		/MAY SKIP!!!!!!! (GUESS HOW WE KNOW)
	NOP
	ISZ I	W3
	JMP I	PUTBMP
	JMS I	KGPBUF
	TAD I	W2
RESTOR,	HLT			/DCA GETPNT OR DCA PUTPNT
	JMP I	PUTBMP
DOLIST,	GETCDF
	GETPNT
	PUTCDF
	PUTPNT
	GETCDF
	GETPNT
NOINIT,	AC0001			/+1 FOR TTY
	JMS I	KCDOIO
	NOIN-1
K377,	377
	JMP I	P7600
TIFN,
BSWX,	0			/IT WORKS AND PRESERVES THE LINK.
	DCA	PUTBMP
	RTR
	RTR
	RTR
	TAD	PUTBMP
	AND	BS7700
	TAD	PUTBMP
	RTL
	RTL
	RTL
	JMP I	BSWX
TTYCLR,	6302			/IOT CLEARS FOR EXTRA TERMINALS
	6322
	6342
	6362
	6402
	6422
	JMP I	(DISMIS
/
	PAGE

/TAD (BUFFER POINTER
/CDF (BUFFER FIELD
/JMS MGETC
/<RELATIVE CHARACTER#>
/<RETURN, CHAR IN AC OR 0 IF END OF RECORD OR LINE>
/MUST BE CALLED FROM FIELD 0, AND THE
/BUFFER CANNOT CROSS A FIELD BOUNDARY
MGETC,	0
	DCA	PUTC		/SAVE BUFFER POINTER
	JMS I	(CDFSET
	DCA	MGCDF
	TAD I	MGETC		/GET RELATIVE CHAR
	ISZ	MGETC
	CLL RAR			/FORM WORD NO.
	DCA	TEMP
	TAD	TEMP
	TAD	PUTC		/FORM POINTER TO WORD
	IAC			/SKIP OVER WORD COUNT
	DCA	GET
	TAD	TEMP		/RELATIVE WORD WE WANT
MGCDF,	HLT
	TAD I	PUTC		/GET WORD COUNT
	SPA CLA			/CHECK FOR GOING OFF END OF RECORD...SKP IF WE DO
	TAD I	GET		/GET THE CHAR
	SNL			/IF LINK=1, WANT RIGHT HALF
BSW008,	BSW			/CHANGES IF NON-8E
RGRR,	AND	P77
	CDF BASFLD
	JMP I	MGETC

/TAD (CHAR
/CDF (BUFFER FIELD
/JMS PUTC
/<BUFFER ADDRESS>
/<CHAR, #>
/<RETURN, AC=IF=DF=0>
/MUST BE CALLED FROM FIELD 0
/AND BUFFER CANNOT CROSS A FIELD BOUNDARY
PUTC,	0
	AND	P77
	DCA	TEMP		/SAVE CHAR
	JMS I	(CDFSET
	DCA	MPCDF
	TAD I	PUTC		/GET BUFFER ADDRESS
	ISZ	PUTC
	CLL RAL
	TAD I	PUTC		/GET CHAR #
	ISZ	PUTC
	RAR			/MAKE CHAR # INTO WORD#
	IAC			/BUMP PAST RECORD WORD COUNT
	DCA	PUT
MPCDF,	HLT
	SZL
	TAD I	PUT
	AND	(7700
	TAD	TEMP
	SNL
BSW009,	BSW			/SOME OF THESE MODS HAVE EGREGIOUS RESULTS
	DCA I	PUT
	CDF 0
	JMP I	PUTC
NOIN,	-6
	5760	/NO
	0152	/ I
	5752	/NI
	6501	/T
	4560	/DO
	5746	/NE
ILUNT,	-6			/"ILLEGAL UNIT"
	5255
	5546
	5042
	5501
	6657
	5265

/ENTER WITH IFN IN AC
/SETS W0-W5,U0-U2 TO POINT TO
/THE CORRECT TFT AND UT ENTRIES
/235 CYCLES EXCLUDING CALL
/
PTRSET,	0
	AND	P7
	DCA	IFN
	TAD	NOIN		/-6 IS WHAT COUNTS
	DCA	COUNT
	TAD	(W0-1
	DCA	PUTPNT
	TAD	(U0-4
	DCA	GETPNT
	CDF BASFLD		/"PROTECTION AGAINST R.L."  -RL
PTSETL,	TAD	IFN
	CLL RTL
	RAL
	TAD	IFN
	TAD	(FTBASE+6
	TAD	COUNT
	DCA I	PUTPNT
	TAD I	W1
	CLL RAL
	TAD I	W1
	AND	P77
	TAD	(UTBASE+3
	TAD	COUNT
	DCA I	GETPNT
	ISZ	COUNT
	JMP	PTSETL
	TAD I	U0		/NOW SET UP "HANDLR" FOR CORRECT LOW-LEVEL I/O
	AND	K7770
	DCA	HANDLR		/WITH PHYSICAL DEV. # REMOVED.
	TAD I	U0
	AND	P7		/GET PHYS. DEV.
	DCA	PUTC
	TAD I	W0
	AND	K7770		/PREPARE TO PUT IT HERE...
	TAD	PUTC
	DCA I	W0
	JMP I	PTRSET

/TAD	(IFN
/	JMS	INIT
/R/W,LENGTH,FIELD
/BUFFER
/LABEL POINTER-1
/<OK>
INIT,	0
	JMS	PTRSET		/U0-U2 AT THIS POINT WILL BE JUNK
	TAD I	INIT		/R/W,LEN,FIELD
	ISZ	INIT
	DCA I	W0
	TAD I	INIT
	ISZ	INIT
	DCA I	W1
	TAD I	INIT
	ISZ	INIT
	DCA	MVARG1
	TAD	W5
	DCA	MVARG2
	AC7775
	JMS I	KMOVE
	CDF	BASFLD
MVARG1,	0
MVARG2,	0
	DCA I	W5		/CLEAR SEQUENCE #
	TAD	IZERO		/SYSTEM PROGRAMS SET IZERO TO WHATEVER, IF
				/THEY ARE PRE-ASSIGNING LOGICAL UNITS
	JMS I	(MOUNT
	DCA	IZERO		/PROTECTION
	JMP I	INIT
IZERO,	0			/USUALLY 0, MAY BE SET TO A LOGICAL UNIT #
/
K7770,	7770			/SKP ... CLA
	/
	PAGE

/PERMANENT FILE TABLE
UTBASE=.
PF0,	SYSDEV+0;0;-56		/THREE WORDS FOR EACH
PF1,	DTA+1;0;-56
PF2,	DTA+2;0;-56
PF3,	DTA+3;0;-56
PF4,	DTA+4;0;-56
PF5,	DTA+5;0;-56
PF6,	DTA+6;0;-56
PF7,	DTA+7;0;-56
PF8,	UNDEF;0;0
PF9,	UNDEF;0;0
PF10,	UNDEF;0;0
PF11,	UNDEF;0;0
PF12,	UNDEF;0;0
PF13,	UNDEF;0;0
PF14,	UNDEF;0;0
PF15,	UNDEF;0;0

FTBASE=.
	IFNZRO FTBASE-6260 <???> /ERROR - EDIT
/TEMPORARY FILE TABLE
TF0,	0;0;0;0;0;0;0;0;0	/NINE WORDS FOR EACH
TF1,	0;0;0;0;0;0;0;0;0
TF2,	0;0;0;0;0;0;0;0;0
TF3,	0;0;0;0;0;0;0;0;0
TF4,	0;0;0;0;0;0;0;0;0

TF5,	0;0;0;0;0;0;0;0;0
TF6,	0;0;0;0;0;0;0;0;0
TF7,	0;0;0;0;0;0;0;0;0
SBT,	0;0;0;0;0;0;0;0	/RUNTIME FILE TABLE
/STARTING BLOCKS OF FILES SPECIFIED IN "RUN" COMMAND
/
/	- CAUTION...MONITOR (EDITOR) NEEDS TF TABLE NEXT TO SB TABLE

	IFZERO RKDISK <
	DLDC=6732
	DLWC=6753
	DLDR=6733
	DLCA=6755
	DSKD=6745
	DSKE=6747
	DKRE=7325
	DCLS=6742
	DRDS=6741
	DCLA=6751
	DRCA=6757
	DRDA=6734
	DRWC=6752
	0		/PROTECTION FOR SBT
RK4,	4
RKOVER,	ISZ	CTCFG		/RE-ENABLE CTRL/C
	JMP I	RK8
	JMP I	R87600		/CTRL/C TYPED WHILE INHIBITED - BOOTSTRAP
RKDLDR,	DLDR
RKCNT,	0
	4554			/"DK"
RK8,	BOOTRE
	IFNZRO RK8&7 <???> /ERROR - MUST START ON 10-WORD BOUNDARY
	DCA	RKLOW		/SAVE LO-ORDER ADDR
	DCA	CTCFG		/INHIBIT CTRL/C
	AC7775
	DCA	RKCNT		/# OF TRIES ON ERROR
RKRETR,	TAD I	RK8
	AND	RK4
	SZA CLA			/DON'T ALLOW UNIT #S .GT. 3
	JMP	RKBAD
	TAD I	RK8
	AND	R87
	TAD I	RK8
	AND	R877		/UNIT #*2+FIELD
	DLDC
	TAD I	RK8
	RAL
	AND	R87600
	SZA
	CIA
	DLWC			/LOAD WORD COUNT
	RTL
	TAD	RKDLDR
	DCA	RKINST		/READ (6733) OR WRITE (6735)
	ISZ	RK8
	AC7777
	TAD I	RK8
	DLCA			/LOAD CURRENT ADDRESS
	SZA CLA			/CHECK FOR NO DISK AT ALL
	JMP	RKBAD
	ISZ	RK8
	DCLS
	CLL
	DSKE			/CHECK FOR NON-EXISTENT DISK ERROR
	SKP
	JMP	RKBAD		/IT SURE IS
	TAD I	RK8
	TAD	RKLOW		/GET BLOCK ADDRESS
	TAD	RKLOW
	RTL
	RTL
	ISZ	RK8
RKINST,	6733			/GO!
RKINTL,	DSKD
	JMP	.-1		/& WAIT...
	DSKE
	JMP	RKOVER		/NO ERROR
	DRDS
	AND	RK4		/CHECK FOR TRACK OVERFLOW
	SZA CLA
	JMP	RKTKOV
	ISZ	RKCNT		/SOME OTHER ERROR - BADNESS
	JMP	RKOK
RKBAD,	TAD	RK8-1
	JMS I	RKIODI		/TRIED 3 TIMES - GO AWAY
	AC7775
	DCA	RKCNT
RKOK,	DRDS
	AND	RKP40		/TRACK SEEK ERROR?
	DCLS
	SNA CLA
	JMP	RKBACK
	DCLA			/YES - RECALIBRATE
	DSKD
	JMP	.-1
RKBACK,	AC7775
	TAD	RK8
	DCA	RK8
	JMP	RKRETR		/GO TRY AGAIN
RKTKOV,	DCLS
	DRDA
	AND	RK7760		/??
	TAD	RKP20		/BUMP TRACK NUMBER
	JMP	RKINST		/GO BACK & DO REST OF TRANSFER
RKLOW,	0
R87,	7
RKP20,	20
RKP40,	40
R877,	77
R87600,	7600
RK7760,	7760
RKIODI,	IODIE>

	IFNZRO RKDISK <
	DCLR=6742
	DLAG=6743
	DLDC=6746
	DRST=6745
	DSKP=6741
	DLCA=6744
CHKHED,	0
R3700,	3700			/"R3700" MUST BE AT RELATIVE LOCATION 201
KIODIE,	IODIE
GARG,	0
TRYRK,	0
R4077,	4077
PAGCNT,	0
RKCODE,	4554			/"DK"
RK8,	0			/MUST BE AT *6410
	DCA	GARG		/ENTER WITH LOW BLOCK BITS IN AC
	TAD I	RK8
	AND	RE7		/GET UNIT BITS
	TAD I	RK8		/MULTIPLY THEM BY 2
	AND	R4077		/AND GET R/W AND FIELD BITS
	DCA	RKECMD
	TAD I	RK8
	ISZ	RK8
R201,	AND	R3700		/GET # OF PAGES TO DO
	SNA			/0 IMPLIES 40...
	AC4000
	DCA	PAGCNT
	TAD I	RK8		/GET CURRENT ADDRESS
	ISZ	RK8
	DCA	RCA		/RCA IS A REGISTERED TRADEMARK OF RADIO CORPORATION OF AMERICA?
	DCA	CTCFG		/TURN OFF ^C
	TAD	GARG
	CLL RAL			/COMBINE HIGH + LOW BLOCK #
	TAD I	RK8
	ISZ	RK8
	RTL
	RTL
	DCA	GARG
	SZL			/CHECK FOR POSSIBLE "SUPER CYLINDER" BIT
R2,	ISZ	RKECMD		/IF IT IS THERE
R1,	DCA	CHKHED
RKRETR,	AC7775
	DCA	TRYRK
RELPX,	DCLR			/CLEAR STATUS
	TAD	RCA
	DLCA			/LOAD CURRENT ADDRESS
	TAD	PAGCNT
	AND	RE7600
	SNA CLA
	TAD	R201
	TAD	CHKHED
	CLL RAR
	TAD	RKECMD
	DLDC			/LOAD COMMAND REGISTER
	TAD	GARG		/NOW GET DISK ADDRESS
	DLAG			/AND START IT GOING
RKINTL,	DSKP
	JMP	.-1
	DRST			/GET STATUS
	CLL RAL
	SZA CLA
IFZERO EPOT+EPOT2 < JMP RKEBAD >		/OH WELL
IFNZRO EPOT+EPOT2 <XLIST	/PRINT THIS
JMP I KZEPO	/PRINT OUT REGISTERS
	XLIST>
	TAD	PAGCNT
	TAD	RE7600
	SPA SNA
	JMP	RKDONE
	DCA	PAGCNT
	TAD	RCA
	TAD	R400		/BUMP CURRENT ADDRESS
	DCA	RCA
	TAD	GARG
	CMA
	AND	RK37
	SZA CLA			/CHECK FOR NEW TRACK
	AC2000			/IF NOT, SET "DON'T CHECK HEADER"
	ISZ	GARG		/BUMP BLOCK #
	JMP	R1
	JMP	R2		/BUMP "SUPER CYLINDER" BIT IF BLOCK # OVERFLOWED 7777
RKEBAD,	DCLR			/RECALIBRATE
	AC0002
	DCLR
	DSKP
	JMP	.-1
	DCLR
	DRST
	SZA CLA
	JMP	.-2
KZZRT,	DCA	CHKHED		/RETURN FROM ERROR PRINTOUT
	IFZERO EPOT+EPOT2 <
	ISZ	TRYRK		/HAVE WE ALREADY TRIED THIS FOOLISHNESS ENOUGH?
	JMP	RELPX >		/'FRAID NOT
	IFNZRO EPOT+EPOT2 < XLIST	/PRINT THIS
	JMP	.+2 >
	IFNZRO EPOT <
KZEPO,	EPO 			/ADDRESS OF ERROR PRINTOUT
	XLIST >
	IFNZRO EPOT2 <
KZEPO,	EPO2 			/ADDRESS OF REGISTER EXAMINE
	XLIST >
	TAD	RKCODE
	JMS I	KIODIE		/TELL USER THE BAD NEWS
	JMP	RKRETR
RE7600,
RKDONE,	7600
	ISZ	CTCFG		/RE-ENABLE ^C
	JMP I	RK8
	JMP I	RE7600
RKECMD,	0
R400,	400
RK37,	37
RE7,	7
RCA,	0>

	*6540
/CARD READER TRANSLATION TABLE
/CHARACTERS ARE IN -240 CODE
/
CDTBL,	0021	/0001	/ 1
	2223	/0203	/23
	2425	/0405	/45
	2627	/0607	/67
	3031	/1011	/89
	3203	/1213	/:#
	4007	/1415	/@'
	3502	/1617	/="
	2017	/2021	/0/
	6364	/2223	/ST
	6566	/2425	/UV
	6770	/2627	/WX
	7172	/3031	/YZ
	7514	/3233	/],
	0577	/3435	/%_
	3637	/3637	/>?
	1552	/4041	/-J
	5354	/4243	/KL
	5556	/4445	/MN
	5760	/4647	/OP
	6162	/5051	/QR
	0104	/5253	/!$
	1211	/5455	/*)
	3374	/5657	/;\  (334=TAB)
	0641	/6061	/&A
	4243	/6263	/BC
	4445	/6465	/DE
	4647	/6667	/FG
	5051	/7071	/HI
	7316	/7273	/[.
	3410	/7475	/<(
	1376	/7677	/+^
/
	PAGE

	IFZERO TAPE <
DTAWC,	7754
	/NOTE! SYSGEN CHECKS WHAT SYSTEM TAPE IS BY LOOKING AT LOC. 6600...
	/SO DON'T CHANGE WITHOUT CONSULTING SYSGEN.
DTACA,	7755
DTBLOC,	0
DTANO,	0
DLOC,	6577
DERRCT,	-3
DFUN,	BOOTRE
	4565		/"DT"
DTA,	0
	IFNZRO DTA&7 <???> /ERROR - MUST BEGIN ON 10-WORD BOUNDARY
	DCA	GET
	TAD I	DTA
	DCA	DFUN		/SAVE ARGS
	ISZ	DTA
	AC7777
	TAD I	DTA
	DCA	DLOC
	ISZ	DTA
	TAD	GET
	CLL RAL
	TAD I	DTA
	RTL
	RTL			/COMPUTE BLOCK NO.
	CLL RAL			/& DOUBLE IT
	DCA	DTBLOC
	ISZ	DTA
DTATRX,	DCA	CTCFG		/INHIBIT ^C
	AC7775
	DCA	DERRCT
DTATRY,	TAD	DTAWC
	DCA I	DTACA		/PUT SEARCH BLOCK # IN WC
	TAD	DFUN
	AND	DT7		/GET UNIT #
	CLL RTR
	RTR
	TAD	(410		/SEARCH REVERSE, "GO" BIT OFF
	DTCA DTXA
	DTLB			/DECTAPE DF=0
DTGO,	TAD	(200		/"GO" BIT
DC,	SZL
	TAD	(400		/CHANGE SEARCH DIRECTION
	DTXA
	JMS	DTWAIT
	TAD	CTCFG
	SPA CLA
	JMP	DSTOP
	DTRA
	RTL
	CMA RTL			/DIRECTION IN LINK
	SNL CLA
	CML RTL			/SEARCH FOR BLOCK-2 IN REVERSE
	TAD I	DTAWC
	CIA
	TAD	DTBLOC
	SNA CLA
	SZL CLA
	JMP	DC
	TAD	DLOC
	DCA I	DTACA		/SET CA TO BUFR-1
	TAD	DFUN
	DTLB			/LOAD BUFFER DF
	TAD	DFUN
	CLL RAL
	AND	DT7600
	DCA	DBLKCT
	RAL
	IAC
	CLL CML RTL
	RTL			/30 FOR READ, 50 FOR WRITE
DL,	DTXA
	TAD	DT7600
	DCA I	DTAWC		/WC = -200
	JMS	DTWAIT
DTOK,	TAD	DBLKCT		/BUMP BLOCK COUNT
	TAD	DT7600
	SNA
	JMP	DSTOP
	DCA	DBLKCT
	JMP	DL
DERR2,	ISZ	DERRCT
	JMP	DTATRY
	TAD	(200		/STOP TAPE
	DTXA
	TAD	DTA-1
	JMS I	(IODIE		/FATAL ERROR
	JMP	DTATRX
DSTOP,	CDF	BASFLD
	TAD	(200
	DTXA			/STOP TAPE
	ISZ	CTCFG		/RE-ENABLE ^C
	JMP I	DTA
	JMP I	DT7600
DTWAIT,	0
DTINTL,	DTSF DTRB
	JMP	.-1
	SMA CLA
	JMP I	DTWAIT
	DTRB
	RTL
	RAL			/END ZONE IN LINK, SELECT IN 0
	SNL SMA CLA
	JMP	DERR2		/NEITHER - A BADDIE
	SZL CLA
	JMP	DTGO
	TAD	DFUN
	AND	DT7
	TAD	D0121
	DCA	DBLKCT
	CDF	BASFLD
	ISZ	CTCFG
	SKP
	JMP I	DT7600
	DCA I	KCTRLO		/MAKE SURE TTY IS ON
	AC0001
	JMS I	KCDOIO
	DTMSG-1
D0121,	0121
	JMS I	TTYIN
DT7600,	7600
	JMP	DTATRX
DT7,	7
DTMSG,	-3
	4565
DBLKCT,	0
	4000
/
	PAGE>

	IFNZRO TAPE&1 <
/TD8E SUBROUTINE FOR EDP-8
/SUPPORTS UP TO 8 UNITS; RUNS WITH INTERRUPTS  O F F !!!
/
	TD7=	P7
	TD7600=	P7600
	TD70=	P70
	TD77=	P77
	*6600
C100,	100		/MUST BE FIRST LOCATION ON PAGE ! ! !
	/NOTE! SYSGEN CHECKS WHAT SYSTEM TAPE IS BY LOOKING AT LOC. 6600...
	/SO DON'T CHANGE WITHOUT CONSULTING SYSGEN.
M20,	-20
PGCT,	0
TRYCNT,	0
BLOCK,	0
C1000,	1000
C3,	3
C4565,	4565
DTA,	0
	IFNZRO DTA&7 <???> /ERROR
	DCA	BLOCK		/SAVE LOW BLOCK BITS
	IOF			/NOTE WELL, YE FOOLS WHO WOULD TRY TO KEEP INTERRUPTS ON!
	TAD I	DTA		/GET FUNCTION WORD
C6775,	SDLD			/LOAD DATA REGISTER (AS TEMP. STORAGE)
	AND	TD7		/EXTRACT UNIT #
	CLL RAR
	DCA	TDCTRL
	RAR			/GET ODD-EVEN UNIT BIT
	DCA	UBIT
	TAD	TDCTRL		/REGET SHIFTED FUNCTION WORD
	CLL CMA RTL
	RAL			/PERFORM MAGIC
	TAD	C6775		/SUBTRACT UNIT BITS, BUT THIS REALLY SETS UP A MAGIC #
	DCA	TDCTRL
	TAD	TDPTR		/POINTER TO LIST OF THINGS TO CHANGE
	DCA	TDIOTT
	TAD	TDNMBR		/GET # OF IOT'S TO CHANGE
	DCA	TDIOTC
TDIOTL,	TAD I	TDIOTT		/GET ADDR
	DCA	TDIOTP
	TAD I	TDIOTP		/GET IOT
	AND	TD7		/JUST THE UNIQUE PART
	TAD	TDCTRL		/MAKE PROPER IOT FOR GIVEN PAIR OF UNITS
	DCA I	TDIOTP		/RESAVE
	ISZ	TDIOTT
	ISZ	TDIOTC		/DONE?
	JMP	TDIOTL		/NO
	ISZ	DTA
	TAD I	DTA		/GET CORE ADDR
	DCA	BUFF
	ISZ	DTA
	TAD	BLOCK		/GET LOW BLOCK BITS
	CLL RAL
	TAD I	DTA		/GET HIGH BLOCK BITS
	RTL
	RTL
	RAL
	DCA	BLOCK
	ISZ	DTA		/POINT TO GOOD EXIT
	SDRD			/READ DATA REG. (= FUNCTION WORD, RIGHT NOW)
	CLL RAL
	AND	TD7600
	DCA	PGCT		/SAVE # OF BLOCKS TO READ
	SDRD
	AND	TD70		/GET BUFFER FIELD
	TAD	PCDF
	DCA	XFIELD
	SDRD
	DCA I	KTDTEM		/SAVE FUNCTION WORD
TDRETR,	AC7775
	DCA	TRYCNT		/3 TIMES ON ERROR
	JMS	SDLCX		/LOAD COM. REG. WITH ODD-EVEN UNIT BIT
CHG1,	SDRC			/READ COM. REG.
C200,	AND	C100		/CHECK FOR SELECT ERROR
	SZA CLA
	JMP I	TDHANG		/YUP
TDGOBA,	CLA CLL CML RTR		/2000 - TURN ON REVERSE MOTION
	JMP	GO		/WHEN WE GO TO GO
NXTREC,	TAD	PGCT
	TAD	TD7600
	SNA
	JMP	TDEXIT
	DCA	PGCT
	ISZ	BLOCK
	TAD	C200
	TAD	BUFF
	DCA	BUFF
GO,	TAD	C1000		/LOAD GO BIT
	JMS	SDLCX		/AND UNIT BIT (ODD-EVEN) INTO COM. REG.
	JMS I	CRDQUD		/SKIP QUAD LINE FLAG
	JMS I	CRDQUD
SRCH,	JMS I	CGTLIN		/SKIP LINE, READ COM. REG., ROTATE AC
	TAD	M110		/CHECK FOR END ZONE
	SNA
	JMP	TDENDZ		/WE GOT IT
	TAD	M20		/MAYBE A BLOCK MARK?
	SZA CLA
	JMP	SRCH		/NEITHER...KEEP GOING
CHG2,	SDRD			/READ DATA REGISTER
	SZL			/RIGHT DIRECTION?
	TAD	C3		/LINK = MOTION BIT (1 = REVERSE)
	CMA
	TAD	BLOCK		/LOOK FOR BLOCK-3 WHEN GOING IN REVERSE
	CMA
	SNA
	JMP	TDFOUND
M110,	SZL SNA CLA		/GOING IN THE RIGHT DIRECTION TO EVER FIND IT?
	JMP	SRCH		/YES, KEEP GOING
TDENDZ,	SDRC
	RTL			/DIRECTION BIT IN LINK
	CLA CML RTR		/
	JMP	GO		/TURN AROUND
IFZERO EPOT2<
TRY3,	ISZ	TRYCNT>		/NO, GOING FORWARD, SO IT'S A BADDIE
IFNZRO EPOT2< XLIST
TRY3,	JMP I	CIODIE		/GO HLT TO EXAMINE COMMAND REGISTER
	XLIST >
	JMP	TDGOBA		/REV. AND TRY AGAIN
	JMS	SDLCX		/FATAL ERROR, STOP TAPE
	ION
	TAD	C4565		/"DT"
	JMS I	CIODIE
	JMP	TDRETR
TDEXIT,	JMS	SDLCX		/GOOD EXIT, STOP TAPE
	ION
	JMP I	DTA
SDLCX,	0
	TAD	UBIT
CHG3,	SDLC
	JMP I	SDLCX
TDPTR,	TDIOTS
TDNMBR,	TDIOTS-TDIOTE
CRDQUD,	RDQUAD
CGTLIN,	GTLIN
IFZERO EPOT2<
TDHANG,	TDMESG>
IFNZRO EPOT2< XLIST
TDHANG,KZTAP3
	XLIST >
BUFF,	0
KTDTEM,	TDTEMP
UBIT,	0
IFZERO EPOT2<
CIODIE,	IODIE>
IFNZRO EPOT2< XLIST
CIODIE,	KZTAP2
	XLIST >
*6774
TDFOUN,	SZL CLA			/MUST BE GOING FORWARD
	JMP	SRCH		/KEEP GOING IN REVERSE
	TAD	BUFF
XFIELD,	HLT			/CDF BUFFER FIELD
TDIOTT=TRYCNT
TDIOTP=XFIELD
TDIOTC=PGCT
TDCTRL=BUFF

*7000
	DCA	XBUFF
	TAD	TD7600
	DCA	WORDS
REVGRD,	JMS	GTLIN		/GET A MARK WORD
	TAD	CM150		/REV GUARD = 32
	SZA CLA
	JMP	REVGRD		/YUP
	TAD	TDTEMP		/GET FUNCTION WORD
TD7700,	SMA CLA
	JMP	TDREAD		/DO A READ
TDWRIT,	SDRC			/TEST FOR WRITE LOCK OR SELECT ERROR
	AND	C300
	SZA CLA
	JMP I	CTDMESG
	JMS	RDQUAD		/WAIT 4 LINES
	CLA
	TAD	C1400		/TURN ON WRITE
	JMS I	CSDLCX
	AC7777			/WRITE 7777 IN REV. CHECKSUM
	JMS	WRQUAD
	AC7777
	DCA	CHKSUM		/ALSO IN SOFTWARE CHECKSUM
WRLP,	TAD I	XBUFF		/GET DATA FROM BUFFER
	JMS	WRQUAD
	ISZ	XBUFF
C374,	374
	ISZ	WORDS		/DONE?
	JMP	WRLP		/NOPE
	JMS	WRQUAD		/FILL 129TH WORD
	JMS	GETCHK		/DIDDLE CHECKSUM
	JMS	WRQUAD		/& WRITE
	JMS	WRQUAD		/... TWICE FOR GOOD MEASURE
	JMP	RWCOM		/CHECK FOR MORE BLOCKS TO DO
TDREAD,	JMS	RDQUAD
	JMS	RDQUAD
	JMS	RDQUAD
	AND	TD77
	TAD	TD7700
	DCA	CHKSUM		/STORE REVERSE CHECKSUM
RDLP,	JMS	RDQUAD		/GET DATA WORDS
	JMS	EQUFUN		/EQUIVALENCE CHECKSUM THEM (?)
	DCA I	XBUFF		/& SAVE
	ISZ	XBUFF
C300,	300
	ISZ	WORDS
	JMP	RDLP
	JMS	RDQUAD		/129TH WORD TO SKIP
	JMS	EQUFUN
	JMS	RDQUAD		/GET TAPE CHECKSUM
	AND	TD7700
	JMS	EQUFUN
	JMS	GETCHK		/GET TOTAL CHECKSUM
RWCOM,	CDF	BASFLD
CHG10,	SDST
	SZA CLA
	JMP I	CTRY3
	JMP I	CNEXTR
WRQUAD,	0
	JMS	EQUFUN
CHG4,	SDSQ
	JMP	.-1
CHG5,	SDLD
	CLA
	JMP I	WRQUAD
RDQUAD,	0
CHG6,	SDSQ
DTINTL,	JMP	.-1
CHG7,	SDRD
	JMP I	RDQUAD
EQUFUN,	0			/TAKE THIS ONE ON FAITH
	CMA
	DCA	EQUTMP
	TAD	EQUTMP
	AND	CHKSUM
	CIA
	CLL RAL
	TAD	EQUTMP
	TAD	CHKSUM
	DCA	CHKSUM
	TAD	EQUTMP
	CMA
	JMP I	EQUFUN
GETCHK,	0			/COMPUTE CHECKSUM
	CLA
	TAD	CHKSUM
	CLL CMA RTL
	RTL
	RTL
	JMS	EQUFUN
	CLA
	TAD	CHKSUM
	AND	TD7700
	JMP I	GETCHK		/AC =0, WE HOPE!
GTLIN,	0
CHG8,	SDSS
	JMP	.-1
CHG9,	SDRC
	CLL RTL
	AND	C374
	JMP I	GTLIN
IFZERO EPOT2 <
CTDMES,	TDMESG
CTRY3,	TRY3>
IFNZRO EPOT2 < XLIST
CTDMES,	KZTAP3
CTRY3,	KZTAP1
	XLIST  >
CNEXTR,	NXTREC
CSDLCX,	SDLCX
CM150,	-150
C1400,	1400
CHKSUM,	0
WORDS,	0
XBUFF,	0
TDTEMP,	0
EQUTMP,	0
TDIOTS,	CHG1
	CHG10
	CHG2
	TDENDZ
	CHG3
	TDWRIT
	CHG4
	CHG5
	CHG6
	CHG7
	CHG8
	CHG9
TDIOTE=.
PAGE>

	IFNZRO TAPE&2 <
LTP14,	14		/MUST BE FIRST LOCATION ON PAGE!!!
	/NOTE! SYSGEN CHECKS WHAT SYSTEM TAPE IS BY LOOKING AT LOC. 6600...
	/SO DON'T CHANGE WITHOUT CONSULTING SYSGEN.
	IFNZRO LTP14&177 <???> /ERROR
P30,	30
LTAXO,	30
LT129,	0
LTLOC,	6600
LTFUN2,	-3
LTNMBL,	-5
	4565			/"DT"
DTA,	BOOTRE			/LINCTAPE HANDLER
	IFNZRO DTA&7 <???> /ERROR - MUST BE ON 10-WORD BOUNDARY
	CLL RAL			/ENTER WITH LOW BLOCK BITS IN AC
	DCA	LTBLK
	DCA	CTCFG		/TURN OFF ^C
	TAD I	DTA		/GET R/W,LEN,FIELD,UNIT
	ISZ	DTA
	DCA	LTFUN
	TAD	LTFUN
	AND	LT70
	TAD	PCDF
	DCA	LTBUFR		/IN PREPARATION FOR SAVING 129TH WORD
	TAD I	DTA		/GET BUFR ADDR
	ISZ	DTA
	DCA	LTLOC
	TAD I	DTA		/GET HI BLOCK BITS
	ISZ	DTA
	TAD	LTBLK		/ADD IN LOW
	RTL			/GRUNGLE
	RTL
K4,	RAL			/MULT 256-WORD BLK NO. BY 2
	DCA	LTBLK		/=START 129-WORD BLK
	TAD	LTFUN
	AND	LT7
	CLL RAR
	TAD	P30		/XA, NP
	DCA	LTAXO
	TAD	LTFUN
	RTL
	RTL
LTP200,	AND	LTP14
	TAD	(702
	DCA	LTOP		/RDE OR WRI
	TAD	LTFUN		/GET # OF BLKS TO DO
	CLL RTL			/INTO BITS 8-11
	RTL
	RTL
	DCA	LTFUN2		/WE NEED THIS SETUP LATER
	TAD	LTFUN2
	AND	LT17		/JUST GET THE COUNT OF 256-WORD BLOCKS
	RAL			/MULT BY 2 FOR 128-WORD BLOCKS (AND GET LINK, MAYBE, FOR EXTRA 128 WORDS)
	SNA			/0 IMPLIES 40
	TAD	LT40
	CIA
	DCA	LTNMBL		/=BLOCK COUNT
	TAD	LTFUN2		/WE SAVED THIS FOR A REASON, REMEMBER?
	AND	(7000		/TO GET THE FIELD BITS
	TAD	LTAXO
	DCA	LTFUN		/THIS IS THE WORD FOR THE AXO NOW
LTBUFR,	HLT			/BECOMES CDF BUFFER
LTLOOP,	TAD	LTLOC
	TAD	LTP200
	DCA	LTFUN2		/A TEMPORARY TEMPORARY
	TAD I	LTFUN2		/GET BUFFER 129TH WORD
	DCA	LT129		/& SAVE IT
LTREDO,	AC7775
	DCA	LTFUN2		/3 TRIES ON ERROR
LTTRY,	TAD	LTLOC
	CIF 0			/INHIBIT INTERRUPTS WITHOUT TURNING THEM OFF
	6141	/LINC		/FOR THIS MODE
	0023	/TMA
	1020	/LDA I
LTFUN,	30
	0001	/AXO
LTOP,	702			/"RDE" OR "WRI"
LTBLK,	53			/BLOCK #
LTWAIT,	0002	/PDP
DTINTL,	CLA
	TAD	(100
	6151			/STD (WAIT FOR TAPE)
	JMP	.-3
	CIF 0			/RE-DISENABLE INTERRUPTS AGAIN
	6141	/LINC

LTCKSM,	0003	/TAC		/GET CHECKSUM (7777=OK)
	0002	/PDP
	DCA	LTAXO
	TAD	LTOP
	AND	K4		/SEE IF RDE OR WRI
	SZA CLA
	JMP	LTOK		/IGNORE FALSE CHECKSUMS ON WRITES
				/(WHAT "TAC" GIVES YOU IS JUST JUNK)
	ISZ	LTAXO
	JMP	LTBAD		/ERROR!
LTOK,	TAD	LTP200
	TAD	LTLOC		/BUMP CORE LOC
	DCA	LTLOC
	ISZ	LTBLK		/BUMP BLOCK #
	TAD	CTCFG
	SPA CLA
	JMP	LTID0		/^C TYPED
	ISZ	LTNMBL		/DONE ALL?
	JMP	LTBUFR		/NOPE
LTEXIT,	TAD	LT129		/GET 129TH WORD WE SAVED
	DCA I	LTLOC		/RESTORE IT
LTCDEX,	CDF	BASFLD
	ISZ	CTCFG
	JMP I	DTA
LTID0,	CDF	BASFLD
	JMP I	LT7600
LTBAD,	ISZ	LTFUN2		/TRIED 3 TIMES?
	JMP	LTTRY
	CDF	BASFLD
	TAD	DTA-1
	JMS I	(IODIE
	JMP	LTREDO
LT17,	17
LT7600,	7600
LT7,	7
LT40,	40
LT70,	70
/
	PAGE>

/ * * * * * L I N E  P R I N T E R  B U F F E R * * * * *
/
/IS 7020-7377, OR THIS MAY BE PART OF TD8E HANDLER AREA
/
/IF TD8E, TD8E ROUTINE OCCUPIES 6600-7177, 7340-7377
/
/LINE PRINTER BUFFER IS THEN 7220-7337
/IF ANELEX (TYPE 645) PRINTER IS IMPLEMENTED,
/
/THERE IS NO RING BUFFER.
/
TMOUNT,	-17
	5660
	6657
	6501
LBL1,	0
LBL2,	0
LBL3,	0
	0104
SEQ,	0
	0101
	4760
	6301
IORO,	0
	0
	6665
	3301
	LPBUFR=.

	IFNZRO TAPE&1 <
	*7340
LPBFND,	LPBUFR		/LPT RING BUFFER POINTER
TDMESG,	RDF
	TAD	.+1
	CDF 0
	DCA	TDCDEX
	TAD I	RNDIOT		/TO GET UNIT # FROM
	CLL CMA RTR
	RTR
	TAD I	TDUBIT
	RTL
	AND	P7
	TAD	TD121
	DCA	TDUNIT
	IFZERO EPOT <
	JMS I (SDLCX >		/STOP TAPE
	IFNZRO EPOT <
	JMS I (KDTA >	/NO TAPE HANDLER IF EPOT=1
	ION
	DCA I	KCTRLO		/MAKE SURE TTY IS ON
	CLA IAC
	JMS I	KCDOIO
	TDM-1
TD121,	121
	JMS I	TTYIN
	IOF
TDCDEX,	0
	IFZERO EPOT <
	JMP I	(TDRETR		/TDRETR CLEARS AC
RNDIOT,	CHG1			/AS GOOD AS INY
TDUBIT,	UBIT >
	IFNZRO EPOT <
	JMP I	(KDTA		/HALT NO TAPE HANDLER
RNDIOT,	0
TDUBIT,	0 >
TDM,	-3
	4565
TDUNIT,	0
	4000>
	IFZERO TAPE&1 <
	*7377
LPBFND,	LPBUFR>
	*LPBUFR
	ZBLOCK LPBFND-.
	LPSIZE=LPBFND-LPBUFR-1

	*7400
/WATCH LITERALS IN THIS PAGE ! ! !
/SEE TAG "CD1377"
/
/
/
 
INTRPT,	DCA	INTAC		/SAVE AC
GETLNK,	CLA RAR			/NOW GET LINK TO SAVE
	DCA	INTLNK		/& LINK
TSTCDR,	RCSF			/SKIP COLUMN READY
	JMP	TSTCD2
	RCRA			/READ COLUMN, APLHA MODE
	DCA	CDCODE		/SAVE
	ISZ	CDCOLF		/SET SOFTWARE FLAG
	JMP	DISMIS
TSTCD2,	RCSD			/SKIP CARD DONE
	JMP	TSTLPT		/TRY LPT
	RCRD			/CLEAR FLAG
	AC4000
	DCA	CDONFG		/SET CARD JUST DONE
DISMIS,	TAD	INTLNK
	CLL RAL
	TAD	INTAC
	RMF
	ION
	JMP I	0
CDONFG,	0
LPDNFG,	0			/LPT DONE
	IFNZRO LPDNFG-7425 <???> /ERROR RSYS
TSTLPT,	CLA			/NECESSARY
	LSF			/LPT?
	JMP I	KTSTRD		/NO, TRY PTR
	IFZERO LP645 <
	TAD	LPCHCT
	SMA CLA			/IGNORE PRINTER FIDDLING BY OPERATOR
	JMP	LPTLCF
	ISZ	LPCHCT
	JMP	LPMORE
	AC7777
	DCA	LPDNFG		/SET LPT DONE FLAG FOR SPECIAL RSYS GROOVINESS
LPTLCF,	LCF
	JMP	DISMIS
LPMORE,	ISZ	LPGETP
	TAD I	LPGETP
	SPA
	DCA	LPGETP
	CLA
	TAD I	LPGETP		/GET NEXT CHAR FROM BUFR...
	LLS			/& PRINT IT
LPSIZ,	LPSIZE
	JMP	TSTCD2
LPOCHR,	0			/OUTPUT CHAR ON LP08
	CDF 0			/PROTECTION AGAINST THE WORLD
IFNZRO EPOT2 <XLIST>
	AND	CD1377
IFNZRO EPOT2 <XLIST>	/PRINT THIS OUT 
	DCA I	LPPUTP
LPFULP,	CLA IAC			/FOR BENEFIT OF CENTRONICS HACK
	LIE			/ENABLE LP08 INTERRUPT
	TAD	LPCHCT
	TAD	LPSIZ
	SNA CLA			/IS LPT BUFFER FULL?
	JMP	LPFULP		/YES - WAIT
	CIF 0			/NO INTERRUPT FOR DELICATE STUFF
	DCA	LPDNFG		/FIX ELUSIVE BUG
	AC7777 CLL
	TAD	LPCHCT
	DCA	LPCHCT		/BUMP CHAR  COUNT
	TAD I	LPPUTP
	SNL			/LINK OFF MEANS PRINTER QUIET
	LLS
	SZL CLA
	ISZ	LPPUTP
	TAD I	LPPUTP
	SPA
	DCA	LPPUTP
	CLA
	JMP I	LPOCHR
LPPUTP,	LPBUFR+1
LPGETP,	LPBUFR
LPCHCT,	0>

	IFNZRO LP645 <
	6652
	DCA	LPFLAG
	JMP	DISMIS		/SET "LINE IS PRINTED" PLAG
LPM3,	-3			/THE ENTRY POINT "LPOCHR" MUST BE IN THE SAME SPOT
LPM212,	-212			/FOR BOTH THE LP08 AND ANALEX HANDLERS - SO WATCH IT, STUPID!
LPM204,	-204
CHRCNT,	-204
FINLPB,	TAD	FORMC
FORMCT,	IOF
	ISZ	LPFLAG
	TAD	P17
	6652
	6664			/DUMP HARDWARE LINE BUFFER
	ION
	TAD	LPM204
	DCA	CHRCNT
	JMP I	LPOCHR
FORMC,	-7
LPOCHR,	0
	DCA	CDICHR		/MAKE SURE THIS IS AT SAME PLACE AS IN LP08 HANDLER!!!!!
	TAD	LPFLAG
	SZA CLA			/ARE WE IN THE PROCESS OF PRINTING A LINE?
	JMP	.-2		/CHUG, CHUG, WE ARE
	TAD	CDICHR
	TAD	LPM212
	SNA
	JMP	FINLPB
	TAD	LPM3
	SNA
	JMP I	LPOCHR		/IGNORE CARRIAGE RETURNS
	IAC
	SNA CLA
	JMP	FORMCT		/GOT A FORMFEED
	TAD	CHRCNT
	SNA CLA
	JMP I	LPOCHR
	TAD	CDICHR		/RESTORE ORIGINAL CHAR
	6654			/PUT IT IN HARDWARE LINE BUFFER (10 USEC)
	ISZ	CHRCNT
	JMP I	LPOCHR
LPFLAG,	0
	JMP I	LPOCHR
	0;0;0;0		/FILL>

/CDCOLF=0 - COLUMN NOT READY
/CDCOLF=1 - COLUMN IS IN
/CDONFG=0 - START A CARD IN MOTION
/CDONFG=1 - A CARD IS IN MOTION
/CDONFG=- - CARD IS JUST FINISHED (CARD DONE)
/THIS RETURNS ONE CHARACTER (I.E., ONE COLUMN) AT A TIME,
/SO YOU HAVE TO FETCH CHARACTERS FAST ENOUGH TO KEEP UP WITH IT.
/
IFZERO EPOT2<
CDICHR,	0
	TAD	CDTIME		/THIS CAN BE "TAD M4" ON ANYTHING BUT AN 8/E...
	DCA	CDTEMP 		/FOR TIMEOUT LOOP LATER (CHEAP CDR!)
		/SEE END OF LISTING FOR CODE ASSEMBLED FOR ERROR CHECK
CDRETR,	TAD	CDONFG
	SZA
	JMP	CDGO		/CARD IS MOVING
	DCA	CDCOLF		/SET "COLUMN NOT IN YET"
	ISZ	CDONFG		/SET "CARD IN MOTION"
	RCSE			/START CARD MOVING, SKIP IF OK
	JMP	CDCTZ		/NOT OK (OUT OF CARDS, OR TURNED OFF)
CDGO,	SMA CLA		/
	JMP	CDMVNG		/CARD IS IN MOTION
	DCA	CDONFG		/SET "CARD STOPPED"
CD1377,	TAD	(215		/RETURN CR FOR END-OF-CARD CONDITION
				/! * ! * WATCH IT! LITERAL 215 MUST BE AT REL. LCO. 377 ! * !
	JMP I	CDICHR
CDMVNG,	TAD	CDCOLF
	SNA CLA			/WAIT FOR COLUMN TO COME IN
	JMP	CDPOOR		/WAIT FOR CARD DONE, COLUMN DONE, OR ELSE WAIT
			/AROUND LONG ENOUGH TO DECIDE SOMETHING IS WRONG 
			/AND WE MIGHT AS WELL QUIT
	DCA	CDCOLF		/SET COLUMN NOT READY AGAIN
	TAD	CDCODE		/GET 6-BIT COLUMN CODE
	CLL RAR
	TAD	KCDTBL		/ADD BASE OF TRANSLATION TABLE
	DCA	LPOCHR		/CONVENIENT TEMPORARY TEMPORARY
	TAD I	LPOCHR		/GET THE ASCII TRANSLATION
	SNL			/LINK TELLS WHICH HALF
	JMS I	BSWPTR		/CANNOT BE IN TABLE 'CAUSE FGBG OVERLAYS THIS
CDAND,	AND	P77		/& GET 6 BITS
	TAD	CD240		/TABLE IS IN -240 ASCII
	JMP I	CDICHR		/EXIT WITH CHAR
CDPOOR,	ISZ	LPOCHR		/"CDPOOR" FOR POOR DESIGN OF CDR...
	JMP	CDRETR
	ISZ	CDTEMP
	JMP	CDRETR
CDCTZ,	DCA	CDONFG		/SET CARD DONE
	TAD	P7		/RING BELL ON END OF CARD DECK
	6046			/WE CAN DO THIS OK, SINCE WE'VE WAITED
CDTIME,	SPA SNA SZL CLA >		/WILL IT SKIP? WHO KNOWS! BUT IT'LL CLEAR AC
IFNZRO EPOT2 <*7554>
CD232,	232
	JMS I	TTYIN
	TAD	CDM232		/LOOK FOR ^Z TO END DECK
	SZA CLA
	JMP	CDICHR+1	/ANYTHING ELSE TRIES TO READ MORE
	TAD	CD232		/RETURN ^Z FOR END-OF-DECK
	JMP I	CDICHR
/
INTAC,	0
INTLNK,	0
KTSTRD,	TSTRDR
KCDTBL,	CDTBL
CDM232,	-232
CDCODE,	0
CDCOLF,	0
CD240,	240 
/
CDTEMP,
NULLIO,	0
	SNA CLA
	TAD	CD232
	JMP I	NULLIO 
	PAGE
/
IFNZRO EPOT2 < XLIST
/REPORT ERRORS IN RK8E,CAUSE CPU HALT WITH
/DISK REGISTERS IN AC
/ALSO CHANGE LOCATION 7455 SINCE CD1377 CHANGED ADDRESS
/THIS IS A HAND PATCH ONLY, ASSEMBLE ONLY FOR READING OCTAL
*7507			/OR SAME LOCATION AS CDICHR
			/IS FOR CARD READER HANDLER
CDICHR,	0
	TAD	KZ232
	JMP I	CDICHR		/RETURN ^Z FOR END-OF-DECK
EPO2,	DRST
	HLT	/STATUS REG IN AC
	CLA
	TAD I	KPAG	/COMPUTE COMMAND REG,SAME
	AND	KZ7600	/WAY AS IN DISK ROUTINE
	SNA CLA
	TAD I	KR201
	TAD I	KCHK
	CLL RAR
	TAD I	KRKEC
	HLT
	CLA
	TAD I	KGARG	/GET DISK ADDRESS
	HLT
	CLA
	JMP I	KKZZR
KZ232,	232
KZ7600,	7600
KPAG,	PAGCNT
KGARG,	GARG
KR201,	201
KCHK,	CHKHED
KRKEC,	RKECMD
CD1377,	1377
KKZZR,	KZZRT 
	XLIST
/
	PAGE > 

	*3200
	NOPUNC
	*7600
	ENPUNCH
BOOTST,	0002		/FOR BENEFIT OF PDP-12'S
	CLA CLL
	CDF 0		/FOR BENEFIT OF 8/E CUSTOMERS
	JMS I	PSHND
STRTAD,	3000
ZERO,	0
	1
BOOTRE,	JMP I	STRTAD
BADS,	-7
	6446	/SEQ. # TOO BIG
	6217
	0104
	0165
	6060
	0143
	5250
IOERMS,	-14
	5220	/I/
	6001	/O
	4663	/ER
	6360	/RO
	6301	/R
	6057	/ON
	0101	/
IODEV,	0
	3401	/;
	6346	/RE
	6563	/TR
	7240	/Y?
PTCRLF,	TCRLF
CTRLN,	0
	IFNZRO CTRLN-7636 <???> /ERROR, FGBG!
WHYME,	0
	IFNZRO WHYME-7637 <???> /ERROR, FGBG!
	DCA	TTCHR
	TAD	CTRLN
	CLL RAR
	SNL CLA
	JMP	NOCONV
	TAD	K257
	DCA	IODIE
	TAD	CNVTBL
	DCA	IODEV
DLOOP,	ISZ	IODIE
	TAD I	IODEV
	ISZ	IODEV
	SNA
	JMP	NOCONV
	TAD	TTCHR
	SZA CLA
	JMP	DLOOP
	TAD	IODIE
	JMP I	WHYME
NOCONV,	TAD	TTCHR
	JMP I	WHYME
CNVTBL,	CVTABL
K257,	257
TTCHR,	0
CVTABL,	-315	/M=0
	-312	/J=1
	-313	/K=2
	-314	/L=3
	-325	/U=4
	-311	/I=5
	-317	/O=6
	0
S377,	377
KMY,	-331
IODIE,	0
	IFNZRO IODIE-7702 <???>	/ERRORS ALL OVER THE PLACE
	DCA	IODEV
	CDF 0 
	JMS I	PTCRLF
PIPFX1,	AC0001
PIPFX2,	JMS I	KCDOIO
	IOERMS-1
S3,	3
	JMS I	TTYIN
	TAD	KMY
	SNA CLA
	JMP I	IODIE
	JMP	BOOTST
				/LEAVE LOCATIONS 7720-7730 FREE
	ZBLOCK 7731-.		/FOR BENEFIT OF DP8E COMMUNICATIONS HACK
/
/ROUTINE TO TAKE A BLOCK # & RETURN THE HIGH-ORDER BITS IN .+4 
/AND THE LOW BITS IN THE AC.  FOR EXAMPLES, REFER TO CALLS TO THE
/LOW-LEVEL DISK & TAPE ROUTINES.
/
SPLIT,	0
	CLL RTR
	RTR
	DCA	TEMP
	TAD	SPLIT
	TAD	S3
	DCA	IODEV
	TAD	TEMP
	AND	S377
	DCA I	IODEV
	TAD	TEMP
	RAR
	AND	P7400
	JMP I	SPLIT
/
	IFNZRO 7750-.&4000 <???> /ERROR	/DON'T CLOBBER DATA BREAK LOCATIONS!
	ZBLOCK 7750-.
	.
	.
	.
	.
	.
	.
MREAD,	JMS	SPLIT		/THE FINAL LOADER USED BY "RUN"
	JMS I	PSHND
	0
	0
	0
MSTCDF,	CIF CDF 0
	JMP I	.+1
MSTADR,	0
RECOVR,	JMP I	.+1
	IFNZRO RECOVR-7766 <???> /ERROR, SYSGEN!
	SYSINT
DDTBRK,	0		/DDT FLAG DIGNUS
	IFNZRO DDTBRK-7770 <???> /ERROR RSYS AND DDT
	ZBLOCK 7772-.
FLAGS,	1		/VARIOUS FLAGS
			/BIT 0 = FOREGROUND FLAG
			/BIT 11 = MARKETING FLAG (THEY KNOW WHAT THE CUSTOMER  WANTS)
	DECIMAL
IFZERO LP645 <
LPTSIZ,	-80		/COLUMS LPT HAS>
IFNZRO LP645 <
LPTSIZ,	-130>
	OCTAL
PSHND,	SYSDEV
BIGCDF,	CDF 10		/HIGHEST CDF OF MACHINE
SWITCH,	0		/"/S" OF COMMAND
DATE,	0
/
	BOOT=7600

/PAGE 0 LITERALS
/
	FIELD BASFLD%10+1

	*200
	TC01BT=.
	NOPUNC
	*7600
	ENPUNC
	JMP	FAKEIT
	0401
	7464
	7264
	7601
	SYSDAT
	0
CHGCA,	DCA	7755
	DTSF
	JMP	.-1
	DCA	7755
	JMP	1
	0
	0
	0
DWAIT,	JMP	CHGCA
	NOPUNC
	*201	/THIS SHOULD REALLY BE "*1" BUT PAL10 BLOWS UP IF IT IS
	/THIS CODE READS INTO FIELD 0, PAGE 0, WHEN BOOTSTRAPPED
	ENPUNC
	TAD	D30
SRCHLP,	DTXA
	DTSF
	JMP	.-1
	AND I	0		/MAGIC...TO MAKE THIS WORK ON 8/I'S
	TAD	0
	TAD	DM20
	SZA CLA
	JMP	SRCHLP
	TAD	D5777
	DCA I	D7755
	DCA I	D7754
	TAD	D30
BRDLP,	DTXA
	DTSF
	JMP	.-1
	AC7777
	TAD I	D7755
	DCA I	D7755
	ISZ	M10
	JMP	BRDLP
	JMP I	D7600
DM20,	-20
D5777,	5777
D30,	30
M10,	-10
D7600,	7600
D7755,	7755
D7754,	7754
	ZBLOCK 2
	7
	NOPUNCH
	*.+7417
	ENPUNCH
FAKEIT,	TAD	D600
	DTCA DTXA
	DTSF
	JMP	.-1
	TAD	D7577
	DCA	7754
	TAD	D7577
	DCA	7755
	TAD	D220
	DTCA DTXA
	TAD	D5217
	DCA	DWAIT
D5217,	JMP	DWAIT
D600,	600
D220,	220
D7577,	7577
	ZBLOCK 7		/PRAY
	7600
	ZBLOCK 6
	6610

	*400
	/THIS READS INTO *4000, FIELD 0
	TC12BT=.
/LINCTAPE BOOTSTRAP
	HLT
	401
	7464
	7264
	7601
	SYSDAT
	0
K7600,	7600
K70,	70
	K7,	7
K17,	17
LK200,	200
KCDF,	CDF 0
	*.&7600+17
C,	7767	/-10
	1020	/LDA I
	20
	1	/AXO
J,	1020	/LDA I
L,	6000
	23	/TMA
	702
K,	20
	1020	/LDA I
	1
	2027	/ADD K
	4027	/STC K
	2024	/ADD L
	2013	/ADD LK200
	4024	/STC L
	237	/XSK I C
	6023	/JMP J
	2	/PDP
	TAD	K70
	DCA	65
	TAD	K7
	DCA	P7
	TAD	K17
	DCA	P17
	TAD	K7600
	DCA	P7600
	TAD	KCDF
	DCA	PCDF
	JMP I	K7600

	*600
	RK8BT=.
	NOPUNC
	*601	/THIS SHOULD ALSO BE "*1" BUT PAL10 GIVES "Z" ERRORS IF IT IS...
	ENPUNC
	HLT
	0401
	7464
	7264
	7601
	5623
	0
	ZBLOCK 617-.
X3777,	3777+1
P6000,	6000	
RKBLP,	TAD I	X3777
	DCA I	P6000
	ISZ	P6000
	JMP	RKBLP
	JMP I	.+1
	7600
	ZBLOCK 630-.
	DSKD=6745
	DSKD
	JMP	.-1
	JMP	RKBLP
	ZBLOCK 640-.
	7
	ZBLOCK 670-.
	7600
	PAGE

	*1000			/SHOULD BE *0...
	RF08BT=.		/RF08 BOOTSTRAP
	HLT
	0401
	7464
	7264
	7601
	SYSDAT
	0
	*1016
	NOPUNCH
	*6622
	ENPUNCH
	TAD	RB70
	DCA	65		/THIS CODE READS INTO 6622
	TAD	RB7600
	DCA	70
	TAD	RBSIZ
	DCA	COUNT
	TAD	RBDOT1
	DCA	GETPNT
	TAD	RBDOT2
	DCA	PUTPNT
	TAD I	GETPNT		/MOVE DOWN TO 5000
	DCA I	PUTPNT
	ISZ	COUNT
	JMP	.-3
	JMP I	.+1
	RDOT&177+5000
RDOT,	TAD	R5777
	DCA I	R7750
	TAD	R5777
	DCA I	R7751
	AC4000
	6603
	6622
	JMP	.-1
	JMP I	RB7600
R7750,	7750
R7751,	7751
R5777,	5777
RB70,	70
RB7600,	7600
RBSIZ,	-25
RBDOT1,	RDOT-1
RBDOT2,	RDOT&177+5000-1

/EDP-8 TD8E BOOTSTRAP FOR RECORD 0
	*1200
	TD8EBT=.
	HLT
	0401
	7464
	7264
	7601
	SYSDAT
	0
	ZBLOCK 1220-.
	NOPUNCH
	*7400
	ENPUNCH
QMOVE,	TAD I	P1
	DCA I	P2		/RELOCATE
	ISZ	P1
	ISZ	P2
	ISZ	TDK		/DONE?
	JMP	QMOVE
	JMP	0
P1,	TDK+1
P2,	0
TDK,	TDBOOT-END-1
	NOPUNCH
	*1200			/THIS IS REALLY *0
	ENPUNCH
TDBOOT,	TAD	QK7600
	DCA	TDWCT
	7400			/MUST BE AT LOC'N 2
	SDSS			/WAIT FOR BLOCK MARK
	JMP	.-1
	SDRC
	AND	TDB77
	TAD	KM26
	SZA CLA			/IS IT A BLOCK MARK?
	JMP	TDBOOT+2	/NOPE
	SDRD			/YUP, GET BLOCK #
	TAD	TDBKNO		/RIGHT ONE?
	SZA CLA
	JMP	TDBOOT+2	/NOT YET
TDRGRD,	SDSS
	JMP	.-1
	77			/MUST BE AT LOC'N 20
	SDRC
	AND	TDB77
	TAD	KM32		/IS IT REV. GUARD?
	SZA CLA
	JMP	TDRGRD
	JMS	TDRQD
	JMS	TDRQD
	JMS	TDRQD
QTDREA,	JMS	TDRQD		/GET A DATA WORD
	ISZ	QTDPTR
	DCA I	QTDPTR
	ISZ	TDWCT		/DONE?
	JMP	QTDREAD
QK7600,	7600
TDB77,	77
	7			/MUST BE AT LOC'N 40
	AC7777
	TAD	TDBKNO
	DCA	TDBKNO
	ISZ	QM10
	JMP	TDBOOT
	SDLC			/STOP TAPE
	JMP I	QK7600		/BOOT REST OF SYSTEM
TDWCT,	7600
TDRQD,	0
	SDSQ
	JMP	.-1
	SDRD
	JMP I	TDRQD
KM26,	-26
KM32,	-32
TDBKNO,	-20			/READ BLKS 20-27
QTDPTR,	5777			/INTO 6000-7777
QM10,	-10
	0
	0
	70			/MUST BE AT 65
	0
	0
	7600			/MUST BE AT 70
	CDF 0			/MUST BE AT 71
END,
/
	PAGE

	*1400
	RKEBT=.
	HLT
	0401
	7464
	7264
	7601
	SYSDAT
	0
	ZBLOCK 1430-.
	DSKP=6741
	DSKP
	JMP	.-1
	AC0001
	DCLR=6742
	DCLR
	TAD	RE6000
	DLCA
RLP,	TAD	REBLK
	DLAG=6743
	DLAG
REP7,	7
	DSKP
	JMP	.-1
	ISZ	REBLK
	TAD	RE1000
	DLDC
	ISZ	RCNT
	JMP	RLP
	JMP I	R57600
RCNT,	-4
RE1000,	1000
RE6000,	6000
REBLK,	10
	ZBLOCK 1470-.
R57600,	7600

	*OVRADR		/THIS IS REALLY AN OVERLAY THAT GETS CALLED IN
	/TO RESIDE IN FIELD 0 AT APPROPRIATE TIMES
DIRPRT,	TAD I	(SWITCH
	SPA CLA
	JMP I	(TAPLBL
	DCA	DBLOCK
	TAD I	PDATE		/GET SYSTEM DATE
	JMS I	(DACODE		/& MAKE SENSE OUT OF IT
	TAD	(DIRHDR-1
	DCA	GETPNT
	AC7776
	DCA	COUNT
	TAD	(-15
	DCA	NCPL
PRTHDR,	TAD I	GETPNT
	JMS I	(LP8P2C
	ISZ	NCPL
	JMP	PRTHDR
PRTHR2,	JMS I	(LCRLF
	JMS I	(LCRLF
	TAD	(-13
	DCA	NCPL
	ISZ	COUNT
	JMP	PRTHDR
SEGLP,	JMS I	(MRDCAT
	TAD	PDWSTE
	DCA	GETPNT
NAMLUP,	TAD	(-15
	DCA	NCPL
	TAD I	GETPNT
	SNA
	JMP	BLNKNM		/GOT A BLANK ENTRY (FROM DELETION)
	DCA	NAM2PR
	TAD I	GETPNT
	DCA	NAM2PR+1
	TAD I	GETPNT
	DCA	NAM2PR+2
	TAD	K4040
	DCA	NAM2PR+3
	TAD I	GETPNT
	AND	P77
	DCA	FILTYP		/EXTENSION
	TAD I	PDWSTE		/GET # OF ADDITIONAL INFO WORDS
	SNA CLA
	JMP	PRTNAM		/IF NONE
	TAD I	GETPNT		/PICK UP DATE
	JMS I	(DACODE
	TAD I	PDWSTE
	CMA
	TAD	GETPNT		/BUMP PAST REST OF ADD'L INFO WORDS
	DCA	GETPNT
PRTNAM,	TAD I	GETPNT		/GET LENGTH WORD
	CIA
	JMS I	KOTOPD
	TAD	(3737
	DCA	LENWRD
	TAD	(NAM2PR-1
PREMPT,	DCA	PUTPNT
PRTLUP,	TAD I	PUTPNT
	JMS I	(LP8P2C
	ISZ	NCPL
	JMP	PRTLUP
NAMDUN,	JMS I	(LCRLF
	ISZ I	PDCNT		/BUMP COUNT OF FILES
	JMP	NAMLUP
	TAD I	PDLINK
	SZA
	JMP	SEGLP
	JMS I	(FORMFD		/DONE ALL
	JMP I	P7600
BLNKNM,	TAD I	GETPNT
	JMS I	(DIV100
	TAD I	(DFLEN
	DCA	DEMPTY
	TAD I	(DFLEN+1
	DCA	DEMPTY+1
	TAD	(-12
	DCA	NCPL
	TAD	(EMPMES-1
	JMP	PREMPT
EMPMES,	4074			/" <XXXX FREE BLOCKS>  "
DEMPTY,	0
	0
	4006
	2205
	0540
	0214
	1703
	1323
	7640
DIRHDR,	0411	/DI
	NAM2PR=DIRHDR
	2205	/RE
	0324	/CT
	1722	/OR
FILTYP,	3140	/Y
	4040
LENWRD,	4040			/GETS FILLED WITH LENGTH
K4040,	4040
DAY,	0
MONTH1,	0
MONTH2,	0
	5567	/-7
YEAR,	0
	1601	/NA
	1505	/ME
	4040
	4024	/ T
	3120	/YP
	0540	/E
	1416	/LN
	4040
	4040
	0401	/DA
	2405	/TE
/
	PAGE

LP8P2C,	0
	DCA	DTEM1
	TAD	DTEM1
	RTR
	RTR
	RTR
	JMS	TOASC
	TAD	DTEM1
	JMS	TOASC
	JMP I	LP8P2C
TOASC,	0
	AND	P77
	SNA
	TAD	(40
	DCA	DTEM2
	TAD	DTEM2
	AND	(40
	SNA CLA
	TAD	(100
	TAD	DTEM2
	JMS I	PRTNE
	JMP I	TOASC
DTEM1,	0
DTEM2,	0
	5555
	5555
MONLST,	5512	/-JAN, -FEB, -MAR, ETC.
	0116
	5506
	0502
	5515
	0122
	5501
	2022
	5515
	0131
	5512
	2516
	5512
	2514
	5501
	2507
	5523
	0520
	5517
	0324
	5516
	1726
	5504
	0503
DACODE,	0		/DECODE INTO MONTH-DAY-YEAR
	DCA	TEMP
	TAD	TEMP
	CLL RTL
	RTL
	RAL
	AND	P17
	CLL RAL
	TAD	(MONLST-3
	XR12=12		/***** DEFINITION *****
	DCA	XR12
	TAD I	XR12
	DCA I	(MONTH1
	TAD I	XR12
	DCA I	(MONTH2
	TAD	TEMP
	AND	P7
	CLL RTL
	RTL
	RTL
	TAD	(6200
	DCA I	(YEAR
	TAD	TEMP
	CLL RTR
	RAR
	AND	(37
	JMS I	KOTOPD
	TAD	(3737
	DCA I	(DAY
	JMP I	DACODE
TXT26,	5252
	5252
	5252
	5252
	5252
	5252
	5252
	5252
	5252
	5252
	5252
	5252
	5252
	5252
TXT2,	5240
	4040
	4040
	4040
	4040
	4040
	4040
	4040
	4040
	4040
	4040
	4040
	4040
	4052
/
	PAGE

	/SECOND BLOCK OF OVERLAY - TO IMMEDIATELY FOLLOW THE FIRST ON TAPE
PDRET,	DCA	LBLSEQ
	TAD	PDORG
	DCA	GETPNT
	TAD I	GETPNT
	JMS	FRM237
	DCA	CHR1
	TAD I	GETPNT
	JMS	FRM237
	DCA	CHR2
	TAD I	GETPNT
	JMS	FRM237
	DCA	CHR3
	TAD I	GETPNT
	JMS I	(DACODE
	TAD I	(MONTH1
	DCA	LBLM1
	TAD I	(MONTH2
	DCA	LBLM2
	TAD I	(DAY
	DCA	LBLDAY
	TAD I	(YEAR
	DCA	LBLYR
	TAD I	GETPNT
	CIA			/MAKE NEG SO DIV100 CAN MAKE IT +
	SNA
	TAD I	NMBR		/GET LENGTH OF FULL UNIT IF ZERO
	JMS	DIV100
	TAD	(LINLST-1
	DCA	XR12
GTMSPR,	TAD I	XR12
	SNA
	JMP	LBLDUN
	DCA	GETPNT
	TAD	(-16
	DCA	NCPL
GETEXT,	TAD I	GETPNT
	JMS I	(LP8P2C
	ISZ	NCPL
	JMP	GETEXT
	JMS I	(LCRLF
	JMP	GTMSPR
LBLDUN,	JMS I	(FORMFD
	JMP I	P7600

FRM237,	0
	DCA	TEMP
	TAD	TEMP
	TAD	(37
	AND	P77
	SNA
	TAD	(40
	DCA	QUOT		/TEMPORARY TEMPORARY
	TAD	TEMP
	TAD	(3700
	SNA
	CLL CML RAR
	AND	(7700
	TAD	QUOT
	JMP I	FRM237
BADSW,	JMS I	(ERRMSG
	BADCOM-1
	JMP I	P7600
LBLPRT,	5240
	4040
CHR1,	0
CHR2,	0
CHR3,	0
	4043
LBLSEQ,	0
	4040
	LBLDAY,	0
	LBLM1,	0
	LBLM2,	0
	5567
	LBLYR,	0
	4052

DIV100,	0
	CIA		/MAKE +
	DCA	REM
	DCA	QUOT
	TAD	REM
DIVLUP,	CLL
	TAD	(-144
	ISZ	QUOT
	SZL			/DIVIDE BY 100
	JMP	DIVLUP
	TAD	(144
	DCA	REM
	AC7777
	TAD	QUOT
	JMS I	KOTOPD
	TAD	(3737
	DCA I	(DFLEN
	TAD	REM
	JMS I	KOTOPD
	TAD	(3737
	DCA I	(DFLEN+1
	JMP I	DIV100
BDLBL,	JMS I	(ERRMSG
	LBLZAP-1
	JMP I	P7600
QUOT,	0
REM,	0
LBLZAP,	-5
4342
4501
5542
4346
5501
/
	PAGE

LINLST,	TXT26-1
	TXT2-1
	LBLHDR-1
	TXT2-1
	LBLPRT-1
	TXT2-1
	TXTL-1
	TXT2-1
	TXT26-1
	0
TXTL,	5240
	4040
	1405
	1607
	2410
	7240
DFLEN,	0
	0
	4040
	2516
	1124
	7240
LOGUNT,	0
	4052
LBLHDR,	5240
	4040
	1601
	1505
	4040
	4023
	0521
	5640
	4040
	0401
	2405
	4040
	4040
	4052
TAPLBL,	TAD I	(SWITCH
	TAD	(-6000
	SPA			/CHECK FOR LEGAL, MORE OR LESS
	AC4000
	TAD	(-1200
	SMA SZA CLA
	JMP I	(BADSW
	TAD I	(SWITCH		/DECODE "/XX" INTO A REAL #
	AND	P77
	SZA CLA
	JMP	TWONMS
	TAD I	(SWITCH
	CLL RTR
	RTR
	RTR
NMAND,	AND	P17
	DCA	NMBR
	TAD	NMBR
	TAD	NMBR
	TAD	NMBR
	TAD	(UTBASE
	DCA	NMBR
	TAD I	NMBR
	AND	TABSET		/GET HANDLER ADDR
	TAD	(-UNDEF		/CHECK FOR UNDEFINED LOGICAL UNIT
	SNA
	JMP	NONO
	TAD	(UNDEF
	DCA	DAVICE
	TAD I	NMBR
	AND	P7		/GET PHYSICAL UNIT
	DCA	UNIT
	TAD I	(SWITCH
	DCA	LOGUNT
	CLL
	7234
	SPA CLA
	DCA I	P7400
	TAD	UNIT
	TAD	(200
	DCA	TPLBLC
	ISZ	NMBR
	TAD I	NMBR		/GET OFFSET OF LOGICAL UNIT
	ISZ	NMBR		/POINT TO UNIT LENGTH
	DCA	KDIR+1
	JMS I	DAVICE
TPLBLC,	0
KDIR,	DIRECT
	0
	TAD I	PDORG
	AND	(7700
	TAD	P7400
	SZA CLA
	JMP I	(BDLBL
	TAD I	PDORG
	AND	P77		/GET SEQ. #
	JMS I	KOTOPD
	TAD	(3737
	JMP I	(PDRET

TWONMS,	TAD I	(SWITCH
	AND	(100
	SZA CLA
	TAD	(12
	TAD I	(SWITCH
	JMP	NMAND
NONO,	JMS I	(ERRMSG
	ILUNT-1
	JMP I	P7600
/
	PAGE

	/THIS READS INTO *4400, FIELD 0
/THE PROLOGUE RECORD OF THE BINARY SCRATCH AREA LOOKS MORE OR LESS
/LIKE THIS (FOR DIBOL BINARIES - FOR OTHERS, IT MAY BE A BIT
/DIFFERENT):
/WORD	CONTENTS
/0	WORD COUNT
/1	TYPE OF LINE
/2	(-) IF ERRORS, OR # OF BUFFERS REQUIRED
/3	STARTING CDF
/4	STARTING PC
/5	# OF BLOCKS TO SAVE (0 IF ERRORS)
/6	MAXIMUM CORE
/7	VERSION # OF COMPILER
/10	EXTENSION TO USE FOR SAVE (DB, DF, DM)
SAVOVR,	TAD	(COMPWA
	JMS I	(SPLIT
	JMS I	SYSHND		/GET HEADER OF COMP W.A.
	0200
	DIRECT
	0
	TAD I	(DIRECT+5	/GET # OF BLOCKS TO SAVE
	SNA			/ERRORS?
	JMP	BADSAV		/YUP
	DCA	GET		/TEMPORARY
	JMS I	(GETNAM
	JMP	ERCOM
	JMS I	(GETDEV
	TAD	(COMPWA		/STARTING BLCOK BIN WORK AREA
	DCA	SAVBLK
	TAD I	(DIRECT+10
	TAD	(-0402
	SZA
	TAD	(0402-0406
	SZA
	TAD	(0406-0415
	SZA CLA
	JMP	BADSAV
	TAD I	(DIRECT+10	/GET THE EXTENSION
	DCA	NAM4
	TAD	GET		/# OF BLOCKS TO SAVE
	CLL RTR
	RTR			/DIV. BY 20(8)
K20,	AND	P77
	CMA
	DCA	COUNT		/- # OF 20-BLOCK TRANSFERS-1
	TAD 	GET
	AND	P17
	CLL RTR
	RTR
	RTR
	DCA	NCPL		/SAVE REMAINDER
	TAD	(10
	DCA	RDCTL		/SET FIELD BIT
	DCA	DBLOCK
	TAD	KKSKP
	DCA I	(CTCFIX		/NO ^C FROM HERE ON
	TAD 	GET
	JMS I	(ENTER
	DCA	LNPRPG		/TEMPORARY
	TAD	(JMP	SLOOP
	DCA	SVEXIT
SLOOP,	ISZ	COUNT
KKSKP,	SKP
	JMP	LSTWRI
	TAD	SAVBLK
	JMS I	(SPLIT
	JMS I	SYSHND		/GET COMPILER PROG
RDCTL,	0
	0
	0
	TAD	K20
	TAD	SAVBLK		/BUMP BLK #
	DCA	SAVBLK
	AC4000
	TAD	RDCTL
	TAD	UNIT
	DCA	WRICTL
	TAD	LNPRPG
	JMS I	(SPLIT
	JMS I	DAVICE
WRICTL,	0
	0
	0
	TAD	K20
	TAD	LNPRPG
	DCA	LNPRPG
SVEXIT,	JMP	SLOOP		/MAY BE "JMP I P7600"

LSTWRI,	TAD	JMPSTR
	DCA	SVEXIT
	TAD	NCPL
	SNA
JMPSTR,	JMP I	P7600
	TAD	RDCTL
	DCA	RDCTL
	JMP	SLOOP
ERCOM,	JMS I	(ERRMSG
	BADCOM-1
	JMP I	P7600
BADSAV,	JMS I	(ERRMSG
	CMPERR&177+4400-1	/"--------------------"BAD COMPILATION"
	JMP I	P7600
SAVBLK,	0
CMPERR,	-10		/"BAD COMPILATION"
	4342
	4501
	4460
	5661
	5255
	4265
	5260
	5700
/
	PAGE

/ROUTINE TO GET AND STORE THE DATE FROM THE "DATE" COMMAND
DACOM,	JMS I	(NUMBR
	JMP	DATERR
	SNA
	AC4000
	TAD	(-14
	SMA SZA
	JMP	DATERR
	TAD	(14
	CLL RTR
	RTR
	RAR
	DCA	DTEM
	JMS	GDNM
	SNA
	AC4000
	TAD	(-37
	SMA SZA
	JMP	DATERR
	TAD	(37
	CLL RTL
	RAL
	TAD	DTEM
	DCA	DTEM
	JMS	GDNM
	TAD	(-120
	CLL
	TAD	(10
	SNL
	JMP	DATERR
	TAD	DTEM
	DCA I	PDATE
	CLL CML
	TAD	(0123
	7014
	SMA CLA
	JMP I	P7600
	CLL CML RAR	/KILL!
	DCA I	(7604
	DCA I	(7606	/KILL!
	JMP I	P7600	/CRASH!
DTEM,	0

GDNM,	0
	JMS I	(GETC
	JMP	DATERR
	CLA
	JMS I	(NUMBR
	SKP CLA
	JMP I	GDNM
DATERR,	CLA
	JMS I	(ERRMSG
	DATFRM&177+4600-1
	JMP I	P7600
DATFRM,	-13
	4657	/EN
	6546	/TE
	6301	/R
	0345	/"D
	4265	/AT
	4601	/E
	5656	/MM
	2045	//D
	4520	/D/
	7272	/YY
	0300	/"

/"DO" OVERLAY THING
DOVERL,	JMS I	(GETNAM
	JMP	BADDO		/GOT TO HAVE A NAME
	TAD	SYSHND
	DCA	DAVICE
	DCA	UNIT
	TAD	(0123		/"AS"
	DCA	NAM4
	DCA	DBLOCK		/FOR EUPHONIOUS AND SALUDICATIOUS REASONS
	JMS I	(LOOKUP		/(DON'T ASK ME WHAT IT MEANS)
	NAM1-1
	JMP	NODOFI		/FILE NOT FOUND
	DCA	PUT		/SAVE IN PREPARATION FOR SYSINI THING
	JMS I	KPTRST
	TAD	(200
	DCA I	W0
	TAD	PDCNT
	DCA I	W1
	AC7777
	TAD I	W1
	DCA I	W2		/FIX UP BUFFER POINTER-1
	TAD	PUT
	IAC		/RDOIO WANTS TO BE SET UP TO THE BUFFER ONE MORE
		/THAN THE ONE IT'S ON (SEE LONG-WINDED NOTE AT ROUTINE
		/"REREAD" AND EXAMINE CODE "GPBUF" IF YOU'RE REALLY INTERESTED)
	CLL RAR
	RTR
	RTR
	DCA	TEMP
	TAD	TEMP
	AND	P7400
	DCA I	W5
	TAD	TEMP
	RAL
	AND	(377
	DCA I	W4
	TAD	P7400		/SHOW 400 WORDS LEFT IN BUFFER
	DCA I	W3
	DCA	DBLOCK
	JMP I	P7600
BADDO,	JMS I	(ERRMSG
	BADCOM-1
	JMP I	P7600
NODOFI,	JMS I	(ERRMSG
	NOTFND-1
	JMP I	P7600
/
	PAGE

/DIRECTORY EXPANSION OVERLAY
/CALLED IN MOMENTS OF EXTREME DURESS
/ADDS ANOTHER BLOCK TO THE LINKED DIRECTORY (IN THEORY, AT LEAST)
/IT RUNS AT *3000
/
MEOVLP,	TAD I	PDLINK
	SNA CLA			/ANY SEGMENTS AFTER THIS ONE?
	JMP	MELAST		/LAST ONE, MUST CREATE ANOTHER (PAIN AND AGONY)
	ISZ I	PDCNT		/BUMP ENTRY COUNT DOWN
	AC4000
	JMS I	(MREADC		/WRITE OUT THIS SEGMENT
	JMS	MSKIPF		/FIND END OF SHORTENED DIRECTORY
	DCA	MEFCNT		/PREPARE TO TRANSFER LAST ENTRY
	TAD	(MEOVLS-1
	DCA	XR1		/INTO NEXT DIRECTORY SEGMENT
	TAD I	XR
	DCA I	XR1
	ISZ	MEFCNT
	TAD	XR
	CIA
	TAD	ETMP		/ETMP WAS SET UP BY ENTER
	SZA CLA			/(IT SAYS HERE IN FINE PRINT...)
	JMP	.-7
	TAD I	ETMP		/GET LENGTH OF MOVED ENTRY
	DCA	MEOCNT
	TAD I	PDLINK
	JMS I	(MRDCAT		/READ NEXT SEGMENT
	JMS I	(CONSOL		/MAKE SURE IT IS AT ITS SMALLEST
	TAD I	PDORG
	TAD	MEOCNT
	DCA I	PDORG		/BUMP FILE ORIGIN DOWN
	JMS	MSKIPF		/FIND LAST LOC IN NEW SEGMENT
	TAD	XR
	DCA	ETMP
	AC7777
	TAD	XR
	TAD	MEFCNT
	DCA	XR		/PREPARE TO PUSH ALL ENTRIES UP
	TAD	(DIRECT+6
	DCA	EPTR
	JMS I	(MOVEUP
	TAD	(MEOVLS-1
	DCA	XR		/PREPARE TO MOVE THE SAVED ENTRY
	AC7777			/INTO THE NEW SEGMENT
	TAD I	PDCNT
	DCA I	PDCNT		/INCREASE ENTRY COUNT OF NEW SEGMENT
	TAD	MEFCNT
	CIA
MECOMN,	DCA	MEFCNT		/STORE NUMBER OF WORDS TO MOVE
	TAD	PDWSTE
	DCA	XR1
	TAD I	XR
	DCA I	XR1
	ISZ	MEFCNT
	JMP	.-3		/MOVE THE ENTRY IN
	JMS	MSKIPF
	TAD	XR
	DCA	ETMP		/ETMP= LAST LOC IN SEGMENT
	JMS I	(BUMPXR
	TAD	XR
	TAD	(-DIRECT-372
	SMA CLA			/HAVE WE MADE THE SEGMENT TOO BIG?
	JMP	MEOVLP		/YES - LOOP UNTIL WE GET IT RIGHT
	AC4000
	JMS I	(MREADC		/WRITE OUT SEGMENT
	JMP I	(RENTER		/AND CONTINUE WITH ENTER
MELAST,	TAD I	PDCNT
	CLL CML RAR		/GIVE THE NEW SEGMENT HALF THE OLD ENTRIES
	DCA	EPTR		/LENGTH OF NEW SEGMENT
	TAD	EPTR
	CIA
	TAD I	PDCNT
	DCA I	PDCNT		/ADJUST LENGTH OF OLD SEGMENT
	JMS	MSKIPF		/FIND BOUNDARY LOC BETWEEN SEGS
	TAD	DBLOCK
	AND	P7
	IAC
	DCA I	PDLINK		/LINK THE OLD SEGMENT TO THE NEW
	TAD I	PDLINK
	TAD	(-7
	SMA CLA
	JMP I	(NOSPAC		/PROVIDED THERE IS ROOM FOR ANOTHER
	AC4000
	JMS I	(MREADC		/WRITE OUT NEXT-TO-LAST SEG
	ISZ	DBLOCK
	TAD	EPTR
	DCA I	PDCNT
	TAD	MEOCNT
	CIA
	TAD I	PDORG
	DCA I	PDORG		/SET UP PARAMS FOR NEW SEG
	DCA I	PDLINK		/MARK IT AS THE NEW LAST SEGMENT
	TAD	XR
	TAD	(-DIRECT-377	/SET UP COUNT OF WORDS TO SLIDE DOWN
	JMP	MECOMN		/USE COMMON SLIDING CODE, & EXIT

MSKIPF,	0			/SUB. TO FIND LAST LOC USED IN A SEG
				/ALSO FINDS # OF BLOCKS USED BY SEG
	TAD I	PDCNT
	DCA	MNOFIL
	TAD	PDWSTE
	DCA	XR
	DCA	MEOCNT
MSKPLP,	TAD I	XR
	SNA CLA			/EMPTY ENTRY?
	JMP	MEOMTY		/YUP
	AC7775
	JMS I	(BUMPXR		/POINT TO LENGTH WORD OF FILE ENTRY
MEOMTY,	TAD I	XR
	TAD	MEOCNT		/GET LENGTH
	DCA	MEOCNT		/& ADD IT UP
	ISZ	MNOFIL
	JMP	MSKPLP
	JMP I	MSKIPF
MEOCNT,	0
MEFCNT,	0
MNOFIL,	0
/
	PAGE

	IFNZRO	EPOT < XLIST
	/ROUTINE TO PRINT OUT REGISTERS.OF RK8E DISK HANDLER
	/ON ERROR
	/NO TAPES CAN BE ACCESSED IF THIS ROUTINE RESIDES IN 
	/THE MONITER, A HALT AND JMP .-1 WILL OCCUR IF THE
	/TAPE HANDLER IS CALLED.  THIS ROUTINE IS CALLED FROM 
	/IODEV, THE ERROR HANDLER FOR DISK AND TAPE
	FIELD 0
*6600
KPAG,	PAGCNT
KGARG,	GARG
KTMP,	0
KMSK,	0007
KR201,	201
KCHK,	CHKHED
FOUR,	0
K7774,	7774
*6610
KSDLCX,		/STOP TAPE FUNCTION
KDTA,	0
	HLT		/HANG IF TAPE IS ACCESSED
	JMP	.-1
EPO,	DRST		/READ STATUS REG
	DCA	KTMP	/STORE STATUS REGISTER
	JMS	DMAN1	/PRINT IT OUT
	TAD I	KPAG	/COMPUTE COMMAND REG. SAME
	AND	(7600	/WAY AS IN DISK ROUTINE
	SNA CLA
	TAD I	KR201
	TAD I	KCHK
	CLL RAR
	TAD I	KRKEC
	DCA	KTMP
	JMS	DMAN1	/PRINT IT OUT
	TAD I	KGARG	/GET DISK ADDRESS
	DCA	KTMP
	JMS	DMAN1
	TAD	(215
	JMS I	TTYOUT
	TAD	(212	/PRINT CRLF
	JMS I	TTYOUT
	JMP I	(KZZRT
DMAN1,	0
	TAD	K7774
	DCA	FOUR
KAG2,	TAD	KTMP
	RTL CLL
	RAL
	DCA	KTMP	/STORE
	TAD	KTMP
	RAL
	AND	KMSK	/GET ONE CHAR
	TAD	(260
	JMS I	TTYOUT	/PRINT OUT THE CHARACTER
	ISZ	FOUR	/DO FOUR TIMES PER REG.
	JMP	KAG2
	TAD	(240
	JMS I	TTYOUT
	CLA
	JMP I	DMAN1
KRKEC,	RKECMD
	XLIST
	PAGE >

/DECTAPE ERROR HALT PATCH,TO BE ENTERED BY
/SWITCH REGISTERS ONLY
IFNZRO EPOT2 < XLIST
*6540
KZTAP1,	SDRC	/READ COMMAND REGISTER ON COMPUTED CHECKSUM ERROR
	HLT	/DISPLAYED IN AC
	JMP I	KZTE1	/RETRY
KZTAP2,	SDRC
	HLT
	JMP I	KZTE1	/RETRY
KZTAP3,	SDRC
	HLT		/SELECT ERROR
	JMP I	KZTE2	/PRINT MESSAGE
KZTE1,	TRY3+1
KZTE2,	TDMESG
	XLIST
	PAGE >

/		C A U T I O N !
/	INITIAL MONITOR WRITE-OUT ROUTINE
/	TEMPORARILY MOVES OS/8 PAGE 7600 FIELD 0
/	TO PAGE 6000 FIELD 1 WHILE IT DOES ITS THING TO
/	WRITE OUT THE SYSTEM...SO DON'T PUT ANYTHING AT 16000

IFZERO SYSNUM <SYSDEV=DTA;	SYSINT=DTINTL>
IFNZRO SYSNUM&1 <SYSDEV=RK8;	SYSINT=RKINTL>
IFNZRO SYSNUM&2 <SYSDEV=RF08;	SYSINT=RFINTL>
	/NON-OBVIOUS THINGIE;
	/PARTICULAR TIMES IN THE LIFE OF THE MONITOR; "RUN" TIME AND
	/"BOOTSTRAP" TIME.  AT EITHER OF THESE TIMES, PAGE 0 IS READ
	/OVER WITH INTERRUPTS ON, AND IF LOCATION 0 IS READ OVER THE
	/INSTANT AFTER GETTING AN INTERRUPT, THE WORLD WILL COME TO
	/AN END UNLESS SOMETHING IS DONE.  WHAT IS DONE IS,
	/SINCE ONLY THE SYSTEM DEVICE IS USED FORRUN & CTRL/C,
	/THE MONITOR CAN ONLY BE IN THE SYSTEM DEVICE WAIT LOOP WHEN
	/THE INTERRUPT OCCURS.  THEREFORE, LOCATION 0 IS INITIALIZED TO
	/POINT TO THE SYSTEM DEVICE WAIT LOOP, WHICH WILL BE THE PLACE
	/IT MUST HAVE COME FORM IN THIS SPECIAL CASE.  OK?
	$$$
$

