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 ; (DDTSYM=36) WHERE EXEC DDT EXPECTS IT.
\r
62 ; IF NOT ALREADY MOVED THERE. RETURN POINTER IN UUO
\r
63 HLRE TAC1,UUO ;-LENGTH OF S. T.
\r
64 ;NOTE THAT THE SYMBOL TABLE POINTER IS MOVED FROM
\r
65 ; JOBSYM(JDAT) TO DDTSYM(JDAT) BY SYSMAK WHEN THE SYSTEM
\r
67 JUMPE TAC1,JRSTI1 ;0 IF NO S. T. TO MOVE UP
\r
69 HRRZ TAC,UUO ;FIRST ADDRESS
\r
70 ADDI TAC,(TAC1) ;LENGTH+FIRST ADDRESS
\r
71 HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS
\r
72 SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1
\r
73 HRRM DAT,STO1 ;DIST, TO MOVE
\r
74 MOVE TAC1,UUO ;L-N,FIRST ADD.
\r
75 ADDI TAC1,1(DAT) ;FROM NEW S.T. POINTER
\r
76 MOVEM TAC1,DDTSYM ;STORE IN LOWER CORE
\r
78 STO1: MOVEM TAC1,.(TAC)
\r
81 \f EXTERN DEVLST,INTNUM,INTTAB
\r
82 ;SETUP LOCATIONS 40 THRU 61
\r
84 JRSTI1: MOVE TAC,[XWD LOC40,40] ;SET UP LOWER CORE PI LOCATIONS
\r
87 ;LINK DEVICE SERVICE ROUTINES TOGETHER - IF NOT LOADED BY BUILD
\r
89 SKIPE DEVLST ;HAS SERVICE ROUTINES ALREADY BEEN CHAINED TOGETHER?
\r
90 JRST ALRCHN ;YES, MUST HAVE BEEN LOADD WITH BUILD
\r
91 MOVSI TAC,INTNUM ;NO, NEG. NO. OF SERVICE ROTUINES*2
\r
92 INTLOP: HLRZ DAT,INTTAB(TAC) ;GET NEXT PI NUMBER
\r
93 ANDI DAT,7 ;MASIC OUT NUMBER OF DDB'S
\r
94 LSH DAT,1 ;SHIFT LEFT ONE SO MATCH PI LOCATIONS
\r
95 JUMPE DAT,NOPICH ;DOES THIS DEVICE HAVE A PI CHANNEL (PTY)?
\r
96 MOVE DAT,ITEM ;YES, PICK UP JSR CH'N FROM LOWER CORE
\r
97 INTLP1: MOVE DAT,ITEM ;SAVE IT IN DAT (EITHER A JRST DEV'NT OR
\r
99 MOVE ITEM,1(DAT) ;PICK UP INSTR. FOLLOWING INTERRUPT CONSO
\r
101 TLNN ITEM,00740 ;IS IT A JEN?
\r
102 JRST INTLP1 ;NO, KEEP LOOKING
\r
103 MOVE TAC1,INTTAB(TAC) ;YES, LAST DEVICE SO FAR, GET DEV'NT
\r
104 HRLI TAC1,(JRST) ;MAKE JRST INSTR.
\r
105 MOVEM TAC1,1(DAT) ;CHANGE JEN @CH'N TO JRST DEV'NT
\r
106 MOVEM ITEM,1(TAC) ;MAKE DEV'NT+1 BE JEN @CH'N
\r
107 NOPICH: AOBJN TAC,.+1 ;PICKUP EVERY OTHER WORD?
\r
108 AOBJN TAC,INTLOP ;ANY MOVE INTERRUPT SERVICE ROUTINES?
\r
114 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
154 ;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG
\r
155 EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN
\r
158 MOVE TAC,[JSR TSTAPR] ;REPLACE UUO JSR WIT A JSR HERE IN ONCE
\r
160 CONO APR,ILM!1 ;TURN ON PI & ASSIGN ILM FLAG
\r
161 ;FOR POSSIBLE ILLEGAL MEMORY REF BELOW
\r
162 MOVEM TAC,42 ;PUT A JSR IN CHAN 1 INT. LOC.
\r
163 CONO PI,12300 ;CLR PI SYSTEM, ACTIVATE PI SYSTEM. TURN ON CHAN 1
\r
164 DATAO APR,[XWD 376776,000400] ;SET LOW AND HIGH SEG TO 128K LONG
\r
165 ; EACH STARTING AT ABS LOC 0
\r
166 ; RELOC. FOR HIGH SEG IS 400000 TO DO THIS
\r
167 JRST 1,.+1 ;ENTER USER MODE .+1
\r
168 MOVE TAC,400100 ;TRY TO REFERENCE REL LOC 100 IN HIGH SEG
\r
169 ; AVOID SHADOW ACS WHICH LIKELY HAVE BAD
\r
170 ;PARITY CAUSED BY POWER TURN ON AND TURN OFF
\r
171 MOVEI 17,400000 ;MOVE HARDWARE ACS INTO SHADOW ACS TO CLEAR PARITY
\r
172 ;IF HARDWARE ACS TURNED OFF, ACS WILL BE PRESERVED
\r
173 BLT 17,400017 ;STOP WITH SHADOW AC 17
\r
174 CALL ;COME BACK TO EXEC MODE AT TSTAPR
\r
176 TSTAPR: 0 ;PLACE TO SIDE JSR PC
\r
177 SETZM TWOREG ;ASSUME NO SECOND REG.
\r
178 CONSO APR,ILM ;WAS MEMORY REF OUT OF BOUNDS?
\r
179 SETOM TWOREG ;NO, MUST HAVE SECOND REG. HARDWARE, SET -1
\r
180 CONO APR,ILM ;CLEAR APR FLAGS AGAIN
\r
181 MOVEI TAC,AND2RG ;=0 IF SOFTWARE CANNOT HANDLE 2 SEG(NULSEG LOADED)
\r
182 ANDM TAC,TWOREG ;=-1 IF IT CAN(SEGCON LOADED)
\r
183 ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITES
\r
184 MOVNI TAC,SEGN ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES
\r
185 HRLI TAC,JOBN ;SET RH OF POINTER TO FIRST HIGH SEG
\r
186 ;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST
\r
187 ; WHICH BUILD FORBITS FROM HAVING EXTERNALS
\r
188 MOVSM TAC,SEGPTR ;POINTER USED FOR AOBJN LOOPS
\r
189 CONO PI,10000 ;CLEAR PI SYSTEM
\r
192 \f;ROUTINE TO FIND THE EXEC DDT SYMBOL TABLE POINTER AND MOVE IT TO THE PLACE
\r
193 ;WHERE EXEC DDT EXPECTS IT(DDTSYM=36)
\r
194 ;THE MONITOR CAN BE LOADED IN ANY OF 3 WAYS(IN ORDER OF PERFERNCE):
\r
195 ; 1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON
\r
196 ; 2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER AND COMMON
\r
197 ; 3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD
\r
199 ;THE 3 WAYS LEAVE DDTSYM(36),JOBSYM(116),T30SYM(131) IN DIFFERENT STATES:
\r
200 ; DDTSYM(36) JOBSYM(116) T30SYM(131)
\r
201 ; 1. JUNK S.T.PTR JUNK
\r
202 ; 2. JUNK JUNK(NON-NEG) S.T.PTR
\r
203 ; 3. S.T.PTR S.T.PTR JUNK
\r
206 ; RETURN WITH AC UUO SET TO SYMBOL TABLE POINTER
\r
207 ;CALLED FROM MANDATORY ONCE ONLY CODE AND 141 START CODE(WHICHEVER OCCURS FIRST)
\r
210 EXTERN T30SYM,JOBSYM,DDTSYM,DDTX,SYSDDT
\r
212 MOVSTR: 0 ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND
\r
213 ; FIRST JUMP TO EXEC DDT IF BEFORE MONITOR STARTED
\r
214 MOVJMP: JRST .+1 ;PATCHED TO SETUUO AFTER FIRST EXECUTION
\r
215 MOVE UUO,T30SYM ;ASSUME LOADED BY REGULAR 10/30
\r
216 SKIPL JOBSYM ;OR IS JOBSYM NEGATIVE(MEANING IT IS S.T.PTR)?
\r
217 JRST REGT30 ;WAS LOADED BY REGULAR 10/30
\r
218 MOVE UUO,JOBSYM ;ASSUME LOADED BY TIME SHARING MONITOR AND LOADER
\r
219 SKIPE DEVLST ;OR HAS BUILD PATCHED THE DDB CHAIN?
\r
220 MOVE UUO,DDTSYM ;YES, DDTSYM HAS SYMBOL TABLE POINTER AS STORED
\r
222 REGT30: MOVEM UUO,DDTSYM ;STORE THE SYMBOL TABLE POINTER FOR EXEC DDT
\r
223 MOVEI TAC,DDTX ;MAKE SYSTEM STARTUP LOC(141) GO DIRECTLY TO EXEC
\r
224 ; DDT AND BY PASS THIS FOOLISHNESS
\r
226 MOVEI TAC,SETUUO ;MAKE SURE THIS IS DONE ONLY ONCE
\r
228 SETUUO: MOVE UUO,DDTSYM ;RETURN THE CORRECT(MAYBEUPDATED IF
\r
229 ; EXEC DDT PATCHES MADE BEFORE MONITOR SAVED OR
\r
230 ; STARTED) SYMBOL TABLE POINTER
\r
231 JRST @MOVSTR ;RETURN
\r
233 ;HERE IF EXEC DDT IS STARTED UP BEFORE MONITOR(TO MAKE A PATCH FOR EXAMPLE)
\r
238 PATSYM: JSR MOVSTR ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL
\r
239 ; FIND IT AND PATCH 141 TO GO DIRECTLY TO EXEC DDT
\r
240 JRST DDTX ;AND GO DIRECTLY TO EXEC DDT
\r
242 ;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE
\r
245 ENTRY RCXWNZ ;THIS SYMBOL IS SOLELY TO PERMIT THE SYSTEM
\r
246 RCXWNZ: ; BUILDER TO RETRIEVE THE CORRECT BINARY FILE.
\r
253 EXTERNAL CONMES,RADX10,CRLF,DECIN1,OCTPNT
\r
254 EXTERNAL CONFIG,SYSDAT
\r
257 DEFINE SETTYO <MOVE DAT,LINEP>
\r
258 DEFINE TYPE <IDBP CHREC,DAT>
\r
260 DEFINE NEXTC <ILDB CHREC,TAC>>
\r
262 DEFINE SETTYO <PUSHJ PDP,OTSET>
\r
263 DEFINE TYPE <PUSHJ PDP,OUTCHS>
\r
264 DEFINE NEXTC <PUSHJ PDP,GETCHR>
\r
265 EXTERN TSETBF,SETBFI,SCNDDB,TTIBUF,TTOBUF,OUTCHS,GETCHR,TIBF,TOBF
\r
272 PATSIZ: MOVEI TAC,PATCH ;SET SIZE OF SYSTEM TO BEGINING OF PATCH
\r
273 MOVEM TAC,SYSSIZ ;IN CASE ONCE ONLY DIALOG RESTARTD BEFORE OVERWRITTEN
\r
275 ;PATSIZ SHOULG BE UPDATED EVERY TIME A PATCH
\r
276 ; IS MADE. SYSSIZ SHOULD ALSO BE UPDATED IF 146
\r
277 ; START IS GOING TO BE USED(DDT DEBUGGIN OR CTY DOWN)
\r
279 MOVE PDP,[XWD -ONCEPN,ONCEPD]
\r
284 MOVEI TAC,[ASCIZ / /]
\r
291 \f;ASK FOR TODAY'S DATE AND CONVERT
\r
292 ;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1
\r
294 EXTERNAL THSDAT,JIFMIN,SKIPS
\r
298 DATLOP: SETZM THSDAT
\r
305 PUSHJ PDP,DECIN1 ;MONTH
\r
315 PUSHJ PDP,DECIN1 ;DAY
\r
324 PUSHJ PDP,DECIN1 ;YEAR
\r
330 SUBI TAC1,^D64 ;YEAR ZERO
\r
331 IMULI TAC1,^D12*^D31
\r
345 JRST TIMLOP ;JUST A CR
\r
347 PUSHJ PDP,DECIN1 ;READ THE TIME (1-4 CHARACTERS)
\r
348 JRST TIMLOP ;NO ARGUMENT
\r
349 JRST TIMLOP ;ILLEGAL CHARACTER
\r
351 IDIVI TAC,^D100 ;TAC=HRS.TAC1=MINS
\r
353 SKIPL TAC ;HRS NEGATIVE?
\r
354 CAILE TAC,^D23 ;OR .G. 23?
\r
355 JRST TIMLOP ;OUT OF BOUNDS
\r
356 CAILE TAC1,^D59 ;MINUTES .G. 59
\r
357 JRST TIMLOP ;OUT OF BOUNDS
\r
358 IMULI TAC,^D60 ;CONVERT TO MINUTES
\r
359 ADD TAC,TAC1 ;MINUTES SINCE MIDNIGHT
\r
360 IMULI TAC,JIFMIN ;JIFFIES SINCE MIDNIGHT
\r
361 MOVEM TAC,TIME ;TIME=JIFFIES SINCE MIDNIGHT
\r
363 JUMPGE ITEM,QUICK ;SKIP NEXT PART OF DIALOGUE UNLESS THE LAST ITEM
\r
364 ; TYPED IN (NAMELY TIME OF DAT) WAS TERMINATED BY
\r
365 ; AN "ALT MODE". (ACCUMULATOR "ITEM" IS SET UP
\r
366 ; IN THE "GETLIN" SUBROUTINE CALLED ABOVE.)
\r
367 \f;PRINT IO CONFIGURATION
\r
369 EXTERNAL DEVLST,TCONLN,INLMES,PRNAME,INTTB1,INTTAB
\r
373 JSR TSTREG ;TEST IF 2 RELOC REG SET TWOSEG 0 OK-1
\r
374 MOVEI TAC,CRLFMS ;PRINT CRLF
\r
376 MOVEI TAC,1 ;ASSUME 1
\r
379 PUSHJ PDP,RADX10 ;NO. SECOND REG EXISTS.
\r
388 JUMPN AC1,ALRLNK ;DEVICE DATA BLOCK ALREADY LINKED?
\r
389 MOVSI PROG,INTNUM ;NO, NOT LOADED BY BULD,-NO. OF DEVICES*2
\r
390 CONFLP: SKIPN AC1,INTTB1(PROG) ;INT LOC HAVE DEV DATA BLOCK?
\r
391 JRST NODDB ;NO, GO GET NEXT DEVICE DATA BLOCK
\r
392 LDB UUO,[POINT 8,INTTAB(PROG),8] ;YES. NO. OF DEV DATA BLKS
\r
393 HRRZ TAC,UUO ;PRINT
\r
394 PUSHJ PDP,RADX10 ;IN DECIMAL
\r
395 PUSHJ PDP,INLMES ;PRINT 1 SPACE
\r
397 HLLZ TAC1,DEVNAM(AC1) ;DEVICE NAME
\r
398 PUSHJ PDP,PRNAME ;PRINT IT
\r
399 SOJLE UUO,SINGLE ;IS THIS JUST A SIGNLE DEVICE?
\r
400 PUSHJ PDP,INLMES ;NO, APPEND 'S TO DEVICE NAME
\r
402 SINGLE: PUSHJ PDP,CRLF ;PRINT CR LF
\r
403 NODDB: AOBJN PROG,.+1 ;
\r
404 AOBJN PROG,CONFLP ;FINISHED ALL DEVICES?
\r
408 HLLZ ITEM,DEVNAM(AC1)
\r
409 ONCE4: HLRZ AC1,DEVSER(AC1)
\r
411 HLLZ TAC1,DEVNAM(AC1)
\r
414 ONCE6: MOVE PROG,TAC ;SAVE NO.
\r
419 MOVE TAC,[POINT 6,ITEM]
\r
420 ONCE7: ILDB CHREC,TAC
\r
424 MOVEI TAC,[ASCIZ /'S/]
\r
429 ONCE7A: PUSHJ PDP,OPOUT
\r
432 MOVEI TAC,TCONLN ;PRINT NO, OF TTY SCANNER LINES
\r
435 ASCIZ / (OCTAL) TTY SCANNER LINES
\r
439 ;ASK FOR OPERATORS CONSOLE TO BE SPECIFIED
\r
441 EXTERNAL INLMES,DEVOPR,CTEXT,DEVPHY
\r
443 ONCEOP: MOVEI TAC,OPRM
\r
447 JRST ONCE8 ;JUST CR
\r
450 CAMN TAC,[SIXBIT /CTY/] ;CTY?
\r
451 JRST .+3 ;YES. JUST STORE IT.
\r
453 JRST ONCEOP ;PHYSICAL NAME NOT FOUND
\r
454 MOVEM TAC,DEVOPR ;SET FOR SYSTEM
\r
455 ;DEVICE "OPR" WILL BE SAME AS THIS
\r
457 ;ASK IF SYSMAK IS WANTED
\r
459 EXTERN MAKEND,SYSSIZ
\r
461 ONCE8: MOVEI TAC,SYSM
\r
463 JRST ONCE2 ;NO SYSMAK
\r
464 MOVEI TAC,MAKEND ;YES
\r
467 ;IS EXEC DDT WANTED?
\r
471 ONCE2: MOVEI TAC,SYSDM
\r
474 MOVEI TAC,DDTEND ;FIRST FREE LOC. ABOVE EXEC DDT
\r
475 MOVEM TAC,SYSSIZ ;SET NEW MONITOR SIZE
\r
476 ;FIND CORE TO BE USED FOR MULTIPLE DEVICE DATA BLOCKS
\r
481 ONCE3: PUSHJ PDP,SYSSIZ ;SAVE CURRENT VALUE
\r
482 JSP TAC,CNTDB ;UPDATE SYSSIZ BY SPACE USED
\r
483 ; FOR DEVICE DATA BLOCKS FOR DSK,DTA,MTA,TTY,PTY)
\r
484 \f;PRINT OCTAL SIZE OF MONITOR
\r
494 POP PDP,SYSSIZ ;RESTORE SYSSIZ PRIOR TO ACTUAL CREATION
\r
495 ; OF DEVICE DATA BLOCKS
\r
496 EXTERN DECIN,CORLIM,USRLIM,RADX10
\r
498 ONCE4A: MOVEI TAC,MXKMES ;PRINT "MAX. K CORE FOR SINGLE USER IS "
\r
505 MOVEI TAC,DESMES ;PRINT "TYPE DESIRED MAX.(DEC). CR IF OK AS IS
\r
509 JRST ONCE5A ;LEAVE LIMIT AS SET BY BUILDER QUESTION.
\r
510 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\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
521 PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOG.
\r
524 QUICK: ;THIS IS THE SHORT-CUT EXIT TO BY-PASS MOST OF THE DIALOGUE
\r
529 PUSHJ PDP,OK ;CHECKSUM MONITOR AND SAVE THE ANSWER.
\r
532 JRST @ONCE ;***EXIT FROM THE "ONCE-ONLY CODE"***
\r
534 EXTERNAL OCTIN,MFDBLK,SATXWD,NUMBLK,SYSPP,REFLAG
\r
538 REF: MOVEI TAC,REF1M ;DO YOU WANT TO REFRESH?
\r
541 MOVEI TAC,REF2M ;YES, ARE YOU SURE?
\r
544 REF6: ;YES. DO YOU WANT TO CHANGE THE LOC
\r
545 MOVEI TAC,REF3M ;OF THE MFD?
\r
549 MOVEI TAC,REF4M ;TYPE LOGICAL DISK ADDRESS OF MFD RETR, INFO
\r
555 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\r
560 PUSH PDP,TAC1 ;IS IT A MULTIPLE OF NUMBLK?
\r
563 JUMPN TAC1,REF4 ;NO
\r
571 IFN FTSWAP,<IFN FTRC10, <
\r
572 MOVEI TAC,REF9M ;HOW MANY 1K BLOCKS ON THE ISK FOR SWAPPING ?
\r
575 MOVEI TAC,^D200 ;THE DEFAULT ANSWER IS 200 DECIMAL.
\r
578 JRST REF3A ;JUST A CARRIAGE RETURN INVOKES DEFAULT
\r
579 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\r
583 CAILE TAC1,MXK2SWP ;ANSWER TOO BIG?
\r
584 JRST REF3 ;YES, REPEAT QUESTION
\r
585 HRRZM TAC1,K4SWAP ;NO. SAVE THIS CRUCIAL PARAMETER.
\r
591 PUSHJ PDP,REFRES ;REFRESH.
\r
594 MOVEI TAC,REF6M ;REFRESHING SUCCESSFULLY COMPLETED !
\r
596 PUSHJ PDP,OPOUT ;TYPE "REFRESHED !"
\r
599 MOVEM TAC,REFLAG ;TO PERMIT AUTOMATIC LOG-IN UNDER
\r
600 ; PROJ-PROG NUMBER [1,1] EVEN
\r
601 MOVEI TAC,REF8M ; THOUGH THE LOG-IN CUSP IS CLEARLY NOT
\r
602 PUSHJ PDP,ICONM ; ON THE NEWLY REFRESHED DISK.
\r
614 REF5: PUSH PDP,TAC ;ERROR. ON COMMING HERE, TAC HAS LOGICAL BLOCK
\r
615 ; NUMBER WHICH COULD NOT BE WRITTEN
\r
622 JRST REF6 ;GO BACK TO TRY AGAIN.,
\r
625 REF1M: ASCIZ /DO YOU WANT TO REFRESH THE DISK ? (Y OR CR)
\r
627 REF2M: ASCIZ /ARE YOU SURE(Y OR CR)?
\r
629 REF3M: ASCIZ /DO YOU WANT TO CHANGE THE LOCATION OF THE MFD(Y OR CR)?
\r
631 \fREF4M: ASCIZ /TYPE THE LOGICAL DISK ADDRESS OF THE MFT RETREIVAL INFORMATION
\r
634 REF5M: ASCIZ /MUST BE A MULTIPLE OF NUMBLK.
\r
637 REF6M: ASCIZ /REFRESHED !
\r
639 REF7M: ASCIZ /ERROR WHILE WRITING BLOCK /
\r
640 REF8M: ASCIZ /TO AUTOMATICALLY LOG-IN UNDER [1,1], TYPE "LOGIN"
\r
643 REF9M: ASCIZ /HOW MANY (DECIMAL) 1K DISK BLOCKS ARE TO BE ALLOCATED FOR SWAPPING ?
\r
646 > ;THIS CLOSES AN FTDISK CONDITIONAL SERVAL PAGES BACK.
\r
647 \f;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE
\r
648 ;CALL: PUSHJ PDP,GETLIN
\r
649 ; JUST A CR TYPED IN
\r
650 ; A LINE TYPED IN,TAC SEYT AS BYTE POINTER
\r
652 CHREC=TEM ;CHAR TO TYPE OUT (MUST BE SAME AS SCNSER ROUTINE)
\r
653 LINE=TAC1 ;TTY LINE NO. (ALSO SAME AS SCNSER)
\r
655 IFN FTTTYSER,<EXTERN TSETBF,SETBFI,SCNDDB,DCPUTR,PUTCHI>
\r
659 GETLIN: IFE FTTTYSER,<MOVE TAC,LINEP>
\r
660 IFN FTTTYSER,< PUSHJ PDP,SETBFI>
\r
662 GET1: PUSHJ PDP,TYI
\r
665 CAIN CHREC,177 ;RUBOUT?
\r
667 CAIN CHREC,33 ;ALTMODE ?
\r
669 CAIE CHREC,175 ;VARIATION OF ALT-MODE ?
\r
670 CAIN CHREC,176 ;OR YET THIS THIRD VARIATION ?
\r
672 GET2: PUSHJ PDP,TYO ;ECHO CHARACTER
\r
673 CAIL CHREC,140 ;IS THIS LOWER CASE?
\r
674 TRZ CHREC,40 ;YES,MAKE IT UPPER CASE
\r
675 IFE FTTTYSER,<IDPB CHREC,TAC>
\r
676 IFN FTTTYSER,<PUSHJ PDP,PUTCHI ;STORE CHARACTER
\r
677 JFCL ;IGNORE ERROR RETURN
\r
681 MOVEI CHREC,12 ;OUTPUT LF
\r
682 PUSHJ PDP,TYO ;TYPE OUT
\r
683 IFE FTTTYSER,< MOVE TAC,LINEP ;RESET BYTE POINTER>
\r
684 JUMPN ITEM,CPOPJ1 ;NULL LINE?
\r
685 POPJ PDP, ;YES, DON'T SKIP RETURN
\r
687 DELETE: IFN FTTTYSER,< PUSHJ PDP,DCPUTR
\r
690 JUMPE ITEM,DELET1 ;AT BEGINNING OF LINE?>
\r
691 ADD TAC,[XWD 070000,0] ;NO, BACK UP BYTE POINTER
\r
692 TLNE TAC,400000 ;FINISHED THIS WORD YET?
\r
693 ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS>
\r
698 DELET1: MOVEI CHREC,15
\r
704 GETLN1: SETOM ITEM ;MECHANISM USED TO BY-PASS PART OF DIALOGUE
\r
705 MOVEI CHREC,15 ;WHEN ALTMODEIS TYPED.
\r
707 \f;ROUTINE TO TYPE A LINE ON OPERATOR CONSOLE
\r
708 ;ECHO CHECK STOPS LINE AND RETURNS
\r
709 ;CALL: DAT SET TO END OF MESSAGE
\r
711 IFN FTTTYSER,<EXTERNAL CPOPJ>
\r
713 OPOUT: IFE FTTTYSER,<MOVE TAC,LINEP>
\r
714 IFN FTTTYSER,<MOVEI DAT,TTOBUF(DEVDAT)>
\r
715 CONO TTY,1000 ;CLEAR INPUT
\r
716 OPOUT1: IFE FTTTYSER,<
\r
720 JRST OPOUT2 ;ECHO CHECK
\r
722 IFN FTTTYSER,< JUMPE CHREC,CPOPJ>
\r
726 OPOUT2: MOVEI CHREC,15
\r
730 CONO TTY,1000 ;CLEAR INPUT
\r
732 ;WAIT TILL OUTPUT BUSY OFF BEFORE TYPING OUT CHAR.
\r
734 EXTERNAL TCONLN,TYPL
\r
736 TYO: PUSHJ PDP,APRCHK ;CHECK CLOCK
\r
743 AND TAC,[OCT 11111111]
\r
744 IMUL TAC,[OCT 11111111]
\r
753 ;WAIT TIL INPUT DONE ONE BEFORE RETURNING WITH NEXT CHAR.
\r
755 TYI: PUSHJ PDP,APRCHK
\r
760 ;CHECK APR FOR CLOCK FLAG SO TIME USER TYPES IN WILL BE ACCURATE
\r
762 APRCHK: CONSO APR,1000 ;IS CLOCK FLAG ON?
\r
764 CONO APR,1000 ;YES, CLEAR CLOCK FLAG
\r
765 AOS TIME ;INCREMENT TIME
\r
767 \fICONM: PUSH PDP,TAC
\r
768 SETTYO ;INITIALIZE LINE BUFFER
\r
770 JRST CONMES ;OUTPUT MESSAGE
\r
773 OTSET: MOVEI DEVDAT,SCNDDB
\r
774 MOVSI TEM,120 ;TTYCHR
\r
775 HRRI TEM,TIBF(DEVDAT)
\r
776 MOVEM TEM,TTIBUF(DEVDAT) ;INIT INPUT POINTER
\r
777 HRRI TEM,TOBF(DEVDAT) ;AND OUTPUT POINTER
\r
778 MOVEM TEM,TTOBUF(DEVDAT)
\r
779 JRST TSETBF ;NOW CLEAR THE BUFFERS
\r
782 YESNO: PUSHJ PDP,ICONM ;FIRST OUTPUT THE QUESTION
\r
784 PUSHJ PDP,GETLIN ;NOW GET RESPONSE
\r
785 POPJ PDP,0 ;JUST A C-R
\r
787 TRZ CHREC,40 ;FIRST CHAR OF RESPONSE (U.C.)
\r
788 CAIN CHREC,"Y" ;WAS IT A Y?
\r
789 AOS 0(PDP) ;YES, SKIP
\r
790 POPJ PDP, ;NO. MAYBE IT WAS "N", SO DONT SKIP
\r
792 ;CONSTANTS AND PUSH DOWN LIST
\r
795 ONCEPD: BLOCK ONCEPN ;PUSH DOWN LIST
\r
797 LINEP: POINT 7,LINBUF ;INPUT AND OUTPUT LINE BUFFERE
\r
802 TSEXEC: ASCIZ /MONITOR JUST LOADED
\r
805 TYPE TODAY'S DATE AS MM-DD-YY
\r
815 TYPE NAME OF OPR CONSOLE.
\r
818 DO YOU WANT SYSMAK (TYPE Y IF YES, CR IF NO)?
\r
825 LENGTH: ASCIZ / OCTAL LOCATIONS LONG.
\r
827 MXKMES: ASCIZ /MAX K CORE FOR SINGLE USER IS /
\r
828 DESMES: ASCIZ /TYPE DESIRED MAX,(DEC), CR IF OK AS IS
\r
832 \f;INITIALIZE SAT SEARCH ENTRIES
\r
834 ;THIS "DFWUNS" ROUTINE IS CALLED BY MANDATORY ONCE ONLY CODE(LINKSR)
\r
835 ; AFTER ALL MULTIPLE DEVICE DATA BLOCKS HAVE BEEN GENERATED IN CORE
\r
836 ; ABOVE C(SYSSIZ)( AND SYSSIZ HAS BEEN INCREMENTED)
\r
837 ; IT IS CALLED WHETHER OR NOT THE DISK WAS REFRESHED. IF REFRESHING WAS
\r
838 ; PERFORMED, DFWUNS IS CALLED AFTER REFRES SINCE SYSINI CALLS LINKSR AFTER ONCE.
\r
844 EXTERNAL SAT05,JSAT06,SATENT,SATPTR,SATBK2,SATXWD,SATPTR
\r
845 EXTERNAL SAT,SENTSZ,DSKDDB,DSKBUF,WSYNC,MQIN,MQOUT,DFGETF,SETFRE
\r
846 EXTERNAL WLBIT,NUMBIT,DSKCNT
\r
850 PUSHJ PDP,WRITLK ;FORCE THE WRITE-LOCK SWITCH SETTINGS TO BE ZERO.
\r
852 PUSHJ PDP,RDSTAT ;READ VITAL DISK STATISTICS BLOCK, STORE PARAMETERS
\r
853 PUSHJ PDP,CAPCTY ;DETERMINE CURRENT SYSTEM CAPACITY (HOW MANY DISKS).
\r
854 CAMN TAC,LBHIGH ;HAS CAPACITY CHANGED SINCE LAST REFRESH ?
\r
855 JRST DFWNZ1 ;NO, EVERYTHING APPPEARS TO BE OKAY.
\r
856 SETTYO ;YES, PRINT WARNING MESSAGE...
\r
858 ASCIZ /DISK CAPACITY HAS CHANGED SINCE LAST REFRESHING.
\r
859 EITHER RESTORE PREVIOUS DISK CONFIGURATION OR REFRESH.
\r
861 PUSHJ PDP,OPOUT ;START TTY
\r
862 PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOGUE
\r
863 JRST DFWUNS ;NOW TRY AGAIN.
\r
869 MOVEI DEVDAT,DSKDDB
\r
871 MOVEM TAC1,DSKBUF(DEVDAT)
\r
877 ;READ EACH SAT BLOCK FROM THE DISK AND SET SATENT TABLE TO MATCH INFO ON DISK.
\r
879 SETS1: ADDM TAC1,SATPTR
\r
880 SETS2: PUSH PDP,TAC
\r
881 SETZB IOS,DEVIOS(DEVDAT)
\r
882 PUSHJ PDP,MQIN ;READ A SAT BLOCK
\r
883 JRST 4,SETS6 ;ERROR HALT
\r
884 MOVE DAT,SATPTR ;RESET THE ENTRY
\r
890 \fSETS3: MOVE AC1,(TAC) ;COUNT ONE-BITS
\r
891 AOJN AC1,SETS3A ;IS THE WORD = -1?
\r
895 SETS3A: SOJE AC1,SETS5 ;NO, IS IT = 0?
\r
896 SETS4: TDNE TAC1,(TAC) ;NO, COUNT THE BITS
\r
901 SETS5: AOBJN TAC,SETS3 ;LOOP THRU ENTIRE BLOCK
\r
905 ;BITS HAVE BEEN COUNTED, CHECK FOR WRITE-LOCK
\r
906 CAIL DAT,NUMBIT ;BLOCK FULL?
\r
908 PUSHJ PDP,DFGETF ;NO. GET A FREE BLOCK
\r
910 PUSHJ PDP,SETS7 ;WRITE
\r
911 PUSHJ PDP,SETFRE ;FREE THE BLOCK
\r
914 SETS5B: MOVEI TAC1,SENTSZ ;PREPARE TO BUMP SATPTR
\r
916 AOBJN TAC,SETS1 ;DO ALL SAT BLOCKS
\r
924 SETS5X: CAIL TAC,SATTOP
\r
925 JRST SAT05 ;EXIT FROM DFWUNS BACK TO DSKINI IN DSKSER........
\r
927 MOVEI TAC1,411000 ;ON THE NEW PDP-10 DISK SYSTEM SET THE SAT ENTRY
\r
928 HRRM TAC1,(TAC) ; TABLE TO SHOW ALL NON-EXISTENT DISKS AS
\r
929 JRST SETS5X ; BOTH WRITE-LOCKED AND FULL.
\r
931 \fSETS6: POP PDP,TAC ;ERROR, TRY AGAIN
\r
936 ;WRITE-LOCK DETERMINATION ON THE OLD PDP-6 (DATA PRODUCTS) DISK --
\r
938 SETS7: PUSH PDP,TAC ;SAVE BLOCK ADDRESS
\r
939 SETS7A: PUSHJ PDP,MQOUT
\r
941 SETS7B: POP PDP,TAC
\r
943 SETS7C: MOVE TAC,(PDP)
\r
944 MOVE TAC1,DSKCNT(DEVDAT)
\r
945 TRNN TAC1,IOIMPM ;WRITE LOCK?
\r
947 MOVEI TAC,WLBIT ;YES. SET BIT
\r
951 SETS8: MOVEI TAC,SETS9 ;BLOCK FULL, READ FIRST ONE
\r
952 HRRM TAC,DSKBUF(DEVDAT)
\r
956 HLRZ TAC,@SATPTR ;WRITE IT BACK
\r
958 MOVEI TAC,SAT ;RESET
\r
959 HRRM TAC,DSKBUF(DEVDAT)
\r
964 > ;CLOSE THE IFE FTRC10
\r
965 > ;CLOSES AN IFN FTDISK A COUPLE PAGES BACK.
\r
968 ;DISK REFRESHING ROUTINES ---
\r
971 ;DISK REFRESHER FOR THE OLD PDP-6 (DATA PRODUCTS) DISK --
\r
974 EXTERNAL MFDBLK,NUMSAT,CHKCNT,CHKSUM,NUMBLK,DSKINI,SETSAT,DSKCHN,DSKCHL
\r
976 REFRESH: MOVEI PROG,0 ;SETUP IO
\r
977 MOVEI DEVDAT,DSKDDB
\r
986 MOVE TAC1,[JSR DSKCHL]
\r
992 ;SETUP NULL SAT BLOCK
\r
995 MOVE TAC1,[XWD NULBLK,NULBLK+1]
\r
997 BLT TAC1,NULBLK+177
\r
998 MOVEI TAC,NUMBLK ;END OF BLOCK BYTE POINTER
\r
1013 BLT TAC,NULBLK+177
\r
1015 ;SET UP SAT BLOCK WITH MFD AND SAT BLOCKS ALLOCATED
\r
1017 MOVE TAC,[XWD NULBLK,SATBL1]
\r
1018 BLT TAC,SATBL1+177
\r
1019 MOVE TAC,[POINT 1,SATBL1]
\r
1021 HRLM TAC1,SATRET+3
\r
1026 ;COMPUTE CHECKSUMS IF REQUIRED
\r
1030 MOVE TAC,[XWD -200,MFD1]
\r
1032 HRLM TAC1,MFDRET+4
\r
1033 MOVE TAC,[XWD -200,NULBLK]
\r
1035 HRLM TAC1,SATRET+4
\r
1036 MOVE TAC,[XWD -200,SATBL1]
\r
1040 ;RELOCATE POINTERS RELATIVE TO MFDBLK
\r
1042 REFR1: MOVE TAC,MFDBLK
\r
1043 HRRM TAC,MFDRET+177
\r
1047 HRRM TAC,SATRET+177
\r
1056 HRRZM TAC1,SATRET+3(TAC1)
\r
1057 ADDM TAC,SATRET+3(TAC1)
\r
1060 ;FIX CHECKSUM FOR SATBL1
\r
1064 HRLM DAT,SATRET+3(TAC)
\r
1067 ;WRITE BLOCKS ON DISK
\r
1069 MOVE TAC,MFDBLK ;MFD RETREIVAL INFORMATION
\r
1070 MOVE TAC1,[XWD -200,MFDRET]
\r
1071 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1072 SETZB IOS,DEVIOS(DEVDAT)
\r
1076 REFR2: MOVE TAC1,[XWD -200,NULBLK] ;SAT BLOCKS
\r
1078 MOVE TAC1,[XWD -200,SATBL1]
\r
1081 SETZB IOS,DEVIOS(DEVDAT)
\r
1082 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1084 JRST REFER1 ;ERROR
\r
1088 AOS TAC ;SAT RETREIVAL INFORMATION
\r
1090 SETZB IOS,DEVIOS(DEVDAT)
\r
1092 MOVE TAC1,[XWD -200,SATRET]
\r
1093 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1096 MOVE TAC,MFDBLK ;MFD
\r
1099 MOVE TAC1,[XWD -200,MFD1]
\r
1100 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1101 SETZB IOS,DEVIOS(DEVDAT)
\r
1107 REFER1: POP PDP,TAC1
\r
1108 REFER: POP PDP,WSYNC
\r
1111 DEFINE ZEROES (A),<XLIST
\r
1115 DEFINE ONES (A),<XLIST
\r
1119 DEFINE BLOCKR (NAME,EXT,PROT,PROGX,B,F,Z),<
\r
1122 EXP PROT*1B8+14B12
\r
1126 BYTE (4) F (14) 0 (18) B >
\r
1128 MFDRET: BLOCKR <XWD 1,1>,<SIXBIT /UFD/>,45,1,0,4,20 ;MFD RETREIVAL INFO
\r
1130 SATBL1: XWD 777776,0 ;THIS SAT BLOCK CONTAINSS
\r
1131 ZEROES 5400/44-1 ;ALLOCATION FOR MFD AND SAT BLOCKS
\r
1135 SATRET: BLOCKR <SIXBIT /*SAT*/>,<SIXBIT /SYS/>,555,1,0,1,16
\r
1137 MFD1: XWD 1,1 ;MFD
\r
1140 XWD 637163,17 ;RELOCATED
\r
1143 NULBLK: ZEROES 5400/44-1 ;NULL SAT BLOCK
\r
1147 > ;END OF THE REFRESHER FOR THE OLD PDP-6 DISK.
\r
1151 ;DISK REFRESHER FOR THE NEW PDP-10 MODEL RC-10 (BURROUGHS) DISK--
\r
1153 EXTERNAL CPOPJ1,THSDAT,TIME
\r
1154 EXTERNAL MFDBLK,SATXWD,NUMSAT,NUMBLK,SATTOP,SENTSZ
\r
1155 EXTERNAL DISKUP,DFRED,DFWRT,DSKFDG,CHKSUM,RCXCCW,RCXFIN
\r
1158 EXTERNAL MAXSWP,MXK2SWP,BLKSPK
\r
1163 STATBK=1 ;FIXED LOGICAL BLOCK NUMBER FOR THE "VITAL
\r
1164 ; STATISTICS" BLOCK OF THE DISK.
\r
1165 DSK=170 ;DEFINE DEVICE NUMBER OF THE MODEL RC-10 DISK SYNCHRONIZER.
\r
1168 ;THESE NEXT TWO PAGES ARE LIFED DIRECTLY FROM "DSKINIT" IN ORDER TO DEFINE THE
\r
1169 ; CONO AND CONI BITS USED HERE IN "ONCE".
\r
1171 ;CONI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1173 ;BITS 00 - 17 MAINTENANCE PANEL SWITCH SETTINGS INDICATORS --
\r
1174 ;BITS 00 - 04 UNUSED
\r
1175 MSS=1B5 ;SET INDICATES "MAINTENANCE SEGMENT SELECTED" (SEGMENT 81),
\r
1176 PLGSW=1B6 ;1 = WRITE-PROTECT EVERYTHING BELOW (LESS THAN) THE BOUNDARY,
\r
1177 ; 0 = WRITE-PROTECT EVERYTHING ABOVE (GREATER THAN) BOUNDARY,
\r
1178 ;THE CURRENT IMPLEMENTATION OF THE RC-10 DISK SYNCHRONIZER
\r
1179 ; DOES NOT PERMIT SENSING THE INCLUSION OF THE BOUNDARY.
\r
1180 ;BITS 07 - 17 THE WRITE-PROTECTION THE INCLUSION OF THE BOUNDARY.
\r
1181 DTOP=1B18 ;SET INDICATES DATA TRANSFER IN PROGRESS.
\r
1182 ;BITS 19 -29 ERROR CONDITIONS INDICATORS (ERROR WHEN SET) --
\r
1183 SRCHE=1B19 ;SEARCH ERROR (DISK TIMING TRACK PROBLEMS!!)
\r
1184 DDE=1B20 ;DISK DESIGNATION ERROR
\r
1185 TSE=1B21 ;TRACK SELECT ERROR (OR EXCEEDS SYSTEM CAPACITY)
\r
1186 NRDY=1B22 ;DISK NOT READY (OR NON-EXISTENT DISK REFERENCED)
\r
1187 PSF=1B23 ;POWER SUPPLY FAILURE
\r
1188 DPAR=1B24 ;DISK PARITY ERROR
\r
1189 CHDPAR=1B25 ;CHANNEL DATA PARITY ERROR
\r
1190 CHCPAR=1B26 ;CHANNEL CONTROL PARITY ERROR
\r
1191 NXMEM=1B27 ;NON-EXISTENT MEMORY REFERENCED
\r
1192 WRPE=1B28 ;ATTEMPTED TO WRITE IN PROTECTED DISK AREA (SEE BITS 06 - 17)
\r
1193 OVR=1B29 ;OVERRUN, I.E., MEMORY DIDN'T RESPOND QUICKLY ENOUGH
\r
1194 ;BIT 30 CHANNEL CONTROL WORD WRITTEN IN MEMORY (THIS BIT IS
\r
1195 ;TURNED ON ON ALMOST ALL TERMINATIONS.)
\r
1196 BUSYBT=1B31 ;BUSY (SYNCHRONIZER PERFORMING A COMMAND SEQUENCE)
\r
1197 DONEFLG=1B32 ;DONE -- THIS ACTUALLY CAUSES THE INTERRUPT.
\r
1198 ;BITS 33 - 35 PI CHANNEL SELECTION BITS.
\r
1200 ;COMBINATIONS OF ERRO BITS GROUPED BY TYPE --
\r
1201 DATERR=DPAR!CHDPAR ;DATA ERRORS.
\r
1202 DEVERR=SRCHE!PSF!CHCPAR!OVR ;DEVICE ERRORS.
\r
1203 SETERR=DDE!TSE!NRDY!WRPE!NXMEM ;SOFTWARE-PREVENTABLE ERRORS.
\r
1204 \f;CONO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER
\r
1206 ;BITS 00 - 17 UNUSED
\r
1207 ;BITS 18 - 19 SELECT DISK FOR SECTOR COUNTER READ-OUT A(SEE DATAI BITS 28-35)
\r
1208 ;BITS 20 - 29 RESET THE CORRESPONDING CONI ERROR BIT
\r
1209 ;(BUT PSE MAY REFUSE TO BE RESET)
\r
1210 WRCCWD=1B30 ;WRITE THE CHANNEL CONTROL WORD INTO MEMORY (NOW!)
\r
1211 STPBIT=1B31 ;STOP -- IMMEDIATELY CEASE PRESENT I/O AND CLEAR THE CHANNEL.
\r
1212 RESETB=1B32 ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT
\r
1213 ;BITS 33 - 35 PI CHANNEL SELECTION BITS
\r
1215 ;DATAI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1217 ;BITS 00 - 17 UNUSED
\r
1218 ;BITS 18 - 23 PARITY REGISTER
\r
1219 ;BITS 24 - 25 UNUSED
\r
1220 ;BITS 26 - 27 DISK SELECTED BY BITS 18-19 OF LAST CONO
\r
1221 ;BITS 28 - 35 CURRENT SECTOR POSITION OF SELECTED DISK (FOR LATENCY OPTIMIZATION!)
\r
1223 ;DATAO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1225 ;BITS 00 - 17 DISK ADDRESS ELECTION
\r
1226 ;BITS 00 - 01 DISK SELECT
\r
1227 ;BITS 02 - 10 TRACK SELECT (BCD, BUT FIRST CHAR IS JUST 1 BIT)
\r
1228 ;BITS 11 - 17 SEGMENT SELECT (BCD, BUT FIRST CHAR HAS ONLY 3 BITS)
\r
1229 ;BITS 18 - 23 INITIAL PARITY REGISTER SETTING 9ZERO EXCEPT FOR DIAGNOSTIC PROGRAMS)
\r
1230 DDSKPE=1B24 ;DISABLE DISK PARITY ERROR STOP
\r
1231 DCHNPE=1B25 ;DISABLE CHANNEL DATA PARITY ERROR STOP
\r
1232 WRBIT=1B16 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK
\r
1233 ;BITS 27 - 34 ;CORRESPONDING BITS OF INITIAL CHANNEL CONTROL ADDRESS, HENCE,
\r
1234 ; THIS ADDRESS MUST BE EVEN AND IN THE FIRST 1K OF CORE MEMORY!
\r
1235 ;BIT 35 ;WRITE EVEN PARITY DATA INTO MEMORY (DIAGNOSTICS ONLY!)
\r
1239 PUSHJ PDP,DISKUP ;BE SURE THE DISK IS UP AND READY.
\r
1240 PUSHJ PDP,WRITLK ;BE SURE WRITE-LOCK SWITCHES ARE OFF.
\r
1241 PUSHJ PDP,CAPCTY ;DETERMINE THE CURRENT DISK CAPACITY OF THE
\r
1242 ; SYSTEM, I.E. HOW MANY DISKS ARE ATTACHED TODAY ?
\r
1243 MOVEM TAC,LBHIGH ;STORE HIGHEST LEGAL LOGICAL BLOCK NUMBER
\r
1247 LSH TAC1,BLKSPK ;COMPUTE AND SAVE THE LOWEST LOGICAL BLOCK
\r
1248 SUBM TAC,TAC1 ; NUMBER RESERVED FOR SWAPPING.
\r
1250 CAIG TAC1,STATBK ;SWAPPING AREA MUST NOT OVERLAY THE
\r
1251 JRST RFRSHE ; VITAL STATISTICS BLOCK.
\r
1254 MOVN TAC1,TAC ;SET SATXWD TO SHOW ONLY THE NUMBER OF
\r
1255 HRLM TAC1,SATXWD ; SAT BLOCKS ACTUALLY IN EXISTENCE.
\r
1259 CAML TAC,LOWSWP ;MAKE VARIOUS CONSISTENCY CHECK TO DETERMINE
\r
1260 JRST RFRSHE ; THAT THE DISK PARAMETERS SPECIFIED DURING THE
\r
1262 CAIG TAC1,STATBK ; ONCE-ONLY DIALOGUE DO NOT CAUS THE DISK
\r
1263 CAIGE TAC,STATBK ; SWAPPING AREA, VITAL STATISTICS BLOCK, AND/OR
\r
1264 JRST RFRSH1 ; THE MFD AND SAT BLOCK TO OVERLAP ONE ANOTHER.
\r
1265 RFRSHE: MOVEI TAC,RFSHME
\r
1266 ;IF THERE IS SOME OVERLAPPING OF
\r
1267 PUSHJ PDP,IOCON ; THESE DISK STORAGE AREAS, PRING AN
\r
1268 PUSHJ PDP,OPOUT ; ERROR MESSAGE AND THEN GO BACK TO THE
\r
1269 POP PDP,TAC ; DIALOGUE TO AK THE PARAMETER SPECIFICATION
\r
1270 JRST REF6 ; QUESTIONS AGAIN.
\r
1272 RFSHME: ASCIZ /PARAMETER SPECIFICATION ERROR. TRY AGAIN.
\r
1276 RFRSH1: PUSHJ PDP,WRSTAT ;WRITE OUT THE VITAL STATISTICS BLOCK ON THE DISK.
\r
1277 JRST REFERR ; AN ERROR ON THIS WRITE IS BAD TROUBLE !!
\r
1279 ;NEXT WRITE THE MFD (MASTER FILE DIRECTORY) ONTO THE DISK
\r
1281 PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER
\r
1282 MOVE TAC,[XWD 1,1] ;THE FIRST ENTRY IN THE MFD IS FOR
\r
1283 MOVEM TAC,WNZBUF ; THE MFD ITSELF.
\r
1284 MOVE TAC,[SIXBIT/UFD/]
\r
1285 HRR TAC,MFDBLK ;POINTER TO MFD RETRIEVAL INFORMATION
\r
1286 MOVEM TAC,WNZBUF+1
\r
1287 MOVE TAC,[SIXBIT/*SAT*/] ;THE ONLY OTHER ENTRY INITIALLY IN THE
\r
1288 MOVEM TAC,WNZBUF+2 ; MFD IS FOR THE FILE NAMED *SAT*.SYS WHICH
\r
1289 HLRZ TAC1,SATXWD ; PERMITS ACCESS TO THE SAT BLOCKS FOR
\r
1290 HRRZ TAC,MFDBLK ; ANYONE WHO WANTS TO LOOK AT THEM.
\r
1291 SUBI TAC,-1(TAC1) ;COMPUTE POINTER TO THE RETRIEVAL INFORMATION
\r
1292 HLL TAC,[SIXBIT/SYS/] ; FOR THE *SAT*.SYS FILE.
\r
1293 MOVEM TAC,WNZBUF+3
\r
1295 ADDI TAC,1 ;COMPUTE LOGICAL BLOCK NUMBER OF THE MFD.
\r
1296 PUSHJ PDP,WNZWR ;WRITE THE MFD OUT ONTO THE DISK.
\r
1298 JRST REFERR ;ERROR
\r
1300 MOVE TAC,[XWD -200,WNZBUF]
\r
1302 HRRZM TAC1,CHKSAV ;SAVE CHECKSUM TO GO INTO RETRIEVAL INFORMATION.
\r
1305 ;NEXT WRITE MFD RETRIEVAL INFORMATION BLOCK ONTO THE DISK
\r
1307 PUSHJ PDP,WNZCLR ;CLEAR OUTPUT BUFFER
\r
1308 MOVE TAC,[XWD 1,1]
\r
1309 MOVEM TAC,WNZBUF ;FILE NAME
\r
1311 HLL TAC,[SIXBIT /UFD/]
\r
1312 MOVEM TAC,WNZBUF+1 ;FILE EXTENSION, DATE
\r
1313 HRLZI TAC,045000 ;PROTECTION (ANY PROJECT 1 USER MAY WRITE IN MFD)
\r
1314 PUSHJ PDP,MDTMOT ;FILL IN TIME, DATE, AND MODE
\r
1315 MOVEM TAC,WNZBUF+2
\r
1316 MOVE TAC,[XWD -200,1] ;NEGATIVE WORD COUNT AND PROGRAMMER NUMBER
\r
1317 MOVEM TAC,WNZBUF+3 ;GO INTO WORD 4 OF RETRIEVAL INFO
\r
1320 SUBI TAC,-2(TAC1) ;COMPUTE POINTER TO THE MFD.
\r
1321 HRL TAC,CHKSAV ;RETRIEVE SAVED CHECKSUM OF MFD.
\r
1322 MOVEM TAC,WNZBUF+4
\r
1323 MOVE TAC,MFDBLK ;THE LAST WORD OF ANY BLOCK OF RETRIEVAL INFORMATION
\r
1324 MOVEM TAC,WNZBUF+177 ; MUST CONTAIN ITS OWN BLOCK NUMBER.
\r
1325 PUSHJ PDP,WNZWR ;WRITE MFD RETRIEVAL INFOMRATION ONTO THE DISK
\r
1326 JRST REFERR ;ERROR
\r
1328 ;NEXT CREATE THE NECESSARY SAT BLOCKS ON THE DISK
\r
1330 PUSH PDP,SATXWD ;SATXWD CONTROLS THE OUTER LOOP
\r
1331 MOVEI TAC,SATENT ;SET UP SATPTR TO SHUFFLE THROUGH THE BLOCKS
\r
1333 REFST1: MOVEM TAC,SATPTR
\r
1334 PUSHJ PDP,WNZCLR ;CLEAR THE BUFFER
\r
1338 PUSHJ PDP,SETWNZ ;MARK UNAVAILABLE BITS AT END OF THE BLOCK
\r
1340 HLRZ TAC1,@SATPTR ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK
\r
1341 CAMGE TAC1,LOWSWP ;IS ENTIRE BLOCK WITHIN SWAPPING AREA?
\r
1342 JRST REFST2 ;NO, JUMP AHEAD
\r
1343 MOVEI TAC1,NUMBIT ;YES, MARK IT ALL OFF LIMITS
\r
1346 JRST REFST7 ;HAVING SET ALL BITS, NO FURTHER TESTING IS NEEDED,
\r
1348 REFST2: MOVN TAC,TAC1
\r
1350 SUB TAC1,LOWSWP ;IS ANY OF SWAPPING AREA WITHIN THIS SAT BLOCK?
\r
1351 JUMPLE TAC1,REFST3 ;NO, JUMP AHEAD
\r
1352 ADD TAC,LOWSWP ;YES, MARK SWAPPING AREA AS UNAVAILABLE.
\r
1355 REFST3: HLRZ TAC1,@SATPTR ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK.
\r
1356 JUMPN TAC1,RFST3A ;ONLY FOR FIRST SAT BLOCK--
\r
1357 HRLZI TAC,400000 ;MARK LOGICAL BLOCK 0 AS BEING IN USE.
\r
1359 RFST3A: HRRZI TAC,STATBK
\r
1360 CAIL TAC,(TAC1) ;IS THE VITAL STATISTICS BLOCK WITHIN
\r
1361 CAIL TAC,NUMBLK(TAC1) ; THE RANGE OF THIS SAT BLOCK ?
\r
1362 JRST REFST4 ;NO, JUMP AHEAD
\r
1364 MOVEI TAC1,1 ;YES, MARK IT UNAVAILABLE,
\r
1367 REFST4: MOVE TAC,SATXWD ;SET UP TO LOOP THRU LOGICAL BLOCK NUMBERS FOR MFD.
\r
1368 SUB TAC,[XWD 3,1] ; MFD RETRVL INFO. SAT BLOCKS, AND SAT RETRVL INFO.
\r
1370 REFST5: PUSH PDP,TAC
\r
1373 CAIL TAC,(TAC1) ;IS THE INDICATED LOGICAL BLOCK NUMBER WITHIN
\r
1374 CAIL TAC,NUMBLK(TAC1) ; THIS PARTICULAR SAT BLOCK ?
\r
1375 JRST REFST6 ;NO, JUMP AHEAD
\r
1377 MOVEI TAC1,1 ;YES, MARK IN-USE BIT.
\r
1380 REFST6: POP PDP,TAC ;LOOP THROUGH THE WHOLE SET OF SPECIAL BLOCKS
\r
1381 AOBJN TAC,REFST5 ; WHICH MUST BE MARKED UNAVAILABLE.
\r
1383 REFST7: MOVE TAC,[XWD -200,WNZBUF]
\r
1385 PUSHJ PDP,CHKSUM ;COMPUTE CHECKSUM
\r
1387 HRRZM TAC1,1(TAC) ;STORE IT TEMPORARILY IN THE SATENT TABLE.
\r
1389 HRRZ TAC,(PDP) ;LOGICAL BLOCK NUMBER TO BE WRITTEN
\r
1390 PUSHJ PDP,WNZWR ;WRITE THIS SAT BLOCK ONTO THE DISK
\r
1391 JRST REFER1 ;ERROR
\r
1394 AOBJN TAC,.+2 ;LAST SAT BLOCK WRITTEN ?
\r
1396 JRST REFSRF ;YES, GO WRITE SAT RETRIEVAL INFORMATION.
\r
1398 PUSH PDP,TAC ;NO, ADVANCE SATPTR AND LOOP
\r
1399 MOVE TAC,SATPTR ; BACK TO DO NEXT SAT BLOCK.
\r
1403 ;FINALLY, WRITE OUT THE RETRIEVAL INFORMATION FOR THE FILE *SAT*.SYS
\r
1405 REFSRF: PUSHJ PDP,WNZCLR ;CLEAR THE BUFFER
\r
1406 MOVE TAC,[SIXBIT /*SAT*/]
\r
1407 MOVEM TAC,WNZBUF ;STORE FILE NAME
\r
1409 HLL TAC,[SIXBIT /SYS/]
\r
1410 MOVEM TAC,WNZBUF+1 ;STORE EXTENSION AND DATE
\r
1411 HRLZI TAC,555000 ;PROTECTION CODE (UNTOUCHABLE FILE ! )
\r
1412 PUSHJ PDP,MDTMOT ;FILL IN TIME, DATE AND MOTE
\r
1413 MOVEM TAC,WNZBUF+2
\r
1414 HLLZ TAC,SATXWD ;COMPUTE NEGATIVE WORD COUNT
\r
1416 HRRI TAC,1 ;PROGRAMMER NUMBER=1
\r
1417 MOVEM TAC,WNZBUF+3
\r
1420 MOVEI TAC,SATENT ;PREPARE TO STORE POINTERS TO ALL THE SAT BLOCKS.
\r
1424 REFSRL: HRRZ AC1,TAC1 ;GET LOGICAL BLOCK NUMBER OF SAT BLOCK.
\r
1425 HRL AC1,1(TAC) ;RETRIEVE THE CORRESPONDING CHECK-SUM.
\r
1426 MOVEM AC1,WNZBUF+4(AC2) ;STORE A POINTER WORD IN THE BUFFER.
\r
1427 MOVSI AC1,400000 ;RESTORE SATENT ENTRY TO CORRECT INITIAL VALUE.
\r
1431 AOBJN TAC1,REFSRL ;IS THAT ALL THE POINTERS ? IF NOT, LOOP BACK.
\r
1433 MOVE TAC,MFDBLK ;YES.
\r
1434 ADDI TAC,1(AC2) ;NOW COMPUTE LOGICAL BLOCK NUMBER OF THIS SAT
\r
1435 MOVEM TAC,WNZBUF+177 ; RETRIEVAL INFORMATION, AND STORE IT IN
\r
1436 ; THE LAST WORD OF THE BLOCK (THIS IS
\r
1437 ; REQUIRED FORMAT OF ALL RETRVL INFO).
\r
1439 PUSHJ PDP,WNZWR ;WRITE THE *SAT*.SYS RETRVL INFO ONTO THE DISK.
\r
1440 JRST REFERR ;ERROR
\r
1444 JRST CPOPJ1 ;***EXIT FROM PDP-10 DISK REFRESHER.***.........
\r
1446 ;ROUTINE TO WRITE THE FIXED BLOCK OF VITAL STATISTICS ONTO THE DISK.
\r
1448 WRSTAT: PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER
\r
1449 MOVE TAC,[XWD -WRSTSZ,0]
\r
1450 WRSTA1: MOVE TAC1,@WRSTA9(TAC) ;STORE KEY QUANTITIES IN THE OUTPUT BUFFER
\r
1451 MOVEM TAC1,WNZBUF(TAC)
\r
1454 MOVE TAC,[SIXBIT/STATBK/] ;STORE AN IDENTIFIER NEAR THE
\r
1455 MOVEM TAC,WNZBUF+^D126 ; END OF THE VITAL STATISTICS BLOCK.
\r
1458 PUSHJ PDP,WNZWR ;WRITE THIS VITAL STATISTICS BLOCK ONTO THE DISK.
\r
1459 JRST WRSTA2 ;WRITE ERROR
\r
1460 JRST CPOPJ1 ;GOOD WRITE. ***SUBROUTINE EXIT***...........
\r
1463 WRSTA2: MOVEI TAC,WRSTM1
\r
1464 PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE IF THIS VITAL WRITE FAILS.
\r
1466 POPJ PDP, ;THEN ALSO GIVE AN ERROR RETURN FOR FURTHER ACTION.
\r
1468 WRSTM1: ASCIZ /CANNOT WRITE VITAL STATISTICS BLOCK ON DISK. HELP!!
\r
1472 ;TABLE OF POINTERS TO THE VITAL STATISTICS THAT ARE STORED IN "STATBK" ON THE DISK.
\r
1474 WRSTA9: XWD ,MFDBLK ;LOGICAL BLOCK NUMBER OF MFD RETRIEVAL INFORMATION
\r
1475 XWD ,SATXWD ;LH = - NUMBER OF SAT BLOCKS ACTUALLY IN EXISTENCE.
\r
1476 ;RH = LOGICAL BLOCK NUMBER OF FIRST SAT BLOCK
\r
1477 XWD ,LBHIGH ;HIGHEST LEGAL LOGICAL BLOCK NUMBER ON DISK(S)
\r
1478 XWD ,LOWSWP ;LOWEST LOGICAL BLOCK NUMBER ALLOCATED FOR SWAPPING
\r
1479 XWD ,K4SWAP ;NUMBER OF 1K BLOCKS OF DISK SPACE FOR SWAPPING
\r
1481 XWD ,MAXSWP ;MAXIMUM NUMBER OF THOSE 1K BLOCKS ACTUALLY
\r
1482 ; USED SINCE THE DISK WAS LAST REFRESHED.
\r
1485 XWD 0,LOWSWP ;LOWSWP DOES DOUBLE DUMMY DUTY IN
\r
1486 ; NON-SWAPPING SYSTEM
\r
1490 ;ROUTINE TO READ IN THE FIXED BLOCK OF "VITAL STATISTICS" FROM
\r
1491 ; THE DISK AND DISTRUBUTE THEM TO THE APPROPRIATE CORE LOCATIONS.
\r
1493 RDSTAT: MOVEI TAC,STATBK
\r
1494 PUSHJ PDP,WNZRD ;READ IN THE VITAL STATISTICS BLOCK.
\r
1495 JRST RDSTA2 ;ERROR
\r
1496 MOVE TAC,WNZBUF+^D126 ;CHECK THE IDENTIFIER TO VERIFY THAT
\r
1497 CAME TAC,[SIXBIT /STATBK/] ; THE CORRECT BLOCK WAS READ.
\r
1498 JRST RDSTA2 ;ERROR, STATISTICS BLOCK APPARENTLY WAS CLOBBERED.
\r
1500 MOVE TAC,[XWD -WRSTSZ,0] ;STORE AWAY THESE IMPORTANT PARAMETERS
\r
1501 RDSTA1: MOVE TAC1,WNZBUF(TAC) ; UNDER CONTROL OF A TABLE IN THE "WRSTAT"
\r
1502 MOVEM TAC1,@WRSTA9(TAC) ; ROUTINE WHICH WRITES OUT THE VITAL
\r
1503 AOBJN TAC,RDSTA1 ; STATISTICS BLOCK ONTO THE DISK.
\r
1505 POPJ PDP, ;***SUBROUTINE EXIT***........
\r
1508 RDSTA2: MOVEI TAC,RDSTM1
\r
1509 ;PRINT ERROR MESSAGE IF THE VITAL
\r
1510 PUSHJ PDP,ICONM ; STATISTICS BLOCK CANNOT BE READ
\r
1512 PUSHJ PDP,REF ;GO THRU THE REFRESH DIALOGUE IN "ONCE".
\r
1513 JRST RDSTAT ;NOW TRY AGAIN.
\r
1515 RDSTM1: ASCIZ /VITAL DISK STATISTICS LOST, SUGGEST REFRESHING!
\r
1518 ;ROUTINE TO DETERMINE THE CURRENT SYSTEM'S DISK CAPACITY. I.E., THE NUMBER OF
\r
1519 ; DISKS ATTACHED TO THE RC-10 DISK SYNCHRONIZER TODAY.
\r
1521 ;ON EXIT FROM THIS SUBROUTINE
\r
1522 ; C(TAC) = HIGHEST LOGICAL DISK BLOCK NUMBER NOW EXTANT.
\r
1524 CAPCTY: MOVEI TAC,NUMSAT
\r
1525 IMULI TAC,NUMBLK ;COMPUTE AND SAVE MAXIMUM POSSIBLE CAPACITY.
\r
1526 PUSH PDP,LBHIGH ;SAVE EXISTING VALUE OF HIGHEST LEGAL BLOCK NUMBER.
\r
1527 MOVEM TAC,LBHIGH ;TEMPORARILY CHANGE THIS VALYUE SO THAT THE VALIDITY
\r
1528 ; CHECK IN "DSKINT" WILL NOT FAIL SPURIOUSLY.
\r
1531 CPCT1: PUSH PDP,TAC
\r
1532 PUSHJ PDP,WNZRD ;ATTEMPT TO READ FIRST BLOK OF EACH SUCCESSIVE DISK.,
\r
1536 CAMGE TAC,LBHIGH ;ALREADY TRIED ALL DISKS (MAXIMUM CAPACITY) ?
\r
1537 JRST CPCT1 ;NO, GO TRY THE NEXT ONE.
\r
1539 CPCT2: SUBI TAC,1
\r
1540 POP PDP,LBHIGH ;RESTORE PREVIOUSLY EXISTING VALUE OF THE HIGHEST
\r
1541 ; LEGAL LOGICAL DISK BLOCK NUMBER.
\r
1542 POPJ PDP, ;***SUBROUTINE EXIT***.......
\r
1545 CPCT3: POP PDP,TAC
\r
1546 CONSZ DSK,NRDY ;NON-EXISTENT DISK?
\r
1547 JUMPN TAC,CPCT2 ;YES, THE LIMIT OF DISK STORAGE HAS BEEN FOUND.
\r
1548 ; HOWEVER, DISK 0 MUST ALWAYS BE PRESENT.
\r
1550 MOVEI TAC,CPCTM1 ;NO, SOME OTHER TYPE OF READ ERROR.
\r
1552 PUSHJ PDP,OPOUT ;PRINT ERROR MESSAGE
\r
1554 JRST CAPCTY ;TRY AGAIN
\r
1555 CPCTM1: ASCIZ /DISK READ ERROR DURING CAPACITY SEARCH INITIALIZATION
\r
1558 ;ROUTINE TO ASSURE THAT THE STATUS OF THE WRITE-LOCK SWITCHES ON THE
\r
1559 ; DISK MAINTENANCE PANEL IS SUCH THAT THEY ARE PROTECTING "LESS THAN 0000".
\r
1561 ;THIS ROUTINE LOOPS PRINTING AN ERROR MESSAGE UNTIL THE SWITCHES ARE O.K.
\r
1563 WRITLK: CONI DSK,TAC
\r
1564 TLNN TAC,13777 ;BOUNDARY ZERO AND MAINTENANCE-SEGMENT OFF ?
\r
1565 TLNN TAC,<PLGSW>B53 ;YES, IS ROTARY SWITCH SET
\r
1566 ; TO EITHER X UNDER OR OVER(AS OPPOSED
\r
1567 ; TO UNDER OR X OVER)
\r
1568 JRST WRLK8 ;NO. GO PRINT ERROR MESSAGE AND LOOP.
\r
1570 ;AN UNFORTUNATE HARDWARE OVERSIGHT MAKES IT IMPOSSIBLE TO SENSE THE DIFFERENCE
\r
1571 ; BETWEEN "PROTECT LESS THAN" AND "PROTECT LESS THAN OR EQUAL". THEREFORE
\r
1572 ; THIS ROUTINE MUST ACTUALLY TRY WRITING ON TRACK 0000.
\r
1573 MOVE TAC,[252525252525]
\r
1575 MOVE TAC,[XWD WNZBUF,WNZBUF+1]
\r
1577 BLT TAC,WNZBUF+177
\r
1579 PUSHJ PDP,WNZWR ;WRITE PATTERN IN BLOCK 0.
\r
1581 POPJ PDP, ;***GOOD EXIT FROM WRITLK SUBROUTINE***.........
\r
1584 WRLK2: MOVEI TAC,WRLKM1
\r
1585 CONSZ DSK,WRPE ;WRITE-PROTECTION ERROR ?
\r
1586 ;YES, PROTECT SWITCH ERRONEOUSLY SET ON "LESS THAN
\r
1587 ; OR EQUAL" INSTEAD OF "LESS THAN".
\r
1588 ;NO, SOME OTHER FAILURE DURING THE WRITE OF BLOCK 0.
\r
1589 WRLK8: MOVEI TAC,WRLKM2 ;WRITE-LOCK SWITCHES SET INCORRECTLY.
\r
1590 WRLK9: PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE
\r
1592 JRST WRITLK ;GO TRY AGAIN
\r
1594 WRLKM1: ASCIZ /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK.
\r
1596 WRLKM2: ASCIZ /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND
\r
1597 DIS WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN",
\r
1601 ;DISK READING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.
\r
1602 ; AVOIDS USING THE MONITOR OUFUFS AND INTERRUPT STRUCTURE.
\r
1604 ;ON ENTRY TO THIS SUBROUTINE, TAG CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK
\r
1605 ; BLOCK WHICH IS TO BE READ INTO THE ONCE-ONLY DISK BUFFER AREA.
\r
1607 WNZRD: CONO DSK,DATERR!DEVERR!SETERR!RESETB ;CLEAR THE DISK SYNCHRONIZER
\r
1608 CONSZ DSK,BUSYBT!DONEFLG
\r
1609 JRST WNZRD ;DON'T PROCEED UNLESS THE CLEAR WORKED.
\r
1611 PUSH PDP,DSKFDG ;SAVE THIS INSTRUCTION FROM "DSKINT"
\r
1612 MOVE TAC1,[HRRZI TAC,0] ;NOW TAMPER WITH THAT SAVED LOCATION SO
\r
1613 MOVEM TAC1,DSKFDG ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.
\r
1614 MOVE TAC1,[XWD -200,WNZBUF-1]
\r
1615 PUSHJ PDP,DFRED ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.
\r
1616 WNZRDC: POP PDP,DSKFDG ;RESTORE THE MOLESTED INSTRUCTION IN DSKINT.
\r
1618 PUSHJ PDP,WNZWAT ;WAIT UNTIL THE READ IS FINISHED.
\r
1620 CONSZ DSK,DATERR!DEVERR!SETERR ;ANY ERRORS ?
\r
1621 JRST WNZRDX ;YES, GIVE ERROR RETURN.
\r
1622 MOVE TAC1,RCXCCW ;NO, BUT CHECK THAT THE FINAL VALUE OF THE
\r
1623 CAMN TAC1,RCXFIN ; CHANNEL CONTROL WORD WAS AS EXCPECTED ALSO.
\r
1624 AOS (PDP) ;***GOOD RETURN***........
\r
1625 WNZRDX: POPJ PDP, ;ERROR RETURN,
\r
1633 ;DISK WRITING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.
\r
1634 ; AVOIDS USING THE MONITOR QUEUES AND INTERRUPT STRUCTURE.
\r
1636 ;ON ENTRY TO THIS SUBROUTINE, TAC CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK
\r
1637 ; BLOCK WHICH IS TO BE WRITTEN ONTO THE DISK FROM THE ONCE-ONLY DISK BUFFER AREA.
\r
1639 WNZWR: CONO DSK,DATERR!DEVERR!SETERR!RESETB ;CLEAR THE DISK SYNCHRONIZER.
\r
1640 CONSZ DSK,BUSYBT!DONEFLG
\r
1641 JRST WNZWR ;DON'T PROCEED UNLESS THAE CLEAR WORKED.
\r
1643 MOVEM TAC,LBSAVE ;SAVE LOGICAL BLOCK NUMBER IN CASE AN ERROR RETURN
\r
1644 ; MUST BE TAKEN FROM THE "REFRESH" SUBROUTINE.
\r
1645 PUSH PDP,DSKFDG ;SAVE THIS ISNTRUCTION FROM "DSKINT".
\r
1646 MOVE TAC1,[HRRZI TAC,0] ;NOW TAMPER WITH THAT SAVED LOCATION SO
\r
1647 MOVEM TAC1,DSKFDG ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.
\r
1648 MOVE TAC1,[XWD -200,WNZBUF-1]
\r
1649 PUSHJ PDP,DFWRT ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.
\r
1651 JRST WNZRDC ;THE REMAINDER OF THE WRITE ROUTINE IS IDENTICAL
\r
1652 ; TO THE READ ROUTINE
\r
1654 \f;SUBROUTINE TO WATCH FOR THE DONE FLAG TO COME ON AND TIME OUT IF
\r
1655 ; IT DOESN'T COME UP SOON ENOUGH (SAY 5 SEC OR SO).
\r
1657 WNZWAT: MOVE TAC,[^D1000000] ;AT MOST ONE MILLION TIMES THRU THE CONSZ-SOJG LOOP
\r
1658 WNZWTL: CONSZ DSK,DONEFLG ;DONE FLAG ON YET ?
\r
1659 POPJ PDP, ;YES, GOOD EXIT.......
\r
1660 SOJG TAC,WNZWTL ;NO, TIMED OUT YET ?
\r
1661 ;YES, PRINT "DISK HUNG" ERROR MESSAGE.
\r
1665 POP PDP,TAC ;SKIP UP A SUBROUTINE LEVEL, AND GIVE AN
\r
1666 POPJ PDP, ; ERROR RETURN FROM WNZRD OR WNZWR.......
\r
1667 WATMSG: ASCIZ /DISK HUNG.
\r
1671 ;SUBROUTINE TO SET SPECIFIED BITS IN A SAT BLOCK WHILE FORMING IT IN WNZBUF
\r
1673 ;ENTRY CONDITIONS -- C(TAC) = FIRST BIT NUMBER TO SET (NUMBERED BEGINNING AT 0)
\r
1674 ; C(TAC1) = NUMBER OF BITS TO SET
\r
1676 SETWNZ: MOVE AC1,TAC1
\r
1681 STWNZ1: ORM AC2,WNZBUF(TAC)
\r
1685 STWNZ2: SOJN AC1,STWNZ1
\r
1686 POPJ PDP, ;SUBROUTINE EXIT...........
\r
1689 ;SUBROUTINE TO CLEAR THE ONCE-ONLY OUTPUT BUFFER, WNZBUF
\r
1690 WNZCLR: SETZM WNZBUF
\r
1691 MOVE TAC,[XWD WNZBUF,WNZBUF+1]
\r
1692 BLT TAC,WNZBUF+177
\r
1693 POPJ PDP, ;SUBROUTINE EXIT...........
\r
1695 ;SUBROUTINE TO MASK THE TIME, DATE, AND DATA MODE (=14 FOR BINARY MODE0 INTO ACCUMU-
\r
1696 ; LATOR TAC IN THE FORMAT USED IN WORD 3 OF A DISK RETRIEVAL INFORMATION BLOCK.
\r
1698 MDTMOT: PUSH PDP,TAC
\r
1699 MOVE TAC,TIME ;GET TIME IN JIFFIES.
\r
1700 IDIVI TAC,JIFMIN ;CONVERT TO MINUTES
\r
1702 IOR TAC,THSDAT ;TODAY'S DATE
\r
1703 TLO TAC,14B<^D12*^D18> ;BINARY MODE
\r
1706 POPJ PDP, ;SUBROUTINE EXIT............
\r
1709 ;ERROR EXIT FROM "REFRESH" WHEN A BAD WRITE ON THE DISK OCCURS DURING REFREHSING.
\r
1711 REFER1: POP PDP,TAC ;CORRECT PDP IF EXTRA PUSH HAD OCCURRED.
\r
1713 REFERR: MOVE TAC,LBSAVE ;GET BLOCK NUMBER FOR THE ERROR MESSAGE AT REF4.
\r
1714 POPJ PDP, ;THIS NO-SKIP RETURN RE-ENTERS THE REFRESH DIALOGUE.
\r
1718 ;MISCELLANEOUS STORAGE SPACE USED BY THE PDP-10 DISK REFRESHING ROUTINE.
\r
1723 WNZBUF: BLOCK 200 ;BUFFER FOR READING AND WRITING DISK
\r
1724 ; BLOCKS DURING THE ONCE-ONLY CODE.
\r
1726 LOWSWP: 0 ;LOWEST LOGICAL BLOCK FOR SWAPPING
\r
1728 > ;END OF REFRESH PROCEDURE FOR THE RD10 DISK.
\r
1730 > ;CLOSE AN EVEN EARLIER FTDISK CONDITIONAL.
\r
1731 \fINTERNAL FTCHECK
\r
1734 EXTERNAL CHKREG,CHKEND,CHECK,MONPTR,MONSUM
\r
1736 CK: MOVEI TAC,CHKBEG
\r
1740 PUSHJ PDP,CHECK ;COMPUTE AND STORE CHECKSUM OF THE PURE AREA OF
\r
1741 MOVEM TAC1,MONSUM ; THE TIME-SHARING MONITOR.
\r