Google
 

Trailing-Edge - PDP-10 Archives - bb-x141b-bb - save.lst
There are 2 other files named save.lst in the archive. Click here to see a list.
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13
TABLE OF CONTENTS

    19-    2	TITLE PAGE
    20-   78	GENERAL DESCRIPTION OF SAVE FUNCTION
    21-  150	MACROS AND PARAMETERS
    22-  249	DEVICE REGISTER DEFINITIONS
    23-  348	SAVE TASK IMPURE DATA AREA
    24-  404	PURE DATA
    25-  458	PARSE COMMAND LINE
    26-  559	SETUP SAVE FILE
    27-  728	DISMOUNT ALL MOUNTED VOLUMES
    28-  765	SAVE SYSTEM STATE
    29-  872	WRITE SAVE FILE AND BOOT
    30-  889	RESTORE SYSTEM STATE
    31-  940	RESTORE -- SETUP CTY LINE # AND DH-11 TABLES
    32- 1028	RESTORE -- REDIRECT SY0: TO BOOT DEVICE
    33- 1081	RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S
    34- 1143	RESTORE -- CHECK ALL THE DTE-20'S
    35- 1208	RESTORE -- RESTART SYSTEM AND TYPE HERALD
    36- 1251	RESTORE -- TYPE SY0: REDIRECT MESSAGE AND MOUNT SY0:
    37- 1303	RESTORE -- READ HOM BLOCKS ON BOOT DB
    38- 1394	RESTORE -- CKECK STATE OF KLINIK LINE
    39- 1492	RESTORE -- REQUEST KL INITIALIZATION TASK AND/OR EXIT
    40- 1526	COMMAND PARSER ROUTINES
    41- 1610	TYPEOUT ROUTINES
    42- 1808	FILE I/O ROUTINES
    43- 1881	DRIVER TABLES
    44- 1923	RX-11 FLOPPY DISK ROUTINES
    45- 1942	RX-11 BOOTSTRAP
    46- 2113	RX-11 WRITE ROUTINE
    47- 2238	RP04/RP06 DISK ROUTINES
    48- 2271	RP04/RP06 BOOTSTRAP
    49- 2357	RP04/RP06 WRITE ROUTINE
    50- 2415	TC-11 DECTAPE ROUTINES
    51- 2431	TC-11 BOOTSTRAP
    52- 2548	TC-11 WRITE ROUTINE
    53- 2632	CHK11 -  ONCE ONLY SYSTEM DIAGNOSTIC  25 NOV 80
    56- 2751	CHK11 MACRO'S
    59- 2885	DEFINE DEVICE BLOCKS FOR EACH NODE TYPE
    60- 2902	DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS
    66- 3048	CHECK MEMORY - SLIDING BIT PATTERN
    69- 3153	CHECK KW11-L HDW
    72- 3229	CHECK SYSTEM FOR EXISTENCE OF OPTIONS
    74- 3379	BIT SET/BIT CLEAR TEST
    75- 3426	PRINT DEVICE ID ROUTINE
    76- 3461	ROUTINE TO FIND DEVICE INTERRUPT LEVEL
    77- 3494	CHECK INTERRUPTS AND FIND DEVICE LEVEL
    80- 3607	HERE ON AN INTERRUPT WHILE IN CHK11
    81- 3657	CHECK DH11 HDW
    82- 3833	CHECK DL11-E HDW
    83- 3856	CHECK DL11-A HDW
    84- 3878	CHECK DM11-BB HDW
    85- 3919	CHECK DTE20 HARDWARE
    86- 3953	CHECK CD11 HARDWARE
    87- 3977	CHECK LP11 HARDWARE
    88- 3998	CHECK THE LP20 HARDWARE
    89- 4026	CHECK RH11 HARDWARE
    90- 4039	CHECK TC11 HARDWARE
    91- 4068	RX11 CHECKING
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13
TABLE OF CONTENTS

    93- 4096	CK11SC ROUTINE
    98- 4248	END STATEMENT
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 17
DTE20 HARDWARE BITS

    701						.LIST	MEB
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 19
DTE20 HARDWARE BITS

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

     58					;	004	01-JUL-77	R. BELANGER	ADD KLINIK EVENT LOGGING
     59					;	005	10-NOV-77	R. BELANGER	ADD CODE TO RESET DL11'S (SETDL)
     60					;	006	09-MAY-78	R. BELANGER	MODIFY "MNTSY" TO MOUNT A
     61					;						SECOND FLOPPY
     62					;	007	25-JUN-79	K. LEFEBVRE	ADD DEFAULT BIT TO
     63					;						.KLIWD INITIALIZATION
     64					;   TCO 4.2333	16-JUL-79	R. BELANGER	ADD KL10 ENVIRONMENTAL
     65					;						REPORTING SUPPORT.
     66					;						BRING SAVE VERSION IN LINE WITH
     67					;						RSX-20F VERSION.
     68					;  TCO 4.1.1091	12-FEB-80	R. BELANGER	FIX MISSING DM-11/BB'S
     69					;  TCO 4.1.1138	08-APR-80	R. BELANGER	RESET KLINIK DL-11E IF
     70					;						NOT ASSERTING CARRIER AT START UP
     71					;	008	13-MAR-81	S. LEAPLINE	ADD CHK11 REPORTING
     72					;	009	08-JUL=81	S. LEAPLINE	ADD WARNING MESSAGE FOR MISSING
     73					;						KLINIK
     74					;  TCO [******] 18-JUN-84	M. RUDENKO	ADD RP SERIAL NUMBERS FETCH
     75					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 20
TITLE PAGE

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

    134					; INDICATES SYSTEM INITIALIZATION IS NECCESARY (BP.LD1!BP.LD0 = 00 OR 11)
    135					; A REQUEST FOR THE SYSTEM INITIALIZATION TASK SYSINI IS MADE.
    136					; A SYSTEM RESTART MESSAGE IS ALSO PRINTED.  THE SAVE TASK THEN EXITS.
    137					;
    138					;	AVAILABLE MODIFIERS:
    139					; /WB	(OFF) WRITE BOOT
    140					; /WS	(ON)  WRITE SAVE FILE
    141					; /AB	(OFF) SAVE TO FIXED DISK ADDRESS (NEAR END OF VOLUME) (ONLY IF FTABS DEFINED)
    142					; /EX	(ON)  EXIT AFTER SAVE COMPLETE
    143					; /MO	(OFF) MOUNT VOLUME BEFORE CREATING SAVE FILE
    144					; /DM	(OFF) DISMOUNT VOLUME AFTER CREATING SAVE FILE
    145					; /RH	(ON)  READ HOM BLOCKS TO FIND RSX-20F FILE SYSTEM
    146					;
    147					;-
    148					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 21
MACROS AND PARAMETERS

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

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

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

    306		177342 			TCCM=	177342			;COMMAND REGISTER
    307		100000 				TCERR=	BIT15		;ERROR
    308		004000 				TCREV=	BIT11		;REVERSE DIRECTION (TOWARD FOWARD END-ZONE)
    309		003400 				TCUNIT=	BIT10!BIT9!BIT8	;UNIT SELECT
    310		000200 				TCRDY=	BIT7		;READY
    311		000016 				TCFUNC=	BIT3!BIT2!BIT1	;FUNCTION:
    312		000000 					TCSATM=	0*BIT1	; STOP ALL TAPE MOTION
    313		000002 					TCRNUM=	1*BIT1	; READ BLOCK NUMBERS
    314		000004 					TCREAD=	2*BIT1	; READ DATA
    315		000010 					TCSTOP=	4*BIT1	; STOP SELECTED TAPE
    316		000014 					TCWRIT=	6*BIT1	; WRITE DATA
    317		000001 				TCGO=	BIT0		;START FUNCTION
    318		177344 			TCWC=	177344			;WORD COUNT REGISTER
    319		177346 			TCBA=	177346			;BUS ADDRESS REGISTER
    320		177350 			TCDT=	177350			;DATA REGISTER
    321					;
    322					; DTE-20 DEVICE REGISTER DEFINITIONS
    323					;
    324		000774 			DTVECA=	774			;DTE-20 #0 INTERRUPT VECTOR (THEY GO DOWN!)
    325		174400 			DTEXPA=	174400			;EXTERNAL PAGE ADDRESS OF DTE #0
    326		000040 			DTEXPZ=	40			;SIZE OF ADDRESS BLOCK FOR DTE
    327					;
    328		000034 			DTSTAT=	34			;STATUS REGISTER
    329		004000 				DT11DB=	BIT11		;(READ/WRITE) TO -11 DOORBELL
    330		002000 				DTCL11=	BIT10		;(WRITE) CLEAR TO -11
    331		000040 				DTINON=	BIT5		;(WRITE) INTERRUPT ENABLE
    332		000010 				DTINOF=	BIT3		;(WRITE) INTERRUPT DISABLE
    333		000010 				DTRSMD=	BIT3		;(READ) RESTRICTED MODE
    334					;
    335					; DH-11 DEVICE REGISTER DEFINITIONS
    336					;
    337		160020 			DHEXPA=	160020			;EXTERNAL PAGE ADDRESS OF FIRST DH-11
    338		000020 			DHEXPZ=	20			;SIZE OF ADDRESS SPACE FOR ONE DH
    339					;
    340					;DM-11/BB REGISTER DEFINITIONS
    341					;
    342		170500 			DMEXPA=170500			; [4.1.1091] EXTERNAL PAGE ADDRESS OF FIRST DM-11/BB
    343					;
    344					; KL-11 LINE CLOCK REGISTER DEFINITION
    345					;
    346		177546 			LKS=	177546
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 23
SAVE TASK IMPURE DATA AREA

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

    404						.SBTTL	PURE DATA
    405					;
    406					; FILE ID BLOCK
    407					;
    408	001076	000005 	000005 		FIDBLK:	.WORD	5,5		;FILE ID 5, FIL SEQ # 5 IS SYSTEM SAVE FILE
    409					;
    410					; ATTRIBUTE CONTROL BLOCK
    411					;
    412	001102	   367 			ATCBLK:	.BYTE	-9.		;ATTRIBUTE 9 (STATISTICS BLOCK), READ
    413	001103	   010 				.BYTE	8.		;8. BYTES OF STATISTICS (FILE ADDR AND SIZE)
    414	001104	000004'				.WORD	DSKADR		;STORE IN DSKADR AND DSKSIZ
    415	001106	   000 	   000 			.BYTE	0,0		;END OF ATTRIBUTE CONTROL BLOCK
    416					;
    417					; MOUNT/DISMOUNT FUNCTION BLOCKS
    418					;
    419	001110	   001 			MNTBLK:	.BYTE	1		;FUNCTION: MOUNT
    420	001111	   001 				.BYTE	1		;LENGTH OF STRING
    421	001112	001114'				.WORD	1$		;ADDRESS OF STRING
    422	001114	   072 			1$:	.ASCII	/:/
    423						.EVEN
    424					;
    425	001116	   002 			DMTBLK:	.BYTE	2		;FUNCTION: DISMOUNT
    426	001117	   000 				.BYTE	0		;NO STRING
    427					;
    428					; TASK NAME FOR KL INITIALIZATION TASK
    429					;
    430	001120	131574 	043251 		KLINIT:	.RAD50	/...KLI/	;KL INITIALIZATION TASK NAME
    431					;
    432					; TABLE OF SPEED WORDS FOR CONSOLE DH FROM BOOT PARAMETER, BP.SPD
    433					;
    434					.MACRO SPD A,B
    435						 .WORD	<A*BIT10>!<A*BIT6>!<B>
    436					.ENDM SPD
    437	001124				DHSTAB:
    438	001124					SPD	0,0		;(0) CONSOLE NOT SPECIFIED
	001124	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    439	001126					SPD	0,0		;(1) DL-11 LINE, NO SPEED
	001126	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    440	001130					SPD	0,0		;(2) DL-11 LINE, NO SPEED
	001130	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    441	001132					SPD	3,BIT2!BIT1!BIT0 ;(3) 110 BAUD, 8 DATA BITS, 2 STOP BITS
	001132	006307 				 .WORD	<3*BIT10>!<3*BIT6>!<BIT2!BIT1!BIT0>
    442	001134					SPD	4,BIT2!BIT1	;(4) 134.5 BAUD, 7 DATA BITS, 2 STOP BITS
	001134	010406 				 .WORD	<4*BIT10>!<4*BIT6>!<BIT2!BIT1>
    443	001136					SPD	5,BIT2!BIT1!BIT0 ;(5) 150 BAUD, 8 DATA BITS, 2 STOP BITS
	001136	012507 				 .WORD	<5*BIT10>!<5*BIT6>!<BIT2!BIT1!BIT0>
    444	001140					SPD	6,BIT2!BIT1!BIT0 ;(6) 200 BAUD, 8 DATA BITS, 2 STOP BITS
	001140	014607 				 .WORD	<6*BIT10>!<6*BIT6>!<BIT2!BIT1!BIT0>
    445	001142					SPD	7,BIT1!BIT0	;(7) 300 BAUD, 8 DATA BITS, 1 STOP BIT
	001142	016703 				 .WORD	<7*BIT10>!<7*BIT6>!<BIT1!BIT0>
    446	001144					SPD	10,BIT1!BIT0	;(10) 600 BAUD, 8 DATA BITS, 1 STOP BIT
	001144	021003 				 .WORD	<10*BIT10>!<10*BIT6>!<BIT1!BIT0>
    447	001146					SPD	11,BIT1!BIT0	;(11) 1200 BAUD, 8 DATA BITS, 1 STOP BIT
	001146	023103 				 .WORD	<11*BIT10>!<11*BIT6>!<BIT1!BIT0>
    448	001150					SPD	12,BIT1!BIT0	;(12) 1800 BAUD, 8 DATA BITS, 1 STOP BIT
	001150	025203 				 .WORD	<12*BIT10>!<12*BIT6>!<BIT1!BIT0>
    449	001152					SPD	13,BIT1!BIT0	;(13) 2400 BAUD, 8 DATA BITS, 1 STOP BIT
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 24-1
PURE DATA

	001152	027303 				 .WORD	<13*BIT10>!<13*BIT6>!<BIT1!BIT0>
    450	001154					SPD	14,BIT1!BIT0	;(14) 4800 BAUD, 8 DATA BITS, 1 STOP BIT
	001154	031403 				 .WORD	<14*BIT10>!<14*BIT6>!<BIT1!BIT0>
    451	001156					SPD	15,BIT1!BIT0	;(15) 9600 BAUD, 8 DATA BITS, 1 STOP BIT
	001156	033503 				 .WORD	<15*BIT10>!<15*BIT6>!<BIT1!BIT0>
    452	001160					SPD	0,0		;(16) DL-11, 8 DATA BITS, NO SPEED
	001160	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    453	001162					SPD	0,0		;(17) DL-11, NO SPEED
	001162	000000 				 .WORD	<0*BIT10>!<0*BIT6>!<0>
    454
    455	001164				SAVLMT::			; +++002 SAVE IMAGE LIMITS
    456	001164	000000 	000000 			.LIMIT			; +++002
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 25
PARSE COMMAND LINE

    458						.SBTTL	PARSE COMMAND LINE
    459					;
    460					; REQUEST FOR SAVE BY MCR SAV COMMAND CALLS SAVE HERE
    461					;
    462	001170				SAVE::
    463					;
    464					; SETUP COMMAND DEFAULTS
    465					;
    466	001170	012701 	000040'			MOV	#CMDCLR,R1	;GET START OF AREA TO CLEAR
    467	001174	012705 	000024 			MOV	#CMDCLN,R5	;AND LENGTH OF AREA, IN BYTES
    468	001200				10$:
    469	001200	105021 				CLRB	(R1)+		;CLEAR A BYTE
    470	001202	077502 				SOB	R5,10$		;CLEAR 'EM ALL
    471	001204	105237 	000047'			INCB	WSFLAG		;DEFAULT TO WRITE SAVE FILE
    472	001210	105237 	000050'			INCB	EXFLAG		; AND TO EXIT WHEN DONE
    473	001214	105237 	000053'			INCB	RHFLAG		; AND TO READ HOME BLOCKS
    474	001220	105237 	000052'			INCB	DMFLAG		; AND TO DISMOUNT ALL VOLUMES
    475					;
    476					; SETUP TO READ A LINE FROM THE CTY
    477					;
    478	001224					ALUN$S	#CTYLUN,#"TT,#0	;ASSIGN CTY TO LUN 1
	001224	005046 				CLR	-(SP)
	001226	012746 	052124 			MOV	#"TT,-(SP)
	001232	012746 	000001 			MOV	#CTYLUN,-(SP)
	001236	012746 				MOV	(PC)+,-(SP)
	001240	   007 	   004 			.BYTE	7.,4
	001242	104375 				EMT	375
    479	001244	103530 				BCS	EXITA		;GIVE UP IF NO CTY!!!!
    480	001246					TYPE	^\SAV>\		;TYPE PROMPT MESSAGE
	000000	   123 	   101 	   126 		.ASCIZ	"SAV>"
	000003	   076 	   000
	001246	012746 	000000'			MOV	#$$$,-(SP)
	001252	004737 	006112'			JSR	PC,TYPMSG
    481	001256					QIOW$S	#IO.RLB,#CTYLUN,#E.FQIO,,#QIOSTS,,<#CTYBUF,#CTYBFL>
	001256	012746 	000120 			MOV	#CTYBFL,-(SP)
	001262	012746 	000230'			MOV	#CTYBUF,-(SP)
	001266	005046 				CLR	-(SP)
	001270	012746 	001064'			MOV	#QIOSTS,-(SP)
	001274	005046 				CLR	-(SP)
	001276	112716 	000001 			MOVB	#E.FQIO,(SP)
	001302	012746 	000001 			MOV	#CTYLUN,-(SP)
	001306	012746 	001000 			MOV	#IO.RLB,-(SP)
	001312	012746 				MOV	(PC)+,-(SP)
	001314	   003 	   010 			.BYTE	3,$$$T1
	001316	104375 				EMT	375
    482	001320	103502 				BCS	EXITA		;GIVE UP IF FAILURE
    483	001322	105737 	001064'			TSTB	QIOSTS+0	;ERROR STATUS
    484	001326	002477 				BLT	EXITA		;YES-- THAT'S ENOUGH
    485	001330	122737 	000003 	001065'		CMPB	#'C-100,QIOSTS+1 ;THIS TERMINATED BY ^C?
    486	001336	001473 				BEQ	EXITA		;YES-- GIVE UP FAST
    487	001340					TYPE	<"<1>">		;INSURE A <CR><LF>
	000005	   001 	   000 			.ASCIZ	""<1>""
	001340	012746 	000005'			MOV	#$$$,-(SP)
	001344	004737 	006112'			JSR	PC,TYPMSG
    488	001350	013704 	001066'			MOV	QIOSTS+2,R4	;GET # CHARACTERS TYPED AT ME
    489	001354	105064 	000230'			CLRB	CTYBUF(R4)	;CLEAR LAST BYTE OF INPUT (MAKE ASCIZZZ)
    490	001360	012704 	000230'			MOV	#CTYBUF,R4	;POINT TO START OF INPUT TO PARSE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 25-1
PARSE COMMAND LINE

    491					;
    492					; NOW TO PARSE THE LINE
    493					;
    494	001364					CALL	GETNB		;GET NON-BLANK CHARACTER
	001364	004737 	005760'			JSR	PC,GETNB
    495	001370	001677 				BEQ	SAVE		;BACK TO SAVE IF NULL COMMAND
    496	001372					CALL	GETNAM		;GET A DEVICE NAME
	001372	004737 	006002'			JSR	PC,GETNAM
    497	001376	103471 				BCS	SYNERR		;NO SUCH LUCK
    498	001400	010037 	000042'			MOV	R0,DEVNAM	;SAVE THE TYPED NAME
    499	001404	001411 				BEQ	20$		;NULL NAME-- GO ON FOR MODIFIERS
    500	001406					CALL	GETNUM		;GET UNIT NUMBER OF DEVICE (IF ANY)
	001406	004737 	006046'			JSR	PC,GETNUM
    501	001412	103463 				BCS	SYNERR		;TOO BIG-- COMPLAIN
    502	001414	110037 	000044'			MOVB	R0,DEVUNT	;SAVE THE UNIT NUMBER
    503	001420	122724 	000072 			CMPB	#':,(R4)+	; : FOLLOWING DEVICE?
    504	001424	001401 				BEQ	20$		;YES-- IGNORE IT
    505	001426	105744 				TSTB	-(R4)		;NO-- GO BACK TO LOOK AT IT AGAIN
    506					;
    507					; LOOK FOR ALL MODIFIERS
    508					;
    509	001430				20$:
    510	001430					CALL	GETNB		;SKIP BLANKS AFTER UNIT
	001430	004737 	005760'			JSR	PC,GETNB
    511	001434	001457 				BEQ	CMDONE		;END OF COMMAND-- ALL OK
    512	001436	122700 	000057 			CMPB	#'/,R0		;THIS A MODIFIER?
    513	001442	001047 				BNE	SYNERR		;NO-- BAD CHARACTER
    514	001444	105724 				TSTB	(R4)+		;YES-- SKIP OVER IT
    515	001446	012702 	000001 			MOV	#1,R2		;ASSUME NOT /-(SW)
    516	001452	122714 	000055 			CMPB	#'-,(R4)	;THIS /-(SW)?
    517	001456	001002 				BNE	30$		;NO-- GO ON
    518	001460	105724 				TSTB	(R4)+		;YES-- SKIP OVER -
    519	001462	005002 				CLR	R2		;AND SET TO CLEAR THE FLAG
    520	001464				30$:
    521	001464					CALL	GETNAM		;GET THE MODIFIER
	001464	004737 	006002'			JSR	PC,GETNAM
    522	001470	103434 				BCS	SYNERR		;TOO LONG-- GIVE UP
    523	001472	012701 	001532'			MOV	#MODTBL,R1	;GET ADDRESS OF SWITCH TABLE
    524	001476	012705 	000006 			MOV	#MODTLN,R5	; AND LENGTH OF IT
    525	001502				40$:
    526	001502	020021 				CMP	R0,(R1)+	;THIS MODIFIER MATCH?
    527	001504	001002 				BNE	50$		;NO-- LOOP FOR MORE
    528	001506	110231 				MOVB	R2,@(R1)+	;YES-- SET THE FLAG AS REQUESTED
    529	001510	000747 				BR	20$		;LOOP FOR ALL MODIFIERS
    530					;
    531	001512				50$:
    532	001512	005721 				TST	(R1)+		;NO-- SKIP OVER FLAG ADDRESS
    533	001514	077506 				SOB	R5,40$		;NO-- LOOP FOR ALL MODIFIERS
    534	001516					ERROR	<Illegal modifier /"<2>">
	000007	   011 	   111 	   154 		.ASCIZ	""<11>"Illegal modifier /"<2>""<5>""
	000012	   154 	   145 	   147
	000015	   141 	   154 	   040
	000020	   155 	   157 	   144
	000023	   151 	   146 	   151
	000026	   145 	   162 	   040
	000031	   057 	   002 	   005
	000034	   000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 25-2
PARSE COMMAND LINE

	001516	012746 	000007'			MOV	#$$$,-(SP)
	001522	004737 	006112'			JSR	PC,TYPMSG
    535	001526				EXITA:
    536	001526	000137 	005750'			JMP	EXIT		;TOO FAR TO HOP
    537					;
    538					; MODIFIER TABLE
    539					;
    540	001532				MODTBL:
    541					.IRP	ARG,<WB,WS,EX,MO,DM,RH>
    542						.ASCII	/ARG/
    543						.EVEN
    544						.WORD	ARG'FLAG
    545					.ENDM
	001532	   127 	   102 			.ASCII	/WB/
	001534	000046'				.WORD	WBFLAG
	001536	   127 	   123 			.ASCII	/WS/
	001540	000047'				.WORD	WSFLAG
	001542	   105 	   130 			.ASCII	/EX/
	001544	000050'				.WORD	EXFLAG
	001546	   115 	   117 			.ASCII	/MO/
	001550	000051'				.WORD	MOFLAG
	001552	   104 	   115 			.ASCII	/DM/
	001554	000052'				.WORD	DMFLAG
	001556	   122 	   110 			.ASCII	/RH/
	001560	000053'				.WORD	RHFLAG
    546					.IF DF FTABS
    547						.ASCII	/AB/
    548						.EVEN
    549						.WORD	ABFLAG
    550					.ENDC ; .IF DF FTABS
    551		000006 			MODTLN=<.-MODTBL>/4
    552					;
    553					; COMMAND ERRORS
    554					;
    555	001562				SYNERR:
    556	001562	010400 				MOV	R4,R0		;POINT INPUT STRING TO OUTPUT STRING
    557	001564					ERROR	<Syntax error: "<4>">
	000035	   011 	   123 	   171 		.ASCIZ	""<11>"Syntax error: "<4>""<5>""
	000040	   156 	   164 	   141
	000043	   170 	   040 	   145
	000046	   162 	   162 	   157
	000051	   162 	   072 	   040
	000054	   004 	   005 	   000
	001564	012746 	000035'			MOV	#$$$,-(SP)
	001570	004737 	006112'			JSR	PC,TYPMSG
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 26
SETUP SAVE FILE

    559						.SBTTL	SETUP SAVE FILE
    560					;
    561					; THE COMMAND STRING IS NOW PARSED.  CHECK OUT THE DEVICE HE SPECIFIED.
    562					;
    563	001574				CMDONE:
    564	001574	013701 	000044'			MOV	DEVUNT,R1	;GET SPECIFIED UNIT
    565	001600	013700 	000042'			MOV	DEVNAM,R0	;GET DEVICE SPECIFIED
    566	001604	001003 				BNE	10$		;SPECIFIED-- GO ASSIGN IT
    567	001606	012700 	054523 			MOV	#"SY,R0		;NONE-- DEFAULT TO SYSTEM DEVICE
    568	001612	005001 				CLR	R1		; SY0:
    569					;
    570	001614				10$:
    571	001614					ALUN$S	#DSKLUN,R0,R1	;ASSIGN THE DEVICE TO LUN 2
	001614	010146 				MOV	R1,-(SP)
	001616	010046 				MOV	R0,-(SP)
	001620	012746 	000002 			MOV	#DSKLUN,-(SP)
	001624	012746 				MOV	(PC)+,-(SP)
	001626	   007 	   004 			.BYTE	7.,4
	001630	104375 				EMT	375
    572	001632	103403 				BCS	DNSERR		;OOPS-- DEVICE NOT IN SYSTEM
    573	001634					CALL	FINDEV		;FIND PUD ENTRY ADDRESS FOR DEVICE
	001634	004737 	006672'			JSR	PC,FINDEV
    574	001640	103006 				BCC	DEVCHK		;OK-- CHECK THE DEVICE OUT
    575	001642				DNSERR:
    576	001642	012705 	000042'			MOV	#DEVNAM,R5	;POINT TO DEVICE NAME/UNIT #
    577	001646					ERROR	<Device "<3>" not in system>
	000057	   011 	   104 	   145 		.ASCIZ	""<11>"Device "<3>" not in system"<5>""
	000062	   166 	   151 	   143
	000065	   145 	   040 	   003
	000070	   040 	   156 	   157
	000073	   164 	   040 	   151
	000076	   156 	   040 	   163
	000101	   171 	   163 	   164
	000104	   145 	   155 	   005
	000107	   000
	001646	012746 	000057'			MOV	#$$$,-(SP)
	001652	004737 	006112'			JSR	PC,TYPMSG
    578	001656				DEVCHK:
    579	001656	016505 	000000G			MOV	U.RP(R5),R5	; BUT GET REAL DEVICE
    580	001662	016537 	000000G	000042'		MOV	U.DN(R5),DEVNAM	;SAVE THE REAL DEVICE NAME
    581	001670	116537 	000000G	000044'		MOVB	U.UN(R5),DEVUNT	;SAVE THE REAL UNIT #
    582	001676	012700 	007060'			MOV	#DRVTAB,R0	;GET ADR OF DRIVER TABLE
    583	001702				10$:
    584	001702	026037 	000000 	000042'		CMP	DRVNAM(R0),DEVNAM ;MATCH?
    585	001710	001411 				BEQ	DEVOK		;YES-- GO ON
    586	001712	062700 	000020 			ADD	#DRVSIZ,R0	;BUMP TO NEXT DRIVER ENTRY
    587	001716	020027 	007140'			CMP	R0,#DRVTAB+DRVTBZ ;BEYOND END?
    588	001722	103767 				BLO	10$		;NO-- LOOP UNTIL WE FIND DEVICE
    589	001724					ERROR	<Illegal device "<3>">
	000110	   011 	   111 	   154 		.ASCIZ	""<11>"Illegal device "<3>""<5>""
	000113	   154 	   145 	   147
	000116	   141 	   154 	   040
	000121	   144 	   145 	   166
	000124	   151 	   143 	   145
	000127	   040 	   003 	   005
	000132	   000
	001724	012746 	000110'			MOV	#$$$,-(SP)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 26-1
SETUP SAVE FILE

	001730	004737 	006112'			JSR	PC,TYPMSG
    590	001734				DEVOK:
    591	001734	023727 	000042'	041104 		CMP	DEVNAM,#"DB	;THIS AN RP04/RP06?
    592	001742	001402 				BEQ	10$		;YES-- OK
    593	001744	105037 	000053'			CLRB	RHFLAG		;NO-- DON'T READ HOM BLOCKS
    594	001750				10$:
    595	001750	010037 	000002'			MOV	R0,DRVADR	;SAVE DRIVER TABLE ENTRY ADDRESS
    596	001754	010537 	000040'			MOV	R5,PUDADR	;SAVE THE PUD ADDRESS OF THE SAVE DEVICE
    597	001760	010500 				MOV	R5,R0		;COPY THE PUD ADDRESS
    598	001762	162700 	000000G			SUB	#.PUDBA,R0	;MAKE R0 INDEX INTO THE PUD
    599	001766	012701 	000000G			MOV	#U.SZ,R1	;COMPUTE AN INDEX
    600	001772					CALL	$DIV		; INTO THE PUD
	001772	004737 	000000G			JSR	PC,$DIV
    601	001776	110037 	000045'			MOVB	R0,PUDIDX	;SAVE THE INDEX
    602					;
    603					; MOUNT THE SPECIFIED VOLUME IF /MO TYPED
    604					;
    605	002002				DEVMNT:
    606	002002	105737 	000051'			TSTB	MOFLAG		;/MO?
    607	002006	001424 				BEQ	SETFIL		;NO-- DON'T MOUNT THE DEVICE
    608	002010	005765 	000000G			TST	U.VA(R5)	;IS THE VOLUME MOUNTED?
    609	002014	001015 				BNE	MOUNTD		;YES-- GO ON
    610					;
    611	002016					CALL	FNDACP		;FIND ACP ADDRESS
	002016	004737 	006730'			JSR	PC,FNDACP
    612	002022	010265 	000000G			MOV	R2,U.ACP(R5)	;SAVE THE ADDRESS SO MOUNT DOESN'T COMPLAIN
    613					;
    614	002026	012702 	001110'			MOV	#MNTBLK,R2	;SET TO MOUNT VOLUME
    615	002032					CALL	FILMNT		;DO THE MOUNT
	002032	004737 	006750'			JSR	PC,FILMNT
    616	002036	103010 				BCC	SETFIL		;OK-- GO ON
    617	002040					ERROR	<Mount error "<7>">
	000133	   011 	   115 	   157 		.ASCIZ	""<11>"Mount error "<7>""<5>""
	000136	   165 	   156 	   164
	000141	   040 	   145 	   162
	000144	   162 	   157 	   162
	000147	   040 	   007 	   005
	000152	   000
	002040	012746 	000133'			MOV	#$$$,-(SP)
	002044	004737 	006112'			JSR	PC,TYPMSG
    618	002050				MOUNTD:
    619	002050					WARN	<Device "<3>" already mounted>
	000153	   012 	   104 	   145 		.ASCIZ	""<12>"Device "<3>" already mounted"<1>""
	000156	   166 	   151 	   143
	000161	   145 	   040 	   003
	000164	   040 	   141 	   154
	000167	   162 	   145 	   141
	000172	   144 	   171 	   040
	000175	   155 	   157 	   165
	000200	   156 	   164 	   145
	000203	   144 	   001 	   000
	002050	012746 	000153'			MOV	#$$$,-(SP)
	002054	004737 	006112'			JSR	PC,TYPMSG
    620					;
    621					; SET UP DISK ADDRESS TO SPECIFIC PLACE IF /AB (ABSOLUTE) SPECIFIED
    622					;
    623	002060				SETFIL:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 26-2
SETUP SAVE FILE

    624					.IF DF FTABS
    625						TSTB	ABFLAG		;ABSOLUTE DISK SAVE?
    626						BNE	FILABS		;YES-- SET UP ABSOLUTE FILE
    627					.ENDC ; .IF DF FTABS
    628					;	BR	FILFND		;NO-- FIND FILE (5,5)
    629					;
    630					; FIND SAVE FILE (5,5) AND EXTEND IT IF NECESSARY
    631					;
    632	002060				FILFND:
    633	002060	012701 	001076'			MOV	#FIDBLK,R1	;ADDRESS OF FILE-ID BLOCK FOR (5,5)
    634					;
    635					; DO AN ACCESS FOR EXTEND TO FIND IF FILE EXISTS AND WHERE IT IS
    636					;
    637	002064	012700 	007400 			MOV	#IO.ACE,R0	;SET TO ACCESS FOR EXTEND
    638	002070	012702 	001102'			MOV	#ATCBLK,R2	;SET UP ATTRIBUTE CONTROL BLOCK ADDRESS
    639	002074	005003 				CLR	R3		;NO EXTEND CONTROOL
    640	002076	005004 				CLR	R4		; . .
    641	002100	012705 				MOV	(PC)+,R5	;ENABLE ACCESS
    642	002102	   000 	   200 			.BYTE	0,AC.ENA	; . .
    643	002104					CALL	FILQIO		;DO IT TO (5,5)
	002104	004737 	006764'			JSR	PC,FILQIO
    644	002110	103444 				BCS	15$		;ERROR-- JUST CLOSE FILE
    645					;
    646					; FIND OUT HOW BIG THE SAVE FILE SHOULD BE AND SEE IF IT IS BIG ENOUGH
    647					;  CURRENT SIZE IS RETURNED IN DSKSIZ+0, DSKSIZ+2 BY ACCESS
    648					;
    649	002112	013704 	001166'			MOV	SAVLMT+2,R4	; +++002 GET UPPER TASK LIMIT
    650	002116	062704 	003777 			ADD	#3777,R4	; +++002 ROUND UP
    651	002122	042704 	003777 			BIC	#3777,R4	; +++002 TO NEXT K OF WORDS
    652	002126	000241 				CLC			; +++002 CLEAR SIGN BIT AND
    653	002130	006004 				ROR	R4		; +++002 CONVERT TO 32. WORD BLOCKS
    654	002132	006204 				ASR	R4		; +++002
    655	002134	006204 				ASR	R4		; +++002
    656	002136	006204 				ASR	R4		; +++002
    657	002140	006204 				ASR	R4		; +++002
    658	002142	006204 				ASR	R4		; +++002
    659	002144	010437 	000014'			MOV	R4,MEMSIZ	;SAVE THIS FOR WRITING FILE
    660	002150	006204 				ASR	R4		;CONVERT 32. WORD BLOCKS TO 64. WORD BLOCKS
    661	002152	006204 				ASR	R4		; 128. WORD BLOCKS
    662	002154	006204 				ASR	R4		; 256. WORD BLOCKS
    663	002156	105737 	000010'			TSTB	DSKSIZ+0	;IS FILE BIGGER THAN 2**16 BLOCKS????
    664	002162	003017 				BGT	15$		;YES-- CERTAINLY BIG ENOUGH
    665	002164	163704 	000012'			SUB	DSKSIZ+2,R4	;NO-- FIND HOW MUCH MORE  SPACE WE NEED
    666	002170	003414 				BLE	15$		;BIG ENOUGH-- JUST CLOSE
    667	002172	113737 	000057'	000056'		MOVB	ACFLAG,QEFLAG	;ERROR IF WE WERE HERE BEFORE
    668	002200	001010 				BNE	15$		;SO GIVE ERROR
    669					;
    670					; FILE IS NOT BIG ENOUGH-- DO AN EXTEND ON IT, EXTEND INCREMENT IN R4
    671					;
    672	002202	012700 	011400 			MOV	#IO.EXT,R0	;NOT ENOUGH-- SET TO EXTEND FILE
    673	002206	012703 				MOV	(PC)+,R3	;MAKE FILE CONTIGUOUS,
    674	002210	   000 	   205 			.BYTE	0,EX.ENA!EX.AC1!EX.FCO ; HIGH EXTEND INCREMENT= 0
    675	002212	005002 				CLR	R2		;NO ATTRIB
    676	002214	005005 				CLR	R5		; AND NO ACCESS
    677	002216					CALL	FILQIO		;DO IT TO (5,5), EXTEND INCREMENT IN R4
	002216	004737 	006764'			JSR	PC,FILQIO
    678					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 26-3
SETUP SAVE FILE

    679					; DEACCESS FILE.  R5= 0 IF EXTEND DONE, QEFLAG= -VE IF ERROR OCCURED
    680					;
    681	002222				15$:
    682	002222	012700 	010000 			MOV	#IO.DAC,R0	;DE-ACCESS FILE
    683	002226	005002 				CLR	R2		;NO ATTRIBUTE CONTROL BLOCK
    684	002230	005003 				CLR	R3		;NO EXTEND BITS
    685	002232	005004 				CLR	R4		; . .
    686	002234					CALL	FILQIO		;DO IT TO (5,5)
	002234	004737 	006764'			JSR	PC,FILQIO
    687	002240	103004 				BCC	FILCHK		;NO ERRRORS-- GO CHECK OUT THE FILE
    688	002242					ERROR	<Create SAVE file (5,5) error "<7>">
	000206	   011 	   103 	   162 		.ASCIZ	""<11>"Create SAVE file (5,5) error "<7>""<5>""
	000211	   145 	   141 	   164
	000214	   145 	   040 	   123
	000217	   101 	   126 	   105
	000222	   040 	   146 	   151
	000225	   154 	   145 	   040
	000230	   050 	   065 	   054
	000233	   065 	   051 	   040
	000236	   145 	   162 	   162
	000241	   157 	   162 	   040
	000244	   007 	   005 	   000
	002242	012746 	000206'			MOV	#$$$,-(SP)
	002246	004737 	006112'			JSR	PC,TYPMSG
    689	002252				FILCHK:
    690	002252	105237 	000057'			INCB	ACFLAG		;FLAG ONE ACCESS
    691	002256	005705 				TST	R5		;DID WE DO AN EXTEND?
    692	002260	001677 				BEQ	FILFND		;YES-- GO BACK AND RE-ACCESS
    693	002262	005000 				CLR	R0		;GET HIGH
    694	002264	153700 	000004'			BISB	DSKADR+0,R0	; DISK ADDRESS (WITHOUT SIGN-EXTEND)
    695	002270	013701 	000006'			MOV	DSKADR+2,R1	;AND ALSO LOW PART
    696	002274	001006 				BNE	FILOK		;NON-ZERO-- WE HAVE A FILE
    697	002276	005700 				TST	R0		;ZERO-- HIGH PART ZERO TOO?
    698	002300	001004 				BNE	FILOK		;NO-- FILE MUST BE CONTIGUOUS (LUCKILY)
    699	002302					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	   146 	   151 	   154
	000260	   145 	   040 	   050
	000263	   065 	   054 	   065
	000266	   051 	   040 	   156
	000271	   157 	   164 	   040
	000274	   143 	   157 	   156
	000277	   164 	   151 	   147
	000302	   165 	   157 	   165
	000305	   163 	   005 	   000
	002302	012746 	000247'			MOV	#$$$,-(SP)
	002306	004737 	006112'			JSR	PC,TYPMSG
    700	002312				FILOK:
    701	002312	013705 	000002'			MOV	DRVADR,R5	;GET ADDRESS OF DRIVER TABLE ENTRY
    702	002316					CALL	@DRVSET(R5)	;CALL PROPER ROUTINE TO SET ADDRESS
	002316	004775 	000002 			JSR	PC,@DRVSET(R5)
    703					.IF DF FTABS
    704						BR	FILSET		;SAVE ADDRESSES AND GO ON
    705					;
    706					; SAVE TO ABSOLUTE DISK ADDRESS-- SET UP DSKADR+0, DSKADR+2
    707					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 26-4
SETUP SAVE FILE

    708					FILABS:
    709						MOV	SAVLMT+2,R5	; +++002 GET UPPER TASK LIMIT
    710						ADD	#3777,R5	; +++002 ROUND UP
    711						BIC	#3777,R5	; +++002 TO NEXT K OF WORDS
    712						CLC			; +++002 CLEAR SIGN BIT AND
    713						ROR	R5		; +++002 CONVERT TO 32. WORD BLOCKS
    714						ASR	R5		; +++002
    715						ASR	R5		; +++002
    716						ASR	R5		; +++002
    717						ASR	R5		; +++002
    718						ASR	R5		; +++002
    719						MOV	R5,MEMSIZ	;SAVE THIS FOR WRITING FILE
    720						MOV	DRVADR,R5	;GET ADDRESS OF DRIVER TABLE ENTRY
    721						CALL	@DRVABS(R5)	;CALL PROPER ABSOLUTE SET ROUTINE
    722					.ENDC ; .IF DF FTABS
    723	002322				FILSET:
    724	002322	010037 	000004'			MOV	R0,DSKADR+0	;SAVE THE ADDRESS
    725	002326	010137 	000006'			MOV	R1,DSKADR+2	; BOTH HALVES
    726					;	BR	FILDMO		;GO DISMOUNT (IF /DM)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 27
DISMOUNT ALL MOUNTED VOLUMES

    728						.SBTTL	DISMOUNT ALL MOUNTED VOLUMES
    729					;
    730					; DO DISMOUNT OF ALL VOLUMES IF /DM SPECIFIED
    731					;
    732	002332				FILDMO:
    733	002332	105737 	000052'			TSTB	DMFLAG		;HE WANT IT DISMOUNTED?
    734	002336	001457 				BEQ	SYSAVE		;NO-- JUST GO SAVE SYSTEM
    735	002340	012702 	001116'			MOV	#DMTBLK,R2	;YES-- SET TO DISMOUNT
    736	002344	012705 	000000G			MOV	#.PUDBA,R5	;START AT BEGINNINING OF THE PUD
    737	002350				FILDM1:
    738	002350	020565 	000000G			CMP	R5,U.RP(R5)	;REDIRECTED?
    739	002354	001043 				BNE	FILDMX		;YES-- WE'LL FIND THE REAL ONE
    740	002356	005765 	000000G			TST	U.VA(R5)	;IS VOLUME MOUNTED?
    741	002362	001440 				BEQ	FILDMX		;NO-- JUST GO ON
    742	002364					ALUN$S	#DSKLUN,U.DN(R5),U.UN(R5) ;YES-- ASSIGN THIS DEVICE
	002364	016546 	000000G			MOV	U.UN(R5),-(SP)
	002370	016546 	000000G			MOV	U.DN(R5),-(SP)
	002374	012746 	000002 			MOV	#DSKLUN,-(SP)
	002400	012746 				MOV	(PC)+,-(SP)
	002402	   007 	   004 			.BYTE	7.,4
	002404	104375 				EMT	375
    743	002406	013700 	000000G			MOV	$DSW,R0		;(IN CASE OF ERROR)
    744	002412	103405 				BCS	DMOERR		;OOPS-- THIS CAN'T HAPPEN!!!!
    745					;
    746	002414				FILDM2:
    747	002414					PUSH	R5		;SAVE THE PUD POINTER
	002414	010546 				MOV	R5,-(SP)
    748	002416					CALL	FILMNT		;DO THE DISMOUNT FUNCTION
	002416	004737 	006750'			JSR	PC,FILMNT
    749	002422					POP	R5		;RESTORE THE POINTER
	002422	012605 				MOV	(SP)+,R5
    750	002424	103004 				BCC	FILDM3		;OK-- GO ON TO NEXT ENTRY
    751	002426				DMOERR:
    752	002426					ERROR	<"<3>" dismount error "<7>">
	000310	   011 	   003 	   040 		.ASCIZ	""<11>""<3>" dismount error "<7>""<5>""
	000313	   144 	   151 	   163
	000316	   155 	   157 	   165
	000321	   156 	   164 	   040
	000324	   145 	   162 	   162
	000327	   157 	   162 	   040
	000332	   007 	   005 	   000
	002426	012746 	000310'			MOV	#$$$,-(SP)
	002432	004737 	006112'			JSR	PC,TYPMSG
    753	002436				FILDM3:
    754	002436	005765 	000000G			TST	U.VA(R5)	;DID IT REALLY DISMOUNT THE VOLUME?
    755	002442	001404 				BEQ	FILDM4		;YES-- OK
    756	002444					ERROR	<"<3>" cannot be dismounted>
	000335	   011 	   003 	   040 		.ASCIZ	""<11>""<3>" cannot be dismounted"<5>""
	000340	   143 	   141 	   156
	000343	   156 	   157 	   164
	000346	   040 	   142 	   145
	000351	   040 	   144 	   151
	000354	   163 	   155 	   157
	000357	   165 	   156 	   164
	000362	   145 	   144 	   005
	000365	   000
	002444	012746 	000335'			MOV	#$$$,-(SP)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 27-1
DISMOUNT ALL MOUNTED VOLUMES

	002450	004737 	006112'			JSR	PC,TYPMSG
    757	002454				FILDM4:
    758	002454					TYPE	<["<3>" dismounted]"<1>">
	000366	   133 	   003 	   040 		.ASCIZ	"["<3>" dismounted]"<1>""
	000371	   144 	   151 	   163
	000374	   155 	   157 	   165
	000377	   156 	   164 	   145
	000402	   144 	   135 	   001
	000405	   000
	002454	012746 	000366'			MOV	#$$$,-(SP)
	002460	004737 	006112'			JSR	PC,TYPMSG
    759	002464				FILDMX:
    760	002464	062705 	000000G			ADD	#U.SZ,R5	;OK-- BUMP TO NEXT ENTRY IN THE PUD
    761	002470	020527 	000000G			CMP	R5,#.PUDEA	;AT THE END OF THE PUD?
    762	002474	103725 				BLO	FILDM1		;NOPE-- BACK FOR SOME MORE
    763					;	BR	SYSAVE		;YES-- ON TO SAVE THE SYSTEM
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 28
SAVE SYSTEM STATE

    765						.SBTTL	SAVE SYSTEM STATE
    766					;
    767					; GET CURRENT TIME STUFF FOR TYPE-OUT
    768					;
    769	002476				SYSAVE:
    770	002476					GTIM$S	#GTIMBF		;GET CURRENT TIME PARAMETERS FOR SAVE FILE
	002476	012746 	000020'			MOV	#GTIMBF,-(SP)
	002502	012746 				MOV	(PC)+,-(SP)
	002504	   073 	   002 			.BYTE	59.,2
	002506	104375 				EMT	375
    771					;
    772					; SEE IF QUEUED PROTOCOL IS RUNNING.  IF SO, WE CANNOT CONTINUE.
    773					;
    774	002510	032737 	000000C	000002G		BIT	#EF.PR1!EF.PR2,.COMEF+2 ;IS ANY PROTOCOL RUNNING ?
    775	002516	001404 				BEQ	SYSAV1		;NO-- ALL OK
    776	002520					ERROR	<DTE-20 Protocol running>
	000406	   011 	   104 	   124 		.ASCIZ	""<11>"DTE-20 Protocol running"<5>""
	000411	   105 	   055 	   062
	000414	   060 	   040 	   120
	000417	   162 	   157 	   164
	000422	   157 	   143 	   157
	000425	   154 	   040 	   162
	000430	   165 	   156 	   156
	000433	   151 	   156 	   147
	000436	   005 	   000
	002520	012746 	000406'			MOV	#$$$,-(SP)
	002524	004737 	006112'			JSR	PC,TYPMSG
    777					;
    778					; RAISE PRIORITY TO 7 TO LOCK OUT INTERRUPTS
    779					;
    780	002530				SYSAV1:
    781	002530	012737 	000401 	000000G		MOV	#401,.NOERR	;DIS-ALLOW KL ERROR REPORTING
    782	002536					.INH			;;;AND RAISE TO PRIORITY 7
	002536	013746 	177776 			MOV	PS,-(SP)
	002542	112737 	000340 	177776 		MOVB	#PR7,@#PS	;;
    783					;
    784					; TURN THE CLOCK OFF
    785					;
    786	002550	005037 	177546 			CLR	@#LKS		;;;CLEAR CLOCK STATUS
    787					;
    788					; FIX UP BOTH BOOTS TO POINT TO US AND THE RIGHT FILE
    789					;
    790	002554	013705 	000002'			MOV	DRVADR,R5	;;;GET DRIVER TABLE ENTRY ADDRESS
    791	002560	013775 	000014'	000010 		MOV	MEMSIZ,@DRVMSZ(R5) ;;;SET SIZE OF MEMORY
    792	002566	013775 	000004'	000012 		MOV	DSKADR+0,@DRVAD1(R5) ;;;SET FIRST HALF OF DISK ADDRESS
    793	002574	013775 	000006'	000014 		MOV	DSKADR+2,@DRVAD2(R5) ;;; AND SECOND HALF
    794					.IF DF M$$MGE
    795						MOV	UPAR0,@DRVUP0(R5) ;;;ALSO OUR PAGE ADDRESS
    796					.ENDC
    797					;
    798					; SET BOOT PARAMTER IN R0 WITH LOAD FLAGS= 01 (SO KLINIT WON'T BE CALLED)
    799					;
    800	002602	113700 	000044'			MOVB	DEVUNT,R0	;;;GET THE DEVICE UNIT #
    801	002606	000300 				SWAB	R0		;;;SET IT TO BITS 10-8
    802	002610	056500 	000016 			BIS	DRVBTP(R5),R0	;;;SET PROPER BIT IN BOOT PARAMETER WORD
    803	002614	052700 	000002 			BIS	#BP.LD0,R0	;;;SET FLAGS= 01
    804					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 28-1
SAVE SYSTEM STATE

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

    860					;	SP+16
    861					;	SP+20	KT-11 REGISTERS
    862					;	...
    863					;	SP+116
    864					;
    865					;	SP+NN	(BOTTOM OF STACK) USER PS FROM .INH
    866					;
    867					; SO LET'S SAVE SP IN SPSAVE
    868					;
    869	002664	010637 	000000'			MOV	SP,SPSAVE	;;;SAVE SP UNTIL WE RESTORE
    870					;	BR	WTSAVE		;;;NOW WRITE SAVE FILE AND BOOT
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 29
WRITE SAVE FILE AND BOOT

    872						.SBTTL	WRITE SAVE FILE AND BOOT
    873					;
    874					; WRITE SAVE FILE.  DSK ADDRESS IS IN DSKADR+0 AND DSKADR+2
    875					;
    876	002670				WTSAVE:
    877	002670	105337 	000047'			DECB	WSFLAG		;;;WRITE SAVE FILE?
    878	002674	002012 				BGE	10$		;;;YES-- GO DO IT
    879	002676	105337 	000046'			DECB	WBFLAG		;;; /WB SPECIFIED?
    880	002702	002414 				BLT	RESTORE		;;;NO-- ALL DONE WITH SAVE-- BRING SYSTEM BACK UP
    881	002704	005037 	000004'			CLR	DSKADR+0	;;;YES-- WRITE BOOT TO BLOCK 0
    882	002710	005037 	000006'			CLR	DSKADR+2	;;; . . .
    883	002714	012737 	000010 	000014'		MOV	#256.*2/100,MEMSIZ ;;;GET # 100 BYTE BLOCKS TO WRITE
    884	002722				10$:
    885	002722	013705 	000002'			MOV	DRVADR,R5	;;;GET ADDRESS OF DEVICE DRIVER TABLE ENTRY
    886	002726					CALL	@DRVWRT(R5)	;;;CALL PROPER WRITE ROUTINE
	002726	004775 	000006 			JSR	PC,@DRVWRT(R5)
    887	002732	000756 				BR	WTSAVE		;;;GO BACK AND DO WRITE AGAIN
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 30
RESTORE SYSTEM STATE

    889						.SBTTL	RESTORE SYSTEM STATE
    890					;
    891					; TRANSFER HERE ON TWO CONDITIONS:
    892					;	1) FROM BOOTSTRAP WITH FRESHLY BOOT'ED SYSTEM
    893					;	2) FROM SAVE COMPLETING A WRITE OF THE SYSTEM IMAGE
    894					;
    895					; THE ACTION IS THE SAME IN EITHER CASE.
    896					;
    897	002734				RESTORE::
    898	002734	013706 	000000'			MOV	SPSAVE,SP	;;;RESTORE OUR STACK
    899					; SEE IF CHK11 IS TO RUN
    900	002740	017600 	000002 			MOV	@2(SP),R0	;;; GET BOOT PARAMETERS FROM 776
    901	002744	010037 	000000G			MOV	R0,.BTPRM	;;; SAVE IN EXEC
    902	002750	032700 	000001 			BIT	#BP.SWR,R0	;;; SWITCH REGISTER BOOT ?
    903	002754	001411 				BEQ	CKDONE		;;; BRANCH IF NOT
    904	002756	032700 	000006 			BIT	#BP.LD1!BP.LD0,R0 ;;; BITS 1 OR 2 UP ?
    905	002762	001006 				BNE	CKDONE		;;; BRANCH IF NO CHK11
    906	002764					CALL	CHK.11		;;; DO SYSINI
	002764	004737 	011514'			JSR	PC,CHK.11
    907	002770	   122 	   123 	   130 		.ASCIZ	\RSX-20F\
	002773	   055 	   062 	   060
	002776	   106 	   000
    908	003000				CKDONE:
    909					;
    910					; RESTORE LOW CORE FROM SAVE AREA
    911					;
    912	003000	013706 	000000'			MOV	SPSAVE,SP	;;;RESET THE STACK POINTER(CHK11 DESTROYS)
    913	003004					POP	<R2,R1>		;;;RESTORE SAVED POINTERS TO CORE
	003004	012602 				MOV	(SP)+,R2
	003006	012601 				MOV	(SP)+,R1
    914					.IF DF M$$MGE
    915						MOV	#77406,UPDR1	;;;MAP ALL OF
    916						CLR	UPAR1		;;; LOW CORE TO 20000
    917					.IFTF
    918	003010	012100 				MOV	(R1)+,R0	;;;GET BOOT PARAMETER FROM LOCATION 776
    919	003012	012705 	000400 			MOV	#256.,R5	;;;RESTORE ALL 256 WORDS
    920	003016				20$:
    921	003016	014241 				MOV	-(R2),-(R1)	;;;RESTORE A WORD
    922	003020	077502 				SOB	R5,20$		;;;LOOP FOR WHOLE BLOCK
    923					;
    924					; RESTORE KT-11 REGISTERS (IF ANY)
    925					;
    926					.IFT
    927						MTPI	SP		;;;RESTORE KERNAL SP
    928						POP	STKLIM		;;; AND STACK LIMIT
    929					;
    930						POP	<R4,R3,R2,R1>	;;;RESTORE SAVED POINTERS TO KT-11
    931						MOV	#8.,R5		;;;8 REGISTERS PER SET
    932					30$:
    933						POP	<-(R4),-(R3),-(R2),-(R1)> ;;;RESTORE 4 REGISTERS
    934						SOB	R5,30$		;;;LOOP FOR ALL REGISTERS
    935					.ENDC
    936	003022	005037 	000062'			CLR	ALTDXF		;;; +++006 RESET THE FLOPPY FLAG
    937	003026	013700 	000000G			MOV	.BTPRM,R0	;;; R0 NEEDS BOOT PARAMETER
    938					;	BR	SETCTY		;;;ONWARD!!
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 31
RESTORE -- SETUP CTY LINE # AND DH-11 TABLES

    940						.SBTTL	RESTORE -- SETUP CTY LINE # AND DH-11 TABLES
    941					;
    942					; SET THE CTY TO THE LINE INDICATED BY THE BOOT PARAMETER, NOW IN R0
    943					;
    944	003032				SETCTY:
    945	003032	010005 				MOV	R0,R5		;;;ALSO SAVE BOOT PARAM FOR US TO USE
    946	003034	042700 	177607 			BIC	#^C<BP.CSP>,R0	;;;TRIM TO CONSOLE SPEED, BITS 6-3
    947	003040	001450 				BEQ	SETDL		;;; +++005 CTY NOT SPEC-- LEAVE IT ALONE
    948	003042	012704 	000000G			MOV	#DLTBL,R4	;;;ASSUME DL-11
    949	003046	006200 				ASR	R0		;;;SHIFT THE SPEED FIELD
    950	003050	006200 				ASR	R0		;;; OVER TO A WORD INDEX INTO TABLE, BITS 4-1
    951	003052	016003 	001124'			MOV	DHSTAB(R0),R3	;;;GET THE SPEED WORD FOR THE SPECIFIED TYPE
    952	003056	001406 				BEQ	50$		;;;NOT A DH-11-- GO ON FOR DL-11
    953					;
    954	003060	010504 				MOV	R5,R4		;;;DH-11-- GET THE PARAM AGAIN
    955	003062	042704 	174377 			BIC	#^C<BP.UNT>,R4	;;;TRIM TO DH UNIT NUMBER, BITS 10-8
    956	003066	006204 				ASR	R4		;;;SHIFT INTO PLACE, 16*8=128 BYTES PER DH UNIT, BITS 9-7
    957	003070	062704 	000000G			ADD	#DHTBL,R4	;;;GET DH UNIT TABLE ADDRESS
    958	003074				50$:
    959	003074	010500 				MOV	R5,R0		;;;GET THE WORD BACK
    960	003076	042700 	103777 			BIC	#^C<BP.CLN>,R0	;;;GET JUST LINE NUMBER, BITS 14-11
    961	003102	000300 				SWAB	R0		;;;MAKE THAT 8 BYTES PER LINE, BITS 6-3
    962	003104	060004 				ADD	R0,R4		;;;GET TABLE ADDRESS OF NEW CTY
    963					;
    964	003106	006200 				ASR	R0		;;;GET LINE NUMBER *4
    965	003110	006200 				ASR	R0		;;; LINE NUMBER *2, WORD INDEX
    966	003112	016037 	000000G	000000G		MOV	BITTBL(R0),$BTMSK ;;;GET THE BIT FOR THE LINE TO DH BIT MASK FOR CTY
    967	003120	006200 				ASR	R0		;;;GET LINE NUMBER WITHIN DH UNIT
    968	003122	010037 	000000G			MOV	R0,$UNIT	;;;STORE THAT UNIT NUMBER
    969					;
    970	003126	013700 	000000G			MOV	CTYPTR,R0	;;;GET OLD CTY TABLE ENTRY POINTER
    971	003132	042760 	000000G	000000G		BIC	#TT.CTY,STSW1(R0) ;;;MARK NOT THE CTY ANY MORE
    972	003140	010437 	000000G			MOV	R4,CTYPTR	;;;SET THE NEW CTY TABLE ENTRY
    973	003144	010437 	000000C			MOV	R4,.DQPBA+<Q.SZ*<D.CCTY-1>>+Q.DA ;;;SET THE -10 CTY POINTER TO US, ALSO
    974	003150	052764 	000000G	000000G		BIS	#TT.CTY,STSW1(R4) ;;;SET THIS AS THE CTY
    975	003156	010364 	000000G			MOV	R3,STSW0(R4)	;;;SET DH PARAMETERS FROM SPEED
    976					;
    977					; RESET DL11 TABLE FOR CONFIGURATION
    978					;
    979	003162				SETDL:
    980	003162	012737 	000000G	000000C		MOV	#KBS0,DLTBL+TTYEXP ;;; INIT THE EXTERNAL PAGE ADDRESSES
    981	003170	012737 	000000G	000000C		MOV	#KBS1,DLTBL+TTYEXP+10
    982	003176	012737 	175630 	000000C		MOV	#175630,DLTBL+TTYEXP+20
    983	003204	012737 	175640 	000000C		MOV	#175640,DLTBL+TTYEXP+30
    984	003212	012737 	175650 	000000C		MOV	#175650,DLTBL+TTYEXP+40 ;;; SO
    985	003220	013746 	000004 			MOV	@#4,-(SP)	;;; [4.1.1138] SAVE THE TRAP-AT-4 VECTOR
    986	003224	012737 	003254'	000004 		MOV	#10$,@#4	;;; [4.1.1138] SET UP ALTERNATE
    987	003232	012700 	000000G			MOV	#KBS1,R0	;;; [4.1.1138] POINT TO THE KLINIK LINE
    988	003236	032710 	010000 			BIT	#DL.CAR,(R0)	;;; [4.1.1138] IS CARRIER UP??
    989	003242	001005 				BNE	20$		;;; [4.1.1138] YES -- GO ON
    990	003244	005010 				CLR	(R0)		;;; [4.1.1138] NO -- RESET IT
    991	003246	005060 	000004 			CLR	4(R0)		;;; [4.1.1138] SO
    992	003252	000401 				BR	20$		;;; [4.1.1138] RESTORE TRAP VECTOR
    993						;
    994	003254				10$:
    995	003254	032626 				BIT	(SP)+,(SP)+	;;; [4.1.1138] FLUSH TRAP PS/PC
    996	003256				20$:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 31-1
RESTORE -- SETUP CTY LINE # AND DH-11 TABLES

    997	003256	012637 	000004 			MOV	(SP)+,@#4	;;; [4.1.1138] RESTORE TRAP VECTOR
    998					;
    999					; RESET DH TABLE SO THAT WE CAN CONFIGURE UP
   1000					;
   1001	003262				SETDH:
   1002	003262	012700 	160020 			MOV	#DHEXPA,R0	;;;GET EXT PAGE ADDR OF FIRST DH
   1003	003266	012701 	000000C			MOV	#DHTBL+TTYEXP,R1	;;; AND TABLE ADDRESS FOR SAME
   1004	003272				10$:
   1005	003272	012702 	000020 			MOV	#16.,R2		;;;# LINES PER DH
   1006	003276				20$:
   1007	003276	010011 				MOV	R0,(R1)		;;;SET THIS DH EXTERNAL PAGE ADDRESS
   1008	003300	062701 	000010 			ADD	#8.,R1		;;;BUMP TO NEXT TABLE ENTRY
   1009	003304	077204 				SOB	R2,20$		;;;LOOP FOR ALL LINES IN THIS DH
   1010					;
   1011	003306	062700 	000020 			ADD	#DHEXPZ,R0	;;;BUMP TO NEXT DH
   1012	003312	020127 	000000G			CMP	R1,#TTYEND	;;;END OF TABLE YET?
   1013	003316	103765 				BLO	10$		;;;NO-- DO NEXT DH
   1014					;
   1015					; HERE TO RESET THE DM-11/BB TABLE
   1016					;
   1017	003320				SETDM:
   1018	003320	012700 	170500 			MOV	#DMEXPA,R0	;;; [4.1.1091] EXTERNAL PAGE ADDRESS OF FIRST DM-11/BB
   1019	003324	012701 	000000G			MOV	#DMTBL,R1	;;; [4.1.1091] POINT TO THE DM-11/BB TABLE
   1020	003330	012702 	000010 			MOV	#8.,R2		;;; [4.1.1091] MAX NUMBER OF DM-11/BB'S
   1021	003334				10$:
   1022	003334	010011 				MOV	R0,(R1)		;;; [4.1.1091] SET THE EXTERNAL PAGE ADDRESS
   1023	003336	032121 				BIT	(R1)+,(R1)+	;;; [4.1.1091] BUMP THE TABLE POINTER
   1024	003340	062700 	000010 			ADD	#10,R0		;;; [4.1.1091] AND THE EXTERNAL PAGE ADDRESS
   1025	003344	077205 				SOB	R2,10$		;;; [4.1.1091] LOOP THROUGH ALL DM-11/BB'S
   1026					;	BR	REDSY		;;;CONTINUE . .
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 32
RESTORE -- REDIRECT SY0: TO BOOT DEVICE

   1028						.SBTTL	RESTORE -- REDIRECT SY0: TO BOOT DEVICE
   1029					;
   1030					; IF THIS WAS A SAVE TO SY, REDIRECT SY TO POINT TO BOOT UNIT
   1031					;
   1032	003346				REDSY:
   1033	003346	010501 				MOV	R5,R1		;;;GET BACK THE BOOT PARAM
   1034	003350	106301 				ASLB	R1		;;;SHIFT BITS 6-4 INTO 7-5
   1035	003352	120127 	000060 			CMPB	R1,#3*BIT4	;;;IS SPEED FIELD 0-2?
   1036	003356	103401 				BLO	10$		;;;YES-- UNIT # IS OK
   1037	003360	005001 				CLR	R1		;;;NO-- 3-17-- UNIT # IS ZERO
   1038	003362				10$:
   1039	003362	000301 				SWAB	R1		;;;BRING UNIT # INTO BITS 2-0
   1040	003364	042701 	177770 			BIC	#^C<7>,R1	;;;TRIM TO THREE BITS
   1041					;
   1042	003370	013700 	000042'			MOV	DEVNAM,R0	;;;GET DEVICE NAME
   1043	003374					CALL	FINDEV		;;;ATTEMPT TO FIND BOOT DEVICE
	003374	004737 	006672'			JSR	PC,FINDEV
   1044	003400	103004 				BCC	30$		;;;GOT IT-- OK
   1045	003402	013705 	000040'			MOV	PUDADR,R5	;;;NOT FOUND-- GET OLD PUD ENTRY ADDRESS
   1046	003406	110165 	000000G			MOVB	R1,U.UN(R5)	;;;MAKE IT THE NEW UNIT #
   1047	003412				30$:
   1048	003412	010504 				MOV	R5,R4		;;;SAVE THE PUD ENTRY ADDRESS
   1049	003414	005037 	000040'			CLR	PUDADR		;;;ASSUME FAILURE
   1050	003420	012700 	054523 			MOV	#"SY,R0		;;;GET THE
   1051	003424	005001 				CLR	R1		;;; PUD ENTRY ADDRESS
   1052	003426					CALL	FINDEV		;;;  FOR SY0:
	003426	004737 	006672'			JSR	PC,FINDEV
   1053	003432	103556 				BCS	DTECHK		;;;OOPS-- GIVE UP
   1054	003434	010465 	000000G			MOV	R4,U.RP(R5)	;;;REDIRECT SY0 TO BOOT DEVICE
   1055	003440	010405 				MOV	R4,R5		;;;GET BOOT PUD ENTRY ADDRESS BACK
   1056	003442	010537 	000040'			MOV	R5,PUDADR	;;; AND SAVE IT
   1057					;
   1058					; UPDATE ALL TASKS FROM OLD SAVE DEVICE TO NEW SYSTEM DEVICE
   1059					;
   1060	003446				40$:
   1061	003446	010500 				MOV	R5,R0		;;;COPY THE PUD ADDRESS
   1062	003450	162700 	000000G			SUB	#.PUDBA,R0	;;;MAKE IT INDEX INTO PUD
   1063	003454	012701 	000000G			MOV	#U.SZ,R1	;;;SET ENTRY SIZE AS DIVISOR
   1064	003460					CALL	$DIV		;;;COMPUTE PUD INDEX FOR NEW SY INTO R0
	003460	004737 	000000G			JSR	PC,$DIV
   1065					;
   1066	003464	013703 	000000G			MOV	.STDTA,R3	;;;GET THE ADDRESS OF THE BEGINNING OF SYSTEM TASK DIRECTORY
   1067	003470	010304 				MOV	R3,R4		;;;COPY IT AGAIN
   1068	003472	063704 	000000G			ADD	.STDTZ,R4	;;;FIND ADDRESS OF LAST ENTRY IN STD
   1069	003476				45$:
   1070	003476	012302 				MOV	(R3)+,R2	;;;GET AN STD ENTRY ADDRESS
   1071	003500	032762 	000000G	000000G		BIT	#SF.FX,S.FW(R2)	;;;FIXED TASK (I.E. NOT DISK-LOADED)?
   1072	003506	001006 				BNE	47$		;;;YES-- DON'T CHANGE IT'S DISK
   1073	003510	126237 	000000G	000045'		CMPB	S.DI(R2),PUDIDX	;;;IS THIS TASK FROM ORIGINAL SAVE DEVICE?
   1074	003516	001002 				BNE	47$		;;;NO-- GO ON
   1075	003520	110062 	000000G			MOVB	R0,S.DI(R2)	;;;YES-- UPDATE DISK INDICATOR TO NEW SYSTEM DEVICE
   1076	003524				47$:
   1077	003524	020304 				CMP	R3,R4		;;;AT END OF STD YET?
   1078	003526	101763 				BLOS	45$		;;;NO-- KEEP LOOPING FOR ALL TASKS
   1079					;	BR	RP4CHK		;;;MORE & MORE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 33
RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S

   1081						.SBTTL	RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S
   1082					;
   1083					; CHECK THE RP TO MAKE SURE IT IS ON-LINE AND IN A/B MODE
   1084					;
   1085	003530				RP4CHK:
   1086	003530	105737 	000053'			TSTB	RHFLAG		;;;SHOULD WE CHECK THE RP?
   1087	003534	001417 				BEQ	RP6CHK		;;;NO-- JUST GO ON
   1088	003536	116537 	000000G	176710 		MOVB	U.UN(R5),RPCS2	;;;YES-- SET TO PROPER UNIT #
   1089	003544	032737 	010000 	176712 		BIT	#RPMOL,RPDS	;;;IS THE RP ON-LINE?
   1090	003552	001002 				BNE	35$		;;;YES-- GO ON
   1091	003554	105237 	000054'			INCB	RNFLAG		;;;NO-- REMEMBER THAT IT ISN'T
   1092	003560				35$:
   1093	003560	032737 	001000 	176712 		BIT	#RPPGM,RPDS	;;;PROGRAMMABLE MODE (A/B)?
   1094	003566	001002 				BNE	RP6CHK		;;;YES-- ALL OK
   1095	003570	105237 	000055'			INCB	RPFLAG		;;;NO-- REMEMBER THAT IT ISN'T
   1096					;
   1097					; CHECK TO FIND ALL THE RP06'S MASQUERADING AS RP04'S
   1098					;
   1099	003574				RP6CHK:
   1100	003574	042737 	030000 	177776 		BIC	#PS.PUS,@#PS	;;;INSURE PREVIOUS KERNAL
   1101	003602	012704 	000006 			MOV	#6,R4		;;;POINT TO TIME-OUT TRAP
   1102	003606					MFPI	(R4)		;;;SAVE PS OF TRAP
	003606	011446 				MOV	(R4),-(SP)
   1103	003610					MFPI	-(R4)		;;; AND PC
	003610	014446 				MOV	-(R4),-(SP)
   1104	003612					MTPS	#80$,(R4)+	;;;SET NEW PC
	003612	012724 	003760'			MOV	#80$,(R4)+
   1105	003616					MTPS	@#PS,(R4)	;;; AND PS AS CURRENT STATE
	003616	013714 	177776 			MOV	@#PS,(R4)
   1106	003622	012700 	041104 			MOV	#"DB,R0		;;;WE ARE CHECKING DB'S
   1107	003626	012701 	000007 			MOV	#7,R1		;;; AND THERE ARE 8 OF THEM
   1108	003632				10$:
   1109	003632	010103 				MOV	R1,R3		;;; [**] GET UNIT NUMBER
   1110	003634	006303 				ASL	R3		;;; [**] CONVERT TO INDEX INTO SERIAL # TABLE
   1111	003636	005063 	000000G			CLR	.RHSN(R3)	;;; [**] ASSUME NO DRIVE
   1112	003642					CALL	FINDEV		;;;FIND THIS DB UNIT IN PUD
	003642	004737 	006672'			JSR	PC,FINDEV
   1113	003646	103441 				BCS	70$		;;;NOT THERE-- CARRY ON
   1114	003650	012765 	050700 	000000G		MOV	#50700,U.LBN(R5) ;;;ASSUME RP04-- SET LOW PART OF VOLUME SIZE
   1115	003656	112765 	000002 	000000G		MOVB	#2,U.LBH(R5)	;;; AND HIGH PART
   1116	003664	110137 	176710 			MOVB	R1,RPCS2+0	;;;SELECT THIS UNIT
   1117	003670	032737 	001400 	176712 		BIT	#RPDPR!RPPGM,RPDS ;;;DRIVE EXIST FOR US?
   1118	003676	001425 				BEQ	70$		;;;NO-- SKIP IT
   1119	003700	013763 	176730 	000000G		MOV	RPSN,.RHSN(R3)	;;; [**] SAVE SERIAL NUMBER
   1120	003706	012702 	023420 			MOV	#10000.,R2	;;;SET TIME-OUT COUNT IF PORT BUSY
   1121	003712				20$:
   1122	003712	032737 	004000 	176700 		BIT	#RPDVA,RPCS1	;;;DRIVE AVAILABLE AT THIS TIME?
   1123	003720	001004 				BNE	30$		;;;YES-- CHECK IT OUT
   1124	003722	112737 	000001 	176700 		MOVB	#RPNOOP+RPGO,RPCS1+0 ;;;NO-- DO NOOP TO GET IT
   1125	003730	077210 				SOB	R2,20$		;;;LOOP UNTIL WE HAVE IT
   1126	003732				30$:
   1127	003732	123727 	176726 	000022 		CMPB	RPDT+0,#RPDT06	;;;THIS AN RP06?
   1128	003740	002404 				BLT	70$		;;;NO-- SIZE IS OK
   1129	003742	006365 	000000G			ASL	U.LBN(R5)	;;;YES-- DOUBLE
   1130	003746	106165 	000000G			ROLB	U.LBH(R5)	;;; THE VOLUME SIZE
   1131	003752				70$:
   1132	003752	005301 				DEC	R1		;;;COUNT DOWN TO NEXT UNIT #
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 33-1
RESTORE -- CHECK BOOT DB & LOOK FOR RP06'S

   1133	003754	002326 				BGE	10$		;;;NOT DONE-- LOOP FOR ALL 8
   1134	003756	000401 				BR	90$		;;;ALL DONE-- GO ON
   1135					;
   1136	003760				80$:
   1137	003760	022626 				CMP	(SP)+,(SP)+	;;;TIME-OUT TRAP-- REMOVE TRAP FROM STACK
   1138	003762				90$:
   1139	003762					MTPI	-(R4)		;;;RESTORE TRAP AT 4 PC
	003762	012644 				MOV	(SP)+,-(R4)
   1140	003764					MTPI	2(R4)		;;; AND PS
	003764	012664 	000002 			MOV	(SP)+,2(R4)
   1141					;	BR	DTECHK		;;;CARRY ON
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 34
RESTORE -- CHECK ALL THE DTE-20'S

   1143						.SBTTL	RESTORE -- CHECK ALL THE DTE-20'S
   1144					;
   1145					; CHECK TO MAKE SURE THAT ALL DTE-20'S ARE AT PRIORITY 6
   1146					;
   1147	003770				DTECHK:
   1148	003770	005000 				CLR	R0		;;;RESET DTE #
   1149	003772	012701 	001000 			MOV	#DTVECA+4,R1	;;;POINT TO HIGHEST DTE VECTOR ADDRESS
   1150	003776	012702 	174400 			MOV	#DTEXPA,R2	;;; ALSO TO EXTERNAL PAGE ADDRESS FOR #0
   1151	004002	005003 				CLR	R3		;;;RESET POINTER TO THE PRIVILEDGED DTE
   1152	004004	105337 	000061'			DECB	DEFLAG		;;;SAY DTE-20 OK
   1153					;
   1154	004010	042737 	030000 	177776 		BIC	#PS.PUS,@#PS	;;;INSURE PREVIOUS KERNAL
   1155	004016	012704 	000006 			MOV	#6,R4		;;;POINT TO TIMEOUT VECTOR
   1156	004022					MFPI	(R4)		;;;SAVE THE PS
	004022	011446 				MOV	(R4),-(SP)
   1157	004024					MFPI	-(R4)		;;; AND PC FOR TIMEOUT
	004024	014446 				MOV	-(R4),-(SP)
   1158	004026					MTPS	#60$,(R4)+	;;;SET WHERE TO GO ON NON-EX DTE
	004026	012724 	004130'			MOV	#60$,(R4)+
   1159	004032					MTPS	@#PS,(R4)	;;; AND HOW TO GET THERE
	004032	013714 	177776 			MOV	@#PS,(R4)
   1160	004036				10$:
   1161	004036					MFPI	-(R1)		;;;SAVE PS OF THIS DTE VECTOR
	004036	014146 				MOV	-(R1),-(SP)
   1162	004040					MFPI	-(R1)		;;; AND PC
	004040	014146 				MOV	-(R1),-(SP)
   1163	004042					MTPS	#50$,(R1)+	;;;WHERE TO GO IF IT INTERRUPTS
	004042	012721 	004122'			MOV	#50$,(R1)+
   1164	004046					MTPS	@#PS,(R1)	;;; AND HOW SUCH
	004046	013711 	177776 			MOV	@#PS,(R1)
   1165					;
   1166	004052	005712 				TST	(R2)		;;;DTE EXIST? (TRAP IF NOT TO 60$)
   1167	004054	032762 	000010 	000034 		BIT	#DTRSMD,DTSTAT(R2) ;;;THIS PRIVILEDGED DTE-20?
   1168	004062	001402 				BEQ	20$		;;;YES-- THIS IS THE ONE
   1169	004064	005703 				TST	R3		;;;NO-- FOUND A DTE YET?
   1170	004066	001001 				BNE	30$		;;;YES-- DON'T REMEMBER THIS ONE
   1171	004070				20$:
   1172	004070	010203 				MOV	R2,R3		;;;FIRST OR PRIV DTE-- SAVE IT
   1173	004072				30$:
   1174	004072	012762 	004040 	000034 		MOV	#DT11DB!DTINON,DTSTAT(R2) ;;;RING OUR DOORBELL (FROM THE INSIDE)
   1175	004100	112737 	000240 	177776 		MOVB	#PR5,@#PS	;;;BRING DOWN TO PRI 5
   1176	004106	110037 	000061'			MOVB	R0,DEFLAG	;;;DID NOT INTERRUPT-- SAVE DTE # NOT AT PRI 6
   1177	004112	024646 				CMP	-(SP),-(SP)	;;;FAKE TRAP ON STACK
   1178	004114	152737 	000340 	177776 		BISB	#PR7,@#PS	;;;RESTORE PRI 7
   1179	004122				50$:
   1180	004122	012762 	002010 	000034 		MOV	#DTINOF!DTCL11,DTSTAT(R2) ;;;CLEAR RINGING DOORBELL
   1181	004130				60$:
   1182	004130	042737 	030000 	177776 		BIC	#PS.PUS,@#PS	;;; AND PREVIOUS MODE KERNAL
   1183	004136	022626 				CMP	(SP)+,(SP)+	;;;REMOVE TRAP FROM STACK
   1184	004140					MTPI	-(R1)		;;;RESTORE PC FOR DTE VECTOR
	004140	012641 				MOV	(SP)+,-(R1)
   1185	004142					MTPI	2(R1)		;;; AND PS
	004142	012661 	000002 			MOV	(SP)+,2(R1)
   1186	004146	062702 	000040 			ADD	#DTEXPZ,R2	;;;BUMP TO NEXT DTE-20 EXT PAGE ADDR
   1187	004152	005200 				INC	R0		;;; AND COUNT UP
   1188	004154	020027 	000004 			CMP	R0,#4		;;;DONE WITH DTE'S?
   1189	004160	002726 				BLT	10$		;;;NOPE-- BACK FOR ANOTHER
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 34-1
RESTORE -- CHECK ALL THE DTE-20'S

   1190					;
   1191	004162	010337 	000000G			MOV	R3,PROTBL	;;; SET UP "DTENM" IN "PROTBL"
   1192	004166	010337 	000000G			MOV	R3,.PRDTE	;;;SAVE THE ADDRESS OF THE PRIV DTE
   1193	004172	001402 				BEQ	95$		;;;NOT THERE-- LEAVE STATUS ZERO, TOO
   1194	004174	062703 	000034 			ADD	#DTSTAT,R3	;;;BUMP TO STATUS
   1195	004200				95$:
   1196	004200	010337 	000000G			MOV	R3,.PRSTA	;;;SAVE THAT ADDR, TOO
   1197					;
   1198	004204					MTPI	-(R4)		;;;RESTORE PC OF TIMEOUT TRAP
	004204	012644 				MOV	(SP)+,-(R4)
   1199	004206					MTPI	2(R4)		;;; AND PS
	004206	012664 	000002 			MOV	(SP)+,2(R4)
   1200	004212	013700 	000000G			MOV	.BTPRM,R0	;;;GET BOOT PARAMETER WORD AND
   1201	004216	042700 	177771 			BIC	#^C<BP.LD1!BP.LD0>,R0 ;;;ISOLATE THE LOAD SWITCHES
   1202	004222	022700 	000004 			CMP	#BP.LD1,R0	;;;IF SWITCHES = 10
   1203	004226	001004 				BNE	SYSTRT		;;;THEN
   1204	004230	005037 	000000G			CLR	.NOERR		;;;ALLOW ERRORS
   1205	004234					CALL	..DTP2		;;;START SECONDARY PROTOCOL AND
	004234	004737 	000000G			JSR	PC,..DTP2
   1206					;	BR	SYSTRT		;;;START SYSTEM GOING
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 35
RESTORE -- RESTART SYSTEM AND TYPE HERALD

   1208						.SBTTL	RESTORE -- RESTART SYSTEM AND TYPE HERALD
   1209					;
   1210					; FORCE POWER-RECOVERY AST BY SETTING EV.PF AND
   1211					;  FAKING AN ENABLE TASK SWITCHING REQUEST (FROM PR3 TO PR0)
   1212					;
   1213	004240				SYSTRT:
   1214	004240	005037 	000000G			CLR	.DATE3		;;;INDICATE THAT THE DATE IS NOW INVALID
   1215	004244	005037 	000000G			CLR	.CPUSN		;;; [TCO 4.2333] INVALIDATE SERIAL NUMBER
   1216	004250	005037 	000000G			CLR	.HRDWR		;;; [TCO 4.2233] AND HARDWARE OPTIONS
   1217	004254	012737 	000000G	000000G		MOV	#EV.PF,.SERFG	;;;SET POWER-RECOVERY SIGNIFICANT EVENT
   1218	004262					CALL	..ENB0		;ENABLE TASK SWITCHING
	004262	004737 	000000G			JSR	PC,..ENB0
   1219					;
   1220					; SEE IF WRITE ERROR OCCURED DURING SAVE (WEFLAG NON-ZERO)
   1221					;
   1222	004266	105737 	000060'			TSTB	WEFLAG		;WRITE SUCCESFUL?
   1223	004272	001404 				BEQ	DTEMSG		;YES-- ALL OK
   1224	004274					ERROR	<Write error>
	000440	   011 	   127 	   162 		.ASCIZ	""<11>"Write error"<5>""
	000443	   151 	   164 	   145
	000446	   040 	   145 	   162
	000451	   162 	   157 	   162
	000454	   005 	   000
	004274	012746 	000440'			MOV	#$$$,-(SP)
	004300	004737 	006112'			JSR	PC,TYPMSG
   1225					;
   1226					; SEE IF DTE-20 PRIORITY CHECK FAILED
   1227					;
   1228	004304				DTEMSG:
   1229	004304	005737 	000000G			TST	.PRDTE		;DID WE FIND A DTE-20
   1230	004310	001007 				BNE	DTPMSG		;YES-- SEE IF OK
   1231	004312	005037 	000000G			CLR	.PRSTA		;IF HE CONTINUES . . .
   1232	004316					TYPE	<"<11>"No DTE-20"<1>">
	000456	   011 	   116 	   157 		.ASCIZ	""<11>"No DTE-20"<1>""
	000461	   040 	   104 	   124
	000464	   105 	   055 	   062
	000467	   060 	   001 	   000
	004316	012746 	000456'			MOV	#$$$,-(SP)
	004322	004737 	006112'			JSR	PC,TYPMSG
   1233	004326	000407 				BR	DTPMS1		;GO FLOP
   1234					;
   1235	004330				DTPMSG:
   1236	004330	113700 	000061'			MOVB	DEFLAG,R0	;WE FAIL THE CHECK?
   1237	004334	002414 				BLT	SYSMSG		;NO-- ALL OK
   1238	004336					TYPE	<"<11>"DTE-20 #"<7>" not at priority level 6"<1>">
	000472	   011 	   104 	   124 		.ASCIZ	""<11>"DTE-20 #"<7>" not at priority level 6"<1>""
	000475	   105 	   055 	   062
	000500	   060 	   040 	   043
	000503	   007 	   040 	   156
	000506	   157 	   164 	   040
	000511	   141 	   164 	   040
	000514	   160 	   162 	   151
	000517	   157 	   162 	   151
	000522	   164 	   171 	   040
	000525	   154 	   145 	   166
	000530	   145 	   154 	   040
	000533	   066 	   001 	   000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 35-1
RESTORE -- RESTART SYSTEM AND TYPE HERALD

	004336	012746 	000472'			MOV	#$$$,-(SP)
	004342	004737 	006112'			JSR	PC,TYPMSG
   1239	004346				DTPMS1:
   1240	004346					.INH			;;;BACK UP TO NOTHING-NESS
	004346	013746 	177776 			MOV	PS,-(SP)
	004352	112737 	000340 	177776 		MOVB	#PR7,@#PS	;;
   1241	004360	000777 				BR	.		;;;WAIT FOR SOMEONE TO PICK UP THE PIECES
   1242	004362					.ENB			;;;THE PIECES HAVE BEEN PICKED UP
	004362	012637 	177776 			MOV	(SP)+,@#PS	;;
   1243					;
   1244					; TYPE SYSTEM MESSAGE
   1245					;
   1246	004366				SYSMSG:
   1247	004366	012700 	000000G			MOV	#.VERNO,R0	; +++003 POINT TO VERSION # STRING
   1248	004372					TYPE	<"<1><1>"RSX-20F "<4>" "<6><1><1>"> ; +++003
	000536	   001 	   001 	   122 		.ASCIZ	""<1><1>"RSX-20F "<4>" "<6><1><1>""
	000541	   123 	   130 	   055
	000544	   062 	   060 	   106
	000547	   040 	   004 	   040
	000552	   006 	   001 	   001
	000555	   000
	004372	012746 	000536'			MOV	#$$$,-(SP)
	004376	004737 	006112'			JSR	PC,TYPMSG
   1249					;	BR	MNTSY		;UPWARD
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 36
RESTORE -- TYPE SY0: REDIRECT MESSAGE AND MOUNT SY0:

   1251						.SBTTL	RESTORE -- TYPE SY0: REDIRECT MESSAGE AND MOUNT SY0:
   1252					;
   1253					; TYPE REDIRECTED MESSAGE, MOUNT SY IF SO
   1254	004402				MNTSY:				; +++001
   1255	004402	013705 	000040'			MOV	PUDADR,R5	;GET THE PUD ENTRY FOR THE SY DEVICE
   1256	004406	001503 				BEQ	REDHOM		; +++006 GIVE UP IF NONE
   1257	004410	005037 	000062'			CLR	ALTDXF		; +++006 RESET THE FLOPPY FLAG
   1258	004414					TYPE	<[SY0: redirected to "<3>"]"<1>">
	000556	   133 	   123 	   131 		.ASCIZ	"[SY0: redirected to "<3>"]"<1>""
	000561	   060 	   072 	   040
	000564	   162 	   145 	   144
	000567	   151 	   162 	   145
	000572	   143 	   164 	   145
	000575	   144 	   040 	   164
	000600	   157 	   040 	   003
	000603	   135 	   001 	   000
	004414	012746 	000556'			MOV	#$$$,-(SP)
	004420	004737 	006112'			JSR	PC,TYPMSG
   1259	004424				MNTSY1:				; +++006
   1260	004424					ALUN$S	#DSKLUN,U.DN(R5),U.UN(R5) ;ASSIGN THE DEVICE
	004424	016546 	000000G			MOV	U.UN(R5),-(SP)
	004430	016546 	000000G			MOV	U.DN(R5),-(SP)
	004434	012746 	000002 			MOV	#DSKLUN,-(SP)
	004440	012746 				MOV	(PC)+,-(SP)
	004442	   007 	   004 			.BYTE	7.,4
	004444	104375 				EMT	375
   1261	004446	103422 				BCS	MNTSY2		; +++001 OOPS -- SEE IF OTHER FLOPPY MOUNT NEEDED
   1262	004450	005765 	000000G			TST	U.VA(R5)	;VOLUME ALREADY MOUNTED?????
   1263	004454	001060 				BNE	REDHOM		;YES-- SKIP THIS
   1264	004456					CALL	FNDACP		;NO-- FIND ACP FOR DEVICE
	004456	004737 	006730'			JSR	PC,FNDACP
   1265	004462	010265 	000000G			MOV	R2,U.ACP(R5)	;AND SET IT FOR MOUNT
   1266	004466	012702 	001110'			MOV	#MNTBLK,R2	;GOT IT-- POINT TO MOUNT
   1267	004472					PUSH	R5		;  +++006 SAVE R5
	004472	010546 				MOV	R5,-(SP)
   1268	004474					CALL	FILMNT		;MOUNT DEVICE
	004474	004737 	006750'			JSR	PC,FILMNT
   1269	004500					POP	R5		; +++006 RESTORE R5
	004500	012605 				MOV	(SP)+,R5
   1270	004502	103014 				BCC	SYMNTD		;MOUNTED
   1271	004504					WARN	<Mount "<10>" error "<7>">
	000606	   012 	   115 	   157 		.ASCIZ	""<12>"Mount "<10>" error "<7>""<1>""
	000611	   165 	   156 	   164
	000614	   040 	   010 	   040
	000617	   145 	   162 	   162
	000622	   157 	   162 	   040
	000625	   007 	   001 	   000
	004504	012746 	000606'			MOV	#$$$,-(SP)
	004510	004737 	006112'			JSR	PC,TYPMSG
   1272	004514				MNTSY2:
   1273					.IF	DF	$DTA
   1274						CMP	U.DN(R5),#"DT	; +++006 MOUNT DX: FAIL??
   1275					.IFF
   1276	004514	026527 	000000G	054104 		CMP	U.DN(R5),#"DX	;
   1277					.ENDC
   1278	004522	001035 				BNE	REDHOM		; +++006 NO -- GO ON
   1279	004524	005737 	000062'			TST	ALTDXF		; +++006 YES -- WAS IT THE BOOT DEVICE??
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 36-1
RESTORE -- TYPE SY0: REDIRECT MESSAGE AND MOUNT SY0:

   1280	004530	001405 				BEQ	SYMNT1		; +++006 YES -- TRY TO MOUNT THE OTHER (AND HOPE...)
   1281	004532	000431 				BR	REDHOM		; +++006 NO -- TRY TO READ HOME BLOCKS
   1282						;
   1283	004534				SYMNTD:
   1284	004534					TYPE	<["<10>" mounted]"<1>">
	000630	   133 	   010 	   040 		.ASCIZ	"["<10>" mounted]"<1>""
	000633	   155 	   157 	   165
	000636	   156 	   164 	   145
	000641	   144 	   135 	   001
	000644	   000
	004534	012746 	000630'			MOV	#$$$,-(SP)
	004540	004737 	006112'			JSR	PC,TYPMSG
   1285	004544				SYMNT1:				; +++006 HERE TO MOUNT "OTHER" FLOPPY
   1286	004544	016500 	000000G			MOV	U.DN(R5),R0	; +++006 DEVICE NAME TO R0
   1287	004550	016501 	000000G			MOV	U.UN(R5),R1	; +++006 DEVICE NUMBER TO R1
   1288					.IF	DF	$DTA
   1289						CMP	#"DT,R0		; +++006 IS IT A DX??
   1290					.IFF
   1291	004554	022700 	054104 			CMP	#"DX,R0
   1292					.ENDC
   1293	004560	001016 				BNE	REDHOM		; +++006 NO -- SEE IF IT HAS HOME BLOCKS
   1294	004562	005101 				COM	R1		; +++006 NO -- FIND THE "OTHER" FLOPPY DEVICE NUMBER
   1295	004564	042701 	177776 			BIC	#^C1,R1		; +++006 EITHER "0" OR "1"
   1296	004570	005237 	000062'			INC	ALTDXF		; +++006 MARK THAT WE LOOKING FOR THE "OTHER" ONE
   1297	004574					CALL	FINDEV		; +++006 FIND ITS "PUD" ENTRY
	004574	004737 	006672'			JSR	PC,FINDEV
   1298	004600	010537 	000040'			MOV	R5,PUDADR	; +++006 SET UP "PUDADR"
   1299	004604	103307 				BCC	MNTSY1		; +++006 ALL OK -- TRY TO MOUNT IT
   1300	004606					WARN	<CANT FIND SECOND UNIT >
	000645	   012 	   103 	   101 		.ASCIZ	""<12>"CANT FIND SECOND UNIT "<1>""
	000650	   116 	   124 	   040
	000653	   106 	   111 	   116
	000656	   104 	   040 	   123
	000661	   105 	   103 	   117
	000664	   116 	   104 	   040
	000667	   125 	   116 	   111
	000672	   124 	   040 	   001
	000675	   000
	004606	012746 	000645'			MOV	#$$$,-(SP)
	004612	004737 	006112'			JSR	PC,TYPMSG
   1301					;	BR	REDHOM		;GO READ THE HOM BLOCKS
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 37
RESTORE -- READ HOM BLOCKS ON BOOT DB

   1303						.SBTTL	RESTORE -- READ HOM BLOCKS ON BOOT DB
   1304					;
   1305					; READ HOM BLOCKS FROM DB0 TO SEE IF WE HAVE A FILE SYSTEM ON IT
   1306					;
   1307	004616				REDHOM:
   1308	004616	105737 	000053'			TSTB	RHFLAG		;SHOULD WE READ THE HOM BLOCKS?
   1309	004622	001542 				BEQ	RQSKLR		; +++001 NO-- JUST CHECK KLINIK LINE
   1310	004624	105737 	000054'			TSTB	RNFLAG		;RP NOT READY?
   1311	004630	001113 				BNE	RNRERR		;YES-- COMPLAIN
   1312	004632	105737 	000055'			TSTB	RPFLAG		;RP IN PROGRAMMABLE (A/B) MODE?
   1313	004636	001404 				BEQ	REDHM1		;YES-- GO WORK ON IT
   1314	004640					WARN	<"<10>" not in programmable (A/B) mode>
	000676	   012 	   010 	   040 		.ASCIZ	""<12>""<10>" not in programmable (A/B) mode"<1>""
	000701	   156 	   157 	   164
	000704	   040 	   151 	   156
	000707	   040 	   160 	   162
	000712	   157 	   147 	   162
	000715	   141 	   155 	   155
	000720	   141 	   142 	   154
	000723	   145 	   040 	   050
	000726	   101 	   057 	   102
	000731	   051 	   040 	   155
	000734	   157 	   144 	   145
	000737	   001 	   000
	004640	012746 	000676'			MOV	#$$$,-(SP)
	004644	004737 	006112'			JSR	PC,TYPMSG
   1315	004650				REDHM1:
   1316	004650	005003 				CLR	R3		;CLEAR COUNT OF # TIMES WE SAW 'HOM'
   1317	004652	012705 	000001 			MOV	#1,R5		;START WITH HOM BLOCK AT LBN 1
   1318	004656				20$:
   1319	004656	012700 	001000 			MOV	#IO.RLB,R0	;DO A READ LOGICAL BLOCK FUNCTION
   1320	004662	012701 	000064'			MOV	#HOMBUF,R1	; TO THE HOM BLOCK BUFFER
   1321	004666	012702 	001000 			MOV	#512.,R2	;ONE BLOCK'S WORTH
   1322	004672	005004 				CLR	R4		;CLEAR LOW-ORDER LBN
   1323	004674					CALL	FILQIO		;DO IT TO THE DB0
	004674	004737 	006764'			JSR	PC,FILQIO
   1324	004700	103462 				BCS	RHMERR		;ERROR-- GO REPORT IT
   1325					;
   1326	004702	022711 	105755 			CMP	#SXBTHM,(R1)	;IS THIS A SIXBIT/HOM/ BLOCK?
   1327	004706	001013 				BNE	30$		;NO-- LOOK NO FARTHER
   1328	004710	005703 				TST	R3		;YES-- ALREADY SEEN A GOOD HOM BLOCK?
   1329	004712	001010 				BNE	29$		;YES-- DON'T USE THIS ONE
   1330					;
   1331	004714	012701 	000370'			MOV	#HOMBUF+<HOMFE0*4>,R1 ;NO-- ADDRESS OUR WORDS IN HOM BLOCK
   1332	004720	012702 	000000G			MOV	#.RPADR,R2	; AND WHERE TO STORE THEM
   1333	004724	012122 				MOV	(R1)+,(R2)+	;(LH HOMFE0) (.RPADR+0) HIGH-ORDER DISK ADDRESS
   1334	004726	012122 				MOV	(R1)+,(R2)+	;(RH HOMFE0) (.RPADR+2) LOW-ORDER DISK ADDRESS
   1335	004730	012122 				MOV	(R1)+,(R2)+	;(LH HOMFE1) (.RPSIZ+0) HIGH-ORDER SIZE
   1336	004732	012122 				MOV	(R1)+,(R2)+	;(RH HOMFE1) (.RPSIZ+2) LOW-ORDER SIZE
   1337	004734				29$:
   1338	004734	005203 				INC	R3		;SAY WE SAW ANOTHER GOOD HOM BLOCK
   1339	004736				30$:
   1340	004736	005305 				DEC	R5		;WERE WE LOOKING AT
   1341	004740	003003 				BGT	40$		; BLOCK #1?
   1342	004742	012705 	000012 			MOV	#10.,R5		;YES-- ALSO TRY BLOCK 10.
   1343	004746	000743 				BR	20$		;BACK TO LOOK AT IT
   1344					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 37-1
RESTORE -- READ HOM BLOCKS ON BOOT DB

   1345	004750				40$:
   1346	004750	005303 				DEC	R3		;HOW MANY 'HOM' BLOCKS DID WE SEE?
   1347	004752	002447 				BLT	ALLRXF		;0-- DISK IS ALL OURS
   1348	004754	001412 				BEQ	HBCERR		;1-- CONSISTENCY ERROR
   1349	004756	012705 	000004 			MOV	#4,R5		;2-- TOPS FILE SYSTEM
   1350	004762	012701 	000370'			MOV	#HOMBUF+<HOMFE0*4>,R1 ;POINT TO SECOND HOM BLOCK AREA
   1351	004766	012702 	000000G			MOV	#.RPADR,R2	; AND TO WHAT WE GOT FROM FIRST BLOCK
   1352	004772				50$:
   1353	004772	022122 				CMP	(R1)+,(R2)+	;CHECK FOR CONSISTENCY
   1354	004774	001002 				BNE	HBCERR		;OOPS-- HOM BLOCKS DON'T AGREE
   1355	004776	077503 				SOB	R5,50$		;LOOP FOR ALL FOUR WORDS
   1356	005000	000404 				BR	SETRXF		;CHECKS OUT-- JUST CHECK THE FLAG
   1357					;
   1358	005002				HBCERR:
   1359	005002					WARN	<TOPS HOM block consistency error on "<10>">
	000741	   012 	   124 	   117 		.ASCIZ	""<12>"TOPS HOM block consistency error on "<10>""<1>""
	000744	   120 	   123 	   040
	000747	   110 	   117 	   115
	000752	   040 	   142 	   154
	000755	   157 	   143 	   153
	000760	   040 	   143 	   157
	000763	   156 	   163 	   151
	000766	   163 	   164 	   145
	000771	   156 	   143 	   171
	000774	   040 	   145 	   162
	000777	   162 	   157 	   162
	001002	   040 	   157 	   156
	001005	   040 	   010 	   001
	001010	   000
	005002	012746 	000741'			MOV	#$$$,-(SP)
	005006	004737 	006112'			JSR	PC,TYPMSG
   1360					;	BR	SETRXF		;USE GOOD (OR FIRST) HOM BLOCK
   1361					;
   1362	005012				SETRXF:
   1363	005012	005737 	000000G			TST	.RPADR+0	;IS BIT 2 OF HOMFE0 (BIT 15 OF .RPADR+0) SET?
   1364	005016	100442 				BMI	SOMRXF		;YES-- JUST CLEAR THE FLAG
   1365	005020					WARN	<No RSX-20F file system on "<10>">
	001011	   012 	   116 	   157 		.ASCIZ	""<12>"No RSX-20F file system on "<10>""<1>""
	001014	   040 	   122 	   123
	001017	   130 	   055 	   062
	001022	   060 	   106 	   040
	001025	   146 	   151 	   154
	001030	   145 	   040 	   163
	001033	   171 	   163 	   164
	001036	   145 	   155 	   040
	001041	   157 	   156 	   040
	001044	   010 	   001 	   000
	005020	012746 	001011'			MOV	#$$$,-(SP)
	005024	004737 	006112'			JSR	PC,TYPMSG
   1366	005030				NOTRXF:
   1367	005030	012703 	000000G			MOV	#.RPADR,R3	;POINT TO AREA
   1368	005034	005023 				CLR	(R3)+		;CLEAR
   1369	005036	005023 				CLR	(R3)+		; ALL
   1370	005040	005023 				CLR	(R3)+		; FOUR
   1371	005042	005023 				CLR	(R3)+		; WORDS
   1372	005044	000431 				BR	RQSKLR		; +++001 ALL DONE
   1373					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 37-2
RESTORE -- READ HOM BLOCKS ON BOOT DB

   1374	005046				RHMERR:
   1375	005046					WARN	<TOPS HOM block read error "<7>" on "<10>">
	001047	   012 	   124 	   117 		.ASCIZ	""<12>"TOPS HOM block read error "<7>" on "<10>""<1>""
	001052	   120 	   123 	   040
	001055	   110 	   117 	   115
	001060	   040 	   142 	   154
	001063	   157 	   143 	   153
	001066	   040 	   162 	   145
	001071	   141 	   144 	   040
	001074	   145 	   162 	   162
	001077	   157 	   162 	   040
	001102	   007 	   040 	   157
	001105	   156 	   040 	   010
	001110	   001 	   000
	005046	012746 	001047'			MOV	#$$$,-(SP)
	005052	004737 	006112'			JSR	PC,TYPMSG
   1376	005056	000411 				BR	ALLRX1		;ASSUME ALL OF DISK
   1377					;
   1378	005060				RNRERR:
   1379	005060					WARN	<"<10>" not ready>
	001112	   012 	   010 	   040 		.ASCIZ	""<12>""<10>" not ready"<1>""
	001115	   156 	   157 	   164
	001120	   040 	   162 	   145
	001123	   141 	   144 	   171
	001126	   001 	   000
	005060	012746 	001112'			MOV	#$$$,-(SP)
	005064	004737 	006112'			JSR	PC,TYPMSG
   1380	005070	000417 				BR	RQSKLR		; +++001 LEAVE ADDR/SIZE ALONE
   1381					;
   1382	005072				ALLRXF:
   1383	005072					WARN	<No TOPS file system on "<10>">
	001130	   012 	   116 	   157 		.ASCIZ	""<12>"No TOPS file system on "<10>""<1>""
	001133	   040 	   124 	   117
	001136	   120 	   123 	   040
	001141	   146 	   151 	   154
	001144	   145 	   040 	   163
	001147	   171 	   163 	   164
	001152	   145 	   155 	   040
	001155	   157 	   156 	   040
	001160	   010 	   001 	   000
	005072	012746 	001130'			MOV	#$$$,-(SP)
	005076	004737 	006112'			JSR	PC,TYPMSG
   1384	005102				ALLRX1:
   1385	005102	012703 	000000G			MOV	#.RPADR,R3	;ADDRESS WORDS TO SET
   1386	005106	005023 				CLR	(R3)+		;HIGH ADDRESS:0
   1387	005110	012723 	000001 			MOV	#1,(R3)+	;LOW ADDRESS: BLOCK 1
   1388	005114	012723 	000177 			MOV	#177,(R3)+	;HIGH SIZE: MAX TO 24 BITS
   1389	005120	012723 	177777 			MOV	#-1,(R3)+	; LOW SIZE: MAX ALSO
   1390	005124				SOMRXF:
   1391	005124	105037 	000001G			CLRB	.RPADR+1	;CLEAR HIGH BYTE OF HIGH ADDRESS
   1392					;	BR	RQSKLR		; +++001 GO CHECK KLINIK LINE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 38
RESTORE -- CKECK STATE OF KLINIK LINE

   1394						.SBTTL	RESTORE -- CKECK STATE OF KLINIK LINE
   1395					;
   1396					;	CHECK STATE OF KLINIK LINE
   1397					;
   1398	005130				RQSKLR:
   1399	005130					CLEF$S	#E.FTMO		; +++001 RESET TIMEOUT FLAG
	005130	012746 	000002 			MOV	#E.FTMO,-(SP)
	005134	012746 				MOV	(PC)+,-(SP)
	005136	   037 	   002 			.BYTE	31.,2
	005140	104375 				EMT	375
   1400	005142	013705 	000000G			MOV	KLNPTR,R5	; +++001 KLINIK LINE BLOCK POINTER TO R5
   1401	005146	016504 	000000G			MOV	TTYEXP(R5),R4	; +++001 I/O PAGE ADDRESS TO R4
   1402	005152	001002 				BNE	5$		; +++009 BRANCH IF WE HAVE A KLINIK LINE
   1403	005154	000137 	005614'			JMP	KLANXM		; +++009 LET THEM KNOW ABOUT NO KLINIK
   1404	005160	012703 	000055 		5$:	MOV	#^D45,R3	; +++001 SET UP?? COUNTER
   1405	005164	013700 	000000G			MOV	.BTPRM,R0	; +++001 BOOT PARAMETERS TO R0
   1406	005170	042700 	177771 			BIC	#^C<BP.LD1!BP.LD0>,R0 ; +++001 JUST WHAT WE WANT
   1407	005174				10$:
   1408	005174	032714 	010000 			BIT	#DL.CAR,(R4)	; +++001 IS CARRIER UP
   1409	005200	001010 				BNE	20$		; +++001 YES -- GO ON
   1410	005202	032765 	000000C	000000G		BIT	#<TT.CRW!TT.RIP>,STSW1(R5) ; +++001 NO -- IN CARRIER WAIT??
   1411	005210	001002 				BNE	15$		; +++009 TOO FAR TO BRANCH WITH ADDED CODE
   1412	005212	000137 	005624'			JMP	RQSTSK		; +++009
   1413	005216	005203 			15$:	INC	R3		; +++001 YES -- TAKE THIS TICK BACK
   1414	005220	000413 				BR	30$		; +++001 WAIT A BIT MORE
   1415						;
   1416	005222				20$:
   1417	005222	022700 	000004 			CMP	#BP.LD1,R0	; +++001 CAN PROTOCOLS RUN??
   1418	005226	001034 				BNE	35$		; +++001 NO -- SO DON'T EVEN BOTHER
   1419	005230	032737 	000000C	000002G		BIT	#<EF.PR1!EF.PR2>,.COMEF+2
   1420	005236	001561 				BEQ	PRNRUN		; +++001 PROTOCOL STOPPED -- JUST GO AWAY
   1421	005240	032737 	000000G	000002G		BIT	#EF.RKP,.COMEF+2 ; +++001 DID WE GET KLINIK PARAMETERS??
   1422	005246	001024 				BNE	35$		; +++001 YES -- GO ON
   1423	005250				30$:
   1424	005250					MRKT$S	#E.FTMO,#60.	; +++001 WAIT A BIT
	005250	005046 				CLR	-(SP)
	005252	005046 				CLR	-(SP)
	005254	012746 	000074 			MOV	#60.,-(SP)
	005260	012746 	000002 			MOV	#E.FTMO,-(SP)
	005264	012746 				MOV	(PC)+,-(SP)
	005266	   027 	   005 			.BYTE	23.,5
	005270	104375 				EMT	375
   1425	005272					WTSE$S	#E.FTMO		; +++001 WAIT FOR IT
	005272	012746 	000002 			MOV	#E.FTMO,-(SP)
	005276	012746 				MOV	(PC)+,-(SP)
	005300	   051 	   002 			.BYTE	41.,2
	005302	104375 				EMT	375
   1426	005304					CLEF$S	#E.FTMO		; +++001 CLEAR THE FLAG
	005304	012746 	000002 			MOV	#E.FTMO,-(SP)
	005310	012746 				MOV	(PC)+,-(SP)
	005312	   037 	   002 			.BYTE	31.,2
	005314	104375 				EMT	375
   1427	005316	077352 				SOB	R3,10$		; +++001 LOOP TILL DONE
   1428	005320				35$:
   1429	005320					.INH6			; +++001 DISALLOW INTERRRUPTS
	005320	013746 	177776 			MOV	@#PS,-(SP)
	005324	112737 	000300 	177776 		MOVB	#300,@#PS
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 38-1
RESTORE -- CKECK STATE OF KLINIK LINE

   1430	005332	032737 	000000G	000002G		BIT	#EF.RKP,.COMEF+2 ;;; +++001 DID WE GET KLINIK PARAMETERS??
   1431	005340	001413 				BEQ	50$		;;; +++001 NO -- DO DEFAULT
   1432	005342	105737 	000000G			TSTB	.KLNMD+0	;;; +++001 YES -- DO WE HAVE PARAMETERS??
   1433	005346	001410 				BEQ	50$		;;; +++001 NO -- DO DEFAULT
   1434	005350				40$:
   1435	005350	113737 	000000G	000000G		MOVB	.KLNMD+0,.KLNSW+0 ;;; +++001 SET THE KLINIK MODE
   1436	005356	003410 				BLE	60$		;;; +++001 EXIT IF USER
   1437	005360	113737 	000001G	000000G		MOVB	.KLNMD+1,.FEMOD	;;; +++001 SET THE CONSOLE MODE
   1438	005366	000404 				BR	60$		;;; +++001 GO TO COMMON EXIT
   1439						;
   1440	005370				50$:
   1441	005370	012737 	003401 	000000G		MOV	#3401,.KLNMD	;;; +++001 SET DEFAULT KLINIK PARAMETERS
   1442	005376	000764 				BR	40$		;;; +++001 SET OTHER PARAMETERS AND EXIT
   1443						;
   1444	005400				60$:
   1445	005400	042765 	000000G	000000G		BIC	#TT.OUT,STSW1(R5)
   1446	005406	105737 	000000G			TSTB	.KLNMD+0	;;; +++001 WHICH MODE??
   1447	005412	002404 				BLT	70$		;;; +++001 GO DO USER STUFF
   1448	005414	052765 	000000G	000000G		BIS	#TT.CTY,STSW1(R5) ;;; +++001 REMOTE -- DECLARE CTY
   1449	005422	000403 				BR	80$		;;; +++001 AND GO ON
   1450						;
   1451	005424				70$:
   1452	005424	042765 	000000G	000000G		BIC	#TT.CTY,STSW1(R5) ;;; +++001 CLEAR CTY BIT
   1453	005432				80$:
   1454	005432					.ENB6			;;; +++001 ALLOW INTERRUPTS
	005432	012637 	177776 			MOV	(SP)+,@#PS
   1455	005436	105737 	000000G			TSTB	.KLNMD+0	; +++001 CHECK MODE
   1456	005442	002411 				BLT	KLAUSR		; +++001 USER -- GO ON
   1457	005444					WARN	<KLINIK LINE ACTIVE IN REMOTE MODE>
	001163	   012 	   113 	   114 		.ASCIZ	""<12>"KLINIK LINE ACTIVE IN REMOTE MODE"<1>""
	001166	   111 	   116 	   111
	001171	   113 	   040 	   114
	001174	   111 	   116 	   105
	001177	   040 	   101 	   103
	001202	   124 	   111 	   126
	001205	   105 	   040 	   111
	001210	   116 	   040 	   122
	001213	   105 	   115 	   117
	001216	   124 	   105 	   040
	001221	   115 	   117 	   104
	001224	   105 	   001 	   000
	005444	012746 	001163'			MOV	#$$$,-(SP)
	005450	004737 	006112'			JSR	PC,TYPMSG
   1458	005454					WARN	<KLINIK LINE CONNECTED TO SYSTEM CONSOLE>
	001227	   012 	   113 	   114 		.ASCIZ	""<12>"KLINIK LINE CONNECTED TO SYSTEM CONSOLE"<1>""
	001232	   111 	   116 	   111
	001235	   113 	   040 	   114
	001240	   111 	   116 	   105
	001243	   040 	   103 	   117
	001246	   116 	   116 	   105
	001251	   103 	   124 	   105
	001254	   104 	   040 	   124
	001257	   117 	   040 	   123
	001262	   131 	   123 	   124
	001265	   105 	   115 	   040
	001270	   103 	   117 	   116
	001273	   123 	   117 	   114
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 38-2
RESTORE -- CKECK STATE OF KLINIK LINE

	001276	   105 	   001 	   000
	005454	012746 	001227'			MOV	#$$$,-(SP)
	005460	004737 	006112'			JSR	PC,TYPMSG
   1459	005464	000404 				BR	KLAREM		; +++001 EXIT THIS ROUTINE
   1460						;
   1461	005466				KLAUSR:
   1462	005466					WARN	<KLINIK LINE ACTIVE IN USER MODE>
	001301	   012 	   113 	   114 		.ASCIZ	""<12>"KLINIK LINE ACTIVE IN USER MODE"<1>""
	001304	   111 	   116 	   111
	001307	   113 	   040 	   114
	001312	   111 	   116 	   105
	001315	   040 	   101 	   103
	001320	   124 	   111 	   126
	001323	   105 	   040 	   111
	001326	   116 	   040 	   125
	001331	   123 	   105 	   122
	001334	   040 	   115 	   117
	001337	   104 	   105 	   001
	001342	   000
	005466	012746 	001301'			MOV	#$$$,-(SP)
	005472	004737 	006112'			JSR	PC,TYPMSG
   1463	005476				KLAREM:
   1464	005476	032737 	000000G	000002G		BIT	#EF.PR1,.COMEF+2 ; +++004 AN WE LOG THIS??
   1465	005504	001447 				BEQ	RQSTSK		; +++004 NO -- GO ON
   1466	005506	012700 	001070'			MOV	#LOGBUF,R0	; +++004 YES -- BUFFER POINTER TO R0
   1467	005512	113701 	000000G			MOVB	.KLNMD+0,R1	; +++004 KLINIK MODE TO R1
   1468	005516	002406 				BLT	10$		; +++004 USER -- GO ON
   1469	005520	113701 	000001G			MOVB	.KLNMD+1,R1	; +++004 REMOTE -- GET CONSOLE MODE
   1470	005524	006201 				ASR	R1		; +++004 COMPUTE THE CODE
   1471	005526	005201 				INC	R1		; +++004
   1472	005530	006201 				ASR	R1		; +++004
   1473	005532	005201 				INC	R1		; +++004
   1474	005534				10$:
   1475	005534	110160 	000005 			MOVB	R1,5(R0)	; +++004 SET THE MODE
   1476	005540	112760 	000000G	000004 		MOVB	#K.LRBA,4(R0)	; +++004 SET THE LOG CODE
   1477	005546	012701 	100000G			MOV	#BC.HDS+100000,R1 ; +++004 FUNCTION CODE TO R1
   1478	005552	012702 	000004 			MOV	#E.FLOG,R2	; +++004 EVENT FLAG TO R2
   1479	005556	012703 	000000G			MOV	#D.CKLN,R3	; +++004 DEVICE CODE TO R3
   1480	005562					CALL	..STIN		; +++004 LOG IT
	005562	004737 	000000G			JSR	PC,..STIN
   1481	005566					WTSE$S	#E.FLOG		; +++004 WAIT FOR IT
	005566	012746 	000004 			MOV	#E.FLOG,-(SP)
	005572	012746 				MOV	(PC)+,-(SP)
	005574	   051 	   002 			.BYTE	41.,2
	005576	104375 				EMT	375
   1482	005600	000411 				BR	RQSTSK		; +++001 EXIT THIS ROUTINE
   1483						;
   1484	005602				PRNRUN:
   1485	005602					ERROR	<PROTOCOLS NOT RUNNING>
	001343	   011 	   120 	   122 		.ASCIZ	""<11>"PROTOCOLS NOT RUNNING"<5>""
	001346	   117 	   124 	   117
	001351	   103 	   117 	   114
	001354	   123 	   040 	   116
	001357	   117 	   124 	   040
	001362	   122 	   125 	   116
	001365	   116 	   111 	   116
	001370	   107 	   005 	   000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 38-3
RESTORE -- CKECK STATE OF KLINIK LINE

	005602	012746 	001343'			MOV	#$$$,-(SP)
	005606	004737 	006112'			JSR	PC,TYPMSG
   1486	005612	000456 				BR	EXIT		; +++001 GO AWAY
   1487						;
   1488	005614				KLANXM:
   1489	005614					WARN	<NO KLINIK LINE> ; +++009 TELL ABOUT NO KLINIK
	001373	   012 	   116 	   117 		.ASCIZ	""<12>"NO KLINIK LINE"<1>""
	001376	   040 	   113 	   114
	001401	   111 	   116 	   111
	001404	   113 	   040 	   114
	001407	   111 	   116 	   105
	001412	   001 	   000
	005614	012746 	001373'			MOV	#$$$,-(SP)
	005620	004737 	006112'			JSR	PC,TYPMSG
   1490					;	BR	RQSTSK		; +++009 REQUEST KLI IF NECESSARY
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 39
RESTORE -- REQUEST KL INITIALIZATION TASK AND/OR EXIT

   1492						.SBTTL	RESTORE -- REQUEST KL INITIALIZATION TASK AND/OR EXIT
   1493					;
   1494					; REQUEST KL SYSTEM INITIALIZATION TASK IF LOAD FLAGS FROM BOOT = 00 OR 11
   1495					;
   1496	005624				RQSTSK:
   1497	005624	012701 	001120'			MOV	#KLINIT,R1	;ADDRESS OF .RAD50/...KLI/
   1498	005630	013700 	000000G			MOV	.BTPRM,R0	;GET LOAD FLAGS
   1499	005634	012702 	000000C			MOV	#KL.DEF!KL.LRM!KL.LCA!KL.CFM!KL.LVB,R2 ;DEFAULT TO DEFAULT
   1500	005640	032700 	000001 			BIT	#BP.SWR,R0	;FROM SWR BUTTON?
   1501	005644	001002 				BNE	10$		;YES-- OK
   1502	005646	052702 	000000G			BIS	#KL.VBN,R2	;NO-- VBOOT DOESN'T PROMPT
   1503	005652				10$:
   1504	005652	042700 	177771 			BIC	#^C<BP.LD1!BP.LD0>,R0 ;LOAD FLAGS= 00?
   1505	005656	001404 				BEQ	50$		;YES-- REQUEST SYSTEM INITIALIZATION
   1506	005660	022700 	000006 			CMP	#<BP.LD1!BP.LD0>,R0 ;LOAD FLAGS= 11?
   1507	005664	001024 				BNE	EXIT00		;NO-- JUST EXIT
   1508	005666	005002 				CLR	R2		;SET KLI TO ASK DIALOG
   1509	005670				50$:
   1510	005670	010237 	000000G			MOV	R2,.KLIWD	;SET FLAGS TO ...KLI
   1511	005674					RQST$S	R1		;REQUEST TASK
	005674	005046 				CLR	-(SP)
	005676	005046 				CLR	-(SP)
	005700	005046 				CLR	-(SP)
	005702	005046 				CLR	-(SP)
	005704	016146 	000002 			MOV	2(R1),-(SP)
	005710	011146 				MOV	(R1),-(SP)
	005712	012746 				MOV	(PC)+,-(SP)
	005714	   013 	   007 			.BYTE	11.,7
	005716	104375 				EMT	375
   1512	005720	103006 				BCC	EXIT00		;SUCCESS-- JUST LEAVE
   1513	005722	013700 	000000G			MOV	$DSW,R0		;GET THE ERROR CODE
   1514	005726					WARN	<KLI task request error "<7>">
	001414	   012 	   113 	   114 		.ASCIZ	""<12>"KLI task request error "<7>""<1>""
	001417	   111 	   040 	   164
	001422	   141 	   163 	   153
	001425	   040 	   162 	   145
	001430	   161 	   165 	   145
	001433	   163 	   164 	   040
	001436	   145 	   162 	   162
	001441	   157 	   162 	   040
	001444	   007 	   001 	   000
	005726	012746 	001414'			MOV	#$$$,-(SP)
	005732	004737 	006112'			JSR	PC,TYPMSG
   1515	005736				EXIT00:
   1516	005736	105737 	000050'			TSTB	EXFLAG		;SHOULD WE EXIT (/EX)
   1517	005742	001002 				BNE	EXIT		;YES-- DO SO
   1518	005744	000137 	001170'			JMP	SAVE		;NO-- GO BACK TO SAVE
   1519					;
   1520					; ALL DONE-- DO A TASK EXIT, SYSTEM BACK TO STATE BEFORE SAVE
   1521					;
   1522	005750				EXIT:
   1523	005750					EXIT$S			;TASK EXIT
	005750	012746 				MOV	(PC)+,-(SP)
	005752	   063 	   001 			.BYTE	51.,1
	005754	104375 				EMT	375
   1524	005756	000774 				BR	EXIT		;JUST IN CASE . . .
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 40
COMMAND PARSER ROUTINES

   1526						.SBTTL	COMMAND PARSER ROUTINES
   1527					;
   1528					; GENERAL NOTES:
   1529					;
   1530					; R4 IS ALWAYS USED AS A POINTER TO THE COMMAND STRING.  ON CALL,
   1531					; IT POINTS TO THE NEXT CHARACTER TO BE PROCESSED.  ON RETURN, R4
   1532					; ALWAYS POINTS TO THE CHARACTER AFTER THE LAST ONE PROCESSED, I.E.
   1533					; THE NEXT ONE TO BE PROCESSED.
   1534					;
   1535					; NOTE THAT END-OF-LINE IS A ZERO BYTE
   1536					;
   1537					;
   1538					; GETNB -- GET NEXT NON-BLANK CHARACTER
   1539					;
   1540					; RETURNS WITH R4 POINTING TO THE NEXT NON-BLANK CHARACTER
   1541					;	R0 --	NON-BLANK CHARACTER
   1542					;	CC-Z SET IF END-OF-LINE
   1543					;
   1544	005760				GETNB:
   1545	005760	112400 				MOVB	(R4)+,R0	;GET A CHARACTER
   1546	005762	122700 	000040 			CMPB	#' ,R0		;THIS BLANK?
   1547	005766	001774 				BEQ	GETNB		;YES-- LOOK SOME MORE
   1548	005770	122700 	000011 			CMPB	#'	,R0	;OR A TAB?
   1549	005774	001771 				BEQ	GETNB		;YES-- LOOK SOME MORE
   1550	005776				10$:
   1551	005776	105744 				TSTB	-(R4)		;NON-BLANK-- BACK OVER IT (MAY BE EOL)
   1552	006000					RETURN			; FROM GETNB
	006000	000207 				RTS	PC
   1553					;
   1554					; GETNAM -- GET TWO-CHARACTER ALPHABETIC NAME
   1555					;
   1556					; RETURNS AFTER TWO CHARCTERS OR NON-ALPHABETIC
   1557					;	R0 --	(LOW) FIRST CHARACTER (HIGH) SECOND CHARACTER
   1558					;	CC-C SET IF MORE THAN TWO CHARACTERS
   1559					;
   1560	006002				GETNAM:
   1561	006002	005000 				CLR	R0		;CLEAR ANSWER
   1562	006004				10$:
   1563	006004	122714 	000101 			CMPB	#'A,(R4)	;BELOW A?
   1564	006010	101015 				BHI	50$		;YES-- RETURN CC-C CLEAR
   1565	006012	121427 	000132 			CMPB	(R4),#'Z	;OR ABOVE Z?
   1566	006016	101012 				BHI	50$		;YES-- RETURN CC-C CLEAR
   1567	006020	005700 				TST	R0		;GOT A BYTE YET?
   1568	006022	001002 				BNE	20$		;YES-- STORE SECOND BYTE
   1569	006024	112400 				MOVB	(R4)+,R0	;NO-- GET LOW BYTE
   1570	006026	000766 				BR	10$		;LOOP FOR NEXT CHARACTER
   1571					;
   1572	006030				20$:
   1573	006030	000300 				SWAB	R0		;GET HIGH BYTE
   1574	006032	001003 				BNE	40$		;ALREADY THERE-- ERROR
   1575	006034	152400 				BISB	(R4)+,R0	;OK-- SET SECOND CHARACTER
   1576	006036	000300 				SWAB	R0		;RESTORE R0 TO PROPER ORIENTATION
   1577	006040	000761 				BR	10$		;LOOP FOR ANOTHER (?)
   1578					;
   1579	006042				40$:
   1580	006042	000261 				SEC			;ERROR
   1581	006044				50$:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 40-1
COMMAND PARSER ROUTINES

   1582	006044					RETURN			; FROM GETNAM
	006044	000207 				RTS	PC
   1583					;
   1584					; GETNUM -- GET OCTAL NUMBER
   1585					;
   1586					; RETURNS WITH NON-DIGIT OR IF MORE THAN A BYTE'S WORTH
   1587					;	R0 --	(LOW) NUMBER
   1588					;	CC-C SET IF LARGER THAN ONE BYTE
   1589					;
   1590	006046				GETNUM:
   1591	006046	005000 				CLR	R0		;CLEAR RESULT
   1592	006050				10$:
   1593	006050	112401 				MOVB	(R4)+,R1	;GET A DIGIT
   1594	006052	162701 	000060 			SUB	#'0,R1		;TRIM DOWN TO DIGIT
   1595	006056	103413 				BLO	40$		;NOT A DIGIT-- GIVE UP
   1596	006060	022701 	000007 			CMP	#7,R1		;TOO HIGH?
   1597	006064	103410 				BLO	40$		;YES-- GIVE UP WITH CC-C CLEAR
   1598		000003 			.REPT 3
   1599						ASLB	R0		;SHIFT OLD NUMBER A BIT
   1600						BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
   1601					.ENDR
	006066	106300 				ASLB	R0		;SHIFT OLD NUMBER A BIT
	006070	103407 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
	006072	106300 				ASLB	R0		;SHIFT OLD NUMBER A BIT
	006074	103405 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
	006076	106300 				ASLB	R0		;SHIFT OLD NUMBER A BIT
	006100	103403 				BCS	50$		;CARRY OUT-- NUMBER TOO BIG-- CC-C SET
   1602	006102	060100 				ADD	R1,R0		;ACCUMULATE THIS DIGIT
   1603	006104	000761 				BR	10$		;FETCH ANOTHER DIGIT
   1604					;
   1605	006106				40$:
   1606	006106	105744 				TSTB	-(R4)		;BACK OVER BAD CHARACTER
   1607	006110				50$:
   1608	006110					RETURN			;FROM GETNUM
	006110	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 41
TYPEOUT ROUTINES

   1610						.SBTTL	TYPEOUT ROUTINES
   1611					;
   1612					; TYPMSG -- TYPE A RANDOM ASCIZ STRING
   1613					;
   1614					; CALL:
   1615					;	PUSH	#<ADDRESS OF ASCIZ STRING>
   1616					;	CALL	TYPMSG
   1617					;
   1618					; SPECIAL CHARACTER CODES IN TEXT:
   1619					;	0 --	END OF TEXT
   1620					;	1 --	TYPE <CR><LF>
   1621					;	2 --	TYPE TWO CHARACTERS FROM R0 (SAVED ON STACK)
   1622					;	3 --	TYPE DEVICE NAME AND UNIT FROM PUD ENTRY (R5)
   1623					;	4 --	TYPE ASCIZ STRING BY R0
   1624					;	5 --	TYPE <CR><LF> AND RETURN TO SAVE
   1625					;	6 --	TYPE SYSTEM DATE
   1626					;	7 --	DECIMAL NUMBER IN R0 (SAVED ON STACK)
   1627					;	10 --	DEVICE NAME AND UNIT FROM PUD ENTRY IN PUDADR
   1628					;	11 --	FATAL ERROR PREFIX
   1629					;	12 --	DIAGNOSTIC ERROR PREFIX
   1630					;
   1631	006112				TYPMSG:
   1632	006112					PUSH	<R3,R2,R1,R0> ;SAVE USED REGISTERS
	006112	010346 				MOV	R3,-(SP)
	006114	010246 				MOV	R2,-(SP)
	006116	010146 				MOV	R1,-(SP)
	006120	010046 				MOV	R0,-(SP)
   1633	006122	016600 	000012 			MOV	12(SP),R0	;GET ADDRESS OF STRING
   1634	006126	012702 	000064'			MOV	#TYPBUF,R2	;POINT TO OUTPUT BUFFER
   1635					;
   1636					; ENTER HERE AT TYPMS1:
   1637					;	R0 --	POINTER TO STRING TO BE OUTPUT (AND FOLLOWING CODE)
   1638					;	R2 --	CURRENT POINTER TO OUTPUT BUFFER FOR LOADING CHARACTERS
   1639					;
   1640	006132				TYPMS1:
   1641	006132	112012 				MOVB	(R0)+,(R2)	;GET A CHARACTER FROM STRING
   1642	006134	122227 	000013 			CMPB	(R2)+,#TYPMAX	;SPECIAL CODE?
   1643	006140	103374 				BHIS	TYPMS1		;NO-- JUST GET NEXT CHARACTER
   1644	006142	114203 				MOVB	-(R2),R3	;YES-- GET THE CODE
   1645	006144	006303 				ASL	R3		;MAKE IT WORDS
   1646	006146	011601 				MOV	(SP),R1		;GET R0 FROM STACK BACK TO R1
   1647	006150					CALL	@TYPTAB(R3)	;CALL ROUTINE TO PROCESS
	006150	004773 	006156'			JSR	PC,@TYPTAB(R3)
   1648	006154	000766 				BR	TYPMS1		;BACK FOR MORE
   1649					;
   1650					; DISPATCH TABLE FOR SPECIAL CODES
   1651					;
   1652	006156				TYPTAB:
   1653	006156	006204'	006276'	006302'		.WORD	TYPDON,TYPCR,TYPTXT,TYPDEV,TYPSTR,TYPSAV,TYPDAT,TYPDEC,TYPSDV,TYPERR,TYPWRN
	006164	006320'	006366'	006270'
	006172	006376'	006514'	006314'
	006200	006354'	006362'
   1654		000013 			TYPMAX=<.-TYPTAB>/2
   1655					;
   1656					; 0 -- END OF MESSAGE
   1657					;
   1658	006204				TYPDON:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 41-1
TYPEOUT ROUTINES

   1659	006204	005726 				TST	(SP)+		;POP THE RETURN ADDRESS OFF TO NOWHERE
   1660	006206	162702 	000064'			SUB	#TYPBUF,R2	;END OF STRING-- FIND LENGTH
   1661	006212					QIOW$S	#IO.WLB,#CTYLUN,#E.FQIO,,,,<#TYPBUF,R2,#0> ;TYPE STRING ON CTY
	006212	005046 				CLR	-(SP)
	006214	010246 				MOV	R2,-(SP)
	006216	012746 	000064'			MOV	#TYPBUF,-(SP)
	006222	005046 				CLR	-(SP)
	006224	005046 				CLR	-(SP)
	006226	005046 				CLR	-(SP)
	006230	112716 	000001 			MOVB	#E.FQIO,(SP)
	006234	012746 	000001 			MOV	#CTYLUN,-(SP)
	006240	012746 	000400 			MOV	#IO.WLB,-(SP)
	006244	012746 				MOV	(PC)+,-(SP)
	006246	   003 	   011 			.BYTE	3,$$$T1
	006250	104375 				EMT	375
   1662	006252	103636 				BCS	EXIT		;GIVE UP IF FAILURE
   1663	006254					POP	<R0,R1,R2,R3> ;RESTORE REGISTERS
	006254	012600 				MOV	(SP)+,R0
	006256	012601 				MOV	(SP)+,R1
	006260	012602 				MOV	(SP)+,R2
	006262	012603 				MOV	(SP)+,R3
   1664	006264					POP	(SP)		;RESTORE PC OVER ADDRESS OF STRING
	006264	012616 				MOV	(SP)+,(SP)
   1665	006266					RETURN			;FROM TYPMSG
	006266	000207 				RTS	PC
   1666					;
   1667					; 5 -- TYPE <CR><LF> AND RETURN TO SAVE
   1668					;
   1669	006270				TYPSAV:
   1670	006270	012766 	001170'	000012 		MOV	#SAVE,12(SP)	;SET RETURN PC TO GO BACK TO SAVE
   1671					;	BR	TYPCR		;FINISH OFF WITH <CR><LF>
   1672					;
   1673					; 1 -- TYPE CRLF
   1674					;
   1675	006276				TYPCR:
   1676	006276	012701 				MOV	(PC)+,R1	;GET <CR> AND <LF>
   1677	006300	   015 	   012 			.BYTE	15,12		; . .
   1678					;	BR	TYPTXT		;TYPE WHAT'S IN R1
   1679					;
   1680					; 2 -- TYPE TEXT IN R0 (SAVED ON STACK)
   1681					;
   1682	006302				TYPTXT:
   1683	006302	110122 				MOVB	R1,(R2)+	;STORE LOW BYTE FIRST
   1684	006304	000301 				SWAB	R1		;GET HIGH BYTE
   1685	006306	001401 				BEQ	90$		;NULL-- IGNORE IT
   1686	006310	110122 				MOVB	R1,(R2)+	;STORE SECOND CHARACTER
   1687	006312				90$:
   1688	006312					RETURN			; FROM TYPTXT
	006312	000207 				RTS	PC
   1689					;
   1690					; 10 -- DEVICE NAME AND UNIT FROM PUDADR
   1691					;
   1692	006314				TYPSDV:
   1693	006314	013705 	000040'			MOV	PUDADR,R5	;GET THE PUD ADDRESS
   1694					;	BR	TYPDEV		;AND TYPE IT
   1695					;
   1696					; 3 -- DEVICE AND UNIT # FROM PUD (R5)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 41-2
TYPEOUT ROUTINES

   1697					;
   1698	006320				TYPDEV:
   1699	006320	016501 	000000G			MOV	U.DN(R5),R1	;GET THE NAME
   1700	006324					CALL	TYPTXT		;TYPE THE NAME
	006324	004737 	006302'			JSR	PC,TYPTXT
   1701	006330	012737 	000010 	000016'		MOV	#8.,RADIX	;SET TO OCTAL
   1702	006336	116501 	000000G			MOVB	U.UN(R5),R1	;GET THE UNIT
   1703	006342					CALL	TYPNUM		;TYPE THE NUMBER
	006342	004737 	006614'			JSR	PC,TYPNUM
   1704	006346	112722 	000072 			MOVB	#':,(R2)+	;MAKE IT A DEVICE
   1705	006352					RETURN			;BACK FOR MORE
	006352	000207 				RTS	PC
   1706					;
   1707					; 11 -- FATAL ERROR PREFIX
   1708					;
   1709	006354				TYPERR:
   1710	006354	012701 	001447'			MOV	#ERRMSG,R1	;GET ERROR STRING
   1711	006360	000402 				BR	TYPSTR		;PUT THE STRING
   1712					;
   1713	001447					.PSECT	TEXT
   1714	001447	   123 	   101 	   126 	ERRMSG:	.ASCIZ	\SAV -- *Fatal* -- \
	001452	   040 	   055 	   055
	001455	   040 	   052 	   106
	001460	   141 	   164 	   141
	001463	   154 	   052 	   040
	001466	   055 	   055 	   040
	001471	   000
   1715	006362					.PSECT
   1716					;
   1717					; 12 -- WARNING ERROR PREFIX
   1718					;
   1719	006362				TYPWRN:
   1720	006362	012701 	001472'			MOV	#WRNMSG,R1	;GET WARNING PREFIX
   1721					;	BR	TYPSTR		; . .
   1722					;
   1723	001472					.PSECT	TEXT
   1724	001472	   123 	   101 	   126 	WRNMSG:	.ASCIZ	\SAV -- *Diag* -- \
	001475	   040 	   055 	   055
	001500	   040 	   052 	   104
	001503	   151 	   141 	   147
	001506	   052 	   040 	   055
	001511	   055 	   040 	   000
   1725	006366					.PSECT
   1726					;
   1727					; 4 -- STRING FROM R1
   1728					;
   1729	006366				TYPSTR:
   1730	006366	112122 				MOVB	(R1)+,(R2)+	;MOVE A CHARACTER
   1731	006370	001376 				BNE	TYPSTR		;LOOP TILL END OF COMMAND
   1732	006372	105742 				TSTB	-(R2)		;BACK OVER NULL BYTE
   1733	006374					RETURN			;BACK FOR MORE
	006374	000207 				RTS	PC
   1734					;
   1735					; 6 -- TYPE SYSTEM DATE
   1736					;
   1737	006376				TYPDAT:
   1738	006376	012737 	000012 	000016'		MOV	#10.,RADIX	;ALL UNDER DECIMAL RADIX
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 41-3
TYPEOUT ROUTINES

   1739	006404	113701 	000026'			MOVB	GTIMBF+G.TIHR,R1 ;GET THE HOUR
   1740	006410					CALL	TYPNUM		;TYPE HOURS
	006410	004737 	006614'			JSR	PC,TYPNUM
   1741	006414	112722 	000072 			MOVB	#':,(R2)+	;SEPERATE . . .
   1742	006420	113701 	000030'			MOVB	GTIMBF+G.TIMI,R1 ;MINUTES
   1743	006424	020127 	000011 			CMP	R1,#9.		;MORE THAN ONE DIGIT?
   1744	006430	003002 				BGT	10$		;YES-- WE WILL HAVE TWO
   1745	006432	112722 	000060 			MOVB	#'0,(R2)+	;NO-- MAKE IT TWO
   1746	006436				10$:
   1747	006436					CALL	TYPNUM		;MINUTES . . . .  . .  . . . . . ...
	006436	004737 	006614'			JSR	PC,TYPNUM
   1748	006442	112722 	000040 			MOVB	#' ,(R2)+	;SPACE-ED OUT DATE
   1749	006446	113701 	000024'			MOVB	GTIMBF+G.TIDA,R1 ;GET DAY OF MONTH
   1750	006452					CALL	TYPNUM		;TYPE IT IN DECIMAL
	006452	004737 	006614'			JSR	PC,TYPNUM
   1751	006456	112722 	000055 			MOVB	#'-,(R2)+	;SEPARATE
   1752	006462	113701 	000022'			MOVB	GTIMBF+G.TIMO,R1 ;GET THE MONTH
   1753	006466	006301 				ASL	R1		; *2
   1754	006470	006301 				ASL	R1		; *4 BYTES FOR EACH NAME
   1755	006472	062701 	006530'			ADD	#MONTAB-4,R1	;POINT TO ASCIZ MONTHS
   1756	006476					CALL	TYPSTR		;TYPE THE STRING
	006476	004737 	006366'			JSR	PC,TYPSTR
   1757	006502	112722 	000055 			MOVB	#'-,(R2)+	;SEPARATE
   1758	006506	013701 	000020'			MOV	GTIMBF+G.TIYR,R1 ;GET THE YEAR
   1759	006512	000440 				BR	TYPNUM		;TYPE IT AND RETURN
   1760					;
   1761					; 7 -- DECIMAL NUMBER IN R0 (SAVED ON STACK)
   1762					;
   1763	006514				TYPDEC:
   1764	006514	012737 	000012 	000016'		MOV	#10.,RADIX	;SET RADIX TO 10
   1765	006522					CALL	TYPNUM		;TYEP THE NUMBER
	006522	004737 	006614'			JSR	PC,TYPNUM
   1766	006526	112722 	000056 			MOVB	#'.,(R2)+	;STORE A . TO INDICATE DECIMAL
   1767	006532					RETURN			;BACK FOR ANOTHER CHAR OF STRING
	006532	000207 				RTS	PC
   1768					;
   1769					; TABLE OF MONTHS
   1770					;
   1771	006534				MONTAB:
   1772					.IRP ARG,<Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec>
   1773						.ASCIZ	/ARG/
   1774						.EVEN
   1775					.ENDM
	006534	   112 	   141 	   156 		.ASCIZ	/Jan/
	006537	   000
	006540	   106 	   145 	   142 		.ASCIZ	/Feb/
	006543	   000
	006544	   115 	   141 	   162 		.ASCIZ	/Mar/
	006547	   000
	006550	   101 	   160 	   162 		.ASCIZ	/Apr/
	006553	   000
	006554	   115 	   141 	   171 		.ASCIZ	/May/
	006557	   000
	006560	   112 	   165 	   156 		.ASCIZ	/Jun/
	006563	   000
	006564	   112 	   165 	   154 		.ASCIZ	/Jul/
	006567	   000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 41-4
TYPEOUT ROUTINES

	006570	   101 	   165 	   147 		.ASCIZ	/Aug/
	006573	   000
	006574	   123 	   145 	   160 		.ASCIZ	/Sep/
	006577	   000
	006600	   117 	   143 	   164 		.ASCIZ	/Oct/
	006603	   000
	006604	   116 	   157 	   166 		.ASCIZ	/Nov/
	006607	   000
	006610	   104 	   145 	   143 		.ASCIZ	/Dec/
	006613	   000
   1776					;
   1777					; TYPNUM -- TYPE A NUMBER
   1778					;	R1 --	NUMBER TO BE TYPED
   1779					;	RADIX -- OUTPUT RADIX
   1780					;
   1781					; USES R1,R2,R3
   1782					;
   1783	006614				TYPNUM:
   1784	006614	005701 				TST	R1		;NEGATIVE #?
   1785	006616	002003 				BGE	10$		;NO-- OK
   1786	006620	005401 				NEG	R1		;YES-- MAKE IT POSITIVE
   1787	006622	112722 	000055 			MOVB	#'-,(R2)+	; AND STORE -VE IN STRING
   1788	006626				10$:
   1789	006626	005003 				CLR	R3		;CLEAR REMAINDER
   1790	006630				15$:
   1791	006630	020137 	000016'			CMP	R1,RADIX	;CAN WE DIVIDE?
   1792	006634	002404 				BLT	20$		;NO-- DIVIDE DONE
   1793	006636	163701 	000016'			SUB	RADIX,R1	;YES-- FORM REMAINDER
   1794	006642	005203 				INC	R3		; AND QUOTIENT
   1795	006644	000771 				BR	15$		;LOOP TO DIVIDE R1 BY RADIX
   1796					;
   1797	006646				20$:
   1798	006646					PUSH	R1		;SAVE REMAINDER AS A DIGIT
	006646	010146 				MOV	R1,-(SP)
   1799	006650	010301 				MOV	R3,R1		;GO BACK AND DIVIDE AGAIN
   1800	006652	001402 				BEQ	30$		; UNLESS ALL DONE
   1801	006654					CALL	10$		;EXTRACT ANOTHER DIGIT ONTO STACK
	006654	004737 	006626'			JSR	PC,10$
   1802	006660				30$:
   1803	006660					POP	R1		;DONE-- GET A DIGIT FROM STACK
	006660	012601 				MOV	(SP)+,R1
   1804	006662	062701 	000060 			ADD	#'0,R1		;MAKE IT ASCII
   1805	006666	110122 				MOVB	R1,(R2)+	;STORE IT IN OUTPUT STRING
   1806	006670					RETURN			;FOR ANOTHER DIGIT OR THE END
	006670	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 42
FILE I/O ROUTINES

   1808						.SBTTL	FILE I/O ROUTINES
   1809					;
   1810					; FINDEV -- FIND PUD ENTRY FOR DEVICE
   1811					; CALL:
   1812					;	R0 --	DEVICE NAME AS TWO ASCII BYTES
   1813					;	R1 --	UNIT NUMBER AS BINARY BYTE
   1814					; RETURN:
   1815					;	R0-R4	UNCHANGED
   1816					;	R5 --	PUD ENTRY ADDRESS (POSSIBLY REDIRECTED)
   1817					;
   1818	006672				FINDEV:
   1819	006672	012705 	000000G			MOV	#.PUDBA,R5	;POINT TO START OF PUD
   1820	006676				10$:
   1821	006676	026500 	000000G			CMP	U.DN(R5),R0	;NAME MATCH?
   1822	006702	001003 				BNE	20$		;NO-- GO ON
   1823	006704	126501 	000000G			CMPB	U.UN(R5),R1	;UNIT MATCH?
   1824	006710	001406 				BEQ	30$		;YES-- THIS IS IT
   1825	006712				20$:
   1826	006712	062705 	000000G			ADD	#U.SZ,R5	;NO-- BUMP TO NEXT PUD ENTRY
   1827	006716	020527 	000000G			CMP	R5,#.PUDEA	;END YET?
   1828	006722	103765 				BLO	10$		;NO-- LOOP TILL END
   1829	006724	000261 				SEC			;YES-- DEVICE NOT IN SYSTEM
   1830	006726				30$:
   1831	006726					RETURN			;RETURN FROM FINDEV
	006726	000207 				RTS	PC
   1832					;
   1833					; FNDACP -- FIND ACP FOR DEVICE, PUD ADDR IN R5
   1834					;	RETURNS R2= STD ADDR FOR ACP, OR ZERO IF NOT FOUND
   1835					;
   1836	006730				FNDACP:
   1837	006730	012701 	000070'			MOV	#TYPBUF+4,R1	;NO-- GET A SCRACTH AREA
   1838	006734	012741 				MOV	(PC)+,-(R1)	;SET TO
   1839	006736	003310 				 .RAD50	/ACP/		; THE ACP
   1840	006740	016541 	000000G			MOV	U.DACP(R5),-(R1) ; OF THE DEVICE
   1841	006744	000137 	000000G			JMP	..FSTD		;FIND ADR OF THE STD FOR THE ACP
   1842					;
   1843					; FILMNT -- MOUNT/DISMOUNT DEVICE QUEUE I/O REQUEST
   1844					;	R2 -- ADDRESS OF FUNCTION CONTROL BLOCK
   1845					;
   1846	006750				FILMNT:
   1847	006750	012700 	014010 			MOV	#IO.APV,R0	;PRIVILIGED ACP CONTROL (MOUNT/DISMOUNT)
   1848	006754	005001 				CLR	R1		;NO FILE-ID BLOCK
   1849	006756	005003 				CLR	R3		;NO EXTEND
   1850	006760	005004 				CLR	R4		; . .
   1851	006762	005005 				CLR	R5		;NO ACCESS CONTROL
   1852					;	BR	FILQIO		;DO REQUEST AND RETURN
   1853					;
   1854					; FILQIO -- ROUTINE TO DO QIO REQUEST FOR FILE OPERATIONS
   1855					;	R0 --	I/O FUNCTION CODE (IO.XXX)
   1856					;	R1 --	(PARAMETER #1) ADDRESS OF FILE-ID BLOCK
   1857					;	R2 --	(PARAMETER #2) ADDRESS OF ATTRIBUTE CONTROL BLOCK
   1858					;	R3 --	(PARAMETER #3) EXTEND CONTROL BITS
   1859					;	R4 --	(PARAMETER #4) LOW-ORDER EXTEND INCREMENT
   1860					;	R5 --	(PARAMETER #5) ACCESS CONTROL BITS
   1861					;
   1862					; RETURNS CC-C CLEAR, QEFLAG UNCHANGED IF SUCCESS
   1863					;	  CC-C SET,   QEFLAG NON-ZERO IF ERROR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 42-1
FILE I/O ROUTINES

   1864					;	R0 --	ERROR CODE FROM I/O STATUS OR DIRECTIVE STATUS
   1865					;
   1866	006764				FILQIO:
   1867	006764					QIOW$S	R0,#DSKLUN,#E.FQIO,,#QIOSTS,,<R1,R2,R3,R4,R5>
	006764	010546 				MOV	R5,-(SP)
	006766	010446 				MOV	R4,-(SP)
	006770	010346 				MOV	R3,-(SP)
	006772	010246 				MOV	R2,-(SP)
	006774	010146 				MOV	R1,-(SP)
	006776	005046 				CLR	-(SP)
	007000	012746 	001064'			MOV	#QIOSTS,-(SP)
	007004	005046 				CLR	-(SP)
	007006	112716 	000001 			MOVB	#E.FQIO,(SP)
	007012	012746 	000002 			MOV	#DSKLUN,-(SP)
	007016	010046 				MOV	R0,-(SP)
	007020	012746 				MOV	(PC)+,-(SP)
	007022	   003 	   013 			.BYTE	3,$$$T1
	007024	104375 				EMT	375
   1868	007026	113700 	000056'			MOVB	QEFLAG,R0	;DID A PREVIOUS Q I/O FAIL?
   1869	007032	001010 				BNE	20$		;YES-- JUST RETURN THAT
   1870	007034	113700 	000000G			MOVB	$DSW,R0		;NO-- GET DIRECTIVE STATUS
   1871	007040	103403 				BCS	10$		;ERROR-- JUST RETURN THIS
   1872	007042	113700 	001064'			MOVB	QIOSTS+0,R0	;ERROR OCCUR ON QUEUE I/O?
   1873	007046	002003 				BGE	30$		;N0-- JUST GO ON
   1874	007050				10$:
   1875	007050	110037 	000056'			MOVB	R0,QEFLAG	;YES-- SAVE THAT AS ERROR
   1876	007054				20$:
   1877	007054	000261 				SEC			; AND SAY ERROR
   1878	007056				30$:
   1879	007056					RETURN			;FROM FILQIO
	007056	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 43
DRIVER TABLES

   1881						.SBTTL	DRIVER TABLES
   1882					;
   1883					; DRIVER TABLE DRVTAB:
   1884					;	THIS TABLE CONTAINS ALL THE DEVICE-DEPENDENT DATA AND
   1885					;	DISPATCHES FOR THE DEVICES THAT "SAVE" UNDERSTANDS.
   1886					;
   1887					.MACRO DRIVER	NAME,DV,BTPRM
   1888					$$$ADR=.
   1889					DRVNAM=.-$$$ADR
   1890						 .ASCII	/NAME/		;DEVICE NAME IN ASCII
   1891						 .EVEN
   1892					DRVSET=.-$$$ADR
   1893						 .WORD	DV'SET		;DISK ADDRESS SETUP ROUTINE
   1894					.IF DF FTABS
   1895					DRVABS=.-$$$ADR
   1896						 .WORD	DV'ABS		;ABSOLUTE (/AB) SAVE SETUP ROUTINE
   1897					.ENDC ; .IF DF FTABS
   1898					DRVBOT=.-$$$ADR
   1899						 .WORD	DV'BOOT		;ADDRESS OF BOOTSTRAP CODE
   1900					DRVWRT=.-$$$ADR
   1901						 .WORD	DV'WRT		;DEVICE WRITE ROUTINE
   1902					DRVMSZ=.-$$$ADR
   1903						 .WORD	DV'BMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
   1904					DRVAD1=.-$$$ADR
   1905						 .WORD	DV'BAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
   1906					DRVAD2=.-$$$ADR
   1907						 .WORD	DV'BAD2		;ADDRESS FOR SECOND PART . .
   1908					.IF DF M$$MGE
   1909					DRVUP0=.-$$$ADR
   1910						 .WORD	DV'BUP0		;ADDRESS FOR CURRENT CONTENTS OF UPAR0
   1911					.ENDC
   1912					DRVBTP=.-$$$ADR
   1913						 .WORD	BTPRM		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1914					DRVSIZ=.-$$$ADR
   1915					.ENDM DRIVER
   1916					;
   1917	007060				DRVTAB:
   1918	007060					DRIVER	DX,RX,0
	007060	   104 	   130 			 .ASCII	/DX/		;DEVICE DX IN ASCII
	007062	007140'				 .WORD	RXSET		;DISK ADDRESS SETUP ROUTINE
	007064	007150'				 .WORD	RXBOOT		;ADDRESS OF BOOTSTRAP CODE
	007066	007420'				 .WORD	RXWRT		;DEVICE WRITE ROUTINE
	007070	007402'				 .WORD	RXBMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
	007072	007206'				 .WORD	RXBAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
	007074	007206'				 .WORD	RXBAD2		;ADDRESS FOR SECOND PART . .
	007076	000000 				 .WORD	0		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1919	007100					DRIVER	DB,RP,BP.RP4
	007100	   104 	   102 			 .ASCII	/DB/		;DEVICE DB IN ASCII
	007102	007632'				 .WORD	RPSET		;DISK ADDRESS SETUP ROUTINE
	007104	007702'				 .WORD	RPBOOT		;ADDRESS OF BOOTSTRAP CODE
	007106	010036'				 .WORD	RPWRT		;DEVICE WRITE ROUTINE
	007110	010004'				 .WORD	RPBMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
	007112	007720'				 .WORD	RPBAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
	007114	007726'				 .WORD	RPBAD2		;ADDRESS FOR SECOND PART . .
	007116	000200 				 .WORD	BP.RP4		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1920	007120					DRIVER	DT,TC,0
	007120	   104 	   124 			 .ASCII	/DT/		;DEVICE DT IN ASCII
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 43-1
DRIVER TABLES

	007122	010174'				 .WORD	TCSET		;DISK ADDRESS SETUP ROUTINE
	007124	010200'				 .WORD	TCBOOT		;ADDRESS OF BOOTSTRAP CODE
	007126	010406'				 .WORD	TCWRT		;DEVICE WRITE ROUTINE
	007130	010350'				 .WORD	TCBMSZ		;ADDRESS WHERE MEMORY SIZE GOES IN BOOT
	007132	010204'				 .WORD	TCBAD1		;ADDRESS FOR FIRST PART DISK ADDRESS
	007134	010204'				 .WORD	TCBAD2		;ADDRESS FOR SECOND PART . .
	007136	000000 				 .WORD	0		;BOOTSTRAP PARAMETER BITS FOR DEVICE
   1921		000060 			DRVTBZ=.-DRVTAB
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 44
RX-11 FLOPPY DISK ROUTINES

   1923						.SBTTL	RX-11 FLOPPY DISK ROUTINES
   1924					;
   1925					; RXSET -- SET RX-11 ADDRESS
   1926					;
   1927	007140				RXSET:
   1928	007140	006301 				ASL	R1		;SECTOR IS BLOCK
   1929	007142	006301 				ASL	R1		; TIMES 4
   1930					.IF DF FTABS
   1931						BR	RXSETX		;RETURN FROM RXSET
   1932					;
   1933					; RXABS -- RX-11 ABSOLUTE ADDRESS SET-UP
   1934					;
   1935					RXABS:
   1936						MOV	#<58.*26.>,R1	;SET TO END OF DISK
   1937					.ENDC ; .IF DF FTABS
   1938	007144				RXSETX:
   1939	007144	010100 				MOV	R1,R0		;COPY IT AGAIN FOR BOTH PARTS
   1940	007146					RETURN			;RETURN FROM RXSET/RXABS
	007146	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 45
RX-11 BOOTSTRAP

   1942						.SBTTL	RX-11 BOOTSTRAP
   1943					;
   1944					; RX-11 BOOTSTRAP ROUTINE
   1945					;
   1946					; THIS BOOT IS READ IN FROM SECTOR ZERO (TRACK 1 SECTOR 1)
   1947					;  BY THE BM873-YF ROM.
   1948					;
   1949					; THE FOLLOWING STUFF IS RETURNED IN THE REGISTERS BY THE ROM:
   1950					;
   1951					;	R0 --	READ FUNCTION WITH UNIT # SET OR JUST UNIT #
   1952					;	R1 --	ADDRESS OF RXCS
   1953					;	R5 --	BOOTSTRAP PARAMETER (COPY OF SWITCH REGISTER)
   1954					;
   1955	007150				RXBOOT:
   1956	007150	000240 				NOP			;;;THIS IS A BOOTSTRAP
   1957	007152	106200 				ASRB	R0		;;;GET UNIT BIT INTO CC-C IF NO READ FUNC SPECIFIED
   1958	007154	001401 				BEQ	10$		;;;NO READ FUNC-- GO ON
   1959	007156	106300 				ASLB	R0		;;;READ FUNC ALREADY-- SET IT BACK WITH UNIT #
   1960	007160				10$:
   1961	007160	103002 				BCC	20$		;;;UNIT 0 OR READ FUNC ALREADY?
   1962	007162	012700 	000020 			MOV	#RXUNIT,R0	;;;NO-- SELECT UNIT 1
   1963	007166				20$:
   1964	007166	052700 	000007 			BIS	#RXREAD+RXGO,R0	;;;SET READ FUNCTION
   1965	007172	012706 	002000 			MOV	#2000,SP	;;;SETUP TEMPORARY STACK ABOVE FIRST BLOCK
   1966	007176	005004 				CLR	R4		;;;SET ADDRESS TO START READ AT LOC 0
   1967					;
   1968					; SETUP INITIAL RETURN ADDRESS TO DO A CALL ON
   1969					;  RXBBLK TO READ THE FIRST 256. WORDS
   1970					;
   1971	007200					PUSH	#RXBBLX-RXBOOT	;;;SAME AS CALL RXBBLK/BR RXBBLX
	007200	012746 	000200 			MOV	#RXBBLX-RXBOOT,-(SP)
   1972	007204	012702 				MOV	(PC)+,R2	;;;SETUP INITIAL LOGICAL SECTOR #
   1973	007206				RXBAD1:
   1974	007206	000000 			RXBAD2:	 .WORD	0		;;;SET BY SAVE TO POINT TO FILE
   1975					;	BR	RXBBLK		;;;FALL INTO READ BLOCK ROUTINE
   1976					;
   1977					; RXBBLK -- ROUTINE TO READ ONE BLOCK (256. WORDS) TO MEMORY
   1978					;
   1979					;	R0 --	READ FUNCTION WITH UNIT #
   1980					;	R1 --	ADDRESS OF RXCS
   1981					;	R2 --	CURRENT LOGICAL SECTOR # (UPDATED)
   1982					;	R3 --	SCRATCH
   1983					;	R4 --	CURRENT MEMORY ADDRESS (UPDATED)
   1984					;
   1985	007210				RXBBLK:
   1986	007210					CALL	(PC)		;;;DO 4 CALLS
	007210	004717 				JSR	PC,(PC)
   1987	007212					CALL	(PC)		;;; TO READ SECTOR ROUTINE
	007212	004717 				JSR	PC,(PC)
   1988					;
   1989					; READ A SECTOR
   1990					;
   1991	007214					PUSH	R2		;;;SAVE CURRENT SECTOR
	007214	010246 				MOV	R2,-(SP)
   1992	007216	010011 				MOV	R0,(R1)		;;;EXECUTE A READ SECTOR FUNCTION
   1993					;
   1994					; COMPUTE CURRENT PHYSICAL SECTOR # AND TRACK #
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 45-1
RX-11 BOOTSTRAP

   1995					;
   1996	007220	005003 				CLR	R3		;;;RESET TRACK #
   1997	007222					PUSH	#26.		;;;SET UP DIVISOR ON TOP OF STACK
	007222	012746 	000032 			MOV	#26.,-(SP)
   1998	007226				20$:
   1999	007226	005203 				INC	R3		;;;ONE MORE TRACK
   2000	007230	161602 				SUB	(SP),R2		;;;DIVIDE SECTOR BY 26.
   2001	007232	002375 				BGE	20$		;;; TO FIND LOGICAL SECTOR # WITHIN TRACK
   2002	007234	061602 				ADD	(SP),R2		;;;MAKE SECTOR IN RANGE 0. TO 26.
   2003	007236	005303 				DEC	R3		;;; TRACK IN RANGE 0. TO 76.
   2004	007240	022702 	000014 			CMP	#12.,R2		;;;SECTOR GREATER THAN 12.?
   2005	007244	006102 				ROL	R2		;;;IF SO, CC-C SET, INTERLEAVE FACTOR OF 2.
   2006	007246	006303 				ASL	R3		;;;GET 2*TRACK
   2007	007250	060302 				ADD	R3,R2		;;;SKEW BY 2*TRACK
   2008	007252	060302 				ADD	R3,R2		;;; 4*TRACK
   2009	007254	060302 				ADD	R3,R2		;;; 6*TRACK
   2010	007256				30$:
   2011	007256	161602 				SUB	(SP),R2		;;;GET SECTOR IN RANGE -26. TO -1. AGAIN
   2012	007260	002376 				BGE	30$		;;; . .
   2013	007262				31$:
   2014	007262	062602 				ADD	(SP)+,R2	;;;MAKE LOGICAL SECTOR IN RANGE 0. TO 25.
   2015					;
   2016	007264	006203 				ASR	R3		;;;RESTORE TRACK #
   2017	007266	122223 				CMPB	(R2)+,(R3)+	;;;PHYSICAL SECTOR 1. TO 26., TRACK 1. TO 77.
   2018					;
   2019					; SET SECTOR AND TRACK IN RX-11 TO START READ
   2020					;
   2021	007270				40$:
   2022	007270	105711 				TSTB	(R1)		;;;READY FOR SECTOR #?
   2023	007272	100376 				BPL	40$		;;;NO-- WAIT UNTIL IT IS
   2024	007274	110261 	000002 			MOVB	R2,RXDB-RXCS(R1) ;;;YES-- SET SECTOR #
   2025	007300				50$:
   2026	007300	105711 				TSTB	(R1)		;;;READY FOR TRACK?
   2027	007302	100376 				BPL	50$		;;;NO-- WAIT FOR READY
   2028	007304	110361 	000002 			MOVB	R3,RXDB-RXCS(R1) ;;;YES-- SET TRACK #
   2029					;
   2030					; WAIT FOR FUNCTION TO COMPLETE
   2031					;
   2032	007310				60$:
   2033	007310	032711 	100040 			BIT	#RXERR!RXDONE,(R1) ;;;WAIT FOR EROR OR DONE
   2034	007314	001775 				BEQ	60$		;;; . .
   2035	007316	100714 				BMI	RXBOOT		;;;ERROR-- RETRY WHOLE SHIBANG
   2036					;
   2037					; EMPTY SECTOR BUFFER TO MEMORY
   2038					;
   2039	007320	012711 	000003 			MOV	#RXEMPT!RXGO,(R1) ;;;DO AN EMPTY SECTOR BUFFER FUNCTION
   2040	007324				70$:
   2041	007324	132711 	000240 			BITB	#RXTREQ!RXDONE,(R1) ;;;READY WITH A BYTE?
   2042	007330	001775 				BEQ	70$		;;;NO-- WAIT UNTIL IT IS
   2043	007332	100003 				BPL	80$		;;;DONE-- OFF TO NEXT SECTOR
   2044	007334	116124 	000002 			MOVB	RXDB-RXCS(R1),(R4)+ ;;;STORE A BYTE TO MEMORY
   2045	007340	000771 				BR	70$		;;;LOOP TO EMPTY WHOLE BUFFER
   2046					;
   2047					; BUMP SECTOR TO NEXT SECTOR AND RETURN
   2048					;
   2049	007342				80$:
   2050	007342					POP	R2		;;;RESTORE LOGICAL SECTOR #
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 45-2
RX-11 BOOTSTRAP

	007342	012602 				MOV	(SP)+,R2
   2051	007344	005202 				INC	R2		;;;SET TO NEXT SECTOR
   2052	007346					RETURN			;;;RETURN TO READ ANOTHER SECTOR OR DONE
	007346	000207 				RTS	PC
   2053					;
   2054					.IF G <<.-RXBOOT>-128.>
   2055						.ERROR	<.-RXBOOT> ; RX BOOT TOO BIG FOR FIRST SECTOR
   2056					.ENDC
   2057					;
   2058					; HERE AFTER FIRST BLOCK READ. SETUP KT-11 (IF ANY)
   2059					;
   2060	007350				RXBBLX:
   2061	007350	012737 	000340 	177776 		MOV	#PR7,@#PS	;;;INSURE KERNAL MODE
   2062					.IF DF M$$MGE
   2063						MOV	#77406,R3	;;;SET TO MAP LARST PAGE
   2064						MOV	R3,KPDR0	;;;KERNAL PAGE 0
   2065						MOV	R3,KPDR1	;;; AND 1 (FOR READING)
   2066						MOV	R3,KPDR7	;;; AND EXTERNAL PAGE
   2067						MOV	R3,UPDR0	;;;USER PAGE 0
   2068						MOV	R3,UPDR7	;;; AND USER EXTERNAL PAGE FOR SAVE
   2069						CLR	KPAR0		;;;MAP KP 0 TO ABSOLUTE ZERO
   2070						MOV	(PC)+@(PC)+	;;;USER PAGE TO WHEREEVER SAVE WAS
   2071					RXBUP0:	 .WORD	0,UPAR0		;;;SET BY SAVE
   2072						MOV	#7600,R3	;;;SET TO MAP EXTERNAL PAGE
   2073						MOV	R3,KPAR7	;;; FOR KERNAL
   2074						MOV	R3,UPAR7	;;; AND USER
   2075						MOV	#1,SSR0		;;;ENABLE SEGMENTAION
   2076					.IFTF
   2077					;
   2078					; SETUP STACK AT TOP OF BOOT BLOCK, SAVE BOOT  PARAMETER IN LOC 776
   2079					;
   2080	007356	012706 	001000 			MOV	#1000,SP	;;;SETUP KERNAL STACK
   2081	007362					PUSH	R5		;;;SAVE BOOT PARAMETER AT BOTTOM OF STACK
	007362	010546 				MOV	R5,-(SP)
   2082					;
   2083	007364	005005 				CLR	R5		;;;CLEAR BLOCK POINTER
   2084	007366	000402 				BR	RXBNX1		;;;FINISH THIS BLOCK AND GET NEXT ONE
   2085					;
   2086					; READ NEXT BLOCK (256. WORDS, 4 SECTORS)
   2087					;
   2088	007370				RXBNXT:
   2089					.IFT
   2090						MOV	R5,KPAR1	;;;SET BLOCK TO MAP TO 20000
   2091						MOV	#20000,R4	;;;START AT BEGINNING OF THIS BLOCK
   2092					.ENDC
   2093	007370					CALL	RXBBLK-RXBOOT	;;;READ A BLOCK
	007370	004737 	000040 			JSR	PC,RXBBLK-RXBOOT
   2094	007374				RXBNX1:
   2095	007374	062705 	000010 			ADD	#256.*2/100,R5	;;;BUMP POINTER BY # 32. WORD BLOCKS IN 4 SECTORS
   2096	007400	022705 				CMP	(PC)+,R5	;;;REACHED MEMORY SIZE YET?
   2097	007402	000000 			RXBMSZ:	 .WORD	0		;;;FILLED BY SAVE TO SIZE OF MEMORY IN 32. WORD BLOCKS
   2098	007404	101371 				BHI	RXBNXT		;;;NO-- READ NEXT BLOCK
   2099					;
   2100					; BOOTSTRAP COMPLETE-- RETURN TO SAVE IN USER MODE
   2101					;
   2102					.IF DF M$$MGE
   2103						PUSH	#PS.USR!PS.REG!PR7 ;;;SET TO USER MODE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 45-3
RX-11 BOOTSTRAP

   2104					.IFF
   2105	007406					PUSH	#PS.REG!PR7	;;;SET TO REGISTER SET 1
	007406	012746 	004340 			MOV	#PS.REG!PR7,-(SP)
   2106					.ENDC
   2107	007412					PUSH	#RESTORE	;;;USER PC, RESTORE SYSTEM
	007412	012746 	002734'			MOV	#RESTORE,-(SP)
   2108	007416	000002 				RTI			;;;RETURN TO SAVE
   2109					.IF G <<.-RXBOOT>-<128.*4>>
   2110						.ERROR	<.-RXBOOT> ; RX BOOT TOO BIG FOR FIRST BLOCK
   2111					.ENDC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 46
RX-11 WRITE ROUTINE

   2113						.SBTTL	RX-11 WRITE ROUTINE
   2114					;
   2115					; RXWRT -- WRITE MEMORY TO THE RX-11
   2116					;
   2117					; INPUTS:
   2118					;	DSKADR+0 --	LOGICAL SECTOR TO START WRITE (0.-76.*26.)
   2119					;	DEVUNT --	(BYTE) UNIT # TO WRITE ON
   2120					;	MEMSIZ --	NUMBER OF 32. WORD BLOCKS TO WRITE, STARTING AT
   2121					;			ABSOLUTE ZERO
   2122					;
   2123	007420				RXWRT:
   2124					;
   2125					; SETUP REGISTERS:
   2126					;	R0 --	WRITE FUNCTION WITH PROPER UNIT #
   2127					;	R1 --	ADDRESS OF RXCS
   2128					;	R2 --	LOGICAL SECTOR # TO START WRITE
   2129					;
   2130	007420	113700 	000044'			MOVB	DEVUNT,R0	;;;GET SPECIFIED UNIT #
   2131	007424	001402 				BEQ	10$		;;;ZERO-- OK
   2132	007426	012700 	000020 			MOV	#RXUNIT,R0	;;;NOT ZERO-- ASSUME UNIT 1
   2133	007432				10$:
   2134	007432	052700 	000005 			BIS	#RXWRIT!RXGO,R0	;;;MAKE IT A WRITE FUNCTION
   2135	007436	012701 	177170 			MOV	#RXCS,R1	;;;ADDRESS CONTROL/STATUS REGISTER
   2136	007442	013702 	000004'			MOV	DSKADR+0,R2	;;;GET START SECTOR #
   2137					;
   2138					; SET UP MAP TO ABSOLUTE ZERO
   2139					;
   2140					.IF DF M$$MGE
   2141						MOV	#77406,UPDR1	;;;MAP AS MUCH AS POSSIBLE
   2142					.IFF
   2143	007446	005004 				CLR	R4		;;;CLEAR POINTER TO MEMORY
   2144					.IFTF
   2145	007450	005005 				CLR	R5		;;;CLEAR COUNTER OF 32. WORD BLOCKS WRITTEN
   2146					;
   2147					; WRITE NEXT BLOCK (256. WORDS, 4 SECTORS) TO FLOPPY
   2148					;
   2149	007452				RXWNXT:
   2150					.IFT
   2151						MOV	R5,UPAR1	;;;SET MAP TO CURRENT 32. WORD BLOCK
   2152						MOV	#20000,R4	;;;MAP IT TO 20000
   2153					.ENDC
   2154	007452					CALL	RXWBLK		;;;WRITE A BLOCK (256. WORDS)
	007452	004737 	007472'			JSR	PC,RXWBLK
   2155	007456	062705 	000010 			ADD	#256.*2/100,R5	;;;BUMP TO NEXT 32. WORD BLOCK
   2156	007462	023705 	000014'			CMP	MEMSIZ,R5	;;;FINISHED WITH ALL OF CORE?
   2157	007466	101371 				BHI	RXWNXT		;;;NOT YET-- WRITE NEXT BLOCK
   2158					;
   2159	007470					RETURN			;;;YES-- RETURN FROM RXWRT
	007470	000207 				RTS	PC
   2160					;
   2161					; RXWBLK -- ROUTINE TO WRITE ONE BLOCK (256. WORDS) TO MEMORY
   2162					;
   2163					;	R0 --	WRITE FUNCTION WITH UNIT #
   2164					;	R1 --	ADDRESS OF RXCS
   2165					;	R2 --	CURRENT LOGICAL SECTOR # (UPDATED)
   2166					;	R3 --	SCRATCH
   2167					;	R4 --	CURRENT MEMORY ADDRESS (UPDATED)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 46-1
RX-11 WRITE ROUTINE

   2168					;
   2169	007472				RXWBLK:
   2170	007472					CALL	(PC)		;;;DO 4 CALLS
	007472	004717 				JSR	PC,(PC)
   2171	007474					CALL	(PC)		;;; TO WRITE SECTOR ROUTINE
	007474	004717 				JSR	PC,(PC)
   2172					;
   2173					; FILL SECTOR BUFFER BEFORE WRITE
   2174					;
   2175	007476	012711 	000001 			MOV	#RXFILL!RXGO,(R1) ;;;DO A FILL FUNCTION
   2176	007502				10$:
   2177	007502	132711 	000240 			BITB	#RXTREQ!RXDONE,(R1) ;;;READY FOR A BYTE YET?
   2178	007506	001775 				BEQ	10$		;;;NO-- WAIT UNTIL IT IS
   2179	007510	100003 				BPL	15$		;;;DONE-- GO WRITE
   2180	007512	112461 	000002 			MOVB	(R4)+,RXDB-RXCS(R1) ;;;STORE A BYTE FROM MEMORY IN SECTOR BUFFER
   2181	007516	000771 				BR	10$		;;;LOOP TO FILL BUFFER
   2182					;
   2183					; WRITE A SECTOR
   2184					;
   2185	007520				15$:
   2186	007520					PUSH	R2		;;;SAVE CURRENT SECTOR
	007520	010246 				MOV	R2,-(SP)
   2187	007522	010011 				MOV	R0,(R1)		;;;EXECUTE A WRITE SECTOR FUNCTION
   2188					;
   2189					; COMPUTE CURRENT PHYSICAL SECTOR # AND TRACK #
   2190					;
   2191	007524	005003 				CLR	R3		;;;RESET TRACK #
   2192	007526					PUSH	#26.		;;;SET DIVISOR ON TOP OF STACK
	007526	012746 	000032 			MOV	#26.,-(SP)
   2193	007532				20$:
   2194	007532	005203 				INC	R3		;;;ONE MORE TRACK
   2195	007534	161602 				SUB	(SP),R2		;;;DIVIDE SECTOR BY 26.
   2196	007536	002375 				BGE	20$		;;; TO FIND LOGICAL SECTOR # WITHIN TRACK
   2197	007540	061602 				ADD	(SP),R2		;;;MAKE SECTOR IN RANGE 0. TO 25.
   2198	007542	005303 				DEC	R3		;;; TRACK IN RANGE 0. TO 76.
   2199	007544	022702 	000014 			CMP	#12.,R2		;;;SECTOR GREATER THAN 12.?
   2200	007550	006102 				ROL	R2		;;;IF SO, CC-C SET, INTERLEAVE FACTOR OF 2.
   2201	007552	006303 				ASL	R3		;;;GET 2*TRACK
   2202	007554	060302 				ADD	R3,R2		;;;SKEW BY 2*TRACK
   2203	007556	060302 				ADD	R3,R2		;;; 4*TRACK
   2204	007560	060302 				ADD	R3,R2		;;; 6*TRACK
   2205	007562				30$:
   2206	007562	161602 				SUB	(SP),R2		;;;GET SECTOR IN RANGE -26. TO -1. AGAIN
   2207	007564	002376 				BGE	30$		;;; . .
   2208	007566				31$:
   2209	007566	062602 				ADD	(SP)+,R2	;;;MAKE LOGICAL SECTOR IN RANGE 0. TO 25.
   2210					;
   2211	007570	006203 				ASR	R3		;;;RESTORE TRACK #
   2212	007572	122223 				CMPB	(R2)+,(R3)+	;;;PHYSICAL SECTOR 1. TO 26., TRACK 1. TO 77.
   2213					;
   2214					; SET SECTOR AND TRACK IN RX-11 TO START WRITE
   2215					;
   2216	007574				40$:
   2217	007574	105711 				TSTB	(R1)		;;;READY FOR SECTOR #?
   2218	007576	100376 				BPL	40$		;;;NO-- WAIT UNTIL IT IS
   2219	007600	110261 	000002 			MOVB	R2,RXDB-RXCS(R1) ;;;YES-- SET SECTOR #
   2220	007604				50$:
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 46-2
RX-11 WRITE ROUTINE

   2221	007604	105711 				TSTB	(R1)		;;;READY FOR TRACK?
   2222	007606	100376 				BPL	50$		;;;NO-- WAIT FOR READY
   2223	007610	110361 	000002 			MOVB	R3,RXDB-RXCS(R1) ;;;YES-- SET TRACK #
   2224					;
   2225					; WAIT FOR FUNCTION TO COMPLETE
   2226					;
   2227	007614				60$:
   2228	007614	032711 	100040 			BIT	#RXERR!RXDONE,(R1) ;;;WAIT FOR EROR OR DONE
   2229	007620	001775 				BEQ	60$		;;; . .
   2230	007622	100560 				BMI	WRTERR		;;;GIVE UP IF ERROR AND COMPLAIN (AFTER RESTORE)
   2231					;
   2232					; BUMP SECTOR TO NEXT SECTOR AND RETURN
   2233					;
   2234	007624					POP	R2		;;;RESTORE LOGICAL SECTOR #
	007624	012602 				MOV	(SP)+,R2
   2235	007626	005202 				INC	R2		;;;SET TO NEXT SECTOR
   2236	007630					RETURN			;;;RETURN TO WRITE ANOTHER SECTOR OR DONE
	007630	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 47
RP04/RP06 DISK ROUTINES

   2238						.SBTTL	RP04/RP06 DISK ROUTINES
   2239					;
   2240					; RPSET -- SET RP DISK ADDRESS
   2241					;
   2242	007632				RPSET:
   2243	007632	012702 	000020 			MOV	#16.,R2		;SET LOOP COUNT
   2244	007636				20$:
   2245	007636	006301 				ASL	R1		;MULTIPY ADDRESS
   2246	007640	006100 				ROL	R0		; BY TWO AND MOVE TRACK & SECTOR TO R0
   2247	007642	020027 	000574 			CMP	R0,#19.*20.	;LESS THAN A CYLINDER OF BLOCKS LEFT?
   2248	007646	103403 				BLO	30$		;YES-- WE ARE DOWN TO LAST CYLINDER
   2249	007650	162700 	000574 			SUB	#19.*20.,R0	;NO-- TRIM OFF ANOTHER CYLINDER
   2250	007654	005201 				INC	R1		;COUNT ANOTHER CYLINDER (OR 2**N CYLINDERS)
   2251	007656				30$:
   2252	007656	077211 				SOB	R2,20$		;LOOP FOR ALL SIXTEEN BITS OF ADDRESS
   2253					;
   2254	007660					PUSH	R1		;SAVE CYLINDER #
	007660	010146 				MOV	R1,-(SP)
   2255	007662	012701 	000024 			MOV	#20.,R1		;SET TO DIVIDE TRACK/SECTOR IN R0 BY
   2256	007666					CALL	$DIV		; NUMBER OF SECTORS PER TRACK
	007666	004737 	000000G			JSR	PC,$DIV
   2257	007672	000300 				SWAB	R0		;MOVE TRACK TO HIGH BYTE
   2258	007674	050001 				BIS	R0,R1		; SECTOR TO LOW BYTE (REMAINDER)
   2259	007676					POP	R0		;RESTORE CYLINDER #
	007676	012600 				MOV	(SP)+,R0
   2260	007700					RETURN			;RETURN FROM RPSET
	007700	000207 				RTS	PC
   2261					;
   2262					; RPABS -- SET RP DISK ABSOLUTE ADDRESS
   2263					;
   2264					.IF DF FTABS
   2265					RPABS:
   2266						MOV	#409.,R0	;SET MAINTAINENCE CYLINDER **** WON'T WORK FOR RP06 ****
   2267						MOV	#<13.*BIT8>!<8.*BIT0>,R1 ; AT TRACK 13, SECTOR 8 (VERY END)
   2268						RETURN			;RETURN FROM RPABS
   2269					.ENDC ; .IF DF FTABS
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 48
RP04/RP06 BOOTSTRAP

   2271						.SBTTL	RP04/RP06 BOOTSTRAP
   2272					;
   2273					;
   2274					; RP DISK BOOTSTRAP
   2275					;
   2276					; THIS BOOT IS READ IN FROM BLOCK 0 OF THE RP BY THE BM873-YF ROM.
   2277					;
   2278					; THE ROM RETURNS THE FOLLOWING VALUES IN THE REGISTERS:
   2279					;	R1 --	ADDRESS OF RPCS1
   2280					;	R5 --	BOOTSTRAP PARAMETER (NORMALLY SWITCH REGISTER)
   2281					;
   2282	007702				RPBOOT:
   2283	007702	000240 				NOP			;;;THIS IS A BOOTSTRAP
   2284					;
   2285					; RESET THE RP AND SET UP INITIAL TRACK AND SECTOR ADDRESS
   2286					;
   2287	007704	012711 	000021 			MOV	#RPPRST!RPGO,(R1) ;;;DO READ-IN PRESET
   2288	007710	005004 				CLR	R4		;;;CLEAR COUNTER OF 32. WORD BLOCKS READ
   2289	007712	005061 	000004 			CLR	RPBA-RPCS1(R1)	;;;SET BUS ADDR TO ZERO
   2290		007720'			RPBAD1=	.+2
   2291	007716	012761 	000000 	000034 		MOV	#0,RPDC-RPCS1(R1) ;;;SETUP CYLINDER #
   2292		007726'			RPBAD2=	.+2
   2293	007724	012761 	000000 	000006 		MOV	#0,RPDA-RPCS1(R1) ;;; AND TRACK AND SECTOR
   2294	007732	052761 	004000 	000032 		BIS	#RPECCI,RPOF-RPCS1(R1) ;;;SET ECC INHIBIT
   2295	007740	112711 	000070 			MOVB	#RPREAD,(R1)	;;;SET READ FUNCTION, NO GO
   2296					;
   2297					; READ 1K FROM THE RP TO MEMORY
   2298					;
   2299	007744				RPBNXT:
   2300	007744	012761 	176000 	000002 		MOV	#<-1024.>,RPWC-RPCS1(R1) ;;;SET 1K WORD COUNT
   2301	007752	105211 				INCB	(R1)		;;;DO NEXT READ
   2302	007754				10$:
   2303	007754	105711 				TSTB	(R1)		;;;TRANSFER COMPLETE?
   2304	007756	100376 				BPL	10$		;;;NO-- WAIT FOR DONE
   2305					;
   2306					; CHECK TO MAKE SURE NO ERRORS
   2307					;
   2308	007760	032711 	060000 			BIT	#RPTRE!RPMCPE,(R1) ;;;CONTROLLER ERROR?
   2309	007764	001346 				BNE	RPBOOT		;;;YES-- RETRY
   2310	007766	032761 	140000 	000012 		BIT	#RPATA!RPERR,RPDS-RPCS1(R1) ;;;ATTENTION OR DRIVE ERROR?
   2311	007774	001342 				BNE	RPBOOT		;;;YES-- RETRY
   2312					;
   2313					; SEE IF DONE WITH ALL OF MEMORY
   2314					;
   2315	007776	062704 	000040 			ADD	#1024.*2/100,R4	;;;BUMP # 32. WORD BLOCKS WE'VE READ
   2316	010002	022704 				CMP	(PC)+,R4	;;;FINISHED WITH ALL OF MEMORY YET?
   2317	010004	000000 			RPBMSZ:	 .WORD	0		;;;SET UP BY SAVE TO # 32. WORD BLOCKS OF MEMORY
   2318	010006	101356 				BHI	RPBNXT		;;;NO-- READ SOME MORE
   2319					;
   2320					; BOOTSTRAP COMPLETE-- SETUP KT-11 REGISTERS, IF ANY
   2321					;
   2322	010010	012737 	000340 	177776 		MOV	#PR7,@#PS	;;;INSURE KERNAL MODE
   2323					.IF DF M$$MGE
   2324						MOV	#77406,R2	;;;SET TO MAP MAX PAGE SIZE
   2325						MOV	R2,KPDR0	;;; FOR KERNAL PAGE 0
   2326						MOV	R2,KPDR7	;;; AND KP 7
   2327						MOV	R2,UPDR0	;;; AND USER PAGE 7
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 48-1
RP04/RP06 BOOTSTRAP

   2328						MOV	R2,UPDR7	;;; EXTERNAL PAGE FOR USER, TOO
   2329						CLR	KPAR0		;;;MAP KERNAL PAGE 0 TO ABSOLUTE 0
   2330						MOV	(PC)+,@(PC)+	;;;SET UP USER PAGE 0
   2331					RPBUP0:	 .WORD	0,UPAR0		;;;SPACE FOR ADDR OF PAGE
   2332						MOV	#7600,R2	;;;POINT TO EXTERNAL PAGE
   2333						MOV	R2,KPAR7	;;; FOR EXEC
   2334						MOV	R2,UPAR7	;;; AND USER
   2335						MOV	#1,SSR0		;;;ENABLE SEGMENTATION
   2336					.ENDC
   2337					;
   2338					; SETUP TEMPORARY KERNAL STACK AT TOP OF BOOT BLOCK, AND SAVE
   2339					;  BOOTSTRAP PARAMETER AT LOCATION 776
   2340					;
   2341	010016	012706 	001000 			MOV	#1000,SP	;;;START STACK AT TOP OF OUR BLOCK
   2342	010022					PUSH	R5		;;;SAVE BOOT PARAMETER AT BOTTOM OF STACK
	010022	010546 				MOV	R5,-(SP)
   2343					;
   2344					; RETURN TO SAVE TASK IN USER MODE AT SYSTEM RESTORE ENTRY POINT
   2345					;
   2346					.IF DF M$$MGE
   2347						PUSH	#PS.USR!PS.REG!PR7 ;;;USER MODE, PRIORITY 7
   2348					.IFF
   2349	010024					PUSH	#PS.REG!PR7	;;;SET REGISTER SET 1, PRI 7
	010024	012746 	004340 			MOV	#PS.REG!PR7,-(SP)
   2350					.ENDC
   2351	010030					PUSH	#RESTORE	;;; AND RETURN PC IN USER SPACE
	010030	012746 	002734'			MOV	#RESTORE,-(SP)
   2352	010034	000002 				RTI			;;;BACK TO SAVE.
   2353					.IF G <<.-RPBOOT>-<256.*2>>
   2354						.ERROR	<.-RPBOOT> ;  RP BOOT TOO BIG FOR FIRST BLOCK
   2355					.ENDC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 49
RP04/RP06 WRITE ROUTINE

   2357						.SBTTL	RP04/RP06 WRITE ROUTINE
   2358					;
   2359					; RPWRT -- WRITE MEMORY TO THE RP DISK
   2360					;
   2361					; INPUTS:
   2362					;	DSKADR+0 --	CYLINDER ADDRESS TO START TRANSFER
   2363					;	DSKADR+2 --	(BYTE) SECTOR TO START
   2364					;	DSKADR+3 --	(BYTE) TRACK TO START
   2365					;	DEVUNT --	(BYTE) UNIT # TO WRITE ON
   2366					;	MEMSIZ --	# OF 32. WORD BLOCKS OF MEMORY TO WRITE
   2367					;
   2368	010036				RPWRT:
   2369	010036	012701 	176700 			MOV	#RPCS1,R1	;;;GET ADDRESS OF RPCS1
   2370	010042	005004 				CLR	R4		;;;CLEAR POINTER TO # 32. WORD BLOCKS WRITTEN
   2371	010044	113761 	000044'	000010 		MOVB	DEVUNT,RPCS2+0-RPCS1(R1);;;SET UNIT #
   2372					;
   2373					; INITIALIZE DRIVE
   2374					;
   2375	010052	032711 	004000 			BIT	#RPDVA,(R1)	;;;IS DRIVE AVAILABLE?
   2376	010056	001442 				BEQ	WRTERR		;;;NO-- GIVE ERROR
   2377	010060	012711 	000021 			MOV	#RPPRST!RPGO,(R1) ;;;DO A READ-IN PRESET
   2378	010064	005061 	000004 			CLR	RPBA-RPCS1(R1)	;;;CLEAR BUS ADDRESS TO START WRITE AT ZERO
   2379	010070	013761 	000004'	000034 		MOV	DSKADR+0,RPDC-RPCS1(R1) ;;;SETUP DESIRED CYLINDER
   2380	010076	013761 	000006'	000006 		MOV	DSKADR+2,RPDA-RPCS1(R1) ;;; AND TRACK AND SECTOR
   2381	010104	052761 	004000 	000032 		BIS	#RPECCI,RPOF-RPCS1(R1) ;;;SET ECC INHIBIT
   2382	010112	112711 	000060 			MOVB	#RPWRIT,(R1)	;;;SET WRITE FUNCTION, NO GO
   2383					;
   2384					; WRITE ONE BLOCK OF MEMORY TO THE RP04
   2385					;
   2386	010116				RPWNXT:
   2387	010116	012761 	177400 	000002 		MOV	#<-256.>,RPWC-RPCS1(R1) ;;;SET -VE WORD COUNT
   2388	010124	105211 				INCB	(R1)		;;;WRITE NEXT BLOCK
   2389	010126				10$:
   2390	010126	105711 				TSTB	(R1)		;;;DONE SET?
   2391	010130	100376 				BPL	10$		;;;NO-- WAIT FOR TRANSFER TO COMPLETE
   2392					;
   2393					; CHECK FOR ERRORS DURING TRANSFER
   2394					;
   2395	010132	032711 	060000 			BIT	#RPTRE!RPMCPE,(R1) ;;;CONTROLLER ERROR?
   2396	010136	001012 				BNE	WRTERR		;;;YES-- GIVE UP
   2397	010140	032761 	140000 	000012 		BIT	#RPATA!RPERR,RPDS-RPCS1(R1) ;;;DRIVE ERROR?
   2398	010146	001006 				BNE	WRTERR		;;;YES-- GIVE UP ALSO
   2399					;
   2400					; SEE IF DONE WITH ALL OF MEMORY
   2401					;
   2402	010150	062704 	000010 			ADD	#256.*2/100,R4	;;;ADD A BLOCK'S WORTH OF 32. WORD BLOCKS
   2403	010154	023704 	000014'			CMP	MEMSIZ,R4	;;;DONE WITH ALL OF MEMORY?
   2404	010160	101356 				BHI	RPWNXT		;;;NO-- WRITE NEXT BLOCK
   2405	010162					RETURN			;;;YES-- RETURN FROM RPWRT
	010162	000207 				RTS	PC
   2406					;
   2407					;
   2408					; HERE ON WRITE ERRORS ON EITHER THE RP04 OR THE RX-11
   2409					; JUST RETURN TO RESTORE WITH WEFLAG= 1 TO INDICATE ERROR
   2410					;
   2411	010164				WRTERR:
   2412	010164	105237 	000060'			INCB	WEFLAG		;;;NOTE ERROR IN FLAG
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 49-1
RP04/RP06 WRITE ROUTINE

   2413	010170	000137 	002734'			JMP	RESTORE		;;;RESTORE SYSTEM, THEN GIVE ERROR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 50
TC-11 DECTAPE ROUTINES

   2415						.SBTTL	TC-11 DECTAPE ROUTINES
   2416					;
   2417					; TCABS -- SET TC-11 ABSOLUTE BLOCK #
   2418					;
   2419					.IF DF FTABS
   2420					TCABS:
   2421						MOV	#^D<578-<28*4>-1>,R1 ;SET TO END OF TAPE
   2422					;	BR	TCSET		;ONWARD!
   2423					.ENDC ; .IF DF FTABS
   2424					;
   2425					; TCSET -- SET TC-11 BLOCK #
   2426					;
   2427	010174				TCSET:
   2428	010174	010100 				MOV	R1,R0		;JUST COPY LOW BLOCK #
   2429	010176					RETURN			; . .
	010176	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 51
TC-11 BOOTSTRAP

   2431						.SBTTL	TC-11 BOOTSTRAP
   2432					;
   2433					; HERE TO BOOT FROM TC-11
   2434					;
   2435					; REGISTERS LEFT BY BM-873 ROM:
   2436					;	R1 --	ADDRESS OF TCCM
   2437					;	R5 --	BOOT PARAMETER WORD
   2438					;
   2439	010200				TCBOOT:
   2440	010200	000240 				NOP			;;;THIS IS A BOOTSTRAP
   2441					;
   2442					; SELECT UNIT AND SET UP REGISTERS:
   2443					;	R1 --	ADDRESS OF TCCM
   2444					;	R2 --	BLOCK #
   2445					;	R4 --	COUNT OF 32. WORD BLOCKS READ
   2446					;
   2447		010204'			TCBAD1=.+2
   2448		010204'			TCBAD2=.+2
   2449	010202	012702 	000000 			MOV	#0,R2		;;;GET BLOCK #
   2450	010206	010203 				MOV	R2,R3		;;;COPY THE BLOCK #
   2451	010210	162703 	000003 			SUB	#3,R3		;;;BACK TO THREE BLOCK BEFORE IT
   2452	010214	005004 				CLR	R4		;;;RESET # BLOCKS READ
   2453	010216	005061 	000004 			CLR	TCBA-TCCM(R1)	;;;RESET BUS ADDRESS REGISTER
   2454					;
   2455					; SEARCH FOR CURRENT BLOCK ON TAPE
   2456					;
   2457	010222	112711 	000002 			MOVB	#TCRNUM,(R1)	;;;SET READ BLOCK # FUNCTION
   2458	010226				5$:
   2459	010226	052711 	004000 			BIS	#TCREV,(R1)	;;;SET REVERSE MODE
   2460	010232	105211 				INCB	(R1)		;;;START READ BLOCK FUNCTION
   2461	010234				10$:
   2462	010234	105711 				TSTB	(R1)		;;;READY?
   2463	010236	100376 				BPL	10$		;;;NO-- WAIT
   2464	010240	005711 				TST	(R1)		;;;ERROR?
   2465	010242	100007 				BPL	40$		;;;NO-- CHECK OUT BLOCK #
   2466	010244				20$:
   2467	010244	005761 	177776 			TST	TCST-TCCM(R1)	;;;ERROR-- IS IT END-ZONE?
   2468	010250	100353 				BPL	TCBOOT		;;;NO-- RETRY
   2469	010252	032711 	004000 			BIT	#TCREV,(R1)	;;;GOING REVERSE?
   2470	010256	001763 				BEQ	5$		;;;NO-- GO THAT WAY
   2471	010260	000403 				BR	50$		;;;YES-- GO FORWARD
   2472					;
   2473	010262				40$:
   2474	010262	026103 	000006 			CMP	TCDT-TCCM(R1),R3 ;;;PAST BLOCK YET (CURRENT BLOCK LOW)?
   2475	010266	003357 				BGT	5$		;;;NO-- KEEP SEARCHING IN REVERSE
   2476	010270				50$:
   2477	010270	042711 	004000 			BIC	#TCREV,(R1)	;;;GO FORWARD
   2478	010274	105211 				INCB	(R1)		;;;START READ BLOCK # FUNCTION
   2479	010276				60$:
   2480	010276	105711 				TSTB	(R1)		;;;READY?
   2481	010300	100376 				BPL	60$		;;;NO-- WAIT
   2482	010302	005711 				TST	(R1)		;;;ERROR?
   2483	010304	100757 				BMI	20$		;;;YES-- CHECK IT OUT
   2484	010306	026102 	000006 			CMP	TCDT-TCCM(R1),R2 ;;;AT PROPER BLOCK?
   2485	010312	002766 				BLT	50$		;;;NOT YET-- KEEP GOING
   2486	010314	003344 				BGT	5$		;;;OOPS, PAST IT-- GO BACK AGAIN
   2487					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 51-1
TC-11 BOOTSTRAP

   2488					; BLOCK FOUND-- START TRANSFER
   2489					;
   2490	010316	112711 	000004 			MOVB	#TCREAD,(R1)	;;;SET READ FUNCTION, NO GO
   2491					;
   2492					; START NEXT 1.K TRANSFER
   2493					;
   2494	010322				TCBNXT:
   2495	010322	012761 	176000 	000002 		MOV	#<-1024.>,TCWC-TCCM(R1) ;;;SET WORD COUNT
   2496	010330	105211 				INCB	(R1)		;;;SET GO
   2497	010332				10$:
   2498	010332	105711 				TSTB	(R1)		;;;READY?
   2499	010334	100376 				BPL	10$		;;;NO-- WAIT FOR TRANSFER TO COMPLETE
   2500	010336	005711 				TST	(R1)		;;;ERRORS?
   2501	010340	100717 				BMI	TCBOOT		;;;YES-- TRY IT ALL AGAIN
   2502					;
   2503					; SEE IF ALL DONE
   2504					;
   2505	010342	062704 	000040 			ADD	#1024.*2/100,R4	;;;BUMP COUNT OF 32. WORD BLOCKS READ
   2506	010346	022704 				CMP	(PC)+,R4	;;;DONE YET?
   2507	010350	000000 			TCBMSZ:	 .WORD	0		;;;SPACE FOR SIZE
   2508	010352	101363 				BHI	TCBNXT		;;;NO-- GET NEXT BLOCK
   2509	010354	112711 	000011 			MOVB	#TCSTOP+TCGO,(R1) ;;;STOP TAPE
   2510					;
   2511					; BOOTSTRAP COMPLETE-- SETUP KT-11 REGISTERS, IF ANY
   2512					;
   2513	010360	012737 	000340 	177776 		MOV	#PR7,@#PS	;;;INSURE KERNAL MODE
   2514					.IF DF M$$MGE
   2515						MOV	#77406,R2	;;;SET TO MAP MAX PAGE SIZE
   2516						MOV	R2,KPDR0	;;; FOR KERNAL PAGE 0
   2517						MOV	R2,KPDR7	;;; AND KP 7
   2518						MOV	R2,UPDR0	;;; AND USER PAGE 7
   2519						MOV	R2,UPDR7	;;; EXTERNAL PAGE FOR USER, TOO
   2520						CLR	KPAR0		;;;MAP KERNAL PAGE 0 TO ABSOLUTE 0
   2521						MOV	(PC)+,@(PC)+	;;;SET UP USER PAGE 0
   2522					TCBUP0:	 .WORD	0,UPAR0		;;;SPACE FOR ADDR OF PAGE
   2523						MOV	#7600,R2	;;;POINT TO EXTERNAL PAGE
   2524						MOV	R2,KPAR7	;;; FOR EXEC
   2525						MOV	R2,UPAR7	;;; AND USER
   2526						MOV	#1,SSR0		;;;ENABLE SEGMENTATION
   2527					.ENDC
   2528					;
   2529					; SETUP TEMPORARY KERNAL STACK AT TOP OF BOOT BLOCK, AND SAVE
   2530					;  BOOTSTRAP PARAMETER AT LOCATION 776
   2531					;
   2532	010366	012706 	001000 			MOV	#1000,SP	;;;START STACK AT TOP OF OUR BLOCK
   2533	010372					PUSH	R5		;;;SAVE BOOT PARAMETER AT BOTTOM OF STACK
	010372	010546 				MOV	R5,-(SP)
   2534					;
   2535					; RETURN TO SAVE TASK IN USER MODE AT SYSTEM RESTORE ENTRY POINT
   2536					;
   2537					.IF DF M$$MGE
   2538						PUSH	#PS.USR!PS.REG!PR7 ;;;USER MODE, PRIORITY 7
   2539					.IFF
   2540	010374					PUSH	#PS.REG!PR7	;;;SET REGISTER SET 1, PRI 7
	010374	012746 	004340 			MOV	#PS.REG!PR7,-(SP)
   2541					.ENDC
   2542	010400					PUSH	#RESTORE	;;; AND RETURN PC IN USER SPACE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 51-2
TC-11 BOOTSTRAP

	010400	012746 	002734'			MOV	#RESTORE,-(SP)
   2543	010404	000002 				RTI			;;;BACK TO SAVE.
   2544					.IF G <<.-TCBOOT>-<256.*2>>
   2545						.ERROR	<.-TCBOOT> ;  TC BOOT TOO BIG FOR FIRST BLOCK
   2546					.ENDC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 52
TC-11 WRITE ROUTINE

   2548						.SBTTL	TC-11 WRITE ROUTINE
   2549					;
   2550					; TCWRT -- TC-11 DECTAPE WRITE ROUTINE
   2551					;
   2552					; INPUTS:
   2553					;	DSKADR+0 --	BLOCK # TO START TRANSFER AT
   2554					;	DEVUNT --	UNIT # TO SCRIBBLE ON
   2555					;	MEMSIZ --	# OF 32. WORD BLOCKS TO WRITE
   2556					;
   2557					; REGISTERS:
   2558					;	R1 --	ADDRESS OF TCCM
   2559					;	R2 --	BLOCK #
   2560					;	R4 --	COUNT OF 32. WORD BLOCKS WRITTEN
   2561					;
   2562	010406				TCWRT:
   2563	010406	012701 	177342 			MOV	#TCCM,R1	;;;ADDRESS COMMAND REGISTER
   2564	010412	013702 	000004'			MOV	DSKADR+0,R2	;;;GET BLOCK #
   2565	010416	010203 				MOV	R2,R3		;;;COPY THE BLOCK #
   2566	010420	162703 	000003 			SUB	#3,R3		;;;BACK TO THREE BLOCK BEFORE IT
   2567	010424	113761 	000044'	000001 		MOVB	DEVUNT,1(R1)	;;;SELECT PROPER UNIT
   2568	010432	005004 				CLR	R4		;;;RESET # BLOCKS READ
   2569	010434	005061 	000004 			CLR	TCBA-TCCM(R1)	;;;RESET BUS ADDRESS REGISTER
   2570					;
   2571					; SEARCH FOR CURRENT BLOCK ON TAPE
   2572					;
   2573	010440	112711 	000002 			MOVB	#TCRNUM,(R1)	;;;SET READ BLOCK # FUNCTION
   2574	010444				5$:
   2575	010444	052711 	004000 			BIS	#TCREV,(R1)	;;;SET REVERSE MODE
   2576	010450	105211 				INCB	(R1)		;;;START READ BLOCK FUNCTION
   2577	010452				10$:
   2578	010452	105711 				TSTB	(R1)		;;;READY?
   2579	010454	100376 				BPL	10$		;;;NO-- WAIT
   2580	010456	005711 				TST	(R1)		;;;ERROR?
   2581	010460	100007 				BPL	40$		;;;NO-- CHECK OUT BLOCK #
   2582	010462				20$:
   2583	010462	005761 	177776 			TST	TCST-TCCM(R1)	;;;ERROR-- IS IT END-ZONE?
   2584	010466	100244 				BPL	TCBOOT		;;;NO-- RETRY
   2585	010470	032711 	004000 			BIT	#TCREV,(R1)	;;;GOING REVERSE?
   2586	010474	001763 				BEQ	5$		;;;NO-- GO THAT WAY
   2587	010476	000403 				BR	50$		;;;YES-- GO FORWARD
   2588					;
   2589	010500				40$:
   2590	010500	026103 	000006 			CMP	TCDT-TCCM(R1),R3 ;;;PAST BLOCK YET (CURRENT BLOCK LOW)?
   2591	010504	003357 				BGT	5$		;;;NO-- KEEP SEARCHING IN REVERSE
   2592	010506				50$:
   2593	010506	042711 	004000 			BIC	#TCREV,(R1)	;;;GO FORWARD
   2594	010512	105211 				INCB	(R1)		;;;START READ BLOCK # FUNCTION
   2595	010514				60$:
   2596	010514	105711 				TSTB	(R1)		;;;READY?
   2597	010516	100376 				BPL	60$		;;;NO-- WAIT
   2598	010520	005711 				TST	(R1)		;;;ERROR?
   2599	010522	100757 				BMI	20$		;;;YES-- CHECK IT OUT
   2600	010524	026102 	000006 			CMP	TCDT-TCCM(R1),R2 ;;;AT PROPER BLOCK?
   2601	010530	002766 				BLT	50$		;;;NOT YET-- KEEP GOING
   2602	010532	003344 				BGT	5$		;;;OOPS, PAST IT-- GO BACK AGAIN
   2603					;
   2604					; BLOCK FOUND-- START TRANSFER
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 52-1
TC-11 WRITE ROUTINE

   2605					;
   2606	010534	112711 	000014 			MOVB	#TCWRIT,(R1)	;;;SET WRITE FUNCTION, NO GO
   2607					;
   2608					; START NEXT 1.K TRANSFER
   2609					;
   2610	010540				TCWNXT:
   2611	010540	012761 	177400 	000002 		MOV	#<-256.>,TCWC-TCCM(R1) ;;;SET WORD COUNT
   2612	010546	105211 				INCB	(R1)		;;;SET GO
   2613	010550				10$:
   2614	010550	105711 				TSTB	(R1)		;;;READY?
   2615	010552	100376 				BPL	10$		;;;NO-- WAIT FOR TRANSFER TO COMPLETE
   2616	010554	005711 				TST	(R1)		;;;ERRORS?
   2617	010556	100410 				BMI	TCWERR		;;;YES-- GIVE UP
   2618					;
   2619					; SEE IF ALL DONE
   2620					;
   2621	010560	062704 	000010 			ADD	#256.*2/100,R4	;;;BUMP COUNT OF 32. WORD BLOCKS TRANSFERED
   2622	010564	023704 	000014'			CMP	MEMSIZ,R4	;;;DONE YET?
   2623	010570	101363 				BHI	TCWNXT		;;;NO-- GET NEXT BLOCK
   2624	010572	112711 	000011 			MOVB	#TCSTOP+TCGO,(R1) ;;;STOP TAPE
   2625	010576					RETURN			;;;FROM TCWRT
	010576	000207 				RTS	PC
   2626					;
   2627					; HERE ON ERROR ON TC-11
   2628					;
   2629	010600				TCWERR:
   2630	010600	000137 	010164'			JMP	WRTERR		;;;GIVE UP
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 53
CHK11 -  ONCE ONLY SYSTEM DIAGNOSTIC  25 NOV 80

   2632					.SBTTL	CHK11 -  ONCE ONLY SYSTEM DIAGNOSTIC  25 NOV 80
   2633
   2634		000000 			.REPT 0
   2635
   2636					COPYRIGHT (C) 1977,1978,1979,1980,1981 BY
   2637					DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
   2638
   2639					THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
   2640					ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
   2641					INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
   2642					COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
   2643					OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
   2644					TRANSFERRED.
   2645
   2646					THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
   2647					AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
   2648					CORPORATION.
   2649
   2650					DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
   2651					SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
   2652
   2653					.ENDR
   2654
   2655
   2656
   2657
   2658					; Version 3(67)  13 NOV 79	DMCC/EGF/JBS/LAD/KR/EJW/MM/DRL/KR/DRL/KR/DRL
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 54
CHK11 -  ONCE ONLY SYSTEM DIAGNOSTIC  25 NOV 80

   2660					;	Revision History
   2661
   2662					; 1(13)	08-Sep-76 JBS	Started revision history
   2663					; 1(14)	19-Oct-76 KR	Added DZ11 code and support to count devices below it
   2664					;			Also added more timing before RESET, and CPU type
   2665					;			checking
   2666					;			as well as fixing bug in core reporting on 11/34
   2667					; 1(15)	03-Nov-76 KR	fixed bug in 11/05 CPU determination
   2668					; 1(16)	04-NOV-76 JBS	INCLUDED EJW'S DTE CHECKING
   2669					; 1(17)	29-DEC-76 JBS	INCLUDED SOME DN61-S CODE
   2670					; 1(20)	21-JAN-77 JBS	REMOVED USE OF SPL INSTRUCTION
   2671					; 1(21) 25-JAN-77 JBS	STARTED ADDING DN20 CODE (INCOMPLETE)
   2672					; 1(22) 28-JAN-77 JBS	SUPPORT DS11 ONLY ON DC75 (CONFLICT WITH LP20)
   2673					; 1(23) 31-JAN-77 JBS	ASSUME NOT DN20 ADDRESSING UNLESS REQUESTED
   2674					; 1(24) 01-FEB-77 JBS	MINOR LISTING CLEANUP
   2675					; 1(25) 14-FEB-77 JBS	UPDATED LEGAL NOTICE AS PER 005-003-286-03
   2676					; 1(26)	09-MAR-77 JBS	STORE DTE20 ADDRESSES AND VECTORS
   2677					;			 AND DO SOME LISTING CLEANUP
   2678					; 1(27) 21-MAR-77 JBS	REMOVE KGLOAD MACRO
   2679					;
   2680					; 1(30) 01-APR-77 JBS	CHANGE NAME TO DN61
   2681					; 1(31)	06-APR-77 MM	SAVE INTERRUPT VECTOR LOCATION
   2682					;			IN A DIFFERENT GLOBAL CELL DTEDTO
   2683					; 1(32) 12-APR-77 JBS	FIX SUPPRESSION OF KG11-A MESSAGE
   2684					; 1(33)	14-APR-77 JBS	FIX DUP11 VECTOR CALCULATION
   2685					;			 AND ADD KMC11
   2686					; 1(34) 17-MAY-77 JBS	REMOVE EXPLICIT REFERENCES TO PS REGISTER AND
   2687					;			 FILL VECTOR SPACE TO 1200 INSTEAD OF 1000.
   2688					; 1A(35) 27-JUN-77 JBS	IMPROVE KMC11 CHECKING AND START IT
   2689					;			 IF REQUESTED.
   2690					; 1A(36) 30-JUN-77 JBS	IMPROVE KMC11 CHECKING AGAIN AND LOAD ITS
   2691					;  TO 1A(37)		 CRAM IF REQUESTED.
   2692					; 2(40)	18-JUL-77 JBS	CHANGE VERSION NUMBER TO 2, DONT LOAD
   2693					;			 KMC11 CRAM IF SIZE11 DID.
   2694					; 2(41)	12-SEP-77 JBS	DONT LOAD MORE THAN 2000 OCTAL
   2695					;			 WORDS OF KMC11 CRAM (I.E., DONT LOAD
   2696					;			 THE VERSION NUMBER).
   2697					; 2(42)	13-SEP-77 JBS	REMOVE ALL REFERENCES TO REGISTER 'P'.
   2698					; 2(43)	14-OCT-77 JBS	FIX KMC11 STARTING LOOP TO START MORE
   2699					;			 THAN ONE KMC11
   2700					; 2(44) 16-JAN-78 DRL	FILL ONLY TO 1000 NOT 1200 FOR VECTORS
   2701					;			 (THIS PREVENTS SCREWING DDT.P11)
   2702					; 3(45) 16-JAN-78 DRL	CORRECT DC75 CONDITIONALS
   2703					;			 UPDATA VERSION NUMBER
   2704					;			 TAKE OUT EXTRA DC75 CODE
   2705					;			 FIX DL10 TESTS
   2706					; 3(46) 23-JAN-78 DRL	RESTRUCTURE DEVICE MACROS, AND
   2707					;			 FIX WAY CODE IS INCLUDED OR NOT
   2708					; 3(47) 2-Mar-78 KR	Add code to check all of memory, using
   2709					;			 memory management if present
   2710					; 3(50) 5-Mar-78 KR	Add code to distinguish types of KMC11's on DN20
   2711					; 3(51) 21-JUN-78 DRL	Fix timing problems for dz11's
   2712					; 3(52) 7-jul-78 drl	Add LP20 code
   2713					; 3(53) 3-AUG-78 DRL	Make the LP20 code a little smarter
   2714					; 3(54) 5-Sep-78 KR	Add DMC11 code, and make DZ11 code skip echo test
   2715					;			if interrupt didn't occur (since it will
   2716					;			always fail as well)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 54-1
CHK11 -  ONCE ONLY SYSTEM DIAGNOSTIC  25 NOV 80

   2717					; 3(55) 12-Sep-78	Allow DL10 on other than 100000
   2718					; 3(57) 26-Sep-78	Put back .BLKB at CKBLK
   2719					; 3(60) 27-NOV-78 DRL	FEATURE TEST THE CONTINUE ON ERROR STUFF
   2720					; 3(64) 26-JUN-79 DRL	FIX DMC BUG (MR NOT SET AT RIGHT TIME)
   2721					;			FIX TYPO FOR DL11 CODE
   2722
   2723		000067 			VRCHK1=067
   2724		000004 			ERRINT=4
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 55
CHK11 -  ONCE ONLY SYSTEM DIAGNOSTIC  25 NOV 80

   2726					; THIS CODE IS EXECUTED ONCE AND THEN OVERLAID WITH TABLES
   2727					;
   2728					; CALL TO CHK11 IS AS FOLLOWS:
   2729					;	JSR	PC,CHK.11
   2730					;	.ASCIZ	\PROGRAM NAME\
   2731					;	RETURNS BY JUMP TO 'BEGIN'
   2732					;	OR TO  'CKDONE' IF THIS IS DEFINED
   2733					;
   2734					;	CHK11 WILL DETERMINE WHAT HARDWARE IS PRESENT
   2735					;	  AND WILL PERFORM A FEW SIMPLE DIAGNOSTIC TESTS OF THE HDW
   2736					;
   2737					;	FOR DEV = < DH11, DM11BB, DP11, DQ11, DS11, DU11>
   2738					;	CHK11 WILL:	JSR PC,CKA'DEV
   2739					;			WITH (R3) = DEVICE VECTOR
   2740					;			AND (R4) = DEVICE ADR
   2741					;			AND (R1) = DEVICE ADR
   2742					;	ONCE FOR EACH DEVICE AND A FINAL:
   2743					;			JSR	PC,CKA'DEV WITH (R4)=0
   2744					;
   2745					; ALL SYMBOLS BEGINING CHK OR CK ARE RESERVED FOR CHK11
   2746	010604					ND	FLOATV,300	;FIRST FLOATING VECTOR
   2747	010604					ND	FLOATD,160000	;FLOATING DEVICES BEGIN HERE + 10
   2748	010604					ND	CKDONE,BEGIN
   2749	010604					ND	BEGIN,CKDONE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 56
CHK11 MACRO'S

   2751					.SBTTL		CHK11 MACRO'S
   2752
   2753					;THIS MACRO IS USED FOR TYPING TEXT AND/OR FOR
   2754					;ERROR REPORTING.
   2755					;
   2756					;	ARG	BITS	;WHAT TO DO ON A TRAP
   2757		000001 					CKEFAT=	B0	;FATAL ERROR - HALT
   2758		000002 					CKEPC=	B1	;PRINT ADDRESS OF ERROR TRAP
   2759		000004 					CKEMSG=	B2	;PRINT THE MESSAGE FOLLOWING CK11SC
   2760		000010 					CKEDID=	B3	;PRINT DEVICE ID AND REG
   2761		000020 					CKEMSE=	B4	;PRINT THE MESSAGE POINTED TO BY
   2762									; THE ADDRESS FOLLOWING THE TRAP.
   2763		000040 					CKENCL=	B5	;PRINT TEXT WITH OUT CR+LF
   2764		000100 					CKEGB=	B6	;PRINT ADR/REG=XXXXX GD=XXXXX  BD=XXXXX XOR=XXXXX
   2765		000200 					CKEWRN=B7	;address is virtual, print physical [3(47)]
   2766					;
   2767					;	ARG	MSG	;TEXT TO BE OUTPUT
   2768					;
   2769					;	ARG	COMENT	;ADD A COMMENT TO TRAP
   2770					;
   2771					;	ARG	STOPCD	;ON A FATAL ERROR VALUE TO BE PUT IN R0
   2772					;
   2773					.MACRO	CK11SC	BITS,MSG,COMENT,STOPCD
   2774					.NCHR	CKZZZX,<MSG>
   2775					.IIF NB,STOPCD,	MOV	#STOPCD,CKSPCD	;VALUE TO DISPLAY IN R0,
   2776										;AND DATA LIGHTS ON FATAL ERROR
   2777					.IIF	EQ,CKZZZX,	TRAP	BITS		;COMENT
   2778					.IF	NE,CKZZZX
   2779					.IF	EQ,<BITS&CKEMSE>
   2780						TRAP	BITS!CKEMSG		;COMENT
   2781					;	ASCIZ	<MSG>
   2782					.ENDC
   2783					.IF	NE,<BITS&CKEMSE>
   2784						TRAP	BITS&<^CCKEMSG>		;COMENT
   2785						.WORD	MSG			;ADR OF MESSAGE
   2786					.ENDC
   2787					.ENDC
   2788					.ENDM	CK11SC
   2789
   2790
   2791
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 57
CHK11 MACRO'S

   2793					;THIS MACRO IS USED TO CHECK INTERRUPT CONDITIONS
   2794					;
   2795					;	ARG	ENBADR		;DEVICE ADR TO ENABLE INTERRUPTS
   2796					;
   2797					;	ARG	INTADR		;DEVICE ADR TO GENERATE AN INTERRUPT
   2798					;
   2799					;	ARG	ENLBIT		;BIT TO ENABLE INTERRUPTS
   2800					;
   2801					;	ARG	INTBIT		;BITS TO CHECK INTERRUPT CONDITIONS
   2802					;
   2803					;	ARG	BITCLR		;BITS TO CLEAR INTERRUPT CONDITIONS
   2804					;				;IF CLEARING INTERRUPT BITS WON'T CLEAR
   2805					;				;THEM.  [EXAMPLE - DL10]
   2806					;
   2807					;	ARG	INTSUB		;subroutine to cause interrupt, if normal bit
   2808					;				;setting doesnt work. Otherwise 0.
   2809					;
   2810					.MACRO	$CKINT	ENBADR,INTADR,ENLBIT,INTBIT,BITCLR,INTSUB
   2811					.IIF	NB,ENBADR,	MOV	ENBADR,R1			;LOAD ENABLE ADR
   2812					.IIF	NB,INTADR,	MOV	INTADR,R2			;LOAD INTERRUPT ADR
   2813						JSR	R5,CKINT		;GO CHECK INTERRUPTS
   2814						.WORD	ENLBIT			;ENABLE BITS -  ENLBIT
   2815						.WORD	INTBIT			;INTERRUPT BITS -  INTBIT
   2816					.IIF	B,BITCLR,	.WORD	0			;NO SPECIAL CLEAR BITS
   2817					.IIF	NB,BITCLR,	.WORD	BITCLR			;BITS TO CLEAR DEVICE - BITCLR
   2818					.IIF	B,INTSUB,	.WORD	0			;no interrupt SUB,routine needed
   2819					.IIF	NB,INTSUB,	.WORD	INTSUB			;subroutine to generate interrupt
   2820					.ENDM	$CKINT
   2821
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 58
CHK11 MACRO'S

   2823					;THIS MACRO IS USED TO TO CALL THE ROUTINE TO CHECK A DEVICE
   2824					;AND ASSIGN THE FLOATING ADDRESS AND VECTORS IF THE DEVICE
   2825					;IS THE TYPE THAT REQUIRES IT.
   2826					;
   2827					;	ARG	A		;DEVICE ADDRESS OR 0 IF FLOATING DEVICE
   2828					;
   2829					;	ARG	MAXN		;MAXIMUM NUMBER OF DEVICES
   2830					;
   2831					;	ARG	VI		;VECTOR INCREMENT
   2832					;
   2833					;	ARG	HI		;HARDWARE INCREMENT
   2834					;
   2835					;	ARG	VM		;VECTOR MULTIPLE
   2836					;
   2837					;	ARG	NAM		;ADDRESS OF DEVICE NAME
   2838					;
   2839					;	ARG	FV		;FIRST VECTOR ADR (FIXED DEV ONLY)
   2840					;
   2841					.MACRO	DEVICE	A,MAXN,VI,HI,VM,NAM,FV
   2842
   2843					;DETERMINE HOW MANY NAM'11S IN SYSTEM
   2844
   2845						JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR NAM'11
   2846						.WORD	A			;1ST NAM'11 ADR IS A
   2847						.BYTE	<MAXN>,<VI>		;MAXIMUM NUMBER OF NAM'11 IS MAXN,
   2848										; VECTOR INCREMENT IS VI
   2849						.BYTE	<HI>,<VM>		;HARDWARE INCREMENT IS HI,
   2850										; 1ST VECTOR MULTIPLE IS VM
   2851						.WORD	0			;WILL BECOME NUMBER OF DEVICES
   2852						.WORD	CKN'NAM'11			;ADDRESS OF ASCIZ \NAM'11\
   2853						.IIF DF CK'NAM'11,CK'NAM'$$=CK'NAM'11	;IF DEFINED, USE THE PROC
   2854						.IIF NDF CK'NAM'11,CK'NAM'$$=CKPOPJ	;ELSE JUST EXIT
   2855						.WORD	CK'NAM'$$			;ADDRESS OF ROUTINE TO CHECK
   2856											; DEVICE (CK'NAM'11)
   2857						.IIF DF CKA'NAM'11,CKA'NAM'$$=CKA'NAM'11 ;IF PROGRAM ENTRY DEFINED, USE IT
   2858						.IIF NDF CKA'NAM'11,CKA'NAM'$$=CKPOPJ	;ELSE JUST EXIT
   2859						.WORD	CKA'NAM'$$			;CALL FOR MAIN PROGRAM (CKA'NAM'11)
   2860						.WORD	0			;FREE ENTRY
   2861						.WORD	0			;WILL CONTAIN NUMBER OF NAM'11 FOUND
   2862						.WORD	0			;WILL CONTAIN FIRST NAM'11 VECTOR ADR
   2863					.IIF NDF,NAM'.LVL,NAM'.LVL=0
   2864						.WORD	NAM'.LVL*40		;CONTAINS NAM'11 PI LEVEL
   2865						.WORD	FV			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2866					.ENDM	DEVICE
   2867
   2868
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 59
CHK11 MACRO'S

   2870					;THIS MACRO IS USED FOR SAVING GOOD, BAD, AND ADR ON THE STACK
   2871					;PRIOR TO CALLING "CHKERR".
   2872					;
   2873					;	ARG	GD		;GOOD DATA
   2874					;
   2875					;	ARG	BD		;BAD DATA
   2876					;
   2877					;	ARG	ADR		;ADDRESS WHERE IT HAPPENED
   2878					;
   2879					.MACRO	CKSERR	GD,BD,ADR
   2880						MOV	GD,-(SP)			;SAVE GOOD (GD) ON STACK
   2881						MOV	BD,-(SP)			;SAVE BAD (BD) ON STACK
   2882						MOV	ADR,-(SP)		;SAVE ADDRESS (ADR) ON STACK
   2883					.ENDM	CKSERR
   2884
   2885						.SBTTL		DEFINE DEVICE BLOCKS FOR EACH NODE TYPE
   2886
   2887					;	THE CHOICES ARE:
   2888					;		1	DC75
   2889					;		2	DN80/81/82
   2890					;		3	DN85/87
   2891					;		4	DN87S
   2892					;		5	DN20/21/22/200
   2893					;
   2894					;	EACH OF THESE ASSIGNS VECTORS AND CSR'S IN A DIFFERENT MANNER.
   2895
   2896	010604				CKCDEV:		;NOTHING BUT DEVICE MACROS MAY EXIST BETWEEN THE LABELS
   2897							;CKCDEV AND CKCEND, AS THESE MACROS CAUSE CODE & TABLES
   2898							;TO BE BUILD. ALSO, THE SYMBOL CKCADD MUST BE DEFINED
   2899							; TO BE .-CKCDEV AFTER THE FIRST DEVICE MACRO FOR EACH
   2900							; TYPE OF SYSTEM (I.E. THE LENGTH OF THE DEVICE MACRO).
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 60
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

   2902					.SBTTL		DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS
   2903
   2904	010604				DEVICE	CTISTS,1,0,0,0,KL,CTOVEC	;OPR TTY (DL11-C)
	010604	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR KL11
	010610	177560 				.WORD	CTISTS			;1ST KL11 ADR IS CTISTS
	010612	   001 	   000 			.BYTE	<1>,<0>		;MAXIMUM NUMBER OF KL11 IS 1,
	010614	   000 	   000 			.BYTE	<0>,<0>		;HARDWARE INCREMENT IS 0,
	010616	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	010620	011364'				.WORD	CKNKL11			;ADDRESS OF ASCIZ \KL11\
	010622	016424'				.WORD	CKKL$$			;ADDRESS OF ROUTINE TO CHECK
	010624	012320'				.WORD	CKAKL$$			;CALL FOR MAIN PROGRAM (CKAKL11)
	010626	000000 				.WORD	0			;FREE ENTRY
	010630	000000 				.WORD	0			;WILL CONTAIN NUMBER OF KL11 FOUND
	010632	000000 				.WORD	0			;WILL CONTAIN FIRST KL11 VECTOR ADR
	010634	000200 				.WORD	KL.LVL*40		;CONTAINS KL11 PI LEVEL
	010636	000064 				.WORD	CTOVEC			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2905		000034 			CKCADD=.-CKCDEV
   2906	010640				DEVICE	175610,1,0,0,0,RD,304		;TTY INTERFACE (DL11-E) KLINIK
	010640	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR RD11
	010644	175610 				.WORD	175610			;1ST RD11 ADR IS 175610
	010646	   001 	   000 			.BYTE	<1>,<0>		;MAXIMUM NUMBER OF RD11 IS 1,
	010650	   000 	   000 			.BYTE	<0>,<0>		;HARDWARE INCREMENT IS 0,
	010652	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	010654	011377'				.WORD	CKNRD11			;ADDRESS OF ASCIZ \RD11\
	010656	016360'				.WORD	CKRD$$			;ADDRESS OF ROUTINE TO CHECK
	010660	012320'				.WORD	CKARD$$			;CALL FOR MAIN PROGRAM (CKARD11)
	010662	000000 				.WORD	0			;FREE ENTRY
	010664	000000 				.WORD	0			;WILL CONTAIN NUMBER OF RD11 FOUND
	010666	000000 				.WORD	0			;WILL CONTAIN FIRST RD11 VECTOR ADR
	010670	000200 				.WORD	RD.LVL*40		;CONTAINS RD11 PI LEVEL
	010672	000304 				.WORD	304			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2907	010674				DEVICE	175630,3,<-10>,10,0,DL,744	;ASYNC I/O (DL11-E)
	010674	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR DL11
	010700	175630 				.WORD	175630			;1ST DL11 ADR IS 175630
	010702	   003 	   370 			.BYTE	<3>,<-10>		;MAXIMUM NUMBER OF DL11 IS 3,
	010704	   010 	   000 			.BYTE	<10>,<0>		;HARDWARE INCREMENT IS 10,
	010706	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	010710	011415'				.WORD	CKNDL11			;ADDRESS OF ASCIZ \DL11\
	010712	016360'				.WORD	CKDL$$			;ADDRESS OF ROUTINE TO CHECK
	010714	012320'				.WORD	CKADL$$			;CALL FOR MAIN PROGRAM (CKADL11)
	010716	000000 				.WORD	0			;FREE ENTRY
	010720	000000 				.WORD	0			;WILL CONTAIN NUMBER OF DL11 FOUND
	010722	000000 				.WORD	0			;WILL CONTAIN FIRST DL11 VECTOR ADR
	010724	000200 				.WORD	DL.LVL*40		;CONTAINS DL11 PI LEVEL
	010726	000744 				.WORD	744			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2908	010730				DEVICE	CD.STS,1,0,0,0,CD,CD.VEC	;CARD READER (CD11)
	010730	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR CD11
	010734	177160 				.WORD	CD.STS			;1ST CD11 ADR IS CD.STS
	010736	   001 	   000 			.BYTE	<1>,<0>		;MAXIMUM NUMBER OF CD11 IS 1,
	010740	   000 	   000 			.BYTE	<0>,<0>		;HARDWARE INCREMENT IS 0,
	010742	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	010744	011352'				.WORD	CKNCD11			;ADDRESS OF ASCIZ \CD11\
	010746	017140'				.WORD	CKCD$$			;ADDRESS OF ROUTINE TO CHECK
	010750	012320'				.WORD	CKACD$$			;CALL FOR MAIN PROGRAM (CKACD11)
	010752	000000 				.WORD	0			;FREE ENTRY
	010754	000000 				.WORD	0			;WILL CONTAIN NUMBER OF CD11 FOUND
	010756	000000 				.WORD	0			;WILL CONTAIN FIRST CD11 VECTOR ADR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 60-1
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

	010760	000300 				.WORD	CD.LVL*40		;CONTAINS CD11 PI LEVEL
	010762	000230 				.WORD	CD.VEC			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2909	010764				DEVICE	LP.STS,2,<-10>,10,0,LP,LP.VEC	;LINE PRINTER (LP11)
	010764	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR LP11
	010770	177514 				.WORD	LP.STS			;1ST LP11 ADR IS LP.STS
	010772	   002 	   370 			.BYTE	<2>,<-10>		;MAXIMUM NUMBER OF LP11 IS 2,
	010774	   010 	   000 			.BYTE	<10>,<0>		;HARDWARE INCREMENT IS 10,
	010776	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011000	011451'				.WORD	CKNLP11			;ADDRESS OF ASCIZ \LP11\
	011002	017250'				.WORD	CKLP$$			;ADDRESS OF ROUTINE TO CHECK
	011004	012320'				.WORD	CKALP$$			;CALL FOR MAIN PROGRAM (CKALP11)
	011006	000000 				.WORD	0			;FREE ENTRY
	011010	000000 				.WORD	0			;WILL CONTAIN NUMBER OF LP11 FOUND
	011012	000000 				.WORD	0			;WILL CONTAIN FIRST LP11 VECTOR ADR
	011014	000200 				.WORD	LP.LVL*40		;CONTAINS LP11 PI LEVEL
	011016	000200 				.WORD	LP.VEC			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2910	011020				DEVICE	RXCS,1,0,0,0,RX,264		;RX11 FLOPPY CONTROLLER
	011020	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR RX11
	011024	177170 				.WORD	RXCS			;1ST RX11 ADR IS RXCS
	011026	   001 	   000 			.BYTE	<1>,<0>		;MAXIMUM NUMBER OF RX11 IS 1,
	011030	   000 	   000 			.BYTE	<0>,<0>		;HARDWARE INCREMENT IS 0,
	011032	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011034	011505'				.WORD	CKNRX11			;ADDRESS OF ASCIZ \RX11\
	011036	017570'				.WORD	CKRX$$			;ADDRESS OF ROUTINE TO CHECK
	011040	012320'				.WORD	CKARX$$			;CALL FOR MAIN PROGRAM (CKARX11)
	011042	000000 				.WORD	0			;FREE ENTRY
	011044	000000 				.WORD	0			;WILL CONTAIN NUMBER OF RX11 FOUND
	011046	000000 				.WORD	0			;WILL CONTAIN FIRST RX11 VECTOR ADR
	011050	000300 				.WORD	RX.LVL*40		;CONTAINS RX11 PI LEVEL
	011052	000264 				.WORD	264			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2911	011054				DEVICE	TC.STS,1,0,0,0,TC,TC.VEC	;DEC TAPE CONTROL (TC11)
	011054	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR TC11
	011060	177340 				.WORD	TC.STS			;1ST TC11 ADR IS TC.STS
	011062	   001 	   000 			.BYTE	<1>,<0>		;MAXIMUM NUMBER OF TC11 IS 1,
	011064	   000 	   000 			.BYTE	<0>,<0>		;HARDWARE INCREMENT IS 0,
	011066	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011070	011500'				.WORD	CKNTC11			;ADDRESS OF ASCIZ \TC11\
	011072	017476'				.WORD	CKTC$$			;ADDRESS OF ROUTINE TO CHECK
	011074	012320'				.WORD	CKATC$$			;CALL FOR MAIN PROGRAM (CKATC11)
	011076	000000 				.WORD	0			;FREE ENTRY
	011100	000000 				.WORD	0			;WILL CONTAIN NUMBER OF TC11 FOUND
	011102	000000 				.WORD	0			;WILL CONTAIN FIRST TC11 VECTOR ADR
	011104	000300 				.WORD	TC.LVL*40		;CONTAINS TC11 PI LEVEL
	011106	000214 				.WORD	TC.VEC			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2912	011110				DEVICE	176700,1,0,0,0,RH,254		;FANCY DISK CONTROLER (RH11)
	011110	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR RH11
	011114	176700 				.WORD	176700			;1ST RH11 ADR IS 176700
	011116	   001 	   000 			.BYTE	<1>,<0>		;MAXIMUM NUMBER OF RH11 IS 1,
	011120	   000 	   000 			.BYTE	<0>,<0>		;HARDWARE INCREMENT IS 0,
	011122	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011124	011473'				.WORD	CKNRH11			;ADDRESS OF ASCIZ \RH11\
	011126	017474'				.WORD	CKRH$$			;ADDRESS OF ROUTINE TO CHECK
	011130	012320'				.WORD	CKARH$$			;CALL FOR MAIN PROGRAM (CKARH11)
	011132	000000 				.WORD	0			;FREE ENTRY
	011134	000000 				.WORD	0			;WILL CONTAIN NUMBER OF RH11 FOUND
	011136	000000 				.WORD	0			;WILL CONTAIN FIRST RH11 VECTOR ADR
	011140	000000 				.WORD	RH.LVL*40		;CONTAINS RH11 PI LEVEL
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 60-2
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

	011142	000254 				.WORD	254			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2913	011144				DEVICE	174400,4,<-4>,40,0,TE,774	;TEN/ELEVEN INTERFACE
	011144	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR TE11
	011150	174400 				.WORD	174400			;1ST TE11 ADR IS 174400
	011152	   004 	   374 			.BYTE	<4>,<-4>		;MAXIMUM NUMBER OF TE11 IS 4,
	011154	   040 	   000 			.BYTE	<40>,<0>		;HARDWARE INCREMENT IS 40,
	011156	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011160	011434'				.WORD	CKNTE11			;ADDRESS OF ASCIZ \TE11\
	011162	016710'				.WORD	CKTE$$			;ADDRESS OF ROUTINE TO CHECK
	011164	012320'				.WORD	CKATE$$			;CALL FOR MAIN PROGRAM (CKATE11)
	011166	000000 				.WORD	0			;FREE ENTRY
	011170	000000 				.WORD	0			;WILL CONTAIN NUMBER OF TE11 FOUND
	011172	000000 				.WORD	0			;WILL CONTAIN FIRST TE11 VECTOR ADR
	011174	000300 				.WORD	TE.LVL*40		;CONTAINS TE11 PI LEVEL
	011176	000774 				.WORD	774			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2914	011200				DEVICE	160020,10,20,20,0,DH,330	;MULTIPLEX TTY INTERFACE (DH11)
	011200	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR DH11
	011204	160020 				.WORD	160020			;1ST DH11 ADR IS 160020
	011206	   010 	   020 			.BYTE	<10>,<20>		;MAXIMUM NUMBER OF DH11 IS 10,
	011210	   020 	   000 			.BYTE	<20>,<0>		;HARDWARE INCREMENT IS 20,
	011212	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011214	011357'				.WORD	CKNDH11			;ADDRESS OF ASCIZ \DH11\
	011216	015274'				.WORD	CKDH$$			;ADDRESS OF ROUTINE TO CHECK
	011220	012320'				.WORD	CKADH$$			;CALL FOR MAIN PROGRAM (CKADH11)
	011222	000000 				.WORD	0			;FREE ENTRY
	011224	000000 				.WORD	0			;WILL CONTAIN NUMBER OF DH11 FOUND
	011226	000000 				.WORD	0			;WILL CONTAIN FIRST DH11 VECTOR ADR
	011230	000240 				.WORD	DH.LVL*40		;CONTAINS DH11 PI LEVEL
	011232	000330 				.WORD	330			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2915	011234				DEVICE	170500,10,20,10,0,DM,320	;MODEM CONTROL INTERFACE (DM11)
	011234	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR DM11
	011240	170500 				.WORD	170500			;1ST DM11 ADR IS 170500
	011242	   010 	   020 			.BYTE	<10>,<20>		;MAXIMUM NUMBER OF DM11 IS 10,
	011244	   010 	   000 			.BYTE	<10>,<0>		;HARDWARE INCREMENT IS 10,
	011246	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011250	011424'				.WORD	CKNDM11			;ADDRESS OF ASCIZ \DM11\
	011252	016474'				.WORD	CKDM$$			;ADDRESS OF ROUTINE TO CHECK
	011254	012320'				.WORD	CKADM$$			;CALL FOR MAIN PROGRAM (CKADM11)
	011256	000000 				.WORD	0			;FREE ENTRY
	011260	000000 				.WORD	0			;WILL CONTAIN NUMBER OF DM11 FOUND
	011262	000000 				.WORD	0			;WILL CONTAIN FIRST DM11 VECTOR ADR
	011264	000200 				.WORD	DM.LVL*40		;CONTAINS DM11 PI LEVEL
	011266	000320 				.WORD	320			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
   2916	011270				DEVICE	L20STS,2,<-4>,20,0,L2,L2.VEC	;LP20 CONTROLLER
	011270	004537 	013202'			JSR	R5,CHKDEV		;ADJUST FLOATING VECTOR FOR L211
	011274	175400 				.WORD	L20STS			;1ST L211 ADR IS L20STS
	011276	   002 	   374 			.BYTE	<2>,<-4>		;MAXIMUM NUMBER OF L211 IS 2,
	011300	   020 	   000 			.BYTE	<20>,<0>		;HARDWARE INCREMENT IS 20,
	011302	000000 				.WORD	0			;WILL BECOME NUMBER OF DEVICES
	011304	011456'				.WORD	CKNL211			;ADDRESS OF ASCIZ \L211\
	011306	017344'				.WORD	CKL2$$			;ADDRESS OF ROUTINE TO CHECK
	011310	012320'				.WORD	CKAL2$$			;CALL FOR MAIN PROGRAM (CKAL211)
	011312	000000 				.WORD	0			;FREE ENTRY
	011314	000000 				.WORD	0			;WILL CONTAIN NUMBER OF L211 FOUND
	011316	000000 				.WORD	0			;WILL CONTAIN FIRST L211 VECTOR ADR
	011320	000200 				.WORD	L2.LVL*40		;CONTAINS L211 PI LEVEL
	011322	000754 				.WORD	L2.VEC			;DEVICE FIRST VECTOR (FIXED DEV ONLY)
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 60-3
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

   2917	011324				CKCEND:		; END OF DEVICE TABLES
   2918	011324	000207 				RTS	PC
   2919
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 61
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

   2921					;
   2922					; GLOBAL CELLS FOR CHECK11
   2923					;
   2924	011326				CHKFLG:	.BLKW	1		;CHK11 FLAGS
   2925		000001 				CKFERR=	B0		;ERROR DETECTED
   2926		000002 				CHKMMO=	B1		;memory management on [3(47)]
   2927		100000 				CKFIDT=	B15		;ID ALREADY TYPED
   2928	011330				CKDEVN:	.BLKW	1		;UNIT # CURRENTLY BEING TESTED
   2929	011332				CKDNAM:	.BLKW	1		;ADR OF DEVICE NAME(.ASCIZ)
   2930	011334				PHYLIM:	.BLKW	1		;HIGHEST MEMORY LIMIT
   2931
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 62
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

   2933					.MACRO DEVTXT	DEV,LAB,TEXTX
   2934					.IF NB,<DEV>
   2935							LAB:	.ASCIZ	\TEXTX\
   2936					.IFF;.IF NB,<DEV>
   2937					LAB:	.ASCIZ	\TEXTX\
   2938					.ENDC;.IF NB,<DEV>
   2939					.ENDM DEVTXT
   2940	011336				DEVTXT	CI,CKNCI1,<CTY I>
	011336	   103 	   124 	   131 			CKNCI1:	.ASCIZ	\CTY I\
	011341	   040 	   111 	   000
   2941	011344				DEVTXT	CO,CKNCO1,<CTY O>
	011344	   103 	   124 	   131 			CKNCO1:	.ASCIZ	\CTY O\
	011347	   040 	   117 	   000
   2942	011352				DEVTXT	CD,CKNCD1,<CD11>
	011352	   103 	   104 	   061 			CKNCD1:	.ASCIZ	\CD11\
	011355	   061 	   000
   2943	011357				DEVTXT	DH,CKNDH1,<DH11>
	011357	   104 	   110 	   061 			CKNDH1:	.ASCIZ	\DH11\
	011362	   061 	   000
   2944	011364				DEVTXT	KL,CKNKL1,<DL11-C CTY>
	011364	   104 	   114 	   061 			CKNKL1:	.ASCIZ	\DL11-C CTY\
	011367	   061 	   055 	   103
	011372	   040 	   103 	   124
	011375	   131 	   000
   2945	011377				DEVTXT	RD,CKNRD1,<DL11-E KLINIK>
	011377	   104 	   114 	   061 			CKNRD1:	.ASCIZ	\DL11-E KLINIK\
	011402	   061 	   055 	   105
	011405	   040 	   113 	   114
	011410	   111 	   116 	   111
	011413	   113 	   000
   2946	011415				DEVTXT	DL,CKNDL1,<DL11-E>
	011415	   104 	   114 	   061 			CKNDL1:	.ASCIZ	\DL11-E\
	011420	   061 	   055 	   105
	011423	   000
   2947	011424				DEVTXT	DM,CKNDM1,<DM11-BB>
	011424	   104 	   115 	   061 			CKNDM1:	.ASCIZ	\DM11-BB\
	011427	   061 	   055 	   102
	011432	   102 	   000
   2948	011434				DEVTXT	TE,CKNTE1,<DTE20>
	011434	   104 	   124 	   105 			CKNTE1:	.ASCIZ	\DTE20\
	011437	   062 	   060 	   000
   2949	011442				DEVTXT	KW,CKNKW1,<KW11-L>
	011442	   113 	   127 	   061 			CKNKW1:	.ASCIZ	\KW11-L\
	011445	   061 	   055 	   114
	011450	   000
   2950	011451				DEVTXT	LP,CKNLP1,<LP11>
	011451	   114 	   120 	   061 			CKNLP1:	.ASCIZ	\LP11\
	011454	   061 	   000
   2951	011456				DEVTXT	L2,CKNL21,<LP20>
	011456	   114 	   120 	   062 			CKNL21:	.ASCIZ	\LP20\
	011461	   060 	   000
   2952	011463				DEVTXT	MM,CKNMM1,<MF11-UP>
	011463	   115 	   106 	   061 			CKNMM1:	.ASCIZ	\MF11-UP\
	011466	   061 	   055 	   125
	011471	   120 	   000
   2953	011473				DEVTXT	RH,CKNRH1,<RH11>
	011473	   122 	   110 	   061 			CKNRH1:	.ASCIZ	\RH11\
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 62-1
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

	011476	   061 	   000
   2954	011500				DEVTXT	TC,CKNTC1,<TC11>
	011500	   124 	   103 	   061 			CKNTC1:	.ASCIZ	\TC11\
	011503	   061 	   000
   2955	011505				DEVTXT	RX,CKNRX1,<RX11>
	011505	   122 	   130 	   061 			CKNRX1:	.ASCIZ	\RX11\
	011510	   061 	   000
   2956						.EVEN
   2957	011512				CK.CAL:	.BLKW	1		;ADR OF JSR PC,CHK.11 IN MAIN PROGRAM
   2958
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 63
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

   2960	011514	000005 			CHK.11::RESET				;CLEAR THE WORLD
   2961	011516	012737 	000340 	177776 		MOV	#BR7,@#PS		;PROCESSOR LEVEL TO 7
   2962	011524	012637 	011512'			MOV	(SP)+,CK.CAL		;SAVE CALLING ADDRESS
   2963	011530	012737 	000300 	015270'		MOV	#FLOATV,CHKFLV		;FLOATING INT VEC BEGIN HERE
   2964	011536	012737 	160000 	015272'		MOV	#FLOATD,CHKFLD		;FLOATING DEV ADR'S BEGIN HERE
   2965	011544	005037 	011326'			CLR	CHKFLG			;CLEAR CHK11 FLAGS
   2966	011550	005037 	020506'			CLR	CKSPCD			;CLEAR STOP CODE; NON 0 ON FATAL
   2967										; ERROR PUTS C(CKSPCD) IN R0.
   2968
   2969					;INITIALIZE VECTOR SPACE
   2970					;
   2971	011554	013703 	000014 		CKINTS:	MOV	14,R3			;SAVE ODT ADDRESS
   2972	011560	005000 				CLR	R0			;START LOADING AT ADR 0
   2973	011562	012701 	015102'			MOV	#CHKINT,R1		;WHERE TO GO ON INTERRUPT
   2974	011566	012702 	000340 			MOV	#BR7,R2			;INTERRUPT PS
   2975	011572	010120 			11$:	MOV	R1,(R0)+		;SET INTERRUPT VECTOR
   2976	011574	010220 				MOV	R2,(R0)+		;SET INTERRUPT LEVEL
   2977	011576	005202 				INC	R2
   2978	011600	032700 	000077 			BIT	#77,R0			;HAVE WE HIT A LIMIT ?
   2979	011604	001004 				BNE	12$
   2980	011606	062701 	000012 			ADD	#CHKITL,R1		;YES SO CHANGE VECTOR
   2981	011612	012702 	000340 			MOV	#BR7,R2			;RESET PS
   2982	011616				12$:
   2983	011616	020027 	001000 			CMP	R0,#1000		;FILL VECTORS UP TO 1000
   2984	011622	002763 				BLT	11$			;MORE TO DO.
   2985	011624	012737 	017706'	000034 		MOV	#CHKERR,TRPVEC		;WHERE TO GO ON ERROR TRAP
   2986	011632	010337 	000014 			MOV	R3,14			;RESTORE ODT ADDRESS
   2987
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 64
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

   2989					;NOW CHECK THE CTY
   2990					;
   2991	011636	012737 	011702'	000004 		MOV	#13$,NXMVEC		;WHERE TO TRAP IF NO CTY
   2992	011644	042737 	100000 	011326'		BIC	#CKFIDT,CHKFLG		;SO WE PRINT DEV ID
   2993	011652	005737 	177564 			TST	CTOSTS			;CHECK CTY TRANSMIT STATUS REGISTER
   2994	011656	005737 	177566 			TST	CTOCHR
   2995	011662	005737 	177560 			TST	CTISTS
   2996	011666	005737 	177562 			TST	CTICHR
   2997	011672	012737 	017636'	000004 		MOV	#CKBUST,NXMVEC		;WHERE TO GO ON ILLEGAL NXM TRAP
   2998	011700	000407 				BR	14$
   2999	011702	012700 	000005 		13$:	MOV	#S..CTY,R0		;NO CTY STOP CODE
   3000	011706	000000 				HALT
   3001	011710	012700 	011702'			MOV	#13$,R0			;ADR OF ERROR
   3002	011714	000000 				HALT				;DISPLAY ADDRESS
   3003	011716	000771 				BR	13$			;MAKE HIM START AGAIN
   3004
   3005	011720	012704 	177564 		14$:	MOV	#CTOSTS,R4		;CTY PUN STATUS
   3006	011724	010437 	020510'			MOV	R4,CHKCHR+CKDA		;DEV ADR
   3007	011730	010401 				MOV	R4,R1			;CHKBIT NEEDS ADR IN R1
   3008	011732	012737 	000064 	020512'		MOV	#CTOVEC,CHKCHR+CKDV	;CTY PUN VECTOR
   3009	011740	012737 	011344'	011332'		MOV	#CKNCO1,CKDNAM		;NAME ADDRESS
   3010	011746	005037 	011330'			CLR	CKDEVN			;DEVICE 0
   3011	011752	004537 	014052'			JSR	R5,CHKBIT		;CHECK THE FOLLOWING BITS FOR R/W
   3012	011756	000104 				CO.INE!CO..MM			;BITS TO CHECK FOR R/W
   3013	011760	012714 	000100 			MOV	#CO.INE,(R4)		;ENABLE INTERRUPTS
   3014	011764	004537 	014330'			JSR	R5,CHKINL		;CHECK INTERRUPT AND FIND DEV LEVEL
   3015	011770	177777 				-1				;TIME LOOP CONSTANT
   3016	011772	005014 				CLR	(R4)			;CLR DEV OUT
   3017
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 65
DEVICE MACROS FOR ALL POSSIBLE CONFIGURATIONS

   3019					;NOW CHECK THE KBRD SECTION
   3020					;
   3021	011774	042737 	100000 	011326'	CHKBRD:	BIC	#CKFIDT,CHKFLG		;SO WE PRINT DEV ID
   3022	012002	012704 	177560 			MOV	#CTISTS,R4		;KBRD STATUS REG
   3023	012006	010437 	020510'			MOV	R4,CHKCHR+CKDA		;DEV ADR
   3024	012012	010401 				MOV	R4,R1			;CHKBIT NEEDS ADR IN R1
   3025	012014	012737 	000060 	020512'		MOV	#CTIVEC,CHKCHR+CKDV	;VECTOR ADR
   3026	012022	012737 	011336'	011332'		MOV	#CKNCI1,CKDNAM		;ADR OF DEV NAME
   3027	012030	004537 	014052'			JSR	R5,CHKBIT		;CHECK THE FOLLOWING BITS
   3028	012034	000100 				CI.INE				;BITS TO CHECK R/W
   3029
   3030	012036				11$:	CK11SC	<0>,<Initializing >
	012036	104404 				TRAP	0!CKEMSG		;
   3031	012040	   111 	   156 	   151 		.ASCIZ	\Initializing \
	012043	   164 	   151 	   141
	012046	   154 	   151 	   172
	012051	   151 	   156 	   147
	012054	   040 	   000
   3032						.EVEN
   3033	012056	013700 	011512'			MOV	CK.CALL,R0		;GET ADDR OF .ASCIZ \PROG NANME\
   3034	012062	004737 	020530'			JSR	PC,CKTTXT		;TYPE PROGRAM NAME
   3035					;
   3036	012066	005000 			CHKCOR:	CLR	R0			;START SMALL
   3037	012070	012737 	012106'	000004 		MOV	#12$,NXMVEC		;SET BUS TRAP VECTOR
   3038	012076	005710 			11$:	TST	(R0)			;check this location [1(14)]
   3039	012100	062700 	000002 			ADD	#2,R0			;point to next location [1(14)]
   3040	012104	000774 				BR	11$
   3041	012106	062706 	000004 		12$:	ADD	#4,SP			;FLUSH STACK
   3042	012112	010037 	011334'		13$:	MOV	R0,PHYLIM		;SAVE ADR OF 1ST NXM LOCATION
   3043					.IIF DF,CKAMEM,JSR PC,CKAMEM		;PRINT LAST MEM LOCATION
   3044					;
   3045					;			; CONTINUED ON NEXT PAGE
   3046					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 66
CHECK MEMORY - SLIDING BIT PATTERN

   3048					.SBTTL		CHECK MEMORY - SLIDING BIT PATTERN
   3049
   3050					;HERE TO PERFORM A SIMPLE TEST ON FREE CORE.
   3051					;THE PATTERN USED IS A SLIDING BIT, WITH THE
   3052					;BIT IN EACH OF THE 16 BIT POSITIONS AND THE
   3053					;LAST PATTERN BEING ALL 0'S.
   3054					;
   3055	012116				CKCOR:
   3056	012116	005000 				CLR	R0			;FIRST ADR TO CHECK
   3057	012120	012701 	012214'			MOV	#11$,R1			;LIMIT TO CHECK
   3058	012124	004737 	012214'			JSR	PC,11$			;CHECK LOW CORE
   3059	012130	012700 	000000G			MOV	#.FESTB,R0		;BEGIN CHECKING HERE NOW
   3060	012134	012701 	012116'			MOV	#CKCOR,R1		;AND STOP HERE
   3061	012140	004737 	012214'			JSR	PC,11$
   3062	012144	004037 	020570'			JSR	R0,CKTCRL		;PRINT AMOUNT OF CORE
   3063	012150	   040 	   040 	   040 		.ASCIZ	\   \
	012153	   000
   3064						.EVEN
   3065	012154	013700 	011334'			MOV	PHYLIM,R0		;GET AMOUNT
   3066	012160	004737 	020616'			JSR	PC,CKTOCT		;PRINT IT
   3067	012164	004037 	020574'			JSR	R0,CKTSTR		;FOLLOWED BY MSG:
   3068	012170	   040 	   142 	   171 		.ASCIZ	\ bytes of memory\
	012173	   164 	   145 	   163
	012176	   040 	   157 	   146
	012201	   040 	   155 	   145
	012204	   155 	   157 	   162
	012207	   171 	   000
   3069						.EVEN
   3070	012212	000443 				BR	CKMPAR			;ALL OK
   3071
   3072	012214	012702 	000001 		11$:	MOV	#1,R2			;FIRST PATTERN
   3073	012220	011003 				MOV	@R0,R3			;SAVE CURRENT DATA
   3074	012222	010210 			12$:	MOV	R2,@R0			;PUT PATTERN IN MEMORY
   3075	012224	005110 				COM	@R0			;COMPLEMENT IT
   3076	012226	005110 				COM	@R0			; AND AGAIN
   3077	012230	020210 				CMP	R2,@R0			;DID IT GO ?
   3078	012232	001410 				BEQ	13$			;YES.
   3079	012234					CKSERR	R2,<(R0)>,R0		;SAVE GD,BD,ADR
	012234	010246 				MOV	R2,-(SP)			;SAVE GOOD (R2) ON STACK
	012236	011046 				MOV	(R0),-(SP)			;SAVE BAD ((R0)) ON STACK
	012240	010046 				MOV	R0,-(SP)		;SAVE ADDRESS (R0) ON STACK
   3080	012242					CK11SC	<CKEMSE!CKEFAT!CKEPC!CKEGB>,<CKMG01>,<MEMORY ERROR>,<S..MEM>
	012242	012737 	000006 	020506'	.IIF NB,S..MEM,	MOV	#S..MEM,CKSPCD	;VALUE TO DISPLAY IN R0,
	012250	104523 				TRAP	CKEMSE!CKEFAT!CKEPC!CKEGB&<^CCKEMSG>		;MEMORY ERROR
	012252	020766'				.WORD	CKMG01			;ADR OF MESSAGE
   3081	012254	006302 			13$:	ASL	R2			;SHIFT PATTERN
   3082	012256	001361 				BNE	12$
   3083	012260	103760 				BCS	12$
   3084	012262	010310 				MOV	R3,@R0			;RESTORE DATA
   3085	012264	005110 				COM	@R0			;COMPLEMENT IT
   3086	012266	005110 				COM	@R0			; AND AGAIN
   3087	012270	020320 				CMP	R3,(R0)+		;BE SURE IT WENT
   3088	012272	001410 				BEQ	14$
   3089	012274					CKSERR	R3,<-(R0)>,R0		;SAVE GD,BD,ADR
	012274	010346 				MOV	R3,-(SP)			;SAVE GOOD (R3) ON STACK
	012276	014046 				MOV	-(R0),-(SP)			;SAVE BAD (-(R0)) ON STACK
	012300	010046 				MOV	R0,-(SP)		;SAVE ADDRESS (R0) ON STACK
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 66-1
CHECK MEMORY - SLIDING BIT PATTERN

   3090	012302					CK11SC	<CKEMSE!CKEFAT!CKEPC!CKEGB>,<CKMG01>,<MEMORY ERROR>,<S..MEM>
	012302	012737 	000006 	020506'	.IIF NB,S..MEM,	MOV	#S..MEM,CKSPCD	;VALUE TO DISPLAY IN R0,
	012310	104523 				TRAP	CKEMSE!CKEFAT!CKEPC!CKEGB&<^CCKEMSG>		;MEMORY ERROR
	012312	020766'				.WORD	CKMG01			;ADR OF MESSAGE
   3091	012314	020001 			14$:	CMP	R0,R1
   3092	012316	001336 				BNE	11$			;LOOP BACK FOR REST OF MEMORY
   3093	012320	000207 			CKPOPJ:	RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 67
CHECK MEMORY - SLIDING BIT PATTERN

   3095					;HERE TO CHECK THE MEMORY PARITY OPTION
   3096	012322				CKMPAR:					;START CHECKING CORE HERE
   3097	012322	012737 	011463'	011332'		MOV	#CKNMM1,CKDNAM		;SAVE NAME OF "DEVICE"
   3098	012330	005037 	011330'			CLR	CKDEVN			;"UNIT" IS 0
   3099	012334	012701 	172100 			MOV	#MP.REG,R1		;OPTION REGISTER
   3100	012340	010137 	020510'			MOV	R1,CHKCHR+CKDA		;SAVE ADR IN CASE NEED TO TYPE IT
   3101	012344	013746 	000004 			MOV	NXMVEC,-(SP)
   3102	012350	012737 	000114 	020512'		MOV	#MP.VEC,CHKCHR+CKDV	;VECTOR FOR INTERRUPTS
   3103	012356	005037 	020514'			CLR	CHKCHR+CKPI		;NO PRIORITY LEVEL
   3104	012362	012737 	012554'	000004 		MOV	#14$,NXMVEC		;IN CASE PARITY OPTION NOT INSTALLED
   3105	012370	005037 	172100 			CLR	MP.REG			;TRY TO CLEAR MEMORY PARITY REGISTER
   3106	012374	011637 	000004 			MOV	(SP),NXMVEC		;RESTORE TRAP VECTOR
   3107	012400	004537 	014052'			JSR	R5,CHKBIT		;CHECK READ/WRITE BITS
   3108	012404	107745 				107745
   3109					;NOW CHECK INTERRUPTS FROM PARITY CONTROL
   3110					; THIS IS DIFFICULT CUZ SETTING MP.ENB & MP.ERR WON'T CAUSE INTERRUPT
   3111	012406	005000 				CLR	R0			;VECTOR WE TOOK WILL APPEAR HERE
   3112	012410	012711 	000004 			MOV	#MP.WWP,@R1		;WE WANT TO WRITE WRONG PARITY
   3113	012414	013737 	012322'	012322'		MOV	CKMPAR,CKMPAR		;WRITE A BAD WORD
   3114
   3115	012422	005011 				CLR	@R1			;BUT ONLY ONE WORD !
   3116	012424	005737 	012322'			TST	CKMPAR			;TRY FOR AN INTERRUPT
   3117	012430	000240 				NOP				;IN CASE SLOW
   3118	012432	005700 				TST	R0			;SEE IF WE GOT ONE
   3119	012434	001402 				BEQ	11$
   3120	012436					CK11SC	<CKEMSE!CKEDID!CKEPC>,CKMG07,<INTERRUPTED WHEN NOT ENABLED>
	012436	104432 				TRAP	CKEMSE!CKEDID!CKEPC&<^CCKEMSG>		;INTERRUPTED WHEN NOT ENABLED
	012440	021136'				.WORD	CKMG07			;ADR OF MESSAGE
   3121	012442	012711 	000001 		11$:	MOV	#MP.ENB,@R1		;NOW LETS GET THE INTERRUPT
   3122	012446	005737 	012322'			TST	CKMPAR
   3123	012452	005011 				CLR	@R1			;DISABLE FURTHER INTERRUPTS
   3124	012454	013737 	012322'	012322'		MOV	CKMPAR,CKMPAR		;WRITE BACK RIGHT
   3125	012462	005700 				TST	R0			;DID WE GET THE INTERRUPT ?
   3126	012464	001003 				BNE	12$
   3127	012466					CK11SC	<CKEDID!CKEMSE!CKEPC>,CKMG04,<INTERRUPT DID NOT OCCUR>
	012466	104432 				TRAP	CKEDID!CKEMSE!CKEPC&<^CCKEMSG>		;INTERRUPT DID NOT OCCUR
	012470	021040'				.WORD	CKMG04			;ADR OF MESSAGE
   3128	012472	000433 				BR	15$
   3129
   3130	012474	020037 	020512'		12$:	CMP	R0,CHKCHR+CKDV		;WAS INTERRUPT RIGHT?
   3131	012500	001410 				BEQ	13$			;YES.
   3132	012502					CKSERR	<CHKCHR+CKDV>,R0,<#CKMPAR>	;GD,BD,ADR
	012502	013746 	020512'			MOV	CHKCHR+CKDV,-(SP)			;SAVE GOOD (CHKCHR+CKDV) ON STACK
	012506	010046 				MOV	R0,-(SP)			;SAVE BAD (R0) ON STACK
	012510	012746 	012322'			MOV	#CKMPAR,-(SP)		;SAVE ADDRESS (#CKMPAR) ON STACK
   3133	012514					CK11SC	<CKEMSE!CKEDID!CKEPC!CKEGB>,CKMG05,<interrupted to wrong vector>
	012514	104532 				TRAP	CKEMSE!CKEDID!CKEPC!CKEGB&<^CCKEMSG>		;interrupted to wrong vector
	012516	021070'				.WORD	CKMG05			;ADR OF MESSAGE
   3134	012520	000420 				BR	15$			;DONE.
   3135
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 68
CHECK MEMORY - SLIDING BIT PATTERN

   3137					; COME HERE IF PARITY OPTION IS PRESENT AND WORKING
   3138
   3139	012522	004037 	020570'		13$:	JSR	R0,CKTCRL		;PRINT MESSAGE ABOUT IT
   3140	012526	   040 	   040 	   040 		.ASCIZ	\     MF11-UP\
	012531	   040 	   040 	   115
	012534	   106 	   061 	   061
	012537	   055 	   125 	   120
	012542	   000
   3141						.EVEN
   3142	012544	012737 	000001 	172100 		MOV	#MP.ENB,MP.REG		;ENABLE PARITY ERRORS
   3143					.IIF DF,CKAMF1,JSR PC,CKAMF1		;DO MAIN LINE CHECKING
   3144	012552	000403 				BR	15$			;ALL DONE.
   3145
   3146					;HERE IF WE GET A BUS TRAP WHILE ACCESSING THE PARITY CONTROL REG
   3147	012554	012626 			14$:	MOV	(SP)+,(SP)+		;CLEAN OFF STACK
   3148	012556					CK11SC	<CKEDID!CKEPC!CKEMSE>,CKMG06,<not found>
	012556	104432 				TRAP	CKEDID!CKEPC!CKEMSE&<^CCKEMSG>		;not found
	012560	021124'				.WORD	CKMG06			;ADR OF MESSAGE
   3149
   3150	012562	012637 	000004 		15$:	MOV	(SP)+,NXMVEC
   3151
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 69
CHECK KW11-L HDW

   3153					.SBTTL		CHECK KW11-L HDW
   3154
   3155					;HERE TO BE SURE CLOCK IS PRESENT AND TICKS
   3156
   3157	012566	012737 	011442'	011332'	CHKCLK:	MOV	#CKNKW1,CKDNAM		;SET UP FOR NAME
   3158	012574	042737 	100000 	011326'		BIC	#CKFIDT,CHKFLG		;SO WE PRINT DEV ID
   3159	012602	012704 	177546 			MOV	#CLKWRD,R4		;SET UP DEV ADR
   3160	012606	010437 	020510'			MOV	R4,CHKCHR+CKDA		;SET UP DEVICE ADR
   3161	012612	012737 	000100 	020512'		MOV	#CLKVEC,CHKCHR+CKDV	;SET UP VECTOR ADR
   3162	012620	005037 	011330'			CLR	CKDEVN			;DEVICE NUMBER
   3163	012624	012737 	012752'	000004 		MOV	#13$,NXMVEC		;SET BUS TRAP IN CASE CLOCK IS NOT PRESENT
   3164	012632	005714 				TST	(R4)			;TRAP IF NOT INSTALLED
   3165	012634	012737 	017636'	000004 		MOV	#CKBUST,NXMVEC		;WHERE TO GO ON BUS TRAP
   3166	012642	013746 	000100 			MOV	CLKVEC,-(SP)		;SAVE WHERE TO GO ON INT
   3167	012646	012737 	012776'	000100 		MOV	#14$,CLKVEC		;SETUP INTERRUPT VECTOR
   3168	012654	012737 	000003 	013010'		MOV	#3,CHKTIM		;TIME 3 TICKS
   3169	012662	012737 	000000 	177776 		MOV	#0,@#PS			;LET INTERRUPTS HAPPEN
   3170	012670	012714 	000100 			MOV	#KW.INE,(R4)		;ENABLE THE CLOCK
   3171	012674	001417 				BEQ	12$			;IF COUNTED OUT ALREADY EVIL
   3172	012676	005000 				CLR	R0			;INITIALIZE WATCHDOG COUNTER
   3173	012700	005737 	013010'			TST	CHKTIM			;see if count expired now [1(14)]
   3174	012704	001413 				BEQ	12$			;yes, too fast [1(14)]
   3175	012706	005737 	013010'		11$:	TST	CHKTIM
   3176	012712	001437 				BEQ	CKCLK9			;BRANCH IF TIMED OUT ALREADY
   3177	012714	077004 				SOB	R0,11$
   3178	012716					CK11SC	<CKEFAT!CKEPC!CKEDID>,<Slow>,<NO RESPONSE FROM KW11>,<S..KW1>
	012716	012737 	000007 	020506'	.IIF NB,S..KW1,	MOV	#S..KW1,CKSPCD	;VALUE TO DISPLAY IN R0,
	012724	104417 				TRAP	CKEFAT!CKEPC!CKEDID!CKEMSG		;NO RESPONSE FROM KW11
   3179	012726	   123 	   154 	   157 		.ASCIZ	\Slow\
	012731	   167 	   000
   3180						.EVEN
   3181	012734				12$:	CK11SC	<CKEFAT!CKEPC!CKEDID>,<Fast>,<KW11 TICKING TO FAST>,<S..KW1>
	012734	012737 	000007 	020506'	.IIF NB,S..KW1,	MOV	#S..KW1,CKSPCD	;VALUE TO DISPLAY IN R0,
	012742	104417 				TRAP	CKEFAT!CKEPC!CKEDID!CKEMSG		;KW11 TICKING TO FAST
   3182	012744	   106 	   141 	   163 		.ASCIZ	\Fast\
	012747	   164 	   000
   3183						.EVEN
   3184	012752				13$:	CK11SC	<CKEFAT!CKEPC!CKEDID>,<Not Present>,<CAN' ACCESS KW11>,<S..KW1>
	012752	012737 	000007 	020506'	.IIF NB,S..KW1,	MOV	#S..KW1,CKSPCD	;VALUE TO DISPLAY IN R0,
	012760	104417 				TRAP	CKEFAT!CKEPC!CKEDID!CKEMSG		;CAN' ACCESS KW11
   3185	012762	   116 	   157 	   164 		.ASCIZ	\Not Present\
	012765	   040 	   120 	   162
	012770	   145 	   163 	   145
	012773	   156 	   164 	   000
   3186						.EVEN
   3187
   3188					;HERE ON A KW11 INTERRUPT
   3189	012776	005337 	013010'		14$:	DEC	CHKTIM			;COUNT OUT TIMER
   3190	013002	001001 				BNE	15$
   3191	013004	005014 				CLR	(R4)			;TURN OFF CLOCK
   3192	013006	000002 			15$:	RTI				;DISMISS INTERRUPT
   3193
   3194	013010	000000 			CHKTIM:	.WORD	0
   3195					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 70
CHECK KW11-L HDW

   3197					;
   3198	013012	012737 	000340 	177776 	CKCLK9:	MOV	#BR7,@#PS		;SET TO LEVEL 7
   3199	013020	012714 	000100 			MOV	#KW.INE,(R4)		;ENABLE INT
   3200	013024	012637 	000100 			MOV	(SP)+,CLKVEC		;RESTORE WHERE TO GO ON INT
   3201	013030	004537 	014330'			JSR	R5,CHKINL		;FIND THE INT LEVEL
   3202	013034	177777 				-1				;DELAY TO WAIT FOR INT
   3203	013036	042737 	000100 	177546 		BIC	#KW.INE,CLKWRD		;DISABLE CLK INTS
   3204	013044	004037 	020570'			JSR	R0,CKTCRL		;INDICATE CLOCK PRESENT
   3205	013050	   040 	   040 	   040 		.ASCIZ	\     KW11-L\
	013053	   040 	   040 	   113
	013056	   127 	   061 	   061
	013061	   055 	   114 	   000
   3206						.EVEN
   3207	013064	022737 	000300 	020514'		CMP	#300,CHKCHR+CKPI	;CHECK FOR CORRECT PRIORITY
   3208	013072	001431 				BEQ	CHK.96			;BRANCH IF OK
   3209	013074					CKSERR	<#200>,<CHKCHR+CKPI>,<#CLKVEC>
	013074	012746 	000200 			MOV	#200,-(SP)			;SAVE GOOD (#200) ON STACK
	013100	013746 	020514'			MOV	CHKCHR+CKPI,-(SP)			;SAVE BAD (CHKCHR+CKPI) ON STACK
	013104	012746 	000100 			MOV	#CLKVEC,-(SP)		;SAVE ADDRESS (#CLKVEC) ON STACK
   3210	013110					CK11SC	<CKEFAT!CKEMSG>,<Interrupted to wrong PI level>,,<S..KW1>
	013110	012737 	000007 	020506'	.IIF NB,S..KW1,	MOV	#S..KW1,CKSPCD	;VALUE TO DISPLAY IN R0,
	013116	104405 				TRAP	CKEFAT!CKEMSG!CKEMSG		;
   3211	013120	   111 	   156 	   164 		.ASCIZ	\Interrupted to Wrong PI level\
	013123	   145 	   162 	   162
	013126	   165 	   160 	   164
	013131	   145 	   144 	   040
	013134	   164 	   157 	   040
	013137	   127 	   162 	   157
	013142	   156 	   147 	   040
	013145	   120 	   111 	   040
	013150	   154 	   145 	   166
	013153	   145 	   154 	   000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 71
CHECK KW11-L HDW

   3213					;
   3214					; NOW CHECK ALL REMAINING DEVICES
   3215					;
   3216	013156				CHK.96::
   3217	013156	004737 	010604'			JSR	PC,CKCDEV		;CALL DEVICE TABLES ROUTINES
   3218					;
   3219					; WAIT A WHILE THEN DO A UNIBUS RESET
   3220					;
   3221	013162	012701 	000010 			MOV	#10,R1			;COUNTER
   3222	013166	005000 			15$:	CLR	R0			; "  "
   3223	013170	077001 			16$:	SOB	R0,16$			;LOOP A WHILE
   3224	013172	077103 				SOB	R1,15$			;AGAIN
   3225	013174	000005 				RESET				;RESET THE WORLD
   3226	013176	000137 	003000'			JMP	CKDONE			;ALL DONE
   3227
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 72
CHECK SYSTEM FOR EXISTENCE OF OPTIONS

   3229					.SBTTL		CHECK SYSTEM FOR EXISTENCE OF OPTIONS
   3230
   3231					;HERE TO CHECK SYSTEM FOR EXISTENCE OF OPTIONS
   3232					; CALL	JSR	R5,CHKDEV
   3233					;	(0)	.WORD	1ST DEVICE ADR
   3234					;	(2)	.BYTE	MAX #,VECTOR INC
   3235					;	(4)	.BYTE	HDW INC,1ST VEC MULTIPLE
   3236					;	(6)	.WORD	<ADR OF NUMBER OF DEVICES OR ZERO>
   3237					;	(10)	.WORD	<ADR OF .ASCIZ \NAME\>
   3238					;	(12)	.WORD	<ADR OF ROUTINE TO VERIFY OPERATION>
   3239					;	(14)	.WORD	<ADR OF MAIN PROGRAM ROUTINE FOR DEVICE>
   3240					;	(16)	.WORD	<ADR OF TABLE WHICH CONTAINS MAIN PROG VECTORS OR 0>
   3241					;	(20)	.WORD	<# OF DEVICES FOUND>
   3242					;	(22)	.WORD	<FIRST VECTOR FOUND>
   3243					;	(24)	.WORD	<PI LEVEL>
   3244					;	(26)	.WORD	<FIRST DEV VECTOR FOR FIXED TYPE DEV>
   3245					;	RETURN
   3246
   3247	013202	016537 	000010 	011332'	CHKDEV:	MOV	10(R5),CKDNAM		;REMEMBER DEVICE NAME
   3248	013210	005002 				CLR	R2			;INITIALIZE COUNTER FOR DEVICES
   3249	013212	013703 	015270'			MOV	CHKFLV,R3		;COPY FOR USE
   3250	013216	105765 	000005 			TSTB	5(R5)			;SEE IF FIXED TYPE DEV
   3251	013222	001002 				BNE	11$			;BRANCH IF NOT
   3252	013224	016503 	000026 			MOV	26(R5),R3		;VECTOR TO USE
   3253	013230	011504 			11$:	MOV	@R5,R4			;GET HDW ADR FOR 1ST DEVICE
   3254	013232	001005 				BNE	12$			;BRANCH IF NOT A FLOATING DEVICE
   3255	013234	062737 	000010 	015272'		ADD	#10,CHKFLD		;ADVANCE TO NEXT FLOAT DEVICE SLOT
   3256	013242	013704 	015272'			MOV	CHKFLD,R4		;COPY FOR USE
   3257	013246	012737 	013346'	000004 	12$:	MOV	#15$,NXMVEC		;SET BUS TRAP VECTOR
   3258	013254	005714 			13$:	TST	(R4)			;CHECK TO SEE IF DEVICE IS PRESENT
   3259	013256	012737 	017636'	000004 		MOV	#CKBUST,NXMVEC		;SET FOR ILLEGAL BUS TRAP
   3260	013264	005702 				TST	R2			;IS THIS THE FIRST OF ITS KIND ?
   3261	013266	001012 				BNE	14$			;BRANCH IF NOT FIRST
   3262	013270	005065 	000020 			CLR	20(R5)			;CLEAR NUMBER OF DEV FOUND
   3263	013274	005065 	000022 			CLR	22(R5)			;CLEAR FIRST VECTOR ADR
   3264					;	CLR	24(R5)			;CLEAR PI LEVEL
   3265	013300	116501 	000005 			MOVB	5(R5),R1		;GET MULTIPLE VECTOR BEGINS ON
   3266	013304	001403 				BEQ	14$			;BRANCH IF FIXED DEV (LPT)
   3267	013306	005301 				DEC	R1
   3268	013310	060103 				ADD	R1,R3
   3269	013312	040103 				BIC	R1,R3
   3270	013314	005265 	000020 		14$:	INC	20(R5)			;COUNT DEVICE AND REMEMBER IT
   3271	013320	005202 			20$:	INC	R2
   3272	013322	116501 	000003 			MOVB	3(R5),R1		;GET VECTOR INCREMENT
   3273	013326	060103 				ADD	R1,R3
   3274	013330	116501 	000004 			MOVB	4(R5),R1		;GET HDW INCREMENT
   3275	013334	060104 				ADD	R1,R4			;ADVANCE FLOATING DEVICE ADR POINTER
   3276	013336	120265 	000002 			CMPB	R2,2(R5)		;HAVE WE CHECK ALL POSSIBLE ?
   3277	013342	001341 				BNE	12$			;IF NOT LOOP BACK FOR REST
   3278	013344	000405 				BR	16$
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 73
CHECK SYSTEM FOR EXISTENCE OF OPTIONS

   3280	013346	012737 	017636'	000004 	15$:	MOV	#CKBUST,NXMVEC
   3281	013354	022626 				CMP	(SP)+,(SP)+		;POP OFF ADR AND STATUS
   3282	013356	000760 				BR	20$			;SEE IF POSSIBLE HOLE IN DEVICE
   3283	013360	005765 	000006 		16$:	TST	6(R5)			;DO WE HAVE ADR FOR NUMBER ?
   3284	013364	001402 				BEQ	17$			;IF NOT DON'T STUFF
   3285	013366	010275 	000006 			MOV	R2,@6(R5)		;PUT NUMBER FOR SOMEONE TO FIND
   3286	013372	005765 	000020 		17$:	TST	20(R5)			;WERE THERE ANY OF THESE ?
   3287	013376	001566 				BEQ	CHKD02
   3288	013400					CK11SC	0,<	>		;TYPE CR/LF/TAB
	013400	104404 				TRAP	0!CKEMSG		;
   3289	013402	   011 	   000 			.ASCIZ	\	\
   3290						.EVEN
   3291	013404	016500 	000020 			MOV	20(R5),R0			;NUMBER OF DEVICES WE FOUND
   3292	013410	004737 	020616'			JSR	PC,CKTOCT		;TYPE OUT THE NUMBER
   3293	013414	004037 	020574'			JSR	R0,CKTSTR		;TYPE A BLANK
   3294	013420	   040 	   000 			.BYTE	040,0
   3295	013422	013700 	011332'			MOV	CKDNAM,R0		;GET ADR OF ASCIZ STRING
   3296	013426	004737 	020530'			JSR	PC,CKTTXT		;TYPE DEVICE NAME
   3297	013432	032765 	000076 	000020 		BIT	#76,20(R5)		;HOW MANY ?
   3298	013440	001403 				BEQ	CHKDV1
   3299	013442					CK11SC	<CKENCL>,<'s>
	013442	104444 				TRAP	CKENCL!CKEMSG		;
   3300	013444	   047 	   163 	   000 		.ASCIZ	\'s\
   3301						.EVEN
   3302						.ENABL	LSB
   3303	013450	010346 			CHKDV1:	MOV	R3,-(SP)
   3304	013452	010446 				MOV	R4,-(SP)
   3305	013454	016546 	000020 			MOV	20(R5),-(SP)		;SAVE NUMBER OF DEVICES FOUND
   3306	013460	005037 	011330'			CLR	CKDEVN			;CHECK UNIT 0 FIRST
   3307	013464	016503 	000026 			MOV	26(R5),R3		;GET FIRST VECTOR FOR POSSIBLE FIXED
   3308	013470	116500 	000005 			MOVB	5(R5),R0		;GET VECTOR MULTIPLE
   3309	013474	001405 				BEQ	11$			;BRANCH IF FIXED
   3310	013476	013703 	015270'			MOV	CHKFLV,R3		;GET VECTOR FOR 1ST UNIT
   3311	013502	005300 				DEC	R0
   3312	013504	060003 				ADD	R0,R3
   3313	013506	040003 				BIC	R0,R3
   3314	013510	011504 			11$:	MOV	(R5),R4			;GET HDW ADR FOR FIRST UNIT
   3315	013512	001002 				BNE	12$
   3316	013514	013704 	015272'			MOV	CHKFLD,R4		;FLOATING DEVICE
   3317	013520	005037 	020514'		12$:	CLR	CHKCHR+CKPI		;ROUTINE WILL SET PI LEVEL
   3318	013524	016500 	000012 			MOV	12(R5),R0		;ADR OF ROUTINE TO VERIFY DEVICE
   3319	013530	001467 				BEQ	13$			;BRANCH IF NO ROUTINE TO VERIFY
   3320	013532	042737 	100000 	011326'		BIC	#CKFIDT,CHKFLG		;HAVEN'T TYPED ID YET
   3321	013540	010437 	020510'			MOV	R4,CHKCHR+CKDA		;SAVE DEVICE ADDRESS
   3322	013544	010337 	020512'			MOV	R3,CHKCHR+CKDV		;SAVE VECTOR ADDRESS IN CHARACTERISTICS TABLE
   3323	013550	010401 				MOV	R4,R1			;PUT DEV ADR IN R1 SINCE MOST
   3324										; ROUTINES WILL USE IT.
   3325	013552	005037 	020516'			CLR	CHKCHR+CKFLG		;CLEAR FLAGS AND LET DEVICE CHECK ROUTINE SET THEM
   3326	013556	012737 	000340 	177776 		MOV	#BR7,@#PS		;MAKE SURE WE'RE AT LEVEL 7
   3327	013564	012737 	014016'	000004 		MOV	#NONDEV,NXMVEC		;SEE IF THERE WAS A HOLE
   3328	013572	005711 				TST	(R1)			;WAS THERE ?
   3329	013574	012737 	017636'	000004 		MOV	#CKBUST,NXMVEC		;NO IF WE GOT HERE
   3330	013602	004710 				JSR	PC,(R0)			;CALL TO DEVICE CHECK
   3331	013604	005765 	000022 			TST	22(R5)			;SEE IF VECTOR ADR SET YET
   3332	013610	001037 				BNE	13$			;BRANCH IF SET
   3333	013612	013765 	020512'	000022 		MOV	CHKCHR+CKDV,22(R5)	;SET FIRST VECTOR FOUND
   3334	013620	005737 	020514'			TST	CHKCHR+CKPI		;MAKE SURE IT INTERRUPTED
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 73-1
CHECK SYSTEM FOR EXISTENCE OF OPTIONS

   3335	013624	001431 				BEQ	13$			;BRANCH IF NOT
   3336	013626	023765 	020514'	000024 		CMP	CHKCHR+CKPI,24(R5)	;CORRECT PI LEVEL ?
   3337	013634	001425 				BEQ	13$			;BRANCH IF SO
   3338	013636					CKSERR	<24(R5)>,<CHKCHR+CKPI>,<26(R5)>
	013636	016546 	000024 			MOV	24(R5),-(SP)			;SAVE GOOD (24(R5)) ON STACK
	013642	013746 	020514'			MOV	CHKCHR+CKPI,-(SP)			;SAVE BAD (CHKCHR+CKPI) ON STACK
	013646	016546 	000026 			MOV	26(R5),-(SP)		;SAVE ADDRESS (26(R5)) ON STACK
   3339	013652					CK11SC	<CKEDID!CKEGB!CKEMSG>,<INTERRUPT TO WRONG PI LEVEL>
	013652	104514 				TRAP	CKEDID!CKEGB!CKEMSG!CKEMSG		;
   3340	013654	   111 	   156 	   164 		.ASCIZ	\Interrupt to Wrong PI level\
	013657	   145 	   162 	   162
	013662	   165 	   160 	   164
	013665	   040 	   164 	   157
	013670	   040 	   127 	   162
	013673	   157 	   156 	   147
	013676	   040 	   120 	   111
	013701	   040 	   154 	   145
	013704	   166 	   145 	   154
	013707	   000
   3341	013710	012700 	020510'		13$:	MOV	#CHKCHR,R0		;POINT TO THE CHARACTERISTIC TABLE
   3342	013714	004775 	000014 			JSR	PC,@14(R5)		;CALL TO MAIN PROGRAM
   3343	013720	116500 	000003 		14$:	MOVB	3(R5),R0		;GET VECTOR INCREMENT
   3344	013724	060003 				ADD	R0,R3
   3345	013726	116500 	000004 			MOVB	4(R5),R0		;HDW INCREMENT
   3346	013732	060004 				ADD	R0,R4
   3347	013734	005237 	011330'			INC	CKDEVN			;ON TO NEXT DEVICE NUMBER
   3348	013740	021637 	011330'			CMP	(SP),CKDEVN
   3349	013744	001265 				BNE	12$
   3350	013746	012602 				MOV	(SP)+,R2
   3351	013750	012604 				MOV	(SP)+,R4
   3352	013752	012603 				MOV	(SP)+,R3
   3353
   3354	013754				CHKD02:	;SAVE	<R3,R4>
   3355						;CLR	R4			;FLAG NO MORE DEVICES
   3356						;JSR	PC,@14(R5)		;CALL MAIN PROGRAM
   3357						;RESTORE	<R4,R3>
   3358
   3359					;HERE WHEN DONE CHECKING DEVICE
   3360	013754	105765 	000005 			TSTB	5(R5)			;SEE IF FIXED DEV
   3361	013760	001413 				BEQ	CHKD01			;BRANCH IF FIXED  (LIKE LPT)
   3362	013762	013746 	015270'			MOV	CHKFLV,-(SP)		;RESET FLOATING VECTOR
   3363	013766	010337 	015270'			MOV	R3,CHKFLV
   3364	013772	012603 				MOV	(SP)+,R3
   3365	013774	011500 				MOV	(R5),R0			;WAS THIS A FLOATING DEVICE ?
   3366	013776	001004 				BNE	CHKD01			;BRANCH IF NOT
   3367	014000	013700 	015272'			MOV	CHKFLD,R0		;COPY ADR OF FIRST DEVICE
   3368	014004	010437 	015272'			MOV	R4,CHKFLD
   3369	014010	062705 	000030 		CHKD01:	ADD	#CKCADD-4,R5
   3370	014014	000205 				RTS	R5
   3371
   3372	014016	022626 			NONDEV:	CMP	(SP)+,(SP)+		;GET RID OF THE TRAP INFO
   3373	014020					CK11SC	<CKEWRN!CKEDID!CKEMSG>,<Device does NOT exist>
	014020	104614 				TRAP	CKEWRN!CKEDID!CKEMSG!CKEMSG		;
   3374	014022	   104 	   145 	   166 		.ASCIZ	\Device does NOT exist\
	014025	   151 	   143 	   145
	014030	   040 	   144 	   157
	014033	   145 	   163 	   040
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 73-2
CHECK SYSTEM FOR EXISTENCE OF OPTIONS

	014036	   116 	   117 	   124
	014041	   040 	   145 	   170
	014044	   151 	   163 	   164
	014047	   000
   3375						.EVEN
   3376	014050	000717 				BR	13$
   3377						.DSABL	LSB
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 74
BIT SET/BIT CLEAR TEST

   3379					.SBTTL		BIT SET/BIT CLEAR TEST
   3380
   3381					;HERE TO CHECK WE CAN SET/CLEAR VARIOUS BITS
   3382					;
   3383					; CALL	MOV	#<ADR OF ASCIZ \NAME\>,CKDNAM
   3384					;	MOV	<DEVICE NUMBER>,CKDEVN
   3385					;	MOV	<DEVICE REGISTER ADDRESS>,R1
   3386					;	JSR	R5,CHKBIT
   3387					;	<ALL BITS TO TEST>
   3388					;
   3389	014052	010046 			CHKBIT:	MOV	R0,-(SP)
   3390	014054	012737 	000340 	177776 		MOV	#BR7,@#PS		;DISABLE INTERRUPTS
   3391	014062	011500 				MOV	(R5),R0			;GET BITS TO CHECK
   3392	014064	040011 				BIC	R0,(R1)			;TRY AND CLEAR ALL OF THEM
   3393	014066	030011 				BIT	R0,(R1)			;SEE IF ALL OF THEM CLEARED?
   3394	014070	001410 				BEQ	11$			;BRANCH IF ALL CLEAR
   3395	014072	005046 				CLR	-(SP)			;WHAT THE RESULT SHOULD BE
   3396	014074	011146 				MOV	(R1),-(SP)		;PUT C(DEV REG) ON STACK
   3397	014076	010046 				MOV	R0,-(SP)			;BUT ONLY CERTAIN BITS ARE BAD CANDIDATES
   3398	014100	005116 				COM	(SP)			;GET RID OF ONES
   3399	014102	042616 				BIC	(SP)+,(SP)		; THAT WE'RE NOT INTERESTED IN
   3400	014104	010146 				MOV	R1,-(SP)			;SAVE THE DEVICE ADR
   3401	014106					CK11SC	<CKEMSE!CKEPC!CKEDID!CKEGB>,<CKMG02>,<BITS WOULD NOT CLEAR>
	014106	104532 				TRAP	CKEMSE!CKEPC!CKEDID!CKEGB&<^CCKEMSG>		;BITS WOULD NOT CLEAR
	014110	020776'				.WORD	CKMG02			;ADR OF MESSAGE
   3402	014112	012700 	000001 		11$:	MOV	#1,R0			;START WITH B0 AND GO UNTIL B15 IS DONE
   3403	014116	031500 			12$:	BIT	(R5),R0			;WANT THIS BIT CHECKED?
   3404	014120	001420 				BEQ	14$			;BRANCH IF NOT, AND MAKE NEW BIT
   3405	014122	050011 				BIS	R0,(R1)			;TRY TO SET THE BIT
   3406	014124	030011 				BIT	R0,(R1)			;SEE IF THE BIT SET
   3407	014126	001005 				BNE	13$			;BRANCH IF IT SET
   3408	014130	010046 				MOV	R0,-(SP)			;SAVE GOOD
   3409	014132	005046 				CLR	-(SP)			;GOOD SHOUD BE 0 FOR THAT BIT
   3410	014134	010146 				MOV	R1,-(SP)			;DEV ADR WHERE IT HAPPENED
   3411	014136					CK11SC	<CKEMSE!CKEPC!CKEDID!CKEGB>,<CKMG03>,<BIT WOULD NOT SET>
	014136	104532 				TRAP	CKEMSE!CKEPC!CKEDID!CKEGB&<^CCKEMSG>		;BIT WOULD NOT SET
	014140	021020'				.WORD	CKMG03			;ADR OF MESSAGE
   3412	014142	040011 			13$:	BIC	R0,(R1)			;NOW THAT ITS SET TRY TO CLEAR IT
   3413	014144	030011 				BIT	R0,(R1)			;SEE IF IT CLEARED
   3414	014146	001405 				BEQ	14$			;BRANCH IF IT CLEARED AND GET NEW BIT
   3415	014150	005046 				CLR	-(SP)			;GOOD SHOUD BE 0
   3416	014152	010046 				MOV	R0,-(SP)			;SINCE IT DIDN'T CLEAR THIS BIT IS BAD
   3417	014154	010146 				MOV	R1,-(SP)			;DEV ADR THAT FAILED
   3418	014156					CK11SC	<CKEMSE!CKEPC!CKEDID!CKEGB>,<CKMG02>,<BIT WOULD NOT CLEAR>
	014156	104532 				TRAP	CKEMSE!CKEPC!CKEDID!CKEGB&<^CCKEMSG>		;BIT WOULD NOT CLEAR
	014160	020776'				.WORD	CKMG02			;ADR OF MESSAGE
   3419	014162	006300 			14$:	ASL	R0			;MAKE NEW BIT POSITION
   3420	014164	001354 				BNE	12$			;BRANCH IF THERE IS A BIT
   3421	014166	012600 				MOV	(SP)+,R0
   3422	014170	005725 				TST	(R5)+			;GO OVER BITS FOLLOWING JSR
   3423	014172	000205 				RTS	R5			;EXIT
   3424
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 75
PRINT DEVICE ID ROUTINE

   3426					.SBTTL		PRINT DEVICE ID ROUTINE
   3427
   3428	014174	032737 	100000 	011326'	CKDIDT:	BIT	#CKFIDT,CHKFLG		;HAVE WE ALREADY TYPE DEVICE ID ?
   3429	014202	001051 				BNE	11$
   3430	014204	004737 	020556'			JSR	PC,CKCRLF		;EXTRA CR + LF
   3431	014210	004037 	020570'			JSR	R0,CKTCRL
   3432	014214	   007 	   000 			.BYTE	007,0
   3433	014216	032776 	000200 	000002 		BIT	#CKEWRN,@2(SP)		;WARN ?
   3434	014224	001004 				BNE	5$
   3435	014226					CK11SC	CKENCL,<? >
	014226	104444 				TRAP	CKENCL!CKEMSG		;
   3436	014230	   077 	   040 	   000 		.ASCIZ	\? \
   3437						.EVEN
   3438	014234	000403 				BR	10$
   3439	014236				5$:	CK11SC	CKENCL,<% >
	014236	104444 				TRAP	CKENCL!CKEMSG		;
   3440	014240	   045 	   040 	   000 		.ASCIZ	\% \
   3441						.EVEN
   3442	014244	013700 	011332'		10$:	MOV	CKDNAM,R0		;GET ASCIZ \DEVICE NAME\
   3443	014250	004737 	020530'			JSR	PC,CKTTXT		;TYPE DEVICE NAME
   3444	014254					CK11SC	<CKENCL>,< #>
	014254	104444 				TRAP	CKENCL!CKEMSG		;
   3445	014256	   040 	   043 	   000 		.ASCIZ	\ #\
   3446						.EVEN
   3447	014262	013700 	011330'			MOV	CKDEVN,R0		;GET UNIT NUMBER
   3448	014266	004737 	020616'			JSR	PC,CKTOCT		;TYPE UNIT NUMBER
   3449	014272					CK11SC	<CKENCL>,<(Adr = >
	014272	104444 				TRAP	CKENCL!CKEMSG		;
   3450	014274	   050 	   101 	   144 		.ASCIZ	\(Adr = \
	014277	   162 	   040 	   075
	014302	   040 	   000
   3451						.EVEN
   3452	014304	013700 	020510'			MOV	CHKCHR+CKDA,R0		;GET DEVICE ADDR
   3453	014310	004737 	020616'			JSR	PC,CKTOCT		;TYPE IT
   3454	014314					CK11SC	<CKENCL>,<)>
	014314	104444 				TRAP	CKENCL!CKEMSG		;
   3455	014316	   051 	   000 			.ASCIZ	\)\
   3456						.EVEN
   3457	014320	052737 	100000 	011326'		BIS	#CKFIDT,CHKFLG		;REMEMBER WE TYPED DEVICE ID
   3458	014326	000207 			11$:	RTS	PC
   3459
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 76
ROUTINE TO FIND DEVICE INTERRUPT LEVEL

   3461					.SBTTL		ROUTINE TO FIND DEVICE INTERRUPT LEVEL
   3462					;
   3463					;CALL	JSR R5,CHKINL			;WITH DEVICE READY TO INT BUT
   3464					;					; WITH THE PS SET TO LEVEL 7.
   3465					;
   3466	014330	010046 			CHKINL:	MOV	R0,-(SP)		;SAVE R0
   3467	014332	010146 				MOV	R1,-(SP)		;SAVE R1
   3468	014334	010246 				MOV	R2,-(SP)		;SAVE R2
   3469	014336	012702 	000300 			MOV	#300,R2			;START BY CHECKING LEVEL 6.
   3470	014342	011501 			11$:	MOV	(R5),R1			;GET TIME TO WAIT
   3471	014344	005000 				CLR	R0			;WILL BE SET BY INT ROUTINE IF INT
   3472	014346	010237 	177776 			MOV	R2,@#PS			;LOWER PS LEVEL
   3473	014352	005700 			12$:	TST	R0			;SEE IF INT YET
   3474	014354	001012 				BNE	13$			;NON 0 SAYS INTERRUPT
   3475	014356	077103 				SOB	R1,12$			;TIME AND WAIT
   3476	014360	012737 	000340 	177776 		MOV	#BR7,@#PS		;TIMED OUT SO SET LEVEL 7 AND LOWER AND TRY AGAIN
   3477	014366	162702 	000040 			SUB	#40,R2			;MAKE LEVEL LOWER BY 1
   3478	014372	002363 				BGE	11$			;BRANCH IF LEVEL 0 NOT CHECKED YET
   3479	014374					CK11SC	<CKEMSE!CKEDID!CKEPC>,<CKMG04>,<DEVICE NEVER INTERRUPTED>
	014374	104432 				TRAP	CKEMSE!CKEDID!CKEPC&<^CCKEMSG>		;DEVICE NEVER INTERRUPTED
	014376	021040'				.WORD	CKMG04			;ADR OF MESSAGE
   3480	014400	000415 				BR	15$			;EXIT
   3481	014402	020037 	020512'		13$:	CMP	R0,CHKCHR+CKDV		;SEE IF SAME AS WHAT IT SHOULD BE
   3482	014406	001406 				BEQ	14$			;BRANCH IF CORRECT VECTOR
   3483	014410					CKSERR	<CHKCHR+CKDV>,<R0>,<R4>
	014410	013746 	020512'			MOV	CHKCHR+CKDV,-(SP)			;SAVE GOOD (CHKCHR+CKDV) ON STACK
	014414	010046 				MOV	R0,-(SP)			;SAVE BAD (R0) ON STACK
	014416	010446 				MOV	R4,-(SP)		;SAVE ADDRESS (R4) ON STACK
   3484	014420					CK11SC	<CKEMSE!CKEPC!CKEDID!CKEGB>,<CKMG05>,<Device INTERRUPTED to WRONG VECTOR>
	014420	104532 				TRAP	CKEMSE!CKEPC!CKEDID!CKEGB&<^CCKEMSG>		;Device INTERRUPTED to WRONG VECTOR
	014422	021070'				.WORD	CKMG05			;ADR OF MESSAGE
   3485	014424	062702 	000040 		14$:	ADD	#40,R2			;MAKE THE DEVICE LEVEL
   3486	014430	010237 	020514'			MOV	R2,CHKCHR+CKPI		;SAVE LEVEL DEVICE INTERRUPTED AT
   3487	014434	012602 			15$:	MOV	(SP)+,R2		;RESTORE R2
   3488	014436	012601 				MOV	(SP)+,R1		;RESTORE R1
   3489	014440	012600 				MOV	(SP)+,R0		;RESTORE R0
   3490	014442	005725 				TST	(R5)+			;SKIP OVER TIME DELAY CONSTANT
   3491	014444	000205 				RTS	R5			;RETURN WITH DEVICE LEVEL SAVED IN CHARACTERISTICS TABLE
   3492
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 77
CHECK INTERRUPTS AND FIND DEVICE LEVEL

   3494					.SBTTL		CHECK INTERRUPTS AND FIND DEVICE LEVEL
   3495
   3496					;ROUTINE TO CHECK INTERRUPTS AND FIND DEVICE LEVEL
   3497					;
   3498					; CALL	MOV	ENABLE ADR,R1
   3499					;	MOV	INT ADR,R2
   3500					;	JSR	R5,CKINT
   3501					;	ENABLE BIT
   3502					;	INTERRUPT BITS
   3503					;	SPECIAL CLEAR BITS
   3504					;	0 if BIS sufficient to generate interrupt, else address
   3505					;		of subroutine
   3506					;
   3507	014446	010346 			CKINT:	MOV	R3,-(SP)
   3508	014450	010446 				MOV	R4,-(SP)
   3509	014452	005037 	020514'			CLR	CHKCHR+CKPI		;START WITH PI OF 0 (NO DEV)
   3510	014456	005037 	015100'			CLR	CKFLAG
   3511	014462	012704 	000001 			MOV	#1,R4			;STARTING POSITION OF SLIDING INT BIT
   3512	014466	012703 	000340 		CKINT1:	MOV	#BR7,R3			;START CHECKING AT THIS LEVEL
   3513	014472	010337 	177776 		CKINT2:	MOV	R3,@#PS			;SET PS
   3514	014476	005000 				CLR	R0			;SET TO 0 SO IF INT HAPPENS WE KNOW IT
   3515	014500	030465 	000002 		CKINT3:	BIT	R4,2(R5)		;IS THERE A BIT TO TEST?
   3516	014504	001002 				BNE	11$			;BRANCH IF BIT IN POSITION
   3517	014506	000137 	015044'			JMP	CKINT7			;MAKE NEW BIT POSITION
   3518	014512	005765 	000006 		11$:	TST	6(R5)			;subroutine supplied?
   3519	014516	001403 				BEQ	12$			;no, do normal
   3520	014520	004775 	000006 			JSR	PC,@6(R5)		;yes, use it
   3521	014524	000403 				BR	13$			;and continue
   3522	014526	051511 			12$:	BIS	(R5),(R1)		;SET INTERRUPT ENABLE
   3523	014530	050412 				BIS	R4,(R2)			;SET INTERRUPT BIT
   3524	014532	000240 				NOP				;ALLOW 1 EXTRA INST TIME FOR INT
   3525	014534				13$:
   3526	014534	012737 	000340 	177776 		MOV	#BR7,@#PS		;LET NO INT HAPPEN
   3527	014542	041511 				BIC	(R5),(R1)		;CLEAR INT ENABLE
   3528	014544	005765 	000004 			TST	4(R5)			;SEE IF SPECIAL CLEAR
   3529	014550	001403 				BEQ	14$			;BRANCH IF NOT
   3530	014552	056512 	000004 			BIS	4(R5),(R2)		;SPECIAL CLEAR
   3531	014556	000402 				BR	15$			;CONTINUE
   3532	014560	046512 	000002 		14$:	BIC	2(R5),(R2)		;CLEAR INT BITS
   3533	014564	005700 			15$:	TST	R0			;IF R0 IS NON 0 IT SHOULD BE THE
   3534										; VECTOR ADR. IF 0 NO INT HAPPENED.
   3535	014566	001006 				BNE	16$			;BRANCH IF INTERRUPT
   3536	014570	162703 	000040 			SUB	#40,R3			;MAKE PS VALUE 1 LEVEL LESS
   3537	014574	002336 				BGE	CKINT2			;BRANCH IF NEW LEVEL OK
   3538	014576					CK11SC	<CKEMSE!CKEPC!CKEDID>,<CKMG04>,<DEVICE NEVER INTERRUPTED>
	014576	104432 				TRAP	CKEMSE!CKEPC!CKEDID&<^CCKEMSG>		;DEVICE NEVER INTERRUPTED
	014600	021040'				.WORD	CKMG04			;ADR OF MESSAGE
   3539	014602	000532 				BR	CKINTF			;EXIT WITH FAILURE RETURN
   3540					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 78
CHECK INTERRUPTS AND FIND DEVICE LEVEL

   3542					;
   3543					; HERE WHEN THE DEVICE HAS INTERRUPTED
   3544					;
   3545	014604	005737 	015100'		16$:	TST	CKFLAG		;FIRST TIME THROUGH?
   3546	014610	001014 				BNE	17$		;NO.
   3547	014612	005337 	015100'			DEC	CKFLAG		;YES, DON'T DO THIS AGAIN.
   3548	014616	010337 	020514'			MOV	R3,CHKCHR+CKPI	;STORE PRIORITY INTERRUPT LEVEL
   3549	014622	062737 	000040 	020514'		ADD	#40,CHKCHR+CKPI
   3550	014630	005737 	020512'			TST	CHKCHR+CKDV	;VECTOR SPECIFIED?
   3551	014634	001002 				BNE	17$		;YES, IT BETTER BE RIGHT.
   3552	014636	010037 	020512'			MOV	R0,CHKCHR+CKDV	;NO, SPECIFY IT NOW.
   3553	014642	020037 	020512'		17$:	CMP	R0,CHKCHR+CKDV	;IS VECTOR RIGHT?
   3554	014646	001412 				BEQ	18$		;YES.
   3555	014650	010046 				MOV	R0,-(SP)	;SAVE RIGHT ADDR
   3556	014652					CKSERR	<CHKCHR+CKDV>,R0,<R2> ;GD,BD,ADR
	014652	013746 	020512'			MOV	CHKCHR+CKDV,-(SP)			;SAVE GOOD (CHKCHR+CKDV) ON STACK
	014656	010046 				MOV	R0,-(SP)			;SAVE BAD (R0) ON STACK
	014660	010246 				MOV	R2,-(SP)		;SAVE ADDRESS (R2) ON STACK
   3557	014662					CK11SC	<CKEMSE!CKEPC!CKEDID!CKEGB>,<CKMG05>,<DEVICE INTERRUPTED TO WRONG VECTOR>
	014662	104532 				TRAP	CKEMSE!CKEPC!CKEDID!CKEGB&<^CCKEMSG>		;DEVICE INTERRUPTED TO WRONG VECTOR
	014664	021070'				.WORD	CKMG05			;ADR OF MESSAGE
   3558	014666	012637 	020512'			MOV	(SP)+,CHKCHR+CKDV ;SET VECTOR RIGHT
   3559	014672	000470 				BR	CKINTE		;EXIT
   3560					;
   3561	014674	010300 			18$:	MOV	R3,R0			;GET PRESENT LEVEL
   3562	014676	062700 	000040 			ADD	#40,R0			;MAKE IT THE DEVICE LEVEL
   3563	014702	020037 	020514'			CMP	R0,CHKCHR+CKPI		;CHECK LEVEL AGAINST LAST TIME
   3564	014706	001424 				BEQ	CKINT6			;BRANCH IF LEVEL CHECKS
   3565	014710					CKSERR	<CHKCHR+CKPI>,R0,R4
	014710	013746 	020514'			MOV	CHKCHR+CKPI,-(SP)			;SAVE GOOD (CHKCHR+CKPI) ON STACK
	014714	010046 				MOV	R0,-(SP)			;SAVE BAD (R0) ON STACK
	014716	010446 				MOV	R4,-(SP)		;SAVE ADDRESS (R4) ON STACK
   3566	014720					CK11SC	<CKEPC!CKEDID!CKEGB>,<Interrupt to Wrong PI Level>,<INTERRUPT TO WRONG PI LEVEL>
	014720	104516 				TRAP	CKEPC!CKEDID!CKEGB!CKEMSG		;INTERRUPT TO WRONG PI LEVEL
   3567	014722	   111 	   156 	   164 		.ASCIZ	\Interrupt to Wrong PI Level\
	014725	   145 	   162 	   162
	014730	   165 	   160 	   164
	014733	   040 	   164 	   157
	014736	   040 	   127 	   162
	014741	   157 	   156 	   147
	014744	   040 	   120 	   111
	014747	   040 	   114 	   145
	014752	   166 	   145 	   154
	014755	   000
   3568						.EVEN
   3569	014756	000436 				BR	CKINTE			;EXIT
   3570					;
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 79
CHECK INTERRUPTS AND FIND DEVICE LEVEL

   3572					;
   3573	014760	012737 	000000 	177776 	CKINT6:	MOV	#0,@#PS			;CHECK WITH LEVEL 0 AND
   3574	014766	005000 				CLR	R0			; NO INT ENABLE BITS SET
   3575	014770	050412 				BIS	R4,(R2)			;  AND INT BIT SET THAT NO INT OCCURRS
   3576	014772	000240 				NOP				;PAUSE
   3577	014774	000240 				NOP				;PAUSE
   3578	014776	012737 	000340 	177776 		MOV	#BR7,@#PS		;DON'T LET AN INT HAPPEN
   3579	015004	005700 				TST	R0			;SEE IF ONE HAPPENED
   3580	015006	001403 				BEQ	11$			;BRANCH IF NO INT
   3581	015010					CK11SC	<CKEMSE!CKEDID!CKEPC>,CKMG07,<INTERRUPT WHEN NOT ENABLED>
	015010	104432 				TRAP	CKEMSE!CKEDID!CKEPC&<^CCKEMSG>		;INTERRUPT WHEN NOT ENABLED
	015012	021136'				.WORD	CKMG07			;ADR OF MESSAGE
   3582	015014	000425 				BR	CKINTF			;EXIT WITH FAILURE RETURN
   3583	015016	005765 	000004 		11$:	TST	4(R5)			;SEE IF SPECIAL CLEAR
   3584	015022	001403 				BEQ	12$			;BRANCH IF NOT
   3585	015024	056512 	000004 			BIS	4(R5),(R2)		;SPECIAL CLEAR  (DL10 FOR ONE)
   3586	015030	000401 				BR	13$			;CONTINUE
   3587	015032	040412 			12$:	BIC	R4,(R2)			;CLEAR INT BITS
   3588	015034	006304 			13$:	ASL	R4			;MAKE NEW BIT POSITION
   3589	015036	001406 				BEQ	CKINTE			;BRANCH IF DONE
   3590	015040	000137 	014466'			JMP	CKINT1			;TEST NEW BIT
   3591	015044	006304 			CKINT7:	ASL	R4			;MAKE NEW INT BIT POSITION
   3592	015046	001402 				BEQ	CKINTE			;BRANCH IF NO NEW BIT POSITION
   3593	015050	000137 	014500'			JMP	CKINT3			;BRANCH IF NEW BIT POSITION
   3594	015054	062705 	000010 		CKINTE:	ADD	#10,R5			;FOR CORRECT RETURN
   3595	015060	000241 				CLC				;FLAG SUCCESS
   3596	015062				CKINTG:					;COMMON RETURN CODE
   3597	015062	012604 				MOV	(SP)+,R4
   3598	015064	012603 				MOV	(SP)+,R3
   3599	015066	000205 				RTS	R5			;RETURN
   3600
   3601	015070	062705 	000010 		CKINTF:	ADD	#10,R5			;FOR CORRECT RETURN ADDRESS
   3602	015074	000261 				SEC				;TO INDICATE FAILURE
   3603	015076	000771 				BR	CKINTG			;GO TO COMMON RETURN CODE
   3604
   3605	015100	000000 			CKFLAG:	0
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 80
HERE ON AN INTERRUPT WHILE IN CHK11

   3607					.SBTTL		HERE ON AN INTERRUPT WHILE IN CHK11
   3608
   3609					;HERE FROM AN INTERRUPT WHILE IN CHK11
   3610					; WILL RETURN VECTOR ADDRESS IN R0 (RANGE 0 TO 1174)
   3611					;
   3612	015102	013700 	177776 		CHKINT:	MOV	@#PS,R0			;GET PROCESSOR STATUS
   3613	015106	004737 	015246'			JSR	PC,11$			;COMPUTE INTERRUPT ADDRESS
   3614	015112	000000 				.WORD	0000			;THESE INTERRUPTS ARE 0000-0074
   3615		000012 			CHKITL=.-CHKINT				;LENGTH OF INTERRUPT BLOCK
   3616	015114	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3617	015120	004737 	015246'			JSR	PC,11$
   3618	015124	000100 				.WORD	0100
   3619	015126	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3620	015132	004737 	015246'			JSR	PC,11$
   3621	015136	000200 				.WORD	0200
   3622	015140	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3623	015144	004737 	015246'			JSR	PC,11$
   3624	015150	000300 				.WORD	0300
   3625	015152	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3626	015156	004737 	015246'			JSR	PC,11$
   3627	015162	000400 				.WORD	0400
   3628	015164	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3629	015170	004737 	015246'			JSR	PC,11$
   3630	015174	000500 				.WORD	0500
   3631	015176	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3632	015202	004737 	015246'			JSR	PC,11$
   3633	015206	000600 				.WORD	0600
   3634	015210	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3635	015214	004737 	015246'			JSR	PC,11$
   3636	015220	000700 				.WORD	0700
   3637	015222	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3638	015226	004737 	015246'			JSR	PC,11$
   3639	015232	001000 				.WORD	1000
   3640	015234	013700 	177776 			MOV	@#PS,R0			;GET PROCESSOR STATUS
   3641	015240	004737 	015246'			JSR	PC,11$
   3642	015244	001100 				.WORD	1100
   3643					;
   3644					; HERE AFTER AN INTERRUPT TO COMPUTE THE ADDRESS FROM THE THE LOW
   3645					;  FOUR BITS OF THE PS AND THE WORD AFTER THE JSR ABOVE.
   3646					;
   3647	015246	042700 	177760 		11$:	BIC	#^C17,R0		;STRIP EXTRA BITS
   3648	015252	006300 				ASL	R0			;MULTIPLY BY 4
   3649	015254	006300 				ASL	R0
   3650	015256	063600 				ADD	@(SP)+,R0		;MAKES VECTOR ADR
   3651	015260	012766 	000340 	000002 		MOV	#BR7,2(SP)		;SO DON'T TRAP BACK AGAIN
   3652	015266	000002 				RTI
   3653
   3654	015270				CHKFLV:	.BLKW	1			;CURRENT FLOATING DEVICE VECTOR
   3655	015272				CHKFLD:	.BLKW	1			;CURRENT FLOATING DEVICE ADR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 81
CHECK DH11 HDW

   3657					.SBTTL		CHECK DH11 HDW
   3658
   3659					;CALL	MOV	#<VECTOR ADR>,R3
   3660					;	MOV	#<HDW ADR>,R4
   3661					;	MOV	#<HDW ADR>,R1
   3662					;	JSR	PC,CKDH11
   3663	015274	010346 			CKDH11:	MOV	R3,-(SP)	;SAVE REGISTER
   3664	015276	004537 	014052'			JSR	R5,CHKBIT	;CHECK RD/WRT BITS
   3665	015302	131177 				131177			;READ/WRITE BITS
   3666	015304	005721 				TST	(R1)+		;ADVANCE TO NXT REC CHAR REG
   3667	015306	005721 				TST	(R1)+		;ADVANCE TO LINE PARAMETER REG(XX4)
   3668	015310	004537 	014052'			JSR	R5,CHKBIT	;CHECK RD/WRT BITS
   3669	015314	177767 				177767			;READ/WRITE BITS
   3670	015316	005721 				TST	(R1)+		;ADVANCE TO CURRENT ADR REG(XX6)
   3671	015320	005002 				CLR	R2		;START CHECK AT LINE 0
   3672	015322	010214 			11$:	MOV	R2,(R4)		;SELECT THE LINE
   3673	015324	004537 	014052'			JSR	R5,CHKBIT	;CHECK RD/WRT BITS
   3674	015330	177777 				-1			;READ/WRITE BITS
   3675	015332	005202 				INC	R2		;NEXT LINE TO CHECK
   3676	015334	020227 	000017 			CMP	R2,#17		;DONE
   3677	015340	003770 				BLE	11$		;CHECK LINES 0-17
   3678	015342	005721 				TST	(R1)+		;ADVANCE TO BYTE COUNT REG(X10)
   3679	015344	005002 				CLR	R2		;START CHECK AT LINE 0
   3680	015346	010214 			12$:	MOV	R2,(R4)		;SELECT THE LINE
   3681	015350	004537 	014052'			JSR	R5,CHKBIT	;CHECK RD/WRT BITS
   3682	015354	177777 				-1			;READ/WRITE BITS
   3683	015356	005202 				INC	R2		;NEXT LINE TO CHECK
   3684	015360	020227 	000017 			CMP	R2,#17		;ALL LINES CHECKED?
   3685	015364	003770 				BLE	12$		;CHECK ALL 20 LINES
   3686	015366	005721 				TST	(R1)+		;ADVANCE TO BAR REG(XX12)
   3687	015370	005721 				TST	(R1)+		;ADVANCE TO BREAK REG(X14)
   3688	015372	004537 	014052'			JSR	R5,CHKBIT	;CHECK BITS
   3689	015376	177777 				-1			;READ/WRITE BITS
   3690	015400	005721 				TST	(R1)+		;ADVANCE TO SILO STATUS REG(X16)
   3691	015402	004537 	014052'			JSR	R5,CHKBIT	;CHECK READ/WRITE BITS
   3692	015406	000077 				77
   3693	015410					$CKINT	R4,R4,<DH.RIE!DH..MM>,<DH..RI>
	015410	010401 			.IIF	NB,R4,	MOV	R4,R1			;LOAD ENABLE ADR
	015412	010402 			.IIF	NB,R4,	MOV	R4,R2			;LOAD INTERRUPT ADR
	015414	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	015420	001100 				.WORD	DH.RIE!DH..MM			;ENABLE BITS -  DH.RIE!DH..MM
	015422	000200 				.WORD	DH..RI			;INTERRUPT BITS -  DH..RI
	015424	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	015426	000000 			.IIF	B,,	.WORD	0			;NO INTERRUPT SUB,ROUTINE NEEDED
   3694	015430					$CKINT	,,<DH.SIE!DH..MM>,<DH..SI>
	015430	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	015434	011000 				.WORD	DH.SIE!DH..MM			;ENABLE BITS -  DH.SIE!DH..MM
	015436	040000 				.WORD	DH..SI			;INTERRUPT BITS -  DH..SI
	015440	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	015442	000000 			.IIF	B,,	.WORD	0			;NO INTERRUPT SUB,ROUTINE NEEDED
   3695	015444	062737 	000004 	020512'		ADD	#4,CHKCHR+CKDV		;MAKE EXPECTED VECTOR FOR XMIT
   3696	015452					$CKINT	,,<DH.TIE>,<DH..TI>
	015452	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	015456	020000 				.WORD	DH.TIE			;ENABLE BITS -  DH.TIE
	015460	100000 				.WORD	DH..TI			;INTERRUPT BITS -  DH..TI
	015462	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	015464	000000 			.IIF	B,,	.WORD	0			;NO INTERRUPT SUB,ROUTINE NEEDED
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 81-1
CHECK DH11 HDW

   3697	015466	010337 	020512'			MOV	R3,CHKCHR+CKDV		;PUT VECTOR ADDRESS IN TABLE
   3698
   3699	015472				CKDH1A:
   3700	015472	010337 	016356'			MOV	R3,DHXMII		;ADR TO COME TO ON XMIT INT
   3701	015476	062737 	000004 	016356'		ADD	#4,DHXMII		;
   3702	015504	012700 	021174'			MOV	#CKBLK,R0		;LOAD A BUFFER WITH COUNT PATTERN
   3703	015510	012701 	000400 			MOV	#400,R1			;LOAD 400 CHARACTERS
   3704	015514	005002 				CLR	R2			;START WITH 0
   3705	015516	110220 			11$:	MOVB	R2,(R0)+		;STORE THE COUNT PATTERN
   3706	015520	105202 				INCB	R2			;NEW PATTERN
   3707	015522	077103 				SOB	R1,11$			;BUFFER LOADED?
   3708	015524	005003 				CLR	R3			;START WITH LINE 0
   3709	015526	012702 	000001 			MOV	#1,R2			;LINE BIT  (LINE 0)
   3710	015532	005037 	016354'		CKDH1B:	CLR	DHDATA			;FIRST RCV'D SHOULD BE 0
   3711	015536	012701 	177400 			MOV	#-400,R1
   3712	015542	052714 	004000 			BIS	#DH..MC,(R4)		;CLEAR THE DH
   3713	015546	052714 	031100 			BIS	#DH..MM!DH.SIE!DH.TIE!DH.RIE,(R4)	;ENABLE INTS
   3714	015552	050314 				BIS	R3,(R4)			;LOAD THE LINE NUMBER
   3715	015554	012764 	033567 	000004 		MOV	#B6!B8!B9!B10!B12!B13!DH.2SB!DH.CL8!DH.PEN!DH..OP,DH.LPR(R4) ;SEL 8BIT,9600,PAR,ODD
   3716	015562	010164 	000010 			MOV	R1,DH.BCR(R4)		;LENGTH TO XMIT
   3717	015566	012764 	021174'	000006 		MOV	#CKBLK,DH.CAR(R4)	;ADR WHERE THE DATA IS
   3718	015574	012764 	000004 	000016 		MOV	#4,DH.SSR(R4)		;ALARM LEVEL TO 4
   3719	015602	005000 			CKDH1E:	CLR	R0			;INT RETURNS ADR IN HERE
   3720	015604	005001 				CLR	R1			;TIMER
   3721	015606	010264 	000012 			MOV	R2,DH.BAR(R4)		;SET LINE ACTIVE
   3722	015612	012737 	000000 	177776 	11$:	MOV	#0,@#PS			;LEVEL TO 0 FOR INTS
   3723	015620	000240 				NOP				;LET AN INTERRUPT HAPPEN
   3724	015622	012737 	000340 	177776 		MOV	#BR7,@#PS		;DON'T LET ONE HAPPEN
   3725	015630	020037 	020512'			CMP	R0,CHKCHR+CKDV		;SEE IF RCV INT YET
   3726	015634	001467 				BEQ	16$			;BRANCH IF RCV INT
   3727	015636	020037 	016356'			CMP	R0,DHXMII		;SEE IF XMIT INT
   3728	015642	001427 				BEQ	13$			;BRANCH IF XMIT INT
   3729	015644	005700 				TST	R0			;SEE IF ANY INTERRUPT
   3730	015646	001413 				BEQ	12$			;BRANCH IF NO INTERRUPT
   3731	015650					CKSERR	<CHKCHR+CKDV>,R0,R3
	015650	013746 	020512'			MOV	CHKCHR+CKDV,-(SP)			;SAVE GOOD (CHKCHR+CKDV) ON STACK
	015654	010046 				MOV	R0,-(SP)			;SAVE BAD (R0) ON STACK
	015656	010346 				MOV	R3,-(SP)		;SAVE ADDRESS (R3) ON STACK
   3732	015660					CK11SC	<CKEPC!CKEGB!CKEDID>,<Ill Int>,<ILLEGAL INT WHILE WAITING FOR DH11 INT>
	015660	104516 				TRAP	CKEPC!CKEGB!CKEDID!CKEMSG		;ILLEGAL INT WHILE WAITING FOR DH11 INT
   3733	015662	   111 	   154 	   154 		.ASCIZ	\Ill Int\
	015665	   040 	   111 	   156
	015670	   164 	   000
   3734						.EVEN
   3735	015672	000137 	016306'			JMP	CKDH1D			;DON'T TEST ANY MORE
   3736	015676	077133 			12$:	SOB	R1,11$			;TIME-OUT
   3737	015700					CK11SC	<CKEPC!CKEDID>,<No Int>,<NO DH11 INTERRUPT>
	015700	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;NO DH11 INTERRUPT
   3738	015702	   116 	   157 	   040 		.ASCIZ	\No Int\
	015705	   111 	   156 	   164
	015710	   000
   3739						.EVEN
   3740	015712	004737 	016320'			JSR	PC,CKDHPL		;REPORT LINE NUMBER
   3741	015716	000137 	016306'			JMP	CKDH1D			;DON'T TEST ANY MORE
   3742	015722	032714 	002000 		13$:	BIT	#DH.NXM,(R4)		;SEE IF NXM
   3743	015726	001411 				BEQ	14$			;BRANCH IF NO NXM
   3744	015730					CK11SC	<CKEPC!CKEDID>,<Xmit Nxm>,<TRANSMIT NXM ON DH>
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 81-2
CHECK DH11 HDW

	015730	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;TRANSMIT NXM ON DH
   3745	015732	   130 	   155 	   151 		.ASCIZ	\Xmit Nxm\
	015735	   164 	   040 	   116
	015740	   170 	   155 	   000
   3746						.EVEN
   3747	015744	004737 	016320'			JSR	PC,CKDHPL		;REPORT LINE NUMBER
   3748	015750	000556 				BR	CKDH1D			;DON'T TEST ANY MORE
   3749	015752	032714 	100000 		14$:	BIT	#DH..TI,(R4)		;BETTER HAVE XMIT INT
   3750	015756	001013 				BNE	15$			;BRANCH IF WE DO
   3751	015760					CK11SC	<CKEPC!CKEDID>,<Ill Xmit Int>,<INT TO XMIT BUT FOR NO REASON>
	015760	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;INT TO XMIT BUT FOR NO REASON
   3752	015762	   111 	   154 	   154 		.ASCIZ	\Ill Xmit Int\
	015765	   040 	   130 	   155
	015770	   151 	   164 	   040
	015773	   111 	   156 	   164
	015776	   000
   3753						.EVEN
   3754	016000	004737 	016320'			JSR	PC,CKDHPL		;REPORT LINE NUMBER
   3755	016004	000540 				BR	CKDH1D			;DON'T TEST ANY MORE
   3756	016006	042714 	100000 		15$:	BIC	#DH..TI,(R4)		;CLEAR XMIT INT
   3757	016012	000673 				BR	CKDH1E			;
   3758	016014	032714 	040000 		16$:	BIT	#DH..SI,(R4)		;SEE IF SILO OVERFLOW
   3759	016020	001411 				BEQ	CKDH1C			;BRANCH IF SILO HAD ROOM
   3760	016022					CK11SC	<CKEPC!CKEDID>,<Silo Full>,<SILO OVERFLOW>
	016022	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;SILO OVERFLOW
   3761	016024	   123 	   151 	   154 		.ASCIZ	\Silo Full\
	016027	   157 	   040 	   106
	016032	   165 	   154 	   154
	016035	   000
   3762						.EVEN
   3763	016036	004737 	016320'			JSR	PC,CKDHPL		;REPORT LINE NUMBER
   3764	016042	000521 				BR	CKDH1D			;DON'T TEST ANY MORE
   3765	016044	042714 	000200 		CKDH1C:	BIC	#DH..RI,(R4)		;CLEAR RCV INT (MUST FOR MAINT MODE)
   3766	016050	016400 	000002 			MOV	DH.NRC(R4),R0		;GET STUFF FROM SILO
   3767	016054	032700 	070000 			BIT	#DH.DOV!DH..FE!DH..PE,R0	;SEE IF ANY ERROR BITS WITH DATA
   3768	016060	001424 				BEQ	11$			;BRANCH IF NO ERRORS WITH THE DATA
   3769	016062	013746 	016354'			MOV	DHDATA,-(SP)		;MAKE THE GOOD
   3770	016066	010346 				MOV	R3,-(SP)			;PUT LINE # IN
   3771	016070	000316 				SWAB	(SP)			;GET IT IN THE (LB)
   3772	016072	052616 				BIS	(SP)+,(SP)		;LINE # NOW IN GOOD
   3773	016074	052716 	100000 			BIS	#DH.VDP,(SP)		;GOOD INCLUDES VALID DATA PRESENT
   3774	016100	010046 				MOV	R0,-(SP)			;THE BAD
   3775	016102	010346 				MOV	R3,-(SP)			;THE LINE UNDER TEST
   3776	016104					CK11SC	<CKEGB!CKEPC!CKEDID>,<Data Err Bit Set>,<ERROR BITS WITH THE DATA>
	016104	104516 				TRAP	CKEGB!CKEPC!CKEDID!CKEMSG		;ERROR BITS WITH THE DATA
   3777	016106	   104 	   141 	   164 		.ASCIZ	\Data Err Bit Set\
	016111	   141 	   040 	   105
	016114	   162 	   162 	   040
	016117	   102 	   151 	   164
	016122	   040 	   123 	   145
	016125	   164 	   000
   3778						.EVEN
   3779	016130	000466 				BR	CKDH1D			;DON'T TEST ANY MORE
   3780	016132	032700 	100000 		11$:	BIT	#DH.VDP,R0		;SEE IF VALID DATA
   3781	016136	001014 				BNE	12$			;BRANCH IF VALID DATA
   3782	016140					CK11SC	<CKEPC!CKEDID>,<Not Valid Data>,<NOT VALID DATA BIT SET>
	016140	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;NOT VALID DATA BIT SET
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 81-3
CHECK DH11 HDW

   3783	016142	   116 	   157 	   164 		.ASCIZ	\Not Valid Data\
	016145	   040 	   126 	   141
	016150	   154 	   151 	   144
	016153	   040 	   104 	   141
	016156	   164 	   141 	   000
   3784						.EVEN
   3785	016162	004737 	016320'			JSR	PC,CKDHPL		;REPORT LINE NUMBER
   3786	016166	000447 				BR	CKDH1D			;DON'T TEST ANY MORE
   3787	016170	042700 	170000 		12$:	BIC	#B15!B14!B13!B12,R0	;CLEAR DATA ERROR BITS
   3788	016174	000300 				SWAB	R0			;FOR CHECKING LINE #
   3789	016176	120003 				CMPB	R0,R3			;SEE IF LINE #OK
   3790	016200	001415 				BEQ	13$			;BRANCH IF IT IS
   3791	016202	010346 				MOV	R3,-(SP)			;LEGAL LINE NUMBER
   3792	016204	005046 				CLR	-(SP)			;0 FOR BYTE MOVE
   3793	016206	110016 				MOVB	R0,(SP)			;THE ILLEGAL LINE NUMBER
   3794	016210	010346 				MOV	R3,-(SP)			;LINE UNDER TEST
   3795	016212					CK11SC	<CKEGB!CKEPC!CKEDID>,<Ill Line Num>,<ILLEGAL LINE NUMBER>
	016212	104516 				TRAP	CKEGB!CKEPC!CKEDID!CKEMSG		;ILLEGAL LINE NUMBER
   3796	016214	   111 	   154 	   154 		.ASCIZ	\Ill Line Num\
	016217	   040 	   114 	   151
	016222	   156 	   145 	   040
	016225	   116 	   165 	   155
	016230	   000
   3797						.EVEN
   3798	016232	000425 				BR	CKDH1D			;DON'T TEST ANY MORE
   3799	016234	000300 			13$:	SWAB	R0			;FOR CHECKING THE DATA
   3800	016236	120037 	016354'			CMPB	R0,DHDATA		;SEE IF CORRECT DATA
   3801	016242	001414 				BEQ	14$			;BRANCH IF DATA OK
   3802	016244	013746 	016354'			MOV	DHDATA,-(SP)		;GOOD DATA
   3803	016250	005046 				CLR	-(SP)			;FOR BYTE MOVE
   3804	016252	110016 				MOVB	R0,(SP)			;THE BAD DATA
   3805	016254	010346 				MOV	R3,-(SP)			;THE LINE #
   3806	016256					CK11SC	<CKEGB!CKEPC!CKEDID>,<Data Err>,<DATA ERROR>
	016256	104516 				TRAP	CKEGB!CKEPC!CKEDID!CKEMSG		;DATA ERROR
   3807	016260	   104 	   141 	   164 		.ASCIZ	\Data Err\
	016263	   141 	   040 	   105
	016266	   162 	   162 	   000
   3808						.EVEN
   3809	016272	000405 				BR	CKDH1D			;DON'T TEST ANY MORE
   3810	016274	105237 	016354'		14$:	INCB	DHDATA			;NEW PATTERN EXPECTED
   3811	016300	001402 				BEQ	15$			;BRANCH IF LINE DONE
   3812	016302	000137 	015602'			JMP	CKDH1E			;
   3813
   3814	016306				15$:
   3815	016306	005203 			CKDH1D:	INC	R3			;NEW LINE NUMBER
   3816	016310	006302 				ASL	R2			;NEW BIT FOR NEXT LINE
   3817	016312	001414 				BEQ	CKDH1F			;BRANCH IF TEST ALL DONE
   3818	016314	000137 	015532'			JMP	CKDH1B			;
   3819
   3820	016320				CKDHPL:	CK11SC	0,<		Line #>
	016320	104404 				TRAP	0!CKEMSG		;
   3821	016322	   011 	   011 	   114 		.ASCIZ	\		Line #\
	016325	   151 	   156 	   145
	016330	   040 	   043 	   000
   3822						.EVEN
   3823	016334	010300 				MOV	R3,R0			;LINE NUMBER TO R0 FOR CALL
   3824	016336	004737 	020616'			JSR	PC,CKTOCT		;PRINT LINE NUMBER
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 81-4
CHECK DH11 HDW

   3825	016342	000207 				RTS	PC			;RETURN
   3826
   3827	016344	052714 	004000 		CKDH1F:	BIS	#DH..MC,(R4)		;MASTER CLEAR
   3828	016350	012603 				MOV	(SP)+,R3	;GET R3 BACK
   3829	016352	000207 				RTS	PC			;DH CHARACTER TEST DONE
   3830	016354	000000 			DHDATA:	0
   3831	016356	000000 			DHXMII:	0
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 82
CHECK DL11-E HDW

   3833					.SBTTL		CHECK DL11-E HDW
   3834
   3835					;CALL	MOV	#<VECTOR ADR>,R3
   3836					;	MOV	#<HDW ADR>,R4
   3837					;	MOV	#<HDW ADR>,R1
   3838					;	JSR	PC,CKDL11
   3839					;
   3840	016360				CKRD11:
   3841	016360	010346 			CKDL11:	MOV	R3,-(SP)
   3842	016362	004537 	014052'			JSR	R5,CHKBIT		;CHECK READ/WRITE BITS
   3843	016366	000156 				000156
   3844	016370	005721 				TST	(R1)+			;ADVANCE TO RECEIVE DATA REGISTER
   3845	016372	005721 				TST	(R1)+			;ADVANCE TO TRANSMIT STATUS REGISTER
   3846	016374	004537 	014052'			JSR	R5,CHKBIT
   3847	016400	000105 				000105
   3848	016402	012711 	000100 			MOV	#CO.INE,(R1)		;CAUSE AN INTERRUPT
   3849	016406	004537 	014330'			JSR	R5,CHKINL		;CHECK THE PI LEVEL
   3850	016412	177777 				.WORD	-1
   3851	016414	042711 	000100 			BIC	#CO.INE,(R1)		;CLEAR THE INTERRUPT
   3852	016420	012603 				MOV	(SP)+,R3
   3853	016422	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 83
CHECK DL11-E HDW

   3855
   3856					.SBTTL		CHECK DL11-A HDW
   3857
   3858					;CALL	MOV	#<VECTOR ADR>,R3
   3859					;	MOV	#<HDW ADR>,R4
   3860					;	MOV	#<HDW ADR>,R1
   3861					;	JSR	PC,CKKL11
   3862					;
   3863	016424	010346 			CKKL11:	MOV	R3,-(SP)
   3864	016426	004537 	014052'			JSR	R5,CHKBIT		;CHECK READ/WRITE BITS
   3865	016432	000100 				.WORD	000100
   3866	016434	005721 				TST	(R1)+			;ADVANCE TO RECEIVE DATA REGISTER
   3867	016436	005721 				TST	(R1)+			;ADVANCE TO TRANSMIT STATUS REGISTER
   3868	016440	004537 	014052'			JSR	R5,CHKBIT
   3869	016444	000104 				.WORD	000104
   3870	016446	012764 	000100 	000004 		MOV	#CO.INE,4(R4)	;ENABLE PENDING OUTPUT INTERRUPT
   3871	016454	004537 	014330'			JSR	R5,CHKINL	;TEST INTERURPTS
   3872	016460	177777 				.WORD	-1		;TIMEOUT COUNTER
   3873	016462	042764 	000100 	000004 		BIC	#CO.INE,4(R4)	;DISABLE THAT INTERRUPT
   3874	016470	012603 				MOV	(SP)+,R3
   3875	016472	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 84
CHECK DL11-A HDW

   3877
   3878					.SBTTL		CHECK DM11-BB HDW
   3879
   3880					;CALL	MOV	#<VECTOR ADR>,R3
   3881					;	MOV	#<HDW ADR>,R4
   3882					;	MOV	#<HDW ADR>,R1
   3883					;	JSR	PC,CKDM11
   3884	016474	004537 	014052'		CKDM11:	JSR	R5,CHKBIT		;CHECK FOLLOWING BITS
   3885	016500	001357 				DM.ALI!DM.DNE!DM..MM!DM.ENB!DM.IEN
   3886	016502					$CKINT	,R4,<DM.IEN>,<DM.DNE>
	016502	010402 			.IIF	NB,R4,	MOV	R4,R2			;LOAD INTERRUPT ADR
	016504	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	016510	000100 				.WORD	DM.IEN			;ENABLE BITS -  DM.IEN
	016512	000200 				.WORD	DM.DNE			;INTERRUPT BITS -  DM.DNE
	016514	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	016516	000000 			.IIF	B,,	.WORD	0			;NO INTERRUPT SUB,ROUTINE NEEDED
   3887	016520	004737 	016570'			JSR	PC,CKDMCS		;CLEAR SCAN AND CHECK IT CLEARED
   3888	016524	052714 	000040 			BIS	#DM.ENB,(R4)		;ENABLE SCAN
   3889	016530	032714 	000020 			BIT	#DM.BSY,(R4)		;SEE IF BSY SET
   3890	016534	001012 				BNE	11$			;BRANCH IF IT DID
   3891	016536					CK11SC	<CKEPC!CKEDID>,<Busy did not Set>,<BUSY DID NOT SET>
	016536	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;BUSY DID NOT SET
   3892	016540	   102 	   165 	   163 		.ASCIZ	\Busy did not Set\
	016543	   171 	   040 	   144
	016546	   151 	   144 	   040
	016551	   156 	   157 	   164
	016554	   040 	   123 	   145
	016557	   164 	   000
   3893						.EVEN
   3894	016562	004737 	016570'		11$:	JSR	PC,CKDMCS		;CLEAR SCAN AND CHECKED IT CLEARED
   3895	016566	000207 				RTS	PC
   3896
   3897	016570	012702 	001357 		CKDMCS:	MOV	#DM.DNE!DM..MM!DM.IEN!DM.ENB!DM.ALI,R2	;BITS WHICH SHOULD GET CLEARED
   3898	016574	012700 	000100 			MOV	#100,R0			;TIME OUT FOR BUSY
   3899	016600	052714 	004000 			BIS	#DM.SCN,(R4)		;CLEAR SCAN
   3900	016604	032714 	000020 		11$:	BIT	#DM.BSY,(R4)		;SEE IF BUSY CLEAR YET
   3901	016610	001414 				BEQ	12$			;BRANCH IF IT IS
   3902	016612	077004 				SOB	R0,11$			;TIME OUT WAITING FOR BSY TO CLEAR
   3903	016614					CK11SC	<CKEPC!CKEDID>,<Busy did not Clear>,<CLEARING SCAN FAILED TO CLEAR BUSY>
	016614	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;CLEARING SCAN FAILED TO CLEAR BUSY
   3904	016616	   102 	   165 	   163 		.ASCIZ	\Busy did not Clear\
	016621	   171 	   040 	   144
	016624	   151 	   144 	   040
	016627	   156 	   157 	   164
	016632	   040 	   103 	   154
	016635	   145 	   141 	   162
	016640	   000
   3905						.EVEN
   3906	016642	030114 			12$:	BIT	R1,(R4)			;SEE IF THEY ARE ALL CLEAR
   3907	016644	001420 				BEQ	14$			;BRANCH IF THEY ARE ALL CLEAR
   3908	016646	011400 				MOV	(R4),R0			;GET DM11 STATUS
   3909	016650	005102 				COM	R2			;MASK OUT NON INTERESTING BITS
   3910	016652	040200 				BIC	R2,R0			;
   3911	016654	005046 				CLR	-(SP)			;GOOD
   3912	016656	010046 				MOV	R0,-(SP)			;BAD
   3913	016660	010446 				MOV	R4,-(SP)			;ADR
   3914	016662					CK11SC	<CKEGB!CKEPC!CKEDID>,<Clear Scan Error>,<CLR SCAN FAILED TO CLEAR A BIT>
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 84-1
CHECK DM11-BB HDW

	016662	104516 				TRAP	CKEGB!CKEPC!CKEDID!CKEMSG		;CLR SCAN FAILED TO CLEAR A BIT
   3915	016664	   103 	   154 	   145 		.ASCIZ	\Clear Scan Error\
	016667	   141 	   162 	   040
	016672	   123 	   143 	   141
	016675	   156 	   040 	   105
	016700	   162 	   162 	   157
	016703	   162 	   000
   3916						.EVEN
   3917	016706	000207 			14$:	RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 85
CHECK DTE20 HARDWARE

   3919					.SBTTL		CHECK DTE20 HARDWARE
   3920					;
   3921					;	JSR	PC,CKTE11
   3922	016710				CKTE11:
   3923									; [1(17)]
   3924					.IIF DF,DTEBAD,MOV R1,DTEBAD	;SAVE DTE20 BASE ADR [1(26)]
   3925	016710	004537 	014052'			JSR	R5,CHKBIT	;CHECK DLYCNT IN DTE'S RAM
   3926	016714	177777 				177777			; SINCE WE CAN ACCESS ALL THE BITS
   3927	016716	062701 	000034 			ADD	#TE.STW-TE.DYC,R1 ;POINT TO STATUS REGISTER
   3928					.IIF DF,DTPSTA,MOV R1,DTPSTA	;SAVE THE POINTER TO STAT REG [1(26)]
   3929	016722	012711 	000040 			MOV	#TS.EEE,@R1	;ENABLE INTERRUPTS
   3930	016726	032711 	000001 			BIT	#TS.IEN,@R1	;DOES DTE AGREE?
   3931	016732	001022 				BNE	11$		;YEP
   3932	016734					CK11SC	<CKEPC!CKEDID>,<Setting TS.EEE didn't set TS.IEN>
	016734	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;
   3933	016736	   123 	   145 	   164 		.ASCIZ	\Setting TS.EEE didn't set TS.IEN\
	016741	   164 	   151 	   156
	016744	   147 	   040 	   124
	016747	   123 	   056 	   105
	016752	   105 	   105 	   040
	016755	   144 	   151 	   144
	016760	   156 	   047 	   164
	016763	   040 	   163 	   145
	016766	   164 	   040 	   124
	016771	   123 	   056 	   111
	016774	   105 	   116 	   000
   3934						.EVEN
   3935	017000				11$:	$CKINT	,R1,<TS.EEE>,<TS.RES>,<TS.DEI>
	017000	010102 			.IIF	NB,R1,	MOV	R1,R2			;LOAD INTERRUPT ADR
	017002	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	017006	000040 				.WORD	TS.EEE			;ENABLE BITS -  TS.EEE
	017010	004000 				.WORD	TS.RES			;INTERRUPT BITS -  TS.RES
	017012	000010 			.IIF	NB,TS.DEI,	.WORD	TS.DEI			;BITS TO CLEAR DEVICE - TS.DEI
	017014	000000 			.IIF	B,,	.WORD	0			;NO INTERRUPT SUB,ROUTINE NEEDED
   3936	017016	032711 	000001 			BIT	#TS.IEN,@R1	;WHICH SHOULD TURN THIS OFF
   3937	017022	001423 				BEQ	12$		;OKAY
   3938	017024					CK11SC	<CKEPC!CKEDID>,<Setting TS.DEI didn't clear TS.IEN>
	017024	104416 				TRAP	CKEPC!CKEDID!CKEMSG		;
   3939	017026	   123 	   145 	   164 		.ASCIZ	\Setting TS.DEI didn't clear TS.IEN\
	017031	   164 	   151 	   156
	017034	   147 	   040 	   124
	017037	   123 	   056 	   104
	017042	   105 	   111 	   040
	017045	   144 	   151 	   144
	017050	   156 	   047 	   164
	017053	   040 	   143 	   154
	017056	   145 	   141 	   162
	017061	   040 	   124 	   123
	017064	   056 	   111 	   105
	017067	   116 	   000
   3940						.EVEN
   3941	017072	032711 	000010 		12$:	BIT	#TS.RM,@R1	;WE SHOULD BE RESTRICTED
   3942	017076	001015 				BNE	13$		;WE ARE, FINE
   3943	017100					CK11SC	<CKEDID!CKEWRN>,<DTE20 is not restricted>
	017100	104614 				TRAP	CKEDID!CKEWRN!CKEMSG		;
   3944	017102	   104 	   124 	   105 		.ASCIZ	\DTE20 is not restricted\
	017105	   062 	   060 	   040
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 85-1
CHECK DTE20 HARDWARE

	017110	   151 	   163 	   040
	017113	   156 	   157 	   164
	017116	   040 	   162 	   145
	017121	   163 	   164 	   162
	017124	   151 	   143 	   164
	017127	   145 	   144 	   000
   3945	017132	012741 	000100 		13$:	MOV	#TS.RST,-(R1)	;REALLY INITIALIZE DTE20
   3946					.IIF DF,DTEDTO,MOV R3,DTEDTO	;SAVE PTR TO INTP VECTOR ADR [1(26)]
   3947									;DTEDTO GLOBAL CELL IS
   3948									; ALSO USED TO HOLD
   3949									; DEPOSIT/EXAMINE TIMEOUTS
   3950	017136	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 86
CHECK DTE20 HARDWARE

   3952
   3953					.SBTTL		CHECK CD11 HARDWARE
   3954					;
   3955					;	JSR	PC,CKCD11
   3956					;
   3957	017140				CKCD11:
   3958	017140	032711 	010000 			BIT	#CD.OFL,(R1)		;OFF LINE ?
   3959	017144	001012 				BNE	10$			;BRANCH IF NOT
   3960	017146					CK11SC	0,<NOT READY>
	017146	104404 				TRAP	0!CKEMSG		;
   3961	017150	   011 	   103 	   104 		.ASCIZ	\	CD20 off line\
	017153	   062 	   060 	   040
	017156	   157 	   146 	   146
	017161	   040 	   154 	   151
	017164	   156 	   145 	   000
   3962						.EVEN
   3963	017170	000207 				RTS	PC
   3964	017172				10$:
   3965	017172	004537 	014052'			JSR	R5,CHKBIT		;CHECK HARDWARE BITS
   3966	017176	000102 				CD.PAK!CD.INE
   3967	017200					$CKINT	R4,R4,<CD.INE>,,,<CKCD20>
	017200	010401 			.IIF	NB,R4,	MOV	R4,R1			;LOAD ENABLE ADR
	017202	010402 			.IIF	NB,R4,	MOV	R4,R2			;LOAD INTERRUPT ADR
	017204	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	017210	000100 				.WORD	CD.INE			;ENABLE BITS -  CD.INE
	017212	000000 				.WORD				;INTERRUPT BITS -
	017214	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	017216	017222'			.IIF	NB,CKCD20,	.WORD	CKCD20			;SUBROUTINE TO GENERATE INTERRUPT
   3968	017220	000207 				RTS	PC
   3969	017222				CKCD20:
   3970	017222	012711 	000400 			MOV	#CD.PWR,(R1)		;CLEAR THE CD
   3971	017226	012761 	177777 	000002 		MOV	#-1,2(R1)		;READ ONE COLUMN
   3972	017234	012761 	160000 	000004 		MOV	#160000,4(R1)		;INTO NON-EXISTENT MEM
   3973	017242	012714 	000061 			MOV	#CD.XAD!CD.GO,(R4)	;START IT GOING
   3974	017246	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 87
CHECK CD11 HARDWARE

   3976
   3977					.SBTTL		CHECK LP11 HARDWARE
   3978					;
   3979					;	JSR	PC,CKLP11
   3980					;
   3981	017250				CKLP11:
   3982	017250	032714 	100000 			BIT	#LP.ERR,(R4)		;SEE IF DEV READY
   3983	017254	001420 				BEQ	11$				;BRANCH IF RDY
   3984	017256					CK11SC	<CKEMSG>,< LP11 #>
	017256	104404 				TRAP	CKEMSG!CKEMSG		;
   3985	017260	   040 	   114 	   120 		.ASCIZ	\ LP11 #\
	017263	   061 	   061 	   040
	017266	   043 	   000
   3986						.EVEN
   3987	017270	013700 	011330'			MOV	CKDEVN,R0			;DEV NUMBER
   3988	017274	004737 	020616'			JSR	PC,CKTOCT			;PRINT DEV NUM
   3989	017300					CK11SC	CKENCL,< Not ready.>
	017300	104444 				TRAP	CKENCL!CKEMSG		;
   3990	017302	   040 	   116 	   157 		.ASCIZ	\ Not ready.\
	017305	   164 	   040 	   162
	017310	   145 	   141 	   144
	017313	   171 	   056 	   000
   3991						.EVEN
   3992	017316	004537 	014052'		11$:	JSR	R5,CHKBIT			;CHECK HDW BITS
   3993	017322	000100 				LP.INE
   3994	017324					$CKINT	,R4,<LP.INE>,<LP.DNE>
	017324	010402 			.IIF	NB,R4,	MOV	R4,R2			;LOAD INTERRUPT ADR
	017326	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	017332	000100 				.WORD	LP.INE			;ENABLE BITS -  LP.INE
	017334	000200 				.WORD	LP.DNE			;INTERRUPT BITS -  LP.DNE
	017336	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	017340	000000 			.IIF	B,,	.WORD	0			;NO INTERRUPT SUB,ROUTINE NEEDED
   3995	017342	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 88
CHECK LP11 HARDWARE

   3997
   3998					.SBTTL		CHECK THE LP20 HARDWARE
   3999
   4000
   4001	017344	032714 	100000 		CKL211:	BIT	#L2.ERR,(R4)		; IS THE DEVICE OK ?
   4002	017350	001420 				BEQ	11$			;  YES
   4003	017352					CK11SC	CKEMSG,< LP20 # >
	017352	104404 				TRAP	CKEMSG!CKEMSG		;
   4004	017354	   040 	   114 	   120 		.ASCIZ	\ LP20 #\
	017357	   062 	   060 	   040
	017362	   043 	   000
   4005						.EVEN
   4006	017364	013700 	011330'			MOV	CKDEVN,R0		; GET DEVICE NUMBER
   4007	017370	004737 	020616'			JSR	PC,CKTOCT		; OUTPUT IT
   4008	017374					CK11SC	CKENCL,< Not ready.>
	017374	104444 				TRAP	CKENCL!CKEMSG		;
   4009	017376	   040 	   116 	   157 		.ASCIZ	\ Not ready.\
	017401	   164 	   040 	   162
	017404	   145 	   141 	   144
	017407	   171 	   056 	   000
   4010						.EVEN
   4011	017412	004537 	014052'		11$:	JSR	R5,CHKBIT		;CHECK SOME BITS
   4012	017416	000100 				LP.INE
   4013	017420					$CKINT	R4,R4,<L2.ENB>,,,<CKL220>
	017420	010401 			.IIF	NB,R4,	MOV	R4,R1			;LOAD ENABLE ADR
	017422	010402 			.IIF	NB,R4,	MOV	R4,R2			;LOAD INTERRUPT ADR
	017424	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	017430	000100 				.WORD	L2.ENB			;ENABLE BITS -  L2.ENB
	017432	000000 				.WORD				;INTERRUPT BITS -
	017434	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	017436	017442'			.IIF	NB,CKL220,	.WORD	CKL220			;SUBROUTINE TO GENERATE INTERRUPT
   4014	017440	000207 				RTS	PC
   4015
   4016	017442				CKL220:
   4017	017442	052714 	000004 			BIS	#L2.TM,(R4)
   4018	017446	012764 	017470'	000004 		MOV	#TSTCHR,4(R4)		;ADDRESS OF TEST DATA
   4019	017454	012764 	177774 	000006 		MOV	#-4,6(R4)		;BYTE COUNT
   4020	017462	052714 	000001 			BIS	#1,(R4)			;SET GO
   4021	017466	000207 				RTS	PC			;SHOULD INTERRUPT
   4022
   4023	017470	   011 	   011 	   011 	TSTCHR:	.BYTE	11,11,11,11
	017473	   011
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 89
CHECK THE LP20 HARDWARE

   4025
   4026					.SBTTL		CHECK RH11 HARDWARE
   4027
   4028					;CALL	MOV	#<VECTOR ADR>,R3
   4029					;	MOV	#<HDW ADR>,R4
   4030					;	MOV	#<HDW ADR>,R1
   4031					;	JSR	PC,CKRH11
   4032					;
   4033	017474				CKRH11:;BIS	#1,CHKRP+4+0	;GROSS KLUDGE TO PREVENT CHKDEV FROM
   4034	017474	000207 				RTS	PC		; FINDING WHAT LOOKS LIKE AN RP.
   4035									; (THE DEVICE REGISTERS OVERLAP)
   4036
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 90
CHECK RH11 HARDWARE

   4038
   4039					.SBTTL		CHECK TC11 HARDWARE
   4040
   4041					;CALL	MOV	#<VECTOR ADR>,R3
   4042					;	MOV	#<HDW ADR>,R4
   4043					;	MOV	#<HDW ADR>,R1
   4044					;	JSR	PC,CKTC11
   4045					;
   4046	017476				CKTC11:
   4047	017476	004537 	014052'			JSR	R5,CHKBIT	;TEST FOLLOWING BITS
   4048	017502	000003 				TC.D17!TC.D16
   4049	017504	005721 				TST	(R1)+		;ADVANCE TO COMMAND REGISTER
   4050	017506	004537 	014052'			JSR	R5,CHKBIT		;TEST FOLLOWING BITS
   4051	017512	037560 				TC..MM!TC..DI!TC.REV!TC.US7!TC.INE!TC.A17!TC.A16
   4052	017514	005721 				TST	(R1)+		;ADVANCE TO WORD COUNT REG
   4053	017516	004537 	014052'			JSR	R5,CHKBIT	;TEST FOLLOWING BITS
   4054	017522	177777 				-1
   4055	017524	005721 				TST	(R1)+		;ADVANCE TO BUS ADDR REG
   4056	017526	004537 	014052'			JSR	R5,CHKBIT		;TEST THE FOLLOWING BITS
   4057	017532	177777 				-1
   4058	017534	005721 				TST	(R1)+		;ADVANCE TO DATA REGISTER
   4059	017536	004537 	014052'			JSR	R5,CHKBIT	;CHECK FOLLOWING BITS
   4060	017542	177777 				-1
   4061	017544	010401 				MOV	R4,R1		;SET UP ADR FOR INT CHK
   4062	017546	005721 				TST	(R1)+		;ADVANCE TO COMMAND REG
   4063	017550	010102 				MOV	R1,R2		;SET UP FOR INT CHK
   4064	017552					$CKINT	,,<TC.INE>,<TC.RDY>
	017552	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	017556	000100 				.WORD	TC.INE			;ENABLE BITS -  TC.INE
	017560	000200 				.WORD	TC.RDY			;INTERRUPT BITS -  TC.RDY
	017562	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	017564	000000 			.IIF	B,,	.WORD	0			;NO INTERRUPT SUB,ROUTINE NEEDED
   4065	017566	000207 				RTS	PC
   4066
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 91
RX11 CHECKING

   4068						.SBTTL	RX11 CHECKING
   4069
   4070	017570				CKRX11:
   4071	017570	010346 				MOV	R3,-(SP)	;SAVE REGISTER
   4072	017572	004537 	014052'			JSR	R5,CHKBIT	;CHECK THE FOLLOWING BITS
   4073	017576	000100 				.WORD	100
   4074	017600					$CKINT	R4,R4,<100>,,,<CKRX20>
	017600	010401 			.IIF	NB,R4,	MOV	R4,R1			;LOAD ENABLE ADR
	017602	010402 			.IIF	NB,R4,	MOV	R4,R2			;LOAD INTERRUPT ADR
	017604	004537 	014446'			JSR	R5,CKINT		;GO CHECK INTERRUPTS
	017610	000100 				.WORD	100			;ENABLE BITS -  100
	017612	000000 				.WORD				;INTERRUPT BITS -
	017614	000000 			.IIF	B,,	.WORD	0			;NO SPECIAL CLEAR BITS
	017616	017624'			.IIF	NB,CKRX20,	.WORD	CKRX20			;SUBROUTINE TO GENERATE INTERRUPT
   4075	017620	012603 				MOV	(SP)+,R3
   4076	017622	000207 				RTS	PC
   4077
   4078	017624				CKRX20:
   4079	017624	012714 	000016 			MOV	#RXRERR,(R4)
   4080	017630	052714 	000001 			BIS	#RXGO,(R4)
   4081	017634	000207 				RTS	PC
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 92
RX11 CHECKING

   4083
   4084					;HERE ON A UNEXPECTED BUS TRAP
   4085					;
   4086	017636				CKBUST:	CK11SC	<CKEDID!CKEPC>,<Trap from>
	017636	104416 				TRAP	CKEDID!CKEPC!CKEMSG		;
   4087	017640	   124 	   162 	   141 		.ASCIZ	\Trap from\
	017643	   160 	   040 	   146
	017646	   162 	   157 	   155
	017651	   000
   4088						.EVEN
   4089	017652	011600 				MOV	(SP),R0			;GET PC OF NEXT INST
   4090	017654	162700 	000002 			SUB	#2,R0			;MAKE PC WITHIN BAD INST
   4091	017660	004737 	020602'			JSR	PC,CKTBOC		;PRINT THE PC WHERE WE WERE DID IN
   4092	017664					CK11SC	<CKENCL!CKEFAT>,< to Adr 4>,<ILLEGAL BUS TRAP>,<S..NXM>
	017664	012737 	000001 	020506'	.IIF NB,S..NXM,	MOV	#S..NXM,CKSPCD	;VALUE TO DISPLAY IN R0,
	017672	104445 				TRAP	CKENCL!CKEFAT!CKEMSG		;ILLEGAL BUS TRAP
   4093	017674	   040 	   164 	   157 		.ASCIZ	\ to Adr 4\
	017677	   040 	   101 	   144
	017702	   162 	   040 	   064
	017705	   000
   4094						.EVEN
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 93
CK11SC ROUTINE

   4096					.SBTTL		CK11SC ROUTINE
   4097
   4098					;HERE ON ERROR IN CHK11
   4099					;
   4100					;AT HALT TIME R0 CONTAINS ADDRESS OF TRAP
   4101					;
   4102	017706				CHKERR:					;here on error trap
   4103	017706	013746 	000004 			MOV	NXMVEC,-(SP)		;save NXM vector [3(47)]
   4104	017712	012737 	017752'	000004 		MOV	#2$,NXMVEC		;where to go if MM doesn't exist [3(47)]
   4105	017720	042737 	000002 	011326'		BIC	#CHKMMO,CHKFLG		;clear indicator [3(47)]
   4106	017726	032737 	000001 	177572 		BIT	#1,MM.SR0		;see if memory management on [3(47)]
   4107	017734	001403 				BEQ	3$			;skip if not [3(47)]
   4108	017736	052737 	000002 	011326'		BIS	#CHKMMO,CHKFLG		;remember it [3(47)]
   4109	017744	005037 	177572 		3$:	CLR	MM.SR0			;turn it off [3(47)]
   4110	017750	000402 				BR	4$			;continue [3(47)]
   4111	017752	062706 	000004 		2$:	ADD	#4,SP			;adjust stack [3(47)]
   4112	017756	012637 	000004 		4$:	MOV	(SP)+,NXMVEC		;restore previous state [3(47)]
   4113	017762	010046 				MOV	R0,-(SP)
   4114	017764	016646 	000002 			MOV	2(SP),-(SP)		;GET ADDRESS OF
   4115	017770	162716 	000002 			SUB	#2,(SP)			; THE TRAP INSTRUCTION.
   4116	017774	032776 	000010 	000000 		BIT	#CKEDID,@(SP)		;PRINT DEVICE ID+REG MSG
   4117	020002	001405 				BEQ	11$			;BRANCH IF NOT
   4118	020004	052737 	000001 	011326'		BIS	#CKFERR,CHKFLG		;REMEMBER WE HAD AN ERROR
   4119	020012	004737 	014174'			JSR	PC,CKDIDT		;
   4120	020016	032776 	000002 	000000 	11$:	BIT	#CKEPC,@(SP)		;TYPE PC MESSAGE?
   4121	020024	001423 				BEQ	12$			;NO, SEE IF SOMETHING ELSE
   4122	020026					CK11SC	0,<	 Error detected at PC>	;
	020026	104404 				TRAP	0!CKEMSG		;
   4123	020030	   011 	   040 	   105 		.ASCIZ	\	 Error detected at PC\
	020033	   162 	   162 	   157
	020036	   162 	   040 	   144
	020041	   145 	   164 	   145
	020044	   143 	   164 	   145
	020047	   144 	   040 	   141
	020052	   164 	   040 	   120
	020055	   103 	   000
   4124						.EVEN
   4125	020060	052737 	000001 	011326'		BIS	#CKFERR,CHKFLG		;REMEMBER WE HAD AN ERROR
   4126	020066	011600 				MOV	(SP),R0			;GET ADDRESS
   4127	020070	004737 	020602'			JSR	PC,CKTBOC		;PRINT SPACE AND ADDRESS
   4128	020074	032776 	000004 	000000 	12$:	BIT	#CKEMSG,@(SP)		;PRINT INLINE ERROR MESSAGE
   4129	020102	001423 				BEQ	15$			;BRANCH IF NO
   4130	020104	032776 	000040 	000000 		BIT	#CKENCL,@(SP)		;SEE IF NO CRLF
   4131	020112	001002 				BNE	13$			;BRANCH IF NO CRLF
   4132	020114	004737 	020556'			JSR	PC,CKCRLF		;CR+LF
   4133	020120	032776 	000110 	000000 	13$:	BIT	#CKEDID!CKEGB,@(SP)	;IF DEV ID OR GD BD GIVE SPACES FOR FORMAT
   4134	020126	001403 				BEQ	14$			;
   4135	020130					CK11SC	CKENCL,<		>
	020130	104444 				TRAP	CKENCL!CKEMSG		;
   4136	020132	   011 	   011 	   000 		.ASCIZ	\		\
   4137						.EVEN
   4138	020136	016600 	000004 		14$:	MOV	4(SP),R0			;GET ADDRESS OF MESSAGE
   4139	020142	004737 	020530'			JSR	PC,CKTTXT		;RETURN R0 POINTS TO LOC
   4140										; FOLLOWING MESSAGE
   4141	020146	010066 	000004 			MOV	R0,4(SP)			;PUT RETURN PC ON STACK
   4142	020152	032776 	000020 	000000 	15$:	BIT	#CKEMSE,@(SP)		;PRINT MSG AT END
   4143	020160	001424 				BEQ	18$			;BRANCH IF NOT
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 93-1
CK11SC ROUTINE

   4144	020162	032776 	000040 	000000 		BIT	#CKENCL,@(SP)		;SEE IF NO CRLF
   4145	020170	001002 				BNE	16$			;BRANCH IF NO CRLF
   4146	020172	004737 	020556'			JSR	PC,CKCRLF		;CR+LF
   4147	020176	032776 	000110 	000000 	16$:	BIT	#CKEDID!CKEGB,@(SP)	;SEE IF CKEDID OR CKEGB SET, IF SO GIVE SPACES FOR FORMAT
   4148	020204	001403 				BEQ	17$			;BRANCH IF JUST TEXT
   4149	020206					CK11SC	CKENCL,<		>	;2 TAB
	020206	104444 				TRAP	CKENCL!CKEMSG		;
   4150	020210	   011 	   011 	   000 		.ASCIZ	\		\
   4151						.EVEN
   4152	020214	017600 	000004 		17$:	MOV	@4(SP),R0		;GET ADDRESS OF THE MESSAGE
   4153	020220	004737 	020530'			JSR	PC,CKTTXT		;PRINT THE MESSAGE
   4154	020224	062766 	000002 	000004 		ADD	#2,4(SP)			;MAKE RETURN PC
   4155	020232	032776 	000100 	000000 	18$:	BIT	#CKEGB,@(SP)		;SEE IF GOOD BAD PRINT OUT
   4156	020240	001450 				BEQ	CHKER0			;BRANCH IF NOT THIS
   4157	020242					CK11SC	0,<		Adr/Reg =>
	020242	104404 				TRAP	0!CKEMSG		;
   4158	020244	   011 	   011 	   101 		.ASCIZ	\		Adr/Reg =\
	020247	   144 	   162 	   057
	020252	   122 	   145 	   147
	020255	   040 	   075 	   000
   4159						.EVEN
   4160	020260	016600 	000010 			MOV	10(SP),R0		;GET ADR OFF THE STACK
   4161	020264				20$:					; [3(47)]
   4162	020264	004737 	020602'			JSR	PC,CKTBOC		;PRINT ADR
   4163	020270				25$:					;%
   4164	020270					CK11SC	<CKENCL>,<  GD =>
	020270	104444 				TRAP	CKENCL!CKEMSG		;
   4165	020272	   040 	   040 	   107 		.ASCIZ	\  GD =\
	020275	   104 	   040 	   075
	020300	   000
   4166						.EVEN
   4167	020302	016600 	000014 			MOV	14(SP),R0		;GET "GOOD"
   4168	020306	004737 	020602'			JSR	PC,CKTBOC		;PRINT IT
   4169	020312					CK11SC	<CKENCL>,<  BD =>
	020312	104444 				TRAP	CKENCL!CKEMSG		;
   4170	020314	   040 	   040 	   102 		.ASCIZ	\  BD =\
	020317	   104 	   040 	   075
	020322	   000
   4171						.EVEN
   4172	020324	016600 	000012 			MOV	12(SP),R0		;PRINT BAD STUFF
   4173	020330	004737 	020602'			JSR	PC,CKTBOC		;PRINT BAD
   4174	020334					CK11SC	CKENCL,<  XOR =>
	020334	104444 				TRAP	CKENCL!CKEMSG		;
   4175	020336	   040 	   040 	   130 		.ASCIZ	\  XOR =\
	020341	   117 	   122 	   040
	020344	   075 	   000
   4176						.EVEN
   4177	020346	016646 	000014 			MOV	14(SP),-(SP)		;GET GOOD
   4178	020352	074016 				XOR	R0,(SP)			;LEAVE ONLY QUESTIONABLE BITS
   4179	020354	012600 				MOV	(SP)+,R0			;PRINT THEM
   4180	020356	004737 	020602'			JSR	PC,CKTBOC		;
   4181	020362	032776 	000001 	000000 	CHKER0:	BIT	#CKEFAT,@(SP)		;FATAL ERROR - HALT REQUIRED?
   4182	020370	001423 				BEQ	CHKER2			;BRANCH IN NOT FATAL
   4183	020372	052737 	000001 	011326'		BIS	#CKFERR,CHKFLG		;REMEMBER WE HAD AN ERROR
   4184	020400					CK11SC	0,<		Fatal Error>
	020400	104404 				TRAP	0!CKEMSG		;
   4185	020402	   011 	   011 	   106 		.ASCIZ	\		Fatal Error\
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 93-2
CK11SC ROUTINE

	020405	   141 	   164 	   141
	020410	   154 	   040 	   105
	020413	   162 	   162 	   157
	020416	   162 	   000
   4186						.EVEN
   4187	020420	013700 	020506'			MOV	CKSPCD,R0		;PUT STOPCODE IN R0, IF 0 ITS NOT A STOPCODE TO BE DISPLAYED
   4188	020424	001401 				BEQ	CHKER3			;IF 0
   4189	020426	000000 				HALT				;STOP CODE IN R0, PRESS CONTINUE
   4190										; GIVES ADR WE CAME FROM
   4191	020430	012600 			CHKER3:	MOV	(SP)+,R0			;ADDRESS OF TRAP IN R0
   4192	020432	000000 				HALT				;FATAL ERROR - R0 CONTAINS ERROR ADDRESS
   4193	020434	000137 	003000'			JMP	BEGIN			;IF CONTINUE DO PROGRAM AGAIN.
   4194	020440	032736 	000100 		CHKER2:	BIT	#CKEGB,@(SP)+		;SEE IF THERE WAS A GD-BD PRINT
   4195	020444	001002 				BNE	CHKER1			;IF YES, CLEAR STACK
   4196	020446	012600 				MOV	(SP)+,R0
   4197	020450	000406 				BR	CHKER9			;go exit [3(47)]
   4198	020452	012600 			CHKER1:	MOV	(SP)+,R0
   4199	020454	012666 	000004 			MOV	(SP)+,4(SP)		;PC
   4200	020460	012666 	000004 			MOV	(SP)+,4(SP)		;PS
   4201	020464	005726 				TST	(SP)+			;CLEAN THE STACK
   4202	020466				CHKER9:					;here to exit CHKERR [3(47)]
   4203	020466	032737 	000002 	011326'		BIT	#CHKMMO,CHKFLG		;was memory management on? [3(47)]
   4204	020474	001402 				BEQ	10$			;no, skip [3(47)]
   4205	020476	005237 	177572 			INC	MM.SR0			;yes, turn it back on [3(47)]
   4206	020502				10$:					;dismiss trap [3(47)]
   4207	020502	000002 				RTI				;return
   4208
   4209	020504	000000 			CHKX:	.WORD	0			;extension for address [3(47)]
   4210	020506	000000 			CKSPCD:	.WORD	0			;CONTAINS STOPCODE ON FATAL ERROR
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 94
CK11SC ROUTINE

   4212		000000 				CKDA=	0			;DEVICE ADDRESS OFFSET
   4213		000002 				CKDV=	2			;DEVICE VECTOR OFFSET
   4214		000004 				CKPI=	4			;DEVICE PI LEVEL OFFSET
   4215		000006 				CKFLG=	6			;DEVICE FLAGS OFFSET
   4216		000010 				CKSPC=	10			;SPECIAL CHAR OFFSET
   4217	020510				CHKCHR:	.BLKW	1			;DEVICE ADDRESS
   4218	020512					.BLKW	1			;DEVICE VECTOR
   4219	020514					.BLKW	1			;DEVICE PI LEVEL
   4220	020516					.BLKW	1			;DEVICE FLAGS
   4221										; B0-B5 = # OF DQ11 SPECIAL CHAR
   4222										; B15 = INTERRUPTED ON SYNC
   4223	020520					.BLKW	4			;SPECIAL CHARACTERS
   4224
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 95
CK11SC ROUTINE

   4226
   4227	020530					.CKTTS
	020530	010146 				MOV	R1,-(SP)
	020532	112001 			10$:	MOVB	(R0)+,R1		;GET THE NEXT CHARACTER
	020534	001403 				BEQ	20$			;BRANCH IF END (NULL)
	020536	004737 	020666'			JSR	PC,CKTCHR		;TYPE CHAR
	020542	000773 				BR	10$			;GET NEXT CHAR
	020544	005200 			20$:	INC	R0			;
	020546	042700 	000001 			BIC	#B0,R0			;POINT TO EVEN LOC
	020552	012601 				MOV	(SP)+,R1
	020554	000207 				RTS	PC			;RETURN TO CALLER
	020556	004037 	020574'		CKCRLF:	JSR	R0,CKTSTR
	020562	   015 	   012 	   000 		.ASCIZ	<15><12>
	020566	000207 				RTS	PC
	020570	004737 	020556'		CKTCRL:	JSR	PC,CKCRLF		;FIRST TYPE A CR/LF
	020574	004737 	020530'		CKTSTR:	JSR	PC,CKTTXT		;GO TYPE STRING
	020600	000200 				RTS	R0
	020602	010146 				MOV	R1,-(SP)
	020604	012701 	000040 			MOV	#040,R1
	020610	004737 	020666'			JSR	PC,CKTCHR
	020614	000401 				BR	CKTOC1
	020616	010146 				MOV	R1,-(SP)
	020620	010046 				MOV	R0,-(SP)
	020622	004737 	020632'			JSR	PC,CKTOC2
	020626	012600 				MOV	(SP)+,R0
	020630	000750 				BR	CKTRR1
	020632	010046 				MOV	R0,-(SP)
	020634	006000 				ROR	R0
	020636	006000 				ROR	R0
	020640	006000 				ROR	R0
	020642	042700 	160000 			BIC	#160000,R0
	020646	001402 				BEQ	20$
	020650	004737 	020632'			JSR	PC,CKTOC2
	020654	012601 				MOV	(SP)+,R1
	020656	042701 	177770 			BIC	#^C7,R1
	020662	052701 	000060 			BIS	#60,R1
	020666	120127 	000040 		CKTCHR:	CMPB	R1,#40			;DOES THIS NEED FILLER ?
	020672	103015 				BHIS	20$
	020674	120127 	000011 			CMPB	R1,#11			;IS CHAR A TAB (11)
	020700	001005 				BNE	10$			;BRANCH IF NOT A TAB
	020702	004037 	020574'			JSR	R0,CKTSTR		;GIVE SPACES FOR IT
	020706	   040 	   040 	   040 		.BYTE	40,40,40,0		;SUBSTITUTE SPACES FOR TAB
	020711	   000
	020712	000207 				RTS	PC
	020714	004737 	020720'		10$:	JSR	PC,12$			;TYPE CHAR FIRST THEN PAD IT WITH 4 NULLS
	020720	004737 	020726'		12$:	JSR	PC,20$
	020724	005001 				CLR	R1
	020726	110137 	177566 		20$:	MOVB	R1,CTOCHR		;TYPE CHAR
	020732	105737 	177564 		30$:	TSTB	CTOSTS			;TEST FOR STILL BUSY
	020736	100375 				BPL	30$
	020740	000207 				RTS	PC
	020742	005737 	177562 		CKGCHR:	TST	CTICHR			;CLEAR BUFFER
	020746	105737 	177560 		10$:	TSTB	CTISTS			;WAIT FOR CHAR
	020752	100375 				BPL	10$			;
	020754	113701 	177562 			MOVB	CTICHR,R1		;
	020760	042701 	177600 			BIC	#^C177,R1		;KEEP ONLY INTERESTING BITS
	020764	000740 				BR	CKTCHR			;TYPE IT BACK TO HIM
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 96
CK11SC ROUTINE

   4229	020766	   115 	   145 	   155 	CKMG01:	.ASCIZ	\Mem Err\
	020771	   040 	   105 	   162
	020774	   162 	   000
   4230	020776	   102 	   151 	   164 	CKMG02:	.ASCIZ	\Bit did not Clear\
	021001	   040 	   144 	   151
	021004	   144 	   040 	   156
	021007	   157 	   164 	   040
	021012	   103 	   154 	   145
	021015	   141 	   162 	   000
   4231	021020	   102 	   151 	   164 	CKMG03:	.ASCIZ	\Bit did not set\
	021023	   040 	   144 	   151
	021026	   144 	   040 	   156
	021031	   157 	   164 	   040
	021034	   163 	   145 	   164
	021037	   000
   4232	021040	   111 	   156 	   164 	CKMG04:	.ASCIZ	\Interrupt did not Occur\
	021043	   145 	   162 	   162
	021046	   165 	   160 	   164
	021051	   040 	   144 	   151
	021054	   144 	   040 	   156
	021057	   157 	   164 	   040
	021062	   117 	   143 	   143
	021065	   165 	   162 	   000
   4233	021070	   111 	   156 	   164 	CKMG05:	.ASCIZ	\Interrupted to Wrong Vector\
	021073	   145 	   162 	   162
	021076	   165 	   160 	   164
	021101	   145 	   144 	   040
	021104	   164 	   157 	   040
	021107	   127 	   162 	   157
	021112	   156 	   147 	   040
	021115	   126 	   145 	   143
	021120	   164 	   157 	   162
	021123	   000
   4234	021124	   156 	   157 	   164 	CKMG06:	.ASCIZ	\not found\
	021127	   040 	   146 	   157
	021132	   165 	   156 	   144
	021135	   000
   4235	021136	   151 	   156 	   164 	CKMG07:	.ASCIZ	\interrupted when not enabled\
	021141	   145 	   162 	   162
	021144	   165 	   160 	   164
	021147	   145 	   144 	   040
	021152	   167 	   150 	   145
	021155	   156 	   040 	   156
	021160	   157 	   164 	   040
	021163	   145 	   156 	   141
	021166	   142 	   154 	   145
	021171	   144 	   000
   4236
   4237						.EVEN
   4238	021174				CKBLK:	.BLKB	400			;Buffer for DH11 and DZ11 tests
   4239		021174'			CKDZTR=CKBLK				;address of receive expected character table for DZ11
   4240		021214'			CKDZTX=CKDZTR+20				;address of next char to transmit
   4241		021234'			CKDZTE=CKDZTX+20				;address of error table
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 97
CK11SC ROUTINE

   4243
   4244
   4245					.LIST ME
   4246
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 98
END STATEMENT

   4248						.SBTTL	END STATEMENT
   4249		001170'				.END	SAVE
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 98-1
SYMBOL TABLE

ACFLAG  000057R  	B8    = 000400   	CKALP$= 012320R  	CKINTG  015062R  	CKTOC1  020620R
AC.ENA= 000200   	B9    = 001000   	CKAL2$= 012320R  	CKINTS  011554R  	CKTOC2  020632R
ALLRXF  005072R  	CDD   = 000020   	CKARD$= 012320R  	CKINT1  014466R  	CKTRR0  020626R
ALLRX1  005102R  	CD.CHK= 040000   	CKARH$= 012320R  	CKINT2  014472R  	CKTRR1  020552R
ALTDXF  000062R  	CD.DAT= 177162   	CKARX$= 012320R  	CKINT3  014500R  	CKTSTR  020574R
ATCBLK  001102R  	CD.DTE= 004000   	CKATC$= 012320R  	CKINT6  014760R  	CKTTXT  020530R
BC.HDS= ****** GX	CD.DTL= 002000   	CKATE$= 012320R  	CKINT7  015044R  	CKZZZX= 000015
BEGIN = 003000R  	CD.EOF= 020000   	CKBLK   021174R  	CKKL$$= 016424R  	CK.CAL  011512R
BITTBL= ****** GX	CD.ERR= 100000   	CKBUST  017636R  	CKKL11  016424R  	CLKENB= 000100
BIT0  = 000001   	CD.GO = 000001   	CKCADD= 000034   	CKLP$$= 017250R  	CLKLVL= 000006
BIT1  = 000002   	CD.HEM= 000004   	CKCDEV  010604R  	CKLP11  017250R  	CLKVEC= 000100
BIT10 = 002000   	CD.INE= 000100   	CKCD$$= 017140R  	CKL2$$= 017344R  	CLKWRD= 177546
BIT11 = 004000   	CD.LVL= 000006   	CKCD11  017140R  	CKL211  017344R  	CMDCLN= 000024
BIT12 = 010000   	CD.NXM= 001000   	CKCD20  017222R  	CKL220  017442R  	CMDCLR  000040R
BIT13 = 020000   	CD.OFL= 010000   	CKCEND  011324R  	CKMG01  020766R  	CMDONE  001574R
BIT14 = 040000   	CD.ONL= 000010   	CKCLK9  013012R  	CKMG02  020776R  	CNUPE = 000002
BIT15 = 100000   	CD.PAK= 000002   	CKCOR   012116R  	CKMG03  021020R  	CO.INE= 000100
BIT2  = 000004   	CD.PWR= 000400   	CKCRLF  020556R  	CKMG04  021040R  	CO..MM= 000004
BIT3  = 000010   	CD.RDY= 000200   	CKDA  = 000000   	CKMG05  021070R  	CPUNUM= 000002
BIT4  = 000020   	CD.STS= 177160   	CKDEVN  011330R  	CKMG06  021124R  	CS.EXP= 177670
BIT5  = 000040   	CD.VEC= 000230   	CKDHPL  016320R  	CKMG07  021136R  	CTICHR= 177562
BIT6  = 000100   	CD.XAD= 000060   	CKDH$$= 015274R  	CKMPAR  012322R  	CTILVL= 000004
BIT7  = 000200   	CD0DAT= 177162   	CKDH1A  015472R  	CKNCD1  011352R  	CTISTS= 177560
BIT8  = 000400   	CD0STS= 177160   	CKDH1B  015532R  	CKNCI1  011336R  	CTIVEC= 000060
BIT9  = 001000   	CHKBIT  014052R  	CKDH1C  016044R  	CKNCO1  011344R  	CTOCHR= 177566
BPARER= 000020   	CHKBRD  011774R  	CKDH1D  016306R  	CKNDH1  011357R  	CTOLVL= 000004
BP.CLN= 074000   	CHKCHR  020510R  	CKDH1E  015602R  	CKNDL1  011415R  	CTOSTS= 177564
BP.CSP= 000170   	CHKCLK  012566R  	CKDH1F  016344R  	CKNDM1  011424R  	CTOVEC= 000064
BP.ERR= 100000   	CHKCOR  012066R  	CKDH11  015274R  	CKNKL1  011364R  	CTYBFL= 000120
BP.LD0= 000002   	CHKDEV  013202R  	CKDIDT  014174R  	CKNKW1  011442R  	CTYBUF  000230R
BP.LD1= 000004   	CHKDV1  013450R  	CKDL$$= 016360R  	CKNLP1  011451R  	CTYLUN= 000001
BP.RP4= 000200   	CHKD01  014010R  	CKDL11  016360R  	CKNL21  011456R  	CTYPTR= ****** GX
BP.SWR= 000001   	CHKD02  013754R  	CKDMCS  016570R  	CKNMM1  011463R  	DCOMST= 000001
BP.UNT= 003400   	CHKERR  017706R  	CKDM$$= 016474R  	CKNRD1  011377R  	DEFLAG  000061R
BR0   = 000000   	CHKER0  020362R  	CKDM11  016474R  	CKNRH1  011473R  	DEP   = 010000
BR1   = 000040   	CHKER1  020452R  	CKDNAM  011332R  	CKNRX1  011505R  	DEVCHK  001656R
BR2   = 000100   	CHKER2  020440R  	CKDONE  003000R  	CKNTC1  011500R  	DEVMNT  002002R
BR3   = 000140   	CHKER3  020430R  	CKDV  = 000002   	CKNTE1  011434R  	DEVNAM  000042R
BR4   = 000200   	CHKER9  020466R  	CKDZTE= 021234R  	CKPI  = 000004   	DEVOK   001734R
BR5   = 000240   	CHKFLD  015272R  	CKDZTR= 021174R  	CKPOPJ  012320R  	DEVUNT  000044R
BR6   = 000300   	CHKFLG  011326R  	CKDZTX= 021214R  	CKRD$$= 016360R  	DEX   = 000400
BR7   = 000340   	CHKFLV  015270R  	CKEDID= 000010   	CKRD11  016360R  	DEXDON= 000004
B.DM11= 170500   	CHKINL  014330R  	CKEFAT= 000001   	CKRH$$= 017474R  	DEXWD1= 174406
B0    = 000001   	CHKINT  015102R  	CKEGB = 000100   	CKRH11  017474R  	DEXWD2= 174404
B1    = 000002   	CHKITL= 000012   	CKEMSE= 000020   	CKRX$$= 017570R  	DEXWD3= 174402
B10   = 002000   	CHKMMO= 000002   	CKEMSG= 000004   	CKRX11  017570R  	DFUNC = 000200
B11   = 004000   	CHKTIM  013010R  	CKENCL= 000040   	CKRX20  017624R  	DF.DMG= 000004
B12   = 010000   	CHKX    020504R  	CKEPC = 000002   	CKSPC = 000010   	DF.DMN= 000007
B13   = 020000   	CHK.11  011514RG 	CKEWRN= 000200   	CKSPCD  020506R  	DF.DOR= 000001
B14   = 040000   	CHK.96  013156RG 	CKFERR= 000001   	CKTBOC  020602R  	DF.EHG= 000010
B15   = 100000   	CHNPNT= 000001   	CKFIDT= 100000   	CKTCHR  020666R  	DF.EHM= 000011
B2    = 000004   	CI.INE= 000100   	CKFLAG  015100R  	CKTCRL  020570R  	DF.EMG= 000005
B3    = 000010   	CKACD$= 012320R  	CKFLG = 000006   	CKTC$$= 017476R  	DF.EMN= 000006
B4    = 000020   	CKADH$= 012320R  	CKGCHR  020742R  	CKTC11  017476R  	DF.KLR= 000012
B5    = 000040   	CKADL$= 012320R  	CKINT   014446R  	CKTE$$= 016710R  	DF.KLW= 000013
B6    = 000100   	CKADM$= 012320R  	CKINTE  015054R  	CKTE11  016710R  	DF.KLX= 000014
B7    = 000200   	CKAKL$= 012320R  	CKINTF  015070R  	CKTOCT  020616R  	DF.OFF= 000002
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 98-2
SYMBOL TABLE

DF.ON = 000003   	DL.CAR= 010000   	DRVBOT= 000004   	ERR11S= 000002   	IE.ACT= 177771
DF.PDP= 000016   	DL.CTS= 020000   	DRVBTP= 000016   	EV.PF = ****** GX	IE.ADP= 177636
DF.PEX= 000015   	DL.DIE= 000040   	DRVMSZ= 000010   	EXFLAG  000050R  	IE.ALN= 177736
DGUTS = 000000   	DL.DSC= 100000   	DRVNAM= 000000   	EXIT    005750R  	IE.AST= 177660
DHBASE= 160020   	DL.DTR= 000002   	DRVSET= 000002   	EXITA   001526R  	IE.BAD= 177777
DHDATA  016354R  	DL.ERR= 100000   	DRVSIZ= 000020   	EXIT00  005736R  	IE.BBE= 177710
DHEXPA= 160020   	DL.LVL= 000004   	DRVTAB  007060R  	EX.AC1= 000001   	IE.BDI= 177714
DHEXPZ= 000020   	DL.OVR= 040000   	DRVTBZ= 000060   	EX.ENA= 000200   	IE.BDR= 177716
DHRFER= 020000   	DL.RGO= 004000   	DRVWRT= 000006   	EX.FCO= 000004   	IE.BDV= 177711
DHROVR= 040000   	DL.RIE= 000100   	DR.DTE= 000011   	E.FLOG= 000004   	IE.BHD= 177700
DHSTAB  001124R  	DL.RNG= 040000   	DSEND = 000004   	E.FQIO= 000001   	IE.BLK= 177754
DHTBL = ****** GX	DL.ROK= 000200   	DSKADR  000004R  	E.FTMO= 000002   	IE.BNM= 177712
DHXMII  016356R  	DL.RTS= 000004   	DSKLUN= 000002   	FIDBLK  001076R  	IE.BTF= 177675
DH.AEE= 100000   	DL.XIE= 000100   	DSKSIZ  000010R  	FILCHK  002252R  	IE.BTP= 177725
DH.BAR= 000012   	DL.XOK= 000200   	DS04  = 004000   	FILDMO  002332R  	IE.BVR= 177701
DH.BCR= 000010   	DL..FE= 020000   	DS05  = 002000   	FILDMX  002464R  	IE.BYT= 177755
DH.BRK= 000014   	DL..MM= 000004   	DS06  = 001000   	FILDM1  002350R  	IE.CKP= 177766
DH.CAR= 000006   	DL..PE= 010000   	DTCL11= 002000   	FILDM2  002414R  	IE.CKS= 177742
DH.CL5= 000000   	DL..RC= 000377   	DTECHK  003770R  	FILDM3  002436R  	IE.CLO= 177732
DH.CL6= 000001   	DL..RE= 000001   	DTECMD= 000451   	FILDM4  002454R  	IE.CON= 177752
DH.CL7= 000002   	DL..XC= 000377   	DTEFLG= 000444   	FILFND  002060R  	IE.DAA= 177770
DH.CL8= 000003   	DL.2RC= 002000   	DTEF11= 000450   	FILMNT  006750R  	IE.DAO= 177763
DH.CNX= 000400   	DL.2XM= 000010   	DTEMSG  004304R  	FILOK   002312R  	IE.DFU= 177750
DH.DOV= 040000   	DMBASE= 170500   	DTEMTD= 000455   	FILQIO  006764R  	IE.DNA= 177771
DH.LPR= 000004   	DMEXPA= 170500   	DTEMTI= 000456   	FILSET  002322R  	IE.DNR= 177775
DH.LVL= 000005   	DMFLAG  000052R  	DTEXPA= 174400   	FINDEV  006672R  	IE.DUN= 177767
DH.NRC= 000002   	DMOERR  002426R  	DTEXPZ= 000040   	FLOATD= 160000   	IE.DUP= 177707
DH.NXM= 002000   	DMTBL = ****** GX	DTINOF= 000010   	FLOATV= 000300   	IE.EBX= 177776
DH.PEN= 000020   	DMTBLK  001116R  	DTINON= 000040   	FNDACP  006730R  	IE.EOF= 177766
DH.RIE= 000100   	DM.ALI= 000017   	DTPMSG  004330R  	FORPRO= 000020   	IE.EOT= 177702
DH.SIE= 010000   	DM.BSY= 000020   	DTPMS1  004346R  	FTASRT= 000001   	IE.EOV= 177765
DH.SSR= 000016   	DM.CAR= 000100   	DTRSMD= 000010   	FTECHO= 000000   	IE.EXP= 177676
DH.TIE= 020000   	DM.CTS= 000040   	DTSTAT= 000034   	FTETR = 000000   	IE.FEX= 177717
DH.VDP= 100000   	DM.DNE= 000200   	DTVECA= 000774   	FTGLOM= 000000   	IE.FHE= 177705
DH..FE= 020000   	DM.DTR= 000002   	DT11DB= 004000   	FT.CHK= 000001   	IE.FOP= 177713
DH..HD= 040000   	DM.ENB= 000040   	DUPE  = 000020   	FT.DDT= 000000   	IE.HFU= 177744
DH..MC= 004000   	DM.IEN= 000100   	DURE  = 000004   	FT.D75= 000000   	IE.HWR= 177772
DH..MM= 001000   	DM.INI= 002000   	DV.LOG= ****** GX	FT.HLP= 000001   	IE.IDU= 177644
DH..OP= 000040   	DM.LE = 000001   	DXWRD1= 002000   	GETNAM  006002R  	IE.IEF= 177637
DH..PE= 010000   	DM.LVL= 000004   	D.CCTY= ****** GX	GETNB   005760R  	IE.IFC= 177776
DH..RI= 000200   	DM.RNG= 000200   	D.CKLN= ****** GX	GETNUM  006046R  	IE.IFU= 177747
DH..SI= 040000   	DM.RTS= 000004   	D1011 = 000040   	GTIMBF  000020R  	IE.ILL= 177726
DH..TI= 100000   	DM.SCN= 004000   	EBSEL = 000100   	G.TICP= 000016   	IE.ILU= 177640
DH.2SB= 000004   	DM.SR = 000020   	EBUSPC= 000020   	G.TICT= 000014   	IE.INS= 177776
DIAG1 = 174430   	DM.ST = 000010   	EBUSPS= 000004   	G.TIDA= 000004   	IE.IPR= 177641
DIAG2 = 174432   	DM.STP= 000400   	EDONES= 040000   	G.TIHR= 000006   	IE.ISQ= 177703
DIAG3 = 174436   	DM..MM= 001000   	EF.PR1= ****** GX	G.TIMI= 000010   	IE.ITI= 177643
DIKL10= 000010   	DNSERR  001642R  	EF.PR2= ****** GX	G.TIMO= 000002   	IE.ITS= 177770
DLDADR= 175610   	DON10C= 040000   	EF.QIO= 000001   	G.TISC= 000012   	IE.LCK= 177745
DLDSIZ= 000010   	DON10S= 100000   	EF.RKP= ****** GX	G.TIYR= 000000   	IE.LNL= 177646
DLRBUF= 000002   	DON11C= 000100   	EF.TMO= 000002   	HBCERR  005002R  	IE.MBK= 177721
DLRSTS= 000000   	DON11S= 000200   	EPTR  = 000000   	HIBYTE= 177400   	IE.MOD= 177753
DLTBL = ****** GX	DPS4  = 040000   	ERRINT= 000004   	HOMBUF  000064R  	IE.NBF= 177731
DLXBUF= 000006   	DRESET= 000100   	ERRMSG  001447R     002	HOMFE0= 000061   	IE.NBK= 177727
DLXSTS= 000004   	DRVADR  000002R  	ERR10C= 010000   	HOMFE1= 000062   	IE.NFI= 177704
DLYCNT= 174400   	DRVAD1= 000012   	ERR10S= 020000   	HOMNAM= 000000   	IE.NLN= 177733
DL.BRK= 000001   	DRVAD2= 000014   	ERR11C= 000001   	IE.ABO= 177761   	IE.NNC= 177674
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 98-3
SYMBOL TABLE

IE.NOD= 177751   	IO.EOF= 003000   	IO.SYN= 003040   	L2.DB = 000377   	MNTSY2  004514R
IE.NSF= 177746   	IO.ESA= 002500   	IO.TRM= 002410   	L2.DEL= 002000   	MODTBL  001532R
IE.OFL= 177677   	IO.EXT= 011400   	IO.UNL= 000042   	L2.DH = 002000   	MODTLN= 000006
IE.ONP= 177773   	IO.FDX= 003020   	IO.WAT= 013400   	L2.DL = 000010   	MOFLAG  000051R
IE.OVR= 177756   	IO.FNA= 004400   	IO.WLB= 000400   	L2.DNR= 000100   	MONTAB  006534R
IE.PRI= 177760   	IO.HDX= 003010   	IO.WLS= 000410   	L2.DON= 000200   	MOUNTD  002050R
IE.RAC= 177724   	IO.HIS= 015000   	IO.WLV= 000500   	L2.DR = 010000   	MPE11 = 001000
IE.RAT= 177723   	IO.INL= 002400   	IO.WVB= 011000   	L2.DTE= 000002   	MP.ENB= 000001
IE.RBG= 177730   	IO.ITI= 017000   	IO.XMT= 014400   	L2.ENB= 000100   	MP.ERR= 100000
IE.RCN= 177722   	IO.KIL= 000012   	IO.XNA= 014410   	L2.ERE= 001000   	MP.LVL= 000007
IE.RER= 177740   	IO.LED= 012000   	IQ.Q  = 000002   	L2.ERR= 100000   	MP.REG= 172100
IE.RNM= 177715   	IO.LOV= 001010   	IQ.X  = 000001   	L2.GER= 000001   	MP.VEC= 000114
IE.RSU= 177757   	IO.LTK= 000050   	IS.BV = 000005   	L2.GO = 000001   	MP.WWP= 000004
IE.SDP= 177635   	IO.MCS= 013400   	IS.CLR= 000000   	L2.INI= 000400   	NONDEV  014016R
IE.SNC= 177735   	IO.MDA= 016000   	IS.CR = 006401   	L2.INT= 004000   	NOTRXF  005030R
IE.SPC= 177772   	IO.MDI= 014400   	IS.ESC= 015401   	L2.LDP= 010000   	NULSTP= 000040
IE.SQC= 177734   	IO.MDO= 015400   	IS.PND= 000000   	L2.LPE= 000040   	NUPE  = 000002
IE.SRE= 177762   	IO.MLO= 006000   	IS.RDD= 000002   	L2.LVL= 000004   	NXMVEC= 000004
IE.STK= 177706   	IO.MOD= 003000   	IS.SET= 000002   	L2.MPE= 000020   	OB0   = 000001
IE.ULN= 177773   	IO.MSO= 005000   	IS.SUC= 000001   	L2.MST= 000004   	OB1   = 000002
IE.UPN= 177777   	IO.RAL= 001010   	KBS0  = ****** GX	L2.ONL= 004000   	OB10  = 000400
IE.VER= 177774   	IO.RAT= 013000   	KBS1  = ****** GX	L2.OVF= 004000   	OB11  = 001000
IE.WAC= 177743   	IO.RBC= 003000   	KLANXM  005614R  	L2.PCM= 007777   	OB12  = 002000
IE.WAT= 177741   	IO.RCI= 015000   	KLAREM  005476R  	L2.PEN= 000002   	OB13  = 004000
IE.WER= 177737   	IO.RCV= 015000   	KLAUSR  005466R  	L2.PI = 000400   	OB14  = 010000
IE.WLK= 177764   	IO.RDB= 001200   	KLINIT  001120R  	L2.PNR= 020000   	OB15  = 020000
IE.2DV= 177720   	IO.RDN= 000022   	KLNPTR= ****** GX	L2.POL= 000200   	OB16  = 040000
IFLOP = 100000   	IO.REL= 013400   	KLPWRF= 000010   	L2.PZE= 040000   	OB17  = 100000
INTROF= 000010   	IO.RHD= 001010   	KL.CFM= ****** GX	L2.RDB= 007777   	OB2   = 000004
INTRON= 000040   	IO.RLB= 001000   	KL.DEF= ****** GX	L2.RPB= 010000   	OB3   = 000010
INTSON= 000001   	IO.RLV= 001100   	KL.LCA= ****** GX	L2.RPE= 000010   	OB4   = 000020
INT10S= 000400   	IO.RNA= 005400   	KL.LRM= ****** GX	L2.SPR= 040000   	OB5   = 000040
INT11C= 002000   	IO.RNC= 001004   	KL.LVB= ****** GX	L2.TB0= 000400   	OB6   = 000100
INT11S= 004000   	IO.RNE= 001020   	KL.LVL= 000004   	L2.TB1= 001000   	OB7   = 000200
IO.ACE= 007400   	IO.RTC= 003400   	KL.VBN= ****** GX	L2.TB2= 002000   	PASS  = 000002
IO.ACR= 006400   	IO.RTI= 016400   	KPAR0 = 172340   	L2.TM = 000004   	PDP11 = 000040
IO.ACW= 007000   	IO.RTK= 000060   	KW.INE= 000100   	L2.TRN= 001000   	PERCLR= 001000
IO.ADS= 014000   	IO.RVB= 010400   	KW.TIC= 000200   	L2.UCD= 020000   	PHYLIM  011334R
IO.APC= 014000   	IO.RWD= 002400   	K.LRBA= ****** GX	L2.VD = 100000   	PHYS  = 100000
IO.APV= 014010   	IO.RWU= 002540   	LKS   = 177546   	L2.VEC= 000754   	PIDENT= 000000
IO.ATT= 001400   	IO.R1C= 002400   	LOAD11= 000004   	L20ADR= 000004   	PRI7  = 000340
IO.CCI= 014000   	IO.SAO= 004000   	LOGBUF  001070R  	L20BCT= 000006   	PRNRUN  005602R
IO.CCT= 002460   	IO.SCS= 013000   	LOWCOR  000064R  	L20BUF= 000014   	PROPNT= 000021
IO.CLN= 003400   	IO.SDI= 013000   	LP.DAT= 177516   	L20CHK= 000017   	PROTBL= ****** GX
IO.CON= 015400   	IO.SDO= 012400   	LP.DNE= 000200   	L20COL= 000015   	PRTOFF= 004000
IO.CRC= 001020   	IO.SEC= 002520   	LP.ERR= 100000   	L20CRA= 000000   	PR0   = 000000
IO.CRE= 012000   	IO.SEM= 002440   	LP.INE= 000100   	L20CRB= 000002   	PR1   = 000040
IO.CTI= 015400   	IO.SHT= 002410   	LP.LVL= 000004   	L20PCT= 000010   	PR2   = 000100
IO.CTL= 016400   	IO.SLO= 005400   	LP.STS= 177514   	L20PDA= 000016   	PR3   = 000140
IO.DAC= 010000   	IO.SMO= 002560   	LP.VEC= 000200   	L20RAM= 000012   	PR4   = 000200
IO.DCI= 014400   	IO.SNM= 002450   	LP0DAT= 177516   	L20STS= 175400   	PR5   = 000240
IO.DCT= 002470   	IO.SPB= 002420   	LP0STS= 177514   	L21STS= 175420   	PR6   = 000300
IO.DEL= 012400   	IO.SPF= 002440   	LP1DAT= 177522   	MEMSIZ  000014R  	PR7   = 000340
IO.DET= 002000   	IO.SSO= 004400   	LP1STS= 177520   	MM.SR0= 177572   	PS    = 177776
IO.DIS= 016000   	IO.SST= 002430   	L2.A16= 000020   	MNTBLK  001110R  	PSWW1 = 000005
IO.DTI= 016000   	IO.STC= 002500   	L2.A17= 000040   	MNTSY   004402R  	PSWW10= 000014
IO.ENA= 006000   	IO.STP= 016400   	L2.BCM= 007777   	MNTSY1  004424R  	PSWW11= 000015
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 98-4
SYMBOL TABLE

PSWW12= 000016   	RPFUNC= 000076   	SETDL   003162R  	TCUNIT= 003400   	TE.DG1= 000030
PSWW13= 000017   	RPGO  = 000001   	SETDM   003320R  	TCWC  = 177344   	TE.DG2= 000032
PSWW2 = 000006   	RPMCPE= 020000   	SETFIL  002060R  	TCWERR  010600R  	TE.DG3= 000036
PSWW3 = 000007   	RPMOL = 010000   	SETRXF  005012R  	TCWNXT  010540R  	TE.DYC= 000000
PSWW4 = 000010   	RPNOOP= 000000   	SF.FX = ****** GX	TCWRIT= 000014   	TE.EAD= 000022
PSWW5 = 000011   	RPOF  = 176732   	SOMRXF  005124R  	TCWRT   010406R  	TE.EBC= 000016
PSWW6 = 000012   	RPPGM = 001000   	SPSAVE  000000RG 	TC.A16= 000020   	TE.EDT= 000026
PSWW7 = 000013   	RPPRST= 000020   	STAT  = 174434   	TC.A17= 000040   	TE.LVL= 000006
PS.PUS= 030000   	RPRDY = 000200   	STATUS= 000022   	TC.BAR= 177346   	TE.NNN= 000004
PS.REG= 004000   	RPREAD= 000070   	STKLEN= 000200   	TC.CLK= 000100   	TE.STW= 000034
PS.USR= 140000   	RPSET   007632R  	STSW0 = ****** GX	TC.CMD= 177342   	TE.VEC= 000774
PUDADR  000040R  	RPSN  = 176730   	STSW1 = ****** GX	TC.DAT= 177350   	TE.XAD= 000020
PUDIDX  000045R  	RPTRE = 040000   	SWR   = 177570   	TC.DT0= 000020   	TE.XA1= 000010
PULSE = 000020   	RPUNIT= 000007   	SWSLLT= 100000   	TC.DT1= 000010   	TE.XA2= 000012
QEFLAG  000056R  	RPWC  = 176702   	SXBTHM= 105755   	TC.DT2= 000004   	TE.XBC= 000014
QIOSTS  001064R  	RPWNXT  010116R  	SYMNTD  004534R  	TC.D16= 000001   	TE.XDT= 000024
QSIZE = 000023   	RPWRIT= 000060   	SYMNT1  004544R  	TC.D17= 000002   	TE.XW1= 000006
Q.DA  = ****** GX	RPWRT   010036R  	SYNERR  001562R  	TC.ERR= 100000   	TE.XW2= 000004
Q.SZ  = ****** GX	RP4CHK  003530R  	SYSAVE  002476R  	TC.ILO= 010000   	TE.XW3= 000002
RADIX   000016R  	RP6CHK  003574R  	SYSAV1  002530R  	TC.INE= 000100   	TOBM  = 000004
RAMIS0= 010000   	RQSKLR  005130R  	SYSMSG  004366R  	TC.LVL= 000006   	TOIP  = 000002
RD.LVL= 000004   	RQSTSK  005624R  	SYSTRT  004240R  	TC.MMT= 000040   	TOIT  = 000001
REDHM1  004650R  	RXBAD1  007206R  	S.DI  = ****** GX	TC.MTE= 020000   	TO10  = 000200
REDHOM  004616R  	RXBAD2  007206R  	S.FW  = ****** GX	TC.NXM= 000400   	TO10AD= 174420
REDSY   003346R  	RXBBLK  007210R  	S..AMC= 000000   	TC.PAR= 040000   	TO10BC= 174414
RESTOR  002734RG 	RXBBLX  007350R  	S..BDT= 000011   	TC.RDA= 000006   	TO10BM= 000001
RFMAD0= 100000   	RXBMSZ  007402R  	S..CHK= 000012   	TC.RDY= 000200   	TO10DB= 000400
RFMAD1= 040000   	RXBNXT  007370R  	S..CNK= 000003   	TC.REV= 004000   	TO10DN= 100000
RFMAD2= 020000   	RXBNX1  007374R  	S..CTY= 000005   	TC.RMT= 000002   	TO10DT= 174424
RFMAD3= 010000   	RXBOOT  007150R  	S..DCP= 000013   	TC.SAT= 000000   	TO10ER= 020000
RHFLAG  000053R  	RXCS  = 177170   	S..DL1= 000002   	TC.SST= 000010   	TO11  = 000100
RHMERR  005046R  	RXDB  = 177172   	S..DTE= 000002   	TC.STS= 177340   	TO11AD= 174422
RH.LVL= 000000   	RXDONE= 000040   	S..ILS= 000004   	TC.UPS= 000200   	TO11BC= 174416
RM    = 000010   	RXEMPT= 000002   	S..KW1= 000007   	TC.US0= 000000   	TO11BM= 020000
RNFLAG  000054R  	RXERR = 100000   	S..MEM= 000006   	TC.US1= 000400   	TO11DB= 004000
RNRERR  005060R  	RXFILL= 000000   	S..NCN= 000010   	TC.US2= 001000   	TO11DN= 000200
RPATA = 100000   	RXFUNC= 000016   	S..NXM= 000001   	TC.US3= 001400   	TO11DT= 174426
RPBA  = 176704   	RXGO  = 000001   	TCBA  = 177346   	TC.US4= 002000   	TO11ER= 000002
RPBAD1= 007720R  	RXINIT= 040000   	TCBAD1= 010204R  	TC.US5= 002400   	TRPVEC= 000034
RPBAD2= 007726R  	RXREAD= 000006   	TCBAD2= 010204R  	TC.US6= 003000   	TSTCHR  017470R
RPBMSZ  010004R  	RXRERR= 000016   	TCBMSZ  010350R  	TC.US7= 003400   	TS.CET= 000001
RPBNXT  007744R  	RXSET   007140R  	TCBNXT  010322R  	TC.VEC= 000214   	TS.DEI= 000010
RPBOOT  007702R  	RXSETX  007144R  	TCBOOT  010200R  	TC.WCR= 177344   	TS.DEP= 010000
RPCS1 = 176700   	RXTREQ= 000200   	TCCM  = 177342   	TC.WRA= 000016   	TS.EBM= 020000
RPCS2 = 176710   	RXUNIT= 000020   	TCDT  = 177350   	TC.WTM= 000012   	TS.EEE= 000040
RPDA  = 176706   	RXWBLK  007472R  	TCENDZ= 100000   	TC..BM= 002000   	TS.EET= 000002
RPDC  = 176734   	RXWNXT  007452R  	TCERR = 100000   	TC..DI= 010000   	TS.EEX= 000400
RPDPR = 000400   	RXWRIT= 000004   	TCFUNC= 000016   	TC..DM= 001000   	TS.EIS= 002000
RPDS  = 176712   	RXWRT   007420R  	TCGO  = 000001   	TC..EZ= 100000   	TS.ENT= 000100
RPDT  = 176726   	RX.LVL= 000006   	TCRDY = 000200   	TC..MM= 020000   	TS.EPE= 000020
RPDT04= 000020   	R$$11M= 000001   	TCREAD= 000004   	TC..RD= 000004   	TS.ETD= 000200
RPDT06= 000022   	R$$20F= 000001   	TCREV = 004000   	TC..SE= 004000   	TS.IEN= 000001
RPDVA = 004000   	SAVE    001170RG 	TCRNUM= 000002   	TC..WR= 000014   	TS.IFB= 100000
RPECCI= 004000   	SAVLMT  001164RG 	TCSATM= 000000   	TENAD1= 174410   	TS.MPE= 001000
RPERR = 040000   	SCD   = 000040   	TCSET   010174R  	TENAD2= 174412   	TS.PEX= 100000
RPFLAG  000055R  	SETCTY  003032R  	TCST  = 177340   	TE.BAS= 174400   	TS.POF= 004000
RPFM22= 010000   	SETDH   003262R  	TCSTOP= 000010   	TE.BNX= 000040   	TS.RES= 004000
SAVE -- MCR FUNCTION 'SAV' FOR 	MACRO M1113  21-JAN-86 17:13  PAGE 98-5
SYMBOL TABLE

TS.RM = 000010   	TYPTAB  006156R  	$DSW  = ****** GX	.IRLTC= 014000   	.PRSTA= ****** GX
TS.RST= 000100   	TYPTXT  006302R  	$UNIT = ****** GX	.KLIWD= ****** GX	.PUDBA= ****** GX
TS.TBM= 000001   	TYPWRN  006362R  	$$    = 000037   	.KLNMD= ****** GX	.PUDEA= ****** GX
TS.XDN= 000004   	UNASG1= 000032   	$$MSG = 000000   	.KLNSW= ****** GX	.RCRM1= 147000
TS.XEC= 010000   	UNASG2= 000033   	$$$   = 001414R     002	.LCRDL= 052000   	.RCRM2= 146000
TS.XEE= 004000   	UNASG3= 000034   	$$$ADR= 007120R  	.LCRDR= 051000   	.RCRM3= 145000
TS.XER= 020000   	UNASG4= 000035   	$$$ARG= 000005   	.LCRM1= 057000   	.RCRM4= 144000
TS.XNT= 100000   	UNASG5= 000036   	$$$OST= 000020   	.LCRM2= 056000   	.RCSPF= 141000
TS.XTS= 040000   	UNASG6= 000037   	$$$T1 = 000013   	.LCRM3= 055000   	.RDJ14= 134000
TS.ZST= 040000   	U.ACP = ****** GX	$$$T2 = 000001   	.LCRM4= 054000   	.RDJ71= 135000
TTYEND= ****** GX	U.DACP= ****** GX	.BRCLK= 005000   	.LCRM5= 053000   	.RDMAB= 133000
TTYEXP= ****** GX	U.DN  = ****** GX	.BTPRM= ****** GX	.LDAR = 077000   	.RHSN = ****** GX
TT.CRW= ****** GX	U.LBH = ****** GX	.CECLK= 004000   	.LDBRL= 043000   	.RPADR= ****** GX
TT.CTY= ****** GX	U.LBN = ****** GX	.CLRMR= 006000   	.LDBRR= 042000   	.SECLK= 003000
TT.OUT= ****** GX	U.RP  = ****** GX	.CLRUN= 010000   	.LDCK1= 046000   	.SERFG= ****** GX
TT.RIP= ****** GX	U.SZ  = ****** GX	.COMEF= ****** GX	.LDCK2= 047000   	.SETMR= 007000
TYPBUF  000064R  	U.UN  = ****** GX	.CONBT= 012000   	.LDDIS= 045000   	.SETRN= 011000
TYPCR   006276R  	U.VA  = ****** GX	.CPUSN= ****** GX	.LDRJD= 064000   	.SSCLK= 002000
TYPDAT  006376R  	VRCHK1= 000067   	.CSHRG= 164000   	.LDRJV= 063000   	.STDTA= ****** GX
TYPDEC  006514R  	VRS   = 000022   	.DATE3= ****** GX	.LDRM1= 060000   	.STDTZ= ****** GX
TYPDEV  006320R  	WBFLAG  000046R  	.DQPBA= ****** GX	.LDRM2= 061000   	.STPCL= 000000
TYPDON  006204R  	WEFLAG  000060R  	.DRLTC= 015000   	.LDRM3= 062000   	.STRCL= 001000
TYPERR  006354R  	WEP   = 000010   	.DSACF= 066000   	.LDSEL= 044000   	.VERNO= ****** GX
TYPMAX= 000013   	WRNMSG  001472R     002	.DSIOJ= 065000   	.MEMRS= 076000   	.WRMBX= 071000
TYPMSG  006112R  	WRTERR  010164R  	.EIOJA= 067000   	.NOERR= ****** GX	..DTP2= ****** GX
TYPMS1  006132R  	WSFLAG  000047R  	.FEMOD= ****** GX	.PCAB1= 150000   	..ENB0= ****** GX
TYPNUM  006614R  	WTSAVE  002670R  	.FESTB= ****** GX	.PCAB2= 151000   	..FSTD= ****** GX
TYPSAV  006270R  	ZSTOP = 040000   	.GFNR = 102000   	.PCAB3= 152000   	..STIN= ****** GX
TYPSDV  006314R  	$BTMSK= ****** GX	.HRDWR= ****** GX	.PCAB4= 153000   	...GBL= 000000
TYPSTR  006366R  	$DIV  = ****** GX	.INICL= 070000   	.PRDTE= ****** GX

. ABS.	000000	   000
      	021574	   001
TEXT  	001514	   002
ERRORS DETECTED:  0

VIRTUAL MEMORY USED:  15032 WORDS  ( 59 PAGES)
DYNAMIC MEMORY:  16550 WORDS  ( 63 PAGES)
ELAPSED TIME:  00:02:48
[52,10]SAVE,[52,20]SAVE/-SP=[52,30]RSXDC,SAVE