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