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