Google
 

Trailing-Edge - PDP-10 Archives - AP-4178E-RM - swskit-sources/save.lis
There is 1 other file named save.lis in the archive. Click here to see a list.
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41
TABLE OF CONTENTS

    2-   2	TITLE PAGE
    3-  70	GENERAL DESCRIPTION OF SAVE FUNCTION
    4- 142	MACROS AND PARAMETERS
    5- 240	DEVICE REGISTER DEFINITIONS
    6- 333	SAVE TASK IMPURE DATA AREA
    7- 388	PURE DATA
    8- 442	PARSE COMMAND LINE
    9- 543	SETUP SAVE FILE
   10- 712	DISMOUNT ALL MOUNTED VOLUMES
   11- 754	SAVE SYSTEM STATE
   12- 861	WRITE SAVE FILE AND BOOT
   13- 878	RESTORE SYSTEM STATE
   14- 917	RESTORE -- SETUP CTY LINE # AND DH-11 TABLES
   15- 980	RESTORE -- REDIRECT SY0: TO BOOT DEVICE
   16-1033	RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S
   17-1091	RESTORE -- CHECK ALL THE DTE-20'S
   18-1155	RESTORE -- RESTART SYSTEM AND TYPE HERALD
   19-1196	RESTORE -- TYPE SY0: REDIRECT MESSAGE AND MOUNT SY0:
   20-1220	RESTORE -- READ HOM BLOCKS ON BOOT DB
   21-1311	RESTORE -- CKECK STATE OF KLINIK LINE
   22-1403	RESTORE -- REQUEST KL INITIALIZATION TASK AND/OR EXIT
   23-1437	COMMAND PARSER ROUTINES
   24-1521	TYPEOUT ROUTINES
   25-1719	FILE I/O ROUTINES
   26-1792	DRIVER TABLES
   27-1834	RX-11 FLOPPY DISK ROUTINES
   28-1853	RX-11 BOOTSTRAP
   29-2024	RX-11 WRITE ROUTINE
   30-2149	RP04/RP06 DISK ROUTINES
   31-2182	RP04/RP06 BOOTSTRAP
   32-2268	RP04/RP06 WRITE ROUTINE
   33-2326	TC-11 DECTAPE ROUTINES
   34-2342	TC-11 BOOTSTRAP
   35-2459	TC-11 WRITE ROUTINE
   36-2543	END STATEMENT
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 2
RSXDC -- RSX20F CONDITIONAL DEFINITION MODULE

      1						.TITLE	SAVE -- MCR FUNCTION 'SAV' FOR RSX-20F
      2						.SBTTL	TITLE PAGE
      3						.IDENT	/010050/
      4					;
      5					;
      6					;
      7					;                             COPYRIGHT (C) 1975, 1978 BY
      8					;                     DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
      9					;
     10					;       THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE  USED  AND  COPIED
     11					;       ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
     12					;       OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY OTHER COPIES THERE-
     13					;       OF  MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
     14					;       NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
     15					;
     16					;       THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT
     17					;       NOTICE  AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
     18					;       CORPORATION.
     19					;
     20					;       DIGITAL ASSUMES NO RESPONSIBILITY FOR THE  USE  OR  RELIABILITY  OF  ITS
     21					;       SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
     22					;
     23					;
     24					;
     25					;
     26					;
     27					;
     28					;
     29					;		MODULE: MCR FUNCTION -- SAV
     30					;
     31					;		VERSION: VX10-05
     32					;
     33					;		AUTHOR: TOM PORCHER
     34					;
     35					;		DATE: 10-SEP-75
     36					;
     37					;
     38					;	THIS MODULE CONTAINS:
     39					;
     40					;	-- GENERAL FUNCTIONAL DESCRIPTION
     41					;
     42					;	-- COMMAND PARSER FOR SAV
     43					;
     44					;	-- CODE TO SAVE MACHINE STATE
     45					;
     46					;	-- CODE TO WRITE BOOTSTRAP AND SAVE FILE
     47					;
     48					;	-- CODE TO RESTORE SAVED SYSTEM AND RESTART
     49					;
     50					;	-- RX-11 FLOPPY DISK I/O DRIVER ROUTINES
     51					;
     52					;	-- RP DISK I/O DRIVER ROUTINES
     53					;
     54					;	-- TC-11 DECTAPE I/O DRIVER ROUTINES
     55					;
     56					; MODIFICATIONS:
     57					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 2-1
TITLE PAGE

     58					;	NO.	DATE		PROGRAMMER	PURPOSE
     59					;	---	----		----------	-------
     60					;	001	23-MAY-77	R. BELANGER	SUPPORT KLINIK ACTIVITY
     61					;						ON REBOOT.
     62					;	002	31-MAY-77	R. BELANGER	MODIFY TO SAVE ONLY IMAGE
     63					;						OF EXEC AND SAVE TASK.
     64					;	003	1-JUN-77	A. PECKHAM	MODIFY REFERENCE TO SYSTEM
     65					;						VERSION NUMBER.
     66					;	004	01-JUL-77	R. BELANGER	ADD KLINIK EVENT LOGGING
     67					;	005	10-NOV-77	R. BELANGER	ADD CODE TO RESET DL11'S (SETDL)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 3
TITLE PAGE

     69
     70						.SBTTL	GENERAL DESCRIPTION OF SAVE FUNCTION
     71					;
     72					;+
     73					;
     74					;	SAV IS INVOKED BY THE COMMAND 'MCR SAV' TO THE
     75					; RSX-20F CONSOLE COMMAND LANGUAGE.  IT ACCEPTS ONE LINE FROM THE
     76					; CONSOLE WHICH HAS THE FOLLOWING FORMAT:
     77					;
     78					;	[$<SP>] [<ALPHA> <ALPHA> [$<DIGIT>]] [":"] [$<SP>] ["/" <MODIFIER>] <EOL>
     79					;
     80					;	WHERE	$<THING> MEANS ANY NUMBER OF <THING>S
     81					;		[<THING>] MEANS OPTIONAL <THING>
     82					;		"<THING>" MEANS LITERALLY <THING>
     83					;		<SP> IS SPACE, <EOL> IS ANY END-OF-LINE SEQUENCE,
     84					;		<DIGIT> IS ONE OF 0,1,2,3,4,5,6,7
     85					;		<ALPHA> IS ONE OF A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
     86					;		<MODIFIER> IS ONE OF WB,WS,AB,EX,MO,DM,RH,PI
     87					;
     88					;
     89					; **** NOTE THAT SAVE MUST BE CALLED ONLY WHEN THE SYSTEM IS QUIESCENT,
     90					; **** I.E. WITH NO PENDING INTERRUPTS, AND THE DTE QUEUED PROTOCOL NOT
     91					; **** RUNNING.
     92					;
     93					;	SAVE FINDS THE PHYSICAL DISK ADDRESS OF FILE (5,5) WHICH IS
     94					; THE SYSTEM IMAGE FILE.  IF THE FILE IS NOT ALLOCATED, IT IS ALLOCATED
     95					; TO THE SIZE OF THE CURRENT SYSTEM (.MSIZE) CONTIGUOUSLY.  SAVE
     96					; THEN TURNS OFF THE INTERRUPT SYSTEM (PRIORITY 7) AND SAVES THE
     97					; STATE OF THE SYSTEM HARDWARE (KT-11 IF ANY), THEN COPIES LOW CORE
     98					; (FIRST 256. WORDS) INTO A SAVE AREA.  THE PROPER BOOT FOR THE
     99					; REQUESTED DEVICE IS WRITTEN INTO LOW CORE.  THE SYSTEM IMAGE FILE IS WRITTEN,
    100					; USING THE DISK ROUTINES IN SAVE INSTEAD OF THE SYSTEM DISK DRIVERS TO PRESERVE
    101					; THE INTEGRITY OF THE SYSTEM IMAGE.  IF WRITE BOOT (/WB) WAS SPECIFIED, THE PROPER
    102					; BOOTSTRAP IS ALSO WRITTEN ON BLOCK ZERO OF THE SPECIFIED DEVICE.
    103					; SAVE THEN ENTERS THE RESTORE CODE, AS IF THE SYSTEM HAD JUST BEEN
    104					; LOADED, SPECIFYING NO SYSTEM INITIALIZATION.
    105					;
    106					;	WHEN THE BOOTSTRAP ROM IS INITIATED (BY ONE OF THE BUTTONS)
    107					; BLOCK ZERO OF THE DEVICE IS READ INTO THE FIRST 256. WORDS OF MEMORY.
    108					; THIS CODE THEN READS THE REMAINDER OF THE SYSTEM INTO CORE, READING
    109					; OVER ITSELF, SINCE THE BOOTSTRAP IS ALSO  CONTAINED IN THE FIRST
    110					; BLOCK OF THE SYSTEM IMAGE.  THE BOOTSTRAP THEN TRANSFERS CONTROL
    111					; (IN USER MODE) TO THE RESTORE CODE, CONTINUING EXECUTION OF THE
    112					; SAVE TASK.
    113					;
    114					;	THE SYSTEM STATE IS RESTORED BY FIRST RESTORING LOW CORE FROM
    115					; THE SAVE AREA.  THE KT-11 REGISTERS ARE RESTORED (IF THEY WERE SAVED).
    116					; A POWER-RECOVERY
    117					; IS SIMULATED BY SETTING EV.PR IN .SERFG, AND INTERRUPTS ARE
    118					; RE-ENABLED, AT PRIORITY ZERO.  THE TOPS HOM BLOCKS ARE
    119					; READ FROM RP BOOT UNIT (IF RP BOOT) TO FIND WHERE THE RSX-20F FILE SYSTEM
    120					; IS ON THAT PACK.  WARNINGS ARE PRINTED IF THE HOM BLOCKS CANNOT BE READ,
    121					; THE HOM BLOCKS ARE INCONSISTENT, OR THE RSX-20F FILE SYSTEM IS NOT SET UP.
    122					; IF NO HOM BLOCKS ARE FOUND, THE PACK IS ASSUMED TO BE ENTIRELY AN RSX-20F
    123					; FILE SYSTEM.
    124					;
    125					;	IF THE PARAMETER FROM THE ROM
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 3-1
GENERAL DESCRIPTION OF SAVE FUNCTION

    126					; INDICATES SYSTEM INITIALIZATION IS NECCESARY (BP.LD1!BP.LD0 = 00 OR 11)
    127					; A REQUEST FOR THE SYSTEM INITIALIZATION TASK SYSINI IS MADE.
    128					; A SYSTEM RESTART MESSAGE IS ALSO PRINTED.  THE SAVE TASK THEN EXITS.
    129					;
    130					;	AVAILABLE MODIFIERS:
    131					; /WB	(OFF) WRITE BOOT
    132					; /WS	(ON)  WRITE SAVE FILE
    133					; /AB	(OFF) SAVE TO FIXED DISK ADDRESS (NEAR END OF VOLUME) (ONLY IF FTABS DEFINED)
    134					; /EX	(ON)  EXIT AFTER SAVE COMPLETE
    135					; /MO	(OFF) MOUNT VOLUME BEFORE CREATING SAVE FILE
    136					; /DM	(OFF) DISMOUNT VOLUME AFTER CREATING SAVE FILE
    137					; /RH	(ON)  READ HOM BLOCKS TO FIND RSX-20F FILE SYSTEM
    138					;
    139					;-
    140					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 4
MACROS AND PARAMETERS

    142						.SBTTL	MACROS AND PARAMETERS
    143					;
    144					; ASSEMBLY CONDITIONS
    145					;
    146						.LIST	MEB
    147						.ENABLE	AMA
    148					;
    149					; MISC. .MCALLS
    150					;
    151					.MCALL $DEF,QIOSY$,ALUN$S,QIOW$S,GTIM$S,EXIT$S,RQST$S,CLEF$S,MRKT$S,WTSE$S
    152					.MCALL CALL,RETURN,PUSH,POP,MTPI,MFPI,MFPS,MTPS,.INH,.ENB,.INH6,.ENB6
    153	000000					$DEF
    154	000000					QIOSY$
    155					;
    156					; MACROS
    157					;
    158					.MACRO	TYPE	MSG,ARG
    159						.PSECT	TEXT
    160					$$$=.
    161						.ASCIZ	"MSG"
    162						.PSECT
    163						PUSH	#$$$
    164					.IF NB <ARG>
    165						CALL	TYP'ARG
    166					.IFF
    167						CALL	TYPMSG
    168					.ENDC
    169					.ENDM	TYPE
    170					;
    171					.MACRO	ERROR	MSG
    172						TYPE	<"<11>"MSG"<5>">
    173					.ENDM	ERROR
    174					;
    175					.MACRO	WARN	MSG
    176						TYPE	<"<12>"MSG"<1>">
    177					.ENDM	WARN
    178					;
    179					;
    180					; PARAMETERS
    181					;
    182					; DEFINE "FTABS= 1" TO ALLOW FOR /AB (ABSOLUTE SAVE)
    183					;
    184					; LUN ASSIGNMENTS
    185					;
    186		000001 			CTYLUN=	1			;LUN FOR CTY
    187		000002 			DSKLUN=	2			;LUN FOR SAVE DEVICE
    188					;
    189					; EVENT FLAGS
    190					;
    191		000001 			E.FQIO=	1			; (1) QIO WAIT REQUEST
    192		000001 			 EF.QIO=BIT0
    193					;
    194		000002 			E.FTMO= 2			; +++001 (2) TIME OUT FLAG
    195		000002 			 EF.TMO=BIT1
    196					;
    197		000003 			E.FLOG= 3			; +++004 (3) KLINIK LOG DONE FLAG
    198		000004 			 E.FLOG=BIT2			; +++004
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 4-1
MACROS AND PARAMETERS

    199					;
    200					; BOOTSTRAP ROM PARAMETER BITS
    201					;
    202		100000 			BP.ERR=	BIT15			;INDEFINITE ERROR RETRY
    203		074000 			BP.CLN=	BIT14!BIT13!BIT12!BIT11	;CONSOLE LINE NUMBER (WITHIN DH/DL)
    204		003400 			BP.UNT=	BIT10!BIT9!BIT8		;BOOT UNIT NUMBER OR DH UNIT NUMBER
    205		000200 			BP.RP4=	BIT7			;LOAD FROM RP04/RP06
    206		000170 			BP.CSP=	BIT6!BIT5!BIT4!BIT3	;CONSOLE SPEED IF DH, 1 IF DL, 0 IF DEFAULT
    207		000004 			BP.LD1=	BIT2			;LOAD CONDITION BITS
    208		000002 			BP.LD0=	BIT1			; . . .
    209									; .EQ. 00 -- AUTO DEADSTART ENTIRE SYSTEM
    210									; .EQ. 01 -- DEADSTART RSX20F ONLY
    211									; .EQ. 10 -- REBOOT RSX20F
    212									; .EQ. 11 -- OPERATOR CONTROLLED (RE)START
    213		000001 			BP.SWR=	BIT0			;SWITCH REGISTER BUTTON PUSHED
    214					;
    215					; PS BITS
    216					;
    217		140000 			PS.USR=	BIT15!BIT14
    218		030000 			PS.PUS=	BIT13!BIT12
    219		004000 			PS.REG=	BIT11
    220					;
    221					; WORDS IN HOM BLOCK
    222					;
    223		000000 			HOMNAM=	0			;SIXBIT/HOM/
    224		105755 			 SXBTHM= 105755			; TRUNCATED TO 16 BITS
    225		000061 			HOMFE0=	61			;ADDRESS OF -11 FILE SYSTEM
    226		000062 			HOMFE1=	62			;SIZE OF FILE SYSTEM
    227					;
    228					; EXTEND CONTROL BITS FOR QUEUE I/O FUNCTION IO.EXT
    229					;  IN BYTE I.EXTD+1 OF REQUEST
    230					;
    231		000001 			EX.AC1=	BIT0			;ALLOCATE CONTIGUOUS SPACE
    232		000004 			EX.FCO=	BIT2			;MAKE FILE CONTIGUOUS
    233		000200 			EX.ENA=	BIT7			;ENABLE EXTEND
    234					;
    235					; ACCESS CONTROL BITS FOR QUEUE I/O ACCESS FUNCTIONS
    236					;  IN BYTE I.ACTL OF REQUEST
    237					;
    238		000200 			AC.ENA=	BIT7			;ENABLE ACCESS
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 5
DEVICE REGISTER DEFINITIONS

    240						.SBTTL	DEVICE REGISTER DEFINITIONS
    241					;
    242					; RX-11 DEVICE REGISTER DEFINITIONS
    243					;
    244		177170 			RXCS=	177170			;CONTROL AND STATUS REGISTER
    245		100000 				RXERR=	BIT15		;ERROR
    246		040000 				RXINIT=	BIT14		;INITIALIZE RX-11
    247		000200 				RXTREQ=	BIT7		;TRANSFER REQUEST
    248		000040 				RXDONE=	BIT5		;TRANSFER DONE
    249		000020 				RXUNIT=	BIT4		;UNIT SELECT
    250		000016 				RXFUNC=	BIT3!BIT2!BIT1	;FUNCTION:
    251		000000 					RXFILL=	0*BIT1	; FILL SECTOR BUFFER
    252		000002 					RXEMPT=	1*BIT1	; EMPTY SECTOR BUFFER
    253		000004 					RXWRIT=	2*BIT1	; WRITE SECTOR
    254		000006 					RXREAD=	3*BIT1	; READ SECTOR
    255		000016 					RXRERR=	7*BIT1	; READ ERROR REGISTER
    256		000001 				RXGO=	BIT0		;START FUNCTION
    257		177172 			RXDB=	177172			;MULTI-PURPOSE DATA BUFFER REGISTER (BYTE)
    258					;
    259					; RP04/RP06 DEVICE REGISTER DEFINITIONS
    260					;
    261		176700 			RPCS1=	176700			;CONTROL/STATUS REGISTER 1
    262		040000 				RPTRE=	BIT14		;TRANSFER ERROR
    263		020000 				RPMCPE=	BIT13		;MASSBUS CONTROL PARITY ERROR
    264		004000 				RPDVA=	BIT11		;DRIVE AVAILABLE (TO -11)
    265		000200 				RPRDY=	BIT7		;READY FOR FUNCTION
    266		000076 				RPFUNC=	BIT5!BIT4!BIT3!BIT2!BIT1 ;FUNCTION:
    267		000000 					RPNOOP=	0*BIT1	; NO-OP
    268		000020 					RPPRST=	10*BIT1	; READ-IN PRESET
    269		000060 					RPWRIT=	30*BIT1	; WRITE DATA
    270		000070 					RPREAD=	34*BIT1	; READ DATA
    271		000001 				RPGO=	BIT0		;START FUNCTION
    272		176702 			RPWC=	176702			;WORD COUNT REGISTER
    273		176704 			RPBA=	176704			;UNIBUS ADDRESS REGISTER
    274		176706 			RPDA=	176706			;TRACK (HIGH BYTE) SECTOR (LOW BYTE)
    275		176710 			RPCS2=	176710			;CONTROL/STATUS REGISTER 2
    276		000007 				RPUNIT=	BIT2!BIT1!BIT0	;UNIT #
    277		176712 			RPDS=	176712			;DRIVE STATUS REGISTER
    278		100000 				RPATA=	BIT15		;DRIVE ATTENTION ACTIVE
    279		040000 				RPERR=	BIT14		;DRIVE ERROR
    280		010000 				RPMOL=	BIT12		;MEDIUM ON-LINE
    281		001000 				RPPGM=	BIT9		;PROGRAMMABLE (A/B) MODE
    282		000400 				RPDPR=	BIT8		;DRIVE PRESENT
    283		176726 			RPDT=	176726			;DRIVE TYPE REGISTER
    284		000020 				RPDT04=	20		;TYPE= RP04
    285		000022 				RPDT06=	22		;TYPE= RP06
    286		176732 			RPOF=	176732			;OFFSET REGISTER
    287		010000 				RPFM22=	BIT12		;22-SECTOR FORMAT
    288		004000 				RPECCI=	BIT11		;INHIBIT ERROR CORRECTION
    289		176734 			RPDC=	176734			;DESIRED CYLINDER
    290					;
    291					; TC-11 DECTAPE DEVICE REGISTER DEFINITIONS
    292					;
    293		177340 			TCST=	177340			;STATUS REGISTER
    294		100000 				TCENDZ=	BIT15		;END-ZONE ERROR
    295		177342 			TCCM=	177342			;COMMAND REGISTER
    296		100000 				TCERR=	BIT15		;ERROR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 5-1
DEVICE REGISTER DEFINITIONS

    297		004000 				TCREV=	BIT11		;REVERSE DIRECTION (TOWARD FOWARD END-ZONE)
    298		003400 				TCUNIT=	BIT10!BIT9!BIT8	;UNIT SELECT
    299		000200 				TCRDY=	BIT7		;READY
    300		000016 				TCFUNC=	BIT3!BIT2!BIT1	;FUNCTION:
    301		000000 					TCSATM=	0*BIT1	; STOP ALL TAPE MOTION
    302		000002 					TCRNUM=	1*BIT1	; READ BLOCK NUMBERS
    303		000004 					TCREAD=	2*BIT1	; READ DATA
    304		000010 					TCSTOP=	4*BIT1	; STOP SELECTED TAPE
    305		000014 					TCWRIT=	6*BIT1	; WRITE DATA
    306		000001 				TCGO=	BIT0		;START FUNCTION
    307		177344 			TCWC=	177344			;WORD COUNT REGISTER
    308		177346 			TCBA=	177346			;BUS ADDRESS REGISTER
    309		177350 			TCDT=	177350			;DATA REGISTER
    310					;
    311					; DTE-20 DEVICE REGISTER DEFINITIONS
    312					;
    313		000774 			DTVECA=	774			;DTE-20 #0 INTERRUPT VECTOR (THEY GO DOWN!)
    314		174400 			DTEXPA=	174400			;EXTERNAL PAGE ADDRESS OF DTE #0
    315		000040 			DTEXPZ=	40			;SIZE OF ADDRESS BLOCK FOR DTE
    316					;
    317		000034 			DTSTAT=	34			;STATUS REGISTER
    318		004000 				DT11DB=	BIT11		;(READ/WRITE) TO -11 DOORBELL
    319		002000 				DTCL11=	BIT10		;(WRITE) CLEAR TO -11
    320		000040 				DTINON=	BIT5		;(WRITE) INTERRUPT ENABLE
    321		000010 				DTINOF=	BIT3		;(WRITE) INTERRUPT DISABLE
    322		000010 				DTRSMD=	BIT3		;(READ) RESTRICTED MODE
    323					;
    324					; DH-11 DEVICE REGISTER DEFINITIONS
    325					;
    326		160020 			DHEXPA=	160020			;EXTERNAL PAGE ADDRESS OF FIRST DH-11
    327		000020 			DHEXPZ=	20			;SIZE OF ADDRESS SPACE FOR ONE DH
    328					;
    329					; KL-11 LINE CLOCK REGISTER DEFINITION
    330					;
    331		177546 			LKS=	177546
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 6
SAVE TASK IMPURE DATA AREA

    333						.SBTTL	SAVE TASK IMPURE DATA AREA
    334					;
    335					; VARIBLES
    336					;
    337	000000				SPSAVE:	.BLKW	1		;SAVE'S SP IN IMAGE
    338	000002				DRVADR:	.BLKW	1		;ADDRESS OF DRIVER TABLE ENTRY FOR DEVICE
    339	000004				DSKADR:	.BLKW	2		;PHYSICAL DISK ADDRESS OF SAVE FILE
    340	000010				DSKSIZ:	.BLKW	2		;SIZE OF SAVE FILE *** MUST FOLLOW DSKADR ***
    341	000014				MEMSIZ:	.BLKW	1		;SIZE OF SYSTEM IN 32. WORD BLOCKS
    342	000016				RADIX:	.BLKW	1		;OUTPUT RADIX FOR TYPNUM
    343	000020				GTIMBF:	.BLKW	8.		;GET TIME PARAMETERS RETURN BLOCK
    344	000040				CMDCLR:				;START OF AREA TO CLEAR ON STARTUP
    345	000040				PUDADR:	.BLKW	1		;ADDRESS OF SAVE DEVICE PUD ENTRY
    346	000042				DEVNAM:	.BLKW	1		;DEVICE NAME
    347	000044				DEVUNT:	.BLKB	1		;DEVICE UNIT #
    348	000045				PUDIDX:	.BLKB	1		;PUD INDEX FOR THE SAVE DEVICE
    349	000046				WBFLAG:	.BLKB	1		;WRITE BOOT FLAG: 0 DON'T WRITE BOOT
    350									;		  1 WRITE BOOT (/WB SPECFIED)
    351	000047				WSFLAG:	.BLKB	1		;1-- WRITE SAVE FILE
    352					.IF DF FTABS
    353					ABFLAG:	.BLKB	1		;1-- SAVE AT ABSOLUTE PLACE ON DISK
    354					.ENDC ; .IF DF FTABS
    355	000050				EXFLAG:	.BLKB	1		;1-- EXIT WHEN DONE WITH SAVE
    356	000051				MOFLAG:	.BLKB	1		;1-- MOUNT DEVICE BEFORE CREATING SAVE FILE
    357	000052				DMFLAG:	.BLKB	1		;1-- DISMOUNT ALL DEVICES AFTER CREATING SAVE FILE
    358	000053				RHFLAG:	.BLKB	1		;1-- READ HOME BLOCKS
    359	000054				RNFLAG:	.BLKB	1		;1-- RP NOT READY
    360	000055				RPFLAG:	.BLKB	1		;1-- RP NOT IN A/B MODE
    361	000056				QEFLAG:	.BLKB	1		;NON-ZERO-- QIO ERROR CODE FROM FILQIO
    362	000057				ACFLAG:	.BLKB	1		;FLAG ACCESS DONE
    363	000060				WEFLAG:	.BLKB	1		;WRITE ERROR FLAG: 0 WRITE OK
    364									;		   1 WRITE ERROR DURING SAVE
    365	000061				DEFLAG:	.BLKB	1		;DTE-20 # NOT AT PRI 6 (-1 IF ALL OK)
    366		000022 			CMDCLN=.-CMDCLR			;LENGTH OF AREA TO CLEAR
    367					;
    368					; SAVE AREA FOR LOW CORE
    369					;
    370						.EVEN
    371	000062				LOWCOR:
    372					;
    373					; MISC. BUFFERS (OVERWRITTEN BY LOW CORE)
    374					;
    375	000062				HOMBUF:				;BUFFER FOR HOM BLOCKS
    376	000062				TYPBUF:	.BLKB	100.		;BUFFER FOR CTY OUTPUT
    377	000226				CTYBUF:	.BLKB	80.		;BUFFER FOR INPUT FROM CTY
    378		000120 			CTYBFL=	.-CTYBUF
    379	000346	   000 				.BYTE	0		;TO MAKE ASCIZ ALWAYS
    380						.EVEN
    381						.BLKB	<256.*2.>-<.-LOWCOR> ;REST OF LOW CORE
    382	001062				QIOSTS:	.BLKW	2		;QIO STATUS BLOCK
    383	001066				LOGBUF:				; +++004 KLINIK LOG BUFFER
    384	001066	000004 				.WORD	4		; +++004
    385	001070	000000G				.WORD	DV.LOG		; +++004
    386	001072	000000 				.WORD	0		; +++004
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 7
PURE DATA

    388						.SBTTL	PURE DATA
    389					;
    390					; FILE ID BLOCK
    391					;
    392	001074	000005 	000005 		FIDBLK:	.WORD	5,5		;FILE ID 5, FIL SEQ # 5 IS SYSTEM SAVE FILE
    393					;
    394					; ATTRIBUTE CONTROL BLOCK
    395					;
    396	001100	   367 			ATCBLK:	.BYTE	-9.		;ATTRIBUTE 9 (STATISTICS BLOCK), READ
    397	001101	   010 				.BYTE	8.		;8. BYTES OF STATISTICS (FILE ADDR AND SIZE)
    398	001102	000004'				.WORD	DSKADR		;STORE IN DSKADR AND DSKSIZ
    399	001104	   000 	   000 			.BYTE	0,0		;END OF ATTRIBUTE CONTROL BLOCK
    400					;
    401					; MOUNT/DISMOUNT FUNCTION BLOCKS
    402					;
    403	001106	   001 			MNTBLK:	.BYTE	1		;FUNCTION: MOUNT
    404	001107	   001 				.BYTE	1		;LENGTH OF STRING
    405	001110	001112'				.WORD	1$		;ADDRESS OF STRING
    406	001112	   072 			1$:	.ASCII	/:/
    407						.EVEN
    408					;
    409	001114	   002 			DMTBLK:	.BYTE	2		;FUNCTION: DISMOUNT
    410	001115	   000 				.BYTE	0		;NO STRING
    411					;
    412					; TASK NAME FOR KL INITIALIZATION TASK
    413					;
    414	001116	131574 	043251 		KLINIT:	.RAD50	/...KLI/	;KL INITIALIZATION TASK NAME
    415					;
    416					; TABLE OF SPEED WORDS FOR CONSOLE DH FROM BOOT PARAMETER, BP.SPD
    417					;
    418					.MACRO SPD A,B
    419						 .WORD	<A*BIT10>!<A*BIT6>!<B>
    420					.ENDM SPD
    421	001122				DHSTAB:
    422	001122					SPD	0,0		;(0) CONSOLE NOT SPECIFIED
	001122	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    423	001124					SPD	0,0		;(1) DL-11 LINE, NO SPEED
	001124	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    424	001126					SPD	0,0		;(2) DL-11 LINE, NO SPEED
	001126	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    425	001130					SPD	3,BIT2!BIT1!BIT0 ;(3) 110 BAUD, 8 DATA BITS, 2 STOP BITS
	001130	006307 				 .WORD	<3*BIT10>!<3*BIT6>!<BIT2!BIT1!BIT0>
    426	001132					SPD	4,BIT2!BIT1	;(4) 134.5 BAUD, 7 DATA BITS, 2 STOP BITS
	001132	010406 				 .WORD	<4*BIT10>!<4*BIT6>!<BIT2!BIT1>
    427	001134					SPD	5,BIT2!BIT1!BIT0 ;(5) 150 BAUD, 8 DATA BITS, 2 STOP BITS
	001134	012507 				 .WORD	<5*BIT10>!<5*BIT6>!<BIT2!BIT1!BIT0>
    428	001136					SPD	6,BIT2!BIT1!BIT0 ;(6) 200 BAUD, 8 DATA BITS, 2 STOP BITS
	001136	014607 				 .WORD	<6*BIT10>!<6*BIT6>!<BIT2!BIT1!BIT0>
    429	001140					SPD	7,BIT1!BIT0	;(7) 300 BAUD, 8 DATA BITS, 1 STOP BIT
	001140	016703 				 .WORD	<7*BIT10>!<7*BIT6>!<BIT1!BIT0>
    430	001142					SPD	10,BIT1!BIT0	;(10) 600 BAUD, 8 DATA BITS, 1 STOP BIT
	001142	021003 				 .WORD	<10*BIT10>!<10*BIT6>!<BIT1!BIT0>
    431	001144					SPD	11,BIT1!BIT0	;(11) 1200 BAUD, 8 DATA BITS, 1 STOP BIT
	001144	023103 				 .WORD	<11*BIT10>!<11*BIT6>!<BIT1!BIT0>
    432	001146					SPD	12,BIT1!BIT0	;(12) 1800 BAUD, 8 DATA BITS, 1 STOP BIT
	001146	025203 				 .WORD	<12*BIT10>!<12*BIT6>!<BIT1!BIT0>
    433	001150					SPD	13,BIT1!BIT0	;(13) 2400 BAUD, 8 DATA BITS, 1 STOP BIT
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 7-1
PURE DATA

	001150	027303 				 .WORD	<13*BIT10>!<13*BIT6>!<BIT1!BIT0>
    434	001152					SPD	14,BIT1!BIT0	;(14) 4800 BAUD, 8 DATA BITS, 1 STOP BIT
	001152	031403 				 .WORD	<14*BIT10>!<14*BIT6>!<BIT1!BIT0>
    435	001154					SPD	15,BIT1!BIT0	;(15) 9600 BAUD, 8 DATA BITS, 1 STOP BIT
	001154	033503 				 .WORD	<15*BIT10>!<15*BIT6>!<BIT1!BIT0>
    436	001156					SPD	0,0		;(16) DL-11, 8 DATA BITS, NO SPEED
	001156	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    437	001160					SPD	0,0		;(17) DL-11, NO SPEED
	001160	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    438
    439	001162				SAVLMT:				; +++002 SAVE IMAGE LIMITS
    440	001162	000000 	000000 			.LIMIT			; +++002
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 8
PARSE COMMAND LINE

    442						.SBTTL	PARSE COMMAND LINE
    443					;
    444					; REQUEST FOR SAVE BY MCR SAV COMMAND CALLS SAVE HERE
    445					;
    446	001166				SAVE:
    447					;
    448					; SETUP COMMAND DEFAULTS
    449					;
    450	001166	012701 	000040'			MOV	#CMDCLR,R1	;GET START OF AREA TO CLEAR
    451	001172	012705 	000022 			MOV	#CMDCLN,R5	;AND LENGTH OF AREA, IN BYTES
    452	001176				10$:
    453	001176	105021 				CLRB	(R1)+		;CLEAR A BYTE
    454	001200	077502 				SOB	R5,10$		;CLEAR 'EM ALL
    455	001202	105237 	000047'			INCB	WSFLAG		;DEFAULT TO WRITE SAVE FILE
    456	001206	105237 	000050'			INCB	EXFLAG		; AND TO EXIT WHEN DONE
    457	001212	105237 	000053'			INCB	RHFLAG		; AND TO READ HOME BLOCKS
    458	001216	105237 	000052'			INCB	DMFLAG		; AND TO DISMOUNT ALL VOLUMES
    459					;
    460					; SETUP TO READ A LINE FROM THE CTY
    461					;
    462	001222					ALUN$S	#CTYLUN,#"TT,#0	;ASSIGN CTY TO LUN 1
	001222	005046 				CLR	-(SP)
	001224	012746 	052124 			MOV	#"TT,-(SP)
	001230	012746 	000001 			MOV	#CTYLUN,-(SP)
	001234	012746 				MOV	(PC)+,-(SP)
	001236	   007 	   004 			.BYTE	7.,4
	001240	104375 				EMT	375
    463	001242	103530 				BCS	EXITA		;GIVE UP IF NO CTY!!!!
    464	001244					TYPE	^\SAV>\		;TYPE PROMPT MESSAGE
	000000	   123 	   101 	   126 		.ASCIZ	"SAV>"
	000003	   076 	   000
	001244	012746 	000000'			MOV	#$$$,-(SP)
	001250	004737 	005622'			JSR	PC,TYPMSG
    465	001254					QIOW$S	#IO.RLB,#CTYLUN,#E.FQIO,,#QIOSTS,,<#CTYBUF,#CTYBFL>
	001254	012746 	000120 			MOV	#CTYBFL,-(SP)
	001260	012746 	000226'			MOV	#CTYBUF,-(SP)
	001264	005046 				CLR	-(SP)
	001266	012746 	001062'			MOV	#QIOSTS,-(SP)
	001272	005046 				CLR	-(SP)
	001274	112716 	000001 			MOVB	#E.FQIO,(SP)
	001300	012746 	000001 			MOV	#CTYLUN,-(SP)
	001304	012746 	001000 			MOV	#IO.RLB,-(SP)
	001310	012746 				MOV	(PC)+,-(SP)
	001312	   003 	   010 			.BYTE	3,$$$T1
	001314	104375 				EMT	375
    466	001316	103502 				BCS	EXITA		;GIVE UP IF FAILURE
    467	001320	105737 	001062'			TSTB	QIOSTS+0	;ERROR STATUS
    468	001324	002477 				BLT	EXITA		;YES-- THAT'S ENOUGH
    469	001326	122737 	000003 	001063'		CMPB	#'C-100,QIOSTS+1 ;THIS TERMINATED BY ^C?
    470	001334	001473 				BEQ	EXITA		;YES-- GIVE UP FAST
    471	001336					TYPE	<"<1>">		;INSURE A <CR><LF>
	000005	   001 	   000 			.ASCIZ	""<1>""
	001336	012746 	000005'			MOV	#$$$,-(SP)
	001342	004737 	005622'			JSR	PC,TYPMSG
    472	001346	013704 	001064'			MOV	QIOSTS+2,R4	;GET # CHARACTERS TYPED AT ME
    473	001352	105064 	000226'			CLRB	CTYBUF(R4)	;CLEAR LAST BYTE OF INPUT (MAKE ASCIZZZ)
    474	001356	012704 	000226'			MOV	#CTYBUF,R4	;POINT TO START OF INPUT TO PARSE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 8-1
PARSE COMMAND LINE

    475					;
    476					; NOW TO PARSE THE LINE
    477					;
    478	001362					CALL	GETNB		;GET NON-BLANK CHARACTER
	001362	004737 	005470'			JSR	PC,GETNB
    479	001366	001677 				BEQ	SAVE		;BACK TO SAVE IF NULL COMMAND
    480	001370					CALL	GETNAM		;GET A DEVICE NAME
	001370	004737 	005512'			JSR	PC,GETNAM
    481	001374	103471 				BCS	SYNERR		;NO SUCH LUCK
    482	001376	010037 	000042'			MOV	R0,DEVNAM	;SAVE THE TYPED NAME
    483	001402	001411 				BEQ	20$		;NULL NAME-- GO ON FOR MODIFIERS
    484	001404					CALL	GETNUM		;GET UNIT NUMBER OF DEVICE (IF ANY)
	001404	004737 	005556'			JSR	PC,GETNUM
    485	001410	103463 				BCS	SYNERR		;TOO BIG-- COMPLAIN
    486	001412	110037 	000044'			MOVB	R0,DEVUNT	;SAVE THE UNIT NUMBER
    487	001416	122724 	000072 			CMPB	#':,(R4)+	; : FOLLOWING DEVICE?
    488	001422	001401 				BEQ	20$		;YES-- IGNORE IT
    489	001424	105744 				TSTB	-(R4)		;NO-- GO BACK TO LOOK AT IT AGAIN
    490					;
    491					; LOOK FOR ALL MODIFIERS
    492					;
    493	001426				20$:
    494	001426					CALL	GETNB		;SKIP BLANKS AFTER UNIT
	001426	004737 	005470'			JSR	PC,GETNB
    495	001432	001457 				BEQ	CMDONE		;END OF COMMAND-- ALL OK
    496	001434	122700 	000057 			CMPB	#'/,R0		;THIS A MODIFIER?
    497	001440	001047 				BNE	SYNERR		;NO-- BAD CHARACTER
    498	001442	105724 				TSTB	(R4)+		;YES-- SKIP OVER IT
    499	001444	012702 	000001 			MOV	#1,R2		;ASSUME NOT /-(SW)
    500	001450	122714 	000055 			CMPB	#'-,(R4)	;THIS /-(SW)?
    501	001454	001002 				BNE	30$		;NO-- GO ON
    502	001456	105724 				TSTB	(R4)+		;YES-- SKIP OVER -
    503	001460	005002 				CLR	R2		;AND SET TO CLEAR THE FLAG
    504	001462				30$:
    505	001462					CALL	GETNAM		;GET THE MODIFIER
	001462	004737 	005512'			JSR	PC,GETNAM
    506	001466	103434 				BCS	SYNERR		;TOO LONG-- GIVE UP
    507	001470	012701 	001530'			MOV	#MODTBL,R1	;GET ADDRESS OF SWITCH TABLE
    508	001474	012705 	000006 			MOV	#MODTLN,R5	; AND LENGTH OF IT
    509	001500				40$:
    510	001500	020021 				CMP	R0,(R1)+	;THIS MODIFIER MATCH?
    511	001502	001002 				BNE	50$		;NO-- LOOP FOR MORE
    512	001504	110231 				MOVB	R2,@(R1)+	;YES-- SET THE FLAG AS REQUESTED
    513	001506	000747 				BR	20$		;LOOP FOR ALL MODIFIERS
    514					;
    515	001510				50$:
    516	001510	005721 				TST	(R1)+		;NO-- SKIP OVER FLAG ADDRESS
    517	001512	077506 				SOB	R5,40$		;NO-- LOOP FOR ALL MODIFIERS
    518	001514					ERROR	<ILLEGAL MODIFIER /"<2>">
	000007	   011 	   111 	   114 		.ASCIZ	""<11>"ILLEGAL MODIFIER /"<2>""<5>""
	000012	   114 	   105 	   107
	000015	   101 	   114 	   040
	000020	   115 	   117 	   104
	000023	   111 	   106 	   111
	000026	   105 	   122 	   040
	000031	   057 	   002 	   005
	000034	   000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 8-2
PARSE COMMAND LINE

	001514	012746 	000007'			MOV	#$$$,-(SP)
	001520	004737 	005622'			JSR	PC,TYPMSG
    519	001524				EXITA:
    520	001524	000137 	005460'			JMP	EXIT		;TOO FAR TO HOP
    521					;
    522					; MODIFIER TABLE
    523					;
    524	001530				MODTBL:
    525					.IRP	ARG,<WB,WS,EX,MO,DM,RH>
    526						.ASCII	/ARG/
    527						.EVEN
    528						.WORD	ARG'FLAG
    529					.ENDM
	001530	   127 	   102 			.ASCII	/WB/
	001532	000046'				.WORD	WBFLAG
	001534	   127 	   123 			.ASCII	/WS/
	001536	000047'				.WORD	WSFLAG
	001540	   105 	   130 			.ASCII	/EX/
	001542	000050'				.WORD	EXFLAG
	001544	   115 	   117 			.ASCII	/MO/
	001546	000051'				.WORD	MOFLAG
	001550	   104 	   115 			.ASCII	/DM/
	001552	000052'				.WORD	DMFLAG
	001554	   122 	   110 			.ASCII	/RH/
	001556	000053'				.WORD	RHFLAG
    530					.IF DF FTABS
    531						.ASCII	/AB/
    532						.EVEN
    533						.WORD	ABFLAG
    534					.ENDC ; .IF DF FTABS
    535		000006 			MODTLN=<.-MODTBL>/4
    536					;
    537					; COMMAND ERRORS
    538					;
    539	001560				SYNERR:
    540	001560	010400 				MOV	R4,R0		;POINT INPUT STRING TO OUTPUT STRING
    541	001562					ERROR	<SYNTAX ERROR: "<4>">
	000035	   011 	   123 	   131 		.ASCIZ	""<11>"SYNTAX ERROR: "<4>""<5>""
	000040	   116 	   124 	   101
	000043	   130 	   040 	   105
	000046	   122 	   122 	   117
	000051	   122 	   072 	   040
	000054	   004 	   005 	   000
	001562	012746 	000035'			MOV	#$$$,-(SP)
	001566	004737 	005622'			JSR	PC,TYPMSG
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 9
SETUP SAVE FILE

    543						.SBTTL	SETUP SAVE FILE
    544					;
    545					; THE COMMAND STRING IS NOW PARSED.  CHECK OUT THE DEVICE HE SPECIFIED.
    546					;
    547	001572				CMDONE:
    548	001572	013701 	000044'			MOV	DEVUNT,R1	;GET SPECIFIED UNIT
    549	001576	013700 	000042'			MOV	DEVNAM,R0	;GET DEVICE SPECIFIED
    550	001602	001003 				BNE	10$		;SPECIFIED-- GO ASSIGN IT
    551	001604	012700 	054523 			MOV	#"SY,R0		;NONE-- DEFAULT TO SYSTEM DEVICE
    552	001610	005001 				CLR	R1		; SY0:
    553					;
    554	001612				10$:
    555	001612					ALUN$S	#DSKLUN,R0,R1	;ASSIGN THE DEVICE TO LUN 2
	001612	010146 				MOV	R1,-(SP)
	001614	010046 				MOV	R0,-(SP)
	001616	012746 	000002 			MOV	#DSKLUN,-(SP)
	001622	012746 				MOV	(PC)+,-(SP)
	001624	   007 	   004 			.BYTE	7.,4
	001626	104375 				EMT	375
    556	001630	103403 				BCS	DNSERR		;OOPS-- DEVICE NOT IN SYSTEM
    557	001632					CALL	FINDEV		;FIND PUD ENTRY ADDRESS FOR DEVICE
	001632	004737 	006402'			JSR	PC,FINDEV
    558	001636	103006 				BCC	DEVCHK		;OK-- CHECK THE DEVICE OUT
    559	001640				DNSERR:
    560	001640	012705 	000042'			MOV	#DEVNAM,R5	;POINT TO DEVICE NAME/UNIT #
    561	001644					ERROR	<DEVICE "<3>" NOT IN SYSTEM>
	000057	   011 	   104 	   105 		.ASCIZ	""<11>"DEVICE "<3>" NOT IN SYSTEM"<5>""
	000062	   126 	   111 	   103
	000065	   105 	   040 	   003
	000070	   040 	   116 	   117
	000073	   124 	   040 	   111
	000076	   116 	   040 	   123
	000101	   131 	   123 	   124
	000104	   105 	   115 	   005
	000107	   000
	001644	012746 	000057'			MOV	#$$$,-(SP)
	001650	004737 	005622'			JSR	PC,TYPMSG
    562	001654				DEVCHK:
    563	001654	016505 	000000G			MOV	U.RP(R5),R5	; BUT GET REAL DEVICE
    564	001660	016537 	000000G	000042'		MOV	U.DN(R5),DEVNAM	;SAVE THE REAL DEVICE NAME
    565	001666	116537 	000000G	000044'		MOVB	U.UN(R5),DEVUNT	;SAVE THE REAL UNIT #
    566	001674	012700 	006570'			MOV	#DRVTAB,R0	;GET ADR OF DRIVER TABLE
    567	001700				10$:
    568	001700	026037 	000000 	000042'		CMP	DRVNAM(R0),DEVNAM ;MATCH?
    569	001706	001411 				BEQ	DEVOK		;YES-- GO ON
    570	001710	062700 	000020 			ADD	#DRVSIZ,R0	;BUMP TO NEXT DRIVER ENTRY
    571	001714	020027 	006650'			CMP	R0,#DRVTAB+DRVTBZ ;BEYOND END?
    572	001720	103767 				BLO	10$		;NO-- LOOP UNTIL WE FIND DEVICE
    573	001722					ERROR	<ILLEGAL DEVICE "<3>">
	000110	   011 	   111 	   114 		.ASCIZ	""<11>"ILLEGAL DEVICE "<3>""<5>""
	000113	   114 	   105 	   107
	000116	   101 	   114 	   040
	000121	   104 	   105 	   126
	000124	   111 	   103 	   105
	000127	   040 	   003 	   005
	000132	   000
	001722	012746 	000110'			MOV	#$$$,-(SP)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 9-1
SETUP SAVE FILE

	001726	004737 	005622'			JSR	PC,TYPMSG
    574	001732				DEVOK:
    575	001732	023727 	000042'	041104 		CMP	DEVNAM,#"DB	;THIS AN RP04/RP06?
    576	001740	001402 				BEQ	10$		;YES-- OK
    577	001742	105037 	000053'			CLRB	RHFLAG		;NO-- DON'T READ HOM BLOCKS
    578	001746				10$:
    579	001746	010037 	000002'			MOV	R0,DRVADR	;SAVE DRIVER TABLE ENTRY ADDRESS
    580	001752	010537 	000040'			MOV	R5,PUDADR	;SAVE THE PUD ADDRESS OF THE SAVE DEVICE
    581	001756	010500 				MOV	R5,R0		;COPY THE PUD ADDRESS
    582	001760	162700 	000000G			SUB	#.PUDBA,R0	;MAKE R0 INDEX INTO THE PUD
    583	001764	012701 	000000G			MOV	#U.SZ,R1	;COMPUTE AN INDEX
    584	001770					CALL	$DIV		; INTO THE PUD
	001770	004737 	000000G			JSR	PC,$DIV
    585	001774	110037 	000045'			MOVB	R0,PUDIDX	;SAVE THE INDEX
    586					;
    587					; MOUNT THE SPECIFIED VOLUME IF /MO TYPED
    588					;
    589	002000				DEVMNT:
    590	002000	105737 	000051'			TSTB	MOFLAG		;/MO?
    591	002004	001424 				BEQ	SETFIL		;NO-- DON'T MOUNT THE DEVICE
    592	002006	005765 	000000G			TST	U.VA(R5)	;IS THE VOLUME MOUNTED?
    593	002012	001015 				BNE	MOUNTD		;YES-- GO ON
    594					;
    595	002014					CALL	FNDACP		;FIND ACP ADDRESS
	002014	004737 	006440'			JSR	PC,FNDACP
    596	002020	010265 	000000G			MOV	R2,U.ACP(R5)	;SAVE THE ADDRESS SO MOUNT DOESN'T COMPLAIN
    597					;
    598	002024	012702 	001106'			MOV	#MNTBLK,R2	;SET TO MOUNT VOLUME
    599	002030					CALL	FILMNT		;DO THE MOUNT
	002030	004737 	006460'			JSR	PC,FILMNT
    600	002034	103010 				BCC	SETFIL		;OK-- GO ON
    601	002036					ERROR	<MOUNT ERROR "<7>">
	000133	   011 	   115 	   117 		.ASCIZ	""<11>"MOUNT ERROR "<7>""<5>""
	000136	   125 	   116 	   124
	000141	   040 	   105 	   122
	000144	   122 	   117 	   122
	000147	   040 	   007 	   005
	000152	   000
	002036	012746 	000133'			MOV	#$$$,-(SP)
	002042	004737 	005622'			JSR	PC,TYPMSG
    602	002046				MOUNTD:
    603	002046					WARN	<DEVICE "<3>" ALREADY MOUNTED>
	000153	   012 	   104 	   105 		.ASCIZ	""<12>"DEVICE "<3>" ALREADY MOUNTED"<1>""
	000156	   126 	   111 	   103
	000161	   105 	   040 	   003
	000164	   040 	   101 	   114
	000167	   122 	   105 	   101
	000172	   104 	   131 	   040
	000175	   115 	   117 	   125
	000200	   116 	   124 	   105
	000203	   104 	   001 	   000
	002046	012746 	000153'			MOV	#$$$,-(SP)
	002052	004737 	005622'			JSR	PC,TYPMSG
    604					;
    605					; SET UP DISK ADDRESS TO SPECIFIC PLACE IF /AB (ABSOLUTE) SPECIFIED
    606					;
    607	002056				SETFIL:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 9-2
SETUP SAVE FILE

    608					.IF DF FTABS
    609						TSTB	ABFLAG		;ABSOLUTE DISK SAVE?
    610						BNE	FILABS		;YES-- SET UP ABSOLUTE FILE
    611					.ENDC ; .IF DF FTABS
    612					;	BR	FILFND		;NO-- FIND FILE (5,5)
    613					;
    614					; FIND SAVE FILE (5,5) AND EXTEND IT IF NECESSARY
    615					;
    616	002056				FILFND:
    617	002056	012701 	001074'			MOV	#FIDBLK,R1	;ADDRESS OF FILE-ID BLOCK FOR (5,5)
    618					;
    619					; DO AN ACCESS FOR EXTEND TO FIND IF FILE EXISTS AND WHERE IT IS
    620					;
    621	002062	012700 	007400 			MOV	#IO.ACE,R0	;SET TO ACCESS FOR EXTEND
    622	002066	012702 	001100'			MOV	#ATCBLK,R2	;SET UP ATTRIBUTE CONTROL BLOCK ADDRESS
    623	002072	005003 				CLR	R3		;NO EXTEND CONTROOL
    624	002074	005004 				CLR	R4		; . .
    625	002076	012705 				MOV	(PC)+,R5	;ENABLE ACCESS
    626	002100	   000 	   200 			.BYTE	0,AC.ENA	; . .
    627	002102					CALL	FILQIO		;DO IT TO (5,5)
	002102	004737 	006474'			JSR	PC,FILQIO
    628	002106	103444 				BCS	15$		;ERROR-- JUST CLOSE FILE
    629					;
    630					; FIND OUT HOW BIG THE SAVE FILE SHOULD BE AND SEE IF IT IS BIG ENOUGH
    631					;  CURRENT SIZE IS RETURNED IN DSKSIZ+0, DSKSIZ+2 BY ACCESS
    632					;
    633	002110	013704 	001164'			MOV	SAVLMT+2,R4	; +++002 GET UPPER TASK LIMIT
    634	002114	062704 	003777 			ADD	#3777,R4	; +++002 ROUND UP
    635	002120	042704 	003777 			BIC	#3777,R4	; +++002 TO NEXT K OF WORDS
    636	002124	000241 				CLC			; +++002 CLEAR SIGN BIT AND
    637	002126	006004 				ROR	R4		; +++002 CONVERT TO 32. WORD BLOCKS
    638	002130	006204 				ASR	R4		; +++002
    639	002132	006204 				ASR	R4		; +++002
    640	002134	006204 				ASR	R4		; +++002
    641	002136	006204 				ASR	R4		; +++002
    642	002140	006204 				ASR	R4		; +++002
    643	002142	010437 	000014'			MOV	R4,MEMSIZ	;SAVE THIS FOR WRITING FILE
    644	002146	006204 				ASR	R4		;CONVERT 32. WORD BLOCKS TO 64. WORD BLOCKS
    645	002150	006204 				ASR	R4		; 128. WORD BLOCKS
    646	002152	006204 				ASR	R4		; 256. WORD BLOCKS
    647	002154	105737 	000010'			TSTB	DSKSIZ+0	;IS FILE BIGGER THAN 2**16 BLOCKS????
    648	002160	003017 				BGT	15$		;YES-- CERTAINLY BIG ENOUGH
    649	002162	163704 	000012'			SUB	DSKSIZ+2,R4	;NO-- FIND HOW MUCH MORE  SPACE WE NEED
    650	002166	003414 				BLE	15$		;BIG ENOUGH-- JUST CLOSE
    651	002170	113737 	000057'	000056'		MOVB	ACFLAG,QEFLAG	;ERROR IF WE WERE HERE BEFORE
    652	002176	001010 				BNE	15$		;SO GIVE ERROR
    653					;
    654					; FILE IS NOT BIG ENOUGH-- DO AN EXTEND ON IT, EXTEND INCREMENT IN R4
    655					;
    656	002200	012700 	011400 			MOV	#IO.EXT,R0	;NOT ENOUGH-- SET TO EXTEND FILE
    657	002204	012703 				MOV	(PC)+,R3	;MAKE FILE CONTIGUOUS,
    658	002206	   000 	   205 			.BYTE	0,EX.ENA!EX.AC1!EX.FCO ; HIGH EXTEND INCREMENT= 0
    659	002210	005002 				CLR	R2		;NO ATTRIB
    660	002212	005005 				CLR	R5		; AND NO ACCESS
    661	002214					CALL	FILQIO		;DO IT TO (5,5), EXTEND INCREMENT IN R4
	002214	004737 	006474'			JSR	PC,FILQIO
    662					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 9-3
SETUP SAVE FILE

    663					; DEACCESS FILE.  R5= 0 IF EXTEND DONE, QEFLAG= -VE IF ERROR OCCURED
    664					;
    665	002220				15$:
    666	002220	012700 	010000 			MOV	#IO.DAC,R0	;DE-ACCESS FILE
    667	002224	005002 				CLR	R2		;NO ATTRIBUTE CONTROL BLOCK
    668	002226	005003 				CLR	R3		;NO EXTEND BITS
    669	002230	005004 				CLR	R4		; . .
    670	002232					CALL	FILQIO		;DO IT TO (5,5)
	002232	004737 	006474'			JSR	PC,FILQIO
    671	002236	103004 				BCC	FILCHK		;NO ERRRORS-- GO CHECK OUT THE FILE
    672	002240					ERROR	<CREATE SAVE FILE (5,5) ERROR "<7>">
	000206	   011 	   103 	   122 		.ASCIZ	""<11>"CREATE SAVE FILE (5,5) ERROR "<7>""<5>""
	000211	   105 	   101 	   124
	000214	   105 	   040 	   123
	000217	   101 	   126 	   105
	000222	   040 	   106 	   111
	000225	   114 	   105 	   040
	000230	   050 	   065 	   054
	000233	   065 	   051 	   040
	000236	   105 	   122 	   122
	000241	   117 	   122 	   040
	000244	   007 	   005 	   000
	002240	012746 	000206'			MOV	#$$$,-(SP)
	002244	004737 	005622'			JSR	PC,TYPMSG
    673	002250				FILCHK:
    674	002250	105237 	000057'			INCB	ACFLAG		;FLAG ONE ACCESS
    675	002254	005705 				TST	R5		;DID WE DO AN EXTEND?
    676	002256	001677 				BEQ	FILFND		;YES-- GO BACK AND RE-ACCESS
    677	002260	005000 				CLR	R0		;GET HIGH
    678	002262	153700 	000004'			BISB	DSKADR+0,R0	; DISK ADDRESS (WITHOUT SIGN-EXTEND)
    679	002266	013701 	000006'			MOV	DSKADR+2,R1	;AND ALSO LOW PART
    680	002272	001006 				BNE	FILOK		;NON-ZERO-- WE HAVE A FILE
    681	002274	005700 				TST	R0		;ZERO-- HIGH PART ZERO TOO?
    682	002276	001004 				BNE	FILOK		;NO-- FILE MUST BE CONTIGUOUS (LUCKILY)
    683	002300					ERROR	<SAVE FILE (5,5) NOT CONTIGUOUS>
	000247	   011 	   123 	   101 		.ASCIZ	""<11>"SAVE FILE (5,5) NOT CONTIGUOUS"<5>""
	000252	   126 	   105 	   040
	000255	   106 	   111 	   114
	000260	   105 	   040 	   050
	000263	   065 	   054 	   065
	000266	   051 	   040 	   116
	000271	   117 	   124 	   040
	000274	   103 	   117 	   116
	000277	   124 	   111 	   107
	000302	   125 	   117 	   125
	000305	   123 	   005 	   000
	002300	012746 	000247'			MOV	#$$$,-(SP)
	002304	004737 	005622'			JSR	PC,TYPMSG
    684	002310				FILOK:
    685	002310	013705 	000002'			MOV	DRVADR,R5	;GET ADDRESS OF DRIVER TABLE ENTRY
    686	002314					CALL	@DRVSET(R5)	;CALL PROPER ROUTINE TO SET ADDRESS
	002314	004775 	000002 			JSR	PC,@DRVSET(R5)
    687					.IF DF FTABS
    688						BR	FILSET		;SAVE ADDRESSES AND GO ON
    689					;
    690					; SAVE TO ABSOLUTE DISK ADDRESS-- SET UP DSKADR+0, DSKADR+2
    691					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 9-4
SETUP SAVE FILE

    692					FILABS:
    693						MOV	SAVLMT+2,R5	; +++002 GET UPPER TASK LIMIT
    694						ADD	#3777,R5	; +++002 ROUND UP
    695						BIC	#3777,R5	; +++002 TO NEXT K OF WORDS
    696						CLC			; +++002 CLEAR SIGN BIT AND
    697						ROR	R5		; +++002 CONVERT TO 32. WORD BLOCKS
    698						ASR	R5		; +++002
    699						ASR	R5		; +++002
    700						ASR	R5		; +++002
    701						ASR	R5		; +++002
    702						ASR	R5		; +++002
    703						MOV	R5,MEMSIZ	;SAVE THIS FOR WRITING FILE
    704						MOV	DRVADR,R5	;GET ADDRESS OF DRIVER TABLE ENTRY
    705						CALL	@DRVABS(R5)	;CALL PROPER ABSOLUTE SET ROUTINE
    706					.ENDC ; .IF DF FTABS
    707	002320				FILSET:
    708	002320	010037 	000004'			MOV	R0,DSKADR+0	;SAVE THE ADDRESS
    709	002324	010137 	000006'			MOV	R1,DSKADR+2	; BOTH HALVES
    710					;	BR	FILDMO		;GO DISMOUNT (IF /DM)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 10
DISMOUNT ALL MOUNTED VOLUMES

    712						.SBTTL	DISMOUNT ALL MOUNTED VOLUMES
    713					;
    714					; DO DISMOUNT OF ALL VOLUMES IF /DM SPECIFIED
    715					;
    716	002330				FILDMO:
    717	002330	105737 	000052'			TSTB	DMFLAG		;HE WANT IT DISMOUNTED?
    718	002334	001472 				BEQ	SYSAVE		;NO-- JUST GO SAVE SYSTEM
    719	002336	012702 	001114'			MOV	#DMTBLK,R2	;YES-- SET TO DISMOUNT
    720	002342	012705 	000000G			MOV	#.PUDBA,R5	;START AT BEGINNINING OF THE PUD
    721	002346				FILDM1:
    722	002346	020565 	000000G			CMP	R5,U.RP(R5)	;REDIRECTED?
    723	002352	001056 				BNE	FILDMX		;YES-- WE'LL FIND THE REAL ONE
    724	002354	005765 	000000G			TST	U.VA(R5)	;IS VOLUME MOUNTED?
    725	002360	001453 				BEQ	FILDMX		;NO-- JUST GO ON
    726	002362					ALUN$S	#DSKLUN,U.DN(R5),U.UN(R5) ;YES-- ASSIGN THIS DEVICE
	002362	016546 	000000G			MOV	U.UN(R5),-(SP)
	002366	016546 	000000G			MOV	U.DN(R5),-(SP)
	002372	012746 	000002 			MOV	#DSKLUN,-(SP)
	002376	012746 				MOV	(PC)+,-(SP)
	002400	   007 	   004 			.BYTE	7.,4
	002402	104375 				EMT	375
    727	002404	013700 	000000G			MOV	$DSW,R0		;(IN CASE OF ERROR)
    728	002410	103420 				BCS	DMOERR		;OOPS-- THIS CAN'T HAPPEN!!!!
    729					;
    730	002412	016500 	000000G			MOV	U.ACP(R5),R0	;GET THE ACP ADDRESS OF THE VOLUME
    731	002416	001410 				BEQ	FILDM2		;OOPS-- MOUNTED WITH NO ACP????
    732	002420	126037 	000000G	000045'		CMPB	S.DI(R0),PUDIDX	;IS THIS ACP ON THE SAVE DEVICE?
    733	002426	001404 				BEQ	FILDM2		;YES-- THAT'S OK
    734	002430					ERROR	<ACP FOR "<3>" NOT ON "<10>">
	000310	   011 	   101 	   103 		.ASCIZ	""<11>"ACP FOR "<3>" NOT ON "<10>""<5>""
	000313	   120 	   040 	   106
	000316	   117 	   122 	   040
	000321	   003 	   040 	   116
	000324	   117 	   124 	   040
	000327	   117 	   116 	   040
	000332	   010 	   005 	   000
	002430	012746 	000310'			MOV	#$$$,-(SP)
	002434	004737 	005622'			JSR	PC,TYPMSG
    735	002440				FILDM2:
    736	002440					PUSH	R5		;SAVE THE PUD POINTER
	002440	010546 				MOV	R5,-(SP)
    737	002442					CALL	FILMNT		;DO THE DISMOUNT FUNCTION
	002442	004737 	006460'			JSR	PC,FILMNT
    738	002446					POP	R5		;RESTORE THE POINTER
	002446	012605 				MOV	(SP)+,R5
    739	002450	103004 				BCC	FILDM3		;OK-- GO ON TO NEXT ENTRY
    740	002452				DMOERR:
    741	002452					ERROR	<"<3>" DISMOUNT ERROR "<7>">
	000335	   011 	   003 	   040 		.ASCIZ	""<11>""<3>" DISMOUNT ERROR "<7>""<5>""
	000340	   104 	   111 	   123
	000343	   115 	   117 	   125
	000346	   116 	   124 	   040
	000351	   105 	   122 	   122
	000354	   117 	   122 	   040
	000357	   007 	   005 	   000
	002452	012746 	000335'			MOV	#$$$,-(SP)
	002456	004737 	005622'			JSR	PC,TYPMSG
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 10-1
DISMOUNT ALL MOUNTED VOLUMES

    742	002462				FILDM3:
    743	002462	005765 	000000G			TST	U.VA(R5)	;DID IT REALLY DISMOUNT THE VOLUME?
    744	002466	001404 				BEQ	FILDM4		;YES-- OK
    745	002470					ERROR	<"<3>" CANNOT BE DISMOUNTED>
	000362	   011 	   003 	   040 		.ASCIZ	""<11>""<3>" CANNOT BE DISMOUNTED"<5>""
	000365	   103 	   101 	   116
	000370	   116 	   117 	   124
	000373	   040 	   102 	   105
	000376	   040 	   104 	   111
	000401	   123 	   115 	   117
	000404	   125 	   116 	   124
	000407	   105 	   104 	   005
	000412	   000
	002470	012746 	000362'			MOV	#$$$,-(SP)
	002474	004737 	005622'			JSR	PC,TYPMSG
    746	002500				FILDM4:
    747	002500					TYPE	<["<3>" DISMOUNTED]"<1>">
	000413	   133 	   003 	   040 		.ASCIZ	"["<3>" DISMOUNTED]"<1>""
	000416	   104 	   111 	   123
	000421	   115 	   117 	   125
	000424	   116 	   124 	   105
	000427	   104 	   135 	   001
	000432	   000
	002500	012746 	000413'			MOV	#$$$,-(SP)
	002504	004737 	005622'			JSR	PC,TYPMSG
    748	002510				FILDMX:
    749	002510	062705 	000000G			ADD	#U.SZ,R5	;OK-- BUMP TO NEXT ENTRY IN THE PUD
    750	002514	020527 	000000G			CMP	R5,#.PUDEA	;AT THE END OF THE PUD?
    751	002520	103712 				BLO	FILDM1		;NOPE-- BACK FOR SOME MORE
    752					;	BR	SYSAVE		;YES-- ON TO SAVE THE SYSTEM
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 11
SAVE SYSTEM STATE

    754						.SBTTL	SAVE SYSTEM STATE
    755					;
    756					; GET CURRENT TIME STUFF FOR TYPE-OUT
    757					;
    758	002522				SYSAVE:
    759	002522					GTIM$S	#GTIMBF		;GET CURRENT TIME PARAMETERS FOR SAVE FILE
	002522	012746 	000020'			MOV	#GTIMBF,-(SP)
	002526	012746 				MOV	(PC)+,-(SP)
	002530	   073 	   002 			.BYTE	59.,2
	002532	104375 				EMT	375
    760					;
    761					; SEE IF QUEUED PROTOCOL IS RUNNING.  IF SO, WE CANNOT CONTINUE.
    762					;
    763	002534	032737 	000000C	000002G		BIT	#EF.PR1!EF.PR2,.COMEF+2 ;IS ANY PROTOCOL RUNNING ?
    764	002542	001404 				BEQ	SYSAV1		;NO-- ALL OK
    765	002544					ERROR	<DTE-20 PROTOCOL RUNNING>
	000433	   011 	   104 	   124 		.ASCIZ	""<11>"DTE-20 PROTOCOL RUNNING"<5>""
	000436	   105 	   055 	   062
	000441	   060 	   040 	   120
	000444	   122 	   117 	   124
	000447	   117 	   103 	   117
	000452	   114 	   040 	   122
	000455	   125 	   116 	   116
	000460	   111 	   116 	   107
	000463	   005 	   000
	002544	012746 	000433'			MOV	#$$$,-(SP)
	002550	004737 	005622'			JSR	PC,TYPMSG
    766					;
    767					; RAISE PRIORITY TO 7 TO LOCK OUT INTERRUPTS
    768					;
    769	002554				SYSAV1:
    770	002554	012737 	000401 	000000G		MOV	#401,.NOERR	;DIS-ALLOW KL ERROR REPORTING
    771	002562					.INH			;;;AND RAISE TO PRIORITY 7
	002562	013746 	177776 			MOV	PS,-(SP)
	002566	112737 	000340 	177776 		MOVB	#PR7,@#PS	;;
    772					;
    773					; TURN THE CLOCK OFF
    774					;
    775	002574	005037 	177546 			CLR	@#LKS		;;;CLEAR CLOCK STATUS
    776					;
    777					; FIX UP BOTH BOOTS TO POINT TO US AND THE RIGHT FILE
    778					;
    779	002600	013705 	000002'			MOV	DRVADR,R5	;;;GET DRIVER TABLE ENTRY ADDRESS
    780	002604	013775 	000014'	000010 		MOV	MEMSIZ,@DRVMSZ(R5) ;;;SET SIZE OF MEMORY
    781	002612	013775 	000004'	000012 		MOV	DSKADR+0,@DRVAD1(R5) ;;;SET FIRST HALF OF DISK ADDRESS
    782	002620	013775 	000006'	000014 		MOV	DSKADR+2,@DRVAD2(R5) ;;; AND SECOND HALF
    783					.IF DF M$$MGE
    784						MOV	UPAR0,@DRVUP0(R5) ;;;ALSO OUR PAGE ADDRESS
    785					.ENDC
    786					;
    787					; SET BOOT PARAMTER IN R0 WITH LOAD FLAGS= 01 (SO KLINIT WON'T BE CALLED)
    788					;
    789	002626	113700 	000044'			MOVB	DEVUNT,R0	;;;GET THE DEVICE UNIT #
    790	002632	000300 				SWAB	R0		;;;SET IT TO BITS 10-8
    791	002634	056500 	000016 			BIS	DRVBTP(R5),R0	;;;SET PROPER BIT IN BOOT PARAMETER WORD
    792	002640	052700 	000002 			BIS	#BP.LD0,R0	;;;SET FLAGS= 01
    793					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 11-1
SAVE SYSTEM STATE

    794					; SAVE KT-11 STUFF, IF ANY
    795					;
    796	002644	042737 	030000 	177776 		BIC	#PS.PUS,@#PS	;;;SET PREVIOUS MODE KERNAL
    797					.IF DF M$$MGE
    798						MOV	#KPDR0,R1	;;;ADDRESS KERNAL DR'S
    799						MOV	#KPAR0,R2	;;; AND KERNAL AR'S
    800						MOV	#UPDR0,R3	;;; USER DR'S
    801						MOV	#UPAR0,R4	;;; AND AR'S
    802						MOV	#8.,R5		;;;8 REGITERS PER SET
    803					30$:
    804						PUSH	<(R1)+,(R2)+,(R3)+,(R4)+> ;;;SAVE ALL ON STACK
    805						SOB	R5,30$		;;;ALL OF 'EM
    806						PUSH	<R1,R2,R3,R4>	;;;SAVE ADDR'S TO RESTORE
    807					;
    808					; SAVE STACK LIMIT AND KERNAL SP
    809					;
    810						PUSH	STKLIM		;;;SAVE STACK LIMIT
    811						MFPI	SP		;;; AND KERNAL STACK
    812					;
    813					; POINT TO ABSOLUTE ZERO, USING UPAR1, FOR COPY OF BOOT
    814					;
    815						MOV	#77406,UPDR1	;;;MAP MAXIMUM SIZE (4096 WORDS)
    816						CLR	UPAR1		;;; TO REAL ABSOLUTE ZERO
    817						MOV	#20000,R1	;;; FROM 20000 IN VIRTUAL SPACE
    818					.IFF
    819	002652	005001 				CLR	R1		;;;ADDRESS ABSOLUTE 0 (NO KT-11)
    820					.ENDC
    821					;
    822					; COPY LOW CORE (FIRST 256. WORDS) TO SAVE AREA LOWCOR, AND
    823					;  COPY PROPER BOOT TO LOW CORE.
    824					;
    825					; NOTE THAT R1 POINTS TO ABSOLUTE ZERO, KT-11 OR NOT
    826					;
    827	002654	013705 	000002'			MOV	DRVADR,R5	;;;GET DRIVER ADDRESS BACK
    828	002660	016503 	000004 			MOV	DRVBOT(R5),R3	;;;GET ADDRESS OF BOOT CODE
    829	002664	012702 	000062'			MOV	#LOWCOR,R2	;;;POINT TO SAVE AREA
    830	002670	012704 	000400 			MOV	#256.,R4	;;;COPY 256. WORDS
    831	002674				41$:
    832	002674	011122 				MOV	(R1),(R2)+	;;;MOVE A WORD TO SAVE AREA
    833	002676	012321 				MOV	(R3)+,(R1)+	;;; AND COPY A WORD OF BOOT
    834	002700	077403 				SOB	R4,41$		;;;COPY ALL 256
    835					;
    836	002702	010041 				MOV	R0,-(R1)	;;;SAVE BOOT PARAMETER AT LOCATION 776
    837	002704					PUSH	<R1,R2>		;;;SAVE POINTERS FOR RESTORE
	002704	010146 				MOV	R1,-(SP)
	002706	010246 				MOV	R2,-(SP)
    838					;
    839					; WHAT'S ON THE STACK?
    840					;
    841					;	SP+00	R2 (RESTORE POINTER TO SAVE AREA)
    842					;	SP+02	R1 (RESTORE POINTER TO LOW CORE)
    843					; KT-11 ONLY:
    844					;	SP+04	KERNAL SP
    845					;	SP+06	STKLIM
    846					;	SP+10	POINTERS TO KT-11 REGISTERS TO RESTORE
    847					;	SP+12
    848					;	SP+14
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 11-2
SAVE SYSTEM STATE

    849					;	SP+16
    850					;	SP+20	KT-11 REGISTERS
    851					;	...
    852					;	SP+116
    853					;
    854					;	SP+NN	(BOTTOM OF STACK) USER PS FROM .INH
    855					;
    856					; SO LET'S SAVE SP IN SPSAVE
    857					;
    858	002710	010637 	000000'			MOV	SP,SPSAVE	;;;SAVE SP UNTIL WE RESTORE
    859					;	BR	WTSAVE		;;;NOW WRITE SAVE FILE AND BOOT
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 12
WRITE SAVE FILE AND BOOT

    861						.SBTTL	WRITE SAVE FILE AND BOOT
    862					;
    863					; WRITE SAVE FILE.  DSK ADDRESS IS IN DSKADR+0 AND DSKADR+2
    864					;
    865	002714				WTSAVE:
    866	002714	105337 	000047'			DECB	WSFLAG		;;;WRITE SAVE FILE?
    867	002720	002012 				BGE	10$		;;;YES-- GO DO IT
    868	002722	105337 	000046'			DECB	WBFLAG		;;; /WB SPECIFIED?
    869	002726	002414 				BLT	RESTORE		;;;NO-- ALL DONE WITH SAVE-- BRING SYSTEM BACK UP
    870	002730	005037 	000004'			CLR	DSKADR+0	;;;YES-- WRITE BOOT TO BLOCK 0
    871	002734	005037 	000006'			CLR	DSKADR+2	;;; . . .
    872	002740	012737 	000010 	000014'		MOV	#256.*2/100,MEMSIZ ;;;GET # 100 BYTE BLOCKS TO WRITE
    873	002746				10$:
    874	002746	013705 	000002'			MOV	DRVADR,R5	;;;GET ADDRESS OF DEVICE DRIVER TABLE ENTRY
    875	002752					CALL	@DRVWRT(R5)	;;;CALL PROPER WRITE ROUTINE
	002752	004775 	000006 			JSR	PC,@DRVWRT(R5)
    876	002756	000756 				BR	WTSAVE		;;;GO BACK AND DO WRITE AGAIN
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 13
RESTORE SYSTEM STATE

    878						.SBTTL	RESTORE SYSTEM STATE
    879					;
    880					; TRANSFER HERE ON TWO CONDITIONS:
    881					;	1) FROM BOOTSTRAP WITH FRESHLY BOOT'ED SYSTEM
    882					;	2) FROM SAVE COMPLETING A WRITE OF THE SYSTEM IMAGE
    883					;
    884					; THE ACTION IS THE SAME IN EITHER CASE.
    885					;
    886	002760				RESTORE:
    887	002760	013706 	000000'			MOV	SPSAVE,SP	;;;RESTORE OUR STACK
    888					;
    889					; RESTORE LOW CORE FROM SAVE AREA
    890					;
    891	002764					POP	<R2,R1>		;;;RESTORE SAVED POINTERS TO CORE
	002764	012602 				MOV	(SP)+,R2
	002766	012601 				MOV	(SP)+,R1
    892					.IF DF M$$MGE
    893						MOV	#77406,UPDR1	;;;MAP ALL OF
    894						CLR	UPAR1		;;; LOW CORE TO 20000
    895					.IFTF
    896	002770	012100 				MOV	(R1)+,R0	;;;GET BOOT PARAMETER FROM LOCATION 776
    897	002772	012705 	000400 			MOV	#256.,R5	;;;RESTORE ALL 256 WORDS
    898	002776				20$:
    899	002776	014241 				MOV	-(R2),-(R1)	;;;RESTORE A WORD
    900	003000	077502 				SOB	R5,20$		;;;LOOP FOR WHOLE BLOCK
    901					;
    902					; RESTORE KT-11 REGISTERS (IF ANY)
    903					;
    904					.IFT
    905						MTPI	SP		;;;RESTORE KERNAL SP
    906						POP	STKLIM		;;; AND STACK LIMIT
    907					;
    908						POP	<R4,R3,R2,R1>	;;;RESTORE SAVED POINTERS TO KT-11
    909						MOV	#8.,R5		;;;8 REGISTERS PER SET
    910					30$:
    911						POP	<-(R4),-(R3),-(R2),-(R1)> ;;;RESTORE 4 REGISTERS
    912						SOB	R5,30$		;;;LOOP FOR ALL REGISTERS
    913					.ENDC
    914	003002	010037 	000000G			MOV	R0,.BTPRM	;;;SAVE THE BOOT PARAMETER WORD IN EXEC
    915					;	BR	SETCTY		;;;ONWARD!!
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 14
RESTORE -- SETUP CTY LINE # AND DH-11 TABLES

    917						.SBTTL	RESTORE -- SETUP CTY LINE # AND DH-11 TABLES
    918					;
    919					; SET THE CTY TO THE LINE INDICATED BY THE BOOT PARAMETER, NOW IN R0
    920					;
    921	003006				SETCTY:
    922	003006	010005 				MOV	R0,R5		;;;ALSO SAVE BOOT PARAM FOR US TO USE
    923	003010	042700 	177607 			BIC	#^C<BP.CSP>,R0	;;;TRIM TO CONSOLE SPEED, BITS 6-3
    924	003014	001450 				BEQ	SETDL		;;; +++005 CTY NOT SPEC-- LEAVE IT ALONE
    925	003016	012704 	000000G			MOV	#DLTBL,R4	;;;ASSUME DL-11
    926	003022	006200 				ASR	R0		;;;SHIFT THE SPEED FIELD
    927	003024	006200 				ASR	R0		;;; OVER TO A WORD INDEX INTO TABLE, BITS 4-1
    928	003026	016003 	001122'			MOV	DHSTAB(R0),R3	;;;GET THE SPEED WORD FOR THE SPECIFIED TYPE
    929	003032	001406 				BEQ	50$		;;;NOT A DH-11-- GO ON FOR DL-11
    930					;
    931	003034	010504 				MOV	R5,R4		;;;DH-11-- GET THE PARAM AGAIN
    932	003036	042704 	174377 			BIC	#^C<BP.UNT>,R4	;;;TRIM TO DH UNIT NUMBER, BITS 10-8
    933	003042	006204 				ASR	R4		;;;SHIFT INTO PLACE, 16*8=128 BYTES PER DH UNIT, BITS 9-7
    934	003044	062704 	000000G			ADD	#DHTBL,R4	;;;GET DH UNIT TABLE ADDRESS
    935	003050				50$:
    936	003050	010500 				MOV	R5,R0		;;;GET THE WORD BACK
    937	003052	042700 	103777 			BIC	#^C<BP.CLN>,R0	;;;GET JUST LINE NUMBER, BITS 14-11
    938	003056	000300 				SWAB	R0		;;;MAKE THAT 8 BYTES PER LINE, BITS 6-3
    939	003060	060004 				ADD	R0,R4		;;;GET TABLE ADDRESS OF NEW CTY
    940					;
    941	003062	006200 				ASR	R0		;;;GET LINE NUMBER *4
    942	003064	006200 				ASR	R0		;;; LINE NUMBER *2, WORD INDEX
    943	003066	016037 	000000G	000000G		MOV	BITTBL(R0),$BTMSK ;;;GET THE BIT FOR THE LINE TO DH BIT MASK FOR CTY
    944	003074	006200 				ASR	R0		;;;GET LINE NUMBER WITHIN DH UNIT
    945	003076	010037 	000000G			MOV	R0,$UNIT	;;;STORE THAT UNIT NUMBER
    946					;
    947	003102	013700 	000000G			MOV	CTYPTR,R0	;;;GET OLD CTY TABLE ENTRY POINTER
    948	003106	042760 	000000G	000000G		BIC	#TT.CTY,STSW1(R0) ;;;MARK NOT THE CTY ANY MORE
    949	003114	010437 	000000G			MOV	R4,CTYPTR	;;;SET THE NEW CTY TABLE ENTRY
    950	003120	010437 	000000C			MOV	R4,.DQPBA+<Q.SZ*<D.CCTY-1>>+Q.DA ;;;SET THE -10 CTY POINTER TO US, ALSO
    951	003124	052764 	000000G	000000G		BIS	#TT.CTY,STSW1(R4) ;;;SET THIS AS THE CTY
    952	003132	010364 	000000G			MOV	R3,STSW0(R4)	;;;SET DH PARAMETERS FROM SPEED
    953					;
    954					; RESET DL11 TABLE FOR CONFIGURATION
    955					;
    956	003136				SETDL:
    957	003136	012737 	000000G	000000C		MOV	#KBS0,DLTBL+TTYEXP
    958	003144	012737 	000000G	000000C		MOV	#KBS1,DLTBL+TTYEXP+10
    959	003152	012737 	175630 	000000C		MOV	#175630,DLTBL+TTYEXP+20
    960	003160	012737 	175640 	000000C		MOV	#175640,DLTBL+TTYEXP+30
    961	003166	012737 	175650 	000000C		MOV	#175650,DLTBL+TTYEXP+40
    962					;
    963					; RESET DH TABLE SO THAT WE CAN CONFIGURE UP
    964					;
    965	003174				SETDH:
    966	003174	012700 	160020 			MOV	#DHEXPA,R0	;;;GET EXT PAGE ADDR OF FIRST DH
    967	003200	012701 	000000C			MOV	#DHTBL+TTYEXP,R1	;;; AND TABLE ADDRESS FOR SAME
    968	003204				10$:
    969	003204	012702 	000020 			MOV	#16.,R2		;;;# LINES PER DH
    970	003210				20$:
    971	003210	010011 				MOV	R0,(R1)		;;;SET THIS DH EXTERNAL PAGE ADDRESS
    972	003212	062701 	000010 			ADD	#8.,R1		;;;BUMP TO NEXT TABLE ENTRY
    973	003216	077204 				SOB	R2,20$		;;;LOOP FOR ALL LINES IN THIS DH
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 14-1
RESTORE -- SETUP CTY LINE # AND DH-11 TABLES

    974					;
    975	003220	062700 	000020 			ADD	#DHEXPZ,R0	;;;BUMP TO NEXT DH
    976	003224	020127 	000000G			CMP	R1,#TTYEND	;;;END OF TABLE YET?
    977	003230	103765 				BLO	10$		;;;NO-- DO NEXT DH
    978					;	BR	REDSY		;;;CONTINUE . .
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 15
RESTORE -- REDIRECT SY0: TO BOOT DEVICE

    980						.SBTTL	RESTORE -- REDIRECT SY0: TO BOOT DEVICE
    981					;
    982					; IF THIS WAS A SAVE TO SY, REDIRECT SY TO POINT TO BOOT UNIT
    983					;
    984	003232				REDSY:
    985	003232	010501 				MOV	R5,R1		;;;GET BACK THE BOOT PARAM
    986	003234	106301 				ASLB	R1		;;;SHIFT BITS 6-4 INTO 7-5
    987	003236	120127 	000060 			CMPB	R1,#3*BIT4	;;;IS SPEED FIELD 0-2?
    988	003242	103401 				BLO	10$		;;;YES-- UNIT # IS OK
    989	003244	005001 				CLR	R1		;;;NO-- 3-17-- UNIT # IS ZERO
    990	003246				10$:
    991	003246	000301 				SWAB	R1		;;;BRING UNIT # INTO BITS 2-0
    992	003250	042701 	177770 			BIC	#^C<7>,R1	;;;TRIM TO THREE BITS
    993					;
    994	003254	013700 	000042'			MOV	DEVNAM,R0	;;;GET DEVICE NAME
    995	003260					CALL	FINDEV		;;;ATTEMPT TO FIND BOOT DEVICE
	003260	004737 	006402'			JSR	PC,FINDEV
    996	003264	103004 				BCC	30$		;;;GOT IT-- OK
    997	003266	013705 	000040'			MOV	PUDADR,R5	;;;NOT FOUND-- GET OLD PUD ENTRY ADDRESS
    998	003272	110165 	000000G			MOVB	R1,U.UN(R5)	;;;MAKE IT THE NEW UNIT #
    999	003276				30$:
   1000	003276	010504 				MOV	R5,R4		;;;SAVE THE PUD ENTRY ADDRESS
   1001	003300	005037 	000040'			CLR	PUDADR		;;;ASSUME FAILURE
   1002	003304	012700 	054523 			MOV	#"SY,R0		;;;GET THE
   1003	003310	005001 				CLR	R1		;;; PUD ENTRY ADDRESS
   1004	003312					CALL	FINDEV		;;;  FOR SY0:
	003312	004737 	006402'			JSR	PC,FINDEV
   1005	003316	103547 				BCS	DTECHK		;;;OOPS-- GIVE UP
   1006	003320	010465 	000000G			MOV	R4,U.RP(R5)	;;;REDIRECT SY0 TO BOOT DEVICE
   1007	003324	010405 				MOV	R4,R5		;;;GET BOOT PUD ENTRY ADDRESS BACK
   1008	003326	010537 	000040'			MOV	R5,PUDADR	;;; AND SAVE IT
   1009					;
   1010					; UPDATE ALL TASKS FROM OLD SAVE DEVICE TO NEW SYSTEM DEVICE
   1011					;
   1012	003332				40$:
   1013	003332	010500 				MOV	R5,R0		;;;COPY THE PUD ADDRESS
   1014	003334	162700 	000000G			SUB	#.PUDBA,R0	;;;MAKE IT INDEX INTO PUD
   1015	003340	012701 	000000G			MOV	#U.SZ,R1	;;;SET ENTRY SIZE AS DIVISOR
   1016	003344					CALL	$DIV		;;;COMPUTE PUD INDEX FOR NEW SY INTO R0
	003344	004737 	000000G			JSR	PC,$DIV
   1017					;
   1018	003350	013703 	000000G			MOV	.STDTA,R3	;;;GET THE ADDRESS OF THE BEGINNING OF SYSTEM TASK DIRECTORY
   1019	003354	010304 				MOV	R3,R4		;;;COPY IT AGAIN
   1020	003356	063704 	000000G			ADD	.STDTZ,R4	;;;FIND ADDRESS OF LAST ENTRY IN STD
   1021	003362				45$:
   1022	003362	012302 				MOV	(R3)+,R2	;;;GET AN STD ENTRY ADDRESS
   1023	003364	032762 	000000G	000000G		BIT	#SF.FX,S.FW(R2)	;;;FIXED TASK (I.E. NOT DISK-LOADED)?
   1024	003372	001006 				BNE	47$		;;;YES-- DON'T CHANGE IT'S DISK
   1025	003374	126237 	000000G	000045'		CMPB	S.DI(R2),PUDIDX	;;;IS THIS TASK FROM ORIGINAL SAVE DEVICE?
   1026	003402	001002 				BNE	47$		;;;NO-- GO ON
   1027	003404	110062 	000000G			MOVB	R0,S.DI(R2)	;;;YES-- UPDATE DISK INDICATOR TO NEW SYSTEM DEVICE
   1028	003410				47$:
   1029	003410	020304 				CMP	R3,R4		;;;AT END OF STD YET?
   1030	003412	101763 				BLOS	45$		;;;NO-- KEEP LOOPING FOR ALL TASKS
   1031					;	BR	RP4CHK		;;;MORE & MORE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 16
RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S

   1033						.SBTTL	RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S
   1034					;
   1035					; CHECK THE RP TO MAKE SURE IT IS ON-LINE AND IN A/B MODE
   1036					;
   1037	003414				RP4CHK:
   1038	003414	105737 	000053'			TSTB	RHFLAG		;;;SHOULD WE CHECK THE RP?
   1039	003420	001417 				BEQ	RP6CHK		;;;NO-- JUST GO ON
   1040	003422	116537 	000000G	176710 		MOVB	U.UN(R5),RPCS2	;;;YES-- SET TO PROPER UNIT #
   1041	003430	032737 	010000 	176712 		BIT	#RPMOL,RPDS	;;;IS THE RP ON-LINE?
   1042	003436	001002 				BNE	35$		;;;YES-- GO ON
   1043	003440	105237 	000054'			INCB	RNFLAG		;;;NO-- REMEMBER THAT IT ISN'T
   1044	003444				35$:
   1045	003444	032737 	001000 	176712 		BIT	#RPPGM,RPDS	;;;PROGRAMMABLE MODE (A/B)?
   1046	003452	001002 				BNE	RP6CHK		;;;YES-- ALL OK
   1047	003454	105237 	000055'			INCB	RPFLAG		;;;NO-- REMEMBER THAT IT ISN'T
   1048					;
   1049					; CHECK TO FIND ALL THE RP06'S MASQUERADING AS RP04'S
   1050					;
   1051	003460				RP6CHK:
   1052	003460	042737 	030000 	177776 		BIC	#PS.PUS,@#PS	;;;INSURE PREVIOUS KERNAL
   1053	003466	012704 	000006 			MOV	#6,R4		;;;POINT TO TIME-OUT TRAP
   1054	003472					MFPI	(R4)		;;;SAVE PS OF TRAP
	003472	011446 				MOV	(R4),-(SP)
   1055	003474					MFPI	-(R4)		;;; AND PC
	003474	014446 				MOV	-(R4),-(SP)
   1056	003476					MTPS	#80$,(R4)+	;;;SET NEW PC
	003476	012724 	003626'			MOV	#80$,(R4)+
   1057	003502					MTPS	@#PS,(R4)	;;; AND PS AS CURRENT STATE
	003502	013714 	177776 			MOV	@#PS,(R4)
   1058	003506	012700 	041104 			MOV	#"DB,R0		;;;WE ARE CHECKING DB'S
   1059	003512	012701 	000007 			MOV	#7,R1		;;; AND THERE ARE 8 OF THEM
   1060	003516				10$:
   1061	003516					CALL	FINDEV		;;;FIND THIS DB UNIT IN PUD
	003516	004737 	006402'			JSR	PC,FINDEV
   1062	003522	103436 				BCS	70$		;;;NOT THERE-- CARRY ON
   1063	003524	012765 	050700 	000000G		MOV	#50700,U.LBN(R5) ;;;ASSUME RP04-- SET LOW PART OF VOLUME SIZE
   1064	003532	112765 	000002 	000000G		MOVB	#2,U.LBH(R5)	;;; AND HIGH PART
   1065	003540	110137 	176710 			MOVB	R1,RPCS2+0	;;;SELECT THIS UNIT
   1066	003544	032737 	001400 	176712 		BIT	#RPDPR!RPPGM,RPDS ;;;DRIVE EXIST FOR US?
   1067	003552	001422 				BEQ	70$		;;;NO-- SKIP IT
   1068	003554	012702 	023420 			MOV	#10000.,R2	;;;SET TIME-OUT COUNT IF PORT BUSY
   1069	003560				20$:
   1070	003560	032737 	004000 	176700 		BIT	#RPDVA,RPCS1	;;;DRIVE AVAILABLE AT THIS TIME?
   1071	003566	001004 				BNE	30$		;;;YES-- CHECK IT OUT
   1072	003570	112737 	000001 	176700 		MOVB	#RPNOOP+RPGO,RPCS1+0 ;;;NO-- DO NOOP TO GET IT
   1073	003576	077210 				SOB	R2,20$		;;;LOOP UNTIL WE HAVE IT
   1074	003600				30$:
   1075	003600	123727 	176726 	000022 		CMPB	RPDT+0,#RPDT06	;;;THIS AN RP06?
   1076	003606	002404 				BLT	70$		;;;NO-- SIZE IS OK
   1077	003610	006365 	000000G			ASL	U.LBN(R5)	;;;YES-- DOUBLE
   1078	003614	106165 	000000G			ROLB	U.LBH(R5)	;;; THE VOLUME SIZE
   1079	003620				70$:
   1080	003620	005301 				DEC	R1		;;;COUNT DOWN TO NEXT UNIT #
   1081	003622	002335 				BGE	10$		;;;NOT DONE-- LOOP FOR ALL 8
   1082	003624	000401 				BR	90$		;;;ALL DONE-- GO ON
   1083					;
   1084	003626				80$:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 16-1
RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S

   1085	003626	022626 				CMP	(SP)+,(SP)+	;;;TIME-OUT TRAP-- REMOVE TRAP FROM STACK
   1086	003630				90$:
   1087	003630					MTPI	-(R4)		;;;RESTORE TRAP AT 4 PC
	003630	012644 				MOV	(SP)+,-(R4)
   1088	003632					MTPI	2(R4)		;;; AND PS
	003632	012664 	000002 			MOV	(SP)+,2(R4)
   1089					;	BR	DTECHK		;;;CARRY ON
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 17
RESTORE -- CHECK ALL THE DTE-20'S

   1091						.SBTTL	RESTORE -- CHECK ALL THE DTE-20'S
   1092					;
   1093					; CHECK TO MAKE SURE THAT ALL DTE-20'S ARE AT PRIORITY 6
   1094					;
   1095	003636				DTECHK:
   1096	003636	005000 				CLR	R0		;;;RESET DTE #
   1097	003640	012701 	001000 			MOV	#DTVECA+4,R1	;;;POINT TO HIGHEST DTE VECTOR ADDRESS
   1098	003644	012702 	174400 			MOV	#DTEXPA,R2	;;; ALSO TO EXTERNAL PAGE ADDRESS FOR #0
   1099	003650	005003 				CLR	R3		;;;RESET POINTER TO THE PRIVILEDGED DTE
   1100	003652	105337 	000061'			DECB	DEFLAG		;;;SAY DTE-20 OK
   1101					;
   1102	003656	042737 	030000 	177776 		BIC	#PS.PUS,@#PS	;;;INSURE PREVIOUS KERNAL
   1103	003664	012704 	000006 			MOV	#6,R4		;;;POINT TO TIMEOUT VECTOR
   1104	003670					MFPI	(R4)		;;;SAVE THE PS
	003670	011446 				MOV	(R4),-(SP)
   1105	003672					MFPI	-(R4)		;;; AND PC FOR TIMEOUT
	003672	014446 				MOV	-(R4),-(SP)
   1106	003674					MTPS	#60$,(R4)+	;;;SET WHERE TO GO ON NON-EX DTE
	003674	012724 	003776'			MOV	#60$,(R4)+
   1107	003700					MTPS	@#PS,(R4)	;;; AND HOW TO GET THERE
	003700	013714 	177776 			MOV	@#PS,(R4)
   1108	003704				10$:
   1109	003704					MFPI	-(R1)		;;;SAVE PS OF THIS DTE VECTOR
	003704	014146 				MOV	-(R1),-(SP)
   1110	003706					MFPI	-(R1)		;;; AND PC
	003706	014146 				MOV	-(R1),-(SP)
   1111	003710					MTPS	#50$,(R1)+	;;;WHERE TO GO IF IT INTERRUPTS
	003710	012721 	003770'			MOV	#50$,(R1)+
   1112	003714					MTPS	@#PS,(R1)	;;; AND HOW SUCH
	003714	013711 	177776 			MOV	@#PS,(R1)
   1113					;
   1114	003720	005712 				TST	(R2)		;;;DTE EXIST? (TRAP IF NOT TO 60$)
   1115	003722	032762 	000010 	000034 		BIT	#DTRSMD,DTSTAT(R2) ;;;THIS PRIVILEDGED DTE-20?
   1116	003730	001402 				BEQ	20$		;;;YES-- THIS IS THE ONE
   1117	003732	005703 				TST	R3		;;;NO-- FOUND A DTE YET?
   1118	003734	001001 				BNE	30$		;;;YES-- DON'T REMEMBER THIS ONE
   1119	003736				20$:
   1120	003736	010203 				MOV	R2,R3		;;;FIRST OR PRIV DTE-- SAVE IT
   1121	003740				30$:
   1122	003740	012762 	004040 	000034 		MOV	#DT11DB!DTINON,DTSTAT(R2) ;;;RING OUR DOORBELL (FROM THE INSIDE)
   1123	003746	112737 	000240 	177776 		MOVB	#PR5,@#PS	;;;BRING DOWN TO PRI 5
   1124	003754	110037 	000061'			MOVB	R0,DEFLAG	;;;DID NOT INTERRUPT-- SAVE DTE # NOT AT PRI 6
   1125	003760	024646 				CMP	-(SP),-(SP)	;;;FAKE TRAP ON STACK
   1126	003762	152737 	000340 	177776 		BISB	#PR7,@#PS	;;;RESTORE PRI 7
   1127	003770				50$:
   1128	003770	012762 	002010 	000034 		MOV	#DTINOF!DTCL11,DTSTAT(R2) ;;;CLEAR RINGING DOORBELL
   1129	003776				60$:
   1130	003776	042737 	030000 	177776 		BIC	#PS.PUS,@#PS	;;; AND PREVIOUS MODE KERNAL
   1131	004004	022626 				CMP	(SP)+,(SP)+	;;;REMOVE TRAP FROM STACK
   1132	004006					MTPI	-(R1)		;;;RESTORE PC FOR DTE VECTOR
	004006	012641 				MOV	(SP)+,-(R1)
   1133	004010					MTPI	2(R1)		;;; AND PS
	004010	012661 	000002 			MOV	(SP)+,2(R1)
   1134	004014	062702 	000040 			ADD	#DTEXPZ,R2	;;;BUMP TO NEXT DTE-20 EXT PAGE ADDR
   1135	004020	005200 				INC	R0		;;; AND COUNT UP
   1136	004022	020027 	000004 			CMP	R0,#4		;;;DONE WITH DTE'S?
   1137	004026	002726 				BLT	10$		;;;NOPE-- BACK FOR ANOTHER
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 17-1
RESTORE -- CHECK ALL THE DTE-20'S

   1138					;
   1139	004030	010337 	000000G			MOV	R3,.PRDTE	;;;SAVE THE ADDRESS OF THE PRIV DTE
   1140	004034	001402 				BEQ	95$		;;;NOT THERE-- LEAVE STATUS ZERO, TOO
   1141	004036	062703 	000034 			ADD	#DTSTAT,R3	;;;BUMP TO STATUS
   1142	004042				95$:
   1143	004042	010337 	000000G			MOV	R3,.PRSTA	;;;SAVE THAT ADDR, TOO
   1144					;
   1145	004046					MTPI	-(R4)		;;;RESTORE PC OF TIMEOUT TRAP
	004046	012644 				MOV	(SP)+,-(R4)
   1146	004050					MTPI	2(R4)		;;; AND PS
	004050	012664 	000002 			MOV	(SP)+,2(R4)
   1147	004054	013700 	000000G			MOV	.BTPRM,R0	;;;GET BOOT PARAMETER WORD AND
   1148	004060	042700 	177771 			BIC	#^C<BP.LD1!BP.LD0>,R0 ;;;ISOLATE THE LOAD SWITCHES
   1149	004064	022700 	000004 			CMP	#BP.LD1,R0	;;;IF SWITCHES = 10
   1150	004070	001004 				BNE	SYSTRT		;;;THEN
   1151	004072	005037 	000000G			CLR	.NOERR		;;;ALLOW ERRORS
   1152	004076					CALL	..DTP2		;;;START SECONDARY PROTOCOL AND
	004076	004737 	000000G			JSR	PC,..DTP2
   1153					;	BR	SYSTRT		;;;START SYSTEM GOING
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 18
RESTORE -- RESTART SYSTEM AND TYPE HERALD

   1155						.SBTTL	RESTORE -- RESTART SYSTEM AND TYPE HERALD
   1156					;
   1157					; FORCE POWER-RECOVERY AST BY SETTING EV.PF AND
   1158					;  FAKING AN ENABLE TASK SWITCHING REQUEST (FROM PR3 TO PR0)
   1159					;
   1160	004102				SYSTRT:
   1161	004102	005037 	000000G			CLR	.DATE3		;;;INDICATE THAT THE DATE IS NOW INVALID
   1162	004106	012737 	000000G	000000G		MOV	#EV.PF,.SERFG	;;;SET POWER-RECOVERY SIGNIFICANT EVENT
   1163	004114					CALL	..ENB0		;ENABLE TASK SWITCHING
	004114	004737 	000000G			JSR	PC,..ENB0
   1164					;
   1165					; SEE IF WRITE ERROR OCCURED DURING SAVE (WEFLAG NON-ZERO)
   1166					;
   1167	004120	105737 	000060'			TSTB	WEFLAG		;WRITE SUCCESFUL?
   1168	004124	001404 				BEQ	DTEMSG		;YES-- ALL OK
   1169	004126					ERROR	<WRITE ERROR>
	000465	   011 	   127 	   122 		.ASCIZ	""<11>"WRITE ERROR"<5>""
	000470	   111 	   124 	   105
	000473	   040 	   105 	   122
	000476	   122 	   117 	   122
	000501	   005 	   000
	004126	012746 	000465'			MOV	#$$$,-(SP)
	004132	004737 	005622'			JSR	PC,TYPMSG
   1170					;
   1171					; SEE IF DTE-20 PRIORITY CHECK FAILED
   1172					;
   1173	004136				DTEMSG:
   1174	004136	005737 	000000G			TST	.PRDTE		;DID WE FIND A DTE-20
   1175	004142	001007 				BNE	DTPMSG		;YES-- SEE IF OK
   1176	004144	005037 	000000G			CLR	.PRSTA		;IF HE CONTINUES . . .
   1177	004150					TYPE	<"<11>"NO DTE-20"<1>">
	000503	   011 	   116 	   117 		.ASCIZ	""<11>"NO DTE-20"<1>""
	000506	   040 	   104 	   124
	000511	   105 	   055 	   062
	000514	   060 	   001 	   000
	004150	012746 	000503'			MOV	#$$$,-(SP)
	004154	004737 	005622'			JSR	PC,TYPMSG
   1178	004160	000407 				BR	DTPMS1		;GO FLOP
   1179					;
   1180	004162				DTPMSG:
   1181	004162	113700 	000061'			MOVB	DEFLAG,R0	;WE FAIL THE CHECK?
   1182	004166	002414 				BLT	SYSMSG		;NO-- ALL OK
   1183	004170					TYPE	<"<11>"DTE-20 #"<7>" NOT AT PRIORITY LEVEL 6"<1>">
	000517	   011 	   104 	   124 		.ASCIZ	""<11>"DTE-20 #"<7>" NOT AT PRIORITY LEVEL 6"<1>""
	000522	   105 	   055 	   062
	000525	   060 	   040 	   043
	000530	   007 	   040 	   116
	000533	   117 	   124 	   040
	000536	   101 	   124 	   040
	000541	   120 	   122 	   111
	000544	   117 	   122 	   111
	000547	   124 	   131 	   040
	000552	   114 	   105 	   126
	000555	   105 	   114 	   040
	000560	   066 	   001 	   000
	004170	012746 	000517'			MOV	#$$$,-(SP)
	004174	004737 	005622'			JSR	PC,TYPMSG
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 18-1
RESTORE -- RESTART SYSTEM AND TYPE HERALD

   1184	004200				DTPMS1:
   1185	004200					.INH			;;;BACK UP TO NOTHING-NESS
	004200	013746 	177776 			MOV	PS,-(SP)
	004204	112737 	000340 	177776 		MOVB	#PR7,@#PS	;;
   1186	004212	000777 				BR	.		;;;WAIT FOR SOMEONE TO PICK UP THE PIECES
   1187	004214					.ENB			;;;THE PIECES HAVE BEEN PICKED UP
	004214	012637 	177776 			MOV	(SP)+,@#PS	;;
   1188					;
   1189					; TYPE SYSTEM MESSAGE
   1190					;
   1191	004220				SYSMSG:
   1192	004220	012700 	000000G			MOV	#.VERNO,R0	; +++003 POINT TO VERSION # STRING
   1193	004224					TYPE	<"<1><1>"RSX-20F "<4>" "<6><1><1>"> ; +++003
	000563	   001 	   001 	   122 		.ASCIZ	""<1><1>"RSX-20F "<4>" "<6><1><1>""
	000566	   123 	   130 	   055
	000571	   062 	   060 	   106
	000574	   040 	   004 	   040
	000577	   006 	   001 	   001
	000602	   000
	004224	012746 	000563'			MOV	#$$$,-(SP)
	004230	004737 	005622'			JSR	PC,TYPMSG
   1194					;	BR	MNTSY		;UPWARD
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 19
RESTORE -- TYPE SY0: REDIRECT MESSAGE AND MOUNT SY0:

   1196						.SBTTL	RESTORE -- TYPE SY0: REDIRECT MESSAGE AND MOUNT SY0:
   1197					;
   1198					; TYPE REDIRECTED MESSAGE, MOUNT SY IF SO
   1199	004234				MNTSY:				; +++001
   1200	004234	013705 	000040'			MOV	PUDADR,R5	;GET THE PUD ENTRY FOR THE SY DEVICE
   1201	004240	001436 				BEQ	RQSTS1		;GIVE UP IF NONE
   1202	004242					TYPE	<[SY0: REDIRECTED TO "<3>"]"<1>">
	000603	   133 	   123 	   131 		.ASCIZ	"[SY0: REDIRECTED TO "<3>"]"<1>""
	000606	   060 	   072 	   040
	000611	   122 	   105 	   104
	000614	   111 	   122 	   105
	000617	   103 	   124 	   105
	000622	   104 	   040 	   124
	000625	   117 	   040 	   003
	000630	   135 	   001 	   000
	004242	012746 	000603'			MOV	#$$$,-(SP)
	004246	004737 	005622'			JSR	PC,TYPMSG
   1203	004252					ALUN$S	#DSKLUN,U.DN(R5),U.UN(R5) ;ASSIGN THE SY DEVCICE
	004252	016546 	000000G			MOV	U.UN(R5),-(SP)
	004256	016546 	000000G			MOV	U.DN(R5),-(SP)
	004262	012746 	000002 			MOV	#DSKLUN,-(SP)
	004266	012746 				MOV	(PC)+,-(SP)
	004270	   007 	   004 			.BYTE	7.,4
	004272	104375 				EMT	375
   1204	004274	103572 				BCS	RQSKLR		; +++001 OPPS-- JUST CHECK KLINIK LINE
   1205	004276	005765 	000000G			TST	U.VA(R5)	;VOLUME ALREADY MOUNTED?????
   1206	004302	001022 				BNE	REDHOM		;YES-- SKIP THIS
   1207	004304					CALL	FNDACP		;NO-- FIND ACP FOR SY
	004304	004737 	006440'			JSR	PC,FNDACP
   1208	004310	010265 	000000G			MOV	R2,U.ACP(R5)	;AND SET IT FOR MOUNT
   1209	004314	012702 	001106'			MOV	#MNTBLK,R2	;GOT IT-- POINT TO MOUNT
   1210	004320					CALL	FILMNT		;MOUNT SY
	004320	004737 	006460'			JSR	PC,FILMNT
   1211	004324	103005 				BCC	SYMNTD		;MOUNTED
   1212	004326					WARN	<MOUNT "<10>" ERROR "<7>">
	000633	   012 	   115 	   117 		.ASCIZ	""<12>"MOUNT "<10>" ERROR "<7>""<1>""
	000636	   125 	   116 	   124
	000641	   040 	   010 	   040
	000644	   105 	   122 	   122
	000647	   117 	   122 	   040
	000652	   007 	   001 	   000
	004326	012746 	000633'			MOV	#$$$,-(SP)
	004332	004737 	005622'			JSR	PC,TYPMSG
   1213	004336				RQSTS1:
   1214	004336	000551 				BR	RQSKLR		; +++001 OOPS
   1215					;
   1216	004340				SYMNTD:
   1217	004340					TYPE	<["<10>" MOUNTED]"<1>">
	000655	   133 	   010 	   040 		.ASCIZ	"["<10>" MOUNTED]"<1>""
	000660	   115 	   117 	   125
	000663	   116 	   124 	   105
	000666	   104 	   135 	   001
	000671	   000
	004340	012746 	000655'			MOV	#$$$,-(SP)
	004344	004737 	005622'			JSR	PC,TYPMSG
   1218					;	BR	REDHOM		;GO READ THE HOM BLOCKS
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 20
RESTORE -- READ HOM BLOCKS ON BOOT DB

   1220						.SBTTL	RESTORE -- READ HOM BLOCKS ON BOOT DB
   1221					;
   1222					; READ HOM BLOCKS FROM DB0 TO SEE IF WE HAVE A FILE SYSTEM ON IT
   1223					;
   1224	004350				REDHOM:
   1225	004350	105737 	000053'			TSTB	RHFLAG		;SHOULD WE READ THE HOM BLOCKS?
   1226	004354	001542 				BEQ	RQSKLR		; +++001 NO-- JUST CHECK KLINIK LINE
   1227	004356	105737 	000054'			TSTB	RNFLAG		;RP NOT READY?
   1228	004362	001113 				BNE	RNRERR		;YES-- COMPLAIN
   1229	004364	105737 	000055'			TSTB	RPFLAG		;RP IN PROGRAMMABLE (A/B) MODE?
   1230	004370	001404 				BEQ	REDHM1		;YES-- GO WORK ON IT
   1231	004372					WARN	<"<10>" NOT IN PROGRAMMABLE (A/B) MODE>
	000672	   012 	   010 	   040 		.ASCIZ	""<12>""<10>" NOT IN PROGRAMMABLE (A/B) MODE"<1>""
	000675	   116 	   117 	   124
	000700	   040 	   111 	   116
	000703	   040 	   120 	   122
	000706	   117 	   107 	   122
	000711	   101 	   115 	   115
	000714	   101 	   102 	   114
	000717	   105 	   040 	   050
	000722	   101 	   057 	   102
	000725	   051 	   040 	   115
	000730	   117 	   104 	   105
	000733	   001 	   000
	004372	012746 	000672'			MOV	#$$$,-(SP)
	004376	004737 	005622'			JSR	PC,TYPMSG
   1232	004402				REDHM1:
   1233	004402	005003 				CLR	R3		;CLEAR COUNT OF # TIMES WE SAW 'HOM'
   1234	004404	012705 	000001 			MOV	#1,R5		;START WITH HOM BLOCK AT LBN 1
   1235	004410				20$:
   1236	004410	012700 	001000 			MOV	#IO.RLB,R0	;DO A READ LOGICAL BLOCK FUNCTION
   1237	004414	012701 	000062'			MOV	#HOMBUF,R1	; TO THE HOM BLOCK BUFFER
   1238	004420	012702 	001000 			MOV	#512.,R2	;ONE BLOCK'S WORTH
   1239	004424	005004 				CLR	R4		;CLEAR LOW-ORDER LBN
   1240	004426					CALL	FILQIO		;DO IT TO THE DB0
	004426	004737 	006474'			JSR	PC,FILQIO
   1241	004432	103462 				BCS	RHMERR		;ERROR-- GO REPORT IT
   1242					;
   1243	004434	022711 	105755 			CMP	#SXBTHM,(R1)	;IS THIS A SIXBIT/HOM/ BLOCK?
   1244	004440	001013 				BNE	30$		;NO-- LOOK NO FARTHER
   1245	004442	005703 				TST	R3		;YES-- ALREADY SEEN A GOOD HOM BLOCK?
   1246	004444	001010 				BNE	29$		;YES-- DON'T USE THIS ONE
   1247					;
   1248	004446	012701 	000366'			MOV	#HOMBUF+<HOMFE0*4>,R1 ;NO-- ADDRESS OUR WORDS IN HOM BLOCK
   1249	004452	012702 	000000G			MOV	#.RPADR,R2	; AND WHERE TO STORE THEM
   1250	004456	012122 				MOV	(R1)+,(R2)+	;(LH HOMFE0) (.RPADR+0) HIGH-ORDER DISK ADDRESS
   1251	004460	012122 				MOV	(R1)+,(R2)+	;(RH HOMFE0) (.RPADR+2) LOW-ORDER DISK ADDRESS
   1252	004462	012122 				MOV	(R1)+,(R2)+	;(LH HOMFE1) (.RPSIZ+0) HIGH-ORDER SIZE
   1253	004464	012122 				MOV	(R1)+,(R2)+	;(RH HOMFE1) (.RPSIZ+2) LOW-ORDER SIZE
   1254	004466				29$:
   1255	004466	005203 				INC	R3		;SAY WE SAW ANOTHER GOOD HOM BLOCK
   1256	004470				30$:
   1257	004470	005305 				DEC	R5		;WERE WE LOOKING AT
   1258	004472	003003 				BGT	40$		; BLOCK #1?
   1259	004474	012705 	000012 			MOV	#10.,R5		;YES-- ALSO TRY BLOCK 10.
   1260	004500	000743 				BR	20$		;BACK TO LOOK AT IT
   1261					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 20-1
RESTORE -- READ HOM BLOCKS ON BOOT DB

   1262	004502				40$:
   1263	004502	005303 				DEC	R3		;HOW MANY 'HOM' BLOCKS DID WE SEE?
   1264	004504	002447 				BLT	ALLRXF		;0-- DISK IS ALL OURS
   1265	004506	001412 				BEQ	HBCERR		;1-- CONSISTENCY ERROR
   1266	004510	012705 	000004 			MOV	#4,R5		;2-- TOPS FILE SYSTEM
   1267	004514	012701 	000366'			MOV	#HOMBUF+<HOMFE0*4>,R1 ;POINT TO SECOND HOM BLOCK AREA
   1268	004520	012702 	000000G			MOV	#.RPADR,R2	; AND TO WHAT WE GOT FROM FIRST BLOCK
   1269	004524				50$:
   1270	004524	022122 				CMP	(R1)+,(R2)+	;CHECK FOR CONSISTENCY
   1271	004526	001002 				BNE	HBCERR		;OOPS-- HOM BLOCKS DON'T AGREE
   1272	004530	077503 				SOB	R5,50$		;LOOP FOR ALL FOUR WORDS
   1273	004532	000404 				BR	SETRXF		;CHECKS OUT-- JUST CHECK THE FLAG
   1274					;
   1275	004534				HBCERR:
   1276	004534					WARN	<TOPS HOM BLOCK CONSISTENCY ERROR ON "<10>">
	000735	   012 	   124 	   117 		.ASCIZ	""<12>"TOPS HOM BLOCK CONSISTENCY ERROR ON "<10>""<1>""
	000740	   120 	   123 	   040
	000743	   110 	   117 	   115
	000746	   040 	   102 	   114
	000751	   117 	   103 	   113
	000754	   040 	   103 	   117
	000757	   116 	   123 	   111
	000762	   123 	   124 	   105
	000765	   116 	   103 	   131
	000770	   040 	   105 	   122
	000773	   122 	   117 	   122
	000776	   040 	   117 	   116
	001001	   040 	   010 	   001
	001004	   000
	004534	012746 	000735'			MOV	#$$$,-(SP)
	004540	004737 	005622'			JSR	PC,TYPMSG
   1277					;	BR	SETRXF		;USE GOOD (OR FIRST) HOM BLOCK
   1278					;
   1279	004544				SETRXF:
   1280	004544	005737 	000000G			TST	.RPADR+0	;IS BIT 2 OF HOMFE0 (BIT 15 OF .RPADR+0) SET?
   1281	004550	100442 				BMI	SOMRXF		;YES-- JUST CLEAR THE FLAG
   1282	004552					WARN	<NO RSX-20F FILE SYSTEM ON "<10>">
	001005	   012 	   116 	   117 		.ASCIZ	""<12>"NO RSX-20F FILE SYSTEM ON "<10>""<1>""
	001010	   040 	   122 	   123
	001013	   130 	   055 	   062
	001016	   060 	   106 	   040
	001021	   106 	   111 	   114
	001024	   105 	   040 	   123
	001027	   131 	   123 	   124
	001032	   105 	   115 	   040
	001035	   117 	   116 	   040
	001040	   010 	   001 	   000
	004552	012746 	001005'			MOV	#$$$,-(SP)
	004556	004737 	005622'			JSR	PC,TYPMSG
   1283	004562				NOTRXF:
   1284	004562	012703 	000000G			MOV	#.RPADR,R3	;POINT TO AREA
   1285	004566	005023 				CLR	(R3)+		;CLEAR
   1286	004570	005023 				CLR	(R3)+		; ALL
   1287	004572	005023 				CLR	(R3)+		; FOUR
   1288	004574	005023 				CLR	(R3)+		; WORDS
   1289	004576	000431 				BR	RQSKLR		; +++001 ALL DONE
   1290					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 20-2
RESTORE -- READ HOM BLOCKS ON BOOT DB

   1291	004600				RHMERR:
   1292	004600					WARN	<TOPS HOM BLOCK READ ERROR "<7>" ON "<10>">
	001043	   012 	   124 	   117 		.ASCIZ	""<12>"TOPS HOM BLOCK READ ERROR "<7>" ON "<10>""<1>""
	001046	   120 	   123 	   040
	001051	   110 	   117 	   115
	001054	   040 	   102 	   114
	001057	   117 	   103 	   113
	001062	   040 	   122 	   105
	001065	   101 	   104 	   040
	001070	   105 	   122 	   122
	001073	   117 	   122 	   040
	001076	   007 	   040 	   117
	001101	   116 	   040 	   010
	001104	   001 	   000
	004600	012746 	001043'			MOV	#$$$,-(SP)
	004604	004737 	005622'			JSR	PC,TYPMSG
   1293	004610	000411 				BR	ALLRX1		;ASSUME ALL OF DISK
   1294					;
   1295	004612				RNRERR:
   1296	004612					WARN	<"<10>" NOT READY>
	001106	   012 	   010 	   040 		.ASCIZ	""<12>""<10>" NOT READY"<1>""
	001111	   116 	   117 	   124
	001114	   040 	   122 	   105
	001117	   101 	   104 	   131
	001122	   001 	   000
	004612	012746 	001106'			MOV	#$$$,-(SP)
	004616	004737 	005622'			JSR	PC,TYPMSG
   1297	004622	000417 				BR	RQSKLR		; +++001 LEAVE ADDR/SIZE ALONE
   1298					;
   1299	004624				ALLRXF:
   1300	004624					WARN	<NO TOPS FILE SYSTEM ON "<10>">
	001124	   012 	   116 	   117 		.ASCIZ	""<12>"NO TOPS FILE SYSTEM ON "<10>""<1>""
	001127	   040 	   124 	   117
	001132	   120 	   123 	   040
	001135	   106 	   111 	   114
	001140	   105 	   040 	   123
	001143	   131 	   123 	   124
	001146	   105 	   115 	   040
	001151	   117 	   116 	   040
	001154	   010 	   001 	   000
	004624	012746 	001124'			MOV	#$$$,-(SP)
	004630	004737 	005622'			JSR	PC,TYPMSG
   1301	004634				ALLRX1:
   1302	004634	012703 	000000G			MOV	#.RPADR,R3	;ADDRESS WORDS TO SET
   1303	004640	005023 				CLR	(R3)+		;HIGH ADDRESS:0
   1304	004642	012723 	000001 			MOV	#1,(R3)+	;LOW ADDRESS: BLOCK 1
   1305	004646	012723 	000177 			MOV	#177,(R3)+	;HIGH SIZE: MAX TO 24 BITS
   1306	004652	012723 	177777 			MOV	#-1,(R3)+	; LOW SIZE: MAX ALSO
   1307	004656				SOMRXF:
   1308	004656	105037 	000001G			CLRB	.RPADR+1	;CLEAR HIGH BYTE OF HIGH ADDRESS
   1309					;	BR	RQSKLR		; +++001 GO CHECK KLINIK LINE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 21
RESTORE -- CKECK STATE OF KLINIK LINE

   1311						.SBTTL	RESTORE -- CKECK STATE OF KLINIK LINE
   1312					;
   1313					;	CHECK STATE OF KLINIK LINE
   1314					;
   1315	004662				RQSKLR:
   1316	004662					CLEF$S	#E.FTMO		; +++001 RESET TIMEOUT FLAG
	004662	012746 	000002 			MOV	#E.FTMO,-(SP)
	004666	012746 				MOV	(PC)+,-(SP)
	004670	   037 	   002 			.BYTE	31.,2
	004672	104375 				EMT	375
   1317	004674	013705 	000000G			MOV	KLNPTR,R5	; +++001 KLINIK LINE BLOCK POINTER TO R5
   1318	004700	016504 	000000G			MOV	TTYEXP(R5),R4	; +++001 I/O PAGE ADDRESS TO R4
   1319	004704	012703 	000055 			MOV	#^D45,R3	; +++001 SET UP?? COUNTER
   1320	004710	013700 	000000G			MOV	.BTPRM,R0	; +++001 BOOT PARAMETERS TO R0
   1321	004714	042700 	177771 			BIC	#^C<BP.LD1!BP.LD0>,R0 ; +++001 JUST WHAT WE WANT
   1322	004720				10$:
   1323	004720	032714 	000000G			BIT	#DL.CAR,(R4)	; +++001 IS CARRIER UP
   1324	004724	001006 				BNE	20$		; +++001 YES -- GO ON
   1325	004726	032765 	000000C	000000G		BIT	#<TT.CRW!TT.RIP>,STSW1(R5) ; +++001 NO -- IN CARRIER WAIT??
   1326	004734	001577 				BEQ	RQSTSK		; +++001 NO -- OH WELL....
   1327	004736	005203 				INC	R3		; +++001 YES -- TAKE THIS TICK BACK
   1328	004740	000413 				BR	30$		; +++001 WAIT A BIT MORE
   1329						;
   1330	004742				20$:
   1331	004742	022700 	000004 			CMP	#BP.LD1,R0	; +++001 CAN PROTOCOLS RUN??
   1332	004746	001034 				BNE	35$		; +++001 NO -- SO DON'T EVEN BOTHER
   1333	004750	032737 	000000C	000002G		BIT	#<EF.PR1!EF.PR2>,.COMEF+2
   1334	004756	001561 				BEQ	PRNRUN		; +++001 PROTOCOL STOPPED -- JUST GO AWAY
   1335	004760	032737 	000000G	000002G		BIT	#EF.RKP,.COMEF+2 ; +++001 DID WE GET KLINIK PARAMETERS??
   1336	004766	001024 				BNE	35$		; +++001 YES -- GO ON
   1337	004770				30$:
   1338	004770					MRKT$S	#E.FTMO,#60.	; +++001 WAIT A BIT
	004770	005046 				CLR	-(SP)
	004772	005046 				CLR	-(SP)
	004774	012746 	000074 			MOV	#60.,-(SP)
	005000	012746 	000002 			MOV	#E.FTMO,-(SP)
	005004	012746 				MOV	(PC)+,-(SP)
	005006	   027 	   005 			.BYTE	23.,5
	005010	104375 				EMT	375
   1339	005012					WTSE$S	#E.FTMO		; +++001 WAIT FOR IT
	005012	012746 	000002 			MOV	#E.FTMO,-(SP)
	005016	012746 				MOV	(PC)+,-(SP)
	005020	   051 	   002 			.BYTE	41.,2
	005022	104375 				EMT	375
   1340	005024					CLEF$S	#E.FTMO		; +++001 CLEAR THE FLAG
	005024	012746 	000002 			MOV	#E.FTMO,-(SP)
	005030	012746 				MOV	(PC)+,-(SP)
	005032	   037 	   002 			.BYTE	31.,2
	005034	104375 				EMT	375
   1341	005036	077350 				SOB	R3,10$		; +++001 LOOP TILL DONE
   1342	005040				35$:
   1343	005040					.INH6			; +++001 DISALLOW INTERRRUPTS
	005040	013746 	177776 			MOV	@#PS,-(SP)
	005044	112737 	000300 	177776 		MOVB	#300,@#PS
   1344	005052	032737 	000000G	000002G		BIT	#EF.RKP,.COMEF+2 ;;; +++001 DID WE GET KLINIK PARAMETERS??
   1345	005060	001413 				BEQ	50$		;;; +++001 NO -- DO DEFAULT
   1346	005062	105737 	000000G			TSTB	.KLNMD+0	;;; +++001 YES -- DO WE HAVE PARAMETERS??
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 21-1
RESTORE -- CKECK STATE OF KLINIK LINE

   1347	005066	001410 				BEQ	50$		;;; +++001 NO -- DO DEFAULT
   1348	005070				40$:
   1349	005070	113737 	000000G	000000G		MOVB	.KLNMD+0,.KLNSW+0 ;;; +++001 SET THE KLINIK MODE
   1350	005076	003410 				BLE	60$		;;; +++001 EXIT IF USER
   1351	005100	113737 	000001G	000000G		MOVB	.KLNMD+1,.FEMOD	;;; +++001 SET THE CONSOLE MODE
   1352	005106	000404 				BR	60$		;;; +++001 GO TO COMMON EXIT
   1353						;
   1354	005110				50$:
   1355	005110	012737 	003401 	000000G		MOV	#3401,.KLNMD	;;; +++001 SET DEFAULT KLINIK PARAMETERS
   1356	005116	000764 				BR	40$		;;; +++001 SET OTHER PARAMETERS AND EXIT
   1357						;
   1358	005120				60$:
   1359	005120	042765 	000000G	000000G		BIC	#TT.OUT,STSW1(R5)
   1360	005126	105737 	000000G			TSTB	.KLNMD+0	;;; +++001 WHICH MODE??
   1361	005132	002404 				BLT	70$		;;; +++001 GO DO USER STUFF
   1362	005134	052765 	000000G	000000G		BIS	#TT.CTY,STSW1(R5) ;;; +++001 REMOTE -- DECLARE CTY
   1363	005142	000403 				BR	80$		;;; +++001 AND GO ON
   1364						;
   1365	005144				70$:
   1366	005144	042765 	000000G	000000G		BIC	#TT.CTY,STSW1(R5) ;;; +++001 CLEAR CTY BIT
   1367	005152				80$:
   1368	005152					.ENB6			;;; +++001 ALLOW INTERRUPTS
	005152	012637 	177776 			MOV	(SP)+,@#PS
   1369	005156	105737 	000000G			TSTB	.KLNMD+0	; +++001 CHECK MODE
   1370	005162	002411 				BLT	KLAUSR		; +++001 USER -- GO ON
   1371	005164					WARN	<KLINIK LINE ACTIVE IN REMOTE MODE>
	001157	   012 	   113 	   114 		.ASCIZ	""<12>"KLINIK LINE ACTIVE IN REMOTE MODE"<1>""
	001162	   111 	   116 	   111
	001165	   113 	   040 	   114
	001170	   111 	   116 	   105
	001173	   040 	   101 	   103
	001176	   124 	   111 	   126
	001201	   105 	   040 	   111
	001204	   116 	   040 	   122
	001207	   105 	   115 	   117
	001212	   124 	   105 	   040
	001215	   115 	   117 	   104
	001220	   105 	   001 	   000
	005164	012746 	001157'			MOV	#$$$,-(SP)
	005170	004737 	005622'			JSR	PC,TYPMSG
   1372	005174					WARN	<KLINIK LINE CONNECTED TO SYSTEM CONSOLE>
	001223	   012 	   113 	   114 		.ASCIZ	""<12>"KLINIK LINE CONNECTED TO SYSTEM CONSOLE"<1>""
	001226	   111 	   116 	   111
	001231	   113 	   040 	   114
	001234	   111 	   116 	   105
	001237	   040 	   103 	   117
	001242	   116 	   116 	   105
	001245	   103 	   124 	   105
	001250	   104 	   040 	   124
	001253	   117 	   040 	   123
	001256	   131 	   123 	   124
	001261	   105 	   115 	   040
	001264	   103 	   117 	   116
	001267	   123 	   117 	   114
	001272	   105 	   001 	   000
	005174	012746 	001223'			MOV	#$$$,-(SP)
	005200	004737 	005622'			JSR	PC,TYPMSG
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 21-2
RESTORE -- CKECK STATE OF KLINIK LINE

   1373	005204	000404 				BR	KLAREM		; +++001 EXIT THIS ROUTINE
   1374						;
   1375	005206				KLAUSR:
   1376	005206					WARN	<KLINIK LINE ACTIVE IN USER MODE>
	001275	   012 	   113 	   114 		.ASCIZ	""<12>"KLINIK LINE ACTIVE IN USER MODE"<1>""
	001300	   111 	   116 	   111
	001303	   113 	   040 	   114
	001306	   111 	   116 	   105
	001311	   040 	   101 	   103
	001314	   124 	   111 	   126
	001317	   105 	   040 	   111
	001322	   116 	   040 	   125
	001325	   123 	   105 	   122
	001330	   040 	   115 	   117
	001333	   104 	   105 	   001
	001336	   000
	005206	012746 	001275'			MOV	#$$$,-(SP)
	005212	004737 	005622'			JSR	PC,TYPMSG
   1377	005216				KLAREM:
   1378	005216	032737 	000000G	000002G		BIT	#EF.PR1,.COMEF+2 ; +++004 AN WE LOG THIS??
   1379	005224	001443 				BEQ	RQSTSK		; +++004 NO -- GO ON
   1380	005226	012700 	001066'			MOV	#LOGBUF,R0	; +++004 YES -- BUFFER POINTER TO R0
   1381	005232	113701 	000000G			MOVB	.KLNMD+0,R1	; +++004 KLINIK MODE TO R1
   1382	005236	002406 				BLT	10$		; +++004 USER -- GO ON
   1383	005240	113701 	000001G			MOVB	.KLNMD+1,R1	; +++004 REMOTE -- GET CONSOLE MODE
   1384	005244	006201 				ASR	R1		; +++004 COMPUTE THE CODE
   1385	005246	005201 				INC	R1		; +++004
   1386	005250	006201 				ASR	R1		; +++004
   1387	005252	005201 				INC	R1		; +++004
   1388	005254				10$:
   1389	005254	110160 	000005 			MOVB	R1,5(R0)	; +++004 SET THE MODE
   1390	005260	112760 	000000G	000004 		MOVB	#K.LRBA,4(R0)	; +++004 SET THE LOG CODE
   1391	005266	012701 	100000G			MOV	#BC.HDS+100000,R1 ; +++004 FUNCTION CODE TO R1
   1392	005272	012702 	000004 			MOV	#E.FLOG,R2	; +++004 EVENT FLAG TO R2
   1393	005276	012703 	000000G			MOV	#D.CKLN,R3	; +++004 DEVICE CODE TO R3
   1394	005302					CALL	..STIN		; +++004 LOG IT
	005302	004737 	000000G			JSR	PC,..STIN
   1395	005306					WTSE$S	#E.FLOG		; +++004 WAIT FOR IT
	005306	012746 	000004 			MOV	#E.FLOG,-(SP)
	005312	012746 				MOV	(PC)+,-(SP)
	005314	   051 	   002 			.BYTE	41.,2
	005316	104375 				EMT	375
   1396	005320	000405 				BR	RQSTSK		; +++001 EXIT THIS ROUTINE
   1397						;
   1398	005322				PRNRUN:
   1399	005322					ERROR	<PROTOCOLS NOT RUNNING>
	001337	   011 	   120 	   122 		.ASCIZ	""<11>"PROTOCOLS NOT RUNNING"<5>""
	001342	   117 	   124 	   117
	001345	   103 	   117 	   114
	001350	   123 	   040 	   116
	001353	   117 	   124 	   040
	001356	   122 	   125 	   116
	001361	   116 	   111 	   116
	001364	   107 	   005 	   000
	005322	012746 	001337'			MOV	#$$$,-(SP)
	005326	004737 	005622'			JSR	PC,TYPMSG
   1400	005332	000452 				BR	EXIT		; +++001 GO AWAY
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 21-3
RESTORE -- CKECK STATE OF KLINIK LINE

   1401						;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 22
RESTORE -- REQUEST KL INITIALIZATION TASK AND/OR EXIT

   1403						.SBTTL	RESTORE -- REQUEST KL INITIALIZATION TASK AND/OR EXIT
   1404					;
   1405					; REQUEST KL SYSTEM INITIALIZATION TASK IF LOAD FLAGS FROM BOOT = 00 OR 11
   1406					;
   1407	005334				RQSTSK:
   1408	005334	012701 	001116'			MOV	#KLINIT,R1	;ADDRESS OF .RAD50/...KLI/
   1409	005340	013700 	000000G			MOV	.BTPRM,R0	;GET LOAD FLAGS
   1410	005344	012702 	000000C			MOV	#KL.LRM!KL.LCA!KL.CFM!KL.LVB,R2 ;DEFAULT TO DEFAULT
   1411	005350	032700 	000001 			BIT	#BP.SWR,R0	;FROM SWR BUTTON?
   1412	005354	001002 				BNE	10$		;YES-- OK
   1413	005356	052702 	000000G			BIS	#KL.VBN,R2	;NO-- VBOOT DOESN'T PROMPT
   1414	005362				10$:
   1415	005362	042700 	177771 			BIC	#^C<BP.LD1!BP.LD0>,R0 ;LOAD FLAGS= 00?
   1416	005366	001404 				BEQ	50$		;YES-- REQUEST SYSTEM INITIALIZATION
   1417	005370	022700 	000006 			CMP	#<BP.LD1!BP.LD0>,R0 ;LOAD FLAGS= 11?
   1418	005374	001024 				BNE	EXIT00		;NO-- JUST EXIT
   1419	005376	005002 				CLR	R2		;SET KLI TO ASK DIALOG
   1420	005400				50$:
   1421	005400	010237 	000000G			MOV	R2,.KLIWD	;SET FLAGS TO ...KLI
   1422	005404					RQST$S	R1		;REQUEST TASK
	005404	005046 				CLR	-(SP)
	005406	005046 				CLR	-(SP)
	005410	005046 				CLR	-(SP)
	005412	005046 				CLR	-(SP)
	005414	016146 	000002 			MOV	2(R1),-(SP)
	005420	011146 				MOV	(R1),-(SP)
	005422	012746 				MOV	(PC)+,-(SP)
	005424	   013 	   007 			.BYTE	11.,7
	005426	104375 				EMT	375
   1423	005430	103006 				BCC	EXIT00		;SUCCESS-- JUST LEAVE
   1424	005432	013700 	000000G			MOV	$DSW,R0		;GET THE ERROR CODE
   1425	005436					WARN	<KLI TASK REQUEST ERROR "<7>">
	001367	   012 	   113 	   114 		.ASCIZ	""<12>"KLI TASK REQUEST ERROR "<7>""<1>""
	001372	   111 	   040 	   124
	001375	   101 	   123 	   113
	001400	   040 	   122 	   105
	001403	   121 	   125 	   105
	001406	   123 	   124 	   040
	001411	   105 	   122 	   122
	001414	   117 	   122 	   040
	001417	   007 	   001 	   000
	005436	012746 	001367'			MOV	#$$$,-(SP)
	005442	004737 	005622'			JSR	PC,TYPMSG
   1426	005446				EXIT00:
   1427	005446	105737 	000050'			TSTB	EXFLAG		;SHOULD WE EXIT (/EX)
   1428	005452	001002 				BNE	EXIT		;YES-- DO SO
   1429	005454	000137 	001166'			JMP	SAVE		;NO-- GO BACK TO SAVE
   1430					;
   1431					; ALL DONE-- DO A TASK EXIT, SYSTEM BACK TO STATE BEFORE SAVE
   1432					;
   1433	005460				EXIT:
   1434	005460					EXIT$S			;TASK EXIT
	005460	012746 				MOV	(PC)+,-(SP)
	005462	   063 	   001 			.BYTE	51.,1
	005464	104375 				EMT	375
   1435	005466	000774 				BR	EXIT		;JUST IN CASE . . .
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 23
COMMAND PARSER ROUTINES

   1437						.SBTTL	COMMAND PARSER ROUTINES
   1438					;
   1439					; GENERAL NOTES:
   1440					;
   1441					; R4 IS ALWAYS USED AS A POINTER TO THE COMMAND STRING.  ON CALL,
   1442					; IT POINTS TO THE NEXT CHARACTER TO BE PROCESSED.  ON RETURN, R4
   1443					; ALWAYS POINTS TO THE CHARACTER AFTER THE LAST ONE PROCESSED, I.E.
   1444					; THE NEXT ONE TO BE PROCESSED.
   1445					;
   1446					; NOTE THAT END-OF-LINE IS A ZERO BYTE
   1447					;
   1448					;
   1449					; GETNB -- GET NEXT NON-BLANK CHARACTER
   1450					;
   1451					; RETURNS WITH R4 POINTING TO THE NEXT NON-BLANK CHARACTER
   1452					;	R0 --	NON-BLANK CHARACTER
   1453					;	CC-Z SET IF END-OF-LINE
   1454					;
   1455	005470				GETNB:
   1456	005470	112400 				MOVB	(R4)+,R0	;GET A CHARACTER
   1457	005472	122700 	000040 			CMPB	#' ,R0		;THIS BLANK?
   1458	005476	001774 				BEQ	GETNB		;YES-- LOOK SOME MORE
   1459	005500	122700 	000011 			CMPB	#'	,R0	;OR A TAB?
   1460	005504	001771 				BEQ	GETNB		;YES-- LOOK SOME MORE
   1461	005506				10$:
   1462	005506	105744 				TSTB	-(R4)		;NON-BLANK-- BACK OVER IT (MAY BE EOL)
   1463	005510					RETURN			; FROM GETNB
	005510	000207 				RTS	PC
   1464					;
   1465					; GETNAM -- GET TWO-CHARACTER ALPHABETIC NAME
   1466					;
   1467					; RETURNS AFTER TWO CHARCTERS OR NON-ALPHABETIC
   1468					;	R0 --	(LOW) FIRST CHARACTER (HIGH) SECOND CHARACTER
   1469					;	CC-C SET IF MORE THAN TWO CHARACTERS
   1470					;
   1471	005512				GETNAM:
   1472	005512	005000 				CLR	R0		;CLEAR ANSWER
   1473	005514				10$:
   1474	005514	122714 	000101 			CMPB	#'A,(R4)	;BELOW A?
   1475	005520	101015 				BHI	50$		;YES-- RETURN CC-C CLEAR
   1476	005522	121427 	000132 			CMPB	(R4),#'Z	;OR ABOVE Z?
   1477	005526	101012 				BHI	50$		;YES-- RETURN CC-C CLEAR
   1478	005530	005700 				TST	R0		;GOT A BYTE YET?
   1479	005532	001002 				BNE	20$		;YES-- STORE SECOND BYTE
   1480	005534	112400 				MOVB	(R4)+,R0	;NO-- GET LOW BYTE
   1481	005536	000766 				BR	10$		;LOOP FOR NEXT CHARACTER
   1482					;
   1483	005540				20$:
   1484	005540	000300 				SWAB	R0		;GET HIGH BYTE
   1485	005542	001003 				BNE	40$		;ALREADY THERE-- ERROR
   1486	005544	152400 				BISB	(R4)+,R0	;OK-- SET SECOND CHARACTER
   1487	005546	000300 				SWAB	R0		;RESTORE R0 TO PROPER ORIENTATION
   1488	005550	000761 				BR	10$		;LOOP FOR ANOTHER (?)
   1489					;
   1490	005552				40$:
   1491	005552	000261 				SEC			;ERROR
   1492	005554				50$:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 23-1
COMMAND PARSER ROUTINES

   1493	005554					RETURN			; FROM GETNAM
	005554	000207 				RTS	PC
   1494					;
   1495					; GETNUM -- GET OCTAL NUMBER
   1496					;
   1497					; RETURNS WITH NON-DIGIT OR IF MORE THAN A BYTE'S WORTH
   1498					;	R0 --	(LOW) NUMBER
   1499					;	CC-C SET IF LARGER THAN ONE BYTE
   1500					;
   1501	005556				GETNUM:
   1502	005556	005000 				CLR	R0		;CLEAR RESULT
   1503	005560				10$:
   1504	005560	112401 				MOVB	(R4)+,R1	;GET A DIGIT
   1505	005562	162701 	000060 			SUB	#'0,R1		;TRIM DOWN TO DIGIT
   1506	005566	103413 				BLO	40$		;NOT A DIGIT-- GIVE UP
   1507	005570	022701 	000007 			CMP	#7,R1		;TOO HIGH?
   1508	005574	103410 				BLO	40$		;YES-- GIVE UP WITH CC-C CLEAR
   1509		000003 			.REPT 3
   1510						ASLB	R0		;SHIFT OLD NUMBER A BIT
   1511						BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
   1512					.ENDR
	005576	106300 				ASLB	R0		;SHIFT OLD NUMBER A BIT
	005600	103407 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
	005602	106300 				ASLB	R0		;SHIFT OLD NUMBER A BIT
	005604	103405 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
	005606	106300 				ASLB	R0		;SHIFT OLD NUMBER A BIT
	005610	103403 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
   1513	005612	060100 				ADD	R1,R0		;ACCUMULATE THIS DIGIT
   1514	005614	000761 				BR	10$		;FETCH ANOTHER DIGIT
   1515					;
   1516	005616				40$:
   1517	005616	105744 				TSTB	-(R4)		;BACK OVER BAD CHARACTER
   1518	005620				50$:
   1519	005620					RETURN			;FROM GETNUM
	005620	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 24
TYPEOUT ROUTINES

   1521						.SBTTL	TYPEOUT ROUTINES
   1522					;
   1523					; TYPMSG -- TYPE A RANDOM ASCIZ STRING
   1524					;
   1525					; CALL:
   1526					;	PUSH	#<ADDRESS OF ASCIZ STRING>
   1527					;	CALL	TYPMSG
   1528					;
   1529					; SPECIAL CHARACTER CODES IN TEXT:
   1530					;	0 --	END OF TEXT
   1531					;	1 --	TYPE <CR><LF>
   1532					;	2 --	TYPE TWO CHARACTERS FROM R0 (SAVED ON STACK)
   1533					;	3 --	TYPE DEVICE NAME AND UNIT FROM PUD ENTRY (R5)
   1534					;	4 --	TYPE ASCIZ STRING BY R0
   1535					;	5 --	TYPE <CR><LF> AND RETURN TO SAVE
   1536					;	6 --	TYPE SYSTEM DATE
   1537					;	7 --	DECIMAL NUMBER IN R0 (SAVED ON STACK)
   1538					;	10 --	DEVICE NAME AND UNIT FROM PUD ENTRY IN PUDADR
   1539					;	11 --	FATAL ERROR PREFIX
   1540					;	12 --	DIAGNOSTIC ERROR PREFIX
   1541					;
   1542	005622				TYPMSG:
   1543	005622					PUSH	<R3,R2,R1,R0> ;SAVE USED REGISTERS
	005622	010346 				MOV	R3,-(SP)
	005624	010246 				MOV	R2,-(SP)
	005626	010146 				MOV	R1,-(SP)
	005630	010046 				MOV	R0,-(SP)
   1544	005632	016600 	000012 			MOV	12(SP),R0	;GET ADDRESS OF STRING
   1545	005636	012702 	000062'			MOV	#TYPBUF,R2	;POINT TO OUTPUT BUFFER
   1546					;
   1547					; ENTER HERE AT TYPMS1:
   1548					;	R0 --	POINTER TO STRING TO BE OUTPUT (AND FOLLOWING CODE)
   1549					;	R2 --	CURRENT POINTER TO OUTPUT BUFFER FOR LOADING CHARACTERS
   1550					;
   1551	005642				TYPMS1:
   1552	005642	112012 				MOVB	(R0)+,(R2)	;GET A CHARACTER FROM STRING
   1553	005644	122227 	000013 			CMPB	(R2)+,#TYPMAX	;SPECIAL CODE?
   1554	005650	103374 				BHIS	TYPMS1		;NO-- JUST GET NEXT CHARACTER
   1555	005652	114203 				MOVB	-(R2),R3	;YES-- GET THE CODE
   1556	005654	006303 				ASL	R3		;MAKE IT WORDS
   1557	005656	011601 				MOV	(SP),R1		;GET R0 FROM STACK BACK TO R1
   1558	005660					CALL	@TYPTAB(R3)	;CALL ROUTINE TO PROCESS
	005660	004773 	005666'			JSR	PC,@TYPTAB(R3)
   1559	005664	000766 				BR	TYPMS1		;BACK FOR MORE
   1560					;
   1561					; DISPATCH TABLE FOR SPECIAL CODES
   1562					;
   1563	005666				TYPTAB:
   1564	005666	005714'	006006'	006012'		.WORD	TYPDON,TYPCR,TYPTXT,TYPDEV,TYPSTR,TYPSAV,TYPDAT,TYPDEC,TYPSDV,TYPERR,TYPWRN
	005674	006030'	006076'	006000'
	005702	006106'	006224'	006024'
	005710	006064'	006072'
   1565		000013 			TYPMAX=<.-TYPTAB>/2
   1566					;
   1567					; 0 -- END OF MESSAGE
   1568					;
   1569	005714				TYPDON:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 24-1
TYPEOUT ROUTINES

   1570	005714	005726 				TST	(SP)+		;POP THE RETURN ADDRESS OFF TO NOWHERE
   1571	005716	162702 	000062'			SUB	#TYPBUF,R2	;END OF STRING-- FIND LENGTH
   1572	005722					QIOW$S	#IO.WLB,#CTYLUN,#E.FQIO,,,,<#TYPBUF,R2,#0> ;TYPE STRING ON CTY
	005722	005046 				CLR	-(SP)
	005724	010246 				MOV	R2,-(SP)
	005726	012746 	000062'			MOV	#TYPBUF,-(SP)
	005732	005046 				CLR	-(SP)
	005734	005046 				CLR	-(SP)
	005736	005046 				CLR	-(SP)
	005740	112716 	000001 			MOVB	#E.FQIO,(SP)
	005744	012746 	000001 			MOV	#CTYLUN,-(SP)
	005750	012746 	000400 			MOV	#IO.WLB,-(SP)
	005754	012746 				MOV	(PC)+,-(SP)
	005756	   003 	   011 			.BYTE	3,$$$T1
	005760	104375 				EMT	375
   1573	005762	103636 				BCS	EXIT		;GIVE UP IF FAILURE
   1574	005764					POP	<R0,R1,R2,R3> ;RESTORE REGISTERS
	005764	012600 				MOV	(SP)+,R0
	005766	012601 				MOV	(SP)+,R1
	005770	012602 				MOV	(SP)+,R2
	005772	012603 				MOV	(SP)+,R3
   1575	005774					POP	(SP)		;RESTORE PC OVER ADDRESS OF STRING
	005774	012616 				MOV	(SP)+,(SP)
   1576	005776					RETURN			;FROM TYPMSG
	005776	000207 				RTS	PC
   1577					;
   1578					; 5 -- TYPE <CR><LF> AND RETURN TO SAVE
   1579					;
   1580	006000				TYPSAV:
   1581	006000	012766 	001166'	000012 		MOV	#SAVE,12(SP)	;SET RETURN PC TO GO BACK TO SAVE
   1582					;	BR	TYPCR		;FINISH OFF WITH <CR><LF>
   1583					;
   1584					; 1 -- TYPE CRLF
   1585					;
   1586	006006				TYPCR:
   1587	006006	012701 				MOV	(PC)+,R1	;GET <CR> AND <LF>
   1588	006010	   015 	   012 			.BYTE	15,12		; . .
   1589					;	BR	TYPTXT		;TYPE WHAT'S IN R1
   1590					;
   1591					; 2 -- TYPE TEXT IN R0 (SAVED ON STACK)
   1592					;
   1593	006012				TYPTXT:
   1594	006012	110122 				MOVB	R1,(R2)+	;STORE LOW BYTE FIRST
   1595	006014	000301 				SWAB	R1		;GET HIGH BYTE
   1596	006016	001401 				BEQ	90$		;NULL-- IGNORE IT
   1597	006020	110122 				MOVB	R1,(R2)+	;STORE SECOND CHARACTER
   1598	006022				90$:
   1599	006022					RETURN			; FROM TYPTXT
	006022	000207 				RTS	PC
   1600					;
   1601					; 10 -- DEVICE NAME AND UNIT FROM PUDADR
   1602					;
   1603	006024				TYPSDV:
   1604	006024	013705 	000040'			MOV	PUDADR,R5	;GET THE PUD ADDRESS
   1605					;	BR	TYPDEV		;AND TYPE IT
   1606					;
   1607					; 3 -- DEVICE AND UNIT # FROM PUD (R5)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 24-2
TYPEOUT ROUTINES

   1608					;
   1609	006030				TYPDEV:
   1610	006030	016501 	000000G			MOV	U.DN(R5),R1	;GET THE NAME
   1611	006034					CALL	TYPTXT		;TYPE THE NAME
	006034	004737 	006012'			JSR	PC,TYPTXT
   1612	006040	012737 	000010 	000016'		MOV	#8.,RADIX	;SET TO OCTAL
   1613	006046	116501 	000000G			MOVB	U.UN(R5),R1	;GET THE UNIT
   1614	006052					CALL	TYPNUM		;TYPE THE NUMBER
	006052	004737 	006324'			JSR	PC,TYPNUM
   1615	006056	112722 	000072 			MOVB	#':,(R2)+	;MAKE IT A DEVICE
   1616	006062					RETURN			;BACK FOR MORE
	006062	000207 				RTS	PC
   1617					;
   1618					; 11 -- FATAL ERROR PREFIX
   1619					;
   1620	006064				TYPERR:
   1621	006064	012701 	001422'			MOV	#ERRMSG,R1	;GET ERROR STRING
   1622	006070	000402 				BR	TYPSTR		;PUT THE STRING
   1623					;
   1624	001422					.PSECT	TEXT
   1625	001422	   123 	   101 	   126 	ERRMSG:	.ASCIZ	\SAV -- *FATAL* -- \
	001425	   040 	   055 	   055
	001430	   040 	   052 	   106
	001433	   101 	   124 	   101
	001436	   114 	   052 	   040
	001441	   055 	   055 	   040
	001444	   000
   1626	006072					.PSECT
   1627					;
   1628					; 12 -- WARNING ERROR PREFIX
   1629					;
   1630	006072				TYPWRN:
   1631	006072	012701 	001445'			MOV	#WRNMSG,R1	;GET WARNING PREFIX
   1632					;	BR	TYPSTR		; . .
   1633					;
   1634	001445					.PSECT	TEXT
   1635	001445	   123 	   101 	   126 	WRNMSG:	.ASCIZ	\SAV -- *DIAG* -- \
	001450	   040 	   055 	   055
	001453	   040 	   052 	   104
	001456	   111 	   101 	   107
	001461	   052 	   040 	   055
	001464	   055 	   040 	   000
   1636	006076					.PSECT
   1637					;
   1638					; 4 -- STRING FROM R1
   1639					;
   1640	006076				TYPSTR:
   1641	006076	112122 				MOVB	(R1)+,(R2)+	;MOVE A CHARACTER
   1642	006100	001376 				BNE	TYPSTR		;LOOP TILL END OF COMMAND
   1643	006102	105742 				TSTB	-(R2)		;BACK OVER NULL BYTE
   1644	006104					RETURN			;BACK FOR MORE
	006104	000207 				RTS	PC
   1645					;
   1646					; 6 -- TYPE SYSTEM DATE
   1647					;
   1648	006106				TYPDAT:
   1649	006106	012737 	000012 	000016'		MOV	#10.,RADIX	;ALL UNDER DECIMAL RADIX
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 24-3
TYPEOUT ROUTINES

   1650	006114	113701 	000026'			MOVB	GTIMBF+G.TIHR,R1 ;GET THE HOUR
   1651	006120					CALL	TYPNUM		;TYPE HOURS
	006120	004737 	006324'			JSR	PC,TYPNUM
   1652	006124	112722 	000072 			MOVB	#':,(R2)+	;SEPERATE . . .
   1653	006130	113701 	000030'			MOVB	GTIMBF+G.TIMI,R1 ;MINUTES
   1654	006134	020127 	000011 			CMP	R1,#9.		;MORE THAN ONE DIGIT?
   1655	006140	003002 				BGT	10$		;YES-- WE WILL HAVE TWO
   1656	006142	112722 	000060 			MOVB	#'0,(R2)+	;NO-- MAKE IT TWO
   1657	006146				10$:
   1658	006146					CALL	TYPNUM		;MINUTES . . . .  . .  . . . . . ...
	006146	004737 	006324'			JSR	PC,TYPNUM
   1659	006152	112722 	000040 			MOVB	#' ,(R2)+	;SPACE-ED OUT DATE
   1660	006156	113701 	000024'			MOVB	GTIMBF+G.TIDA,R1 ;GET DAY OF MONTH
   1661	006162					CALL	TYPNUM		;TYPE IT IN DECIMAL
	006162	004737 	006324'			JSR	PC,TYPNUM
   1662	006166	112722 	000055 			MOVB	#'-,(R2)+	;SEPARATE
   1663	006172	113701 	000022'			MOVB	GTIMBF+G.TIMO,R1 ;GET THE MONTH
   1664	006176	006301 				ASL	R1		; *2
   1665	006200	006301 				ASL	R1		; *4 BYTES FOR EACH NAME
   1666	006202	062701 	006240'			ADD	#MONTAB-4,R1	;POINT TO ASCIZ MONTHS
   1667	006206					CALL	TYPSTR		;TYPE THE STRING
	006206	004737 	006076'			JSR	PC,TYPSTR
   1668	006212	112722 	000055 			MOVB	#'-,(R2)+	;SEPARATE
   1669	006216	013701 	000020'			MOV	GTIMBF+G.TIYR,R1 ;GET THE YEAR
   1670	006222	000440 				BR	TYPNUM		;TYPE IT AND RETURN
   1671					;
   1672					; 7 -- DECIMAL NUMBER IN R0 (SAVED ON STACK)
   1673					;
   1674	006224				TYPDEC:
   1675	006224	012737 	000012 	000016'		MOV	#10.,RADIX	;SET RADIX TO 10
   1676	006232					CALL	TYPNUM		;TYEP THE NUMBER
	006232	004737 	006324'			JSR	PC,TYPNUM
   1677	006236	112722 	000056 			MOVB	#'.,(R2)+	;STORE A . TO INDICATE DECIMAL
   1678	006242					RETURN			;BACK FOR ANOTHER CHAR OF STRING
	006242	000207 				RTS	PC
   1679					;
   1680					; TABLE OF MONTHS
   1681					;
   1682	006244				MONTAB:
   1683					.IRP ARG,<JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC>
   1684						.ASCIZ	/ARG/
   1685						.EVEN
   1686					.ENDM
	006244	   112 	   101 	   116 		.ASCIZ	/JAN/
	006247	   000
	006250	   106 	   105 	   102 		.ASCIZ	/FEB/
	006253	   000
	006254	   115 	   101 	   122 		.ASCIZ	/MAR/
	006257	   000
	006260	   101 	   120 	   122 		.ASCIZ	/APR/
	006263	   000
	006264	   115 	   101 	   131 		.ASCIZ	/MAY/
	006267	   000
	006270	   112 	   125 	   116 		.ASCIZ	/JUN/
	006273	   000
	006274	   112 	   125 	   114 		.ASCIZ	/JUL/
	006277	   000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 24-4
TYPEOUT ROUTINES

	006300	   101 	   125 	   107 		.ASCIZ	/AUG/
	006303	   000
	006304	   123 	   105 	   120 		.ASCIZ	/SEP/
	006307	   000
	006310	   117 	   103 	   124 		.ASCIZ	/OCT/
	006313	   000
	006314	   116 	   117 	   126 		.ASCIZ	/NOV/
	006317	   000
	006320	   104 	   105 	   103 		.ASCIZ	/DEC/
	006323	   000
   1687					;
   1688					; TYPNUM -- TYPE A NUMBER
   1689					;	R1 --	NUMBER TO BE TYPED
   1690					;	RADIX -- OUTPUT RADIX
   1691					;
   1692					; USES R1,R2,R3
   1693					;
   1694	006324				TYPNUM:
   1695	006324	005701 				TST	R1		;NEGATIVE #?
   1696	006326	002003 				BGE	10$		;NO-- OK
   1697	006330	005401 				NEG	R1		;YES-- MAKE IT POSITIVE
   1698	006332	112722 	000055 			MOVB	#'-,(R2)+	; AND STORE -VE IN STRING
   1699	006336				10$:
   1700	006336	005003 				CLR	R3		;CLEAR REMAINDER
   1701	006340				15$:
   1702	006340	020137 	000016'			CMP	R1,RADIX	;CAN WE DIVIDE?
   1703	006344	002404 				BLT	20$		;NO-- DIVIDE DONE
   1704	006346	163701 	000016'			SUB	RADIX,R1	;YES-- FORM REMAINDER
   1705	006352	005203 				INC	R3		; AND QUOTIENT
   1706	006354	000771 				BR	15$		;LOOP TO DIVIDE R1 BY RADIX
   1707					;
   1708	006356				20$:
   1709	006356					PUSH	R1		;SAVE REMAINDER AS A DIGIT
	006356	010146 				MOV	R1,-(SP)
   1710	006360	010301 				MOV	R3,R1		;GO BACK AND DIVIDE AGAIN
   1711	006362	001402 				BEQ	30$		; UNLESS ALL DONE
   1712	006364					CALL	10$		;EXTRACT ANOTHER DIGIT ONTO STACK
	006364	004737 	006336'			JSR	PC,10$
   1713	006370				30$:
   1714	006370					POP	R1		;DONE-- GET A DIGIT FROM STACK
	006370	012601 				MOV	(SP)+,R1
   1715	006372	062701 	000060 			ADD	#'0,R1		;MAKE IT ASCII
   1716	006376	110122 				MOVB	R1,(R2)+	;STORE IT IN OUTPUT STRING
   1717	006400					RETURN			;FOR ANOTHER DIGIT OR THE END
	006400	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 25
FILE I/O ROUTINES

   1719						.SBTTL	FILE I/O ROUTINES
   1720					;
   1721					; FINDEV -- FIND PUD ENTRY FOR DEVICE
   1722					; CALL:
   1723					;	R0 --	DEVICE NAME AS TWO ASCII BYTES
   1724					;	R1 --	UNIT NUMBER AS BINARY BYTE
   1725					; RETURN:
   1726					;	R0-R4	UNCHANGED
   1727					;	R5 --	PUD ENTRY ADDRESS (POSSIBLY REDIRECTED)
   1728					;
   1729	006402				FINDEV:
   1730	006402	012705 	000000G			MOV	#.PUDBA,R5	;POINT TO START OF PUD
   1731	006406				10$:
   1732	006406	026500 	000000G			CMP	U.DN(R5),R0	;NAME MATCH?
   1733	006412	001003 				BNE	20$		;NO-- GO ON
   1734	006414	126501 	000000G			CMPB	U.UN(R5),R1	;UNIT MATCH?
   1735	006420	001406 				BEQ	30$		;YES-- THIS IS IT
   1736	006422				20$:
   1737	006422	062705 	000000G			ADD	#U.SZ,R5	;NO-- BUMP TO NEXT PUD ENTRY
   1738	006426	020527 	000000G			CMP	R5,#.PUDEA	;END YET?
   1739	006432	103765 				BLO	10$		;NO-- LOOP TILL END
   1740	006434	000261 				SEC			;YES-- DEVICE NOT IN SYSTEM
   1741	006436				30$:
   1742	006436					RETURN			;RETURN FROM FINDEV
	006436	000207 				RTS	PC
   1743					;
   1744					; FNDACP -- FIND ACP FOR DEVICE, PUD ADDR IN R5
   1745					;	RETURNS R2= STD ADDR FOR ACP, OR ZERO IF NOT FOUND
   1746					;
   1747	006440				FNDACP:
   1748	006440	012701 	000066'			MOV	#TYPBUF+4,R1	;NO-- GET A SCRACTH AREA
   1749	006444	012741 				MOV	(PC)+,-(R1)	;SET TO
   1750	006446	003310 				 .RAD50	/ACP/		; THE ACP
   1751	006450	016541 	000000G			MOV	U.DACP(R5),-(R1) ; OF THE DEVICE
   1752	006454	000137 	000000G			JMP	..FSTD		;FIND ADR OF THE STD FOR THE ACP
   1753					;
   1754					; FILMNT -- MOUNT/DISMOUNT DEVICE QUEUE I/O REQUEST
   1755					;	R2 -- ADDRESS OF FUNCTION CONTROL BLOCK
   1756					;
   1757	006460				FILMNT:
   1758	006460	012700 	014010 			MOV	#IO.APV,R0	;PRIVILIGED ACP CONTROL (MOUNT/DISMOUNT)
   1759	006464	005001 				CLR	R1		;NO FILE-ID BLOCK
   1760	006466	005003 				CLR	R3		;NO EXTEND
   1761	006470	005004 				CLR	R4		; . .
   1762	006472	005005 				CLR	R5		;NO ACCESS CONTROL
   1763					;	BR	FILQIO		;DO REQUEST AND RETURN
   1764					;
   1765					; FILQIO -- ROUTINE TO DO QIO REQUEST FOR FILE OPERATIONS
   1766					;	R0 --	I/O FUNCTION CODE (IO.XXX)
   1767					;	R1 --	(PARAMETER #1) ADDRESS OF FILE-ID BLOCK
   1768					;	R2 --	(PARAMETER #2) ADDRESS OF ATTRIBUTE CONTROL BLOCK
   1769					;	R3 --	(PARAMETER #3) EXTEND CONTROL BITS
   1770					;	R4 --	(PARAMETER #4) LOW-ORDER EXTEND INCREMENT
   1771					;	R5 --	(PARAMETER #5) ACCESS CONTROL BITS
   1772					;
   1773					; RETURNS CC-C CLEAR, QEFLAG UNCHANGED IF SUCCESS
   1774					;	  CC-C SET,   QEFLAG NON-ZERO IF ERROR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 25-1
FILE I/O ROUTINES

   1775					;	R0 --	ERROR CODE FROM I/O STATUS OR DIRECTIVE STATUS
   1776					;
   1777	006474				FILQIO:
   1778	006474					QIOW$S	R0,#DSKLUN,#E.FQIO,,#QIOSTS,,<R1,R2,R3,R4,R5>
	006474	010546 				MOV	R5,-(SP)
	006476	010446 				MOV	R4,-(SP)
	006500	010346 				MOV	R3,-(SP)
	006502	010246 				MOV	R2,-(SP)
	006504	010146 				MOV	R1,-(SP)
	006506	005046 				CLR	-(SP)
	006510	012746 	001062'			MOV	#QIOSTS,-(SP)
	006514	005046 				CLR	-(SP)
	006516	112716 	000001 			MOVB	#E.FQIO,(SP)
	006522	012746 	000002 			MOV	#DSKLUN,-(SP)
	006526	010046 				MOV	R0,-(SP)
	006530	012746 				MOV	(PC)+,-(SP)
	006532	   003 	   013 			.BYTE	3,$$$T1
	006534	104375 				EMT	375
   1779	006536	113700 	000056'			MOVB	QEFLAG,R0	;DID A PREVIOUS Q I/O FAIL?
   1780	006542	001010 				BNE	20$		;YES-- JUST RETURN THAT
   1781	006544	113700 	000000G			MOVB	$DSW,R0		;NO-- GET DIRECTIVE STATUS
   1782	006550	103403 				BCS	10$		;ERROR-- JUST RETURN THIS
   1783	006552	113700 	001062'			MOVB	QIOSTS+0,R0	;ERROR OCCUR ON QUEUE I/O?
   1784	006556	002003 				BGE	30$		;N0-- JUST GO ON
   1785	006560				10$:
   1786	006560	110037 	000056'			MOVB	R0,QEFLAG	;YES-- SAVE THAT AS ERROR
   1787	006564				20$:
   1788	006564	000261 				SEC			; AND SAY ERROR
   1789	006566				30$:
   1790	006566					RETURN			;FROM FILQIO
	006566	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 26
DRIVER TABLES

   1792						.SBTTL	DRIVER TABLES
   1793					;
   1794					; DRIVER TABLE DRVTAB:
   1795					;	THIS TABLE CONTAINS ALL THE DEVICE-DEPENDENT DATA AND
   1796					;	DISPATCHES FOR THE DEVICES THAT "SAVE" UNDERSTANDS.
   1797					;
   1798					.MACRO DRIVER	NAME,DV,BTPRM
   1799					$$$ADR=.
   1800					DRVNAM=.-$$$ADR
   1801						 .ASCII	/NAME/		;DEVICE NAME IN ASCII
   1802						 .EVEN
   1803					DRVSET=.-$$$ADR
   1804						 .WORD	DV'SET		;DISK ADDRESS SETUP ROUTINE
   1805					.IF DF FTABS
   1806					DRVABS=.-$$$ADR
   1807						 .WORD	DV'ABS		;ABSOLUTE (/AB) SAVE SETUP ROUTINE
   1808					.ENDC ; .IF DF FTABS
   1809					DRVBOT=.-$$$ADR
   1810						 .WORD	DV'BOOT		;ADDRESS OF BOOTSTRAP CODE
   1811					DRVWRT=.-$$$ADR
   1812						 .WORD	DV'WRT		;DEVICE WRITE ROUTINE
   1813					DRVMSZ=.-$$$ADR
   1814						 .WORD	DV'BMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
   1815					DRVAD1=.-$$$ADR
   1816						 .WORD	DV'BAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
   1817					DRVAD2=.-$$$ADR
   1818						 .WORD	DV'BAD2		;ADDRESS FOR SECOND PART . .
   1819					.IF DF M$$MGE
   1820					DRVUP0=.-$$$ADR
   1821						 .WORD	DV'BUP0		;ADDRESS FOR CURRENT CONTENTS OF UPAR0
   1822					.ENDC
   1823					DRVBTP=.-$$$ADR
   1824						 .WORD	BTPRM		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1825					DRVSIZ=.-$$$ADR
   1826					.ENDM DRIVER
   1827					;
   1828	006570				DRVTAB:
   1829	006570					DRIVER	DX,RX,0
	006570	   104 	   130 			 .ASCII	/DX/		;DEVICE DX IN ASCII
	006572	006650'				 .WORD	RXSET		;DISK ADDRESS SETUP ROUTINE
	006574	006660'				 .WORD	RXBOOT		;ADDRESS OF BOOTSTRAP CODE
	006576	007130'				 .WORD	RXWRT		;DEVICE WRITE ROUTINE
	006600	007112'				 .WORD	RXBMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
	006602	006716'				 .WORD	RXBAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
	006604	006716'				 .WORD	RXBAD2		;ADDRESS FOR SECOND PART . .
	006606	000000 				 .WORD	0		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1830	006610					DRIVER	DB,RP,BP.RP4
	006610	   104 	   102 			 .ASCII	/DB/		;DEVICE DB IN ASCII
	006612	007342'				 .WORD	RPSET		;DISK ADDRESS SETUP ROUTINE
	006614	007412'				 .WORD	RPBOOT		;ADDRESS OF BOOTSTRAP CODE
	006616	007546'				 .WORD	RPWRT		;DEVICE WRITE ROUTINE
	006620	007514'				 .WORD	RPBMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
	006622	007430'				 .WORD	RPBAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
	006624	007436'				 .WORD	RPBAD2		;ADDRESS FOR SECOND PART . .
	006626	000200 				 .WORD	BP.RP4		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1831	006630					DRIVER	DT,TC,0
	006630	   104 	   124 			 .ASCII	/DT/		;DEVICE DT IN ASCII
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 26-1
DRIVER TABLES

	006632	007704'				 .WORD	TCSET		;DISK ADDRESS SETUP ROUTINE
	006634	007710'				 .WORD	TCBOOT		;ADDRESS OF BOOTSTRAP CODE
	006636	010116'				 .WORD	TCWRT		;DEVICE WRITE ROUTINE
	006640	010060'				 .WORD	TCBMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
	006642	007714'				 .WORD	TCBAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
	006644	007714'				 .WORD	TCBAD2		;ADDRESS FOR SECOND PART . .
	006646	000000 				 .WORD	0		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1832		000060 			DRVTBZ=.-DRVTAB
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 27
RX-11 FLOPPY DISK ROUTINES

   1834						.SBTTL	RX-11 FLOPPY DISK ROUTINES
   1835					;
   1836					; RXSET -- SET RX-11 ADDRESS
   1837					;
   1838	006650				RXSET:
   1839	006650	006301 				ASL	R1		;SECTOR IS BLOCK
   1840	006652	006301 				ASL	R1		; TIMES 4
   1841					.IF DF FTABS
   1842						BR	RXSETX		;RETURN FROM RXSET
   1843					;
   1844					; RXABS -- RX-11 ABSOLUTE ADDRESS SET-UP
   1845					;
   1846					RXABS:
   1847						MOV	#<58.*26.>,R1	;SET TO END OF DISK
   1848					.ENDC ; .IF DF FTABS
   1849	006654				RXSETX:
   1850	006654	010100 				MOV	R1,R0		;COPY IT AGAIN FOR BOTH PARTS
   1851	006656					RETURN			;RETURN FROM RXSET/RXABS
	006656	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 28
RX-11 BOOTSTRAP

   1853						.SBTTL	RX-11 BOOTSTRAP
   1854					;
   1855					; RX-11 BOOTSTRAP ROUTINE
   1856					;
   1857					; THIS BOOT IS READ IN FROM SECTOR ZERO (TRACK 1 SECTOR 1)
   1858					;  BY THE BM873-YF ROM.
   1859					;
   1860					; THE FOLLOWING STUFF IS RETURNED IN THE REGISTERS BY THE ROM:
   1861					;
   1862					;	R0 --	READ FUNCTION WITH UNIT # SET OR JUST UNIT #
   1863					;	R1 --	ADDRESS OF RXCS
   1864					;	R5 --	BOOTSTRAP PARAMETER (COPY OF SWITCH REGISTER)
   1865					;
   1866	006660				RXBOOT:
   1867	006660	000240 				NOP			;;;THIS IS A BOOTSTRAP
   1868	006662	106200 				ASRB	R0		;;;GET UNIT BIT INTO CC-C IF NO READ FUNC SPECIFIED
   1869	006664	001401 				BEQ	10$		;;;NO READ FUNC-- GO ON
   1870	006666	106300 				ASLB	R0		;;;READ FUNC ALREADY-- SET IT BACK WITH UNIT #
   1871	006670				10$:
   1872	006670	103002 				BCC	20$		;;;UNIT 0 OR READ FUNC ALREADY?
   1873	006672	012700 	000020 			MOV	#RXUNIT,R0	;;;NO-- SELECT UNIT 1
   1874	006676				20$:
   1875	006676	052700 	000007 			BIS	#RXREAD+RXGO,R0	;;;SET READ FUNCTION
   1876	006702	012706 	002000 			MOV	#2000,SP	;;;SETUP TEMPORARY STACK ABOVE FIRST BLOCK
   1877	006706	005004 				CLR	R4		;;;SET ADDRESS TO START READ AT LOC 0
   1878					;
   1879					; SETUP INITIAL RETURN ADDRESS TO DO A CALL ON
   1880					;  RXBBLK TO READ THE FIRST 256. WORDS
   1881					;
   1882	006710					PUSH	#RXBBLX-RXBOOT	;;;SAME AS CALL RXBBLK/BR RXBBLX
	006710	012746 	000200 			MOV	#RXBBLX-RXBOOT,-(SP)
   1883	006714	012702 				MOV	(PC)+,R2	;;;SETUP INITIAL LOGICAL SECTOR #
   1884	006716				RXBAD1:
   1885	006716	000000 			RXBAD2:	 .WORD	0		;;;SET BY SAVE TO POINT TO FILE
   1886					;	BR	RXBBLK		;;;FALL INTO READ BLOCK ROUTINE
   1887					;
   1888					; RXBBLK -- ROUTINE TO READ ONE BLOCK (256. WORDS) TO MEMORY
   1889					;
   1890					;	R0 --	READ FUNCTION WITH UNIT #
   1891					;	R1 --	ADDRESS OF RXCS
   1892					;	R2 --	CURRENT LOGICAL SECTOR # (UPDATED)
   1893					;	R3 --	SCRATCH
   1894					;	R4 --	CURRENT MEMORY ADDRESS (UPDATED)
   1895					;
   1896	006720				RXBBLK:
   1897	006720					CALL	(PC)		;;;DO 4 CALLS
	006720	004717 				JSR	PC,(PC)
   1898	006722					CALL	(PC)		;;; TO READ SECTOR ROUTINE
	006722	004717 				JSR	PC,(PC)
   1899					;
   1900					; READ A SECTOR
   1901					;
   1902	006724					PUSH	R2		;;;SAVE CURRENT SECTOR
	006724	010246 				MOV	R2,-(SP)
   1903	006726	010011 				MOV	R0,(R1)		;;;EXECUTE A READ SECTOR FUNCTION
   1904					;
   1905					; COMPUTE CURRENT PHYSICAL SECTOR # AND TRACK #
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 28-1
RX-11 BOOTSTRAP

   1906					;
   1907	006730	005003 				CLR	R3		;;;RESET TRACK #
   1908	006732					PUSH	#26.		;;;SET UP DIVISOR ON TOP OF STACK
	006732	012746 	000032 			MOV	#26.,-(SP)
   1909	006736				20$:
   1910	006736	005203 				INC	R3		;;;ONE MORE TRACK
   1911	006740	161602 				SUB	(SP),R2		;;;DIVIDE SECTOR BY 26.
   1912	006742	002375 				BGE	20$		;;; TO FIND LOGICAL SECTOR # WITHIN TRACK
   1913	006744	061602 				ADD	(SP),R2		;;;MAKE SECTOR IN RANGE 0. TO 26.
   1914	006746	005303 				DEC	R3		;;; TRACK IN RANGE 0. TO 76.
   1915	006750	022702 	000014 			CMP	#12.,R2		;;;SECTOR GREATER THAN 12.?
   1916	006754	006102 				ROL	R2		;;;IF SO, CC-C SET, INTERLEAVE FACTOR OF 2.
   1917	006756	006303 				ASL	R3		;;;GET 2*TRACK
   1918	006760	060302 				ADD	R3,R2		;;;SKEW BY 2*TRACK
   1919	006762	060302 				ADD	R3,R2		;;; 4*TRACK
   1920	006764	060302 				ADD	R3,R2		;;; 6*TRACK
   1921	006766				30$:
   1922	006766	161602 				SUB	(SP),R2		;;;GET SECTOR IN RANGE -26. TO -1. AGAIN
   1923	006770	002376 				BGE	30$		;;; . .
   1924	006772				31$:
   1925	006772	062602 				ADD	(SP)+,R2	;;;MAKE LOGICAL SECTOR IN RANGE 0. TO 25.
   1926					;
   1927	006774	006203 				ASR	R3		;;;RESTORE TRACK #
   1928	006776	122223 				CMPB	(R2)+,(R3)+	;;;PHYSICAL SECTOR 1. TO 26., TRACK 1. TO 77.
   1929					;
   1930					; SET SECTOR AND TRACK IN RX-11 TO START READ
   1931					;
   1932	007000				40$:
   1933	007000	105711 				TSTB	(R1)		;;;READY FOR SECTOR #?
   1934	007002	100376 				BPL	40$		;;;NO-- WAIT UNTIL IT IS
   1935	007004	110261 	000002 			MOVB	R2,RXDB-RXCS(R1) ;;;YES-- SET SECTOR #
   1936	007010				50$:
   1937	007010	105711 				TSTB	(R1)		;;;READY FOR TRACK?
   1938	007012	100376 				BPL	50$		;;;NO-- WAIT FOR READY
   1939	007014	110361 	000002 			MOVB	R3,RXDB-RXCS(R1) ;;;YES-- SET TRACK #
   1940					;
   1941					; WAIT FOR FUNCTION TO COMPLETE
   1942					;
   1943	007020				60$:
   1944	007020	032711 	100040 			BIT	#RXERR!RXDONE,(R1) ;;;WAIT FOR EROR OR DONE
   1945	007024	001775 				BEQ	60$		;;; . .
   1946	007026	100714 				BMI	RXBOOT		;;;ERROR-- RETRY WHOLE SHIBANG
   1947					;
   1948					; EMPTY SECTOR BUFFER TO MEMORY
   1949					;
   1950	007030	012711 	000003 			MOV	#RXEMPT!RXGO,(R1) ;;;DO AN EMPTY SECTOR BUFFER FUNCTION
   1951	007034				70$:
   1952	007034	132711 	000240 			BITB	#RXTREQ!RXDONE,(R1) ;;;READY WITH A BYTE?
   1953	007040	001775 				BEQ	70$		;;;NO-- WAIT UNTIL IT IS
   1954	007042	100003 				BPL	80$		;;;DONE-- OFF TO NEXT SECTOR
   1955	007044	116124 	000002 			MOVB	RXDB-RXCS(R1),(R4)+ ;;;STORE A BYTE TO MEMORY
   1956	007050	000771 				BR	70$		;;;LOOP TO EMPTY WHOLE BUFFER
   1957					;
   1958					; BUMP SECTOR TO NEXT SECTOR AND RETURN
   1959					;
   1960	007052				80$:
   1961	007052					POP	R2		;;;RESTORE LOGICAL SECTOR #
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 28-2
RX-11 BOOTSTRAP

	007052	012602 				MOV	(SP)+,R2
   1962	007054	005202 				INC	R2		;;;SET TO NEXT SECTOR
   1963	007056					RETURN			;;;RETURN TO READ ANOTHER SECTOR OR DONE
	007056	000207 				RTS	PC
   1964					;
   1965					.IF G <<.-RXBOOT>-128.>
   1966						.ERROR	<.-RXBOOT> ; RX BOOT TOO BIG FOR FIRST SECTOR
   1967					.ENDC
   1968					;
   1969					; HERE AFTER FIRST BLOCK READ. SETUP KT-11 (IF ANY)
   1970					;
   1971	007060				RXBBLX:
   1972	007060	012737 	000340 	177776 		MOV	#PR7,@#PS	;;;INSURE KERNAL MODE
   1973					.IF DF M$$MGE
   1974						MOV	#77406,R3	;;;SET TO MAP LARST PAGE
   1975						MOV	R3,KPDR0	;;;KERNAL PAGE 0
   1976						MOV	R3,KPDR1	;;; AND 1 (FOR READING)
   1977						MOV	R3,KPDR7	;;; AND EXTERNAL PAGE
   1978						MOV	R3,UPDR0	;;;USER PAGE 0
   1979						MOV	R3,UPDR7	;;; AND USER EXTERNAL PAGE FOR SAVE
   1980						CLR	KPAR0		;;;MAP KP 0 TO ABSOLUTE ZERO
   1981						MOV	(PC)+@(PC)+	;;;USER PAGE TO WHEREEVER SAVE WAS
   1982					RXBUP0:	 .WORD	0,UPAR0		;;;SET BY SAVE
   1983						MOV	#7600,R3	;;;SET TO MAP EXTERNAL PAGE
   1984						MOV	R3,KPAR7	;;; FOR KERNAL
   1985						MOV	R3,UPAR7	;;; AND USER
   1986						MOV	#1,SSR0		;;;ENABLE SEGMENTAION
   1987					.IFTF
   1988					;
   1989					; SETUP STACK AT TOP OF BOOT BLOCK, SAVE BOOT  PARAMETER IN LOC 776
   1990					;
   1991	007066	012706 	001000 			MOV	#1000,SP	;;;SETUP KERNAL STACK
   1992	007072					PUSH	R5		;;;SAVE BOOT PARAMETER AT BOTTOM OF STACK
	007072	010546 				MOV	R5,-(SP)
   1993					;
   1994	007074	005005 				CLR	R5		;;;CLEAR BLOCK POINTER
   1995	007076	000402 				BR	RXBNX1		;;;FINISH THIS BLOCK AND GET NEXT ONE
   1996					;
   1997					; READ NEXT BLOCK (256. WORDS, 4 SECTORS)
   1998					;
   1999	007100				RXBNXT:
   2000					.IFT
   2001						MOV	R5,KPAR1	;;;SET BLOCK TO MAP TO 20000
   2002						MOV	#20000,R4	;;;START AT BEGINNING OF THIS BLOCK
   2003					.ENDC
   2004	007100					CALL	RXBBLK-RXBOOT	;;;READ A BLOCK
	007100	004737 	000040 			JSR	PC,RXBBLK-RXBOOT
   2005	007104				RXBNX1:
   2006	007104	062705 	000010 			ADD	#256.*2/100,R5	;;;BUMP POINTER BY # 32. WORD BLOCKS IN 4 SECTORS
   2007	007110	022705 				CMP	(PC)+,R5	;;;REACHED MEMORY SIZE YET?
   2008	007112	000000 			RXBMSZ:	 .WORD	0		;;;FILLED BY SAVE TO SIZE OF MEMORY IN 32. WORD BLOCKS
   2009	007114	101371 				BHI	RXBNXT		;;;NO-- READ NEXT BLOCK
   2010					;
   2011					; BOOTSTRAP COMPLETE-- RETURN TO SAVE IN USER MODE
   2012					;
   2013					.IF DF M$$MGE
   2014						PUSH	#PS.USR!PS.REG!PR7 ;;;SET TO USER MODE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 28-3
RX-11 BOOTSTRAP

   2015					.IFF
   2016	007116					PUSH	#PS.REG!PR7	;;;SET TO REGISTER SET 1
	007116	012746 	004340 			MOV	#PS.REG!PR7,-(SP)
   2017					.ENDC
   2018	007122					PUSH	#RESTORE	;;;USER PC, RESTORE SYSTEM
	007122	012746 	002760'			MOV	#RESTORE,-(SP)
   2019	007126	000002 				RTI			;;;RETURN TO SAVE
   2020					.IF G <<.-RXBOOT>-<128.*4>>
   2021						.ERROR	<.-RXBOOT> ; RX BOOT TOO BIG FOR FIRST BLOCK
   2022					.ENDC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 29
RX-11 WRITE ROUTINE

   2024						.SBTTL	RX-11 WRITE ROUTINE
   2025					;
   2026					; RXWRT -- WRITE MEMORY TO THE RX-11
   2027					;
   2028					; INPUTS:
   2029					;	DSKADR+0 --	LOGICAL SECTOR TO START WRITE (0.-76.*26.)
   2030					;	DEVUNT --	(BYTE) UNIT # TO WRITE ON
   2031					;	MEMSIZ --	NUMBER OF 32. WORD BLOCKS TO WRITE, STARTING AT
   2032					;			ABSOLUTE ZERO
   2033					;
   2034	007130				RXWRT:
   2035					;
   2036					; SETUP REGISTERS:
   2037					;	R0 --	WRITE FUNCTION WITH PROPER UNIT #
   2038					;	R1 --	ADDRESS OF RXCS
   2039					;	R2 --	LOGICAL SECTOR # TO START WRITE
   2040					;
   2041	007130	113700 	000044'			MOVB	DEVUNT,R0	;;;GET SPECIFIED UNIT #
   2042	007134	001402 				BEQ	10$		;;;ZERO-- OK
   2043	007136	012700 	000020 			MOV	#RXUNIT,R0	;;;NOT ZERO-- ASSUME UNIT 1
   2044	007142				10$:
   2045	007142	052700 	000005 			BIS	#RXWRIT!RXGO,R0	;;;MAKE IT A WRITE FUNCTION
   2046	007146	012701 	177170 			MOV	#RXCS,R1	;;;ADDRESS CONTROL/STATUS REGISTER
   2047	007152	013702 	000004'			MOV	DSKADR+0,R2	;;;GET START SECTOR #
   2048					;
   2049					; SET UP MAP TO ABSOLUTE ZERO
   2050					;
   2051					.IF DF M$$MGE
   2052						MOV	#77406,UPDR1	;;;MAP AS MUCH AS POSSIBLE
   2053					.IFF
   2054	007156	005004 				CLR	R4		;;;CLEAR POINTER TO MEMORY
   2055					.IFTF
   2056	007160	005005 				CLR	R5		;;;CLEAR COUNTER OF 32. WORD BLOCKS WRITTEN
   2057					;
   2058					; WRITE NEXT BLOCK (256. WORDS, 4 SECTORS) TO FLOPPY
   2059					;
   2060	007162				RXWNXT:
   2061					.IFT
   2062						MOV	R5,UPAR1	;;;SET MAP TO CURRENT 32. WORD BLOCK
   2063						MOV	#20000,R4	;;;MAP IT TO 20000
   2064					.ENDC
   2065	007162					CALL	RXWBLK		;;;WRITE A BLOCK (256. WORDS)
	007162	004737 	007202'			JSR	PC,RXWBLK
   2066	007166	062705 	000010 			ADD	#256.*2/100,R5	;;;BUMP TO NEXT 32. WORD BLOCK
   2067	007172	023705 	000014'			CMP	MEMSIZ,R5	;;;FINISHED WITH ALL OF CORE?
   2068	007176	101371 				BHI	RXWNXT		;;;NOT YET-- WRITE NEXT BLOCK
   2069					;
   2070	007200					RETURN			;;;YES-- RETURN FROM RXWRT
	007200	000207 				RTS	PC
   2071					;
   2072					; RXWBLK -- ROUTINE TO WRITE ONE BLOCK (256. WORDS) TO MEMORY
   2073					;
   2074					;	R0 --	WRITE FUNCTION WITH UNIT #
   2075					;	R1 --	ADDRESS OF RXCS
   2076					;	R2 --	CURRENT LOGICAL SECTOR # (UPDATED)
   2077					;	R3 --	SCRATCH
   2078					;	R4 --	CURRENT MEMORY ADDRESS (UPDATED)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 29-1
RX-11 WRITE ROUTINE

   2079					;
   2080	007202				RXWBLK:
   2081	007202					CALL	(PC)		;;;DO 4 CALLS
	007202	004717 				JSR	PC,(PC)
   2082	007204					CALL	(PC)		;;; TO WRITE SECTOR ROUTINE
	007204	004717 				JSR	PC,(PC)
   2083					;
   2084					; FILL SECTOR BUFFER BEFORE WRITE
   2085					;
   2086	007206	012711 	000001 			MOV	#RXFILL!RXGO,(R1) ;;;DO A FILL FUNCTION
   2087	007212				10$:
   2088	007212	132711 	000240 			BITB	#RXTREQ!RXDONE,(R1) ;;;READY FOR A BYTE YET?
   2089	007216	001775 				BEQ	10$		;;;NO-- WAIT UNTIL IT IS
   2090	007220	100003 				BPL	15$		;;;DONE-- GO WRITE
   2091	007222	112461 	000002 			MOVB	(R4)+,RXDB-RXCS(R1) ;;;STORE A BYTE FROM MEMORY IN SECTOR BUFFER
   2092	007226	000771 				BR	10$		;;;LOOP TO FILL BUFFER
   2093					;
   2094					; WRITE A SECTOR
   2095					;
   2096	007230				15$:
   2097	007230					PUSH	R2		;;;SAVE CURRENT SECTOR
	007230	010246 				MOV	R2,-(SP)
   2098	007232	010011 				MOV	R0,(R1)		;;;EXECUTE A WRITE SECTOR FUNCTION
   2099					;
   2100					; COMPUTE CURRENT PHYSICAL SECTOR # AND TRACK #
   2101					;
   2102	007234	005003 				CLR	R3		;;;RESET TRACK #
   2103	007236					PUSH	#26.		;;;SET DIVISOR ON TOP OF STACK
	007236	012746 	000032 			MOV	#26.,-(SP)
   2104	007242				20$:
   2105	007242	005203 				INC	R3		;;;ONE MORE TRACK
   2106	007244	161602 				SUB	(SP),R2		;;;DIVIDE SECTOR BY 26.
   2107	007246	002375 				BGE	20$		;;; TO FIND LOGICAL SECTOR # WITHIN TRACK
   2108	007250	061602 				ADD	(SP),R2		;;;MAKE SECTOR IN RANGE 0. TO 25.
   2109	007252	005303 				DEC	R3		;;; TRACK IN RANGE 0. TO 76.
   2110	007254	022702 	000014 			CMP	#12.,R2		;;;SECTOR GREATER THAN 12.?
   2111	007260	006102 				ROL	R2		;;;IF SO, CC-C SET, INTERLEAVE FACTOR OF 2.
   2112	007262	006303 				ASL	R3		;;;GET 2*TRACK
   2113	007264	060302 				ADD	R3,R2		;;;SKEW BY 2*TRACK
   2114	007266	060302 				ADD	R3,R2		;;; 4*TRACK
   2115	007270	060302 				ADD	R3,R2		;;; 6*TRACK
   2116	007272				30$:
   2117	007272	161602 				SUB	(SP),R2		;;;GET SECTOR IN RANGE -26. TO -1. AGAIN
   2118	007274	002376 				BGE	30$		;;; . .
   2119	007276				31$:
   2120	007276	062602 				ADD	(SP)+,R2	;;;MAKE LOGICAL SECTOR IN RANGE 0. TO 25.
   2121					;
   2122	007300	006203 				ASR	R3		;;;RESTORE TRACK #
   2123	007302	122223 				CMPB	(R2)+,(R3)+	;;;PHYSICAL SECTOR 1. TO 26., TRACK 1. TO 77.
   2124					;
   2125					; SET SECTOR AND TRACK IN RX-11 TO START WRITE
   2126					;
   2127	007304				40$:
   2128	007304	105711 				TSTB	(R1)		;;;READY FOR SECTOR #?
   2129	007306	100376 				BPL	40$		;;;NO-- WAIT UNTIL IT IS
   2130	007310	110261 	000002 			MOVB	R2,RXDB-RXCS(R1) ;;;YES-- SET SECTOR #
   2131	007314				50$:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 29-2
RX-11 WRITE ROUTINE

   2132	007314	105711 				TSTB	(R1)		;;;READY FOR TRACK?
   2133	007316	100376 				BPL	50$		;;;NO-- WAIT FOR READY
   2134	007320	110361 	000002 			MOVB	R3,RXDB-RXCS(R1) ;;;YES-- SET TRACK #
   2135					;
   2136					; WAIT FOR FUNCTION TO COMPLETE
   2137					;
   2138	007324				60$:
   2139	007324	032711 	100040 			BIT	#RXERR!RXDONE,(R1) ;;;WAIT FOR EROR OR DONE
   2140	007330	001775 				BEQ	60$		;;; . .
   2141	007332	100560 				BMI	WRTERR		;;;GIVE UP IF ERROR AND COMPLAIN (AFTER RESTORE)
   2142					;
   2143					; BUMP SECTOR TO NEXT SECTOR AND RETURN
   2144					;
   2145	007334					POP	R2		;;;RESTORE LOGICAL SECTOR #
	007334	012602 				MOV	(SP)+,R2
   2146	007336	005202 				INC	R2		;;;SET TO NEXT SECTOR
   2147	007340					RETURN			;;;RETURN TO WRITE ANOTHER SECTOR OR DONE
	007340	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 30
RP04/RP06 DISK ROUTINES

   2149						.SBTTL	RP04/RP06 DISK ROUTINES
   2150					;
   2151					; RPSET -- SET RP DISK ADDRESS
   2152					;
   2153	007342				RPSET:
   2154	007342	012702 	000020 			MOV	#16.,R2		;SET LOOP COUNT
   2155	007346				20$:
   2156	007346	006301 				ASL	R1		;MULTIPY ADDRESS
   2157	007350	006100 				ROL	R0		; BY TWO AND MOVE TRACK & SECTOR TO R0
   2158	007352	020027 	000574 			CMP	R0,#19.*20.	;LESS THAN A CYLINDER OF BLOCKS LEFT?
   2159	007356	103403 				BLO	30$		;YES-- WE ARE DOWN TO LAST CYLINDER
   2160	007360	162700 	000574 			SUB	#19.*20.,R0	;NO-- TRIM OFF ANOTHER CYLINDER
   2161	007364	005201 				INC	R1		;COUNT ANOTHER CYLINDER (OR 2**N CYLINDERS)
   2162	007366				30$:
   2163	007366	077211 				SOB	R2,20$		;LOOP FOR ALL SIXTEEN BITS OF ADDRESS
   2164					;
   2165	007370					PUSH	R1		;SAVE CYLINDER #
	007370	010146 				MOV	R1,-(SP)
   2166	007372	012701 	000024 			MOV	#20.,R1		;SET TO DIVIDE TRACK/SECTOR IN R0 BY
   2167	007376					CALL	$DIV		; NUMBER OF SECTORS PER TRACK
	007376	004737 	000000G			JSR	PC,$DIV
   2168	007402	000300 				SWAB	R0		;MOVE TRACK TO HIGH BYTE
   2169	007404	050001 				BIS	R0,R1		; SECTOR TO LOW BYTE (REMAINDER)
   2170	007406					POP	R0		;RESTORE CYLINDER #
	007406	012600 				MOV	(SP)+,R0
   2171	007410					RETURN			;RETURN FROM RPSET
	007410	000207 				RTS	PC
   2172					;
   2173					; RPABS -- SET RP DISK ABSOLUTE ADDRESS
   2174					;
   2175					.IF DF FTABS
   2176					RPABS:
   2177						MOV	#409.,R0	;SET MAINTAINENCE CYLINDER **** WON'T WORK FOR RP06 ****
   2178						MOV	#<13.*BIT8>!<8.*BIT0>,R1 ; AT TRACK 13, SECTOR 8 (VERY END)
   2179						RETURN			;RETURN FROM RPABS
   2180					.ENDC ; .IF DF FTABS
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 31
RP04/RP06 BOOTSTRAP

   2182						.SBTTL	RP04/RP06 BOOTSTRAP
   2183					;
   2184					;
   2185					; RP DISK BOOTSTRAP
   2186					;
   2187					; THIS BOOT IS READ IN FROM BLOCK 0 OF THE RP BY THE BM873-YF ROM.
   2188					;
   2189					; THE ROM RETURNS THE FOLLOWING VALUES IN THE REGISTERS:
   2190					;	R1 --	ADDRESS OF RPCS1
   2191					;	R5 --	BOOTSTRAP PARAMETER (NORMALLY SWITCH REGISTER)
   2192					;
   2193	007412				RPBOOT:
   2194	007412	000240 				NOP			;;;THIS IS A BOOTSTRAP
   2195					;
   2196					; RESET THE RP AND SET UP INITIAL TRACK AND SECTOR ADDRESS
   2197					;
   2198	007414	012711 	000021 			MOV	#RPPRST!RPGO,(R1) ;;;DO READ-IN PRESET
   2199	007420	005004 				CLR	R4		;;;CLEAR COUNTER OF 32. WORD BLOCKS READ
   2200	007422	005061 	000004 			CLR	RPBA-RPCS1(R1)	;;;SET BUS ADDR TO ZERO
   2201		007430'			RPBAD1=	.+2
   2202	007426	012761 	000000 	000034 		MOV	#0,RPDC-RPCS1(R1) ;;;SETUP CYLINDER #
   2203		007436'			RPBAD2=	.+2
   2204	007434	012761 	000000 	000006 		MOV	#0,RPDA-RPCS1(R1) ;;; AND TRACK AND SECTOR
   2205	007442	052761 	004000 	000032 		BIS	#RPECCI,RPOF-RPCS1(R1) ;;;SET ECC INHIBIT
   2206	007450	112711 	000070 			MOVB	#RPREAD,(R1)	;;;SET READ FUNCTION, NO GO
   2207					;
   2208					; READ 1K FROM THE RP TO MEMORY
   2209					;
   2210	007454				RPBNXT:
   2211	007454	012761 	176000 	000002 		MOV	#<-1024.>,RPWC-RPCS1(R1) ;;;SET 1K WORD COUNT
   2212	007462	105211 				INCB	(R1)		;;;DO NEXT READ
   2213	007464				10$:
   2214	007464	105711 				TSTB	(R1)		;;;TRANSFER COMPLETE?
   2215	007466	100376 				BPL	10$		;;;NO-- WAIT FOR DONE
   2216					;
   2217					; CHECK TO MAKE SURE NO ERRORS
   2218					;
   2219	007470	032711 	060000 			BIT	#RPTRE!RPMCPE,(R1) ;;;CONTROLLER ERROR?
   2220	007474	001346 				BNE	RPBOOT		;;;YES-- RETRY
   2221	007476	032761 	140000 	000012 		BIT	#RPATA!RPERR,RPDS-RPCS1(R1) ;;;ATTENTION OR DRIVE ERROR?
   2222	007504	001342 				BNE	RPBOOT		;;;YES-- RETRY
   2223					;
   2224					; SEE IF DONE WITH ALL OF MEMORY
   2225					;
   2226	007506	062704 	000040 			ADD	#1024.*2/100,R4	;;;BUMP # 32. WORD BLOCKS WE'VE READ
   2227	007512	022704 				CMP	(PC)+,R4	;;;FINISHED WITH ALL OF MEMORY YET?
   2228	007514	000000 			RPBMSZ:	 .WORD	0		;;;SET UP BY SAVE TO # 32. WORD BLOCKS OF MEMORY
   2229	007516	101356 				BHI	RPBNXT		;;;NO-- READ SOME MORE
   2230					;
   2231					; BOOTSTRAP COMPLETE-- SETUP KT-11 REGISTERS, IF ANY
   2232					;
   2233	007520	012737 	000340 	177776 		MOV	#PR7,@#PS	;;;INSURE KERNAL MODE
   2234					.IF DF M$$MGE
   2235						MOV	#77406,R2	;;;SET TO MAP MAX PAGE SIZE
   2236						MOV	R2,KPDR0	;;; FOR KERNAL PAGE 0
   2237						MOV	R2,KPDR7	;;; AND KP 7
   2238						MOV	R2,UPDR0	;;; AND USER PAGE 7
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 31-1
RP04/RP06 BOOTSTRAP

   2239						MOV	R2,UPDR7	;;; EXTERNAL PAGE FOR USER, TOO
   2240						CLR	KPAR0		;;;MAP KERNAL PAGE 0 TO ABSOLUTE 0
   2241						MOV	(PC)+,@(PC)+	;;;SET UP USER PAGE 0
   2242					RPBUP0:	 .WORD	0,UPAR0		;;;SPACE FOR ADDR OF PAGE
   2243						MOV	#7600,R2	;;;POINT TO EXTERNAL PAGE
   2244						MOV	R2,KPAR7	;;; FOR EXEC
   2245						MOV	R2,UPAR7	;;; AND USER
   2246						MOV	#1,SSR0		;;;ENABLE SEGMENTATION
   2247					.ENDC
   2248					;
   2249					; SETUP TEMPORARY KERNAL STACK AT TOP OF BOOT BLOCK, AND SAVE
   2250					;  BOOTSTRAP PARAMETER AT LOCATION 776
   2251					;
   2252	007526	012706 	001000 			MOV	#1000,SP	;;;START STACK AT TOP OF OUR BLOCK
   2253	007532					PUSH	R5		;;;SAVE BOOT PARAMETER AT BOTTOM OF STACK
	007532	010546 				MOV	R5,-(SP)
   2254					;
   2255					; RETURN TO SAVE TASK IN USER MODE AT SYSTEM RESTORE ENTRY POINT
   2256					;
   2257					.IF DF M$$MGE
   2258						PUSH	#PS.USR!PS.REG!PR7 ;;;USER MODE, PRIORITY 7
   2259					.IFF
   2260	007534					PUSH	#PS.REG!PR7	;;;SET REGISTER SET 1, PRI 7
	007534	012746 	004340 			MOV	#PS.REG!PR7,-(SP)
   2261					.ENDC
   2262	007540					PUSH	#RESTORE	;;; AND RETURN PC IN USER SPACE
	007540	012746 	002760'			MOV	#RESTORE,-(SP)
   2263	007544	000002 				RTI			;;;BACK TO SAVE.
   2264					.IF G <<.-RPBOOT>-<256.*2>>
   2265						.ERROR	<.-RPBOOT> ;  RP BOOT TOO BIG FOR FIRST BLOCK
   2266					.ENDC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 32
RP04/RP06 WRITE ROUTINE

   2268						.SBTTL	RP04/RP06 WRITE ROUTINE
   2269					;
   2270					; RPWRT -- WRITE MEMORY TO THE RP DISK
   2271					;
   2272					; INPUTS:
   2273					;	DSKADR+0 --	CYLINDER ADDRESS TO START TRANSFER
   2274					;	DSKADR+2 --	(BYTE) SECTOR TO START
   2275					;	DSKADR+3 --	(BYTE) TRACK TO START
   2276					;	DEVUNT --	(BYTE) UNIT # TO WRITE ON
   2277					;	MEMSIZ --	# OF 32. WORD BLOCKS OF MEMORY TO WRITE
   2278					;
   2279	007546				RPWRT:
   2280	007546	012701 	176700 			MOV	#RPCS1,R1	;;;GET ADDRESS OF RPCS1
   2281	007552	005004 				CLR	R4		;;;CLEAR POINTER TO # 32. WORD BLOCKS WRITTEN
   2282	007554	113761 	000044'	000010 		MOVB	DEVUNT,RPCS2+0-RPCS1(R1);;;SET UNIT #
   2283					;
   2284					; INITIALIZE DRIVE
   2285					;
   2286	007562	032711 	004000 			BIT	#RPDVA,(R1)	;;;IS DRIVE AVAILABLE?
   2287	007566	001442 				BEQ	WRTERR		;;;NO-- GIVE ERROR
   2288	007570	012711 	000021 			MOV	#RPPRST!RPGO,(R1) ;;;DO A READ-IN PRESET
   2289	007574	005061 	000004 			CLR	RPBA-RPCS1(R1)	;;;CLEAR BUS ADDRESS TO START WRITE AT ZERO
   2290	007600	013761 	000004'	000034 		MOV	DSKADR+0,RPDC-RPCS1(R1) ;;;SETUP DESIRED CYLINDER
   2291	007606	013761 	000006'	000006 		MOV	DSKADR+2,RPDA-RPCS1(R1) ;;; AND TRACK AND SECTOR
   2292	007614	052761 	004000 	000032 		BIS	#RPECCI,RPOF-RPCS1(R1) ;;;SET ECC INHIBIT
   2293	007622	112711 	000060 			MOVB	#RPWRIT,(R1)	;;;SET WRITE FUNCTION, NO GO
   2294					;
   2295					; WRITE ONE BLOCK OF MEMORY TO THE RP04
   2296					;
   2297	007626				RPWNXT:
   2298	007626	012761 	177400 	000002 		MOV	#<-256.>,RPWC-RPCS1(R1) ;;;SET -VE WORD COUNT
   2299	007634	105211 				INCB	(R1)		;;;WRITE NEXT BLOCK
   2300	007636				10$:
   2301	007636	105711 				TSTB	(R1)		;;;DONE SET?
   2302	007640	100376 				BPL	10$		;;;NO-- WAIT FOR TRANSFER TO COMPLETE
   2303					;
   2304					; CHECK FOR ERRORS DURING TRANSFER
   2305					;
   2306	007642	032711 	060000 			BIT	#RPTRE!RPMCPE,(R1) ;;;CONTROLLER ERROR?
   2307	007646	001012 				BNE	WRTERR		;;;YES-- GIVE UP
   2308	007650	032761 	140000 	000012 		BIT	#RPATA!RPERR,RPDS-RPCS1(R1) ;;;DRIVE ERROR?
   2309	007656	001006 				BNE	WRTERR		;;;YES-- GIVE UP ALSO
   2310					;
   2311					; SEE IF DONE WITH ALL OF MEMORY
   2312					;
   2313	007660	062704 	000010 			ADD	#256.*2/100,R4	;;;ADD A BLOCK'S WORTH OF 32. WORD BLOCKS
   2314	007664	023704 	000014'			CMP	MEMSIZ,R4	;;;DONE WITH ALL OF MEMORY?
   2315	007670	101356 				BHI	RPWNXT		;;;NO-- WRITE NEXT BLOCK
   2316	007672					RETURN			;;;YES-- RETURN FROM RPWRT
	007672	000207 				RTS	PC
   2317					;
   2318					;
   2319					; HERE ON WRITE ERRORS ON EITHER THE RP04 OR THE RX-11
   2320					; JUST RETURN TO RESTORE WITH WEFLAG= 1 TO INDICATE ERROR
   2321					;
   2322	007674				WRTERR:
   2323	007674	105237 	000060'			INCB	WEFLAG		;;;NOTE ERROR IN FLAG
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 32-1
RP04/RP06 WRITE ROUTINE

   2324	007700	000137 	002760'			JMP	RESTORE		;;;RESTORE SYSTEM, THEN GIVE ERROR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 33
TC-11 DECTAPE ROUTINES

   2326						.SBTTL	TC-11 DECTAPE ROUTINES
   2327					;
   2328					; TCABS -- SET TC-11 ABSOLUTE BLOCK #
   2329					;
   2330					.IF DF FTABS
   2331					TCABS:
   2332						MOV	#^D<578-<28*4>-1>,R1 ;SET TO END OF TAPE
   2333					;	BR	TCSET		;ONWARD!
   2334					.ENDC ; .IF DF FTABS
   2335					;
   2336					; TCSET -- SET TC-11 BLOCK #
   2337					;
   2338	007704				TCSET:
   2339	007704	010100 				MOV	R1,R0		;JUST COPY LOW BLOCK #
   2340	007706					RETURN			; . .
	007706	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 34
TC-11 BOOTSTRAP

   2342						.SBTTL	TC-11 BOOTSTRAP
   2343					;
   2344					; HERE TO BOOT FROM TC-11
   2345					;
   2346					; REGISTERS LEFT BY BM-873 ROM:
   2347					;	R1 --	ADDRESS OF TCCM
   2348					;	R5 --	BOOT PARAMETER WORD
   2349					;
   2350	007710				TCBOOT:
   2351	007710	000240 				NOP			;;;THIS IS A BOOTSTRAP
   2352					;
   2353					; SELECT UNIT AND SET UP REGISTERS:
   2354					;	R1 --	ADDRESS OF TCCM
   2355					;	R2 --	BLOCK #
   2356					;	R4 --	COUNT OF 32. WORD BLOCKS READ
   2357					;
   2358		007714'			TCBAD1=.+2
   2359		007714'			TCBAD2=.+2
   2360	007712	012702 	000000 			MOV	#0,R2		;;;GET BLOCK #
   2361	007716	010203 				MOV	R2,R3		;;;COPY THE BLOCK #
   2362	007720	162703 	000003 			SUB	#3,R3		;;;BACK TO THREE BLOCK BEFORE IT
   2363	007724	005004 				CLR	R4		;;;RESET # BLOCKS READ
   2364	007726	005061 	000004 			CLR	TCBA-TCCM(R1)	;;;RESET BUS ADDRESS REGISTER
   2365					;
   2366					; SEARCH FOR CURRENT BLOCK ON TAPE
   2367					;
   2368	007732	112711 	000002 			MOVB	#TCRNUM,(R1)	;;;SET READ BLOCK # FUNCTION
   2369	007736				5$:
   2370	007736	052711 	004000 			BIS	#TCREV,(R1)	;;;SET REVERSE MODE
   2371	007742	105211 				INCB	(R1)		;;;START READ BLOCK FUNCTION
   2372	007744				10$:
   2373	007744	105711 				TSTB	(R1)		;;;READY?
   2374	007746	100376 				BPL	10$		;;;NO-- WAIT
   2375	007750	005711 				TST	(R1)		;;;ERROR?
   2376	007752	100007 				BPL	40$		;;;NO-- CHECK OUT BLOCK #
   2377	007754				20$:
   2378	007754	005761 	177776 			TST	TCST-TCCM(R1)	;;;ERROR-- IS IT END-ZONE?
   2379	007760	100353 				BPL	TCBOOT		;;;NO-- RETRY
   2380	007762	032711 	004000 			BIT	#TCREV,(R1)	;;;GOING REVERSE?
   2381	007766	001763 				BEQ	5$		;;;NO-- GO THAT WAY
   2382	007770	000403 				BR	50$		;;;YES-- GO FORWARD
   2383					;
   2384	007772				40$:
   2385	007772	026103 	000006 			CMP	TCDT-TCCM(R1),R3 ;;;PAST BLOCK YET (CURRENT BLOCK LOW)?
   2386	007776	003357 				BGT	5$		;;;NO-- KEEP SEARCHING IN REVERSE
   2387	010000				50$:
   2388	010000	042711 	004000 			BIC	#TCREV,(R1)	;;;GO FORWARD
   2389	010004	105211 				INCB	(R1)		;;;START READ BLOCK # FUNCTION
   2390	010006				60$:
   2391	010006	105711 				TSTB	(R1)		;;;READY?
   2392	010010	100376 				BPL	60$		;;;NO-- WAIT
   2393	010012	005711 				TST	(R1)		;;;ERROR?
   2394	010014	100757 				BMI	20$		;;;YES-- CHECK IT OUT
   2395	010016	026102 	000006 			CMP	TCDT-TCCM(R1),R2 ;;;AT PROPER BLOCK?
   2396	010022	002766 				BLT	50$		;;;NOT YET-- KEEP GOING
   2397	010024	003344 				BGT	5$		;;;OOPS, PAST IT-- GO BACK AGAIN
   2398					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 34-1
TC-11 BOOTSTRAP

   2399					; BLOCK FOUND-- START TRANSFER
   2400					;
   2401	010026	112711 	000004 			MOVB	#TCREAD,(R1)	;;;SET READ FUNCTION, NO GO
   2402					;
   2403					; START NEXT 1.K TRANSFER
   2404					;
   2405	010032				TCBNXT:
   2406	010032	012761 	176000 	000002 		MOV	#<-1024.>,TCWC-TCCM(R1) ;;;SET WORD COUNT
   2407	010040	105211 				INCB	(R1)		;;;SET GO
   2408	010042				10$:
   2409	010042	105711 				TSTB	(R1)		;;;READY?
   2410	010044	100376 				BPL	10$		;;;NO-- WAIT FOR TRANSFER TO COMPLETE
   2411	010046	005711 				TST	(R1)		;;;ERRORS?
   2412	010050	100717 				BMI	TCBOOT		;;;YES-- TRY IT ALL AGAIN
   2413					;
   2414					; SEE IF ALL DONE
   2415					;
   2416	010052	062704 	000040 			ADD	#1024.*2/100,R4	;;;BUMP COUNT OF 32. WORD BLOCKS READ
   2417	010056	022704 				CMP	(PC)+,R4	;;;DONE YET?
   2418	010060	000000 			TCBMSZ:	 .WORD	0		;;;SPACE FOR SIZE
   2419	010062	101363 				BHI	TCBNXT		;;;NO-- GET NEXT BLOCK
   2420	010064	112711 	000011 			MOVB	#TCSTOP+TCGO,(R1) ;;;STOP TAPE
   2421					;
   2422					; BOOTSTRAP COMPLETE-- SETUP KT-11 REGISTERS, IF ANY
   2423					;
   2424	010070	012737 	000340 	177776 		MOV	#PR7,@#PS	;;;INSURE KERNAL MODE
   2425					.IF DF M$$MGE
   2426						MOV	#77406,R2	;;;SET TO MAP MAX PAGE SIZE
   2427						MOV	R2,KPDR0	;;; FOR KERNAL PAGE 0
   2428						MOV	R2,KPDR7	;;; AND KP 7
   2429						MOV	R2,UPDR0	;;; AND USER PAGE 7
   2430						MOV	R2,UPDR7	;;; EXTERNAL PAGE FOR USER, TOO
   2431						CLR	KPAR0		;;;MAP KERNAL PAGE 0 TO ABSOLUTE 0
   2432						MOV	(PC)+,@(PC)+	;;;SET UP USER PAGE 0
   2433					TCBUP0:	 .WORD	0,UPAR0		;;;SPACE FOR ADDR OF PAGE
   2434						MOV	#7600,R2	;;;POINT TO EXTERNAL PAGE
   2435						MOV	R2,KPAR7	;;; FOR EXEC
   2436						MOV	R2,UPAR7	;;; AND USER
   2437						MOV	#1,SSR0		;;;ENABLE SEGMENTATION
   2438					.ENDC
   2439					;
   2440					; SETUP TEMPORARY KERNAL STACK AT TOP OF BOOT BLOCK, AND SAVE
   2441					;  BOOTSTRAP PARAMETER AT LOCATION 776
   2442					;
   2443	010076	012706 	001000 			MOV	#1000,SP	;;;START STACK AT TOP OF OUR BLOCK
   2444	010102					PUSH	R5		;;;SAVE BOOT PARAMETER AT BOTTOM OF STACK
	010102	010546 				MOV	R5,-(SP)
   2445					;
   2446					; RETURN TO SAVE TASK IN USER MODE AT SYSTEM RESTORE ENTRY POINT
   2447					;
   2448					.IF DF M$$MGE
   2449						PUSH	#PS.USR!PS.REG!PR7 ;;;USER MODE, PRIORITY 7
   2450					.IFF
   2451	010104					PUSH	#PS.REG!PR7	;;;SET REGISTER SET 1, PRI 7
	010104	012746 	004340 			MOV	#PS.REG!PR7,-(SP)
   2452					.ENDC
   2453	010110					PUSH	#RESTORE	;;; AND RETURN PC IN USER SPACE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 34-2
TC-11 BOOTSTRAP

	010110	012746 	002760'			MOV	#RESTORE,-(SP)
   2454	010114	000002 				RTI			;;;BACK TO SAVE.
   2455					.IF G <<.-TCBOOT>-<256.*2>>
   2456						.ERROR	<.-TCBOOT> ;  TC BOOT TOO BIG FOR FIRST BLOCK
   2457					.ENDC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 35
TC-11 WRITE ROUTINE

   2459						.SBTTL	TC-11 WRITE ROUTINE
   2460					;
   2461					; TCWRT -- TC-11 DECTAPE WRITE ROUTINE
   2462					;
   2463					; INPUTS:
   2464					;	DSKADR+0 --	BLOCK # TO START TRANSFER AT
   2465					;	DEVUNT --	UNIT # TO SCRIBBLE ON
   2466					;	MEMSIZ --	# OF 32. WORD BLOCKS TO WRITE
   2467					;
   2468					; REGISTERS:
   2469					;	R1 --	ADDRESS OF TCCM
   2470					;	R2 --	BLOCK #
   2471					;	R4 --	COUNT OF 32. WORD BLOCKS WRITTEN
   2472					;
   2473	010116				TCWRT:
   2474	010116	012701 	177342 			MOV	#TCCM,R1	;;;ADDRESS COMMAND REGISTER
   2475	010122	013702 	000004'			MOV	DSKADR+0,R2	;;;GET BLOCK #
   2476	010126	010203 				MOV	R2,R3		;;;COPY THE BLOCK #
   2477	010130	162703 	000003 			SUB	#3,R3		;;;BACK TO THREE BLOCK BEFORE IT
   2478	010134	113761 	000044'	000001 		MOVB	DEVUNT,1(R1)	;;;SELECT PROPER UNIT
   2479	010142	005004 				CLR	R4		;;;RESET # BLOCKS READ
   2480	010144	005061 	000004 			CLR	TCBA-TCCM(R1)	;;;RESET BUS ADDRESS REGISTER
   2481					;
   2482					; SEARCH FOR CURRENT BLOCK ON TAPE
   2483					;
   2484	010150	112711 	000002 			MOVB	#TCRNUM,(R1)	;;;SET READ BLOCK # FUNCTION
   2485	010154				5$:
   2486	010154	052711 	004000 			BIS	#TCREV,(R1)	;;;SET REVERSE MODE
   2487	010160	105211 				INCB	(R1)		;;;START READ BLOCK FUNCTION
   2488	010162				10$:
   2489	010162	105711 				TSTB	(R1)		;;;READY?
   2490	010164	100376 				BPL	10$		;;;NO-- WAIT
   2491	010166	005711 				TST	(R1)		;;;ERROR?
   2492	010170	100007 				BPL	40$		;;;NO-- CHECK OUT BLOCK #
   2493	010172				20$:
   2494	010172	005761 	177776 			TST	TCST-TCCM(R1)	;;;ERROR-- IS IT END-ZONE?
   2495	010176	100244 				BPL	TCBOOT		;;;NO-- RETRY
   2496	010200	032711 	004000 			BIT	#TCREV,(R1)	;;;GOING REVERSE?
   2497	010204	001763 				BEQ	5$		;;;NO-- GO THAT WAY
   2498	010206	000403 				BR	50$		;;;YES-- GO FORWARD
   2499					;
   2500	010210				40$:
   2501	010210	026103 	000006 			CMP	TCDT-TCCM(R1),R3 ;;;PAST BLOCK YET (CURRENT BLOCK LOW)?
   2502	010214	003357 				BGT	5$		;;;NO-- KEEP SEARCHING IN REVERSE
   2503	010216				50$:
   2504	010216	042711 	004000 			BIC	#TCREV,(R1)	;;;GO FORWARD
   2505	010222	105211 				INCB	(R1)		;;;START READ BLOCK # FUNCTION
   2506	010224				60$:
   2507	010224	105711 				TSTB	(R1)		;;;READY?
   2508	010226	100376 				BPL	60$		;;;NO-- WAIT
   2509	010230	005711 				TST	(R1)		;;;ERROR?
   2510	010232	100757 				BMI	20$		;;;YES-- CHECK IT OUT
   2511	010234	026102 	000006 			CMP	TCDT-TCCM(R1),R2 ;;;AT PROPER BLOCK?
   2512	010240	002766 				BLT	50$		;;;NOT YET-- KEEP GOING
   2513	010242	003344 				BGT	5$		;;;OOPS, PAST IT-- GO BACK AGAIN
   2514					;
   2515					; BLOCK FOUND-- START TRANSFER
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 35-1
TC-11 WRITE ROUTINE

   2516					;
   2517	010244	112711 	000014 			MOVB	#TCWRIT,(R1)	;;;SET WRITE FUNCTION, NO GO
   2518					;
   2519					; START NEXT 1.K TRANSFER
   2520					;
   2521	010250				TCWNXT:
   2522	010250	012761 	177400 	000002 		MOV	#<-256.>,TCWC-TCCM(R1) ;;;SET WORD COUNT
   2523	010256	105211 				INCB	(R1)		;;;SET GO
   2524	010260				10$:
   2525	010260	105711 				TSTB	(R1)		;;;READY?
   2526	010262	100376 				BPL	10$		;;;NO-- WAIT FOR TRANSFER TO COMPLETE
   2527	010264	005711 				TST	(R1)		;;;ERRORS?
   2528	010266	100410 				BMI	TCWERR		;;;YES-- GIVE UP
   2529					;
   2530					; SEE IF ALL DONE
   2531					;
   2532	010270	062704 	000010 			ADD	#256.*2/100,R4	;;;BUMP COUNT OF 32. WORD BLOCKS TRANSFERED
   2533	010274	023704 	000014'			CMP	MEMSIZ,R4	;;;DONE YET?
   2534	010300	101363 				BHI	TCWNXT		;;;NO-- GET NEXT BLOCK
   2535	010302	112711 	000011 			MOVB	#TCSTOP+TCGO,(R1) ;;;STOP TAPE
   2536	010306					RETURN			;;;FROM TCWRT
	010306	000207 				RTS	PC
   2537					;
   2538					; HERE ON ERROR ON TC-11
   2539					;
   2540	010310				TCWERR:
   2541	010310	000137 	007674'			JMP	WRTERR		;;;GIVE UP
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 36
END STATEMENT

   2543						.SBTTL	END STATEMENT
   2544		001166'				.END	SAVE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 36-1
SYMBOL TABLE

ACFLAG  000057R  	DEXWD3= 174402   	DTCL11= 002000   	FILDM3  002462R  	IE.EOF= 177766
AC.ENA= 000200   	DFUNC = 000200   	DTECHK  003636R  	FILDM4  002500R  	IE.EOT= 177702
ALLRXF  004624R  	DF.DMG= 000004   	DTECMD= 000451   	FILFND  002056R  	IE.EOV= 177765
ALLRX1  004634R  	DF.DMN= 000007   	DTEFLG= 000444   	FILMNT  006460R  	IE.EXP= 177676
ATCBLK  001100R  	DF.DOR= 000001   	DTEF11= 000450   	FILOK   002310R  	IE.FEX= 177717
BC.HDS= ****** GX	DF.EHG= 000010   	DTEMSG  004136R  	FILQIO  006474R  	IE.FHE= 177705
BITTBL= ****** GX	DF.EHM= 000011   	DTEMTD= 000455   	FILSET  002320R  	IE.FOP= 177713
BIT0  = 000001   	DF.EMG= 000005   	DTEMTI= 000456   	FINDEV  006402R  	IE.HFU= 177744
BIT1  = 000002   	DF.EMN= 000006   	DTEXPA= 174400   	FNDACP  006440R  	IE.HWR= 177772
BIT10 = 002000   	DF.KLR= 000012   	DTEXPZ= 000040   	FORPRO= 000020   	IE.IDU= 177644
BIT11 = 004000   	DF.KLW= 000013   	DTINOF= 000010   	GETNAM  005512R  	IE.IEF= 177637
BIT12 = 010000   	DF.KLX= 000014   	DTINON= 000040   	GETNB   005470R  	IE.IFC= 177776
BIT13 = 020000   	DF.OFF= 000002   	DTPMSG  004162R  	GETNUM  005556R  	IE.IFU= 177747
BIT14 = 040000   	DF.ON = 000003   	DTPMS1  004200R  	GTIMBF  000020R  	IE.ILL= 177726
BIT15 = 100000   	DF.PDP= 000016   	DTRSMD= 000010   	G.TICP= 000016   	IE.ILU= 177640
BIT2  = 000004   	DF.PEX= 000015   	DTSTAT= 000034   	G.TICT= 000014   	IE.INS= 177776
BIT3  = 000010   	DHEXPA= 160020   	DTVECA= 000774   	G.TIDA= 000004   	IE.IPR= 177641
BIT4  = 000020   	DHEXPZ= 000020   	DT11DB= 004000   	G.TIHR= 000006   	IE.ISQ= 177703
BIT5  = 000040   	DHSTAB  001122R  	DUPE  = 000020   	G.TIMI= 000010   	IE.ITI= 177643
BIT6  = 000100   	DHTBL = ****** GX	DURE  = 000004   	G.TIMO= 000002   	IE.ITS= 177770
BIT7  = 000200   	DIAG1 = 174430   	DV.LOG= ****** GX	G.TISC= 000012   	IE.LCK= 177745
BIT8  = 000400   	DIAG2 = 174432   	DXWRD1= 002000   	G.TIYR= 000000   	IE.LNL= 177646
BIT9  = 001000   	DIAG3 = 174436   	D.CCTY= ****** GX	HBCERR  004534R  	IE.MBK= 177721
BPARER= 000020   	DIKL10= 000010   	D.CKLN= ****** GX	HIBYTE= 177400   	IE.MOD= 177753
BP.CLN= 074000   	DLTBL = ****** GX	D1011 = 000040   	HOMBUF  000062R  	IE.NBF= 177731
BP.CSP= 000170   	DLYCNT= 174400   	EBSEL = 000100   	HOMFE0= 000061   	IE.NBK= 177727
BP.ERR= 100000   	DL.CAR= ****** GX	EBUSPC= 000020   	HOMFE1= 000062   	IE.NFI= 177704
BP.LD0= 000002   	DMFLAG  000052R  	EBUSPS= 000004   	HOMNAM= 000000   	IE.NLN= 177733
BP.LD1= 000004   	DMOERR  002452R  	EDONES= 040000   	IE.ABO= 177761   	IE.NNC= 177674
BP.RP4= 000200   	DMTBLK  001114R  	EF.PR1= ****** GX	IE.ACT= 177771   	IE.NOD= 177751
BP.SWR= 000001   	DNSERR  001640R  	EF.PR2= ****** GX	IE.ADP= 177636   	IE.NSF= 177746
BP.UNT= 003400   	DON10C= 040000   	EF.QIO= 000001   	IE.ALN= 177736   	IE.OFL= 177677
CDD   = 000020   	DON10S= 100000   	EF.RKP= ****** GX	IE.AST= 177660   	IE.ONP= 177773
CHNPNT= 000001   	DON11C= 000100   	EF.TMO= 000002   	IE.BAD= 177777   	IE.OVR= 177756
CMDCLN= 000022   	DON11S= 000200   	EPTR  = 000000   	IE.BBE= 177710   	IE.PRI= 177760
CMDCLR  000040R  	DPS4  = 040000   	ERRMSG  001422R     002	IE.BDI= 177714   	IE.RAC= 177724
CMDONE  001572R  	DRESET= 000100   	ERR10C= 010000   	IE.BDR= 177716   	IE.RAT= 177723
CNUPE = 000002   	DRVADR  000002R  	ERR10S= 020000   	IE.BDV= 177711   	IE.RBG= 177730
CS.EXP= 177670   	DRVAD1= 000012   	ERR11C= 000001   	IE.BHD= 177700   	IE.RCN= 177722
CTYBFL= 000120   	DRVAD2= 000014   	ERR11S= 000002   	IE.BLK= 177754   	IE.RER= 177740
CTYBUF  000226R  	DRVBOT= 000004   	EV.PF = ****** GX	IE.BNM= 177712   	IE.RNM= 177715
CTYLUN= 000001   	DRVBTP= 000016   	EXFLAG  000050R  	IE.BTF= 177675   	IE.RSU= 177757
CTYPTR= ****** GX	DRVMSZ= 000010   	EXIT    005460R  	IE.BTP= 177725   	IE.SDP= 177635
CYCLS = 000002   	DRVNAM= 000000   	EXITA   001524R  	IE.BVR= 177701   	IE.SNC= 177735
DATE  = 000004   	DRVSET= 000002   	EXIT00  005446R  	IE.BYT= 177755   	IE.SPC= 177772
DCOMST= 000001   	DRVSIZ= 000020   	EX.AC1= 000001   	IE.CKP= 177766   	IE.SQC= 177734
DEFLAG  000061R  	DRVTAB  006570R  	EX.ENA= 000200   	IE.CKS= 177742   	IE.SRE= 177762
DEP   = 010000   	DRVTBZ= 000060   	EX.FCO= 000004   	IE.CLO= 177732   	IE.STK= 177706
DEVCHK  001654R  	DRVWRT= 000006   	E.FLOG= 000004   	IE.CON= 177752   	IE.ULN= 177773
DEVMNT  002000R  	DR.DTE= 000011   	E.FQIO= 000001   	IE.DAA= 177770   	IE.UPN= 177777
DEVNAM  000042R  	DSEND = 000004   	E.FTMO= 000002   	IE.DAO= 177763   	IE.VER= 177774
DEVOK   001732R  	DSKADR  000004R  	FIDBLK  001074R  	IE.DFU= 177750   	IE.WAC= 177743
DEVUNT  000044R  	DSKLUN= 000002   	FILCHK  002250R  	IE.DNA= 177771   	IE.WAT= 177741
DEX   = 000400   	DSKSIZ  000010R  	FILDMO  002330R  	IE.DNR= 177775   	IE.WER= 177737
DEXDON= 000004   	DS04  = 004000   	FILDMX  002510R  	IE.DUN= 177767   	IE.WLK= 177764
DEXWD1= 174406   	DS05  = 002000   	FILDM1  002346R  	IE.DUP= 177707   	IE.2DV= 177720
DEXWD2= 174404   	DS06  = 001000   	FILDM2  002440R  	IE.EBX= 177776   	IFLOP = 100000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 36-2
SYMBOL TABLE

INTROF= 000010   	IO.RHD= 001010   	KL.LCA= ****** GX	Q.DA  = ****** GX	RQSKLR  004662R
INTRON= 000040   	IO.RLB= 001000   	KL.LRM= ****** GX	Q.SZ  = ****** GX	RQSTSK  005334R
INTSON= 000001   	IO.RLV= 001100   	KL.LVB= ****** GX	RADIX   000016R  	RQSTS1  004336R
INT10S= 000400   	IO.RNA= 005400   	KL.VBN= ****** GX	RAMIS0= 010000   	RXBAD1  006716R
INT11C= 002000   	IO.RNC= 001004   	K.LRBA= ****** GX	REDHM1  004402R  	RXBAD2  006716R
INT11S= 004000   	IO.RNE= 001020   	LKS   = 177546   	REDHOM  004350R  	RXBBLK  006720R
IO.ACE= 007400   	IO.RTC= 003400   	LOAD11= 000004   	REDSY   003232R  	RXBBLX  007060R
IO.ACR= 006400   	IO.RTI= 016400   	LOGBUF  001066R  	RESTOR  002760R  	RXBMSZ  007112R
IO.ACW= 007000   	IO.RTK= 000060   	LOWCOR  000062R  	RFMAD0= 100000   	RXBNXT  007100R
IO.ADS= 014000   	IO.RVB= 010400   	MEMSIZ  000014R  	RFMAD1= 040000   	RXBNX1  007104R
IO.APC= 014000   	IO.RWD= 002400   	MNTBLK  001106R  	RFMAD2= 020000   	RXBOOT  006660R
IO.APV= 014010   	IO.RWU= 002540   	MNTSY   004234R  	RFMAD3= 010000   	RXCS  = 177170
IO.ATT= 001400   	IO.R1C= 002400   	MODTBL  001530R  	RHFLAG  000053R  	RXDB  = 177172
IO.CCI= 014000   	IO.SAO= 004000   	MODTLN= 000006   	RHMERR  004600R  	RXDONE= 000040
IO.CCT= 002460   	IO.SCS= 013000   	MOFLAG  000051R  	RM    = 000010   	RXEMPT= 000002
IO.CLN= 003400   	IO.SDI= 013000   	MONTAB  006244R  	RNFLAG  000054R  	RXERR = 100000
IO.CON= 015400   	IO.SDO= 012400   	MOUNTD  002046R  	RNRERR  004612R  	RXFILL= 000000
IO.CRC= 001020   	IO.SEC= 002520   	MPE11 = 001000   	RPATA = 100000   	RXFUNC= 000016
IO.CRE= 012000   	IO.SEM= 002440   	NOTRXF  004562R  	RPBA  = 176704   	RXGO  = 000001
IO.CTI= 015400   	IO.SHT= 002410   	NULSTP= 000040   	RPBAD1= 007430R  	RXINIT= 040000
IO.CTL= 016400   	IO.SLO= 005400   	NUPE  = 000002   	RPBAD2= 007436R  	RXREAD= 000006
IO.DAC= 010000   	IO.SMO= 002560   	PERCLR= 001000   	RPBMSZ  007514R  	RXRERR= 000016
IO.DCI= 014400   	IO.SNM= 002450   	PHYS  = 100000   	RPBNXT  007454R  	RXSET   006650R
IO.DCT= 002470   	IO.SPB= 002420   	PIDENT= 000000   	RPBOOT  007412R  	RXSETX  006654R
IO.DEL= 012400   	IO.SPF= 002440   	PRI7  = 000340   	RPCS1 = 176700   	RXTREQ= 000200
IO.DET= 002000   	IO.SSO= 004400   	PRNRUN  005322R  	RPCS2 = 176710   	RXUNIT= 000020
IO.DIS= 016000   	IO.SST= 002430   	PROPNT= 000021   	RPDA  = 176706   	RXWBLK  007202R
IO.DTI= 016000   	IO.STC= 002500   	PRTOFF= 004000   	RPDC  = 176734   	RXWNXT  007162R
IO.ENA= 006000   	IO.STP= 016400   	PR0   = 000000   	RPDPR = 000400   	RXWRIT= 000004
IO.EOF= 003000   	IO.SYN= 003040   	PR1   = 000040   	RPDS  = 176712   	RXWRT   007130R
IO.ESA= 002500   	IO.TRM= 002410   	PR2   = 000100   	RPDT  = 176726   	R$$11M= 000001
IO.EXT= 011400   	IO.UNL= 000042   	PR3   = 000140   	RPDT04= 000020   	R$$20F= 000001
IO.FDX= 003020   	IO.WAT= 013400   	PR4   = 000200   	RPDT06= 000022   	SAVE    001166R
IO.FNA= 004400   	IO.WLB= 000400   	PR5   = 000240   	RPDVA = 004000   	SAVLMT  001162R
IO.HDX= 003010   	IO.WLS= 000410   	PR6   = 000300   	RPECCI= 004000   	SCD   = 000040
IO.HIS= 015000   	IO.WLV= 000500   	PR7   = 000340   	RPERR = 040000   	SETCTY  003006R
IO.INL= 002400   	IO.WVB= 011000   	PS    = 177776   	RPFLAG  000055R  	SETDH   003174R
IO.ITI= 017000   	IO.XMT= 014400   	PSWW1 = 000005   	RPFM22= 010000   	SETDL   003136R
IO.KIL= 000012   	IO.XNA= 014410   	PSWW10= 000014   	RPFUNC= 000076   	SETFIL  002056R
IO.LED= 012000   	IQ.Q  = 000002   	PSWW11= 000015   	RPGO  = 000001   	SETRXF  004544R
IO.LOV= 001010   	IQ.X  = 000001   	PSWW12= 000016   	RPMCPE= 020000   	SF.FX = ****** GX
IO.LTK= 000050   	IS.BV = 000005   	PSWW13= 000017   	RPMOL = 010000   	SOMRXF  004656R
IO.MCS= 013400   	IS.CLR= 000000   	PSWW2 = 000006   	RPNOOP= 000000   	SPSAVE  000000R
IO.MDA= 016000   	IS.CR = 006401   	PSWW3 = 000007   	RPOF  = 176732   	STAT  = 174434
IO.MDI= 014400   	IS.ESC= 015401   	PSWW4 = 000010   	RPPGM = 001000   	STATUS= 000022
IO.MDO= 015400   	IS.PND= 000000   	PSWW5 = 000011   	RPPRST= 000020   	STSW0 = ****** GX
IO.MLO= 006000   	IS.RDD= 000002   	PSWW6 = 000012   	RPRDY = 000200   	STSW1 = ****** GX
IO.MOD= 003000   	IS.SET= 000002   	PSWW7 = 000013   	RPREAD= 000070   	SWR   = 177570
IO.MSO= 005000   	IS.SUC= 000001   	PS.PUS= 030000   	RPSET   007342R  	SWSLLT= 100000
IO.RAL= 001010   	KBS0  = ****** GX	PS.REG= 004000   	RPTRE = 040000   	SXBTHM= 105755
IO.RAT= 013000   	KBS1  = ****** GX	PS.USR= 140000   	RPUNIT= 000007   	SYMNTD  004340R
IO.RBC= 003000   	KLAREM  005216R  	PUDADR  000040R  	RPWC  = 176702   	SYNERR  001560R
IO.RCI= 015000   	KLAUSR  005206R  	PUDIDX  000045R  	RPWNXT  007626R  	SYSAVE  002522R
IO.RCV= 015000   	KLINIT  001116R  	PULSE = 000020   	RPWRIT= 000060   	SYSAV1  002554R
IO.RDB= 001200   	KLNPTR= ****** GX	QEFLAG  000056R  	RPWRT   007546R  	SYSMSG  004220R
IO.RDN= 000022   	KLPWRF= 000010   	QIOSTS  001062R  	RP4CHK  003414R  	SYSTRT  004102R
IO.REL= 013400   	KL.CFM= ****** GX	QSIZE = 000023   	RP6CHK  003460R  	S.DI  = ****** GX
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1108  16-JAN-78 19:41  PAGE 36-3
SYMBOL TABLE

S.FW  = ****** GX	TO10DB= 000400   	UNASG3= 000034   	.CLRMR= 006000   	.LDSEL= 044000
TCBA  = 177346   	TO10DN= 100000   	UNASG4= 000035   	.CLRUN= 010000   	.MEMRS= 076000
TCBAD1= 007714R  	TO10DT= 174424   	UNASG5= 000036   	.COMEF= ****** GX	.NOERR= ****** GX
TCBAD2= 007714R  	TO10ER= 020000   	UNASG6= 000037   	.CONBT= 012000   	.PCAB1= 150000
TCBMSZ  010060R  	TO11  = 000100   	U.ACP = ****** GX	.CSHRG= 164000   	.PCAB2= 151000
TCBNXT  010032R  	TO11AD= 174422   	U.DACP= ****** GX	.DATE3= ****** GX	.PCAB3= 152000
TCBOOT  007710R  	TO11BC= 174416   	U.DN  = ****** GX	.DQPBA= ****** GX	.PCAB4= 153000
TCCM  = 177342   	TO11BM= 020000   	U.LBH = ****** GX	.DRLTC= 015000   	.PRDTE= ****** GX
TCDT  = 177350   	TO11DB= 004000   	U.LBN = ****** GX	.DSACF= 066000   	.PRSTA= ****** GX
TCENDZ= 100000   	TO11DN= 000200   	U.RP  = ****** GX	.DSIOJ= 065000   	.PUDBA= ****** GX
TCERR = 100000   	TO11DT= 174426   	U.SZ  = ****** GX	.EIOJA= 067000   	.PUDEA= ****** GX
TCFUNC= 000016   	TO11ER= 000002   	U.UN  = ****** GX	.FEMOD= ****** GX	.RCRM1= 147000
TCGO  = 000001   	TTYEND= ****** GX	U.VA  = ****** GX	.GFNR = 102000   	.RCRM2= 146000
TCRDY = 000200   	TTYEXP= ****** GX	WBFLAG  000046R  	.INICL= 070000   	.RCRM3= 145000
TCREAD= 000004   	TT.CRW= ****** GX	WEFLAG  000060R  	.IRLTC= 014000   	.RCRM4= 144000
TCREV = 004000   	TT.CTY= ****** GX	WEP   = 000010   	.KLIWD= ****** GX	.RCSPF= 141000
TCRNUM= 000002   	TT.OUT= ****** GX	WRNMSG  001445R     002	.KLNMD= ****** GX	.RDJ14= 134000
TCSATM= 000000   	TT.RIP= ****** GX	WRTERR  007674R  	.KLNSW= ****** GX	.RDJ71= 135000
TCSET   007704R  	TYPBUF  000062R  	WSFLAG  000047R  	.LCRDL= 052000   	.RDMAB= 133000
TCST  = 177340   	TYPCR   006006R  	WTSAVE  002714R  	.LCRDR= 051000   	.RPADR= ****** GX
TCSTOP= 000010   	TYPDAT  006106R  	ZSTOP = 040000   	.LCRM1= 057000   	.SECLK= 003000
TCUNIT= 003400   	TYPDEC  006224R  	$BTMSK= ****** GX	.LCRM2= 056000   	.SERFG= ****** GX
TCWC  = 177344   	TYPDEV  006030R  	$DIV  = ****** GX	.LCRM3= 055000   	.SETMR= 007000
TCWERR  010310R  	TYPDON  005714R  	$DSW  = ****** GX	.LCRM4= 054000   	.SETRN= 011000
TCWNXT  010250R  	TYPERR  006064R  	$UNIT = ****** GX	.LCRM5= 053000   	.SSCLK= 002000
TCWRIT= 000014   	TYPMAX= 000013   	$$    = 000037   	.LDAR = 077000   	.STDTA= ****** GX
TCWRT   010116R  	TYPMSG  005622R  	$$MSG = 000000   	.LDBRL= 043000   	.STDTZ= ****** GX
TENAD1= 174410   	TYPMS1  005642R  	$$$   = 001367R     002	.LDBRR= 042000   	.STPCL= 000000
TENAD2= 174412   	TYPNUM  006324R  	$$$ADR= 006630R  	.LDCK1= 046000   	.STRCL= 001000
TOBM  = 000004   	TYPSAV  006000R  	$$$ARG= 000005   	.LDCK2= 047000   	.VERNO= ****** GX
TOD   = 000003   	TYPSDV  006024R  	$$$OST= 000020   	.LDDIS= 045000   	.WRMBX= 071000
TOIP  = 000002   	TYPSTR  006076R  	$$$T1 = 000013   	.LDRJD= 064000   	..DTP2= ****** GX
TOIT  = 000001   	TYPTAB  005666R  	$$$T2 = 000001   	.LDRJV= 063000   	..ENB0= ****** GX
TO10  = 000200   	TYPTXT  006012R  	.BRCLK= 005000   	.LDRM1= 060000   	..FSTD= ****** GX
TO10AD= 174420   	TYPWRN  006072R  	.BTPRM= ****** GX	.LDRM2= 061000   	..STIN= ****** GX
TO10BC= 174414   	UNASG1= 000032   	.CECLK= 004000   	.LDRM3= 062000   	...GBL= 000000
TO10BM= 000001   	UNASG2= 000033

. ABS.	000000	   000
      	010314	   001
TEXT  	001467	   002
ERRORS DETECTED:  0

VIRTUAL MEMORY USED:  9602 WORDS  ( 38 PAGES)
DYNAMIC MEMORY:  10496 WORDS  ( 40 PAGES)
ELAPSED TIME:  00:03:52
,[52,20]SAVE.LIS/-SP/CRF=[52,30]RSXDC,SAVE
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 1

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

ACFLAG	  000057 R	#6-362      9-651     *9-674     
AC.ENA	= 000200	#4-238      9-626     
ALLRXF	  004624 R	 20-1264   #20-1299   
ALLRX1	  004634 R	 20-1293   #20-1301   
ATCBLK	  001100 R	#7-396      9-622     
BC.HDS	= ******  GX	 21-1391   
BITTBL	= ******  GX	 14-943    
BIT0  	= 000001	#4-153      4-192      4-213      4-231      5-256      5-271      5-276      5-306      7-425     
                         7-427      7-428      7-429      7-430      7-431      7-432      7-433      7-434      7-435     
BIT1  	= 000002	#4-153      4-195      4-208      5-250      5-251      5-252      5-253      5-254      5-255     
                         5-266      5-267      5-268      5-269      5-270      5-276      5-300      5-301      5-302     
                         5-303      5-304      5-305      7-425      7-426      7-427      7-428      7-429      7-430     
                         7-431      7-432      7-433      7-434      7-435     
BIT10 	= 002000	#4-153      4-204      5-298      5-319      7-422      7-423      7-424      7-425      7-426     
                         7-427      7-428      7-429      7-430      7-431      7-432      7-433      7-434      7-435     
                         7-436      7-437     
BIT11 	= 004000	#4-153      4-203      4-219      5-264      5-288      5-297      5-318     
BIT12 	= 010000	#4-153      4-203      4-218      5-280      5-287     
BIT13 	= 020000	#4-153      4-203      4-218      5-263     
BIT14 	= 040000	#4-153      4-203      4-217      5-246      5-262      5-279     
BIT15 	= 100000	#4-153      4-202      4-217      5-245      5-278      5-294      5-296     
BIT2  	= 000004	#4-153      4-198      4-207      4-232      5-250      5-266      5-276      5-300      7-425     
                         7-426      7-427      7-428     
BIT3  	= 000010	#4-153      4-206      5-250      5-266      5-300      5-321      5-322     
BIT4  	= 000020	#4-153      4-206      5-249      5-266      15-987    
BIT5  	= 000040	#4-153      4-206      5-248      5-266      5-320     
BIT6  	= 000100	#4-153      4-206      7-422      7-423      7-424      7-425      7-426      7-427      7-428     
                         7-429      7-430      7-431      7-432      7-433      7-434      7-435      7-436      7-437     
BIT7  	= 000200	#4-153      4-205      4-233      4-238      5-247      5-265      5-299     
BIT8  	= 000400	#4-153      4-204      5-282      5-298     
BIT9  	= 001000	#4-153      4-204      5-281      5-298     
BPARER	= 000020	#4-153     
BP.CLN	= 074000	#4-203      14-937    
BP.CSP	= 000170	#4-206      14-923    
BP.ERR	= 100000	#4-202     
BP.LD0	= 000002	#4-208      11-792     17-1148    21-1321    22-1415    22-1417   
BP.LD1	= 000004	#4-207      17-1148    17-1149    21-1321    21-1331    22-1415    22-1417   
BP.RP4	= 000200	#4-205      26-1830   
BP.SWR	= 000001	#4-213      22-1411   
BP.UNT	= 003400	#4-204      14-932    
CDD   	= 000020	#4-153     
CHNPNT	= 000001	#4-153     
CMDCLN	= 000022	#6-366      8-451     
CMDCLR	  000040 R	#6-344      6-366      8-450     
CMDONE	  001572 R	 8-495     #9-547     
CNUPE 	= 000002	#4-153     
CS.EXP	= 177670	#4-153     
CTYBFL	= 000120	#6-378      8-465     
CTYBUF	  000226 R	#6-377      6-378      8-465     *8-473      8-474     
CTYLUN	= 000001	#4-186      8-462      8-465      24-1572   
CTYPTR	= ******  GX	 14-947    *14-949    
CYCLS 	= 000002	#4-153     
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 2

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

DATE  	= 000004	#4-153     
DCOMST	= 000001	#4-153     
DEFLAG	  000061 R	#6-365     *17-1100   *17-1124    18-1181   
DEP   	= 010000	#4-153     
DEVCHK	  001654 R	 9-558     #9-562     
DEVMNT	  002000 R	#9-589     
DEVNAM	  000042 R	#6-346     *8-482      9-549      9-560     *9-564      9-568      9-575      15-994    
DEVOK 	  001732 R	 9-569     #9-574     
DEVUNT	  000044 R	#6-347     *8-486      9-548     *9-565      11-789     29-2041    32-2282    35-2478   
DEX   	= 000400	#4-153     
DEXDON	= 000004	#4-153     
DEXWD1	= 174406	#4-153     
DEXWD2	= 174404	#4-153     
DEXWD3	= 174402	#4-153     
DFUNC 	= 000200	#4-153     
DF.DMG	= 000004	#4-153     
DF.DMN	= 000007	#4-153     
DF.DOR	= 000001	#4-153     
DF.EHG	= 000010	#4-153     
DF.EHM	= 000011	#4-153     
DF.EMG	= 000005	#4-153     
DF.EMN	= 000006	#4-153     
DF.KLR	= 000012	#4-153     
DF.KLW	= 000013	#4-153     
DF.KLX	= 000014	#4-153     
DF.OFF	= 000002	#4-153     
DF.ON 	= 000003	#4-153     
DF.PDP	= 000016	#4-153     
DF.PEX	= 000015	#4-153     
DHEXPA	= 160020	#5-326      14-966    
DHEXPZ	= 000020	#5-327      14-975    
DHSTAB	  001122 R	#7-421      14-928    
DHTBL 	= ******  GX	 14-934     14-967    
DIAG1 	= 174430	#4-153     
DIAG2 	= 174432	#4-153     
DIAG3 	= 174436	#4-153     
DIKL10	= 000010	#4-153     
DLTBL 	= ******  GX	 14-925    *14-957    *14-958    *14-959    *14-960    *14-961    
DLYCNT	= 174400	#4-153     
DL.CAR	= ******  GX	 21-1323   
DMFLAG	  000052 R	#6-357     *8-458      8-529      10-717    
DMOERR	  002452 R	 10-728    #10-740    
DMTBLK	  001114 R	#7-409      10-719    
DNSERR	  001640 R	 9-556     #9-559     
DON10C	= 040000	#4-153     
DON10S	= 100000	#4-153     
DON11C	= 000100	#4-153     
DON11S	= 000200	#4-153     
DPS4  	= 040000	#4-153     
DRESET	= 000100	#4-153     
DRVADR	  000002 R	#6-338     *9-579      9-685      11-779     11-827     12-874    
DRVAD1	= 000012	 11-781    #26-1829   #26-1830   #26-1831   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 3

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

DRVAD2	= 000014	 11-782    #26-1829   #26-1830   #26-1831   
DRVBOT	= 000004	 11-828    #26-1829   #26-1830   #26-1831   
DRVBTP	= 000016	 11-791    #26-1829   #26-1830   #26-1831   
DRVMSZ	= 000010	 11-780    #26-1829   #26-1830   #26-1831   
DRVNAM	= 000000	 9-568     #26-1829   #26-1830   #26-1831   
DRVSET	= 000002	 9-686      9-686     #26-1829   #26-1830   #26-1831   
DRVSIZ	= 000020	 9-570     #26-1829   #26-1830   #26-1831   
DRVTAB	  006570 R	 9-566      9-571     #26-1828    26-1832   
DRVTBZ	= 000060	 9-571     #26-1832   
DRVWRT	= 000006	 12-875     12-875    #26-1829   #26-1830   #26-1831   
DR.DTE	= 000011	#4-153     
DSEND 	= 000004	#4-153     
DSKADR	  000004 R	#6-339      7-398      9-678      9-679     *9-708     *9-709      11-781     11-782    *12-870    
                        *12-871     29-2047    32-2290    32-2291    35-2475   
DSKLUN	= 000002	#4-187      9-555      10-726     19-1203    25-1778   
DSKSIZ	  000010 R	#6-340      9-647      9-649     
DS04  	= 004000	#4-153     
DS05  	= 002000	#4-153     
DS06  	= 001000	#4-153     
DTCL11	= 002000	#5-319      17-1128   
DTECHK	  003636 R	 15-1005   #17-1095   
DTECMD	= 000451	#4-153     
DTEFLG	= 000444	#4-153     
DTEF11	= 000450	#4-153     
DTEMSG	  004136 R	 18-1168   #18-1173   
DTEMTD	= 000455	#4-153     
DTEMTI	= 000456	#4-153     
DTEXPA	= 174400	#5-314      17-1098   
DTEXPZ	= 000040	#5-315      17-1134   
DTINOF	= 000010	#5-321      17-1128   
DTINON	= 000040	#5-320      17-1122   
DTPMSG	  004162 R	 18-1175   #18-1180   
DTPMS1	  004200 R	 18-1178   #18-1184   
DTRSMD	= 000010	#5-322      17-1115   
DTSTAT	= 000034	#5-317      17-1115   *17-1122   *17-1128    17-1141   
DTVECA	= 000774	#5-313      17-1097   
DT11DB	= 004000	#5-318      17-1122   
DUPE  	= 000020	#4-153     
DURE  	= 000004	#4-153     
DV.LOG	= ******  GX	 6-385     
DXWRD1	= 002000	#4-153     
D.CCTY	= ******  GX	*14-950    
D.CKLN	= ******  GX	 21-1393   
D1011 	= 000040	#4-153     
EBSEL 	= 000100	#4-153     
EBUSPC	= 000020	#4-153     
EBUSPS	= 000004	#4-153     
EDONES	= 040000	#4-153     
EF.PR1	= ******  GX	 11-763     21-1333    21-1378   
EF.PR2	= ******  GX	 11-763     21-1333   
EF.QIO	= 000001	#4-192     
EF.RKP	= ******  GX	 21-1335    21-1344   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 4

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

EF.TMO	= 000002	#4-195     
EPTR  	= 000000	#4-153     
ERRMSG	  001422 R	 24-1621   #24-1625   
ERR10C	= 010000	#4-153     
ERR10S	= 020000	#4-153     
ERR11C	= 000001	#4-153     
ERR11S	= 000002	#4-153     
EV.PF 	= ******  GX	 18-1162   
EXFLAG	  000050 R	#6-355     *8-456      8-529      22-1427   
EXIT  	  005460 R	 8-520      21-1400    22-1428   #22-1433    22-1435    24-1573   
EXITA 	  001524 R	 8-463      8-466      8-468      8-470     #8-519     
EXIT00	  005446 R	 22-1418    22-1423   #22-1426   
EX.AC1	= 000001	#4-231      9-658     
EX.ENA	= 000200	#4-233      9-658     
EX.FCO	= 000004	#4-232      9-658     
E.FLOG	= 000004	#4-197     #4-198      21-1392    21-1395   
E.FQIO	= 000001	#4-191      8-465      24-1572    25-1778   
E.FTMO	= 000002	#4-194      21-1316    21-1338    21-1339    21-1340   
FIDBLK	  001074 R	#7-392      9-617     
FILCHK	  002250 R	 9-671     #9-673     
FILDMO	  002330 R	#10-716    
FILDMX	  002510 R	 10-723     10-725    #10-748    
FILDM1	  002346 R	#10-721     10-751    
FILDM2	  002440 R	 10-731     10-733    #10-735    
FILDM3	  002462 R	 10-739    #10-742    
FILDM4	  002500 R	 10-744    #10-746    
FILFND	  002056 R	#9-616      9-676     
FILMNT	  006460 R	 9-599      9-599      10-737     10-737     19-1210    19-1210   #25-1757   
FILOK 	  002310 R	 9-680      9-682     #9-684     
FILQIO	  006474 R	 9-627      9-627      9-661      9-661      9-670      9-670      20-1240    20-1240   #25-1777   
FILSET	  002320 R	#9-707     
FINDEV	  006402 R	 9-557      9-557      15-995     15-995     15-1004    15-1004    16-1061    16-1061   #25-1729   
FNDACP	  006440 R	 9-595      9-595      19-1207    19-1207   #25-1747   
FORPRO	= 000020	#4-153     
FTABS 	= ******	 6-352      8-530      9-608      9-687      26-1829    26-1830    26-1831    27-1841    30-2175   
                         33-2330   
GETNAM	  005512 R	 8-480      8-480      8-505      8-505     #23-1471   
GETNB 	  005470 R	 8-478      8-478      8-494      8-494     #23-1455    23-1458    23-1460   
GETNUM	  005556 R	 8-484      8-484     #23-1501   
GTIMBF	  000020 R	#6-343      11-759     24-1650    24-1653    24-1660    24-1663    24-1669   
G.TICP	= 000016	#11-759    
G.TICT	= 000014	#11-759    
G.TIDA	= 000004	#11-759     24-1660   
G.TIHR	= 000006	#11-759     24-1650   
G.TIMI	= 000010	#11-759     24-1653   
G.TIMO	= 000002	#11-759     24-1663   
G.TISC	= 000012	#11-759    
G.TIYR	= 000000	#11-759     24-1669   
HBCERR	  004534 R	 20-1265    20-1271   #20-1275   
HIBYTE	= 177400	#4-153     
HOMBUF	  000062 R	#6-375      20-1237    20-1248    20-1267   
HOMFE0	= 000061	#4-225      20-1248    20-1267   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 5

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

HOMFE1	= 000062	#4-226     
HOMNAM	= 000000	#4-223     
IFLOP 	= 100000	#4-153     
INTROF	= 000010	#4-153     
INTRON	= 000040	#4-153     
INTSON	= 000001	#4-153     
INT10S	= 000400	#4-153     
INT11C	= 002000	#4-153     
INT11S	= 004000	#4-153     
IO.ACE	= 007400	 9-621     
IO.APV	= 014010	 25-1758   
IO.DAC	= 010000	 9-666     
IO.EXT	= 011400	 9-656     
IO.RLB	= 001000	 8-465      20-1236   
IO.WLB	= 000400	 24-1572   
KBS0  	= ******  GX	 14-957    
KBS1  	= ******  GX	 14-958    
KLAREM	  005216 R	 21-1373   #21-1377   
KLAUSR	  005206 R	 21-1370   #21-1375   
KLINIT	  001116 R	#7-414      22-1408   
KLNPTR	= ******  GX	 21-1317   
KLPWRF	= 000010	#4-153     
KL.CFM	= ******  GX	 22-1410   
KL.LCA	= ******  GX	 22-1410   
KL.LRM	= ******  GX	 22-1410   
KL.LVB	= ******  GX	 22-1410   
KL.VBN	= ******  GX	 22-1413   
K.LRBA	= ******  GX	 21-1390   
LKS   	= 177546	#5-331      11-775    
LOAD11	= 000004	#4-153     
LOGBUF	  001066 R	#6-383      21-1380   
LOWCOR	  000062 R	#6-371      6-381      11-829    
MEMSIZ	  000014 R	#6-341     *9-643      11-780    *12-872     29-2067    32-2314    35-2533   
MNTBLK	  001106 R	#7-403      9-598      19-1209   
MNTSY 	  004234 R	#19-1199   
MODTBL	  001530 R	 8-507     #8-524      8-535     
MODTLN	= 000006	 8-508     #8-535     
MOFLAG	  000051 R	#6-356      8-529      9-590     
MONTAB	  006244 R	 24-1666   #24-1682   
MOUNTD	  002046 R	 9-593     #9-602     
MPE11 	= 001000	#4-153     
M$$MGE	= ******	 11-783     11-797     13-892     26-1829    26-1830    26-1831    28-1973    28-2013    29-2051   
                         31-2234    31-2257    34-2425    34-2448   
NOTRXF	  004562 R	#20-1283   
NULSTP	= 000040	#4-153     
NUPE  	= 000002	#4-153     
PERCLR	= 001000	#4-153     
PHYS  	= 100000	#4-153     
PIDENT	= 000000	#4-153     
PRI7  	= 000340	#4-153     
PRNRUN	  005322 R	 21-1334   #21-1398   
PROPNT	= 000021	#4-153     
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 6

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

PRTOFF	= 004000	#4-153     
PR0   	= 000000	#4-153     
PR1   	= 000040	#4-153     
PR2   	= 000100	#4-153     
PR3   	= 000140	#4-153     
PR4   	= 000200	#4-153     
PR5   	= 000240	#4-153      17-1123   
PR6   	= 000300	#4-153     
PR7   	= 000340	#4-153      11-771     17-1126    18-1185    28-1972    28-2016    31-2233    31-2260    34-2424   
                         34-2451   
PS    	= 177776	#4-153      11-771     11-771     11-796     16-1052    16-1057    17-1102    17-1107    17-1112   
                         17-1123    17-1126    17-1130    18-1185    18-1185    18-1187    21-1343    21-1343    21-1368   
                         28-1972    31-2233    34-2424   
PSWW1 	= 000005	#4-153     
PSWW10	= 000014	#4-153     
PSWW11	= 000015	#4-153     
PSWW12	= 000016	#4-153     
PSWW13	= 000017	#4-153     
PSWW2 	= 000006	#4-153     
PSWW3 	= 000007	#4-153     
PSWW4 	= 000010	#4-153     
PSWW5 	= 000011	#4-153     
PSWW6 	= 000012	#4-153     
PSWW7 	= 000013	#4-153     
PS.PUS	= 030000	#4-218      11-796     16-1052    17-1102    17-1130   
PS.REG	= 004000	#4-219      28-2016    31-2260    34-2451   
PS.USR	= 140000	#4-217     
PUDADR	  000040 R	#6-345     *9-580      15-997    *15-1001   *15-1008    19-1200    24-1604   
PUDIDX	  000045 R	#6-348     *9-585      10-732     15-1025   
PULSE 	= 000020	#4-153     
QEFLAG	  000056 R	#6-361     *9-651      25-1779   *25-1786   
QIOSTS	  001062 R	#6-382      8-465      8-467      8-469      8-472      25-1778    25-1783   
QSIZE 	= 000023	#4-153     
Q.DA  	= ******  GX	*14-950    
Q.SZ  	= ******  GX	*14-950    
RADIX 	  000016 R	#6-342     *24-1612   *24-1649   *24-1675    24-1702    24-1704   
RAMIS0	= 010000	#4-153     
REDHM1	  004402 R	 20-1230   #20-1232   
REDHOM	  004350 R	 19-1206   #20-1224   
REDSY 	  003232 R	#15-984    
RESTOR	  002760 R	 12-869    #13-886     28-2018    31-2262    32-2324    34-2453   
RFMAD0	= 100000	#4-153     
RFMAD1	= 040000	#4-153     
RFMAD2	= 020000	#4-153     
RFMAD3	= 010000	#4-153     
RHFLAG	  000053 R	#6-358     *8-457      8-529     *9-577      16-1038    20-1225   
RHMERR	  004600 R	 20-1241   #20-1291   
RM    	= 000010	#4-153     
RNFLAG	  000054 R	#6-359     *16-1043    20-1227   
RNRERR	  004612 R	 20-1228   #20-1295   
RPATA 	= 100000	#5-278      31-2221    32-2308   
RPBA  	= 176704	#5-273     *31-2200   *32-2289   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 7

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

RPBAD1	= 007430 R	 26-1830   #31-2201   
RPBAD2	= 007436 R	 26-1830   #31-2203   
RPBMSZ	  007514 R	 26-1830   #31-2228   
RPBNXT	  007454 R	#31-2210    31-2229   
RPBOOT	  007412 R	 26-1830   #31-2193    31-2220    31-2222    31-2264   
RPCS1 	= 176700	#5-261      16-1070   *16-1072   *31-2200   *31-2202   *31-2204   *31-2205   *31-2211    31-2221   
                         32-2280   *32-2282   *32-2289   *32-2290   *32-2291   *32-2292   *32-2298    32-2308   
RPCS2 	= 176710	#5-275     *16-1040   *16-1065   *32-2282   
RPDA  	= 176706	#5-274     *31-2204   *32-2291   
RPDC  	= 176734	#5-289     *31-2202   *32-2290   
RPDPR 	= 000400	#5-282      16-1066   
RPDS  	= 176712	#5-277      16-1041    16-1045    16-1066    31-2221    32-2308   
RPDT  	= 176726	#5-283      16-1075   
RPDT04	= 000020	#5-284     
RPDT06	= 000022	#5-285      16-1075   
RPDVA 	= 004000	#5-264      16-1070    32-2286   
RPECCI	= 004000	#5-288      31-2205    32-2292   
RPERR 	= 040000	#5-279      31-2221    32-2308   
RPFLAG	  000055 R	#6-360     *16-1047    20-1229   
RPFM22	= 010000	#5-287     
RPFUNC	= 000076	#5-266     
RPGO  	= 000001	#5-271      16-1072    31-2198    32-2288   
RPMCPE	= 020000	#5-263      31-2219    32-2306   
RPMOL 	= 010000	#5-280      16-1041   
RPNOOP	= 000000	#5-267      16-1072   
RPOF  	= 176732	#5-286     *31-2205   *32-2292   
RPPGM 	= 001000	#5-281      16-1045    16-1066   
RPPRST	= 000020	#5-268      31-2198    32-2288   
RPRDY 	= 000200	#5-265     
RPREAD	= 000070	#5-270      31-2206   
RPSET 	  007342 R	 26-1830   #30-2153   
RPTRE 	= 040000	#5-262      31-2219    32-2306   
RPUNIT	= 000007	#5-276     
RPWC  	= 176702	#5-272     *31-2211   *32-2298   
RPWNXT	  007626 R	#32-2297    32-2315   
RPWRIT	= 000060	#5-269      32-2293   
RPWRT 	  007546 R	 26-1830   #32-2279   
RP4CHK	  003414 R	#16-1037   
RP6CHK	  003460 R	 16-1039    16-1046   #16-1051   
RQSKLR	  004662 R	 19-1204    19-1214    20-1226    20-1289    20-1297   #21-1315   
RQSTSK	  005334 R	 21-1326    21-1379    21-1396   #22-1407   
RQSTS1	  004336 R	 19-1201   #19-1213   
RXBAD1	  006716 R	 26-1829   #28-1884   
RXBAD2	  006716 R	 26-1829   #28-1885   
RXBBLK	  006720 R	#28-1896    28-2004    28-2004   
RXBBLX	  007060 R	 28-1882   #28-1971   
RXBMSZ	  007112 R	 26-1829   #28-2008   
RXBNXT	  007100 R	#28-1999    28-2009   
RXBNX1	  007104 R	 28-1995   #28-2005   
RXBOOT	  006660 R	 26-1829   #28-1866    28-1882    28-1946    28-1965    28-2004    28-2004    28-2020   
RXCS  	= 177170	#5-244     *28-1935   *28-1939    28-1955    29-2046   *29-2091   *29-2130   *29-2134   
RXDB  	= 177172	#5-257     *28-1935   *28-1939    28-1955   *29-2091   *29-2130   *29-2134   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 8

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

RXDONE	= 000040	#5-248      28-1944    28-1952    29-2088    29-2139   
RXEMPT	= 000002	#5-252      28-1950   
RXERR 	= 100000	#5-245      28-1944    29-2139   
RXFILL	= 000000	#5-251      29-2086   
RXFUNC	= 000016	#5-250     
RXGO  	= 000001	#5-256      28-1875    28-1950    29-2045    29-2086   
RXINIT	= 040000	#5-246     
RXREAD	= 000006	#5-254      28-1875   
RXRERR	= 000016	#5-255     
RXSET 	  006650 R	 26-1829   #27-1838   
RXSETX	  006654 R	#27-1849   
RXTREQ	= 000200	#5-247      28-1952    29-2088   
RXUNIT	= 000020	#5-249      28-1873    29-2043   
RXWBLK	  007202 R	 29-2065    29-2065   #29-2080   
RXWNXT	  007162 R	#29-2060    29-2068   
RXWRIT	= 000004	#5-253      29-2045   
RXWRT 	  007130 R	 26-1829   #29-2034   
R$$11M	= 000001	#1-25      
R$$20F	= 000001	#1-24      
SAVE  	  001166 R	#8-446      8-479      22-1429    24-1581    36-2544   
SAVLMT	  001162 R	#7-439      9-633     
SCD   	= 000040	#4-153     
SETCTY	  003006 R	#14-921    
SETDH 	  003174 R	#14-965    
SETDL 	  003136 R	 14-924    #14-956    
SETFIL	  002056 R	 9-591      9-600     #9-607     
SETRXF	  004544 R	 20-1273   #20-1279   
SF.FX 	= ******  GX	 15-1023   
SOMRXF	  004656 R	 20-1281   #20-1307   
SPSAVE	  000000 R	#6-337     *11-858     13-887    
STAT  	= 174434	#4-153     
STATUS	= 000022	#4-153     
STSW0 	= ******  GX	*14-952    
STSW1 	= ******  GX	*14-948    *14-951     21-1325   *21-1359   *21-1362   *21-1366   
SWR   	= 177570	#4-153     
SWSLLT	= 100000	#4-153     
SXBTHM	= 105755	#4-224      20-1243   
SYMNTD	  004340 R	 19-1211   #19-1216   
SYNERR	  001560 R	 8-481      8-485      8-497      8-506     #8-539     
SYSAVE	  002522 R	 10-718    #11-758    
SYSAV1	  002554 R	 11-764    #11-769    
SYSMSG	  004220 R	 18-1182   #18-1191   
SYSTRT	  004102 R	 17-1150   #18-1160   
S.DI  	= ******  GX	 10-732     15-1025   *15-1027   
S.FW  	= ******  GX	 15-1023   
TCBA  	= 177346	#5-308     *34-2364   *35-2480   
TCBAD1	= 007714 R	 26-1831   #34-2358   
TCBAD2	= 007714 R	 26-1831   #34-2359   
TCBMSZ	  010060 R	 26-1831   #34-2418   
TCBNXT	  010032 R	#34-2405    34-2419   
TCBOOT	  007710 R	 26-1831   #34-2350    34-2379    34-2412    34-2455    35-2495   
TCCM  	= 177342	#5-295     *34-2364    34-2378    34-2385    34-2395   *34-2406    35-2474   *35-2480    35-2494   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 9

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

                         35-2501    35-2511   *35-2522   
TCDT  	= 177350	#5-309      34-2385    34-2395    35-2501    35-2511   
TCENDZ	= 100000	#5-294     
TCERR 	= 100000	#5-296     
TCFUNC	= 000016	#5-300     
TCGO  	= 000001	#5-306      34-2420    35-2535   
TCRDY 	= 000200	#5-299     
TCREAD	= 000004	#5-303      34-2401   
TCREV 	= 004000	#5-297      34-2370    34-2380    34-2388    35-2486    35-2496    35-2504   
TCRNUM	= 000002	#5-302      34-2368    35-2484   
TCSATM	= 000000	#5-301     
TCSET 	  007704 R	 26-1831   #33-2338   
TCST  	= 177340	#5-293      34-2378    35-2494   
TCSTOP	= 000010	#5-304      34-2420    35-2535   
TCUNIT	= 003400	#5-298     
TCWC  	= 177344	#5-307     *34-2406   *35-2522   
TCWERR	  010310 R	 35-2528   #35-2540   
TCWNXT	  010250 R	#35-2521    35-2534   
TCWRIT	= 000014	#5-305      35-2517   
TCWRT 	  010116 R	 26-1831   #35-2473   
TENAD1	= 174410	#4-153     
TENAD2	= 174412	#4-153     
TOBM  	= 000004	#4-153     
TOD   	= 000003	#4-153     
TOIP  	= 000002	#4-153     
TOIT  	= 000001	#4-153     
TO10  	= 000200	#4-153     
TO10AD	= 174420	#4-153     
TO10BC	= 174414	#4-153     
TO10BM	= 000001	#4-153     
TO10DB	= 000400	#4-153     
TO10DN	= 100000	#4-153     
TO10DT	= 174424	#4-153     
TO10ER	= 020000	#4-153     
TO11  	= 000100	#4-153     
TO11AD	= 174422	#4-153     
TO11BC	= 174416	#4-153     
TO11BM	= 020000	#4-153     
TO11DB	= 004000	#4-153     
TO11DN	= 000200	#4-153     
TO11DT	= 174426	#4-153     
TO11ER	= 000002	#4-153     
TTYEND	= ******  GX	 14-976    
TTYEXP	= ******  GX	*14-957    *14-958    *14-959    *14-960    *14-961     14-967     21-1318   
TT.CRW	= ******  GX	 21-1325   
TT.CTY	= ******  GX	 14-948     14-951     21-1362    21-1366   
TT.OUT	= ******  GX	 21-1359   
TT.RIP	= ******  GX	 21-1325   
TYPBUF	  000062 R	#6-376      24-1545    24-1571    24-1572    25-1748   
TYPCR 	  006006 R	 24-1564   #24-1586   
TYPDAT	  006106 R	 24-1564   #24-1648   
TYPDEC	  006224 R	 24-1564   #24-1674   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 10

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

TYPDEV	  006030 R	 24-1564   #24-1609   
TYPDON	  005714 R	 24-1564   #24-1569   
TYPERR	  006064 R	 24-1564   #24-1620   
TYPMAX	= 000013	 24-1553   #24-1565   
TYPMSG	  005622 R	 8-464      8-464      8-471      8-471      8-518      8-518      8-541      8-541      9-561     
                         9-561      9-573      9-573      9-601      9-601      9-603      9-603      9-672      9-672     
                         9-683      9-683      10-734     10-734     10-741     10-741     10-745     10-745     10-747    
                         10-747     11-765     11-765     18-1169    18-1169    18-1177    18-1177    18-1183    18-1183   
                         18-1193    18-1193    19-1202    19-1202    19-1212    19-1212    19-1217    19-1217    20-1231   
                         20-1231    20-1276    20-1276    20-1282    20-1282    20-1292    20-1292    20-1296    20-1296   
                         20-1300    20-1300    21-1371    21-1371    21-1372    21-1372    21-1376    21-1376    21-1399   
                         21-1399    22-1425    22-1425   #24-1542   
TYPMS1	  005642 R	#24-1551    24-1554    24-1559   
TYPNUM	  006324 R	 24-1614    24-1614    24-1651    24-1651    24-1658    24-1658    24-1661    24-1661    24-1670   
                         24-1676    24-1676   #24-1694   
TYPSAV	  006000 R	 24-1564   #24-1580   
TYPSDV	  006024 R	 24-1564   #24-1603   
TYPSTR	  006076 R	 24-1564    24-1622   #24-1640    24-1642    24-1667    24-1667   
TYPTAB	  005666 R	 24-1558    24-1558   #24-1563    24-1565   
TYPTXT	  006012 R	 24-1564   #24-1593    24-1611    24-1611   
TYPWRN	  006072 R	 24-1564   #24-1630   
UNASG1	= 000032	#4-153     
UNASG2	= 000033	#4-153     
UNASG3	= 000034	#4-153     
UNASG4	= 000035	#4-153     
UNASG5	= 000036	#4-153     
UNASG6	= 000037	#4-153     
U.ACP 	= ******  GX	*9-596      10-730    *19-1208   
U.DACP	= ******  GX	 25-1751   
U.DN  	= ******  GX	 9-564      10-726     19-1203    24-1610    25-1732   
U.LBH 	= ******  GX	*16-1064   *16-1078   
U.LBN 	= ******  GX	*16-1063   *16-1077   
U.RP  	= ******  GX	 9-563      10-722    *15-1006   
U.SZ  	= ******  GX	 9-583      10-749     15-1015    25-1737   
U.UN  	= ******  GX	 9-565      10-726    *15-998     16-1040    19-1203    24-1613    25-1734   
U.VA  	= ******  GX	 9-592      10-724     10-743     19-1205   
WBFLAG	  000046 R	#6-349      8-529     *12-868    
WEFLAG	  000060 R	#6-363      18-1167   *32-2323   
WEP   	= 000010	#4-153     
WRNMSG	  001445 R	 24-1631   #24-1635   
WRTERR	  007674 R	 29-2141    32-2287    32-2307    32-2309   #32-2322    35-2541   
WSFLAG	  000047 R	#6-351     *8-455      8-529     *12-866    
WTSAVE	  002714 R	#12-865     12-876    
ZSTOP 	= 040000	#4-153     
$BTMSK	= ******  GX	*14-943    
$DIV  	= ******  GX	 9-584      9-584      15-1016    15-1016    30-2167    30-2167   
$DSW  	= ******  GX	 10-727     22-1424    25-1781   
$UNIT 	= ******  GX	*14-945    
$$    	= 000037	#8-464      8-464     #8-471      8-471     #8-478      8-478     #8-480      8-480     #8-484     
                         8-484     #8-494      8-494     #8-505      8-505     #8-518      8-518     #8-541      8-541     
                        #9-557      9-557     #9-561      9-561     #9-573      9-573     #9-584      9-584     #9-595     
                         9-595     #9-599      9-599     #9-601      9-601     #9-603      9-603     #9-627      9-627     
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 11

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

                        #9-661      9-661     #9-670      9-670     #9-672      9-672     #9-683      9-683     #9-686     
                         9-686     #10-734     10-734    #10-737     10-737    #10-741     10-741    #10-745     10-745    
                        #10-747     10-747    #11-765     11-765    #12-875     12-875    #15-995     15-995    #15-1004   
                         15-1004   #15-1016    15-1016   #16-1061    16-1061   #17-1152    17-1152   #18-1163    18-1163   
                        #18-1169    18-1169   #18-1177    18-1177   #18-1183    18-1183   #18-1193    18-1193   #19-1202   
                         19-1202   #19-1207    19-1207   #19-1210    19-1210   #19-1212    19-1212   #19-1217    19-1217   
                        #20-1231    20-1231   #20-1240    20-1240   #20-1276    20-1276   #20-1282    20-1282   #20-1292   
                         20-1292   #20-1296    20-1296   #20-1300    20-1300   #21-1371    21-1371   #21-1372    21-1372   
                        #21-1376    21-1376   #21-1394    21-1394   #21-1399    21-1399   #22-1425    22-1425   #24-1558   
                         24-1558   #24-1611    24-1611   #24-1614    24-1614   #24-1651    24-1651   #24-1658    24-1658   
                        #24-1661    24-1661   #24-1667    24-1667   #24-1676    24-1676   #24-1712    24-1712   #28-1897   
                         28-1897   #28-1898    28-1898   #28-2004    28-2004   #29-2065    29-2065   #29-2081    29-2081   
                        #29-2082    29-2082   #30-2167    30-2167   
$$$   	= 001367 R	#8-464      8-464     #8-471      8-471     #8-518      8-518     #8-541      8-541     #9-561     
                         9-561     #9-573      9-573     #9-601      9-601     #9-603      9-603     #9-672      9-672     
                        #9-683      9-683     #10-734     10-734    #10-741     10-741    #10-745     10-745    #10-747    
                         10-747    #11-765     11-765    #18-1169    18-1169   #18-1177    18-1177   #18-1183    18-1183   
                        #18-1193    18-1193   #19-1202    19-1202   #19-1212    19-1212   #19-1217    19-1217   #20-1231   
                         20-1231   #20-1276    20-1276   #20-1282    20-1282   #20-1292    20-1292   #20-1296    20-1296   
                        #20-1300    20-1300   #21-1371    21-1371   #21-1372    21-1372   #21-1376    21-1376   #21-1399   
                         21-1399   #22-1425    22-1425   
$$$ADR	= 006630 R	#26-1829    26-1829    26-1829    26-1829    26-1829    26-1829    26-1829    26-1829    26-1829   
                         26-1829   #26-1830    26-1830    26-1830    26-1830    26-1830    26-1830    26-1830    26-1830   
                         26-1830    26-1830   #26-1831    26-1831    26-1831    26-1831    26-1831    26-1831    26-1831   
                         26-1831    26-1831    26-1831   
$$$ARG	= 000005	#8-462      8-462     #8-462      8-462     #8-462      8-462     #8-462      8-462      8-462     
                         8-462      8-462      8-462      8-462      8-462      8-462      8-462      8-462     #8-465     
                         8-465      8-465      8-465      8-465      8-465      8-465      8-465      8-465      8-465     
                         8-465      8-465     #9-555      9-555     #9-555      9-555     #9-555      9-555     #9-555     
                         9-555      9-555      9-555      9-555      9-555      9-555      9-555      9-555      9-555     
                         9-555     #10-726     10-726    #10-726     10-726    #10-726     10-726    #10-726     10-726    
                         10-726     10-726     10-726     10-726     10-726     10-726     10-726     10-726     10-726    
                        #19-1203    19-1203   #19-1203    19-1203   #19-1203    19-1203   #19-1203    19-1203    19-1203   
                         19-1203    19-1203    19-1203    19-1203    19-1203    19-1203    19-1203    19-1203   #21-1338   
                         21-1338    21-1338    21-1338    21-1338    21-1338    21-1338    21-1338    21-1338    21-1338   
                         21-1338   #24-1572    24-1572    24-1572    24-1572    24-1572    24-1572    24-1572    24-1572   
                         24-1572    24-1572    24-1572    24-1572   #25-1778    25-1778    25-1778    25-1778    25-1778   
                         25-1778    25-1778    25-1778    25-1778    25-1778    25-1778    25-1778   
$$$GLB	= ******	 11-759     11-759     11-759     11-759     11-759     11-759     11-759     11-759    
$$$OST	= 000020	#11-759     11-759     11-759    #11-759     11-759     11-759    #11-759     11-759     11-759    
                        #11-759     11-759     11-759    #11-759     11-759     11-759    #11-759     11-759     11-759    
                        #11-759     11-759     11-759    #11-759     11-759     11-759    #11-759    
$$$T1 	= 000013	#8-465      8-465     #24-1572    24-1572   #25-1778    25-1778   
$$$T2 	= 000001	#22-1422    22-1422   
.BRCLK	= 005000	#4-153     
.BTPRM	= ******  GX	*13-914     17-1147    21-1320    22-1409   
.CECLK	= 004000	#4-153     
.CLRMR	= 006000	#4-153     
.CLRUN	= 010000	#4-153     
.COMEF	= ******  GX	 11-763     21-1333    21-1335    21-1344    21-1378   
.CONBT	= 012000	#4-153     
.CSHRG	= 164000	#4-153     
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 12

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

.DATE3	= ******  GX	*18-1161   
.DQPBA	= ******  GX	*14-950    
.DRLTC	= 015000	#4-153     
.DSACF	= 066000	#4-153     
.DSIOJ	= 065000	#4-153     
.EIOJA	= 067000	#4-153     
.FEMOD	= ******  GX	*21-1351   
.GFNR 	= 102000	#4-153     
.INICL	= 070000	#4-153     
.IRLTC	= 014000	#4-153     
.KLIWD	= ******  GX	*22-1421   
.KLNMD	= ******  GX	 21-1346    21-1349    21-1351   *21-1355    21-1360    21-1369    21-1381    21-1383   
.KLNSW	= ******  GX	*21-1349   
.LCRDL	= 052000	#4-153     
.LCRDR	= 051000	#4-153     
.LCRM1	= 057000	#4-153     
.LCRM2	= 056000	#4-153     
.LCRM3	= 055000	#4-153     
.LCRM4	= 054000	#4-153     
.LCRM5	= 053000	#4-153     
.LDAR 	= 077000	#4-153     
.LDBRL	= 043000	#4-153     
.LDBRR	= 042000	#4-153     
.LDCK1	= 046000	#4-153     
.LDCK2	= 047000	#4-153     
.LDDIS	= 045000	#4-153     
.LDRJD	= 064000	#4-153     
.LDRJV	= 063000	#4-153     
.LDRM1	= 060000	#4-153     
.LDRM2	= 061000	#4-153     
.LDRM3	= 062000	#4-153     
.LDSEL	= 044000	#4-153     
.MEMRS	= 076000	#4-153     
.NOERR	= ******  GX	*11-770    *17-1151   
.PCAB1	= 150000	#4-153     
.PCAB2	= 151000	#4-153     
.PCAB3	= 152000	#4-153     
.PCAB4	= 153000	#4-153     
.PRDTE	= ******  GX	*17-1139    18-1174   
.PRSTA	= ******  GX	*17-1143   *18-1176   
.PUDBA	= ******  GX	 9-582      10-720     15-1014    25-1730   
.PUDEA	= ******  GX	 10-750     25-1738   
.RCRM1	= 147000	#4-153     
.RCRM2	= 146000	#4-153     
.RCRM3	= 145000	#4-153     
.RCRM4	= 144000	#4-153     
.RCSPF	= 141000	#4-153     
.RDJ14	= 134000	#4-153     
.RDJ71	= 135000	#4-153     
.RDMAB	= 133000	#4-153     
.RPADR	= ******  GX	 20-1249    20-1268    20-1280    20-1284    20-1302   *20-1308   
.SECLK	= 003000	#4-153     
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 13

SYMBOL CROSS REFERENCE                                  CREF         

SYMBOL	VALUE		REFERENCES

.SERFG	= ******  GX	*18-1162   
.SETMR	= 007000	#4-153     
.SETRN	= 011000	#4-153     
.SSCLK	= 002000	#4-153     
.STDTA	= ******  GX	 15-1018   
.STDTZ	= ******  GX	 15-1020   
.STPCL	= 000000	#4-153     
.STRCL	= 001000	#4-153     
.VERNO	= ******  GX	 18-1192   
.WRMBX	= 071000	#4-153     
..DTP2	= ******  GX	 17-1152    17-1152   
..ENB0	= ******  GX	 18-1163    18-1163   
..FSTD	= ******  GX	 25-1752   
..STIN	= ******  GX	 21-1394    21-1394   
SAVE       CREATED BY  MACRO  ON 16-JAN-78 AT 19:43	PAGE 14

MACRO CROSS REFERENCE                                   CREF         

MACRO NAME	REFERENCES

ALUN$S		#4-151     #8-462     #9-555     #10-726    #19-1203   
CALL  		#1-23      #4-152      8-464      8-471      8-478      8-480      8-484      8-494      8-505      8-518     
                 8-541      9-557      9-561      9-573      9-584      9-595      9-599      9-601      9-603      9-627     
                 9-661      9-670      9-672      9-683      9-686      10-734     10-737     10-741     10-745     10-747    
                 11-765     12-875     15-995     15-1004    15-1016    16-1061    17-1152    18-1163    18-1169    18-1177   
                 18-1183    18-1193    19-1202    19-1207    19-1210    19-1212    19-1217    20-1231    20-1240    20-1276   
                 20-1282    20-1292    20-1296    20-1300    21-1371    21-1372    21-1376    21-1394    21-1399    22-1425   
                 24-1558    24-1611    24-1614    24-1651    24-1658    24-1661    24-1667    24-1676    24-1712    28-1897   
                 28-1898    28-2004    29-2065    29-2081    29-2082    30-2167   
CLEF$S		#4-151      21-1316    21-1340   
DIR$  		#8-462      8-462     #8-465      8-465     #9-555      9-555     #10-726     10-726    #11-759     11-759    
                #19-1203    19-1203   #21-1316    21-1316   #21-1338    21-1338   #21-1339    21-1339   #21-1340    21-1340   
                #21-1395    21-1395   #22-1422    22-1422   #22-1434    22-1434   #24-1572    24-1572   #25-1778    25-1778   
DRIVER		#26-1798   #26-1829   #26-1830   #26-1831   
ERROR 		#4-171     #8-518     #8-541     #9-561     #9-573     #9-601     #9-672     #9-683     #10-734    #10-741    
                #10-745    #11-765    #18-1169   #21-1399   
ERR$  		#8-462     #8-465     #9-555     #10-726    #11-759    #19-1203   #21-1316   #21-1338   #21-1339   #21-1340   
                #21-1395   #22-1422   #22-1434   #24-1572   #25-1778   
EXIT$S		#4-151     #22-1434   
GTIM$S		#4-151     #11-759    
MFPI  		#4-152      16-1054    16-1055    17-1104    17-1105    17-1109    17-1110   
MFPS  		#4-152     
MOV$  		#8-462     #8-462     #8-462     #8-462     #8-462     #8-465     #8-465     #8-465     #8-465     #8-465     
                #8-465     #8-465     #8-465     #9-555     #9-555     #9-555     #9-555     #9-555     #10-726    #10-726    
                #10-726    #10-726    #10-726    #11-759    #11-759    #19-1203   #19-1203   #19-1203   #19-1203   #19-1203   
                #21-1316   #21-1316   #21-1338   #21-1338   #21-1338   #21-1338   #21-1338   #21-1339   #21-1339   #21-1340   
                #21-1340   #21-1395   #21-1395   #22-1422   #22-1422   #24-1572   #24-1572   #24-1572   #24-1572   #24-1572   
                #24-1572   #24-1572   #24-1572   #24-1572   #25-1778   #25-1778   #25-1778   #25-1778   #25-1778   #25-1778   
                #25-1778   #25-1778   #25-1778   #25-1778   #25-1778   
MRKT$S		#4-151      21-1338   
MTPI  		#4-152      16-1087    16-1088    17-1132    17-1133    17-1145    17-1146   
MTPS  		#4-152     #16-1056   #16-1057   #17-1106   #17-1107   #17-1111   #17-1112   
MVB$  		#8-465     #8-465     #22-1422   #22-1422   #24-1572   #24-1572   #25-1778   #25-1778   
NBL$  		#8-462     #8-462     #9-555     #9-555     #10-726    #10-726    #19-1203   #19-1203   
OFF$  		#11-759     11-759     11-759     11-759     11-759     11-759     11-759     11-759     11-759    
POP   		#4-152     #10-738    #13-891    #24-1574   #24-1575   #24-1714   #28-1961   #29-2145   #30-2170   
PUSH  		#4-152     #8-464     #8-471