1 IFE FTDISK+FTRC10+2,<
\r
2 TITLE ONCEB - ONCE ONLY OPERATOR DIALOGUE AND IO DEVICE INIT.(BURROUGHS DISK)
\r
4 IFE FTDISK+FTRC10+1,<
\r
5 TITLE ONCED - ONCE ONLY OPERATOR DIALOGUE AND IO DEVICE INIT.(DATA PRODUCTS DISK)
\r
7 IFE FTDISK+FTRC10+0,<
\r
8 TITLE ONCEN - ONCE ONLY OPERATOR DIALOGUE AND IO DEVICE INIT.(NO DISK)
\r
10 SUBTTL T. HASTINGS/RCC/CHW TS 04 JUN 69 V414
\r
12 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
\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
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
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
30 ;INITIALIZE PRIORITY CHANNELS AND SETUP INTERRUPT SERVICE ROUTINE CHAIN
\r
33 T=TAC ;DEFINE ACCUMULATOR T
\r
35 ;LINK TO SERVICE ROUTINES
\r
37 INTERNAL LINKSR,FT2REL
\r
38 EXTERNAL JOBSYM,JOBPFI,XJBPFI
\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
44 JSP TSTREG ;GO TEST IF TWO RELOC REGISTERS EXIST
\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
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
68 JUMPE TAC1,JRSTI1 ;0 IF NO S. T. TO MOVE UP
\r
70 HRRZ TAC,UUO ;FIRST ADDRESS
\r
71 ADDI TAC,(TAC1) ;LENGTH+FIRST ADDRESS
\r
72 HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS
\r
73 SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1
\r
74 HRRM DAT,STO1 ;DIST, TO MOVE
\r
75 MOVE TAC1,UUO ;L-N,FIRST ADD.
\r
76 ADDI TAC1,1(DAT) ;FROM NEW S.T. POINTER
\r
77 MOVEM TAC1,DDTSYM ;STORE IN LOWER CORE
\r
79 STO1: MOVEM TAC1,.(TAC)
\r
82 \f EXTERN DEVLST,INTNUM,INTTAB
\r
83 ;SETUP LOCATIONS 40 THRU 61
\r
85 JRSTI1: MOVE TAC,[XWD LOC40,40] ;SET UP LOWER CORE PI LOCATIONS
\r
88 ;LINK DEVICE SERVICE ROUTINES TOGETHER - IF NOT LOADED BY BUILD
\r
90 SKIPE DEVLST ;HAS SERVICE ROUTINES ALREADY BEEN CHAINED TOGETHER?
\r
91 JRST ALRCHN ;YES, MUST HAVE BEEN LOADD WITH BUILD
\r
92 MOVSI TAC,INTNUM ;NO, NEG. NO. OF SERVICE ROTUINES*2
\r
93 INTLOP: HLRZ DAT,INTTAB(TAC) ;GET NEXT PI NUMBER
\r
94 ANDI DAT,7 ;MASIC OUT NUMBER OF DDB'S
\r
95 LSH DAT,1 ;SHIFT LEFT ONE SO MATCH PI LOCATIONS
\r
96 JUMPE DAT,NOPICH ;DOES THIS DEVICE HAVE A PI CHANNEL (PTY)?
\r
97 MOVE DAT,ITEM ;YES, PICK UP JSR CH'N FROM LOWER CORE
\r
98 INTLP1: MOVE DAT,ITEM ;SAVE IT IN DAT (EITHER A JRST DEV'NT OR
\r
100 MOVE ITEM,1(DAT) ;PICK UP INSTR. FOLLOWING INTERRUPT CONSO
\r
102 TLNN ITEM,00740 ;IS IT A JEN?
\r
103 JRST INTLP1 ;NO, KEEP LOOKING
\r
104 MOVE TAC1,INTTAB(TAC) ;YES, LAST DEVICE SO FAR, GET DEV'NT
\r
105 HRLI TAC1,(JRST) ;MAKE JRST INSTR.
\r
106 MOVEM TAC1,1(DAT) ;CHANGE JEN @CH'N TO JRST DEV'NT
\r
107 MOVEM ITEM,1(TAC) ;MAKE DEV'NT+1 BE JEN @CH'N
\r
108 NOPICH: AOBJN TAC,.+1 ;PICKUP EVERY OTHER WORD?
\r
109 AOBJN TAC,INTLOP ;ANY MOVE INTERRUPT SERVICE ROUTINES?
\r
115 EXTERN NULPDL,DSKINI
\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
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
126 ;MULTIPLE DEVICE DATA BLOCKS ARE CREATED
\r
127 ;AS SPECIFIED BY SYSSIZ AND MAY ERASE PART
\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
135 UUOTRP: JSR UUO0 ;TO UUO HANDLER
\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
155 ;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG
\r
156 EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN
\r
159 MOVE TAC,[JSR TSTAPR] ;REPLACE UUO JSR WIT A JSR HERE IN ONCE
\r
161 CONO APR,ILM!1 ;TURN ON PI & ASSIGN ILM FLAG
\r
162 ;FOR POSSIBLE ILLEGAL MEMORY REF BELOW
\r
163 MOVEM TAC,42 ;PUT A JSR IN CHAN 1 INT. LOC.
\r
164 CONO PI,12300 ;CLR PI SYSTEM, ACTIVATE PI SYSTEM. TURN ON CHAN 1
\r
165 DATAO APR,[XWD 376776,000400] ;SET LOW AND HIGH SEG TO 128K LONG
\r
166 ; EACH STARTING AT ABS LOC 0
\r
167 ; RELOC. FOR HIGH SEG IS 400000 TO DO THIS
\r
168 JRST 1,.+1 ;ENTER USER MODE .+1
\r
169 MOVE TAC,400100 ;TRY TO REFERENCE REL LOC 100 IN HIGH SEG
\r
170 ; AVOID SHADOW ACS WHICH LIKELY HAVE BAD
\r
171 ;PARITY CAUSED BY POWER TURN ON AND TURN OFF
\r
172 MOVEI 17,400000 ;MOVE HARDWARE ACS INTO SHADOW ACS TO CLEAR PARITY
\r
173 ;IF HARDWARE ACS TURNED OFF, ACS WILL BE PRESERVED
\r
174 BLT 17,400017 ;STOP WITH SHADOW AC 17
\r
175 CALL ;COME BACK TO EXEC MODE AT TSTAPR
\r
177 TSTAPR: 0 ;PLACE TO SIDE JSR PC
\r
178 SETZM TWOREG ;ASSUME NO SECOND REG.
\r
179 CONSO APR,ILM ;WAS MEMORY REF OUT OF BOUNDS?
\r
180 SETOM TWOREG ;NO, MUST HAVE SECOND REG. HARDWARE, SET -1
\r
181 CONO APR,ILM ;CLEAR APR FLAGS AGAIN
\r
182 MOVEI TAC,AND2RG ;=0 IF SOFTWARE CANNOT HANDLE 2 SEG(NULSEG LOADED)
\r
183 ANDM TAC,TWOREG ;=-1 IF IT CAN(SEGCON LOADED)
\r
184 ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITES
\r
185 MOVNI TAC,SEGN ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES
\r
186 HRLI TAC,JOBN ;SET RH OF POINTER TO FIRST HIGH SEG
\r
187 ;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST
\r
189 ; WHICH BUILD FORBITS FROM HAVING EXTERNALS
\r
190 MOVSM TAC,SEGPTR ;POINTER USED FOR AOBJN LOOPS
\r
191 CONO PI,10000 ;CLEAR PI SYSTEM
\r
194 \f;ROUTINE TO FIND THE EXEC DDT SYMBOL TABLE POINTER AND MOVE IT TO THE PLACE
\r
195 ;WHERE EXEC DDT EXPECTS IT(DDTSYM=36)
\r
196 ;THE MONITOR CAN BE LOADED IN ANY OF 3 WAYS(IN ORDER OF PERFERNCE):
\r
197 ; 1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON
\r
198 ; 2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER AND COMMON
\r
199 ; 3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD
\r
201 ;THE 3 WAYS LEAVE DDTSYM(36),JOBSYM(116),T30SYM(131) IN DIFFERENT STATES:
\r
202 ; DDTSYM(36) JOBSYM(116) T30SYM(131)
\r
203 ; 1. JUNK S.T.PTR JUNK
\r
204 ; 2. JUNK JUNK(NON-NEG) S.T.PTR
\r
205 ; 3. S.T.PTR S.T.PTR JUNK
\r
208 ; RETURN WITH AC UUO SET TO SYMBOL TABLE POINTER
\r
209 ;CALLED FROM MANDATORY ONCE ONLY CODE AND 141 START CODE(WHICHEVER OCCURS FIRST)
\r
212 EXTERN T30SYM,JOBSYM,DDTSYM,DDTX,SYSDDT
\r
214 MOVSTP: 0 ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND
\r
215 ; FIRST JUMP TO EXEC DDT IF BEFORE MONITOR STARTED
\r
216 MOVJMP: JRST .+1 ;PATCHED TO SETUUO AFTER FIRST EXECUTION
\r
217 MOVE UUO,T30SYM ;ASSUME LOADED BY REGULAR 10/30
\r
218 SKIPL JOBSYM ;OR IS JOBSYM NEGATIVE(MEANING IT IS S.T.PTR)?
\r
219 JRST REGT30 ;WAS LOADED BY REGULAR 10/30
\r
220 MOVE UUO,JOBSYM ;ASSUME LOADED BY TIME SHARING MONITOR AND LOADER
\r
221 SKIPE DEVLST ;OR HAS BUILD PATCHED THE DDB CHAIN?
\r
222 MOVE UUO,DDTSYM ;YES, DDTSYM HAS SYMBOL TABLE POINTER AS STORED
\r
224 REGT30: MOVEM UUO,DDTSYM ;STORE THE SYMBOL TABLE POINTER FOR EXEC DDT
\r
225 MOVEI TAC,DDTX ;MAKE SYSTEM STARTUP LOC(141) GO DIRECTLY TO EXEC
\r
226 ; DDT AND BY PASS THIS FOOLISHNESS
\r
228 MOVEI TAC,SETUUO ;MAKE SURE THIS IS DONE ONLY ONCE
\r
230 SETUUO: MOVE UUO,DDTSYM ;RETURN THE CORRECT(MAYBEUPDATED IF
\r
231 ; EXEC DDT PATCHES MADE BEFORE MONITOR SAVED OR
\r
232 ; STARTED) SYMBOL TABLE POINTER
\r
233 JRST @MOVSTP ;RETURN
\r
235 ;HERE IF EXEC DDT IS STARTED UP BEFORE MONITOR(TO MAKE A PATCH FOR EXAMPLE)
\r
240 PATSYM: JSR MOVSTP ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL
\r
241 ; FIND IT AND PATCH 141 TO GO DIRECTLY TO EXEC DDT
\r
242 JRST DDTX ;AND GO DIRECTLY TO EXEC DDT
\r
244 ;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE
\r
247 ENTRY RCXWNZ ;THIS SYMBOL IS SOLELY TO PERMIT THE SYSTEM
\r
248 RCXWNZ: ; BUILDER TO RETRIEVE THE CORRECT BINARY FILE.
\r
255 EXTERNAL CONMES,RADX10,CRLF,DECIN1,OCTPNT
\r
256 EXTERNAL CONFIG,SYSDAT
\r
259 DEFINE SETTYO <MOVE DAT,LINEP>
\r
260 DEFINE TYPE <IDBP CHREC,DAT>
\r
262 DEFINE NEXTC <ILDB CHREC,TAC>>
\r
264 DEFINE SETTYO <PUSHJ PDP,OTSET>
\r
265 DEFINE TYPE <PUSHJ PDP,OUTCHS>
\r
266 DEFINE NEXTC <PUSHJ PDP,GETCHR>
\r
267 EXTERN TSETBF,SETBFI,SCNDDB,TTIBUF,TTOBUF,OUTCHS,GETCHR,TIBF,TOBF
\r
274 PATSIZ: MOVEI TAC,PATCH ;SET SIZE OF SYSTEM TO BEGINING OF PATCH
\r
275 MOVEM TAC,SYSSIZ ;IN CASE ONCE ONLY DIALOG RESTARTD BEFORE OVERWRITTEN
\r
277 ;PATSIZ SHOULG BE UPDATED EVERY TIME A PATCH
\r
278 ; IS MADE. SYSSIZ SHOULD ALSO BE UPDATED IF 146
\r
279 ; START IS GOING TO BE USED(DDT DEBUGGIN OR CTY DOWN)
\r
281 MOVE PDP,[XWD -ONCEPN,ONCEPD]
\r
286 MOVEI TAC,[ASCIZ / /]
\r
293 \f;ASK FOR TODAY'S DATE AND CONVERT
\r
294 ;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1
\r
296 EXTERNAL THSDAT,JIFMIN,SKIPS
\r
300 DATLOP: SETZM THSDAT
\r
307 PUSHJ PDP,DECIN1 ;MONTH
\r
317 PUSHJ PDP,DECIN1 ;DAY
\r
326 PUSHJ PDP,DECIN1 ;YEAR
\r
332 SUBI TAC1,^D64 ;YEAR ZERO
\r
333 IMULI TAC1,^D12*^D31
\r
347 JRST TIMLOP ;JUST A CR
\r
349 PUSHJ PDP,DECIN1 ;READ THE TIME (1-4 CHARACTERS)
\r
350 JRST TIMLOP ;NO ARGUMENT
\r
351 JRST TIMLOP ;ILLEGAL CHARACTER
\r
353 IDIVI TAC,^D100 ;TAC=HRS.TAC1=MINS
\r
354 SKIPL TAC ;HRS NEGATIVE?
\r
355 CAILE TAC,^D23 ;OR .G. 23?
\r
356 JRST TIMLOP ;OUT OF BOUNDS
\r
357 CAILE TAC1,^D59 ;MINUTES .G. 59
\r
358 JRST TIMLOP ;OUT OF BOUNDS
\r
359 IMULI TAC,^D60 ;CONVERT TO MINUTES
\r
360 ADD TAC,TAC1 ;MINUTES SINCE MIDNIGHT
\r
361 IMULI TAC,JIFMIN ;JIFFIES SINCE MIDNIGHT
\r
362 MOVEM TAC,TIME ;TIME=JIFFIES SINCE MIDNIGHT
\r
364 JUMPGE ITEM,QUICK ;SKIP NEXT PART OF DIALOGUE UNLESS THE LAST ITEM
\r
365 ; TYPED IN (NAMELY TIME OF DAT) WAS TERMINATED BY
\r
366 ; AN "ALT MODE". (ACCUMULATOR "ITEM" IS SET UP
\r
367 ; IN THE "GETLIN" SUBROUTINE CALLED ABOVE.)
\r
368 \f;PRINT IO CONFIGURATION
\r
370 EXTERNAL DEVLST,TCONLN,INLMES,PRNAME,INTTB1,INTTAB
\r
374 JSR TSTREG ;TEST IF 2 RELOC REG SET TWOSEG 0 OK-1
\r
375 MOVEI TAC,CRLFMS ;PRINT CRLF
\r
377 MOVEI TAC,1 ;ASSUME 1
\r
380 PUSHJ PDP,RADX10 ;NO. SECOND REG EXISTS.
\r
382 ASCIZ / RELOC. REG.
\r
389 JUMPN AC1,ALRLNK ;DEVICE DATA BLOCK ALREADY LINKED?
\r
390 MOVSI PROG,INTNUM ;NO, NOT LOADED BY BULD,-NO. OF DEVICES*2
\r
391 CONFLP: SKIPN AC1,INTTB1(PROG) ;INT LOC HAVE DEV DATA BLOCK?
\r
392 JRST NODDB ;NO, GO GET NEXT DEVICE DATA BLOCK
\r
393 LDB UUO,[POINT 8,INTTAB(PROG),8] ;YES. NO. OF DEV DATA BLKS
\r
394 HRRZ TAC,UUO ;PRINT
\r
395 PUSHJ PDP,RADX10 ;IN DECIMAL
\r
396 PUSHJ PDP,INLMES ;PRINT 1 SPACE
\r
398 HLLZ TAC1,DEVNAM(AC1) ;DEVICE NAME
\r
399 PUSHJ PDP,PRNAME ;PRINT IT
\r
400 SOJLE UUO,SINGLE ;IS THIS JUST A SINGLE DEVICE?
\r
401 PUSHJ PDP,INLMES ;NO, APPEND 'S TO DEVICE NAME
\r
403 SINGLE: PUSHJ PDP,CRLF ;PRINT CR LF
\r
404 NODDB: AOBJN PROG,.+1 ;
\r
405 AOBJN PROG,CONFLP ;FINISHED ALL DEVICES?
\r
409 HLLZ ITEM,DEVNAM(AC1)
\r
410 ONCE4: HLRZ AC1,DEVSER(AC1)
\r
412 HLLZ TAC1,DEVNAM(AC1)
\r
415 ONCE6: MOVE PROG,TAC ;SAVE NO.
\r
420 MOVE TAC,[POINT 6,ITEM]
\r
421 ONCE7: ILDB CHREC,TAC
\r
425 MOVEI TAC,[ASCIZ /'S/]
\r
430 ONCE7A: PUSHJ PDP,OPOUT
\r
433 MOVEI TAC,TCONLN ;PRINT NO, OF TTY SCANNER LINES
\r
436 ASCIZ / (OCTAL) TTY SCANNER LINES
\r
440 ;ASK FOR OPERATORS CONSOLE TO BE SPECIFIED
\r
442 EXTERNAL INLMES,DEVOPR,CTEXT,DEVPHY
\r
444 ONCEOP: MOVEI TAC,OPRM
\r
448 JRST ONCE8 ;JUST CR
\r
451 CAMN TAC,[SIXBIT /CTY/] ;CTY?
\r
452 JRST .+3 ;YES. JUST STORE IT.
\r
454 JRST ONCEOP ;PHYSICAL NAME NOT FOUND
\r
455 MOVEM TAC,DEVOPR ;SET FOR SYSTEM
\r
456 ;DEVICE "OPR" WILL BE SAME AS THIS
\r
458 ;ASK IF SYSMAK IS WANTED
\r
460 EXTERN MAKEND,SYSSIZ
\r
462 ONCE8: MOVEI TAC,SYSM
\r
464 JRST ONCE2 ;NO SYSMAK
\r
465 MOVEI TAC,MAKEND ;YES
\r
468 ;IS EXEC DDT WANTED?
\r
472 ONCE2: MOVEI TAC,SYSDM
\r
475 MOVEI TAC,DDTEND ;FIRST FREE LOC. ABOVE EXEC DDT
\r
476 MOVEM TAC,SYSSIZ ;SET NEW MONITOR SIZE
\r
477 ;FIND CORE TO BE USED FOR MULTIPLE DEVICE DATA BLOCKS
\r
482 ONCE3: PUSHJ PDP,SYSSIZ ;SAVE CURRENT VALUE
\r
483 JSP TAC,CNTDB ;UPDATE SYSSIZ BY SPACE USED
\r
484 ; FOR DEVICE DATA BLOCKS FOR DSK,DTA,MTA,TTY,PTY)
\r
485 \f;PRINT OCTAL SIZE OF MONITOR
\r
495 POP PDP,SYSSIZ ;RESTORE SYSSIZ PRIOR TO ACTUAL CREATION
\r
496 ; OF DEVICE DATA BLOCKS
\r
497 EXTERN DECIN,CORLIM,USRLIM,RADX10
\r
499 ONCE4A: MOVEI TAC,MXKMES ;PRINT "MAX. K CORE FOR SINGLE USER IS "
\r
506 MOVEI TAC,DESMES ;PRINT "TYPE DESIRED MAX.(DEC). CR IF OK AS IS
\r
510 JRST ONCE5A ;LEAVE LIMIT AS SET BY BUILDER QUESTION.
\r
511 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\r
515 SKIPE TAC1 ;UNLESS HE SAID 0 LIKE IN MONGEN.
\r
516 HRRM TAC1,CORLIM ;PATCH CORLIM FOR USER CORE SIZE LIMIT
\r
517 ; IF NOT PATCHED, LEAVE COMMON'S VALUE
\r
522 PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOG.
\r
525 QUICK: ;THIS IS THE SHORT-CUT EXIT TO BY-PASS MOST OF THE DIALOGUE
\r
530 PUSHJ PDP,OK ;CHECKSUM MONITOR AND SAVE THE ANSWER.
\r
533 JRST @ONCE ;***EXIT FROM THE "ONCE-ONLY CODE"***
\r
535 EXTERNAL OCTIN,MFDBLK,SATXWD,NUMBLK,SYSPP,REFLAG
\r
539 REF: MOVEI TAC,REF1M ;DO YOU WANT TO REFRESH?
\r
542 MOVEI TAC,REF2M ;YES, ARE YOU SURE?
\r
545 REF6: ;YES. DO YOU WANT TO CHANGE THE LOC
\r
546 MOVEI TAC,REF3M ;OF THE MFD?
\r
550 MOVEI TAC,REF4M ;TYPE LOGICAL DISK ADDRESS OF MFD RETR, INFO
\r
556 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\r
561 PUSH PDP,TAC1 ;IS IT A MULTIPLE OF NUMBLK?
\r
564 JUMPN TAC1,REF4 ;NO
\r
572 IFN FTSWAP,<IFN FTRC10, <
\r
573 MOVEI TAC,REF9M ;HOW MANY 1K BLOCKS ON THE ISK FOR SWAPPING ?
\r
576 MOVEI TAC,^D200 ;THE DEFAULT ANSWER IS 200 DECIMAL.
\r
579 JRST REF3A ;JUST A CARRIAGE RETURN INVOKES DEFAULT
\r
580 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\r
584 CAILE TAC1,MXK2SWP ;ANSWER TOO BIG?
\r
585 JRST REF3 ;YES, REPEAT QUESTION
\r
586 HRRZM TAC1,K4SWAP ;NO. SAVE THIS CRUCIAL PARAMETER.
\r
592 PUSHJ PDP,REFRES ;REFRESH.
\r
595 MOVEI TAC,REF6M ;REFRESHING SUCCESSFULLY COMPLETED !
\r
597 PUSHJ PDP,OPOUT ;TYPE "REFRESHED !"
\r
600 MOVEM TAC,REFLAG ;TO PERMIT AUTOMATIC LOG-IN UNDER
\r
601 ; PROJ-PROG NUMBER [1,1] EVEN
\r
602 MOVEI TAC,REF8M ; THOUGH THE LOG-IN CUSP IS CLEARLY NOT
\r
603 PUSHJ PDP,ICONM ; ON THE NEWLY REFRESHED DISK.
\r
615 REF5: PUSH PDP,TAC ;ERROR. ON COMMING HERE, TAC HAS LOGICAL BLOCK
\r
616 ; NUMBER WHICH COULD NOT BE WRITTEN
\r
623 JRST REF6 ;GO BACK TO TRY AGAIN.,
\r
626 REF1M: ASCIZ /DO YOU WANT TO REFRESH THE DISK ? (Y OR CR)
\r
628 REF2M: ASCIZ /ARE YOU SURE(Y OR CR)?
\r
630 REF3M: ASCIZ /DO YOU WANT TO CHANGE THE LOCATION OF THE MFD(Y OR CR)?
\r
632 \fREF4M: ASCIZ /TYPE THE LOGICAL DISK ADDRESS OF THE MFT RETREIVAL INFORMATION
\r
635 REF5M: ASCIZ /MUST BE A MULTIPLE OF NUMBLK.
\r
638 REF6M: ASCIZ /REFRESHED !
\r
640 REF7M: ASCIZ /ERROR WHILE WRITING BLOCK /
\r
641 REF8M: ASCIZ /TO AUTOMATICALLY LOG-IN UNDER [1,1], TYPE "LOGIN"
\r
644 REF9M: ASCIZ /HOW MANY (DECIMAL) 1K DISK BLOCKS ARE TO BE ALLOCATED FOR SWAPPING ?
\r
647 > ;THIS CLOSES AN FTDISK CONDITIONAL SERVAL PAGES BACK.
\r
648 \f;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE
\r
649 ;CALL: PUSHJ PDP,GETLIN
\r
650 ; JUST A CR TYPED IN
\r
651 ; A LINE TYPED IN,TAC SEYT AS BYTE POINTER
\r
653 CHREC=TEM ;CHAR TO TYPE OUT (MUST BE SAME AS SCNSER ROUTINE)
\r
654 LINE=TAC1 ;TTY LINE NO. (ALSO SAME AS SCNSER)
\r
656 IFN FTTTYSER,<EXTERN TSETBF,SETBFI,SCNDDB,DCPUTR,PUTCHI>
\r
660 GETLIN: IFE FTTTYSER,<MOVE TAC,LINEP>
\r
661 IFN FTTTYSER,< PUSHJ PDP,SETBFI>
\r
663 GET1: PUSHJ PDP,TYI
\r
666 CAIN CHREC,177 ;RUBOUT?
\r
668 CAIN CHREC,33 ;ALTMODE ?
\r
670 CAIE CHREC,175 ;VARIATION OF ALT-MODE ?
\r
671 CAIN CHREC,176 ;OR YET THIS THIRD VARIATION ?
\r
673 GET2: PUSHJ PDP,TYO ;ECHO CHARACTER
\r
674 CAIL CHREC,140 ;IS THIS LOWER CASE?
\r
675 TRZ CHREC,40 ;YES,MAKE IT UPPER CASE
\r
676 IFE FTTTYSER,<IDPB CHREC,TAC>
\r
677 IFN FTTTYSER,<PUSHJ PDP,PUTCHI ;STORE CHARACTER
\r
678 JFCL ;IGNORE ERROR RETURN
\r
682 MOVEI CHREC,12 ;OUTPUT LF
\r
683 PUSHJ PDP,TYO ;TYPE OUT
\r
684 IFE FTTTYSER,< MOVE TAC,LINEP ;RESET BYTE POINTER>
\r
685 JUMPN ITEM,CPOPJ1 ;NULL LINE?
\r
686 POPJ PDP, ;YES, DON'T SKIP RETURN
\r
688 DELETE: IFN FTTTYSER,< PUSHJ PDP,DCPUTR
\r
691 JUMPE ITEM,DELET1 ;AT BEGINNING OF LINE?
\r
692 ADD TAC,[XWD 070000,0] ;NO, BACK UP BYTE POINTER
\r
693 TLNE TAC,400000 ;FINISHED THIS WORD YET?
\r
694 ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS>
\r
699 DELET1: MOVEI CHREC,15
\r
705 GETLN1: SETOM ITEM ;MECHANISM USED TO BY-PASS PART OF DIALOGUE
\r
706 MOVEI CHREC,15 ;WHEN ALTMODEIS TYPED.
\r
708 \f;ROUTINE TO TYPE A LINE ON OPERATOR CONSOLE
\r
709 ;ECHO CHECK STOPS LINE AND RETURNS
\r
710 ;CALL: DAT SET TO END OF MESSAGE
\r
712 IFN FTTTYSER,<EXTERNAL CPOPJ>
\r
714 OPOUT: IFE FTTTYSER,<MOVE TAC,LINEP>
\r
715 IFN FTTTYSER,<MOVEI DAT,TTOBUF(DEVDAT)>
\r
716 CONO TTY,1000 ;CLEAR INPUT
\r
717 OPOUT1: IFE FTTTYSER,<
\r
721 JRST OPOUT2 ;ECHO CHECK
\r
723 IFN FTTTYSER,< JUMPE CHREC,CPOPJ>
\r
727 OPOUT2: MOVEI CHREC,15
\r
731 CONO TTY,1000 ;CLEAR INPUT
\r
733 ;WAIT TILL OUTPUT BUSY OFF BEFORE TYPING OUT CHAR.
\r
735 EXTERNAL TCONLN,TYPL
\r
737 TYO: PUSHJ PDP,APRCHK ;CHECK CLOCK
\r
744 AND TAC,[OCT 11111111]
\r
745 IMUL TAC,[OCT 11111111]
\r
754 ;WAIT TIL INPUT DONE ONE BEFORE RETURNING WITH NEXT CHAR.
\r
756 TYI: PUSHJ PDP,APRCHK
\r
761 ;CHECK APR FOR CLOCK FLAG SO TIME USER TYPES IN WILL BE ACCURATE
\r
763 APRCHK: CONSO APR,1000 ;IS CLOCK FLAG ON?
\r
765 CONO APR,1000 ;YES, CLEAR CLOCK FLAG
\r
766 AOS TIME ;INCREMENT TIME
\r
768 \fICONM: PUSH PDP,TAC
\r
769 SETTYO ;INITIALIZE LINE BUFFER
\r
771 JRST CONMES ;OUTPUT MESSAGE
\r
774 OTSET: MOVEI DEVDAT,SCNDDB
\r
775 MOVSI TEM,120 ;TTYCHR
\r
776 HRRI TEM,TIBF(DEVDAT)
\r
777 MOVEM TEM,TTIBUF(DEVDAT) ;INIT INPUT POINTER
\r
778 HRRI TEM,TOBF(DEVDAT) ;AND OUTPUT POINTER
\r
779 MOVEM TEM,TTOBUF(DEVDAT)
\r
780 JRST TSETBF ;NOW CLEAR THE BUFFERS
\r
783 YESNO: PUSHJ PDP,ICONM ;FIRST OUTPUT THE QUESTION
\r
785 PUSHJ PDP,GETLIN ;NOW GET RESPONSE
\r
786 POPJ PDP,0 ;JUST A C-R
\r
788 TRZ CHREC,40 ;FIRST CHAR OF RESPONSE (U.C.)
\r
789 CAIN CHREC,"Y" ;WAS IT A Y?
\r
790 AOS 0(PDP) ;YES, SKIP
\r
791 POPJ PDP, ;NO. MAYBE IT WAS "N", SO DONT SKIP
\r
793 ;CONSTANTS AND PUSH DOWN LIST
\r
796 ONCEPD: BLOCK ONCEPN ;PUSH DOWN LIST
\r
798 LINEP: POINT 7,LINBUF ;INPUT AND OUTPUT LINE BUFFERE
\r
803 TSEXEC: ASCIZ / MONITOR JUST LOADED
\r
806 TYPE TODAY'S DATE AS MM-DD-YY
\r
816 TYPE NAME OF OPR CONSOLE.
\r
819 DO YOU WANT SYSMAK (TYPE Y IF YES, CR IF NO)?
\r
826 LENGTH: ASCIZ / OCTAL LOCATIONS LONG.
\r
828 MXKMES: ASCIZ /MAX K CORE FOR SINGLE USER IS /
\r
829 DESMES: ASCIZ /TYPE DESIRED MAX,(DEC), CR IF OK AS IS
\r
833 \f;INITIALIZE SAT SEARCH ENTRIES
\r
835 ;THIS "DFWUNS" ROUTINE IS CALLED BY MANDATORY ONCE ONLY CODE(LINKSR)
\r
836 ; AFTER ALL MULTIPLE DEVICE DATA BLOCKS HAVE BEEN GENERATED IN CORE
\r
837 ; ABOVE C(SYSSIZ)( AND SYSSIZ HAS BEEN INCREMENTED)
\r
838 ; IT IS CALLED WHETHER OR NOT THE DISK WAS REFRESHED. IF REFRESHING WAS
\r
839 ; PERFORMED, DFWUNS IS CALLED AFTER REFRES SINCE SYSINI CALLS LINKSR AFTER ONCE.
\r
845 EXTERNAL SAT05,JSAT06,SATENT,SATPTR,SATBK2,SATXWD,SATPTR
\r
846 EXTERNAL SAT,SENTSZ,DSKDDB,DSKBUF,WSYNC,MQIN,MQOUT,DFGETF,SETFRE
\r
847 EXTERNAL WLBIT,NUMBIT,DSKCNT
\r
851 PUSHJ PDP,WRITLK ;FORCE THE WRITE-LOCK SWITCH SETTINGS TO BE ZERO.
\r
853 PUSHJ PDP,RDSTAT ;READ VITAL DISK STATISTICS BLOCK, STORE PARAMETERS
\r
854 PUSHJ PDP,CAPCTY ;DETERMINE CURRENT SYSTEM CAPACITY (HOW MANY DISKS).
\r
855 CAMN TAC,LBHIGH ;HAS CAPACITY CHANGED SINCE LAST REFRESH ?
\r
856 JRST DFWNZ1 ;NO, EVERYTHING APPPEARS TO BE OKAY.
\r
857 SETTYO ;YES, PRINT WARNING MESSAGE...
\r
859 ASCIZ /DISK CAPACITY HAS CHANGED SINCE LAST REFRESHING.
\r
860 EITHER RESTORE PREVIOUS DISK CONFIGURATION OR REFRESH.
\r
862 PUSHJ PDP,OPOUT ;START TTY
\r
863 PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOGUE
\r
864 JRST DFWUNS ;NOW TRY AGAIN.
\r
870 MOVEI DEVDAT,DSKDDB
\r
872 MOVEM TAC1,DSKBUF(DEVDAT)
\r
878 ;READ EACH SAT BLOCK FROM THE DISK AND SET SATENT TABLE TO MATCH INFO ON DISK.
\r
880 SETS1: ADDM TAC1,SATPTR
\r
881 SETS2: PUSH PDP,TAC
\r
882 SETZB IOS,DEVIOS(DEVDAT)
\r
883 PUSHJ PDP,MQIN ;READ A SAT BLOCK
\r
884 JRST 4,SETS6 ;ERROR HALT
\r
885 MOVE DAT,SATPTR ;RESET THE ENTRY
\r
891 \fSETS3: MOVE AC1,(TAC) ;COUNT ONE-BITS
\r
892 AOJN AC1,SETS3A ;IS THE WORD = -1?
\r
896 SETS3A: SOJE AC1,SETS5 ;NO, IS IT = 0?
\r
897 SETS4: TDNE TAC1,(TAC) ;NO, COUNT THE BITS
\r
902 SETS5: AOBJN TAC,SETS3 ;LOOP THRU ENTIRE BLOCK
\r
906 ;BITS HAVE BEEN COUNTED, CHECK FOR WRITE-LOCK
\r
907 CAIL DAT,NUMBIT ;BLOCK FULL?
\r
909 PUSHJ PDP,DFGETF ;NO. GET A FREE BLOCK
\r
911 PUSHJ PDP,SETS7 ;WRITE
\r
912 PUSHJ PDP,SETFRE ;FREE THE BLOCK
\r
915 SETS5B: MOVEI TAC1,SENTSZ ;PREPARE TO BUMP SATPTR
\r
917 AOBJN TAC,SETS1 ;DO ALL SAT BLOCKS
\r
925 SETS5X: CAIL TAC,SATTOP
\r
926 JRST SAT05 ;EXIT FROM DFWUNS BACK TO DSKINI IN DSKSER........
\r
928 MOVEI TAC1,411000 ;ON THE NEW PDP-10 DISK SYSTEM SET THE SAT ENTRY
\r
929 HRRM TAC1,(TAC) ; TABLE TO SHOW ALL NON-EXISTENT DISKS AS
\r
930 JRST SETS5X ; BOTH WRITE-LOCKED AND FULL.
\r
932 \fSETS6: POP PDP,TAC ;ERROR, TRY AGAIN
\r
937 ;WRITE-LOCK DETERMINATION ON THE OLD PDP-6 (DATA PRODUCTS) DISK --
\r
939 SETS7: PUSH PDP,TAC ;SAVE BLOCK ADDRESS
\r
940 SETS7A: PUSHJ PDP,MQOUT
\r
942 SETS7B: POP PDP,TAC
\r
944 SETS7C: MOVE TAC,(PDP)
\r
945 MOVE TAC1,DSKCNT(DEVDAT)
\r
946 TRNN TAC1,IOIMPM ;WRITE LOCK?
\r
948 MOVEI TAC,WLBIT ;YES. SET BIT
\r
952 SETS8: MOVEI TAC,SETS9 ;BLOCK FULL, READ FIRST ONE
\r
953 HRRM TAC,DSKBUF(DEVDAT)
\r
957 HLRZ TAC,@SATPTR ;WRITE IT BACK
\r
959 MOVEI TAC,SAT ;RESET
\r
960 HRRM TAC,DSKBUF(DEVDAT)
\r
965 > ;CLOSE THE IFE FTRC10
\r
966 > ;CLOSES AN IFN FTDISK A COUPLE PAGES BACK.
\r
969 ;DISK REFRESHING ROUTINES ---
\r
972 ;DISK REFRESHER FOR THE OLD PDP-6 (DATA PRODUCTS) DISK --
\r
975 EXTERNAL MFDBLK,NUMSAT,CHKCNT,CHKSUM,NUMBLK,DSKINI,SETSAT,DSKCHN,DSKCHL
\r
977 REFRESH: MOVEI PROG,0 ;SETUP IO
\r
978 MOVEI DEVDAT,DSKDDB
\r
987 MOVE TAC1,[JSR DSKCHL]
\r
993 ;SETUP NULL SAT BLOCK
\r
996 MOVE TAC1,[XWD NULBLK,NULBLK+1]
\r
998 BLT TAC1,NULBLK+177
\r
999 MOVEI TAC,NUMBLK ;END OF BLOCK BYTE POINTER
\r
1014 BLT TAC,NULBLK+177
\r
1016 ;SET UP SAT BLOCK WITH MFD AND SAT BLOCKS ALLOCATED
\r
1018 MOVE TAC,[XWD NULBLK,SATBL1]
\r
1019 BLT TAC,SATBL1+177
\r
1020 MOVE TAC,[POINT 1,SATBL1]
\r
1022 HRLM TAC1,SATRET+3
\r
1027 ;COMPUTE CHECKSUMS IF REQUIRED
\r
1031 MOVE TAC,[XWD -200,MFD1]
\r
1033 HRLM TAC1,MFDRET+4
\r
1034 MOVE TAC,[XWD -200,NULBLK]
\r
1036 HRLM TAC1,SATRET+4
\r
1037 MOVE TAC,[XWD -200,SATBL1]
\r
1041 ;RELOCATE POINTERS RELATIVE TO MFDBLK
\r
1043 REFR1: MOVE TAC,MFDBLK
\r
1044 HRRM TAC,MFDRET+177
\r
1048 HRRM TAC,SATRET+177
\r
1057 HRRZM TAC1,SATRET+3(TAC1)
\r
1058 ADDM TAC,SATRET+3(TAC1)
\r
1061 ;FIX CHECKSUM FOR SATBL1
\r
1065 HRLM DAT,SATRET+3(TAC)
\r
1068 ;WRITE BLOCKS ON DISK
\r
1070 MOVE TAC,MFDBLK ;MFD RETREIVAL INFORMATION
\r
1071 MOVE TAC1,[XWD -200,MFDRET]
\r
1072 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1073 SETZB IOS,DEVIOS(DEVDAT)
\r
1077 REFR2: MOVE TAC1,[XWD -200,NULBLK] ;SAT BLOCKS
\r
1079 MOVE TAC1,[XWD -200,SATBL1]
\r
1082 SETZB IOS,DEVIOS(DEVDAT)
\r
1083 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1085 JRST REFER1 ;ERROR
\r
1089 AOS TAC ;SAT RETREIVAL INFORMATION
\r
1091 SETZB IOS,DEVIOS(DEVDAT)
\r
1093 MOVE TAC1,[XWD -200,SATRET]
\r
1094 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1097 MOVE TAC,MFDBLK ;MFD
\r
1100 MOVE TAC1,[XWD -200,MFD1]
\r
1101 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1102 SETZB IOS,DEVIOS(DEVDAT)
\r
1108 REFER1: POP PDP,TAC1
\r
1109 REFER: POP PDP,WSYNC
\r
1112 DEFINE ZEROES (A),<XLIST
\r
1116 DEFINE ONES (A),<XLIST
\r
1120 DEFINE BLOCKR (NAME,EXT,PROT,PROGX,B,F,Z),<
\r
1123 EXP PROT*1B8+14B12
\r
1127 BYTE (4) F (14) 0 (18) B >
\r
1129 MFDRET: BLOCKR <XWD 1,1>,<SIXBIT /UFD/>,45,1,0,4,20 ;MFD RETREIVAL INFO
\r
1131 SATBL1: XWD 777776,0 ;THIS SAT BLOCK CONTAINSS
\r
1132 ZEROES 5400/44-1 ;ALLOCATION FOR MFD AND SAT BLOCKS
\r
1136 SATRET: BLOCKR <SIXBIT /*SAT*/>,<SIXBIT /SYS/>,555,1,0,1,16
\r
1138 MFD1: XWD 1,1 ;MFD
\r
1141 XWD 637163,17 ;RELOCATED
\r
1144 NULBLK: ZEROES 5400/44-1 ;NULL SAT BLOCK
\r
1148 > ;END OF THE REFRESHER FOR THE OLD PDP-6 DISK.
\r
1152 ;DISK REFRESHER FOR THE NEW PDP-10 MODEL RC-10 (BURROUGHS) DISK--
\r
1154 EXTERNAL CPOPJ1,THSDAT,TIME
\r
1155 EXTERNAL MFDBLK,SATXWD,NUMSAT,NUMBLK,SATTOP,SENTSZ
\r
1156 EXTERNAL DISKUP,DFRED,DFWRT,DSKFDG,CHKSUM,RCXCCW,RCXFIN
\r
1159 EXTERNAL MAXSWP,MXK2SWP,BLKSPK
\r
1164 STATBK=1 ;FIXED LOGICAL BLOCK NUMBER FOR THE "VITAL
\r
1165 ; STATISTICS" BLOCK OF THE DISK.
\r
1166 DSK=170 ;DEFINE DEVICE NUMBER OF THE MODEL RC-10 DISK SYNCHRONIZER.
\r
1169 ;THESE NEXT TWO PAGES ARE LIFED DIRECTLY FROM "DSKINIT" IN ORDER TO DEFINE THE
\r
1170 ; CONO AND CONI BITS USED HERE IN "ONCE".
\r
1172 ;CONI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1174 ;BITS 00 - 17 MAINTENANCE PANEL SWITCH SETTINGS INDICATORS --
\r
1175 ;BITS 00 - 04 UNUSED
\r
1176 MSS=1B5 ;SET INDICATES "MAINTENANCE SEGMENT SELECTED" (SEGMENT 81),
\r
1177 PLGSW=1B6 ;1 = WRITE-PROTECT EVERYTHING BELOW (LESS THAN) THE BOUNDARY,
\r
1178 ; 0 = WRITE-PROTECT EVERYTHING ABOVE (GREATER THAN) BOUNDARY,
\r
1179 ;THE CURRENT IMPLEMENTATION OF THE RC-10 DISK SYNCHRONIZER
\r
1180 ; DOES NOT PERMIT SENSING THE INCLUSION OF THE BOUNDARY.
\r
1181 ;BITS 07 - 17 THE WRITE-PROTECTION THE INCLUSION OF THE BOUNDARY.
\r
1182 DTOP=1B18 ;SET INDICATES DATA TRANSFER IN PROGRESS.
\r
1183 ;BITS 19 -29 ERROR CONDITIONS INDICATORS (ERROR WHEN SET) --
\r
1184 SRCHE=1B19 ;SEARCH ERROR (DISK TIMING TRACK PROBLEMS!!)
\r
1185 DDE=1B20 ;DISK DESIGNATION ERROR
\r
1186 TSE=1B21 ;TRACK SELECT ERROR (OR EXCEEDS SYSTEM CAPACITY)
\r
1187 NRDY=1B22 ;DISK NOT READY (OR NON-EXISTENT DISK REFERENCED)
\r
1188 PSF=1B23 ;POWER SUPPLY FAILURE
\r
1189 DPAR=1B24 ;DISK PARITY ERROR
\r
1190 CHDPAR=1B25 ;CHANNEL DATA PARITY ERROR
\r
1191 CHCPAR=1B26 ;CHANNEL CONTROL PARITY ERROR
\r
1192 NXMEM=1B27 ;NON-EXISTENT MEMORY REFERENCED
\r
1193 WRPE=1B28 ;ATTEMPTED TO WRITE IN PROTECTED DISK AREA (SEE BITS 06 - 17)
\r
1194 OVR=1B29 ;OVERRUN, I.E., MEMORY DIDN'T RESPOND QUICKLY ENOUGH
\r
1195 ;BIT 30 CHANNEL CONTROL WORD WRITTEN IN MEMORY (THIS BIT IS
\r
1196 ;TURNED ON ON ALMOST ALL TERMINATIONS.)
\r
1197 BUSYBT=1B31 ;BUSY (SYNCHRONIZER PERFORMING A COMMAND SEQUENCE)
\r
1198 DONEFLG=1B32 ;DONE -- THIS ACTUALLY CAUSES THE INTERRUPT.
\r
1199 ;BITS 33 - 35 PI CHANNEL SELECTION BITS.
\r
1201 ;COMBINATIONS OF ERRO BITS GROUPED BY TYPE --
\r
1202 DATERR=DPAR!CHDPAR ;DATA ERRORS.
\r
1203 DEVERR=SRCHE!PSF!CHCPAR!OVR ;DEVICE ERRORS.
\r
1204 SETERR=DDE!TSE!NRDY!WRPE!NXMEM ;SOFTWARE-PREVENTABLE ERRORS.
\r
1205 \f;CONO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER
\r
1207 ;BITS 00 - 17 UNUSED
\r
1208 ;BITS 18 - 19 SELECT DISK FOR SECTOR COUNTER READ-OUT A(SEE DATAI BITS 28-35)
\r
1209 ;BITS 20 - 29 RESET THE CORRESPONDING CONI ERROR BIT
\r
1210 ;(BUT PSE MAY REFUSE TO BE RESET)
\r
1211 WRCCWD=1B30 ;WRITE THE CHANNEL CONTROL WORD INTO MEMORY (NOW!)
\r
1212 STPBIT=1B31 ;STOP -- IMMEDIATELY CEASE PRESENT I/O AND CLEAR THE CHANNEL.
\r
1213 RESETB=1B32 ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT
\r
1214 ;BITS 33 - 35 PI CHANNEL SELECTION BITS
\r
1216 ;DATAI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1218 ;BITS 00 - 17 UNUSED
\r
1219 ;BITS 18 - 23 PARITY REGISTER
\r
1220 ;BITS 24 - 25 UNUSED
\r
1221 ;BITS 26 - 27 DISK SELECTED BY BITS 18-19 OF LAST CONO
\r
1222 ;BITS 28 - 35 CURRENT SECTOR POSITION OF SELECTED DISK (FOR LATENCY OPTIMIZATION!)
\r
1224 ;DATAO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1226 ;BITS 00 - 17 DISK ADDRESS ELECTION
\r
1227 ;BITS 00 - 01 DISK SELECT
\r
1228 ;BITS 02 - 10 TRACK SELECT (BCD, BUT FIRST CHAR IS JUST 1 BIT)
\r
1229 ;BITS 11 - 17 SEGMENT SELECT (BCD, BUT FIRST CHAR HAS ONLY 3 BITS)
\r
1230 ;BITS 18 - 23 INITIAL PARITY REGISTER SETTING 9ZERO EXCEPT FOR DIAGNOSTIC PROGRAMS)
\r
1231 DDSKPE=1B24 ;DISABLE DISK PARITY ERROR STOP
\r
1232 DCHNPE=1B25 ;DISABLE CHANNEL DATA PARITY ERROR STOP
\r
1233 WRBIT=1B16 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK
\r
1234 ;BITS 27 - 34 ;CORRESPONDING BITS OF INITIAL CHANNEL CONTROL ADDRESS, HENCE,
\r
1235 ; THIS ADDRESS MUST BE EVEN AND IN THE FIRST 1K OF CORE MEMORY!
\r
1236 ;BIT 35 ;WRITE EVEN PARITY DATA INTO MEMORY (DIAGNOSTICS ONLY!)
\r
1240 PUSHJ PDP,DISKUP ;BE SURE THE DISK IS UP AND READY.
\r
1241 PUSHJ PDP,WRITLK ;BE SURE WRITE-LOCK SWITCHES ARE OFF.
\r
1242 PUSHJ PDP,CAPCTY ;DETERMINE THE CURRENT DISK CAPACITY OF THE
\r
1243 ; SYSTEM, I.E. HOW MANY DISKS ARE ATTACHED TODAY ?
\r
1244 MOVEM TAC,LBHIGH ;STORE HIGHEST LEGAL LOGICAL BLOCK NUMBER
\r
1248 LSH TAC1,BLKSPK ;COMPUTE AND SAVE THE LOWEST LOGICAL BLOCK
\r
1249 SUBM TAC,TAC1 ; NUMBER RESERVED FOR SWAPPING.
\r
1251 CAIG TAC1,STATBK ;SWAPPING AREA MUST NOT OVERLAY THE
\r
1252 JRST RFRSHE ; VITAL STATISTICS BLOCK.
\r
1255 MOVN TAC1,TAC ;SET SATXWD TO SHOW ONLY THE NUMBER OF
\r
1256 HRLM TAC1,SATXWD ; SAT BLOCKS ACTUALLY IN EXISTENCE.
\r
1260 CAML TAC,LOWSWP ;MAKE VARIOUS CONSISTENCY CHECK TO DETERMINE
\r
1261 JRST RFRSHE ; THAT THE DISK PARAMETERS SPECIFIED DURING THE
\r
1263 CAIG TAC1,STATBK ; ONCE-ONLY DIALOGUE DO NOT CAUS THE DISK
\r
1264 CAIGE TAC,STATBK ; SWAPPING AREA, VITAL STATISTICS BLOCK, AND/OR
\r
1265 JRST RFRSH1 ; THE MFD AND SAT BLOCK TO OVERLAP ONE ANOTHER.
\r
1266 RFRSHE: MOVEI TAC,RFSHME
\r
1267 ;IF THERE IS SOME OVERLAPPING OF
\r
1268 PUSHJ PDP,IOCON ; THESE DISK STORAGE AREAS, PRING AN
\r
1269 PUSHJ PDP,OPOUT ; ERROR MESSAGE AND THEN GO BACK TO THE
\r
1270 POP PDP,TAC ; DIALOGUE TO AK THE PARAMETER SPECIFICATION
\r
1271 JRST REF6 ; QUESTIONS AGAIN.
\r
1273 RFSHME: ASCIZ /PARAMETER SPECIFICATION ERROR. TRY AGAIN.
\r
1277 RFRSH1: PUSHJ PDP,WRSTAT ;WRITE OUT THE VITAL STATISTICS BLOCK ON THE DISK.
\r
1278 JRST REFERR ; AN ERROR ON THIS WRITE IS BAD TROUBLE !!
\r
1280 ;NEXT WRITE THE MFD (MASTER FILE DIRECTORY) ONTO THE DISK
\r
1282 PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER
\r
1283 MOVE TAC,[XWD 1,1] ;THE FIRST ENTRY IN THE MFD IS FOR
\r
1284 MOVEM TAC,WNZBUF ; THE MFD ITSELF.
\r
1285 MOVE TAC,[SIXBIT/UFD/]
\r
1286 HRR TAC,MFDBLK ;POINTER TO MFD RETRIEVAL INFORMATION
\r
1287 MOVEM TAC,WNZBUF+1
\r
1288 MOVE TAC,[SIXBIT/*SAT*/] ;THE ONLY OTHER ENTRY INITIALLY IN THE
\r
1289 MOVEM TAC,WNZBUF+2 ; MFD IS FOR THE FILE NAMED *SAT*.SYS WHICH
\r
1290 HLRZ TAC1,SATXWD ; PERMITS ACCESS TO THE SAT BLOCKS FOR
\r
1291 HRRZ TAC,MFDBLK ; ANYONE WHO WANTS TO LOOK AT THEM.
\r
1292 SUBI TAC,-1(TAC1) ;COMPUTE POINTER TO THE RETRIEVAL INFORMATION
\r
1293 HLL TAC,[SIXBIT/SYS/] ; FOR THE *SAT*.SYS FILE.
\r
1294 MOVEM TAC,WNZBUF+3
\r
1296 ADDI TAC,1 ;COMPUTE LOGICAL BLOCK NUMBER OF THE MFD.
\r
1297 PUSHJ PDP,WNZWR ;WRITE THE MFD OUT ONTO THE DISK.
\r
1299 JRST REFERR ;ERROR
\r
1301 MOVE TAC,[XWD -200,WNZBUF]
\r
1303 HRRZM TAC1,CHKSAV ;SAVE CHECKSUM TO GO INTO RETRIEVAL INFORMATION.
\r
1306 ;NEXT WRITE MFD RETRIEVAL INFORMATION BLOCK ONTO THE DISK
\r
1308 PUSHJ PDP,WNZCLR ;CLEAR OUTPUT BUFFER
\r
1309 MOVE TAC,[XWD 1,1]
\r
1310 MOVEM TAC,WNZBUF ;FILE NAME
\r
1312 HLL TAC,[SIXBIT /UFD/]
\r
1313 MOVEM TAC,WNZBUF+1 ;FILE EXTENSION, DATE
\r
1314 HRLZI TAC,045000 ;PROTECTION (ANY PROJECT 1 USER MAY WRITE IN MFD)
\r
1315 PUSHJ PDP,MDTMOT ;FILL IN TIME, DATE, AND MODE
\r
1316 MOVEM TAC,WNZBUF+2
\r
1317 MOVE TAC,[XWD -200,1] ;NEGATIVE WORD COUNT AND PROGRAMMER NUMBER
\r
1318 MOVEM TAC,WNZBUF+3 ;GO INTO WORD 4 OF RETRIEVAL INFO
\r
1321 SUBI TAC,-2(TAC1) ;COMPUTE POINTER TO THE MFD.
\r
1322 HRL TAC,CHKSAV ;RETRIEVE SAVED CHECKSUM OF MFD.
\r
1323 MOVEM TAC,WNZBUF+4
\r
1324 MOVE TAC,MFDBLK ;THE LAST WORD OF ANY BLOCK OF RETRIEVAL INFORMATION
\r
1325 MOVEM TAC,WNZBUF+177 ; MUST CONTAIN ITS OWN BLOCK NUMBER.
\r
1326 PUSHJ PDP,WNZWR ;WRITE MFD RETRIEVAL INFOMRATION ONTO THE DISK
\r
1327 JRST REFERR ;ERROR
\r
1329 ;NEXT CREATE THE NECESSARY SAT BLOCKS ON THE DISK
\r
1331 PUSH PDP,SATXWD ;SATXWD CONTROLS THE OUTER LOOP
\r
1332 MOVEI TAC,SATENT ;SET UP SATPTR TO SHUFFLE THROUGH THE BLOCKS
\r
1334 REFST1: MOVEM TAC,SATPTR
\r
1335 PUSHJ PDP,WNZCLR ;CLEAR THE BUFFER
\r
1339 PUSHJ PDP,SETWNZ ;MARK UNAVAILABLE BITS AT END OF THE BLOCK
\r
1341 HLRZ TAC1,@SATPTR ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK
\r
1342 CAMGE TAC1,LOWSWP ;IS ENTIRE BLOCK WITHIN SWAPPING AREA?
\r
1343 JRST REFST2 ;NO, JUMP AHEAD
\r
1344 MOVEI TAC1,NUMBIT ;YES, MARK IT ALL OFF LIMITS
\r
1347 JRST REFST7 ;HAVING SET ALL BITS, NO FURTHER TESTING IS NEEDED,
\r
1349 REFST2: MOVN TAC,TAC1
\r
1351 SUB TAC1,LOWSWP ;IS ANY OF SWAPPING AREA WITHIN THIS SAT BLOCK?
\r
1352 JUMPLE TAC1,REFST3 ;NO, JUMP AHEAD
\r
1353 ADD TAC,LOWSWP ;YES, MARK SWAPPING AREA AS UNAVAILABLE.
\r
1356 REFST3: HLRZ TAC1,@SATPTR ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK.
\r
1357 JUMPN TAC1,RFST3A ;ONLY FOR FIRST SAT BLOCK--
\r
1358 HRLZI TAC,400000 ;MARK LOGICAL BLOCK 0 AS BEING IN USE.
\r
1360 RFST3A: HRRZI TAC,STATBK
\r
1361 CAIL TAC,(TAC1) ;IS THE VITAL STATISTICS BLOCK WITHIN
\r
1362 CAIL TAC,NUMBLK(TAC1) ; THE RANGE OF THIS SAT BLOCK ?
\r
1363 JRST REFST4 ;NO, JUMP AHEAD
\r
1365 MOVEI TAC1,1 ;YES, MARK IT UNAVAILABLE,
\r
1368 REFST4: MOVE TAC,SATXWD ;SET UP TO LOOP THRU LOGICAL BLOCK NUMBERS FOR MFD.
\r
1369 SUB TAC,[XWD 3,1] ; MFD RETRVL INFO. SAT BLOCKS, AND SAT RETRVL INFO.
\r
1371 REFST5: PUSH PDP,TAC
\r
1374 CAIL TAC,(TAC1) ;IS THE INDICATED LOGICAL BLOCK NUMBER WITHIN
\r
1375 CAIL TAC,NUMBLK(TAC1) ; THIS PARTICULAR SAT BLOCK ?
\r
1376 JRST REFST6 ;NO, JUMP AHEAD
\r
1378 MOVEI TAC1,1 ;YES, MARK IN-USE BIT.
\r
1381 REFST6: POP PDP,TAC ;LOOP THROUGH THE WHOLE SET OF SPECIAL BLOCKS
\r
1382 AOBJN TAC,REFST5 ; WHICH MUST BE MARKED UNAVAILABLE.
\r
1384 REFST7: MOVE TAC,[XWD -200,WNZBUF]
\r
1386 PUSHJ PDP,CHKSUM ;COMPUTE CHECKSUM
\r
1388 HRRZM TAC1,1(TAC) ;STORE IT TEMPORARILY IN THE SATENT TABLE.
\r
1390 HRRZ TAC,(PDP) ;LOGICAL BLOCK NUMBER TO BE WRITTEN
\r
1391 PUSHJ PDP,WNZWR ;WRITE THIS SAT BLOCK ONTO THE DISK
\r
1392 JRST REFER1 ;ERROR
\r
1395 AOBJN TAC,.+2 ;LAST SAT BLOCK WRITTEN ?
\r
1397 JRST REFSRF ;YES, GO WRITE SAT RETRIEVAL INFORMATION.
\r
1399 PUSH PDP,TAC ;NO, ADVANCE SATPTR AND LOOP
\r
1400 MOVE TAC,SATPTR ; BACK TO DO NEXT SAT BLOCK.
\r
1404 ;FINALLY, WRITE OUT THE RETRIEVAL INFORMATION FOR THE FILE *SAT*.SYS
\r
1406 REFSRF: PUSHJ PDP,WNZCLR ;CLEAR THE BUFFER
\r
1407 MOVE TAC,[SIXBIT /*SAT*/]
\r
1408 MOVEM TAC,WNZBUF ;STORE FILE NAME
\r
1410 HLL TAC,[SIXBIT /SYS/]
\r
1411 MOVEM TAC,WNZBUF+1 ;STORE EXTENSION AND DATE
\r
1412 HRLZI TAC,555000 ;PROTECTION CODE (UNTOUCHABLE FILE ! )
\r
1413 PUSHJ PDP,MDTMOT ;FILL IN TIME, DATE AND MOTE
\r
1414 MOVEM TAC,WNZBUF+2
\r
1415 HLLZ TAC,SATXWD ;COMPUTE NEGATIVE WORD COUNT
\r
1417 HRRI TAC,1 ;PROGRAMMER NUMBER=1
\r
1418 MOVEM TAC,WNZBUF+3
\r
1421 MOVEI TAC,SATENT ;PREPARE TO STORE POINTERS TO ALL THE SAT BLOCKS.
\r
1425 REFSRL: HRRZ AC1,TAC1 ;GET LOGICAL BLOCK NUMBER OF SAT BLOCK.
\r
1426 HRL AC1,1(TAC) ;RETRIEVE THE CORRESPONDING CHECK-SUM.
\r
1427 MOVEM AC1,WNZBUF+4(AC2) ;STORE A POINTER WORD IN THE BUFFER.
\r
1428 MOVSI AC1,400000 ;RESTORE SATENT ENTRY TO CORRECT INITIAL VALUE.
\r
1432 AOBJN TAC1,REFSRL ;IS THAT ALL THE POINTERS ? IF NOT, LOOP BACK.
\r
1434 MOVE TAC,MFDBLK ;YES.
\r
1435 ADDI TAC,1(AC2) ;NOW COMPUTE LOGICAL BLOCK NUMBER OF THIS SAT
\r
1436 MOVEM TAC,WNZBUF+177 ; RETRIEVAL INFORMATION, AND STORE IT IN
\r
1437 ; THE LAST WORD OF THE BLOCK (THIS IS
\r
1438 ; REQUIRED FORMAT OF ALL RETRVL INFO).
\r
1440 PUSHJ PDP,WNZWR ;WRITE THE *SAT*.SYS RETRVL INFO ONTO THE DISK.
\r
1441 JRST REFERR ;ERROR
\r
1445 JRST CPOPJ1 ;***EXIT FROM PDP-10 DISK REFRESHER.***.........
\r
1447 ;ROUTINE TO WRITE THE FIXED BLOCK OF VITAL STATISTICS ONTO THE DISK.
\r
1449 WRSTAT: PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER
\r
1450 MOVE TAC,[XWD -WRSTSZ,0]
\r
1451 WRSTA1: MOVE TAC1,@WRSTA9(TAC) ;STORE KEY QUANTITIES IN THE OUTPUT BUFFER
\r
1452 MOVEM TAC1,WNZBUF(TAC)
\r
1455 MOVE TAC,[SIXBIT/STATBK/] ;STORE AN IDENTIFIER NEAR THE
\r
1456 MOVEM TAC,WNZBUF+^D126 ; END OF THE VITAL STATISTICS BLOCK.
\r
1459 PUSHJ PDP,WNZWR ;WRITE THIS VITAL STATISTICS BLOCK ONTO THE DISK.
\r
1460 JRST WRSTA2 ;WRITE ERROR
\r
1461 JRST CPOPJ1 ;GOOD WRITE. ***SUBROUTINE EXIT***...........
\r
1464 WRSTA2: MOVEI TAC,WRSTM1
\r
1465 PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE IF THIS VITAL WRITE FAILS.
\r
1467 POPJ PDP, ;THEN ALSO GIVE AN ERROR RETURN FOR FURTHER ACTION.
\r
1469 WRSTM1: ASCIZ /CANNOT WRITE VITAL STATISTICS BLOCK ON DISK. HELP!!
\r
1473 ;TABLE OF POINTERS TO THE VITAL STATISTICS THAT ARE STORED IN "STATBK" ON THE DISK.
\r
1475 WRSTA9: XWD ,MFDBLK ;LOGICAL BLOCK NUMBER OF MFD RETRIEVAL INFORMATION
\r
1476 XWD ,SATXWD ;LH = - NUMBER OF SAT BLOCKS ACTUALLY IN EXISTENCE.
\r
1477 ;RH = LOGICAL BLOCK NUMBER OF FIRST SAT BLOCK
\r
1478 XWD ,LBHIGH ;HIGHEST LEGAL LOGICAL BLOCK NUMBER ON DISK(S)
\r
1479 XWD ,LOWSWP ;LOWEST LOGICAL BLOCK NUMBER ALLOCATED FOR SWAPPING
\r
1480 XWD ,K4SWAP ;NUMBER OF 1K BLOCKS OF DISK SPACE FOR SWAPPING
\r
1482 XWD ,MAXSWP ;MAXIMUM NUMBER OF THOSE 1K BLOCKS ACTUALLY
\r
1483 ; USED SINCE THE DISK WAS LAST REFRESHED.
\r
1486 XWD 0,LOWSWP ;LOWSWP DOES DOUBLE DUMMY DUTY IN
\r
1487 ; NON-SWAPPING SYSTEM
\r
1491 ;ROUTINE TO READ IN THE FIXED BLOCK OF "VITAL STATISTICS" FROM
\r
1492 ; THE DISK AND DISTRUBUTE THEM TO THE APPROPRIATE CORE LOCATIONS.
\r
1494 RDSTAT: MOVEI TAC,STATBK
\r
1495 PUSHJ PDP,WNZRD ;READ IN THE VITAL STATISTICS BLOCK.
\r
1496 JRST RDSTA2 ;ERROR
\r
1497 MOVE TAC,WNZBUF+^D126 ;CHECK THE IDENTIFIER TO VERIFY THAT
\r
1498 CAME TAC,[SIXBIT /STATBK/] ; THE CORRECT BLOCK WAS READ.
\r
1499 JRST RDSTA2 ;ERROR, STATISTICS BLOCK APPARENTLY WAS CLOBBERED.
\r
1501 MOVE TAC,[XWD -WRSTSZ,0] ;STORE AWAY THESE IMPORTANT PARAMETERS
\r
1502 RDSTA1: MOVE TAC1,WNZBUF(TAC) ; UNDER CONTROL OF A TABLE IN THE "WRSTAT"
\r
1503 MOVEM TAC1,@WRSTA9(TAC) ; ROUTINE WHICH WRITES OUT THE VITAL
\r
1504 AOBJN TAC,RDSTA1 ; STATISTICS BLOCK ONTO THE DISK.
\r
1506 POPJ PDP, ;***SUBROUTINE EXIT***........
\r
1509 RDSTA2: MOVEI TAC,RDSTM1
\r
1510 ;PRINT ERROR MESSAGE IF THE VITAL
\r
1511 PUSHJ PDP,ICONM ; STATISTICS BLOCK CANNOT BE READ
\r
1513 PUSHJ PDP,REF ;GO THRU THE REFRESH DIALOGUE IN "ONCE".
\r
1514 JRST RDSTAT ;NOW TRY AGAIN.
\r
1516 RDSTM1: ASCIZ /VITAL DISK STATISTICS LOST, SUGGEST REFRESHING!
\r
1519 ;ROUTINE TO DETERMINE THE CURRENT SYSTEM'S DISK CAPACITY. I.E., THE NUMBER OF
\r
1520 ; DISKS ATTACHED TO THE RC-10 DISK SYNCHRONIZER TODAY.
\r
1522 ;ON EXIT FROM THIS SUBROUTINE
\r
1523 ; C(TAC) = HIGHEST LOGICAL DISK BLOCK NUMBER NOW EXTANT.
\r
1525 CAPCTY: MOVEI TAC,NUMSAT
\r
1526 IMULI TAC,NUMBLK ;COMPUTE AND SAVE MAXIMUM POSSIBLE CAPACITY.
\r
1527 PUSH PDP,LBHIGH ;SAVE EXISTING VALUE OF HIGHEST LEGAL BLOCK NUMBER.
\r
1528 MOVEM TAC,LBHIGH ;TEMPORARILY CHANGE THIS VALYUE SO THAT THE VALIDITY
\r
1529 ; CHECK IN "DSKINT" WILL NOT FAIL SPURIOUSLY.
\r
1532 CPCT1: PUSH PDP,TAC
\r
1533 PUSHJ PDP,WNZRD ;ATTEMPT TO READ FIRST BLOK OF EACH SUCCESSIVE DISK.,
\r
1537 CAMGE TAC,LBHIGH ;ALREADY TRIED ALL DISKS (MAXIMUM CAPACITY) ?
\r
1538 JRST CPCT1 ;NO, GO TRY THE NEXT ONE.
\r
1540 CPCT2: SUBI TAC,1
\r
1541 POP PDP,LBHIGH ;RESTORE PREVIOUSLY EXISTING VALUE OF THE HIGHEST
\r
1542 ; LEGAL LOGICAL DISK BLOCK NUMBER.
\r
1543 POPJ PDP, ;***SUBROUTINE EXIT***.......
\r
1546 CPCT3: POP PDP,TAC
\r
1547 CONSZ DSK,NRDY ;NON-EXISTENT DISK?
\r
1548 JUMPN TAC,CPCT2 ;YES, THE LIMIT OF DISK STORAGE HAS BEEN FOUND.
\r
1549 ; HOWEVER, DISK 0 MUST ALWAYS BE PRESENT.
\r
1551 MOVEI TAC,CPCTM1 ;NO, SOME OTHER TYPE OF READ ERROR.
\r
1553 PUSHJ PDP,OPOUT ;PRINT ERROR MESSAGE
\r
1555 JRST CAPCTY ;TRY AGAIN
\r
1556 CPCTM1: ASCIZ /DISK READ ERROR DURING CAPACITY SEARCH INITIALIZATION
\r
1559 ;ROUTINE TO ASSURE THAT THE STATUS OF THE WRITE-LOCK SWITCHES ON THE
\r
1560 ; DISK MAINTENANCE PANEL IS SUCH THAT THEY ARE PROTECTING "LESS THAN 0000".
\r
1562 ;THIS ROUTINE LOOPS PRINTING AN ERROR MESSAGE UNTIL THE SWITCHES ARE O.K.
\r
1564 WRITLK: CONI DSK,TAC
\r
1565 TLNN TAC,13777 ;BOUNDARY ZERO AND MAINTENANCE-SEGMENT OFF ?
\r
1566 TLNN TAC,<PLGSW>B53 ;YES, IS ROTARY SWITCH SET
\r
1567 ; TO EITHER X UNDER OR OVER(AS OPPOSED
\r
1568 ; TO UNDER OR X OVER)
\r
1569 JRST WRLK8 ;NO. GO PRINT ERROR MESSAGE AND LOOP.
\r
1571 ;AN UNFORTUNATE HARDWARE OVERSIGHT MAKES IT IMPOSSIBLE TO SENSE THE DIFFERENCE
\r
1572 ; BETWEEN "PROTECT LESS THAN" AND "PROTECT LESS THAN OR EQUAL". THEREFORE
\r
1573 ; THIS ROUTINE MUST ACTUALLY TRY WRITING ON TRACK 0000.
\r
1574 MOVE TAC,[252525252525]
\r
1576 MOVE TAC,[XWD WNZBUF,WNZBUF+1]
\r
1578 BLT TAC,WNZBUF+177
\r
1580 PUSHJ PDP,WNZWR ;WRITE PATTERN IN BLOCK 0.
\r
1582 POPJ PDP, ;***GOOD EXIT FROM WRITLK SUBROUTINE***.........
\r
1585 WRLK2: MOVEI TAC,WRLKM1
\r
1586 CONSZ DSK,WRPE ;WRITE-PROTECTION ERROR ?
\r
1587 ;YES, PROTECT SWITCH ERRONEOUSLY SET ON "LESS THAN
\r
1588 ; OR EQUAL" INSTEAD OF "LESS THAN".
\r
1589 ;NO, SOME OTHER FAILURE DURING THE WRITE OF BLOCK 0.
\r
1590 WRLK8: MOVEI TAC,WRLKM2 ;WRITE-LOCK SWITCHES SET INCORRECTLY.
\r
1591 WRLK9: PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE
\r
1593 JRST WRITLK ;GO TRY AGAIN
\r
1595 WRLKM1: ASCIZ /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK.
\r
1597 WRLKM2: ASCIZ /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND
\r
1598 DISK WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN",
\r
1602 ;DISK READING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.
\r
1603 ; AVOIDS USING THE MONITOR OUFUFS AND INTERRUPT STRUCTURE.
\r
1605 ;ON ENTRY TO THIS SUBROUTINE, TAG CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK
\r
1606 ; BLOCK WHICH IS TO BE READ INTO THE ONCE-ONLY DISK BUFFER AREA.
\r
1608 WNZRD: CONO DSK,DATERR!DEVERR!SETERR!RESETB ;CLEAR THE DISK SYNCHRONIZER
\r
1609 CONSZ DSK,BUSYBT!DONEFLG
\r
1610 JRST WNZRD ;DON'T PROCEED UNLESS THE CLEAR WORKED.
\r
1612 PUSH PDP,DSKFDG ;SAVE THIS INSTRUCTION FROM "DSKINT"
\r
1613 MOVE TAC1,[HRRZI TAC,0] ;NOW TAMPER WITH THAT SAVED LOCATION SO
\r
1614 MOVEM TAC1,DSKFDG ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.
\r
1615 MOVE TAC1,[XWD -200,WNZBUF-1]
\r
1616 PUSHJ PDP,DFRED ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.
\r
1617 WNZRDC: POP PDP,DSKFDG ;RESTORE THE MOLESTED INSTRUCTION IN DSKINT.
\r
1619 PUSHJ PDP,WNZWAT ;WAIT UNTIL THE READ IS FINISHED.
\r
1621 CONSZ DSK,DATERR!DEVERR!SETERR ;ANY ERRORS ?
\r
1622 JRST WNZRDX ;YES, GIVE ERROR RETURN.
\r
1623 MOVE TAC1,RCXCCW ;NO, BUT CHECK THAT THE FINAL VALUE OF THE
\r
1624 CAMN TAC1,RCXFIN ; CHANNEL CONTROL WORD WAS AS EXCPECTED ALSO.
\r
1625 AOS (PDP) ;***GOOD RETURN***........
\r
1626 WNZRDX: POPJ PDP, ;ERROR RETURN,
\r
1634 ;DISK WRITING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.
\r
1635 ; AVOIDS USING THE MONITOR QUEUES AND INTERRUPT STRUCTURE.
\r
1637 ;ON ENTRY TO THIS SUBROUTINE, TAC CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK
\r
1638 ; BLOCK WHICH IS TO BE WRITTEN ONTO THE DISK FROM THE ONCE-ONLY DISK BUFFER AREA.
\r
1640 WNZWR: CONO DSK,DATERR!DEVERR!SETERR!RESETB ;CLEAR THE DISK SYNCHRONIZER.
\r
1641 CONSZ DSK,BUSYBT!DONEFLG
\r
1642 JRST WNZWR ;DON'T PROCEED UNLESS THAE CLEAR WORKED.
\r
1644 MOVEM TAC,LBSAVE ;SAVE LOGICAL BLOCK NUMBER IN CASE AN ERROR RETURN
\r
1645 ; MUST BE TAKEN FROM THE "REFRESH" SUBROUTINE.
\r
1646 PUSH PDP,DSKFDG ;SAVE THIS ISNTRUCTION FROM "DSKINT".
\r
1647 MOVE TAC1,[HRRZI TAC,0] ;NOW TAMPER WITH THAT SAVED LOCATION SO
\r
1648 MOVEM TAC1,DSKFDG ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.
\r
1649 MOVE TAC1,[XWD -200,WNZBUF-1]
\r
1650 PUSHJ PDP,DFWRT ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.
\r
1652 JRST WNZRDC ;THE REMAINDER OF THE WRITE ROUTINE IS IDENTICAL
\r
1653 ; TO THE READ ROUTINE
\r
1655 \f;SUBROUTINE TO WATCH FOR THE DONE FLAG TO COME ON AND TIME OUT IF
\r
1656 ; IT DOESN'T COME UP SOON ENOUGH (SAY 5 SEC OR SO).
\r
1658 WNZWAT: MOVE TAC,[^D1000000] ;AT MOST ONE MILLION TIMES THRU THE CONSZ-SOJG LOOP
\r
1659 WNZWTL: CONSZ DSK,DONEFLG ;DONE FLAG ON YET ?
\r
1660 POPJ PDP, ;YES, GOOD EXIT.......
\r
1661 SOJG TAC,WNZWTL ;NO, TIMED OUT YET ?
\r
1662 ;YES, PRINT "DISK HUNG" ERROR MESSAGE.
\r
1666 POP PDP,TAC ;SKIP UP A SUBROUTINE LEVEL, AND GIVE AN
\r
1667 POPJ PDP, ; ERROR RETURN FROM WNZRD OR WNZWR.......
\r
1668 WATMSG: ASCIZ /DISK HUNG.
\r
1672 ;SUBROUTINE TO SET SPECIFIED BITS IN A SAT BLOCK WHILE FORMING IT IN WNZBUF
\r
1674 ;ENTRY CONDITIONS -- C(TAC) = FIRST BIT NUMBER TO SET (NUMBERED BEGINNING AT 0)
\r
1675 ; C(TAC1) = NUMBER OF BITS TO SET
\r
1677 SETWNZ: MOVE AC1,TAC1
\r
1682 STWNZ1: ORM AC2,WNZBUF(TAC)
\r
1686 STWNZ2: SOJN AC1,STWNZ1
\r
1687 POPJ PDP, ;SUBROUTINE EXIT...........
\r
1690 ;SUBROUTINE TO CLEAR THE ONCE-ONLY OUTPUT BUFFER, WNZBUF
\r
1691 WNZCLR: SETZM WNZBUF
\r
1692 MOVE TAC,[XWD WNZBUF,WNZBUF+1]
\r
1693 BLT TAC,WNZBUF+177
\r
1694 POPJ PDP, ;SUBROUTINE EXIT...........
\r
1696 ;SUBROUTINE TO MASK THE TIME, DATE, AND DATA MODE (=14 FOR BINARY MODE0 INTO ACCUMU-
\r
1697 ; LATOR TAC IN THE FORMAT USED IN WORD 3 OF A DISK RETRIEVAL INFORMATION BLOCK.
\r
1699 MDTMOT: PUSH PDP,TAC
\r
1700 MOVE TAC,TIME ;GET TIME IN JIFFIES.
\r
1701 IDIVI TAC,JIFMIN ;CONVERT TO MINUTES
\r
1703 IOR TAC,THSDAT ;TODAY'S DATE
\r
1704 TLO TAC,14B<^D12*^D18> ;BINARY MODE
\r
1707 POPJ PDP, ;SUBROUTINE EXIT............
\r
1710 ;ERROR EXIT FROM "REFRESH" WHEN A BAD WRITE ON THE DISK OCCURS DURING REFREHSING.
\r
1712 REFER1: POP PDP,TAC ;CORRECT PDP IF EXTRA PUSH HAD OCCURRED.
\r
1714 REFERR: MOVE TAC,LBSAVE ;GET BLOCK NUMBER FOR THE ERROR MESSAGE AT REF4.
\r
1715 POPJ PDP, ;THIS NO-SKIP RETURN RE-ENTERS THE REFRESH DIALOGUE.
\r
1719 ;MISCELLANEOUS STORAGE SPACE USED BY THE PDP-10 DISK REFRESHING ROUTINE.
\r
1724 WNZBUF: BLOCK 200 ;BUFFER FOR READING AND WRITING DISK
\r
1725 ; BLOCKS DURING THE ONCE-ONLY CODE.
\r
1727 LOWSWP: 0 ;LOWEST LOGICAL BLOCK FOR SWAPPING
\r
1729 > ;END OF REFRESH PROCEDURE FOR THE RD10 DISK.
\r
1731 > ;CLOSE AN EVEN EARLIER FTDISK CONDITIONAL.
\r
1732 \fINTERNAL FTCHECK
\r
1735 EXTERNAL CHKREG,CHKEND,CHECK,MONPTR,MONSUM
\r
1737 CK: MOVEI TAC,CHKBEG
\r
1741 PUSHJ PDP,CHECK ;COMPUTE AND STORE CHECKSUM OF THE PURE AREA OF
\r
1742 MOVEM TAC1,MONSUM ; THE TIME-SHARING MONITOR.
\r