9fa9d75dcf5bbb9574c587b49dda30c0493dd3cb
[retro-software/dec/tops10/v4.5.git] / src / onceb.mac
1 IFE FTDISK+FTRC10+2,<\r
2 TITLE   ONCEB - ONCE ONLY OPERATOR DIALOGUE AND IO DEVICE INIT.(BURROUGHS DISK)\r
3 >\r
4 IFE FTDISK+FTRC10+1,<\r
5 TITLE   ONCED - ONCE ONLY OPERATOR DIALOGUE AND IO DEVICE INIT.(DATA PRODUCTS DISK)\r
6 >\r
7 IFE FTDISK+FTRC10+0,<\r
8 TITLE   ONCEN - ONCE ONLY OPERATOR DIALOGUE AND IO DEVICE INIT.(NO DISK)\r
9 >\r
10 SUBTTL  T. HASTINGS/RCC/CHW  TS  04 JUN 69  V414\r
11 XP VONCE,414\r
12                 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
13 \r
14 INTERNAL        FTRC10  ;THIS SINGLE SOURCE FILE MAY BE ASSEMBLED FOR EITHER\r
15                         ; THE NEW PDP-10 (BURROUGHS) DISK, OR THE OLD PDP-6 (DATA\r
16                         ; PRODUCTS) DISK (FTRC10 = -1 OR 0, RESPECTIVELY, IN S).\r
17 \r
18 ;"ONCE" SHOULD BE THE LAST LOADED PROGRAM BEFORE SYSMAK AND DDT\r
19 ;THUS IF IT OVERFLOWS INTO THE USER AREA NO HARM IS DONE.\r
20 \r
21 ;ONCE ONLY CODE IS DIVIDED INTO 3 PARTS\r
22 ; 1. MANDITORY ONCE ONLY(LINKSR) - NO CTY NEEDED\r
23 ;       (GOOD REPEATED STARTUPS DURING DEBUGGING\r
24 ; 2. USUAL SHROT ONCE ONLY CODE(ONCE) - CTY FOR DATE AND TIME\r
25 ; 3. OPTIONAL ONCE ONLY CODE - CTY DIALOG TO CHANGE MONITOR\r
26 ;       OR REFRESH DISK(ALT-MODE INSTEAD OF CR AFTER TIME)\r
27 \r
28 ;INITIALIZE PRIORITY CHANNELS AND SETUP INTERRUPT SERVICE ROUTINE CHAIN\r
29 \r
30 T=TAC                   ;DEFINE ACCUMULATOR T\r
31 \r
32 ;LINK TO SERVICE ROUTINES\r
33 \r
34 INTERNAL LINKSR,FT2REL\r
35 EXTERNAL JOBSYM,JOBPFI,XJBPFI\r
36 \r
37 LINKSR: 0                       ;CALLED WITH JSR FROM SYSINI\r
38         MOVSI T,JOBPFI          ;SET LH OF XJBPFI WITH JOBPFI\r
39         MOVEM T,XJBPFI          ;LOADER DORES NOT HANDLE GLOBALS IN LH\r
40 IFN FT2REL,<\r
41         JSP TSTREG              ;GO TEST IF TWO RELOC REGISTERS EXIST\r
42 >\r
43 \r
44                                 ;HIGHEST LOC. IN JOB AREA PROTECTED FROM IO\r
45 \r
46 ;MOVE SYMBOL TABLE UP IN MEMORY\r
47 ;EXEC MUST BE LOADED IN 15K OR LESS IF GOING INTO 16K MACHINE\r
48 ;FIRST FIND THE FIRST LOCATION OF NON-EXISTENT MEMORY\r
49 \r
50         EXTERN DDTSYM\r
51 \r
52         SETZB   DAT,IOS         ;(ACCUMULATOR IOS MUST ALSO BE CLEARED FOR SCNSER)\r
53         CONO APR,NXM            ;CLEAR NON-EX MEM FLAG\r
54         MOVEI   TAC,^D256       ;IN CASE MEMORY HAS NO NON EXISTANT BANKS\r
55         ADDI DAT,2000           ;TRY NEXT 1K BLOCK\r
56         MOVE TAC1,(DAT)         ;REFERENCE THIS LOCATION\r
57         CONSO APR,NXM           ;NON-EXISTENT?\r
58         SOJG TAC, .-3           ;NO,KEEP LOOKING AS LONG AS NOT TOP OF MEMORY\r
59         SUBI    DAT,700         ;MAKE ROOM FOR TENDUMP AT TOP OF CORE\r
60                                 ; (DDTSYM=36) WHERE EXEC DDT EXPECTS IT.\r
61                                 ; IF NOT ALREADY MOVED THERE. RETURN POINTER IN UUO\r
62         HLRE TAC1,UUO           ;-LENGTH OF S. T.\r
63                         ;NOTE THAT THE SYMBOL TABLE POINTER IS MOVED FROM\r
64                         ; JOBSYM(JDAT) TO DDTSYM(JDAT) BY SYSMAK WHEN THE SYSTEM\r
65                         ; IS FIRST CREATED.\r
66         JUMPE TAC1,JRSTI1       ;0 IF NO S. T. TO MOVE UP\r
67         MOVNS TAC1              ;+LENGTH\r
68         HRRZ TAC,UUO            ;FIRST ADDRESS\r
69         ADDI TAC,(TAC1)         ;LENGTH+FIRST ADDRESS\r
70         HRL TAC,TAC1            ;XWD LENGTH,LENGTH+FIRST ADDRESS        \r
71         SUBI DAT,1(TAC)         ;NEW LAST+1-OLD LAST+1\r
72         HRRM DAT,STO1           ;DIST, TO MOVE\r
73         MOVE TAC1,UUO           ;L-N,FIRST ADD.\r
74         ADDI TAC1,1(DAT)        ;FROM NEW S.T. POINTER\r
75         MOVEM TAC1,DDTSYM       ;STORE IN LOWER CORE\r
76         MOVE TAC1,-1(TAC)\r
77 STO1:   MOVEM TAC1,.(TAC)\r
78         SUB TAC,[XWD 1,1]\r
79         JUMPGE TAC,.-3\r
80 \r
81         EXTERN DEVLST,INTNUM,INTTAB\r
82 ;SETUP LOCATIONS 40 THRU 61\r
83 \r
84 JRSTI1: MOVE TAC,[XWD LOC40,40] ;SET UP LOWER CORE PI LOCATIONS\r
85         BLT TAC,61\r
86 \r
87 ;LINK DEVICE SERVICE ROUTINES TOGETHER - IF NOT LOADED BY BUILD\r
88 \r
89         SKIPE DEVLST            ;HAS SERVICE ROUTINES ALREADY BEEN CHAINED TOGETHER?\r
90         JRST ALRCHN             ;YES, MUST HAVE BEEN LOADD WITH BUILD\r
91         MOVSI TAC,INTNUM        ;NO, NEG. NO. OF SERVICE ROTUINES*2\r
92 INTLOP: HLRZ DAT,INTTAB(TAC)    ;GET NEXT PI NUMBER\r
93         ANDI DAT,7              ;MASIC OUT NUMBER OF DDB'S\r
94         LSH DAT,1               ;SHIFT LEFT ONE SO MATCH PI LOCATIONS\r
95         JUMPE DAT,NOPICH        ;DOES THIS DEVICE HAVE A PI CHANNEL (PTY)?\r
96         MOVE DAT,ITEM           ;YES, PICK UP JSR CH'N FROM LOWER CORE\r
97 INTLP1: MOVE DAT,ITEM           ;SAVE IT IN DAT (EITHER A JRST DEV'NT OR\r
98                                 ; JEN @CH'N\r
99         MOVE ITEM,1(DAT)        ;PICK UP INSTR. FOLLOWING INTERRUPT CONSO\r
100 \r
101         TLNN ITEM,00740         ;IS IT A JEN?\r
102         JRST INTLP1             ;NO, KEEP LOOKING\r
103         MOVE TAC1,INTTAB(TAC)   ;YES, LAST DEVICE SO FAR, GET DEV'NT\r
104         HRLI TAC1,(JRST)        ;MAKE JRST INSTR.\r
105         MOVEM TAC1,1(DAT)       ;CHANGE JEN @CH'N TO JRST DEV'NT\r
106         MOVEM ITEM,1(TAC)       ;MAKE DEV'NT+1 BE JEN @CH'N\r
107 NOPICH: AOBJN TAC,.+1           ;PICKUP EVERY OTHER WORD?\r
108         AOBJN TAC,INTLOP        ;ANY MOVE INTERRUPT SERVICE ROUTINES?\r
109 ALRCHN:\r
110 IFN FTDISK,<\r
111 \r
112 ;INITIALIZE DISK\r
113 \r
114         EXTERN NULPDL,DSKINI\r
115 \r
116         MOVEI PDP,NULPDL\r
117         PUSHJ PDP,DSKINT        ;INITIALIZE THE DISK\r
118                                 ; AFTER SETTING UP CHANNEL LOC\r
119                                 ; BUT BEFORE OVERWRITTING ONCE WITH DDB'S\r
120 >\r
121         MOVE TAC,JRSTI\r
122         MOVEM TAC,LINKSR+1      ;DO ONCE ONLY\r
123         SKIPN DEVLST    ;HAVE DEVICE DATA BLOCKS BEEN LINKED?\r
124         JRST LINKDB     ;NO, GO LINK DATA BLOCKS\r
125                         ;RETURN @LINKSR\r
126                         ;MULTIPLE DEVICE DATA BLOCKS ARE CREATED\r
127                         ;AS SPECIFIED BY SYSSIZ AND MAY ERASE PART\r
128                         ;OF ONCE ONLY CODE\r
129 JRST1:  JRST @LINKSR    ;YES,RETURN\r
130 \r
131 EXTERN UUO0,ERROR,UUO2,LINKDR,DEVLST\r
132 EXTERN CH1,CH2,CH3,CH4,CH5,CH6,CH7\r
133 \r
134 LOC40:  0                       ;UUO PC\r
135 INTERNAL UUOTRP\r
136 UUOTRP: JSR UUO0                ;TO UUO HANDLER\r
137         JSR CH1\r
138         JSP DAT,ERROR\r
139         JSR CH2\r
140         JSP DAT,ERROR\r
141         JSR CH3\r
142         JSP DAT,ERROR\r
143         JSR CH4\r
144         JSP DAT,ERROR\r
145         JSR CH5\r
146         JSP DAT,ERROR\r
147         JSR CH6\r
148         JSP DAT,ERROR\r
149         JSR CH7\r
150         JSP DAT,ERROR\r
151         0               ;LOC 60/61 TRAPPED TO FOR UNIMPLEMENTED OP CODES ON PDP-10\r
152                         ;OP CODE 100 IS USED TO DISMISS USER MODE INTERRUPTS(SEE TRPSET UUO)\r
153         JSR UUO2        ;GO SEE IF OP CODE 100 OR SOME OTHER ONE\r
154 \r
155 IFN FT2REL,<\r
156 ;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG\r
157         EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN\r
158 \r
159 TSTREG: 0\r
160         MOVE TAC,[JSR TSTAPR]   ;REPLACE UUO JSR WIT A JSR HERE IN ONCE\r
161         MOVEM TAC,41\r
162         CONO APR,ILM!1          ;TURN ON PI & ASSIGN ILM FLAG\r
163                                 ;FOR POSSIBLE ILLEGAL MEMORY REF BELOW\r
164         MOVEM TAC,42            ;PUT A JSR IN CHAN 1 INT. LOC.\r
165         CONO PI,12300           ;CLR PI SYSTEM, ACTIVATE PI SYSTEM. TURN ON CHAN 1\r
166         DATAO APR,[XWD 376776,000400]   ;SET LOW AND HIGH SEG TO 128K LONG\r
167                                 ; EACH STARTING AT ABS LOC 0\r
168                                 ; RELOC. FOR HIGH SEG IS 400000 TO DO THIS\r
169         JRST 1,.+1              ;ENTER USER MODE .+1\r
170         MOVE TAC,400100         ;TRY TO REFERENCE REL LOC 100 IN HIGH SEG\r
171                                 ; AVOID SHADOW ACS WHICH LIKELY HAVE BAD\r
172                                 ;PARITY CAUSED BY POWER TURN ON AND TURN OFF\r
173         MOVEI 17,400000         ;MOVE HARDWARE ACS INTO SHADOW ACS TO CLEAR PARITY\r
174                                 ;IF HARDWARE ACS TURNED OFF, ACS WILL BE PRESERVED\r
175         BLT 17,400017           ;STOP WITH SHADOW AC 17\r
176         CALL                    ;COME BACK TO EXEC MODE AT TSTAPR\r
177 \r
178 TSTAPR: 0                       ;PLACE TO SIDE JSR PC\r
179         SETZM TWOREG            ;ASSUME NO SECOND REG.\r
180         CONSO APR,ILM           ;WAS MEMORY REF OUT OF BOUNDS?\r
181         SETOM TWOREG            ;NO, MUST HAVE SECOND REG. HARDWARE, SET -1\r
182         CONO APR,ILM            ;CLEAR APR FLAGS AGAIN\r
183         MOVEI TAC,AND2RG        ;=0 IF SOFTWARE CANNOT HANDLE 2 SEG(NULSEG LOADED)\r
184         ANDM TAC,TWOREG         ;=-1 IF IT CAN(SEGCON LOADED)\r
185                                 ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITES\r
186         MOVNI TAC,SEGN          ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES\r
187         HRLI TAC,JOBN           ;SET RH OF POINTER TO FIRST HIGH SEG\r
188                                 ;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST\r
189                                 ; WHICH BUILD FORBITS FROM HAVING EXTERNALS\r
190         MOVSM TAC,SEGPTR        ;POINTER USED FOR AOBJN LOOPS\r
191         CONO PI,10000           ;CLEAR PI SYSTEM\r
192         JRST @TSTREG\r
193 >\r
194 \r
195 ;ROUTINE TO FIND THE EXEC DDT SYMBOL TABLE POINTER AND MOVE IT TO THE PLACE\r
196 ;WHERE EXEC DDT EXPECTS IT(DDTSYM=36)\r
197 ;THE MONITOR CAN BE LOADED IN ANY OF 3 WAYS(IN ORDER OF PERFERNCE):\r
198 ;  1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON\r
199 ;  2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER AND COMMON\r
200 ;  3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD\r
201 \r
202 ;THE 3 WAYS LEAVE DDTSYM(36),JOBSYM(116),T30SYM(131) IN DIFFERENT STATES:\r
203 ;       DDTSYM(36)      JOBSYM(116)     T30SYM(131)\r
204 ;  1.   JUNK            S.T.PTR         JUNK\r
205 ;  2.   JUNK            JUNK(NON-NEG)   S.T.PTR\r
206 ;  3.   S.T.PTR         S.T.PTR         JUNK\r
207 \r
208 ;CALL:  JSP MOVSTP\r
209 ;       RETURN WITH AC UUO SET TO SYMBOL TABLE POINTER\r
210 ;CALLED FROM MANDATORY ONCE ONLY CODE AND 141 START CODE(WHICHEVER OCCURS FIRST)\r
211 \r
212         INTERN MOVTP\r
213         EXTERN T30SYM,JOBSYM,DDTSYM,DDTX,SYSDDT\r
214 \r
215 MOVSTR: 0                       ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND\r
216                                 ; FIRST JUMP TO EXEC DDT IF BEFORE MONITOR STARTED\r
217 MOVJMP: JRST .+1                ;PATCHED TO SETUUO AFTER FIRST EXECUTION\r
218         MOVE UUO,T30SYM         ;ASSUME LOADED BY REGULAR 10/30\r
219         SKIPL JOBSYM            ;OR IS JOBSYM NEGATIVE(MEANING IT IS S.T.PTR)?\r
220         JRST REGT30             ;WAS LOADED BY REGULAR 10/30\r
221         MOVE UUO,JOBSYM         ;ASSUME LOADED BY TIME SHARING MONITOR AND LOADER\r
222         SKIPE DEVLST            ;OR HAS BUILD PATCHED THE DDB CHAIN?\r
223         MOVE UUO,DDTSYM         ;YES, DDTSYM HAS SYMBOL TABLE POINTER AS STORED\r
224                                 ; BY SPMON\r
225 REGT30: MOVEM UUO,DDTSYM        ;STORE THE SYMBOL TABLE POINTER FOR EXEC DDT\r
226         MOVEI TAC,DDTX          ;MAKE SYSTEM STARTUP LOC(141) GO DIRECTLY  TO EXEC\r
227                                 ; DDT AND BY PASS THIS FOOLISHNESS\r
228         HRRM TAC,SYSDDT\r
229         MOVEI TAC,SETUUO        ;MAKE SURE THIS IS DONE ONLY ONCE\r
230         HRRM TAC,MOVJMP\r
231 SETUUO: MOVE UUO,DDTSYM         ;RETURN THE CORRECT(MAYBEUPDATED IF\r
232                                 ; EXEC DDT PATCHES MADE BEFORE MONITOR SAVED OR\r
233                                 ; STARTED) SYMBOL TABLE POINTER\r
234         JRST @MOVSTR            ;RETURN\r
235 \r
236 ;HERE IF EXEC DDT IS STARTED UP BEFORE MONITOR(TO MAKE A PATCH FOR EXAMPLE)\r
237 \r
238         INTERN PATSYM\r
239         EXTERN DDTX\r
240 \r
241 PATSYM: JSR MOVSTP              ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL\r
242                                 ; FIND IT AND PATCH 141 TO GO DIRECTLY TO EXEC DDT\r
243         JRST DDTX               ;AND GO DIRECTLY TO EXEC DDT\r
244 \r
245 IFN     FTRC10, <\r
246 ENTRY   RCXWNZ                  ;THIS SYMBOL IS SOLELY TO PERMIT THE SYSTEM\r
247 RCXWNZ:                         ; BUILDER TO RETRIEVE THE CORRECT BINARY FILE.\r
248 INTERNAL        ONCE\r
249 >\r
250 IFE     FTRC10, <\r
251 ENTRY   ONCE\r
252 >\r
253 \r
254 EXTERNAL CONMES,RADX10,CRLF,DECIN1,OCTPNT\r
255 EXTERNAL CONFIG,SYSDAT\r
256 INTERN FTTTYSER\r
257 IFE FTTTYSER,<\r
258         DEFINE SETTYO <MOVE DAT,LINEP>\r
259         DEFINE TYPE <IDBP CHREC,DAT>\r
260 \r
261         DEFINE NEXTC <ILDB CHREC,TAC>>\r
262 IFN FTTTYSER,<\r
263         DEFINE SETTYO <PUSHJ PDP,OTSET>\r
264         DEFINE TYPE <PUSHJ PDP,OUTCHS>\r
265         DEFINE NEXTC <PUSHJ PDP,GETCHR>\r
266 EXTERN  TSETBF,SETBFI,SCNDDB,TTIBUF,TTOBUF,OUTCHS,GETCHR,TIBF,TOBF\r
267 >\r
268 \r
269         INTERN PATSIZ\r
270         EXTERN PATCH\r
271 \r
272 ONCE:   0       \r
273 PATSIZ: MOVEI TAC,PATCH         ;SET SIZE OF SYSTEM TO BEGINING OF PATCH\r
274         MOVEM TAC,SYSSIZ        ;IN CASE ONCE ONLY DIALOG RESTARTD BEFORE OVERWRITTEN\r
275 \r
276                                 ;PATSIZ SHOULG BE UPDATED EVERY TIME A PATCH\r
277                                 ; IS MADE. SYSSIZ SHOULD ALSO BE UPDATED IF 146\r
278                                 ; START IS GOING TO BE USED(DDT DEBUGGIN OR CTY DOWN)\r
279 \r
280         MOVE PDP,[XWD -ONCEPN,ONCEPD]\r
281         SETTYO\r
282         PUSHJ PDP,CRLF\r
283         MOVEI TAC,CONFIG\r
284         PUSHJ PDP,CONMES\r
285         MOVEI TAC,[ASCIZ / /]\r
286         PUSHJ PDP,CONMES\r
287         MOVEI TAC,SYSDAT\r
288         PUSHJ PDP,CONMES\r
289         MOVEI TAC,TSEXEC\r
290         PUSHJ PDP,CONMES\r
291         PUSHJ PDP,OPOUT\r
292 \r
293 \r
294 ;ASK FOR TODAY'S DATE AND CONVERT \r
295 ;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1\r
296 \r
297 EXTERNAL        THSDAT,JUFMIN,SKIPS\r
298 \r
299         PUSHJ PDP,DATLOP\r
300         JRST .-1\r
301 DATLOP: SETZM THSDAT\r
302         MOVEI TAC,TODATE\r
303         PUSHJ PDP,ICONM\r
304         PUSHJ PDP,OPOUT\r
305         PUSHJ PDP,GETLIN\r
306         JRST DATLOP\r
307         PUSHJ PDP,SKIPS\r
308         PUSHJ PDP,DECIN1        ;MONTH\r
309         JRST DATLOP\r
310         JRST DATLOP             ;ERROR\r
311         SKIPE TAC1\r
312         CAILE TAC1,^D12\r
313         JRST DATLOP\r
314         SUBI TAC1,1\r
315         IMULI TAC1,^D31\r
316         ADDM TAC1,THSDAT\r
317         NEXTC\r
318         PUSHJ PDP,DECIN1        ;DAY\r
319         JRST DATLOP\r
320         JRST DATLOP\r
321         SKIPE TAC1\r
322         CAILE TAC1,^D31\r
323         JRST DATLOP\r
324         SUBI TAC1,1\r
325         ADDM TAC1,THSDAT\r
326         NEXTC\r
327         PUSHJ PDP,DECIN1        ;YEAR\r
328         JRST DATLOP\r
329         JRST DATLOP\r
330         CAIL TAC1,^D69\r
331         CAILE TAC1,^D99\r
332         JRST DATLOP\r
333         SUBI TAC1,^D64          ;YEAR ZERO\r
334         IMULI TAC1,^D12*^D31\r
335         ADDM TAC1,THSDAT\r
336 \r
337 \r
338 ;GET TIME OF DAY\r
339 \r
340 EXTERNAL        TIME\r
341 \r
342         POP PDP,TC\r
343         PUSHJ PDP,TIMLOP\r
344         JRST .-1\r
345 TIMLOP: SETZM TIME\r
346         MOVEI TAC,TIMEM\r
347         PUSHJ PDP,IOCONM\r
348         PUSHJ PDP,OPOUT\r
349         PUSHJ PDP,GETLIN\r
350         JRST TIMLOP             ;JUST A CR\r
351         PUSHJ PDP,SKIPS\r
352         PUSHJ   PDP,DECIN1      ;READ THE TIME (1-4 CHARACTERS)\r
353         JRST    TIMLOP  ;NO ARGUMENT\r
354         JRST    TIMLOP  ;ILLEGAL CHARACTER\r
355         MOVE    TAC,TAC1\r
356         IDIVI   TYAC,^D100      ;TAC=HRS.TAC1=MINS\r
357 \r
358         SKIPL   TAC     ;HRS NEGATIVE?\r
359         CAILE   TAC,^D23        ;OR .G. 23?\r
360         JRST    TIMLOP  ;OUT OF BOUNDS\r
361         CAILE   TAC1,^D59       ;MINUTES .G. 59\r
362         JRST    TIMLOP  ;OUT OF BOUNDS\r
363         IMULI   TAC,^D60        ;CONVERT TO MINUTES\r
364         ADD     TAC,TAC1        ;MINUTES SINCE MIDNIGHT\r
365         IMULI   TAC,JIFMIN      ;JIFFIES SINCE MIDNIGHT\r
366         MOVEM   TAC,TIME        ;TIME=JIFFIES SINCE MIDNIGHT\r
367 \r
368         JUMPGE  ITEM,QUICK      ;SKIP NEXT PART OF DIALOGUE UNLESS THE LAST ITEM\r
369                                 ; TYPED IN (NAMELY TIME OF DAT) WAS TERMINATED BY\r
370                                 ; AN "ALT MODE". (ACCUMULATOR "ITEM" IS SET UP\r
371                                 ; IUN THE "GETLIN" SUBROUTINE CALLED ABOVE.)\r
372 \r
373 \r
374 ;PRINT IO CONFIGURATION\r
375 \r
376 EXTERNAL DEVLST,TCONLN,INLMES,PRENAME,INTTB1,INTTAB\r
377 EXTERNAL OCTPNT\r
378 \r
379 IFN FT2REL,<\r
380         JSR TSTREG              ;TEST IF 2 RELOC REG SET TWOSEG 0 OK-1\r
381         MOVEI TAC,CRLFMS        ;PRINT CRLF\r
382         PUSHJ PDP,ICONM\r
383         MOVEI TAC,1             ;ASSUME 1\r
384         SKIPE TWOREG\r
385         MOVEI TAC,2\r
386         PUSHJ PDP,RADX10        ;NO. SECOND REG EXISTS.\r
387         PUSHJ PDP,INLMES\r
388         ASCIZ /RELOC. REG.\r
389 /\r
390         PUSHJ PDP,OPOUT\r
391 >\r
392         MOVEI TAC,IOCONF\r
393         PUSHJ PDP,IOCNM\r
394         HLRZ AC1,DEVLST\r
395         JUMPN AC1,ALRLNK        ;DEVICE DATA BLOCK ALREADY LINKED?\r
396         MOVESI PROG,INTNUM      ;NO, NOT LOADED BY BULD,-NO. OF DEVICES*2\r
397 CONFLP: SKIPN AC1,INTTB1(PROG)  ;INT LOC HAVE DEV DATA BLOCK?\r
398         JRST NODDB              ;NO, GO GET NEXT DEVICE DATA BLOCK\r
399         LDB UUO,[POINT 8,INTTAB(PROG),8]        ;YES. NO. OF DEV DATA BLKS\r
400         HRRZ TAC,UUO            ;PRINT\r
401         PUSHJ PDP,RADX10        ;IN DECIMAL\r
402         PUSHJ PDP,INLMES        ;PRINT 1 SPACE\r
403         ASCIZ / /\r
404         HLLZ TAC1,DEVNAME(AC)   ;DEVICE NAME\r
405         PUSHJ PDP,PRNAME        ;PRINT IT\r
406         SOJLE UUO,SINGLE                ;IS THIS JUST A SIGNLE DEVICE?\r
407         PUSHJ PDP,INLMES        ;NO, APPEND 'S TO DEVICE NAME\r
408         ASCIZ /'S/\r
409 SINGLE: PUSHJ PDP,CRLF          ;PRINT CR LF\r
410 NODDB:  AOBJN PROG,.+1          ;\r
411         AOBJN PROG,CONFLP       ;FINISHED ALL DEVICES?\r
412         JRST ONCE7A             ;YES\r
413 ALRLNK:\r
414 ONCE5:  MOVEI TAC,1\r
415         HLLZ ITEM,DEVNAM(AC1)\r
416 ONCE4:  HLRZ AC1,DEVSER(AC1)\r
417         JUMPE AC1,ONCE6\r
418         HLLZ TAC1,DEVNAM(AC1)\r
419         CAMN TAC1,ITEM\r
420         AOJA TAC,ONCE4\r
421 ONCE6:  MOVE PROG,TAC           ;SAVE NO.\r
422         PUSHJ PDP,RADX10\r
423         MOVEI CHREC," "\r
424         TYPE\r
425         MOVEI UUO,3\r
426         MOVE TAC,[POINT 6,ITEM]\r
427 ONCE7:  ILDB CHREC,TAC\r
428         ADDI CHREC,40\r
429         TYPE\r
430         SOJG UUO,ONCE7\r
431         MOVEI TAC,[ASCIZ /'S/]\r
432         CAILE PROG,1\r
433         PUSHJ PDP,CONMES\r
434         PUSHJ PDP,CRLF\r
435         JUMPN AC1,ONCE5\r
436 ONCE7A: PUSHJ PDP,OPOUT\r
437         MOVEI TAC,CRLFMS\r
438         PUSHJ PDP,ICONM\r
439         MOVEI TAC,TCONLN        ;PRINT NO, OF TTY SCANNER LINES\r
440         PUSHJ PDP,OCTPNT\r
441         PUSHJ PDP,INLMES\r
442         ASCIZ / (OCTAL) TTY SCANNER LINES\r
443 /\r
444         PUSHJ PDP,OPOUT\r
445 \r
446 ;ASK FOR OPERATORS CONSOLE TO BE SPECIFIED\r
447 \r
448 EXTERNAL INLMES,DEVOPR,CTEXT,DEVPHY\r
449 \r
450 ONCEOP: MOVEI TAC,OPRM\r
451         PUSHJ PDP,ICONM\r
452         PUSHJ PDP,OPOUT\r
453         PUSHJ PDP,GETLIN\r
454         JRST ONCE8              ;JUST CR\r
455         PUSHJ PDP,CTEXT\r
456         MOVE TAC,TAC1\r
457         CAMN TAC,[SIXBIT /CTY/]         ;CTY?\r
458         JRST .+3                        ;YES. JUST STORE IT.\r
459         PUSHJ PDP,DEVPHY\r
460         JRST ONCEP              ;PHYSICAL NAME NOT FOUND\r
461         MOVEM TAC,DEVOPR        ;SET FOR SYSTEM\r
462                                 ;DEVICE "OPR" WILL BE SAME AS THIS\r
463 \r
464 ;ASK IF SYSMAK IS WANTED\r
465 \r
466         EXTERN MAKEND,SYSSIZ\r
467 \r
468 ONCE8:  MOVEI TAC,SYSM\r
469         PUSHJ PDP,YESNO\r
470         JRST ONCE2              ;NO SYSMAK\r
471         MOVEI TAC,MAKEND        ;YES\r
472         MOVEM TAC,SYSSIZ\r
473 \r
474 ;IS EXEC DDT WANTED?\r
475 \r
476 EXTERNAL        DDTEND\r
477 \r
478 ONCE2:  MOVEI TAC,SYSDM\r
479         PUSHJ PDP,YESNO\r
480         JRST ONCE3              ;NO\r
481         MOVEI TAC,DDTEND        ;FIRST FREE LOC. ABOVE EXEC DDT\r
482         MOVEM TAC,SYSSIZ        ;SET NEW MONITOR SIZE\r
483 ;FIND CORE TO BE USED FOR MULTIPLE DEVICE DATA BLOCKS\r
484 ; INCLUDING DISK\r
485 \r
486 EXTERNAL CNTDB\r
487 \r
488 ONCE3:  PUSHJ PDP,SYSSIZ ;SAVE CURRENT VALUE\r
489         JSP TAC,CNTDB    ;UPDATE SYSSIZ BY SPACE USED\r
490                                 ; FOR DEVICE DATA BLOCKS FOR DSK,DTA,MTA,TTY,PTY)\r
491 \r
492 ;PRINT OCTAL SIZE OF MONITOR\r
493 \r
494         MOVEI TAC,EXECIS\r
495         PUSHJ PDP,ICONM\r
496         MOVE TAC,SYSSIZ\r
497         PUSHJ PDP,OCTPNT\r
498         MOVEI TAC,LENGTH\r
499         PUSHJ PDP,CONMES\r
500         PUSHJ PDP,CRLF\r
501         PUSHJ PDP,OPOUT\r
502         POP PDP,SYSSIZ  ;RESTORE SYSSIZ PRIOR TO ACTUAL CREATION\r
503                                 ; OF DEVICE DATA BLOCKS\r
504         EXTERN DECIN,CORLIM,USRLIM,RADX10\r
505 \r
506 ONCE4A: MOVEI TAC,MXKMES        ;PRINT "MAX. K CORE FOR SINGLE USER IS "\r
507         PUSHJ PDP,ICONM\r
508         MOVEI TAC,USRLIM\r
509         PUSHJ PDP,RADX10\r
510         PUSHJ PDP,CRLF\r
511         PUSHJ PDP,OPOUT\r
512 \r
513         MOVEI TAC,DESMES        ;PRINT "TYPE DESIRED MAX.(DEC). CR IF OK AS IS\r
514         PUSHJ PDP,ICONM ;"\r
515         PUSHJ PDP,OPOUT\r
516         PUSHJ PDP,GETLIN\r
517         JRST ONCE5A             ;LEAVE LIMIT AS SET BY BUILDER QUESTION.\r
518 IFN FTTTYSER,<PUSHJ PDP,SKIPS>\r
519         PUSHJ PDP,DECIN\r
520         JRST ONCE4A\r
521         JRST ONCE4A\r
522         SKIPE TAC1              ;UNLESS HE SAID 0 LIKE IN MONGEN.\r
523         HRRM TAC1,CORLIM        ;PATCH CORLIM FOR USER CORE SIZE LIMIT\r
524                                 ; IF NOT PATCHED, LEAVE COMMON'S VALUE\r
525 ONCE5A:\r
526 \r
527 INTERNAL        FTDISK\r
528 IFN FTDISK,<\r
529         PUSHJ PDP,REF           ;GO THROUGH THE REFRESH DIALOG.\r
530 >\r
531 \r
532 QUICK:                  ;THIS IS THE SHORT-CUT EXIT TO BY-PASS MOST OF THE DIALOGUE\r
533 \r
534 INTERNAL        FTCHECK\r
535 \r
536 IFN FTCHECK,<\r
537         PUSHJ PDP,OK    ;CHECKSUM MONITOR AND SAVE THE ANSWER.\r
538 >\r
539 \r
540         JRST @ONCE              ;***EXIT FROM THE "ONCE-ONLY CODE"***\r
541 \r
542 \r
543 IFN FTNDISK,<\r
544 EXTERNAL OCTIN,MFDBLK,SATXWD,NUMPLK,SYSPP,REFLAG\r
545 \r
546 ;REFRESH DIALOGUE\r
547 \r
548 REF:    MOVEI TAC,REF1M ;DO YOU WANT TO REFRESH?\r
549         PUSHJ PDP,YESNO\r
550         POPJ PDP,               ;NO\r
551         MOVEI TAC,REF2M ;YES, ARE YOU SURE?\r
552         PUSHJ PDP,YESNO\r
553         POPJ PDP,               ;NO\r
554 REF6:                           ;YES. DO YOU WANT TO CHANGE THE LOC\r
555         MOVEI TAC,REF3M         ;OF THE MFD?\r
556         PUSHJ PDP,YESNO\r
557         JRST REF3               ;NO\r
558 REF2:                   ;YES\r
559         MOVEI TAC,REF4M         ;TYPE LOGICAL DISK ADDRESS OF MFD RETR, INFO\r
560         PUSHJ PDP,ICONM\r
561         PUSHJ PDP,OPOUT\r
562 \r
563         PUSHJ PDP,GETLIN\r
564         JRST REF2\r
565         IFN FTTTYSER,<PUSHJ PDP,SKIPS>\r
566         PUSHJ PDP,OCTIN\r
567         JRST REF2\r
568         JRET REF2\r
569 IFE     FTRC10, <\r
570         PUSH PDP,TAC1           ;IS IT A MULTIPLE OF NUMBLK?\r
571         MOVEI TAC,(TAC1)\r
572         IDIVI TAC,NUMBLK\r
573         JUMPN TAC1,REF4         ;NO\r
574         POP PDP,TAC1\r
575 >\r
576         HRRZM TAC1,MFDBLK\r
577         AOS TAC1\r
578         HRRM TAC1,SATXWD\r
579 REF3:\r
580 INTERNAL FTSWAP\r
581 IFN FTSWAP,<IFN FTRC10, <\r
582         MOVEI   TAC,REF9M       ;HOW MANY 1K BLOCKS ON THE ISK FOR SWAPPING ?\r
583         PUSHJ   PDP,ICONM\r
584         PUSHJ   PDP,OPOUT\r
585         MOVEI   TAC,^D200       ;THE DEFAULT ANSWER IS 200 DECIMAL.\r
586         MOVEM   TAC,K4SWAP\r
587         PUSHJ   PDP,GETLIN\r
588         JRST    REF3A           ;JUST A CARRIAGE RETURN INVOKES DEFAULT\r
589         IFN FTTTYSER,<PUSHJ PDP,SKIPS>\r
590         PUSHJ   PDP,DECIN\r
591         JRST    REF3\r
592         JRST    REF3\r
593         CAILE   TAC1,MXK2SWP    ;ANSWER TOO BIG?\r
594         JRST    REF3            ;YES, REPEAT QUESTION\r
595         HRRZM   TAC1,K4SWAP     ;NO. SAVE THIS CRUCIAL PARAMETER.\r
596 REF3A:\r
597 >>\r
598 \r
599         PUSHJ PDP,REFRES        ;REFRESH.\r
600         JRST REF5               ;ERROR\r
601 \r
602         MOVEI TAC,REF6M         ;REFRESHING SUCCESSFULLY COMPLETED !\r
603         PUSHJ PDP,ICONM\r
604         PUSHJ PDP,OPOUT         ;TYPE "REFRESHED !"\r
605 \r
606         MOVE    TAC,SYSPP\r
607         MOVEM   TAC,REFLAG      ;TO PERMIT AUTOMATIC LOG-IN UNDER\r
608                                 ; PROJ-PROG NUMBER [1,1] EVEN\r
609         MOVEI   TAC,REF8M       ; THOUGH THE LOG-IN CUSP IS CLEARLY NOT\r
610         PUSHJ   PDP,ICONM       ; ON THE NEWLY REFRESHED DISK.\r
611         PUSHJ   PDP,OPOUT\r
612         POPJ PDP,\r
613 \r
614 IFE     FTRC10, <\r
615 REF4:   POP PDP,TAC1\r
616         MOVEI TAC,REF5M\r
617         PUSHJ PDP,ICONM\r
618         PUSHJ PDP,OPOUT\r
619         JRST REF2\r
620 >\r
621 \r
622 REF5:   PUSH PDP,TAC            ;ERROR. ON COMMING HERE, TAC HAS LOGICAL BLOCK\r
623                                 ; NUMBER WHICH COULD NOT BE WRITTEN\r
624         MOVEI TAC,REF7M\r
625         PUSHJ PDP,IOCONM\r
626         POP PDP,TAC\r
627         PUSHJ PDP,OCTPNT\r
628         PUSHJ PDP,CRLF\r
629         PUSHJ PDP,OPOUT\r
630         JRST REF6               ;GO BACK TO TRY AGAIN.,\r
631 \r
632 REF1M:  ASCIZ /DO YOU WANT TO REFRESH THE DISK ? (Y OR CR)\r
633 /\r
634 REF2M:  ASCIZ /ARE YOU SURE(Y OR CR)?\r
635 /\r
636 REF3M:  ASCIZ /DO YOU WANT TO CHANGE THE LOCATION OF THE MFD(Y OR CR)?\r
637 /\r
638 REF4M:  ASCIZ /TYPE THE LOGICAL DISK ADDRESS OF THE MFT RETREIVAL INFORMATION\r
639 /\r
640 IFE     FTRC10, <\r
641 REF5M:  ASCIZ /MUST BE A MULTIPLE OF NUMBLK.\r
642 /\r
643 >\r
644 REF6M:  ASCIZ /REFRESHED !\r
645 /\r
646 REF7M:  ASCIZ /ERROR WHILE WRITING BLOCK /\r
647 REF8M:  ASCIZ   /TO AUTOMATICALLY LOG-IN UNDER [1,1], TYPE "LOGIN"\r
648 /\r
649 IFN     FTRC10, <\r
650 REF9M:  ASCIZ   /HOW MANY (DECIMAL) 1K DISK BLOCKS ARE TO BE ALLOCATED FOR SWAPPING ?\r
651 /\r
652 >\r
653 >               ;THIS CLOSES AN FTDISK CONDITIONAL SERVAL PAGES BACK.\r
654 \r
655 ;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE\r
656 ;CALL:  PUSHJ PDP,GETLIN\r
657 ;       JUST A CR TYPED IN\r
658 ;       A LINE TYPED IN,TAC SEYT AS BYTE POINTER\r
659 \r
660 CHREC=TEM               ;CHAR TO TYPE OUT (MUST BE SAME AS SCNSER ROUTINE)\r
661 LINE=TAC1               ;TTY LINE NO. (ALSO SAME AS SCNSER)\r
662 \r
663 IFN FTTTYSER,<EXTERN TSETBF,SETBFI,SCNDDB,DCPUTR,PUTCHI>\r
664 \r
665 EXTNERAL        CPOPJ\r
666 \r
667 GETLIN: IFE FTTTYSER,<MOVE TAC,LINEP>\r
668         IFN FTTTYSER,< PUSHJ PDP,SETBFI>\r
669         SETZB ITEM,CHREC\r
670 GET1:   PUSHJ PDP,TYI\r
671         DATAI TTY,CHREC\r
672         ANDI CHREC,177\r
673         CAIN CHREC,177          ;RUBOUT?\r
674         JRST DELETE\r
675         CAIN    CHREC,33                ;ALTMODE ?\r
676         JRST    GETLN1          ;YES\r
677         CAIE    CHREC,175       ;VARIATION OF ALT-MODE ?\r
678         CAIN    CHREC,176       ;OR YET THIS THIRD VARIATION ?\r
679         JRST    GETLN1          ;YES\r
680 GET2:   PUSHJ PDP,TYO           ;ECHO CHARACTER\r
681         CAIL    CHREC,140       ;IS THIS LOWER CASE?\r
682         TRZ     CHREC,40                ;YES,MAKE IT UPPER CASE\r
683 IFE FTTTYSER,<IDPB CHREC,TAC>\r
684 IFN FTTTYSER,<PUSHJ PDP,PUTCHI  ;STORE CHARACTER\r
685         JFCL            ;IGNORE ERROR RETURN\r
686 >\r
687         CAIE CHREC,15\r
688         AOJA ITEM,GET1\r
689         MOVEI CHREC,12          ;OUTPUT LF\r
690         PUSHJ PDP,TYO           ;TYPE OUT\r
691 IFE FTTTYSER,<  MOVE TAC,LINEP          ;RESET BYTE POINTER>\r
692         JUMPN ITEM,CPOPJ1       ;NULL LINE?\r
693         POPJ PDP,               ;YES, DON'T SKIP RETURN\r
694 \r
695 DELETE: IFN FTTTYSER,< PUSHJ PDP,DCPUTR\r
696         JRST DELET1>\r
697 IFE FTTTYSER,<\r
698         JUMPE ITEM,DELET1       ;AT BEGINNING OF LINE?>\r
699         ADD TAC,[XWD 070000,0]  ;NO, BACK UP BYTE POINTER\r
700         TLNE TAC,400000         ;FINISHED THIS WORD YET?\r
701         ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS>\r
702         MOVEI CHREC,134\r
703         PUSHJ PDP,TYO\r
704         SOJA ITEM,GET1\r
705 \r
706 DELET1: MOVEI CHREC,15\r
707         PUSHJ PDP,TYO\r
708         MOVEI CHREC,12\r
709         PUSHJ PDP,TYO\r
710         JRST GETLIN\r
711 \r
712 GETLN1: SETOM   ITEM            ;MECHANISM USED TO BY-PASS PART OF DIALOGUE\r
713         MOVEI   CHREC,15                ;WHEN ALTMODEIS TYPED.\r
714         JRST    GET2\r
715 \r
716 ;ROUTINE TO TYPE A LINE ON OPERATOR CONSOLE\r
717 ;ECHO CHECK STOPS LINE AND RETURNS\r
718 ;CALL:  DAT SET TO END OF MESSAGE\r
719 \r
720 IFN FTTTYSER,<EXTERNAL CPOPJ>\r
721 \r
722 OPOUT:  IFE FTTTYSER,<MOVE TAC,LINEP>\r
723         IFN FTTTYSER,<MOVEI DAT,TTOBUF(DEVDAT)>\r
724         CONO TTY,1000           ;CLEAR INPUT\r
725 OPOUT1: IFE FTTYSER,<\r
726         CAMN TAC,DAT\r
727         POPJ PDP,>\r
728         CONSZ TTY,40\r
729         JRST OPOUT2             ;ECHO CHECK\r
730         MEXTC\r
731 IFN FTTTYSER,<  JUMPE CHREC,CPOPJ>\r
732         PUSHJ PDP,TYO\r
733         JRST OPOUT1\r
734 \r
735 OPOUT2: MOVEI CHREC,15\r
736         PUSHJ PDP,TYO\r
737         MOVEI CHREC,12\r
738         PUSHJ PDP,TYO\r
739         CONO TTY,1000           ;CLEAR INPUT\r
740 \r
741 ;WAIT TILL OUTPUT BUSY OFF BEFORE TYPING OUT CHAR.\r
742 \r
743 EXTERNAL TCONLN,TYPL\r
744 \r
745 TYO:    PUSHJ PDP,APRCHK        ;CHECK CLOCK\r
746         CONSZ TTY,20\r
747         JRST TYO\r
748         PUSH PDP,TAC\r
749         PUSH PDP,LINE\r
750         MOVE TAC,CHREC\r
751         IMULI TAC,200401\r
752         AND TAC,[OCT 11111111]\r
753         IMUL TAC,[OCT 11111111]\r
754         TLNE TAC,10\r
755         TRO CHREC,200\r
756         DATAO TTY,CHREC\r
757         TRZ CHREC,200\r
758         POP PDP,LINE\r
759         POP PDP,TAC\r
760         POPJ PDP,\r
761 \r
762 ;WAIT TIL INPUT DONE ONE BEFORE RETURNING WITH NEXT CHAR.\r
763 \r
764 TYI:    PUSHJ PDP,APRCHK\r
765         CONSO TTY,40\r
766         JRST TYI\r
767         POPJ PDP,\r
768 \r
769 ;CHECK APR FOR CLOCK FLAG SO TIME USER TYPES IN WILL BE ACCURATE\r
770 \r
771 APRCHK: CONSO APR,1000          ;IS CLOCK FLAG ON?\r
772         POPJ PDP,               ;NO\r
773         CONO APR,1000           ;YES, CLEAR CLOCK FLAG\r
774         AOS TIME                ;INCREMENT TIME\r
775         POPJ PDP,\r
776 \r
777 ICONM:  PUSH    PDP,TAC\r
778         SETTTYO ;INITIALIZE LINE BUFFER\r
779         POP     PDP,TAC\r
780         JRST    CONMES  ;OUTPUT MESSAGE\r
781 \r
782 IFN FTTTYSER,<\r
783 OTSET:  MOVEI   DEVDAT,SCNDDB\r
784         MOVSI   TEM,120 ;TTYCHR\r
785         HRRI    TEM,TIBF(DEVDAT)\r
786         MOVEM   TEM,TTIBUF(DEVDAT)      ;INIT INPUT POINTER\r
787         HRRI    TEM,TDBF(DEVDAT)        ;AND OUTPUT POINTER\r
788         MOVEM   TEM,TTOBUF(DEVDAT)\r
789         JRST    TSETBF          ;NOW CLEAR THE BUFFERS\r
790 >\r
791 \r
792 YESNO:  PUSHJ   PDP,ICONM       ;FIRST OUTPUT THE QUESTION\r
793         PUSHJ   PDP,OPOUT\r
794         PUSHJ   PDP,GETLIN      ;NOW GET RESPONSE\r
795         POPJ    PDP,0   ;JUST A C-R\r
796         NEXTC\r
797         TRZ     CHREC,40        ;FIRST CHAR OF RESPONSE (U.C.)\r
798         CAIN    CHREC,"Y"       ;WAS IT A Y?\r
799         AOS     0(PDP)  ;YES, SKIP\r
800         POPJ    PDP,    ;NO. MAYBE IT WAS "N", SO DONT SKIP\r
801 \r
802 ;CONSTANTS AND PUSH DOWN LIST\r
803 \r
804 ONCEPN=20\r
805 ONCEPD: BLOCK ONCEPN            ;PUSH DOWN LIST\r
806 \r
807 LINEP:  POINT 7,LINBUF          ;INPUT AND OUTPUT LINE BUFFERE\r
808 LINBUF: BLOCK 30\r
809 \r
810 ;MESSAGES\r
811 \r
812 TSEXEC: ASCIZ /MONITOR JUST LOADED\r
813 /\r
814 TODATE: ASCIZ /\r
815 TYPE TODAY'S DATE AS MM-DD-YY\r
816 /\r
817 \r
818 TIMEM:  ASCIZ /\r
819 TYPE TIME AS HHMM\r
820 /\r
821 IOCONF: ASCIZ /\r
822 IO CONFIGURATION\r
823 /\r
824 OPRM:   ASCIZ /\r
825 TYPE NAME OF OPR CONSOLE.\r
826 /\r
827 SYSM:   ASCIZ /\r
828 DO YOU WANT SYSMAK (TYPE Y IF YES, CR IF NO)?\r
829 /\r
830 SYSDM:  ASCIZ /\r
831 EXEC DDT?\r
832 /\r
833 EXECIS: ASCIZ /\r
834 EXEC IS /\r
835 LENGTH: ASCIZ / OCTAL LOCATIONS LONG.\r
836 /\r
837 MXKMES: ASCIZ /MAX K CORE FOR SINGLE USER IS /\r
838 DESMES: ASCIZ /TYPE DESIRED MAX,(DEC), CR IF OK AS IS\r
839 /\r
840 CRLFMS: ASCIZ /\r
841 /\r
842 \r
843 \r
844 ;INITIALIZE SAT SEARCH ENTRIES\r
845 \r
846 ;THIS "DFWUNS" ROUTINE IS CALLED BY MANDATORY ONCE ONLY CODE(LINKSR)\r
847 ;  AFTER ALL MULTIPLE DEVICE DATA BLOCKS HAVE BEEN GENERATED IN CORE\r
848 ;  ABOVE C(SYSSIZ)( AND SYSSIZ HAS BEEN INCREMENTED)\r
849 ;    IT IS CALLED WHETHER OR NOT THE DISK WAS REFRESHED.  IF REFRESHING WAS\r
850 ;  PERFORMED, DFWUNS IS CALLED AFTER REFRES SINCE SYSINI CALLS LINKSR AFTER ONCE.\r
851 \r
852 INTERNAL FTDISK\r
853 IFN FTDISK,\r
854 \r
855 INTERNAL DFWUNS\r
856 EXTERNAL SAT05,JSAT06,SATENT,SATPTR,SATBK2,SATXWD,SATPTR\r
857 EXTERNAL SAT,SENTSZ,DSKDDB,DSKBUF,WSYNC,MQIN,MQOUT,DFGETF,SETFRE\r
858 EXTERNAL WLBIT,NUMBIT,DSKCNT\r
859 \r
860 DFWUNS:\r
861 IFN     FTRC10, <\r
862         PUSHJ   PDP,WRITLK      ;FORCE THE WRITE-LOCK SWITCH SETTINGS  TO BE ZERO.\r
863 \r
864         PUSHJ   PDP,RDSTAT      ;READ VITAL DISK STATISTICS BLOCK, STORE PARAMETERS\r
865         PUSHJ   PDP,CAPCTY      ;DETERMINE CURRENT SYSTEM CAPACITY (HOW MANY DISKS).\r
866         CAMN    TAC,LBHIGH      ;HAS CAPACITY CHANGED SINCE LAST REFRESH ?\r
867         JRST    DFWNZ1          ;NO, EVERYTHING APPPEARS TO BE OKAY.\r
868         SETTTYO                 ;YES, PRINT WARNING MESSAGE...\r
869         PUSHJ   PDP,INLMES\r
870         ASCIZ   /DISK CAPACITY HAS CHANGED SINCE LAST REFRESHING.\r
871 EITHER RESTORE PREVIOUS DISK CONFIGURATION OR REFRESH.\r
872 /\r
873         PUSHJ   PDP,OPOUT       ;START TTY\r
874         PUSHJ   PDP,REF         ;GO THROUGH THE REFRESH DIALOGUE\r
875         JRST    DFWUNS          ;NOW TRY AGAIN.\r
876 DFWNZ1:\r
877 >\r
878         MOVEI TAC,SETENT\r
879         MOVEM TAC,SATPTR\r
880         MOVEI PROG,0\r
881         MOVEI DEVDAT,DSKDDB\r
882         MOVE TAC1,SATBK2\r
883         MOVEM TAC1,DSKBUF(DEVDAT)\r
884         PUSH PDP,WSYNC\r
885         MOVE TAC,JSAT06\r
886         MOVEM TAC,WSYNC\r
887         SKIPA TAC,SATXWD\r
888 \r
889 ;READ EACH SAT BLOCK FROM THE DISK AND SET SATENT TABLE TO MATCH INFO ON DISK.\r
890 \r
891 SETS1:  ADDM TAC1,SATPTR\r
892 SETS2:  PUSH PDP,TAC\r
893         SETZB IOS,DEVIOS(DEVDAT)\r
894         PUSHJ PDP,MQIN          ;READ A SAT BLOCK\r
895         JRST 4,SETS6            ;ERROR HALT\r
896         MOVE DAT,SATPTR         ;RESET THE ENTRY\r
897         MOVE TAC,SATBK2\r
898         MOVEM TAC,2(DAT)\r
899         MOVSI TAC1,400000\r
900         MOVEM TAC1,1(DSAT)\r
901         MOVEI DAT,0\r
902 SETS3:  MOVE AC1,(TAC)          ;COUNT ONE-BITS\r
903         AOJN AC1,SETS3A         ;IS THE WORD = -1?\r
904         ADDI DAT,44             ;YES\r
905         JRST SETS5\r
906 \r
907 SETS3A: SOJE AC1,SETS5          ;NO, IS IT = 0?\r
908 SETS4:  TDNE TAC1,(TAC)         ;NO, COUNT THE BITS\r
909         ADDI DAT,1\r
910         ROT TAC1,-1\r
911         JUMPGE TAC1,SETS4\r
912 \r
913 SETS5:  AOBJN TAC,SETS3         ;LOOP THRU ENTIRE BLOCK\r
914         HRRM DAT,@SATPTR\r
915 \r
916 IFE     FTRC10, <\r
917 ;BITS HAVE BEEN COUNTED, CHECK FOR WRITE-LOCK\r
918         CAIL DAT,NUMBIT         ;BLOCK FULL?\r
919         JRST SETS8\r
920         PUSHJ PDP,DEGETF        ;NO. GET A FREE BLOCK\r
921 \r
922         PUSHJ PDP,SETS7         ;WRITE\r
923         PUSHJ PDP,SETFRE        ;FREE THE BLOCK\r
924 >\r
925 \r
926 SETS5B: MOVEI TAC1,SENTSZ       ;PREPARE TO BUMP SATPTR\r
927         POP PDP,TAC\r
928         AOBJN TAC,SETS1         ;DO ALL SAT BLOCKS\r
929 \r
930 IFE     FTRC10, <\r
931         JRST SAT05              ;RETURN\r
932 >\r
933 \r
934 IFN     FTRC10, <\r
935         HRRZ    TAC,SATPTR\r
936 SETS5X: CAIL TAC,SATTOP\r
937         JRST    SAT05           ;EXIT FROM DFWUNS BACK TO DSKINI IN DSKSER........\r
938         ADDI    TAC,SENTSZ\r
939         MOVEI   TAC1,411000     ;ON THE NEW PDP-10 DISK SYSTEM SET THE SAT ENTRY\r
940         HRRM    TAC1,(TAC)      ; TABLE TO SHOW ALL NON-EXISTENT DISKS AS\r
941         JRST    SETS5X          ; BOTH WRITE-LOCKED AND FULL.\r
942 >\r
943 \r
944 IFE     FTRC10, <\r
945 \r
946 ;WRITE-LOCK DETERMINATION ON THE OLD PDP-6 (DATA PRODUCTS) DISK --\r
947 \r
948 SETS7:  PUSH PDP,TAC            ;SAVE BLOCK ADDRESS\r
949 SETS7A: PUSHJ PDP,MQOUT\r
950         JRST SETS7C             ;ERROR\r
951 SETS7B: POP PDP,TAC\r
952         POPJ PDP,\r
953 SETS7C: MOVE TAC,(PDP)\r
954         MOVE TAC1,DSKCNT(DEVDAT)\r
955         TRNN TAC1,IOIMPM        ;WRITE LOCK?\r
956         JRST 4,SETS7A           ;NO\r
957         MOVEI TAC,WLBIT         ;YES. SET BIT\r
958         ORM TAC,@SATPTR\r
959         JRST SETS7B\r
960 \r
961 SETS8:  MOVEI TAC,SETS9         ;BLOCK FULL, READ FIRST ONE\r
962         HRRM TAC,DSKBUF(DEVDAT)\r
963         HLRZ TAC,@SATPTR\r
964         PUSHJ PDP,MQIN\r
965         JRST 4,.-2              ;ERROR\r
966         HLRZ TAC,@SATPTR        ;WRITE IT BACK\r
967         PUSHJ PDP,SETS7\r
968         MOVEI TAC,SAT           ;RESET\r
969         HRRM TAC,DSKBUF(DEVDAT) \r
970         JRST SETS5B\r
971 \r
972 SETS9:  BLOCK 204\r
973 \r
974 >               ;CLOSE THE IFE FTRC10\r
975 >               ;CLOSES AN IFN FTDISK A COUPLE PAGES BACK.\r
976 \r
977 IFN FTDISK,<\r
978 \r
979 ;DISK REFRESHING ROUTINES ---\r
980 \r
981 IFE     FTRC10, <\r
982 ;DISK REFRESHER FOR THE OLD PDP-6 (DATA PRODUCTS) DISK --\r
983 \r
984 \r
985 EXTERNAL MFDBLK,NUMSAT,CHKCNT,CHKSUM,NUMBLK,DSKINI,SETSAT,DSKCHN,DSKCHL\r
986 \r
987 REFRESH:        MOVEI PROG,0            ;SETUP IO\r
988         MOVEI DEVDAT,DSKDDB\r
989         PUSH PDP,SETSAT\r
990         MOVE TAC,RPOPJ\r
991         MOVEM TAC,SETSET\r
992         PUSHJ PDP,DSKINI\r
993         POP PDP,SETSAT\r
994         MOVEI TAC,DSKCHN\r
995         LSH TAC,1\r
996 \r
997         ADDI TAC,40\r
998         MOVE TAC1,[JSR DSKCHL]\r
999         MOVEM TAC1,(TAC)\r
1000         PUSH PDP,WSYNC\r
1001         MOVE TAC,JSAT06\r
1002         MOVEM TAC,WSYNC\r
1003 \r
1004 ;SETUP NULL SAT BLOCK\r
1005 \r
1006         SETOM DAT\r
1007         MOVE TAC1,[XWD NULBLK,NULBLK+1]\r
1008         SETZM NULBLK\r
1009         BLT TAC1,NULBLK+177\r
1010         MOVEI TAC,NUMBLK                ;END OF BLOCK BYTE POINTER\r
1011         IDIVI TAC,^D36\r
1012         SUBI TAC1,^D36\r
1013         MOVMS TAC1\r
1014         ROT TAC1,-6\r
1015         ADDI TAC,NULBLK\r
1016         HLL TAC,TAC1\r
1017         TLOA TAC,100\r
1018         IDPB DAT,TAC\r
1019         TLNE TAC,770000\r
1020         JRST .-2\r
1021         AOS TAC\r
1022         MOVEM DAT,(TAC)\r
1023         HRLS TAC\r
1024         AOS TAC\r
1025         BLT TAC,NULBLK+177\r
1026 \r
1027 ;SET UP SAT BLOCK WITH MFD AND SAT BLOCKS ALLOCATED\r
1028 \r
1029         MOVE TAC,[XWD NULBLK,SATBL1]\r
1030         BLT TAC,SATBL1+177\r
1031         MOVE TAC,[POINT 1,SATBL1]\r
1032         MOVEI TAC1,NUMSAT\r
1033         HRLM TAC1,SATRET+3\r
1034         ADDI TAC1,3\r
1035         IDPB DAT,TAC\r
1036         SOJG TAC1,.-1\r
1037 \r
1038 ;COMPUTE CHECKSUMS IF REQUIRED\r
1039 \r
1040         MOVEI DAT,CHKCNT\r
1041         JUMPE DAT,REFR1\r
1042         MOVE TAC,[XWD -200,MFD1]\r
1043         PUSHJ PDP,CHKSUM\r
1044         HRLM TAC1,MFDRET+4\r
1045         MOVE TAC,[XWD -200,NULBLK]\r
1046         PUSHJ PDP,CHKSUM\r
1047         HRLM TAC1,SATRET+4\r
1048         MOVE TAC,[XWD -200,SATBL1]\r
1049         PUSHJ PDP,CHKSUM\r
1050         MOVE DAT,TAC1\r
1051 \r
1052 ;RELOCATE POINTERS RELATIVE TO MFDBLK\r
1053 \r
1054 REFR1:  MOVE TAC,MFDBLK\r
1055         HRRM TAC,MFDRET+177\r
1056         HRRM TAC,MFD1+1\r
1057         ADDI TAC,NUMSAT\r
1058         AOS TAC\r
1059         HRRM TAC,SATRET+177\r
1060         HRRM TAC,MFD1+3\r
1061         AOS TAC\r
1062         HRRM TAC,MFDRET+4\r
1063         MOVNI TAC1,NUMSAT\r
1064         MOVSS TAC1\r
1065         HRRI TAC1,1\r
1066         MOVE TAC,MFDBLK\r
1067         HLL TAC,SATRET+4\r
1068         HRRZM TAC1,SATRET+3(TAC1)\r
1069         ADDM TAC,SATRET+3(TAC1)\r
1070         AOBJN TAC1,.-2\r
1071 \r
1072 ;FIX CHECKSUM FOR SATBL1\r
1073 \r
1074         MOVE TAC,MFDBLK\r
1075         IDIVI TAC,NUMBLK\r
1076         HRLM DAT,SATRET+3(TAC)\r
1077         MOVE DAT,TAC\r
1078 \r
1079 ;WRITE BLOCKS ON DISK\r
1080 \r
1081         MOVE TAC,MFDBLK         ;MFD RETREIVAL INFORMATION\r
1082         MOVE TAC1,[XWD -200,MFDRET]\r
1083         MOVEM TAC1,DSKBUF(DEVDAT)\r
1084         SETZB IOS,DEVIOS(DEVDAT)\r
1085         PUSHJ PDP,MQOUT\r
1086         JRST REFER              ;ERROR\r
1087         MOVEI TAC,1\r
1088 REFR2:  MOVE TAC1,[XWD -200,NULBLK]     ;SAT BLOCKS\r
1089         CAMN TAC,DAT\r
1090         MOVE TAC1,[XWD -200,SATBL1]\r
1091         PUSH PDP,TAC\r
1092         ADD TAC,MFDBLK\r
1093         SETZB IOS,DEVIOS(DEVDAT)\r
1094         MOVEM TAC1,DSKBUF(DEVDAT)\r
1095         PUSHJ PDP,MQOUT\r
1096         JRST REFER1             ;ERROR\r
1097         POP PDP,TAC\r
1098         CAIGE TAC,NUMSAT\r
1099         AOJA TAC,REFR2\r
1100         AOS TAC                 ;SAT RETREIVAL INFORMATION\r
1101         ADD TAC,MFDBLK\r
1102         SETZB IOS,DEVIOS(DEVDAT)\r
1103 \r
1104         MOVE TAC1,[XWD -200,SATRET]\r
1105         MOVEM TAC1,DSKBUF(DEVDAT)\r
1106         PUSHJ PDP,MQOUT\r
1107         JRST REFER              ;ERROR\r
1108         MOVE TAC,MFDBLK         ;MFD\r
1109         ADDI TAC,NUMSAT\r
1110         ADDI TAC,2\r
1111         MOVE TAC1,[XWD -200,MFD1]\r
1112         MOVEM TAC1,DSKBUF(DEVDAT)\r
1113         SETZB IOS,DEVIOS(DEVDAT)\r
1114         PUSHJ PDP,MQOUT\r
1115         JRST REFER              ;ERROR\r
1116         POP PDP,WSYNC\r
1117         JRST CPOPJ1\r
1118 \r
1119 REFER1: POP PDP,TAC1\r
1120 REFER:  POP PDP,WSYNC\r
1121 RPOPJ:  POPJ PDP,\r
1122 \r
1123 DEFINE ZEROS (A),<XLIST\r
1124         REPEAT A,<0>\r
1125         LIST>\r
1126 \r
1127 DEFINE ONES (A),<XLIST\r
1128         REPEAT A,<-1>\r
1129         LIST>\r
1130 \r
1131 DEFINE BLOCKR (NAME,EXT,PROT,PROGX,B,F,Z),<\r
1132         NAME\r
1133         EXT\r
1134         EXP PROT*1B8+14812\r
1135         XWD 1,PROGX\r
1136         EXP Z\r
1137         ZEROES 172\r
1138         BYTE (4) F (14) 0 (18) B >\r
1139 \r
1140 MFDRET: BLOCKR <XWD 1,1>,<SIXBIT /UFD/>,45,1,0,4,20     ;MFD RETREIVAL INFO\r
1141 \r
1142 SATBL1: XWD 777776,0            ;THIS SAT BLOCK CONTAINSS\r
1143         ZERSO 5400/44-1         ;ALLOCATION FOR MFD AND SAT BLOCKS\r
1144         XWD 001777,-1\r
1145         ONES 200+SATBL1-.\r
1146 \r
1147 SATRET: BLOCKR <SIXBIT /*SAT*/>,<SIXBIT /SYS/>,555,1,0,1,16\r
1148 \r
1149 MFD1:   XWD 1,1                 ;MFD\r
1150         XWD 654644,0\r
1151         SIXBIT /*SAT*/\r
1152         XWD 637163,17           ;RELOCATED\r
1153         ZEROS 174\r
1154 \r
1155 NULBLK: ZEROS 5400/44-1         ;NULL SAT BLOCK\r
1156         XWD 001777,-1\r
1157         ONES 200+NULBLK-.\r
1158 \r
1159 >               ;END OF THE REFRESHER FOR THE OLD PDP-6 DISK.\r
1160 \r
1161 \r
1162 IFN     FTRC10, <\r
1163 \r
1164 ;DISK REFRESHER FOR THE NEW PDP-10 MODEL RC-10 (BURROUGHS) DISK--\r
1165 \r
1166         EXTERNAL        CPOPJ1,THSDAT,TIME\r
1167         EXTERNAL        MFDBLK,SATXWD,NUMSAT,NUMBLK,SATTOP,SENTSZ\r
1168         EXTERNAL        DISKUP,DFREF,DFWRT,DSKFDG,CHKSUM,RCXCCW,RCXFIN\r
1169         EXTERNAL        K4SWAP\r
1170 IFN FTSWAP,<\r
1171         EXTNERAL        MAXSWP,MXK2SWP,BLKSPK\r
1172 >\r
1173 EXTERNAL LBHIGH\r
1174         INTERNAL        STATBK\r
1175 \r
1176 STATBK=1        ;FIXED LOGICAL BLOCK NUMBER FOR THE "VITAL\r
1177                 ;  STATISTICS" BLOCK OF THE DISK.\r
1178 DSK=170         ;DEFINE DEVICE NUMBER OF THE MODEL RC-10 DISK SYNCHRONIZER.\r
1179 \r
1180 \r
1181 ;THESE NEXT TWO PAGES ARE LIFED DIRECTLY FROM "DSKINIT" IN ORDER TO DEFINE THE\r
1182 ;  CONO AND CONI BITS USED HERE IN "ONCE".\r
1183 \r
1184 ;CONI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --\r
1185 \r
1186 ;BITS 00 - 17   MAINTENANCE PANEL SWITCH SETTINGS INDICATORS --\r
1187         ;BITS 00 - 04   UNUSED\r
1188 MSS=1B5         ;SET INDICATES "MAINTENANCE SEGMENT SELECTED" (SEGMENT 81),\r
1189 PLGSW=1B6       ;1 = WRITE-PROTECT EVERYTHING BELOW (LESS THAN) THE BOUNDARY,\r
1190                 ; 0 = WRITE-PROTECT EVERYTHING ABOVE (GREATER THAN) BOUNDARY,\r
1191                 ;THE CURRENT IMPLEMENTATION OF THE RC-10 DISK SYNCHRONIZER\r
1192                 ;  DOES NOT PERMIT SENSING THE INCLUSION OF THE BOUNDARY.\r
1193         ;BITS 07 - 17   THE WRITE-PROTECTION THE INCLUSION OF THE BOUNDARY.\r
1194 DTOP=1B18       ;SET INDICATES DATA TRANSFER IN PROGRESS.\r
1195 ;BITS 19 -29    ERROR CONDITIONS INDICATORS (ERROR WHEN SET) --\r
1196         SRCHE=1B19      ;SEARCH ERROR (DISK TIMING TRACK PROBLEMS!!)\r
1197         DDE=1B20        ;DISK DESIGNATION ERROR\r
1198         TSE=1B21        ;TRACK SELECT ERROR (OR EXCEEDS SYSTEM CAPACITY)\r
1199         MRDY=1B22       ;DISK NOT READY (OR NON-EXISTENT DISK REFERENCED)\r
1200         PSF=1B23        ;POWER SUPPLY FAILURE\r
1201         DPAR=1B24       ;DISK PARITY ERROR\r
1202         CHDPAR=1B25     ;CHANNEL DATA PARITY ERROR\r
1203         CHCPAR=1B26     ;CHANNEL CONTROL PARITY ERROR\r
1204         NXMEM=1B27      ;NON-EXISTENT MEMORY REFERENCED\r
1205         WRPE=1B28       ;ATTEMPTED TO WRITE IN PROTECTED DISK AREA (SEE BITS 06 - 17)\r
1206         OVR=1B29        ;OVERRUN, I.E., MEMORY DIDN'T RESPOND QUICKLY ENOUGH\r
1207 ;BIT  30        CHANNEL CONTROL WORD WRITTEN IN MEMORY (THIS BIT IS\r
1208                 ;TURNED ON ON ALMOST ALL TERMINATIONS.)\r
1209 BUSYRT=1B31     ;BUSY (SYNCHRONIZER PERFORMING A COMMAND  SEQUENCE)\r
1210 DONEFLG=1B32    ;DONE -- THIS ACTUALLY CAUSES THE INTERRUPT.\r
1211 ;BITS 33 - 35   PI CHANNEL SELECTION BITS.\r
1212 \r
1213 ;COMBINATIONS OF ERRO BITS GROUPED BY TYPE --\r
1214 DATERR=DPAR!CHDPAR              ;DATA ERRORS.\r
1215 DEVERR=SRCHE!PSF!CHCPAR!OVR     ;DEVICE ERRORS.\r
1216 SETERR=DDE!TSE!NRDY!NXMEM       ;SOFTWARE-PREVENTABLE ERRORS.\r
1217 \r
1218 \r
1219 ;CONO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER\r
1220 \r
1221 ;BITS 00 - 17   UNUSED\r
1222 ;BITS 18 - 19   SELECT DISK FOR SECTOR COUNTER READ-OUT A(SEE DATAI BITS 28-35)\r
1223 ;BITS 20 - 29   RESET THE CORRESPONDING CONI ERROR BIT\r
1224                 ;(BUT PSE MAY REFUSE TO BE RESET)\r
1225 WRCCWD=1B30     ;WRITE THE CHANNEL CONTROL WORD INTO MEMORY (NOW!)\r
1226 STPBIT=1B31     ;STOP -- IMMEDIATELY CEASE PRESENT I/O AND CLEAR THE CHANNEL.\r
1227 RESETB=1B32     ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT\r
1228 ;BITS 33 - 35   PI CHANNEL SELECTION BITS\r
1229 \r
1230 ;DATAI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --\r
1231 \r
1232 ;BITS 00 - 17   UNUSED\r
1233 ;BITS 18 - 23   PARITY REGISTER\r
1234 ;BITS 24 - 25   UNUSED\r
1235 ;BITS 26 - 27   DISK SELECTED BY BITS 18-19 OF LAST CONO\r
1236 ;BITS 28 - 35   CURRENT SECTOR POSITION OF SELECTED DISK (FOR LATENCY OPTIMIZATION!)\r
1237 \r
1238 ;DATAO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --\r
1239 \r
1240 ;BITS 00 - 17   DISK ADDRESS ELECTION\r
1241         ;BITS 00 - 01   DISK SELECT\r
1242         ;BITS 02 - 10   TRACK SELECT (BCD, BUT FIRST CHAR IS JUST 1 BIT)\r
1243         ;BITS 11 - 17   SEGMENT SELECT (BCD, BUT FIRST CHAR HAS ONLY 3 BITS)\r
1244 ;BITS 18 - 23   INITIAL PARITY REGISTER SETTING 9ZERO EXCEPT FOR DIAGNOSTIC PROGRAMS)\r
1245 DDSKPE=1B24     ;DISABLE DISK PARITY ERROR STOP\r
1246 DCHNPE=1B25     ;DISABLE CHANNEL DATA PARITY ERROR STOP\r
1247 WRBIT=1B16      ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK\r
1248 ;BITS 27 - 34   ;CORRESPONDING BITS OF INITIAL CHANNEL CONTROL ADDRESS, HENCE,\r
1249                 ; THIS ADDRESS MUST BE EVEN AND IN THE FIRST 1K OF CORE MEMORY!\r
1250 ;BIT 35         ;WRITE EVEN PARITY DATA INTO MEMORY (DIAGNOSTICS ONLY!)\r
1251 \r
1252 \r
1253 REFRESH:\r
1254         PUSHJ   PDP,DISKUP      ;BE SURE THE DISK IS UP AND READY.\r
1255         PUSHJ   PDP,WRITLK      ;BE SURE WRITE-LOCK SWITCHES ARE OFF.\r
1256         PUSHJ   PDP,CAPCTY      ;DETERMINE THE CURRENT DISK CAPACITY OF THE\r
1257                                 ; SYSTEM, I.E. HOW MANY DISKS ARE ATTACHED TODAY ?\r
1258         MOVEM   TAC,LBHIGH      ;STORE HIGHEST LEGAL LOGICAL BLOCK NUMBER\r
1259         AOS     TAC\r
1260 IFN FTSWAP,<\r
1261         MOVE    TAC1,K4SWAP\r
1262         LSH     TAC1,BLKSPK     ;COMPUTE AND SAVE THE LOWEST LOGICAL BLOCK\r
1263         SUBM    TAC,TAC1        ; NUMBER RESERVED FOR SWAPPING.\r
1264         MOVEM   TAC1,LOWSWP\r
1265         CAIG    TAC1,STATBK     ;SWAPPING AREA MUST NOT OVERLAY THE\r
1266         JRST    RFRSHE          ; VITAL STATISTICS BLOCK.\r
1267 >\r
1268         IDIVI   TAC1,NUMBLK\r
1269         MOVN    TAC1,TAC        ;SET SATXWD TO SHOW ONLY THE NUMBER OF\r
1270         HRLM    TAC1,SATXWD     ; SAT BLOCKS ACTUALLY IN EXISTENCE.\r
1271         HRRZ    TAC1,MFDBLK\r
1272         ADDI    TAC,2(TAC1)\r
1273 IFN FTSWAP,<\r
1274         CAML            TAC,LOWSWP      ;MAKE VARIOUS CONSISTENCY CHECK TO DETERMINE\r
1275         JRST    RFRSHE          ; THAT THE DISK PARAMETERS SPECIFIED DURING THE\r
1276 >\r
1277         CAIG    TAC1,STATBK     ; ONCE-ONLY DIALOGUE DO NOT CAUS THE DISK\r
1278         CAIGE   TAC,STATBK      ; SWAPPING AREA, VITAL STATISTICS BLOCK, AND/OR\r
1279         JRST    RFRSH1          ; THE MFD AND SAT BLOCK TO OVERLAP ONE ANOTHER.\r
1280 RFRSHE: MOVEI   TAC,RFSHME\r
1281                                 ;IF THERE IS SOME OVERLAPPING OF\r
1282         PUSHJ   PDP,IOCON       ; THESE DISK STORAGE AREAS, PRING AN\r
1283         PUSHJ   PDP,OPOUT       ; ERROR MESSAGE AND THEN GO BACK TO THE\r
1284         POP     PDP,TAC         ; DIALOGUE TO AK THE PARAMETER SPECIFICATION\r
1285         JRST    REF6            ; QUESTIONS AGAIN.\r
1286 \r
1287 RFSHME: ACSIZ   /PARAMETER SPECIFICATION ERROR. TRY AGAIN.\r
1288 /\r
1289 \r
1290 RFRSH1: PUSHJ   PDP,WRSTAT      ;WRITE OUT THE VITAL STATISTICS BLOCK ON THE DISK.\r
1291         JRST    REFERR          ; AN ERROR ON THIS WRITE IS BAD TROUBLE !!\r
1292 \r
1293 ;NEXT WRITE THE MFD (MASTER FILE DIRECTORY) ONTO THE DISK\r
1294 \r
1295         PUSHJ   PDP,WNZCLR      ;CLEAR THE OUTPUT BUFFER\r
1296         MOVE    TAC,[XWD 1,1]   ;THE FIRST ENTRY IN THE MFD IS FOR\r
1297         MOVEM   TAC,WNZBUF      ; THE MFD ITSELF.\r
1298         MOVE    TAC,[SIXBIT/UFD/]\r
1299         HRR     TC,MFDBLK       ;POINTER TO MFD RETRIEVAL INFORMATION\r
1300         MOVEM   TAC,WNZBUF+1\r
1301         MOVE    TAC,[SIXBIT/*SAT*/]     ;THE ONLY OTHER ENTRY INITIALLY IN THE\r
1302         MOVEM   TAC,WNZBUF+2            ; MFD IS FOR THE FILE NAMED *SAT*.SYS WHICH\r
1303         HLRZ    TAC1,SATXWD             ; PERMITS ACCESS TO THE SAT BLOCKS FOR\r
1304         HRRZ    TAC,MFDBLK              ; ANYONE WHO WANTS TO LOOK AT THEM.\r
1305         SUBI    TAC,-1(TAC1)    ;COMPUTE POINTER TO THE RETRIEVAL INFORMATION\r
1306         HLL     TAC,[SIXBIT/SYS/]       ; FOR THE *SAT*.SYS FILE.\r
1307         MOVEM   TAC,WNZBYUF+3\r
1308         HRRZS   TAC\r
1309         ADDI    TAC,1           ;COMPUTE LOGICAL BLOCK NUMBER OF THE MFD.\r
1310         PUSHJ   PDP,WNZWR       ;WRITE THE MFD OUT ONTO THE DISK.\r
1311         \r
1312         JRST    REFERR          ;ERROR\r
1313 \r
1314         MOVE    TAC,[XWD -200,WNZBUF]\r
1315         PUSHJ   PDP,CHKSUM\r
1316         HRRZM   TAC1,CHKSAV     ;SAVE CHECKSUM TO GO INTO RETRIEVAL INFORMATION.\r
1317 \r
1318 ;NEXT WRITE MFD RETRIEVAL INFORMATION BLOCK ONTO THE DISK\r
1319 \r
1320         PUSHJ   PDP,WNZCLR      ;CLEAR OUTPUT BUFFER\r
1321         MOVE    TAC,[XWD 1,1]\r
1322         MOVEM   TAC,WNZBUF      ;FILE NAME\r
1323         HRRZ    TAC,THSDAT\r
1324         HLL     TAC,[SIXBIT /UFD/]\r
1325         MOVEM   TAC,WNZBUF+1    ;FILE EXTENSION, DATE\r
1326         HRLZI   TAC,045000      ;PROTECTION (ANY PROJECT 1 USER MAY WRITE IN MFD)\r
1327         PUSHJ   PDP,MDTMDT      ;FILL IN TIME, DATE, AND MODE\r
1328         MOVEM   TAC,WNZBUF+2\r
1329         MOVE    TAC,[XWD -200,1]        ;NEGATIVE WORD COUNT AND PROGRAMMER NUMBER\r
1330         MOVEM   TAC,WNZBUF+3    ;GO INTO WORD 4 OF RETRIEVAL INFO\r
1331         HLRZ    TAC1,SATXWD\r
1332         MOVE    TAC,MFDBLK\r
1333         SUBI    TAC,-2(TAC1)    ;COMPUTE POINTER TO THE MFD.\r
1334         HRL     TAC,CHKSAV      ;RETRIEVE SAVED CHECKSUM OF MFD.\r
1335         MOVEM   TAC,WNZBUF+4\r
1336         MOVE    TAC,MFDBLK      ;THE LAST WORD OF ANY BLOCK OF RETRIEVAL INFORMATION\r
1337         MOVEM   TAC,WNZBUF+177  ; MUST CONTAIN ITS OWN BLOCK NUMBER.\r
1338         PUSHJ   PDP,WNZWR       ;WRITE MFD RETRIEVAL INFOMRATION ONTO THE  DISK\r
1339         JRST    REFERR          ;ERROR\r
1340 \r
1341 ;NEXT CREATE THE NECESSARY SAT BLOCKS ON THE DISK\r
1342 \r
1343         PUSH    PDP,SATXWD      ;SATXWD CONTROLS THE OUTER LOOP\r
1344         MOVEI   TAC,SATENT      ;SET UP SATPTR TO SHUFFLE THROUGH THE BLOCKS\r
1345 \r
1346 REFST1: MOVEM   TAC,SATPTR\r
1347         PUSHJ   PDP,WNZCLR      ;CLEAR THE BUFFER\r
1348         MOVEI   TAC1,NUMBIT\r
1349         SUBI    TAC1,NUMBLK\r
1350         MOVEI   TAC,NUMBLK\r
1351         PUSHJ   PDP,SETWNZ      ;MARK UNAVAILABLE BITS AT END OF THE BLOCK\r
1352 IFN FTSWAP,<\r
1353         HLRZ    TAC1,@SATPTR    ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK\r
1354         CAMGE   TAC1,LOWSWP     ;IS ENTIRE BLOCK WITHIN SWAPPING AREA?\r
1355         JRST    REFST2          ;NO, JUMP AHEAD\r
1356         MOVEI   TAC1,NUMBIT     ;YES, MARK IT ALL OFF LIMITS\r
1357         MOVEI   TAC,0\r
1358         PUSHJ   PDP,SETWNZ\r
1359         JRST    REFST7          ;HAVING SET ALL BITS, NO FURTHER TESTING IS NEEDED,\r
1360 >\r
1361 REFST2: MOVN    TAC,TAC1\r
1362         ADDI    TAC1,NUMBLK\r
1363         SUB     TAC1,LOWSWP     ;IS ANY OF SWAPPING AREA WITHIN THIS SAT BLOCK?\r
1364         JUMPLE  TAC1,REFST3     ;NO, JUMP AHEAD\r
1365         ADD     TAC,LOWSWP      ;YES, MARK SWAPPING AREA AS UNAVAILABLE.\r
1366         PUSHJ   PDP,SETWNZ\r
1367 >\r
1368 REFST3: HLRZ    TAC1,@SATPTR    ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK.\r
1369         JUMPN   TAC1,RFST3A     ;ONLY FOR FIRST SAT BLOCK--\r
1370         HRLZI   TAC,400000      ;MARK LOGICAL BLOCK 0 AS BEING IN USE.\r
1371         IORM    TAC,WNZBUF\r
1372 RFST3A: HRRZI   TAC,STATBK\r
1373         CAIL    TAC,(TAC1)      ;IS THE VITAL STATISTICS BLOCK WITHIN\r
1374         CAIL    TAC,NUMBLK(TAC1)        ; THE RANGE OF THIS SAT BLOCK ?\r
1375         JRST    REFST4          ;NO, JUMP AHEAD\r
1376         SUB     TAC,TAC1\r
1377         MOVEI   TAC1,1          ;YES, MARK IT UNAVAILABLE,\r
1378         PUSHJ   PDP,SETWNZ\r
1379 \r
1380 REFST4: MOVE    TAC,SATXWD      ;SET UP TO LOOP THRU LOGICAL BLOCK NUMBERS FOR MFD.\r
1381         SUB     TAC,[XWD 3,1]   ; MFD RETRVL INFO. SAT BLOCKS, AND SAT RETRVL INFO.\r
1382 \r
1383 REFST5: PUSH    PDP,TAC\r
1384         HRRZS   TAC\r
1385         HLRZ    TAC1,@SATPTR\r
1386         CAIL    TAC,(TAC1)      ;IS THE INDICATED LOGICAL BLOCK NUMBER WITHIN\r
1387         CAIL    TAC,NUMBLK(TAC1)        ; THIS PARTICULAR SAT BLOCK ?\r
1388         JRST    REFST6          ;NO, JUMP AHEAD\r
1389         SUB     TAC,TAC1\r
1390         MOVEI   TAC1,1          ;YES, MARK IN-USE BIT.\r
1391         PUSHJ   PDP,SETWNZ\r
1392 \r
1393 REFST6: POP     PDP,TAC         ;LOOP THROUGH THE WHOLE SET OF SPECIAL BLOCKS\r
1394         AOBJN   TAC,REFST5      ; WHICH MUST BE MARKED UNAVAILABLE.\r
1395 \r
1396 REFST7: MOVE    TAC,[XWD -200,WNZBUF]\r
1397 \r
1398         PUSHJ   PDP,CHKSUM      ;COMPUTE CHECKSUM\r
1399         MOVE    TAC,SATPTR\r
1400         HRRZM   TAC1,1(TAC)     ;STORE IT TEMPORARILY IN THE SATENT TABLE.\r
1401 \r
1402         HRRZ    TAC,(PDP)       ;LOGICAL BLOCK NUMBER TO BE WRITTEN\r
1403         PUSHJ   PDP,WNZWR       ;WRITE THIS SAT BLOCK ONTO THE DISK\r
1404         JRST    REFER1          ;ERROR\r
1405 \r
1406         POP     PDP,TAC\r
1407         AOBJN   TAC,.+2         ;LAST SAT BLOCK WRITTEN ?\r
1408 \r
1409         JRST    REFSRF          ;YES, GO WRITE SAT RETRIEVAL INFORMATION.\r
1410 \r
1411         PUSH    PDP,TAC         ;NO, ADVANCE SATPTR AND LOOP\r
1412         MOVE    TAC,SATPTR      ; BACK TO DO NEXT SAT BLOCK.\r
1413         ADDI    TAC,SENTSZ\r
1414         JRST    REFST1\r
1415 \r
1416 ;FINALLY, WRITE OUT THE RETRIEVAL INFORMATION FOR THE FILE *SAT*.SYS\r
1417 \r
1418 REFSRF: PUSHJ   PDP,WNZCLR      ;CLEAR THE BUFFER\r
1419         MOVE    TAC,[SIXBIT /*SAT*/]\r
1420         MOVEM   TAC,WNZBUF      ;STORE FILE NAME\r
1421         HRRZ    TAC,THSDAT\r
1422         HLL     TAC,[SIXBIT /SYS/]\r
1423         MOVEM   TAC,WNZBUF+1    ;STORE EXTENSION AND DATE\r
1424         HRLZI   TAC,555000      ;PROTECTION CODE (UNTOUCHABLE FILE ! )\r
1425         PUSHJ   PDP.MDTMDT      ;FILL IN TIME, DATE AND MODE\r
1426         MOVEM   TAC,WNZBUF+2\r
1427         HLLZ    TAC,SATXWD      ;COMPUTE NEGATIVE WORD COUNT\r
1428         LSH     TAC,7\r
1429         HRRI    TAC,1           ;PROGRAMMER NUMBER=1\r
1430         MOVEM   TAC,WNZBUF+3\r
1431 \r
1432         MOVEI   TAC,SATENT      ;PREPARE TO STORE POINTERS TO ALL THE SAT BLOCKS.\r
1433         MOVE    TAC1,SATXWD\r
1434         MOVEI   AC2,0\r
1435 \r
1436 REFSRL: HRRZ    AC1,TAC1        ;GET LOGICAL BLOCK NUMBER OF SAT BLOCK.\r
1437         HRL     AC1,1(TAC)      ;RETRIEVE THE CORRESPONDING CHECK-SUM.\r
1438         MOVEM   AC1,WNZBUF+4(AC2)       ;STORE A POINTER WORD IN THE BUFFER.\r
1439         MOVSI   AC1,400000      ;RESTORE SATENT ENTRY TO CORRECT INITIAL VALUE.\r
1440         MOVEM   AC1,1(TAC)\r
1441         AOS     AC2\r
1442         ADDI    TAC,SENTSZ\r
1443         AOBJN   TAC1,REFSRL     ;IS THAT ALL THE POINTERS ?  IF NOT, LOOP BACK.\r
1444 \r
1445         MOVE    TAC,MFDBLK      ;YES.\r
1446         ADDI    TAC,1(AC2)      ;NOW COMPUTE LOGICAL BLOCK NUMBER OF THIS SAT\r
1447         MOVEM   TAC,WNZBUF+177          ; RETRIEVAL INFORMATION, AND STORE IT IN\r
1448                                         ; THE LAST WORD OF THE BLOCK (THIS IS\r
1449                                         ; REQUIRED FORMAT OF ALL RETRVL INFO).\r
1450 \r
1451         PUSHJ   PDP,WNZWR       ;WRITE THE *SAT*.SYS RETRVL INFO ONTO THE DISK.\r
1452         JRST    REFERR          ;ERROR\r
1453 \r
1454         JRST    CPOPJ1          ;***EXIT FROM PDP-10 DISK REFRESHER.***.........\r
1455 \r
1456 \r
1457 ;ROUTINE TO WRITE THE FIXED BLOCK OF VITAL STATISTICS ONTO THE DISK.\r
1458 \r
1459 WRSTAT: PUSHJ   PDPWNZCLR               ;CLEAR THE OUTPUT BUFFER\r
1460         MOVE    TAC,[XWD -WRSTSZ,0]\r
1461 WRSTA1: MOVE    TAC1,@WRSTA9(TAC)       ;STORE KEY QUANTITIES IN THE OUTPUT BUFFER\r
1462         MOVEM   TAC1,WNZBUF(TAC)\r
1463         AOBJN   TAC,WRSTA1\r
1464 \r
1465         MOVE    TAC,[SIXBIT/STATBK/]    ;STORE AN IDENTIFIER NEAR THE \r
1466         MOVEM   TAC,WNZBUF+^D126        ; END OF THE VITAL STATISTICS BLOCK.\r
1467 \r
1468         MOVEI   TAC,STATBK\r
1469         PUSHJ   PDP,WNZWR       ;WRITE THIS VITAL STATISTICS BLOCK ONTO THE DISK.\r
1470         JRST    WRSTA2          ;WRITE ERROR\r
1471         JRST    CPOPJ1          ;GOOD WRITE.    ***SUBROUTINE EXIT***...........\r
1472 \r
1473 \r
1474 WRSTA2: MOVEI   TAC,WRSTM1\r
1475         PUSHJ   PDP,ICONM       ;PRINT ERROR MESSAGE IF THIS VITAL WRITE FAILS.\r
1476         PUSHJ   PDP,OPOUT\r
1477         POPJ    PDP,            ;THEN ALSO GIVE AN ERROR RETURN FOR FURTHER ACTION.\r
1478 \r
1479 WRSTM1: ASCIZ   /CANNOT WRITE VITAL STATISTICS BLOCK ON DISK.   HELP!!\r
1480 /\r
1481 \r
1482 ;TABLE OF POINTERS TO THE VITAL STATISTICS THAT ARE STORED IN "STATBK" ON THE DISK.\r
1483 \r
1484 WRSTA9: XWD     ,MFDBLK         ;LOGICAL BLOCK NUMBER OF MFD RETRIEVAL INFORMATION\r
1485         XWD     ,SATXWD         ;LH = - NUMBER OF SAT BLOCKS ACTUALLY IN EXISTENCE.\r
1486                                 ;RH = LOGICAL BLOCK NUMBER OF FIRST SAT BLOCK\r
1487         XWD     ,LBHIGH         ;HIGHEST LEGAL LOGICAL BLOCK NUMBER ON DISK(S)\r
1488         XWD     ,LOWSWP         ;LOWEST LOGICAL BLOCK NUMBER ALLOCATED FOR SWAPPING\r
1489         XWD     ,K4SWAP         ;NUMBER OF 1K BLOCKS OF DISK SPACE FOR SWAPPING\r
1490 IFN FTSWAP,<\r
1491         XWD     ,MAXSWP         ;MAXIMUM NUMBER OF THOSE 1K BLOCKS ACTUALLY\r
1492                                 ; USED SINCE THE DISK WAS LAST REFRESHED.\r
1493 >\r
1494 IFE FTSWAP,<\r
1495         XWD     0,LOWSWP        ;LOWSWP DOES DOUBLE DUMMY DUTY IN\r
1496                                 ; NON-SWAPPING SYSTEM\r
1497 >\r
1498         WRSTSZ=.-WRSTA9\r
1499 \r
1500 ;ROUTINE TO READ IN THE FIXED BLOCK OF "VITAL STATISTICS" FROM\r
1501 ;  THE DISK AND DISTRUBUTE THEM TO THE APPROPRIATE CORE LOCATIONS.\r
1502 \r
1503 RDSTAT: MOVEI   TAC,STATBK\r
1504         PUSHJ   PDP,WNZRD       ;READ IN THE VITAL STATISTICS BLOCK.\r
1505         JRST    RDSTA2          ;ERROR\r
1506         MOVE    TAC,WNZBUF+^D126                ;CHECK THE IDENTIFIER TO VERIFY THAT\r
1507         CAME    TAC,[SIXBIT     /STATBK/]       ; THE CORRECT BLOCK WAS READ.\r
1508         JRST    RDSTA2          ;ERROR, STATISTICS BLOCK APPARENTLY WAS CLOBBERED.\r
1509 \r
1510         MOVE    TAC,[XWD -WRSTSZ,0]     ;STORE AWAY THESE IMPORTANT PARAMETERS\r
1511 RDSTA1; MOVE    TAC1,WNZBUF(TAC)        ; UNDER CONTROL OF A TABLE IN THE "WRSTAT"\r
1512         MOVEM   TAC1,@WRSTA9(TAC)       ; ROUTINE WHICH WRITES OUT THE VITAL\r
1513         AOBJN   TAC,RDSTA1              ; STATISTICS BLOCK ONTO THE DISK.\r
1514 \r
1515         POPJ    PDP,            ;***SUBROUTINE EXIT***........\r
1516 \r
1517 RDSTA2: MOVEI   TAC,RDTM1\r
1518                                 ;PRINT ERROR MESSAGE IF THE VITAL\r
1519         PUSHJ   PDP,ICONM       ; STATISTICS BLOCK CANNOT BE READ\r
1520         PUSHJ   PDP,OPOUT\r
1521         PUSHJ   PDP,REF         ;GO THRU THE REFRESH DIALOGUE IN "ONCE".\r
1522         JRST    RDSTAT          ;NOW TRY AGAIN.\r
1523 \r
1524 RDSTM1: ASCIZ   /VITAL DISK STATISTICS LOST, SUGGEST REFRESHING!\r
1525 /\r
1526 \r
1527 ;ROUTINE TO DETERMINE THE CURRENT SYSTEM'S DISK CAPACITY. I.E., THE NUMBER OF\r
1528 ;  DISKS ATTACHED TO THE RC-10 DISK SYNCHRONIZER TODAY.\r
1529 \r
1530 ;ON EXIT FROM THIS SUBROUTINE\r
1531 ;                  C(TAC) = HIGHEST LOGICAL DISK BLOCK NUMBER NOW EXTANT.\r
1532 \r
1533 CAPCTY: MOVEI   TAC,NUMSAT\r
1534         IMULI   TAC,NUMBLK      ;COMPUTE AND SAVE MAXIMUM POSSIBLE CAPACITY.\r
1535         PUSH    PDP,LBHIGH      ;SAVE EXISTING VALUE OF HIGHEST LEGAL BLOCK NUMBER.\r
1536         MOVEM   TAC,LBHIGH      ;TEMPORARILY CHANGE THIS VALYUE SO THAT THE VALIDITY\r
1537                                 ; CHECK IN "DSKINT" WILL NOT FAIL SPURIOUSLY.\r
1538 \r
1539         MOVEI   TAC,3\r
1540 CPCT1;  PUSH    PDP,TAC\r
1541         PUSHJ   PDP,WNZRD       ;ATTEMPT TO READ FIRST BLOK OF EACH SUCCESSIVE DISK.,\r
1542         JRST    CPCT3           ;ERROR\r
1543         POP     PDP,TAC\r
1544         ADDI    TAC,NUMBLK\r
1545         CAMGE   TAC,LBHIGH      ;ALREADY TRIED ALL DISKS (MAXIMUM CAPACITY) ?\r
1546         JRST    CPCT1           ;NO, GO TRY THE NEXT ONE.\r
1547 \r
1548 CPCT2:  SUBI    TAC,1   \r
1549         POP     PDP,LBHIGH      ;RESTORE PREVIOUSLY EXISTING VALUE OF THE HIGHEST\r
1550                                 ; LEGAL LOGICAL DISK BLOCK NUMBER.\r
1551         POPJ    PDP,            ;***SUBROUTINE EXIT***.......\r
1552 \r
1553 CPCT3:  POP     PDP,TAC\r
1554         CONSZ   DSK,NRDY        ;NON-EXISTENT DISK?\r
1555         JUMPN   TAC,CPCT2       ;YES, THE LIMIT OF DISK STORAGE HAS BEEN FOUND.\r
1556                                 ; HOWEVER, DISK 0 MUST ALWAYS BE PRESENT.\r
1557 \r
1558         MOVEI   TAC,CPCTM1      ;NO, SOME OTHER TYPE OF READ ERROR.\r
1559         PUSHJ   PDP,IOCONM      \r
1560         PUSHJ   PDP,OPOUT       ;PRINT ERROR MESSAGE\r
1561         POP     PDP,LBHIGH\r
1562         JRST    CAPCTY          ;TRY AGAIN\r
1563 CPCTM1: ACSIZ   /DISK READ ERROR DURING CAPACITY SEARCH INITIALIZATION\r
1564 /\r
1565 \r
1566 \r
1567 ;ROUTINE TO ASSURE THAT THE STATUS OF THE WRITE-LOCK SWITCHES ON THE\r
1568 ;  DISK MAINTENANCE PANEL IS SUCH THAT THEY ARE PROTECTING "LESS THAN 0000".\r
1569 \r
1570 ;THIS ROUTINE LOOPS PRINTING AN ERROR MESSAGE UNTIL THE SWITCHES ARE O.K.\r
1571 \r
1572 WRITLK: CONI    DSK,TAC\r
1573         TLNN    TAC,13777       ;BOUNDARY ZERO AND MAINTENANCE-SEGMENT OFF ?\r
1574         TLNN    TAC,<PLGW>B53   ;YES, IS ROTARY SWITCH SET\r
1575                                 ; TO EITHER X UNDER OR OVER(AS OPPOSED\r
1576                                 ; TO UNDER OR X OVER)\r
1577         JRST    WRLK8           ;NO. GO PRINT ERROR MESSAGE AND LOOP.\r
1578 \r
1579 ;AN UNFORTUNATE HARDWARE OVERSIGHT MAKES IT IMPOSSIBLE TO SENSE THE DIFFERENCE\r
1580 ;  BETWEEN "PROTECT LESS THAN" AND "PROTECT LESS THAN OR EQUAL".  THEREFORE\r
1581 ;  THIS ROUTINE MUST ACTUALLY TRY WRITING ON TRACK 0000.\r
1582         MOVE    TAC,[252525252525]\r
1583         MOVEM   TAC,WNZBUF\r
1584         MOVE    TAC,[XWD WNZBUF,WNZBUF+1]\r
1585 \r
1586         BLT     TAC,WNZBUF+177\r
1587         MOVEI   TAC,0\r
1588         PUSHJ   PDP,WNZWR       ;WRITE PATTERN IN BLOCK 0.\r
1589         JRST    WRLK2           ;ERROR\r
1590         POPJ    PDP,            ;***GOOD EXIT FROM WRITLK SUBROUTINE***.........\r
1591 \r
1592 WRLK2:  MOVEI   TAC,WRLKM1\r
1593         CONSZ   DSK,WRPE        ;WRITE-PROTECTION ERROR ?\r
1594                                 ;YES, PROTECT SWITCH ERRONEOUSLY SET ON "LESS THAN\r
1595                                 ; OR EQUAL" INSTEAD OF "LESS THAN".\r
1596                                 ;NO, SOME OTHER FAILURE DURING THE WRITE OF BLOCK 0.\r
1597 WRLK8:  MOVEI   TAC,WRLKM2      ;WRITE-LOCK SWITCHES SET INCORRECTLY.\r
1598 WRLK9:  PUSHJ   PDP,ICONM       ;PRINT ERROR MESSAGE\r
1599         PUSHJ   PDP,OPOUT\r
1600         JRST    WRITLK          ;GO TRY AGAIN\r
1601 \r
1602 WRLKM1: ASCIZ   /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK.\r
1603 /\r
1604 WRLKM2: ASCIZ   /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND\r
1605 DIS WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN",\r
1606 FIX THEM ! !\r
1607 /\r
1608 \r
1609 ;DISK READING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.\r
1610 ;  AVOIDS USING THE MONITOR OUFUFS AND INTERRUPT STRUCTURE.\r
1611 \r
1612 ;ON ENTRY TO THIS SUBROUTINE, TAG CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK\r
1613 ;  BLOCK WHICH IS TO BE READ INTO THE ONCE-ONLY DISK BUFFER AREA.\r
1614 \r
1615 WNZRD:  CONO    DSK,DATERR!DEVERR!SETERR!RESETB         ;CLEAR THE DISK SYNCHRONIZER\r
1616         CONSZ   DSK,BUSYBT!DONEFLG\r
1617         JRST    WNZRD           ;DON'T PROCEED UNLESS THE CLEAR WORKED.\r
1618 \r
1619         PUSH    PDP,DSKFDG      ;SAVE THIS INSTRUCTION FROM "DSKINT"\r
1620         MOVE    TAC1,[HRRZI TAC,0]      ;NOW TAMPER WITH THAT SAVED LOCATION SO\r
1621         MOVEM   TAC1,DSKFDG     ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.\r
1622         MOVE    TAC1,[XWD -200,WNZBUF-1]\r
1623         PUSHJ   PDP,DFRED       ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.\r
1624 WNZRDC: POP     PDP,DSKFDG      ;RESTORE THE MOLESTED INSTRUCTION IN DSKINT.\r
1625         \r
1626         PUSHJ   PDP,WNZWAT      ;WAIT UNTIL THE READ IS FINISHED.\r
1627 \r
1628         CONSZ   DSK,DATERR!DEVERR!SETERR                ;ANY ERRORS ?\r
1629         JRST    WNZRDX          ;YES, GIVE ERROR RETURN.\r
1630         MOVE    TAC1,RCXCCW     ;NO, BUT CHECK THAT THE FINAL VALUE OF THE\r
1631         CAMN    TAC1,RCXFIX     ; CHANNEL CONTROL WORD WAS AS EXCPECTED ALSO.\r
1632         AOS     (PDP)           ;***GOOD RETURN***........\r
1633 WNZRDX: POPJ    PDP,            ;ERROR RETURN,\r
1634 \r
1635 \r
1636 ;DISK WRITING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.\r
1637 ;  AVOIDS USING THE MONITOR QUEUES AND INTERRUPT STRUCTURE.\r
1638 \r
1639 ;ON ENTRY TO THIS SUBROUTINE, TAC CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK\r
1640 ;  BLOCK WHICH IS TO BE WRITTEN ONTO THE DISK FROM THE ONCE-ONLY DISK BUFFER AREA.\r
1641 \r
1642 WNZWR:  CONO    DSK,DATERR!DEVERR!SETERR!RESCIG         ;CLEAR THE DISK SYNCHRONIZER.\r
1643         CONSZ   DSK,BUSYBT!DONEFLG\r
1644         JRST    WNZWR           ;DON'T PROCEED UNLESS THAE CLEAR WORKED.\r
1645 \r
1646         MOVEM   TAC,LBSAVE      ;SAVE LOGICAL BLOCK NUMBER IN CASE AN ERROR RETURN\r
1647                                 ; MUST BE TAKEN FROM THE "REFRESH" SUBROUTINE.\r
1648         PUSH    POP,DSKFDG      ;SAVE THIS ISNTRUCTION FROM "DSKINT".\r
1649         MOVE    TAC1,[HRRZI TAC,0]      ;NOW TAMPER WITH THAT SAVED LOCATION SO\r
1650         MOVEM   TAC1,DSKFDG     ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.\r
1651         MOVE    TAC1,[XWD -200,WNZPUT-1]\r
1652         PUSHJ   PDP,DFWRT       ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.\r
1653 \r
1654         JRST    WNZRDC          ;THE REMAINDER OF THE WRITE ROUTINE IS IDENTICAL\r
1655                                 ; TO THE READ ROUTINE\r
1656 \r
1657 ;SUBROUTINE TO WATCH FOR THE DONE FLAG TO COME ON AND TIME OUT IF\r
1658 ; IT DOESN'T COME UP SOON ENOUGH (SAY 5 SEC OR SO).\r
1659 \r
1660 WNZWAT: MOVE    TAC,[^D1000000] ;AT MOST ONE MILLION TIMES THRU THE CONSZ-SOJG LOOP\r
1661 WNZWTL: CONSZ   DSK,DONEFLG     ;DONE FLAG ON YET ?\r
1662         POPJ    PDP,            ;YES, GOOD EXIT.......\r
1663         SOJG    TAC,WNZWTL      ;NO, TIMED OUT YET ?\r
1664                                 ;YES, PRINT "DISK HUNG" ERROR MESSAGE.\r
1665         MOVEI   TAC,WATMSG\r
1666         PUSHJ   PDP,ICONM\r
1667         PUSHJ   PDP,OPOUT\r
1668         POP     PDP,TAC         ;SKIP UP A SUBROUTINE LEVEL, AND GIVE AN\r
1669         POPJ    PDP,            ; ERROR RETURN FROM WNZRD OR WNZWR.......\r
1670 WATMSG: ASCIZ   /DISK HUNG.\r
1671 /\r
1672 \r
1673 ;SUBROUTINE TO SET SPECIFIED BITS IN A SAT BLOCK WHILE FORMING IT IN WNZBUF\r
1674 \r
1675 ;ENTRY CONDITIONS --    C(TAC) = FIRST BIT NUMBER TO SET (NUMBERED BEGINNING AT 0)\r
1676 ;                       C(TAC1) = NUMBER OF BITS TO SET\r
1677 \r
1678 SETWNZ: MOVE    AC1,TAC1\r
1679         IDIVI   TAC,^D36\r
1680         MOVSI   AC2,400000\r
1681         MOVNS   TAC1\r
1682         ROT     AC2,(TAC1)\r
1683 STWNZ1: ORM     AC2,WNZBUF(TAC)\r
1684         ROT     AC2,-1\r
1685         JUMPG   AC2,STWNZ2\r
1686         ADDI    TAC,1\r
1687 STWNZ2: SOJN    AC1,STWNZ1\r
1688         POPJ    PDP,            ;SUBROUTINE EXIT...........\r
1689 \r
1690 ;SUBROUTINE TO CLEAR THE ONCE-ONLY OUTPUT BUFFER, WNZBUF\r
1691 WNZCLR: SETZM   WNZBUF\r
1692         MOVE    TAC,[XWD WNZBUF,WNZBUF+1]\r
1693         BLT     TAC,WNZBUF+177\r
1694         POPJ    PDP,            ;SUBROUTINE EXIT...........\r
1695 \r
1696 ;SUBROUTINE TO MASK THE TIME, DATE, AND DATA MODE (=14 FOR BINARY MODE0 INTO ACCUMU-\r
1697 ;  LATOR TAC IN THE FORMAT USED IN WORD 3 OF A DISK RETRIEVAL INFORMATION BLOCK.\r
1698 \r
1699 MDTMDT: PUSH    PDP,TAC\r
1700         MOVE    TAC,TIME        ;GET TIME IN JIFFIES.\r
1701         IDIVI   TAC,JIFMIN      ;CONVERT TO MINUTES\r
1702         LSH     TAC,^D12\r
1703         IOR     TAC,THSDAT      ;TODAY'S DATE\r
1704         TLO     TAC,14B<^D12*^D18>      ;BINARY MODE\r
1705         IORM    TAC,(PDP)\r
1706         POP     PDP,TAC\r
1707         POPJ    PDP,            ;SUBROUTINE EXIT............\r
1708 \r
1709 \r
1710 ;ERROR EXIT FROM "REFRESH" WHEN A BAD WRITE ON THE DISK OCCURS DURING REFREHSING.\r
1711 \r
1712 REFER1: POP     PDP,TAC         ;CORRECT PDP IF EXTRA PUSH HAD OCCURRED.\r
1713 \r
1714 REFERR: MOVE    TAC,LBSAVE      ;GET BLOCK NUMBER FOR THE ERROR MESSAGE AT REF4.\r
1715         POPJ    PDP,            ;THIS NO-SKIP RETURN RE-ENTERS THE REFRESH DIALOGUE.\r
1716 \r
1717 \r
1718 \r
1719 ;MISCELLANEOUS STORAGE SPACE USED BY THE PDP-10 DISK REFRESHING ROUTINE.\r
1720 \r
1721 CHKSAV: 0\r
1722 LBSAVE: 0\r
1723 \r
1724 WNZBUF: BLOCK   200     ;BUFFER FOR READING AND WRITING DISK\r
1725                         ; BLOCKS DURING THE ONCE-ONLY CODE.\r
1726 \r
1727 LOWSWP: 0               ;LOWEST LOGICAL BLOCK FOR SWAPPING\r
1728 \r
1729         >               ;END OF REFRESH PROCEDURE FOR THE RD10 DISK.\r
1730 \r
1731         >               ;CLOSE AN EVEN EARLIER FTDISK CONDITIONAL.\r
1732 \r
1733 INTERNAL FTCHECK\r
1734 IFN FTCHEC,<\r
1735 \r
1736 EXTERNAL CHKREG,CHKEND,CHECK,MONPTR,MONSUM\r
1737 \r
1738 CK:     MOVEI TAC,CHKBEG\r
1739         SUBI TAC,CHKEND\r
1740         HRLI TAC,CHKBEG\r
1741         MOVSS TAC\r
1742         PUSHJ PDP,CHECK         ;COMPUTE AND STORE CHECKSUM OF THE PURE AREA OF \r
1743         MOVEM TAC1,MONSUM       ; THE TIME-SHARING MONITOR.\r
1744         POPJ PDP,\r
1745 \r
1746 >\r
1747 \r
1748 ONCEND: END\r
1749 \f\r