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