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