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 JSR 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 ;-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 ITEM,40(DAT) ;YES, PICK UP JSR CH'N FROM LOWER CORE
\r
98 INTLP1: MOVE DAT,ITEM ;SAVE IT IN DAT (EITHER A JRST DEV'NT OR
\r
100 MOVE ITEM,1(DAT) ;PICK UP INSTR. FOLLOWING INTERRUPT CONSO
\r
101 TLNN ITEM,000740 ;IS IT A JEN?
\r
102 JRST INTLP1 ;NO, KEEP LOOKING
\r
103 MOVE TAC1,INTTAB(TAC) ;YES, LAST DEVICE SO FAR, GET DEV'NT
\r
104 HRLI TAC1,(JRST) ;MAKE JRST INSTR.
\r
105 MOVEM TAC1,1(DAT) ;CHANGE JEN @CH'N TO JRST DEV'NT
\r
106 MOVEM ITEM,1(TAC1) ;MAKE DEV'NT+1 BE JEN @CH'N
\r
107 NOPICH: AOBJN TAC,.+1 ;PICKUP EVERY OTHER WORD?
\r
108 AOBJN TAC,INTLOP ;ANY MOVE INTERRUPT SERVICE ROUTINES?
\r
114 EXTERN NULPDL,DSKINI
\r
116 PUSHJ PDP,DSKINI ;INITIALIZE THE DISK
\r
117 ; AFTER SETTING UP CHANNEL LOC
\r
118 ; BUT BEFORE OVERWRITTING ONCE WITH DDB'S
\r
121 MOVEM TAC,LINKSR+1 ;DO ONCE ONLY
\r
122 SKIPN DEVLST ;HAVE DEVICE DATA BLOCKS BEEN LINKED?
\r
123 JRST LINKDB ;NO, GO LINK DATA BLOCKS
\r
125 ;MULTIPLE DEVICE DATA BLOCKS ARE CREATED
\r
126 ;AS SPECIFIED BY SYSSIZ AND MAY ERASE PART
\r
128 JRSTI: JRST @LINKSR ;YES,RETURN
\r
129 \fEXTERN UUO0,ERROR,UUO2,LINKDB,DEVLST
\r
130 EXTERN CH1,CH2,CH3,CH4,CH5,CH6,CH7
\r
134 UUOTRP: JSR UUO0 ;TO UUO HANDLER
\r
149 0 ;LOC 60/61 TRAPPED TO FOR UNIMPLEMENTED OP CODES ON PDP-10
\r
150 ;OP CODE 100 IS USED TO DISMISS USER MODE INTERRUPTS(SEE TRPSET UUO)
\r
151 JSR UUO2 ;GO SEE IF OP CODE 100 OR SOME OTHER ONE
\r
153 ;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG
\r
154 EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN
\r
157 MOVE TAC,[JSR TSTAPR] ;REPLACE UUO JSR WIT A JSR HERE IN ONCE
\r
159 CONO APR,ILM!1 ;TURN ON PI & ASSIGN ILM FLAG
\r
160 ;FOR POSSIBLE ILLEGAL MEMORY REF BELOW
\r
161 MOVEM TAC,42 ;PUT A JSR IN CHAN 1 INT. LOC.
\r
162 CONO PI,12300 ;CLR PI SYSTEM, ACTIVATE PI SYSTEM. TURN ON CHAN 1
\r
163 DATAO APR,[XWD 376776,000400] ;SET LOW AND HIGH SEG TO 128K LONG
\r
164 ; EACH STARTING AT ABS LOC 0
\r
165 ; RELOC. FOR HIGH SEG IS 400000 TO DO THIS
\r
166 JRST 1,.+1 ;ENTER USER MODE .+1
\r
167 MOVE TAC,400100 ;TRY TO REFERENCE REL LOC 100 IN HIGH SEG
\r
168 ; AVOID SHADOW ACS WHICH LIKELY HAVE BAD
\r
169 ;PARITY CAUSED BY POWER TURN ON AND TURN OFF
\r
170 MOVEI 17,400000 ;MOVE HARDWARE ACS INTO SHADOW ACS TO CLEAR PARITY
\r
171 ;IF HARDWARE ACS TURNED OFF, ACS WILL BE PRESERVED
\r
172 BLT 17,400017 ;STOP WITH SHADOW AC 17
\r
173 CALL ;COME BACK TO EXEC MODE AT TSTAPR
\r
175 TSTAPR: 0 ;PLACE TO SIDE JSR PC
\r
176 SETZM TWOREG ;ASSUME NO SECOND REG.
\r
177 CONSO APR,ILM ;WAS MEMORY REF OUT OF BOUNDS?
\r
178 SETOM TWOREG ;NO, MUST HAVE SECOND REG. HARDWARE, SET -1
\r
179 CONO APR,ILM ;CLEAR APR FLAGS AGAIN
\r
180 MOVEI TAC,AND2RG ;=0 IF SOFTWARE CANNOT HANDLE 2 SEG(NULSEG LOADED)
\r
181 ANDM TAC,TWOREG ;=-1 IF IT CAN(SEGCON LOADED)
\r
182 ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITIES
\r
183 MOVNI TAC,SEGN ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES
\r
184 HRLI TAC,JOBN ;SET RH OF POINTER TO FIRST HIGH SEG
\r
185 ;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST
\r
186 ; WHICH BUILD FORBITS FROM HAVING EXTERNALS
\r
187 MOVSM TAC,SEGPTR ;POINTER USED FOR AOBJN LOOPS
\r
188 CONO PI,10000 ;CLEAR PI SYSTEM
\r
191 \f;ROUTINE TO FIND THE EXEC DDT SYMBOL TABLE POINTER AND MOVE IT TO THE PLACE
\r
192 ;WHERE EXEC DDT EXPECTS IT(DDTSYM=36)
\r
193 ;THE MONITOR CAN BE LOADED IN ANY OF 3 WAYS(IN ORDER OF PERFERNCE):
\r
194 ; 1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON
\r
195 ; 2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER AND COMMON
\r
196 ; 3. UNDER SPECIAL 10/30 MONITOR(SPMON) WITH BUILD
\r
198 ;THE 3 WAYS LEAVE DDTSYM(36),JOBSYM(116),T30SYM(131) IN DIFFERENT STATES:
\r
199 ; DDTSYM(36) JOBSYM(116) T30SYM(131)
\r
200 ; 1. JUNK S.T.PTR JUNK
\r
201 ; 2. JUNK JUNK(NON-NEG) S.T.PTR
\r
202 ; 3. S.T.PTR S.T.PTR JUNK
\r
205 ; RETURN WITH AC UUO SET TO SYMBOL TABLE POINTER
\r
206 ;CALLED FROM MANDATORY ONCE ONLY CODE AND 141 START CODE(WHICHEVER OCCURS FIRST)
\r
209 EXTERN T30SYM,JOBSYM,DDTSYM,DDTX,SYSDDT
\r
211 MOVSTP: 0 ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND
\r
212 ; FIRST JUMP TO EXEC DDT IF BEFORE MONITOR STARTED
\r
213 MOVJMP: JRST .+1 ;PATCHED TO SETUUO AFTER FIRST EXECUTION
\r
214 MOVE UUO,T30SYM ;ASSUME LOADED BY REGULAR 10/30
\r
215 SKIPL JOBSYM ;OR IS JOBSYM NEGATIVE(MEANING IT IS S.T.PTR)?
\r
216 JRST REGT30 ;WAS LOADED BY REGULAR 10/30
\r
217 MOVE UUO,JOBSYM ;ASSUME LOADED BY TIME SHARING MONITOR AND LOADER
\r
218 SKIPE DEVLST ;OR HAS BUILD PATCHED THE DDB CHAIN?
\r
219 MOVE UUO,DDTSYM ;YES, DDTSYM HAS SYMBOL TABLE POINTER AS STORED
\r
221 REGT30: MOVEM UUO,DDTSYM ;STORE THE SYMBOL TABLE POINTER FOR EXEC DDT
\r
222 MOVEI TAC,DDTX ;MAKE SYSTEM STARTUP LOC(141) GO DIRECTLY TO EXEC
\r
223 ; DDT AND BY PASS THIS FOOLISHNESS
\r
225 MOVEI TAC,SETUUO ;MAKE SURE THIS IS DONE ONLY ONCE
\r
227 SETUUO: MOVE UUO,DDTSYM ;RETURN THE CORRECT(MAYBEUPDATED IF
\r
228 ; EXEC DDT PATCHES MADE BEFORE MONITOR SAVED OR
\r
229 ; STARTED) SYMBOL TABLE POINTER
\r
230 JRST @MOVSTP ;RETURN
\r
232 ;HERE IF EXEC DDT IS STARTED UP BEFORE MONITOR(TO MAKE A PATCH FOR EXAMPLE)
\r
237 PATSYM: JSR MOVSTP ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL
\r
238 ; FIND IT AND PATCH 141 TO GO DIRECTLY TO EXEC DDT
\r
239 JRST DDTX ;AND GO DIRECTLY TO EXEC DDT
\r
241 ;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
259 DEFINE NEXTC <ILDB CHREC,TAC>>
\r
261 DEFINE SETTYO <PUSHJ PDP,OTSET>
\r
262 DEFINE TYPE <PUSHJ PDP,OUTCHS>
\r
263 DEFINE NEXTC <PUSHJ PDP,GETCHR>
\r
264 EXTERN TSETBF,SETBFI,SCNDDB,TTIBUF,TTOBUF,OUTCHS,GETCHR,TIBF,TOBF
\r
271 PATSIZ: MOVEI TAC,PATCH ;SET SIZE OF SYSTEM TO BEGINING OF PATCH
\r
272 MOVEM TAC,SYSSIZ ;IN CASE ONCE ONLY DIALOG RESTARTD BEFORE OVERWRITTEN
\r
274 ;PATSIZ SHOULG BE UPDATED EVERY TIME A PATCH
\r
275 ; IS MADE. SYSSIZ SHOULD ALSO BE UPDATED IF 146
\r
276 ; START IS GOING TO BE USED(DDT DEBUGGIN OR CTY DOWN)
\r
278 MOVE PDP,[XWD -ONCEPN,ONCEPD]
\r
283 MOVEI TAC,[ASCIZ / /]
\r
290 \f;ASK FOR TODAY'S DATE AND CONVERT
\r
291 ;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1
\r
293 EXTERNAL THSDAT,JIFMIN,SKIPS
\r
297 DATLOP: SETZM THSDAT
\r
304 PUSHJ PDP,DECIN1 ;MONTH
\r
314 PUSHJ PDP,DECIN1 ;DAY
\r
323 PUSHJ PDP,DECIN1 ;YEAR
\r
329 SUBI TAC1,^D64 ;YEAR ZERO
\r
330 IMULI TAC1,^D12*^D31
\r
344 JRST TIMLOP ;JUST A CR
\r
346 PUSHJ PDP,DECIN1 ;READ THE TIME (1-4 CHARACTERS)
\r
347 JRST TIMLOP ;NO ARGUMENT
\r
348 JRST TIMLOP ;ILLEGAL CHARACTER
\r
350 IDIVI TAC,^D100 ;TAC=HRS.TAC1=MINS
\r
351 SKIPL TAC ;HRS NEGATIVE?
\r
352 CAILE TAC,^D23 ;OR .G. 23?
\r
353 JRST TIMLOP ;OUT OF BOUNDS
\r
354 CAILE TAC1,^D59 ;MINUTES .G. 59
\r
355 JRST TIMLOP ;OUT OF BOUNDS
\r
356 IMULI TAC,^D60 ;CONVERT TO MINUTES
\r
357 ADD TAC,TAC1 ;MINUTES SINCE MIDNIGHT
\r
358 IMULI TAC,JIFMIN ;JIFFIES SINCE MIDNIGHT
\r
359 MOVEM TAC,TIME ;TIME=JIFFIES SINCE MIDNIGHT
\r
362 JUMPGE ITEM,QUICK ;SKIP NEXT PART OF DIALOGUE UNLESS THE LAST ITEM
\r
363 ; TYPED IN (NAMELY TIME OF DAT) WAS TERMINATED BY
\r
364 ; AN "ALT MODE". (ACCUMULATOR "ITEM" IS SET UP
\r
365 ; IN THE "GETLIN" SUBROUTINE CALLED ABOVE.)
\r
366 \f;PRINT IO CONFIGURATION
\r
368 EXTERNAL DEVLST,TCONLN,INLMES,PRNAME,INTTB1,INTTAB
\r
372 JSR TSTREG ;TEST IF 2 RELOC REG SET TWOSEG 0 OK-1
\r
373 MOVEI TAC,CRLFMS ;PRINT CRLF
\r
375 MOVEI TAC,1 ;ASSUME 1
\r
378 PUSHJ PDP,RADX10 ;NO. SECOND REG EXISTS.
\r
380 ASCIZ / RELOC. REG.
\r
387 JUMPN AC1,ALRLNK ;DEVICE DATA BLOCK ALREADY LINKED?
\r
388 MOVSI PROG,INTNUM ;NO, NOT LOADED BY BULD,-NO. OF DEVICES*2
\r
389 CONFLP: SKIPN AC1,INTTB1(PROG) ;INT LOC HAVE DEV DATA BLOCK?
\r
390 JRST NODDB ;NO, GO GET NEXT DEVICE DATA BLOCK
\r
391 LDB UUO,[POINT 8,INTTAB(PROG),8] ;YES. NO. OF DEV DATA BLKS
\r
392 HRRZ TAC,UUO ;PRINT
\r
393 PUSHJ PDP,RADX10 ;IN DECIMAL
\r
394 PUSHJ PDP,INLMES ;PRINT 1 SPACE
\r
396 HLLZ TAC1,DEVNAM(AC1) ;DEVICE NAME
\r
397 PUSHJ PDP,PRNAME ;PRINT IT
\r
398 SOJLE UUO,SINGLE ;IS THIS JUST A SINGLE DEVICE?
\r
399 PUSHJ PDP,INLMES ;NO, APPEND 'S TO DEVICE NAME
\r
401 SINGLE: PUSHJ PDP,CRLF ;PRINT CR LF
\r
402 NODDB: AOBJN PROG,.+1 ;
\r
403 AOBJN PROG,CONFLP ;FINISHED ALL DEVICES?
\r
407 HLLZ ITEM,DEVNAM(AC1)
\r
408 ONCE4: HLRZ AC1,DEVSER(AC1)
\r
410 HLLZ TAC1,DEVNAM(AC1)
\r
413 ONCE6: MOVE PROG,TAC ;SAVE NO.
\r
418 MOVE TAC,[POINT 6,ITEM]
\r
419 ONCE7: ILDB CHREC,TAC
\r
423 MOVEI TAC,[ASCIZ /'S/]
\r
428 ONCE7A: PUSHJ PDP,OPOUT
\r
431 MOVEI TAC,TCONLN ;PRINT NO, OF TTY SCANNER LINES
\r
434 ASCIZ / (OCTAL) TTY SCANNER LINES
\r
438 ;ASK FOR OPERATORS CONSOLE TO BE SPECIFIED
\r
440 EXTERNAL INLMES,DEVOPR,CTEXT,DEVPHY
\r
442 ONCEOP: MOVEI TAC,OPRM
\r
446 JRST ONCE8 ;JUST CR
\r
449 CAMN TAC,[SIXBIT /CTY/] ;CTY?
\r
450 JRST .+3 ;YES. JUST STORE IT.
\r
452 JRST ONCEOP ;PHYSICAL NAME NOT FOUND
\r
453 MOVEM TAC,DEVOPR ;SET FOR SYSTEM
\r
454 ;DEVICE "OPR" WILL BE SAME AS THIS
\r
456 ;ASK IF SYSMAK IS WANTED
\r
458 EXTERN MAKEND,SYSSIZ
\r
460 ONCE8: MOVEI TAC,SYSM
\r
462 JRST ONCE2 ;NO SYSMAK
\r
463 MOVEI TAC,MAKEND ;YES
\r
466 ;IS EXEC DDT WANTED?
\r
470 ONCE2: MOVEI TAC,SYSDM
\r
473 MOVEI TAC,DDTEND ;FIRST FREE LOC. ABOVE EXEC DDT
\r
474 MOVEM TAC,SYSSIZ ;SET NEW MONITOR SIZE
\r
475 ;FIND CORE TO BE USED FOR MULTIPLE DEVICE DATA BLOCKS
\r
480 ONCE3: PUSH PDP,SYSSIZ ;SAVE CURRENT VALUE
\r
481 JSP TAC,CNTDB ;UPDATE SYSSIZ BY SPACE USED
\r
482 ; FOR DEVICE DATA BLOCKS FOR DSK,DTA,MTA,TTY,PTY)
\r
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
522 PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOG.
\r
526 QUICK: ;THIS IS THE SHORT-CUT EXIT TO BY-PASS MOST OF THE DIALOGUE
\r
532 PUSHJ PDP,OK ;CHECKSUM MONITOR AND SAVE THE ANSWER.
\r
536 JRST @ONCE ;***EXIT FROM THE "ONCE-ONLY CODE"***
\r
538 EXTERNAL OCTIN,MFDBLK,SATXWD,NUMBLK,SYSPP,REFLAG
\r
542 REF: MOVEI TAC,REF1M ;DO YOU WANT TO REFRESH?
\r
545 MOVEI TAC,REF2M ;YES, ARE YOU SURE?
\r
548 REF6: ;YES. DO YOU WANT TO CHANGE THE LOC
\r
549 MOVEI TAC,REF3M ;OF THE MFD?
\r
553 MOVEI TAC,REF4M ;TYPE LOGICAL DISK ADDRESS OF MFD RETR, INFO
\r
558 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\r
563 PUSH PDP,TAC1 ;IS IT A MULTIPLE OF NUMBLK?
\r
566 JUMPN TAC1,REF4 ;NO
\r
574 IFN FTSWAP,<IFN FTRC10, <
\r
575 MOVEI TAC,REF9M ;HOW MANY 1K BLOCKS ON THE ISK FOR SWAPPING ?
\r
578 MOVEI TAC,^D200 ;THE DEFAULT ANSWER IS 200 DECIMAL.
\r
581 JRST REF3A ;JUST A CARRIAGE RETURN INVOKES DEFAULT
\r
582 IFN FTTTYSER,<PUSHJ PDP,SKIPS>
\r
586 CAILE TAC1,MXK2SWP ;ANSWER TOO BIG?
\r
587 JRST REF3 ;YES, REPEAT QUESTION
\r
588 HRRZM TAC1,K4SWAP ;NO. SAVE THIS CRUCIAL PARAMETER.
\r
594 PUSHJ PDP,REFRES ;REFRESH.
\r
598 MOVEI TAC,REF6M ;REFRESHING SUCCESSFULLY COMPLETED !
\r
600 PUSHJ PDP,OPOUT ;TYPE "REFRESHED !"
\r
604 MOVEM TAC,REFLAG ;TO PERMIT AUTOMATIC LOG-IN UNDER
\r
605 ; PROJ-PROG NUMBER [1,1] EVEN
\r
606 MOVEI TAC,REF8M ; THOUGH THE LOG-IN CUSP IS CLEARLY NOT
\r
607 PUSHJ PDP,ICONM ; ON THE NEWLY REFRESHED DISK.
\r
618 REF5: PUSH PDP,TAC ;ERROR. ON COMMING HERE, TAC HAS LOGICAL BLOCK
\r
619 ; NUMBER WHICH COULD NOT BE WRITTEN
\r
626 JRST REF6 ;GO BACK TO TRY AGAIN.,
\r
629 REF1M: ASCIZ /DO YOU WANT TO REFRESH THE DISK ? (Y OR CR)
\r
632 REF2M: ASCIZ /ARE YOU SURE(Y OR CR)?
\r
634 REF3M: ASCIZ /DO YOU WANT TO CHANGE THE LOCATION OF THE MFD(Y OR CR)?
\r
636 \fREF4M: ASCIZ /TYPE THE LOGICAL DISK ADDRESS OF THE MFT RETREIVAL INFORMATION
\r
639 REF5M: ASCIZ /MUST BE A MULTIPLE OF NUMBLK.
\r
642 REF6M: ASCIZ /REFRESHED !
\r
644 REF7M: ASCIZ /ERROR WHILE WRITING BLOCK /
\r
645 REF8M: ASCIZ /TO AUTOMATICALLY LOG-IN UNDER [1,1], TYPE "LOGIN"
\r
648 REF9M: ASCIZ /HOW MANY (DECIMAL) 1K DISK BLOCKS ARE TO BE ALLOCATED FOR SWAPPING ?
\r
651 > ;THIS CLOSES AN FTDISK CONDITIONAL SERVAL PAGES BACK.
\r
652 \f;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE
\r
653 ;CALL: PUSHJ PDP,GETLIN
\r
654 ; JUST A CR TYPED IN
\r
655 ; A LINE TYPED IN,TAC SEYT AS BYTE POINTER
\r
657 CHREC=TEM ;CHAR TO TYPE OUT (MUST BE SAME AS SCNSER ROUTINE)
\r
658 LINE=TAC1 ;TTY LINE NO. (ALSO SAME AS SCNSER)
\r
660 IFN FTTTYSER,<EXTERN TSETBF,SETBFI,SCNDDB,DCPUTR,PUTCHI>
\r
664 GETLIN: IFE FTTTYSER,<MOVE TAC,LINEP>
\r
665 IFN FTTTYSER,< PUSHJ PDP,SETBFI>
\r
667 GET1: PUSHJ PDP,TYI
\r
670 CAIN CHREC,177 ;RUBOUT?
\r
672 CAIN CHREC,33 ;ALTMODE ?
\r
674 CAIE CHREC,175 ;VARIATION OF ALT-MODE ?
\r
675 CAIN CHREC,176 ;OR YET THIS THIRD VARIATION ?
\r
677 GET2: PUSHJ PDP,TYO ;ECHO CHARACTER
\r
678 CAIL CHREC,140 ;IS THIS LOWER CASE?
\r
679 TRZ CHREC,40 ;YES,MAKE IT UPPER CASE
\r
680 IFE FTTTYSER,<IDPB CHREC,TAC>
\r
681 IFN FTTTYSER,<PUSHJ PDP,PUTCHI ;STORE CHARACTER
\r
682 JFCL ;IGNORE ERROR RETURN
\r
686 MOVEI CHREC,12 ;OUTPUT LF
\r
687 PUSHJ PDP,TYO ;TYPE OUT
\r
688 IFE FTTTYSER,< MOVE TAC,LINEP ;RESET BYTE POINTER>
\r
689 JUMPN ITEM,CPOPJ1 ;NULL LINE?
\r
690 POPJ PDP, ;YES, DON'T SKIP RETURN
\r
692 DELETE: IFN FTTTYSER,< PUSHJ PDP,DCPUTR
\r
695 JUMPE ITEM,DELET1 ;AT BEGINNING OF LINE?
\r
696 ADD TAC,[XWD 070000,0] ;NO, BACK UP BYTE POINTER
\r
697 TLNE TAC,400000 ;FINISHED THIS WORD YET?
\r
698 ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS>
\r
699 MOVEI CHREC,134 ;OUTPUT BACK SLASH
\r
703 DELET1: MOVEI CHREC,15
\r
709 GETLN1: SETOM ITEM ;MECHANISM USED TO BY-PASS PART OF DIALOGUE
\r
710 MOVEI CHREC,15 ;WHEN ALTMODEIS TYPED.
\r
712 \f;ROUTINE TO TYPE A LINE ON OPERATOR CONSOLE
\r
713 ;ECHO CHECK STOPS LINE AND RETURNS
\r
714 ;CALL: DAT SET TO END OF MESSAGE
\r
716 IFN FTTTYSER,<EXTERNAL CPOPJ>
\r
718 OPOUT: IFE FTTTYSER,<MOVE TAC,LINEP>
\r
719 IFN FTTTYSER,<MOVEI DAT,TTOBUF(DEVDAT)>
\r
720 CONO TTY,1000 ;CLEAR INPUT
\r
721 OPOUT1: IFE FTTTYSER,<
\r
725 JRST OPOUT2 ;ECHO CHECK
\r
727 IFN FTTTYSER,< JUMPE CHREC,CPOPJ>
\r
731 OPOUT2: MOVEI CHREC,15
\r
735 CONO TTY,1000 ;CLEAR INPUT
\r
737 ;WAIT TILL OUTPUT BUSY OFF BEFORE TYPING OUT CHAR.
\r
739 EXTERNAL TCONLN,TYPL
\r
741 TYO: PUSHJ PDP,APRCHK ;CHECK CLOCK
\r
748 AND TAC,[OCT 11111111]
\r
749 IMUL TAC,[OCT 11111111]
\r
758 ;WAIT TIL INPUT DONE ONE BEFORE RETURNING WITH NEXT CHAR.
\r
760 TYI: PUSHJ PDP,APRCHK
\r
765 ;CHECK APR FOR CLOCK FLAG SO TIME USER TYPES IN WILL BE ACCURATE
\r
767 APRCHK: CONSO APR,1000 ;IS CLOCK FLAG ON?
\r
769 CONO APR,1000 ;YES, CLEAR CLOCK FLAG
\r
770 AOS TIME ;INCREMENT TIME
\r
772 \fICONM: PUSH PDP,TAC
\r
773 SETTYO ;INITIALIZE LINE BUFFER
\r
775 JRST CONMES ;OUTPUT MESSAGE
\r
778 OTSET: MOVEI DEVDAT,SCNDDB
\r
779 MOVSI TEM,120 ;TTYCHR
\r
780 HRRI TEM,TIBF(DEVDAT)
\r
781 MOVEM TEM,TTIBUF(DEVDAT) ;INIT INPUT POINTER
\r
782 HRRI TEM,TOBF(DEVDAT) ;AND OUTPUT POINTER
\r
783 MOVEM TEM,TTOBUF(DEVDAT)
\r
784 JRST TSETBF ;NOW CLEAR THE BUFFERS
\r
787 YESNO: PUSHJ PDP,ICONM ;FIRST OUTPUT THE QUESTION
\r
789 PUSHJ PDP,GETLIN ;NOW GET RESPONSE
\r
790 POPJ PDP,0 ;JUST A C-R
\r
792 TRZ CHREC,40 ;FIRST CHAR OF RESPONSE (U.C.)
\r
793 CAIN CHREC,"Y" ;WAS IT A Y?
\r
794 AOS 0(PDP) ;YES, SKIP
\r
795 POPJ PDP, ;NO. MAYBE IT WAS "N", SO DONT SKIP
\r
797 ;CONSTANTS AND PUSH DOWN LIST
\r
800 ONCEPD: BLOCK ONCEPN ;PUSH DOWN LIST
\r
802 LINEP: POINT 7,LINBUF ;INPUT AND OUTPUT LINE BUFFERE
\r
807 TSEXEC: ASCIZ / MONITOR JUST LOADED
\r
810 TYPE TODAY'S DATE AS MM-DD-YY
\r
820 TYPE NAME OF OPR CONSOLE
\r
823 DO YOU WANT SYSMAK (TYPE Y IF YES, CR IF NO)?
\r
830 LENGTH: ASCIZ / OCTAL LOCATIONS LONG.
\r
832 MXKMES: ASCIZ /MAX K CORE FOR SINGLE USER IS /
\r
833 DESMES: ASCIZ /TYPE DESIRED MAX,(DEC), CR IF OK AS IS
\r
838 \f;INITIALIZE SAT SEARCH ENTRIES
\r
840 ;THIS "DFWUNS" ROUTINE IS CALLED BY MANDATORY ONCE ONLY CODE(LINKSR)
\r
841 ; AFTER ALL MULTIPLE DEVICE DATA BLOCKS HAVE BEEN GENERATED IN CORE
\r
842 ; ABOVE C(SYSSIZ)( AND SYSSIZ HAS BEEN INCREMENTED)
\r
843 ; IT IS CALLED WHETHER OR NOT THE DISK WAS REFRESHED. IF REFRESHING WAS
\r
844 ; PERFORMED, DFWUNS IS CALLED AFTER REFRES SINCE SYSINI CALLS LINKSR AFTER ONCE.
\r
850 EXTERNAL SAT05,JSAT06,SATENT,SATPTR,SATBK2,SATXWD,SATPTR
\r
851 EXTERNAL SAT,SENTSZ,DSKDDB,DSKBUF,WSYNC,MQIN,MQOUT,DFGETF,SETFRE
\r
852 EXTERNAL WLBIT,NUMBIT,DSKCNT
\r
856 PUSHJ PDP,WRITLK ;FORCE THE WRITE-LOCK SWITCH SETTINGS TO BE ZERO.
\r
857 PUSHJ PDP,RDSTAT ;READ VITAL DISK STATISTICS BLOCK, STORE PARAMETERS
\r
858 PUSHJ PDP,CAPCTY ;DETERMINE CURRENT SYSTEM CAPACITY (HOW MANY DISKS).
\r
859 CAMN TAC,LBHIGH ;HAS CAPACITY CHANGED SINCE LAST REFRESH ?
\r
860 JRST DFWNZ1 ;NO, EVERYTHING APPPEARS TO BE OKAY.
\r
861 SETTYO ;YES, PRINT WARNING MESSAGE...
\r
863 ASCIZ /DISK CAPACITY HAS CHANGED SINCE LAST REFRESHING.
\r
864 EITHER RESTORE PREVIOUS DISK CONFIGURATION OR REFRESH.
\r
867 PUSHJ PDP,OPOUT ;START TTY
\r
868 PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOGUE
\r
869 JRST DFWUNS ;NOW TRY AGAIN.
\r
875 MOVEI DEVDAT,DSKDDB
\r
877 MOVEM TAC1,DSKBUF(DEVDAT)
\r
883 ;READ EACH SAT BLOCK FROM THE DISK AND SET SATENT TABLE TO MATCH INFO ON DISK.
\r
885 SETS1: ADDM TAC1,SATPTR
\r
886 SETS2: PUSH PDP,TAC
\r
887 SETZB IOS,DEVIOS(DEVDAT)
\r
888 PUSHJ PDP,MQIN ;READ A SAT BLOCK
\r
889 JRST 4,SETS6 ;ERROR HALT
\r
890 MOVE DAT,SATPTR ;RESET THE ENTRY
\r
896 \fSETS3: MOVE AC1,(TAC) ;COUNT ONE-BITS
\r
897 AOJN AC1,SETS3A ;IS THE WORD = -1?
\r
901 SETS3A: SOJE AC1,SETS5 ;NO, IS IT = 0?
\r
902 SETS4: TDNE TAC1,(TAC) ;NO, COUNT THE BITS
\r
907 SETS5: AOBJN TAC,SETS3 ;LOOP THRU ENTIRE BLOCK
\r
911 ;BITS HAVE BEEN COUNTED, CHECK FOR WRITE-LOCK
\r
912 CAIL DAT,NUMBIT ;BLOCK FULL?
\r
914 PUSHJ PDP,DFGETF ;NO. GET A FREE BLOCK
\r
915 PUSHJ PDP,SETS7 ;WRITE
\r
916 PUSHJ PDP,SETFRE ;FREE THE BLOCK
\r
920 SETS5B: MOVEI TAC1,SENTSZ ;PREPARE TO BUMP SATPTR
\r
922 AOBJN TAC,SETS1 ;DO ALL SAT BLOCKS
\r
932 SETS5X: CAIL TAC,SATTOP
\r
933 JRST SAT05 ;EXIT FROM DFWUNS BACK TO DSKINI IN DSKSER........
\r
935 MOVEI TAC1,411000 ;ON THE NEW PDP-10 DISK SYSTEM SET THE SAT ENTRY
\r
936 HRRM TAC1,(TAC) ; TABLE TO SHOW ALL NON-EXISTENT DISKS AS
\r
937 JRST SETS5X ; BOTH WRITE-LOCKED AND FULL.
\r
939 \fSETS6: POP PDP,TAC ;ERROR, TRY AGAIN
\r
945 ;WRITE-LOCK DETERMINATION ON THE OLD PDP-6 (DATA PRODUCTS) DISK --
\r
947 SETS7: PUSH PDP,TAC ;SAVE BLOCK ADDRESS
\r
948 SETS7A: PUSHJ PDP,MQOUT
\r
950 SETS7B: POP PDP,TAC
\r
952 SETS7C: MOVE TAC,(PDP)
\r
953 MOVE TAC1,DSKCNT(DEVDAT)
\r
954 TRNN TAC1,IOIMPM ;WRITE LOCK?
\r
956 MOVEI TAC,WLBIT ;YES. SET BIT
\r
960 SETS8: MOVEI TAC,SETS9 ;BLOCK FULL, READ FIRST ONE
\r
961 HRRM TAC,DSKBUF(DEVDAT)
\r
965 HLRZ TAC,@SATPTR ;WRITE IT BACK
\r
967 MOVEI TAC,SAT ;RESET
\r
968 HRRM TAC,DSKBUF(DEVDAT)
\r
974 > ;CLOSE THE IFE FTRC10
\r
975 > ;CLOSES AN IFN FTDISK A COUPLE PAGES BACK.
\r
978 ;DISK REFRESHING ROUTINES ---
\r
981 ;DISK REFRESHER FOR THE OLD PDP-6 (DATA PRODUCTS) DISK --
\r
984 EXTERNAL MFDBLK,NUMSAT,CHKCNT,CHKSUM,NUMBLK,DSKINI,SETSAT,DSKCHN,DSKCHL
\r
986 REFRESH: MOVEI PROG,0 ;SETUP IO
\r
987 MOVEI DEVDAT,DSKDDB
\r
996 MOVE TAC1,[JSR DSKCHL]
\r
1002 ;SETUP NULL SAT BLOCK
\r
1005 MOVE TAC1,[XWD NULBLK,NULBLK+1]
\r
1007 BLT TAC1,NULBLK+177
\r
1008 MOVEI TAC,NUMBLK ;END OF BLOCK BYTE POINTER
\r
1023 BLT TAC,NULBLK+177
\r
1025 ;SET UP SAT BLOCK WITH MFD AND SAT BLOCKS ALLOCATED
\r
1027 MOVE TAC,[XWD NULBLK,SATBL1]
\r
1028 BLT TAC,SATBL1+177
\r
1029 MOVE TAC,[POINT 1,SATBL1]
\r
1031 HRLM TAC1,SATRET+3
\r
1036 ;COMPUTE CHECKSUMS IF REQUIRED
\r
1040 MOVE TAC,[XWD -200,MFD1]
\r
1042 HRLM TAC1,MFDRET+4
\r
1043 MOVE TAC,[XWD -200,NULBLK]
\r
1045 HRLM TAC1,SATRET+4
\r
1046 MOVE TAC,[XWD -200,SATBL1]
\r
1050 ;RELOCATE POINTERS RELATIVE TO MFDBLK
\r
1052 REFR1: MOVE TAC,MFDBLK
\r
1053 HRRM TAC,MFDRET+177
\r
1057 HRRM TAC,SATRET+177
\r
1066 HRRZM TAC1,SATRET+3(TAC1)
\r
1067 ADDM TAC,SATRET+3(TAC1)
\r
1070 ;FIX CHECKSUM FOR SATBL1
\r
1074 HRLM DAT,SATRET+3(TAC)
\r
1077 ;WRITE BLOCKS ON DISK
\r
1079 MOVE TAC,MFDBLK ;MFD RETREIVAL INFORMATION
\r
1080 MOVE TAC1,[XWD -200,MFDRET]
\r
1081 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1082 SETZB IOS,DEVIOS(DEVDAT)
\r
1086 REFR2: MOVE TAC1,[XWD -200,NULBLK] ;SAT BLOCKS
\r
1088 MOVE TAC1,[XWD -200,SATBL1]
\r
1091 SETZB IOS,DEVIOS(DEVDAT)
\r
1092 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1094 JRST REFER1 ;ERROR
\r
1098 AOS TAC ;SAT RETREIVAL INFORMATION
\r
1100 SETZB IOS,DEVIOS(DEVDAT)
\r
1101 MOVE TAC1,[XWD -200,SATRET]
\r
1102 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1105 MOVE TAC,MFDBLK ;MFD
\r
1108 MOVE TAC1,[XWD -200,MFD1]
\r
1109 MOVEM TAC1,DSKBUF(DEVDAT)
\r
1110 SETZB IOS,DEVIOS(DEVDAT)
\r
1116 REFER1: POP PDP,TAC1
\r
1117 REFER: POP PDP,WSYNC
\r
1120 DEFINE ZEROES (A),<XLIST
\r
1124 DEFINE ONES (A),<XLIST
\r
1128 DEFINE BLOCKR (NAME,EXT,PROT,PROGX,B,F,Z),<
\r
1131 EXP PROT*1B8+14B12
\r
1135 BYTE (4) F (14) 0 (18) B >
\r
1137 MFDRET: BLOCKR <XWD 1,1>,<SIXBIT /UFD/>,45,1,0,4,20 ;MFD RETREIVAL INFO
\r
1139 SATBL1: XWD 777776,0 ;THIS SAT BLOCK CONTAINSS
\r
1140 ZEROES 5400/44-1 ;ALLOCATION FOR MFD AND SAT BLOCKS
\r
1144 SATRET: BLOCKR <SIXBIT /*SAT*/>,<SIXBIT /SYS/>,555,1,0,1,16
\r
1146 MFD1: XWD 1,1 ;MFD
\r
1149 XWD 637163,17 ;RELOCATED
\r
1152 NULBLK: ZEROES 5400/44-1 ;NULL SAT BLOCK
\r
1158 > ;END OF THE REFRESHER FOR THE OLD PDP-6 DISK.
\r
1162 ;DISK REFRESHER FOR THE NEW PDP-10 MODEL RC-10 (BURROUGHS) DISK--
\r
1164 EXTERNAL CPOPJ1,THSDAT,TIME
\r
1165 EXTERNAL MFDBLK,SATXWD,NUMSAT,NUMBLK,SATTOP,SENTSZ
\r
1166 EXTERNAL DISKUP,DFRED,DFWRT,DSKFDG,CHKSUM,RCXCCW,RCXFIN
\r
1169 EXTERNAL MAXSWP,MXK2SWP,BLKSPK
\r
1174 STATBK=1 ;FIXED LOGICAL BLOCK NUMBER FOR THE "VITAL
\r
1175 ; STATISTICS" BLOCK OF THE DISK.
\r
1176 DSK=170 ;DEFINE DEVICE NUMBER OF THE MODEL RC-10 DISK SYNCHRONIZER.
\r
1179 ;THESE NEXT TWO PAGES ARE LIFED DIRECTLY FROM "DSKINIT" IN ORDER TO DEFINE THE
\r
1180 ; CONO AND CONI BITS USED HERE IN "ONCE".
\r
1182 ;CONI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1184 ;BITS 00 - 17 MAINTENANCE PANEL SWITCH SETTINGS INDICATORS --
\r
1185 ;BITS 00 - 04 UNUSED
\r
1186 MSS=1B5 ;SET INDICATES "MAINTENANCE SEGMENT SELECTED" (SEGMENT 81),
\r
1187 PLGSW=1B6 ;1 = WRITE-PROTECT EVERYTHING BELOW (LESS THAN) THE BOUNDARY,
\r
1188 ; 0 = WRITE-PROTECT EVERYTHING ABOVE (GREATER THAN) BOUNDARY,
\r
1189 ;THE CURRENT IMPLEMENTATION OF THE RC-10 DISK SYNCHRONIZER
\r
1190 ; DOES NOT PERMIT SENSING THE INCLUSION OF THE BOUNDARY.
\r
1191 ;BITS 07 - 17 THE WRITE-PROTECTION THE INCLUSION OF THE BOUNDARY.
\r
1192 DTOP=1B18 ;SET INDICATES DATA TRANSFER IN PROGRESS.
\r
1193 ;BITS 19 -29 ERROR CONDITIONS INDICATORS (ERROR WHEN SET) --
\r
1194 SRCHE=1B19 ;SEARCH ERROR (DISK TIMING TRACK PROBLEMS!!)
\r
1195 DDE=1B20 ;DISK DESIGNATION ERROR
\r
1196 TSE=1B21 ;TRACK SELECT ERROR (OR EXCEEDS SYSTEM CAPACITY)
\r
1197 NRDY=1B22 ;DISK NOT READY (OR NON-EXISTENT DISK REFERENCED)
\r
1198 PSF=1B23 ;POWER SUPPLY FAILURE
\r
1199 DPAR=1B24 ;DISK PARITY ERROR
\r
1200 CHDPAR=1B25 ;CHANNEL DATA PARITY ERROR
\r
1201 CHCPAR=1B26 ;CHANNEL CONTROL PARITY ERROR
\r
1202 NXMEM=1B27 ;NON-EXISTENT MEMORY REFERENCED
\r
1203 WRPE=1B28 ;ATTEMPTED TO WRITE IN PROTECTED DISK AREA (SEE BITS 06 - 17)
\r
1204 OVR=1B29 ;OVERRUN, I.E., MEMORY DIDN'T RESPOND QUICKLY ENOUGH
\r
1205 ;BIT 30 CHANNEL CONTROL WORD WRITTEN IN MEMORY (THIS BIT IS
\r
1206 ;TURNED ON ON ALMOST ALL TERMINATIONS.)
\r
1207 BUSYBT=1B31 ;BUSY (SYNCHRONIZER PERFORMING A COMMAND SEQUENCE)
\r
1208 DONEFLG=1B32 ;DONE -- THIS ACTUALLY CAUSES THE INTERRUPT.
\r
1209 ;BITS 33 - 35 PI CHANNEL SELECTION BITS.
\r
1211 ;COMBINATIONS OF ERRO BITS GROUPED BY TYPE --
\r
1212 DATERR=DPAR!CHDPAR ;DATA ERRORS.
\r
1213 DEVERR=SRCHE!PSF!CHCPAR!OVR ;DEVICE ERRORS.
\r
1214 SETERR=DDE!TSE!NRDY!WRPE!NXMEM ;SOFTWARE-PREVENTABLE ERRORS.
\r
1215 \f;CONO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER
\r
1217 ;BITS 00 - 17 UNUSED
\r
1218 ;BITS 18 - 19 SELECT DISK FOR SECTOR COUNTER READ-OUT A(SEE DATAI BITS 28-35)
\r
1219 ;BITS 20 - 29 RESET THE CORRESPONDING CONI ERROR BIT
\r
1220 ;(BUT PSE MAY REFUSE TO BE RESET)
\r
1221 WRCCWD=1B30 ;WRITE THE CHANNEL CONTROL WORD INTO MEMORY (NOW!)
\r
1222 STPBIT=1B31 ;STOP -- IMMEDIATELY CEASE PRESENT I/O AND CLEAR THE CHANNEL.
\r
1223 RESETB=1B32 ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT
\r
1224 ;BITS 33 - 35 PI CHANNEL SELECTION BITS
\r
1226 ;DATAI FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1228 ;BITS 00 - 17 UNUSED
\r
1229 ;BITS 18 - 23 PARITY REGISTER
\r
1230 ;BITS 24 - 25 UNUSED
\r
1231 ;BITS 26 - 27 DISK SELECTED BY BITS 18-19 OF LAST CONO
\r
1232 ;BITS 28 - 35 CURRENT SECTOR POSITION OF SELECTED DISK (FOR LATENCY OPTIMIZATION!)
\r
1235 ;DATAO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --
\r
1237 ;BITS 00 - 17 DISK ADDRESS ELECTION
\r
1238 ;BITS 00 - 01 DISK SELECT
\r
1239 ;BITS 02 - 10 TRACK SELECT (BCD, BUT FIRST CHAR IS JUST 1 BIT)
\r
1240 ;BITS 11 - 17 SEGMENT SELECT (BCD, BUT FIRST CHAR HAS ONLY 3 BITS)
\r
1241 ;BITS 18 - 23 INITIAL PARITY REGISTER SETTING 9ZERO EXCEPT FOR DIAGNOSTIC PROGRAMS)
\r
1242 DDSKPE=1B24 ;DISABLE DISK PARITY ERROR STOP
\r
1243 DCHNPE=1B25 ;DISABLE CHANNEL DATA PARITY ERROR STOP
\r
1244 WRBIT=1B26 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK
\r
1245 ;BITS 27 - 34 ;CORRESPONDING BITS OF INITIAL CHANNEL CONTROL ADDRESS, HENCE,
\r
1246 ; THIS ADDRESS MUST BE EVEN AND IN THE FIRST 1K OF CORE MEMORY!
\r
1247 ;BIT 35 ;WRITE EVEN PARITY DATA INTO MEMORY (DIAGNOSTICS ONLY!)
\r
1251 PUSHJ PDP,DISKUP ;BE SURE THE DISK IS UP AND READY.
\r
1252 PUSHJ PDP,WRITLK ;BE SURE WRITE-LOCK SWITCHES ARE OFF.
\r
1253 PUSHJ PDP,CAPCTY ;DETERMINE THE CURRENT DISK CAPACITY OF THE
\r
1254 ; SYSTEM, I.E. HOW MANY DISKS ARE ATTACHED TODAY ?
\r
1255 MOVEM TAC,LBHIGH ;STORE HIGHEST LEGAL LOGICAL BLOCK NUMBER
\r
1259 LSH TAC1,BLKSPK ;COMPUTE AND SAVE THE LOWEST LOGICAL BLOCK
\r
1260 SUBM TAC,TAC1 ; NUMBER RESERVED FOR SWAPPING.
\r
1262 CAIG TAC1,STATBK ;SWAPPING AREA MUST NOT OVERLAY THE
\r
1263 JRST RFRSHE ; VITAL STATISTICS BLOCK.
\r
1266 MOVN TAC1,TAC ;SET SATXWD TO SHOW ONLY THE NUMBER OF
\r
1267 HRLM TAC1,SATXWD ; SAT BLOCKS ACTUALLY IN EXISTENCE.
\r
1271 CAML TAC,LOWSWP ;MAKE VARIOUS CONSISTENCY CHECK TO DETERMINE
\r
1272 JRST RFRSHE ; THAT THE DISK PARAMETERS SPECIFIED DURING THE
\r
1274 CAIG TAC1,STATBK ; ONCE-ONLY DIALOGUE DO NOT CAUS THE DISK
\r
1275 CAIGE TAC,STATBK ; SWAPPING AREA, VITAL STATISTICS BLOCK, AND/OR
\r
1276 JRST RFRSH1 ; THE MFD AND SAT BLOCK TO OVERLAP ONE ANOTHER.
\r
1277 RFRSHE: MOVEI TAC,RFSHME
\r
1278 ;IF THERE IS SOME OVERLAPPING OF
\r
1279 PUSHJ PDP,IOCON ; THESE DISK STORAGE AREAS, PRING AN
\r
1280 PUSHJ PDP,OPOUT ; ERROR MESSAGE AND THEN GO BACK TO THE
\r
1281 POP PDP,TAC ; DIALOGUE TO AK THE PARAMETER SPECIFICATION
\r
1282 JRST REF6 ; QUESTIONS AGAIN.
\r
1284 RFSHME: ASCIZ /PARAMETER SPECIFICATION ERROR. TRY AGAIN.
\r
1288 RFRSH1: PUSHJ PDP,WRSTAT ;WRITE OUT THE VITAL STATISTICS BLOCK ON THE DISK.
\r
1289 JRST REFERR ; AN ERROR ON THIS WRITE IS BAD TROUBLE !!
\r
1291 ;NEXT WRITE THE MFD (MASTER FILE DIRECTORY) ONTO THE DISK
\r
1293 PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER
\r
1294 MOVE TAC,[XWD 1,1] ;THE FIRST ENTRY IN THE MFD IS FOR
\r
1295 MOVEM TAC,WNZBUF ; THE MFD ITSELF.
\r
1296 MOVE TAC,[SIXBIT/UFD/]
\r
1297 HRR TAC,MFDBLK ;POINTER TO MFD RETRIEVAL INFORMATION
\r
1298 MOVEM TAC,WNZBUF+1
\r
1299 MOVE TAC,[SIXBIT/*SAT*/] ;THE ONLY OTHER ENTRY INITIALLY IN THE
\r
1300 MOVEM TAC,WNZBUF+2 ; MFD IS FOR THE FILE NAMED *SAT*.SYS WHICH
\r
1301 HLRZ TAC1,SATXWD ; PERMITS ACCESS TO THE SAT BLOCKS FOR
\r
1302 HRRZ TAC,MFDBLK ; ANYONE WHO WANTS TO LOOK AT THEM.
\r
1303 SUBI TAC,-1(TAC1) ;COMPUTE POINTER TO THE RETRIEVAL INFORMATION
\r
1304 HLL TAC,[SIXBIT/SYS/] ; FOR THE *SAT*.SYS FILE.
\r
1305 MOVEM TAC,WNZBUF+3
\r
1307 ADDI TAC,1 ;COMPUTE LOGICAL BLOCK NUMBER OF THE MFD.
\r
1308 PUSHJ PDP,WNZWR ;WRITE THE MFD OUT ONTO THE DISK.
\r
1309 JRST REFERR ;ERROR
\r
1311 MOVE TAC,[XWD -200,WNZBUF]
\r
1313 HRRZM TAC1,CHKSAV ;SAVE CHECKSUM TO GO INTO RETRIEVAL INFORMATION.
\r
1316 ;NEXT WRITE MFD RETRIEVAL INFORMATION BLOCK ONTO THE DISK
\r
1318 PUSHJ PDP,WNZCLR ;CLEAR OUTPUT BUFFER
\r
1319 MOVE TAC,[XWD 1,1]
\r
1320 MOVEM TAC,WNZBUF ;FILE NAME
\r
1322 HLL TAC,[SIXBIT /UFD/]
\r
1323 MOVEM TAC,WNZBUF+1 ;FILE EXTENSION, DATE
\r
1324 HRLZI TAC,045000 ;PROTECTION (ANY PROJECT 1 USER MAY WRITE IN MFD)
\r
1325 PUSHJ PDP,MDTMOT ;FILL IN TIME, DATE, AND MODE
\r
1326 MOVEM TAC,WNZBUF+2
\r
1327 MOVE TAC,[XWD -200,1] ;NEGATIVE WORD COUNT AND PROGRAMMER NUMBER
\r
1328 MOVEM TAC,WNZBUF+3 ;GO INTO WORD 4 OF RETRIEVAL INFO
\r
1331 SUBI TAC,-2(TAC1) ;COMPUTE POINTER TO THE MFD.
\r
1332 HRL TAC,CHKSAV ;RETRIEVE SAVED CHECKSUM OF MFD.
\r
1333 MOVEM TAC,WNZBUF+4
\r
1334 MOVE TAC,MFDBLK ;THE LAST WORD OF ANY BLOCK OF RETRIEVAL INFORMATION
\r
1335 MOVEM TAC,WNZBUF+177 ; MUST CONTAIN ITS OWN BLOCK NUMBER.
\r
1336 PUSHJ PDP,WNZWR ;WRITE MFD RETRIEVAL INFOMRATION ONTO THE DISK
\r
1337 JRST REFERR ;ERROR
\r
1339 ;NEXT CREATE THE NECESSARY SAT BLOCKS ON THE DISK
\r
1341 PUSH PDP,SATXWD ;SATXWD CONTROLS THE OUTER LOOP
\r
1342 MOVEI TAC,SATENT ;SET UP SATPTR TO SHUFFLE THROUGH THE BLOCKS
\r
1344 REFST1: MOVEM TAC,SATPTR
\r
1345 PUSHJ PDP,WNZCLR ;CLEAR THE BUFFER
\r
1349 PUSHJ PDP,SETWNZ ;MARK UNAVAILABLE BITS AT END OF THE BLOCK
\r
1351 HLRZ TAC1,@SATPTR ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK
\r
1352 CAMGE TAC1,LOWSWP ;IS ENTIRE BLOCK WITHIN SWAPPING AREA?
\r
1353 JRST REFST2 ;NO, JUMP AHEAD
\r
1354 MOVEI TAC1,NUMBIT ;YES, MARK IT ALL OFF LIMITS
\r
1357 JRST REFST7 ;HAVING SET ALL BITS, NO FURTHER TESTING IS NEEDED,
\r
1359 REFST2: MOVN TAC,TAC1
\r
1361 SUB TAC1,LOWSWP ;IS ANY OF SWAPPING AREA WITHIN THIS SAT BLOCK?
\r
1362 JUMPLE TAC1,REFST3 ;NO, JUMP AHEAD
\r
1363 ADD TAC,LOWSWP ;YES, MARK SWAPPING AREA AS UNAVAILABLE.
\r
1366 REFST3: HLRZ TAC1,@SATPTR ;GET FIRST LOGICAL BLOCK NUMBER IN THIS SAT BLOCK.
\r
1367 JUMPN TAC1,RFST3A ;ONLY FOR FIRST SAT BLOCK--
\r
1368 HRLZI TAC,400000 ;MARK LOGICAL BLOCK 0 AS BEING IN USE.
\r
1370 RFST3A: HRRZI TAC,STATBK
\r
1371 CAIL TAC,(TAC1) ;IS THE VITAL STATISTICS BLOCK WITHIN
\r
1372 CAIL TAC,NUMBLK(TAC1) ; THE RANGE OF THIS SAT BLOCK ?
\r
1373 JRST REFST4 ;NO, JUMP AHEAD
\r
1375 MOVEI TAC1,1 ;YES, MARK IT UNAVAILABLE,
\r
1378 REFST4: MOVE TAC,SATXWD ;SET UP TO LOOP THRU LOGICAL BLOCK NUMBERS FOR MFD.
\r
1379 SUB TAC,[XWD 3,1] ; MFD RETRVL INFO. SAT BLOCKS, AND SAT RETRVL INFO.
\r
1381 REFST5: PUSH PDP,TAC
\r
1384 CAIL TAC,(TAC1) ;IS THE INDICATED LOGICAL BLOCK NUMBER WITHIN
\r
1385 CAIL TAC,NUMBLK(TAC1) ; THIS PARTICULAR SAT BLOCK ?
\r
1386 JRST REFST6 ;NO, JUMP AHEAD
\r
1388 MOVEI TAC1,1 ;YES, MARK IN-USE BIT.
\r
1391 REFST6: POP PDP,TAC ;LOOP THROUGH THE WHOLE SET OF SPECIAL BLOCKS
\r
1392 AOBJN TAC,REFST5 ; WHICH MUST BE MARKED UNAVAILABLE.
\r
1394 REFST7: MOVE TAC,[XWD -200,WNZBUF]
\r
1395 PUSHJ PDP,CHKSUM ;COMPUTE CHECKSUM
\r
1397 HRRZM TAC1,1(TAC) ;STORE IT TEMPORARILY IN THE SATENT TABLE.
\r
1399 HRRZ TAC,(PDP) ;LOGICAL BLOCK NUMBER TO BE WRITTEN
\r
1400 PUSHJ PDP,WNZWR ;WRITE THIS SAT BLOCK ONTO THE DISK
\r
1401 JRST REFER1 ;ERROR
\r
1404 AOBJN TAC,.+2 ;LAST SAT BLOCK WRITTEN ?
\r
1406 JRST REFSRF ;YES, GO WRITE SAT RETRIEVAL INFORMATION.
\r
1408 PUSH PDP,TAC ;NO, ADVANCE SATPTR AND LOOP
\r
1409 MOVE TAC,SATPTR ; BACK TO DO NEXT SAT BLOCK.
\r
1413 ;FINALLY, WRITE OUT THE RETRIEVAL INFORMATION FOR THE FILE *SAT*.SYS
\r
1415 REFSRF: PUSHJ PDP,WNZCLR ;CLEAR THE BUFFER
\r
1416 MOVE TAC,[SIXBIT /*SAT*/]
\r
1417 MOVEM TAC,WNZBUF ;STORE FILE NAME
\r
1419 HLL TAC,[SIXBIT /SYS/]
\r
1420 MOVEM TAC,WNZBUF+1 ;STORE EXTENSION AND DATE
\r
1421 HRLZI TAC,555000 ;PROTECTION CODE (UNTOUCHABLE FILE ! )
\r
1422 PUSHJ PDP,MDTMOT ;FILL IN TIME, DATE AND MOTE
\r
1423 MOVEM TAC,WNZBUF+2
\r
1424 HLLZ TAC,SATXWD ;COMPUTE NEGATIVE WORD COUNT
\r
1426 HRRI TAC,1 ;PROGRAMMER NUMBER=1
\r
1427 MOVEM TAC,WNZBUF+3
\r
1430 MOVEI TAC,SATENT ;PREPARE TO STORE POINTERS TO ALL THE SAT BLOCKS.
\r
1434 REFSRL: HRRZ AC1,TAC1 ;GET LOGICAL BLOCK NUMBER OF SAT BLOCK.
\r
1435 HRL AC1,1(TAC) ;RETRIEVE THE CORRESPONDING CHECK-SUM.
\r
1436 MOVEM AC1,WNZBUF+4(AC2) ;STORE A POINTER WORD IN THE BUFFER.
\r
1437 MOVSI AC1,400000 ;RESTORE SATENT ENTRY TO CORRECT INITIAL VALUE.
\r
1441 AOBJN TAC1,REFSRL ;IS THAT ALL THE POINTERS ? IF NOT, LOOP BACK.
\r
1443 MOVE TAC,MFDBLK ;YES.
\r
1444 ADDI TAC,1(AC2) ;NOW COMPUTE LOGICAL BLOCK NUMBER OF THIS SAT
\r
1445 MOVEM TAC,WNZBUF+177 ; RETRIEVAL INFORMATION, AND STORE IT IN
\r
1446 ; THE LAST WORD OF THE BLOCK (THIS IS
\r
1447 ; REQUIRED FORMAT OF ALL RETRVL INFO).
\r
1449 PUSHJ PDP,WNZWR ;WRITE THE *SAT*.SYS RETRVL INFO ONTO THE DISK.
\r
1450 JRST REFERR ;ERROR
\r
1454 JRST CPOPJ1 ;***EXIT FROM PDP-10 DISK REFRESHER.***.........
\r
1456 ;ROUTINE TO WRITE THE FIXED BLOCK OF VITAL STATISTICS ONTO THE DISK.
\r
1459 WRSTAT: PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER
\r
1460 MOVE TAC,[XWD -WRSTSZ,0]
\r
1461 WRSTA1: MOVE TAC1,@WRSTA9(TAC) ;STORE KEY QUANTITIES IN THE OUTPUT BUFFER
\r
1462 MOVEM TAC1,WNZBUF(TAC)
\r
1465 MOVE TAC,[SIXBIT/STATBK/] ;STORE AN IDENTIFIER NEAR THE
\r
1466 MOVEM TAC,WNZBUF+^D126 ; END OF THE VITAL STATISTICS BLOCK.
\r
1469 PUSHJ PDP,WNZWR ;WRITE THIS VITAL STATISTICS BLOCK ONTO THE DISK.
\r
1470 JRST WRSTA2 ;WRITE ERROR
\r
1471 JRST CPOPJ1 ;GOOD WRITE. ***SUBROUTINE EXIT***...........
\r
1474 WRSTA2: MOVEI TAC,WRSTM1
\r
1475 PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE IF THIS VITAL WRITE FAILS.
\r
1477 POPJ PDP, ;THEN ALSO GIVE AN ERROR RETURN FOR FURTHER ACTION.
\r
1479 WRSTM1: ASCIZ /CANNOT WRITE VITAL STATISTICS BLOCK ON DISK. HELP!!
\r
1483 ;TABLE OF POINTERS TO THE VITAL STATISTICS THAT ARE STORED IN "STATBK" ON THE DISK.
\r
1485 WRSTA9: XWD ,MFDBLK ;LOGICAL BLOCK NUMBER OF MFD RETRIEVAL INFORMATION
\r
1486 XWD ,SATXWD ;LH = - NUMBER OF SAT BLOCKS ACTUALLY IN EXISTENCE.
\r
1487 ;RH = LOGICAL BLOCK NUMBER OF FIRST SAT BLOCK
\r
1488 XWD ,LBHIGH ;HIGHEST LEGAL LOGICAL BLOCK NUMBER ON DISK(S)
\r
1489 XWD ,LOWSWP ;LOWEST LOGICAL BLOCK NUMBER ALLOCATED FOR SWAPPING
\r
1490 XWD ,K4SWAP ;NUMBER OF 1K BLOCKS OF DISK SPACE FOR SWAPPING
\r
1492 XWD ,MAXSWP ;MAXIMUM NUMBER OF THOSE 1K BLOCKS ACTUALLY
\r
1493 ; USED SINCE THE DISK WAS LAST REFRESHED.
\r
1496 XWD 0,LOWSWP ;LOWSWP DOES DOUBLE DUMMY DUTY IN
\r
1497 ; NON-SWAPPING SYSTEM
\r
1502 ;ROUTINE TO READ IN THE FIXED BLOCK OF "VITAL STATISTICS" FROM
\r
1503 ; THE DISK AND DISTRUBUTE THEM TO THE APPROPRIATE CORE LOCATIONS.
\r
1506 RDSTAT: MOVEI TAC,STATBK
\r
1507 PUSHJ PDP,WNZRD ;READ IN THE VITAL STATISTICS BLOCK.
\r
1508 JRST RDSTA2 ;ERROR
\r
1509 MOVE TAC,WNZBUF+^D126 ;CHECK THE IDENTIFIER TO VERIFY THAT
\r
1510 CAME TAC,[SIXBIT /STATBK/] ; THE CORRECT BLOCK WAS READ.
\r
1511 JRST RDSTA2 ;ERROR, STATISTICS BLOCK APPARENTLY WAS CLOBBERED.
\r
1513 MOVE TAC,[XWD -WRSTSZ,0] ;STORE AWAY THESE IMPORTANT PARAMETERS
\r
1514 RDSTA1: MOVE TAC1,WNZBUF(TAC) ; UNDER CONTROL OF A TABLE IN THE "WRSTAT"
\r
1515 MOVEM TAC1,@WRSTA9(TAC) ; ROUTINE WHICH WRITES OUT THE VITAL
\r
1516 AOBJN TAC,RDSTA1 ; STATISTICS BLOCK ONTO THE DISK.
\r
1518 POPJ PDP, ;***SUBROUTINE EXIT***........
\r
1521 RDSTA2: MOVEI TAC,RDSTM1
\r
1522 ;PRINT ERROR MESSAGE IF THE VITAL
\r
1523 PUSHJ PDP,ICONM ; STATISTICS BLOCK CANNOT BE READ
\r
1525 PUSHJ PDP,REF ;GO THRU THE REFRESH DIALOGUE IN "ONCE".
\r
1526 JRST RDSTAT ;NOW TRY AGAIN.
\r
1528 RDSTM1: ASCIZ /VITAL DISK STATISTICS LOST, SUGGEST REFRESHING!
\r
1532 ;ROUTINE TO DETERMINE THE CURRENT SYSTEM'S DISK CAPACITY. I.E., THE NUMBER OF
\r
1533 ; DISKS ATTACHED TO THE RC-10 DISK SYNCHRONIZER TODAY.
\r
1535 ;ON EXIT FROM THIS SUBROUTINE
\r
1536 ; C(TAC) = HIGHEST LOGICAL DISK BLOCK NUMBER NOW EXTANT.
\r
1538 CAPCTY: MOVEI TAC,NUMSAT
\r
1539 IMULI TAC,NUMBLK ;COMPUTE AND SAVE MAXIMUM POSSIBLE CAPACITY.
\r
1540 PUSH PDP,LBHIGH ;SAVE EXISTING VALUE OF HIGHEST LEGAL BLOCK NUMBER.
\r
1541 MOVEM TAC,LBHIGH ;TEMPORARILY CHANGE THIS VALYUE SO THAT THE VALIDITY
\r
1542 ; CHECK IN "DSKINT" WILL NOT FAIL SPURIOUSLY.
\r
1545 CPCT1: PUSH PDP,TAC
\r
1546 PUSHJ PDP,WNZRD ;ATTEMPT TO READ FIRST BLOK OF EACH SUCCESSIVE DISK.,
\r
1550 CAMGE TAC,LBHIGH ;ALREADY TRIED ALL DISKS (MAXIMUM CAPACITY) ?
\r
1551 JRST CPCT1 ;NO, GO TRY THE NEXT ONE.
\r
1553 CPCT2: SUBI TAC,1
\r
1554 POP PDP,LBHIGH ;RESTORE PREVIOUSLY EXISTING VALUE OF THE HIGHEST
\r
1555 ; LEGAL LOGICAL DISK BLOCK NUMBER.
\r
1556 POPJ PDP, ;***SUBROUTINE EXIT***.......
\r
1559 CPCT3: POP PDP,TAC
\r
1560 CONSZ DSK,NRDY ;NON-EXISTENT DISK?
\r
1561 JUMPN TAC,CPCT2 ;YES, THE LIMIT OF DISK STORAGE HAS BEEN FOUND.
\r
1562 ; HOWEVER, DISK 0 MUST ALWAYS BE PRESENT.
\r
1564 MOVEI TAC,CPCTM1 ;NO, SOME OTHER TYPE OF READ ERROR.
\r
1566 PUSHJ PDP,OPOUT ;PRINT ERROR MESSAGE
\r
1568 JRST CAPCTY ;TRY AGAIN
\r
1569 CPCTM1: ASCIZ /DISK READ ERROR DURING CAPACITY SEARCH INITIALIZATION
\r
1573 ;ROUTINE TO ASSURE THAT THE STATUS OF THE WRITE-LOCK SWITCHES ON THE
\r
1574 ; DISK MAINTENANCE PANEL IS SUCH THAT THEY ARE PROTECTING "LESS THAN 0000".
\r
1576 ;THIS ROUTINE LOOPS PRINTING AN ERROR MESSAGE UNTIL THE SWITCHES ARE O.K.
\r
1578 WRITLK: CONI DSK,TAC
\r
1579 TLNN TAC,13777 ;BOUNDARY ZERO AND MAINTENANCE-SEGMENT OFF ?
\r
1580 TLNN TAC,<PLGSW>B53 ;YES, IS ROTARY SWITCH SET
\r
1581 ; TO EITHER X UNDER OR OVER(AS OPPOSED
\r
1582 ; TO UNDER OR X OVER)
\r
1583 JRST WRLK8 ;NO. GO PRINT ERROR MESSAGE AND LOOP.
\r
1585 ;AN UNFORTUNATE HARDWARE OVERSIGHT MAKES IT IMPOSSIBLE TO SENSE THE DIFFERENCE
\r
1586 ; BETWEEN "PROTECT LESS THAN" AND "PROTECT LESS THAN OR EQUAL". THEREFORE
\r
1587 ; THIS ROUTINE MUST ACTUALLY TRY WRITING ON TRACK 0000.
\r
1588 MOVE TAC,[252525252525]
\r
1590 MOVE TAC,[XWD WNZBUF,WNZBUF+1]
\r
1591 BLT TAC,WNZBUF+177
\r
1593 PUSHJ PDP,WNZWR ;WRITE PATTERN IN BLOCK 0.
\r
1595 POPJ PDP, ;***GOOD EXIT FROM WRITLK SUBROUTINE***.........
\r
1598 WRLK2: MOVEI TAC,WRLKM1
\r
1599 CONSZ DSK,WRPE ;WRITE-PROTECTION ERROR ?
\r
1600 ;YES, PROTECT SWITCH ERRONEOUSLY SET ON "LESS THAN
\r
1601 ; OR EQUAL" INSTEAD OF "LESS THAN".
\r
1602 ;NO, SOME OTHER FAILURE DURING THE WRITE OF BLOCK 0.
\r
1603 WRLK8: MOVEI TAC,WRLKM2 ;WRITE-LOCK SWITCHES SET INCORRECTLY.
\r
1604 WRLK9: PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE
\r
1606 JRST WRITLK ;GO TRY AGAIN
\r
1608 WRLKM1: ASCIZ /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK.
\r
1611 WRLKM2: ASCIZ /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND
\r
1612 DISK WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN",
\r
1617 ;DISK READING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.
\r
1618 ; AVOIDS USING THE MONITOR OUFUFS AND INTERRUPT STRUCTURE.
\r
1620 ;ON ENTRY TO THIS SUBROUTINE, TAG CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK
\r
1621 ; BLOCK WHICH IS TO BE READ INTO THE ONCE-ONLY DISK BUFFER AREA.
\r
1623 WNZRD: CONO DSK,DATERR!DEVERR!SETERR!RESETB ;CLEAR THE DISK SYNCHRONIZER
\r
1624 CONSZ DSK,BUSYBT!DONEFLG
\r
1625 JRST WNZRD ;DON'T PROCEED UNLESS THE CLEAR WORKED.
\r
1627 PUSH PDP,DSKFDG ;SAVE THIS INSTRUCTION FROM "DSKINT"
\r
1628 MOVE TAC1,[HRRZI TAC,0] ;NOW TAMPER WITH THAT SAVED LOCATION SO
\r
1629 MOVEM TAC1,DSKFDG ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.
\r
1630 MOVE TAC1,[XWD -200,WNZBUF-1]
\r
1631 PUSHJ PDP,DFRED ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.
\r
1632 WNZRDC: POP PDP,DSKFDG ;RESTORE THE MOLESTED INSTRUCTION IN DSKINT.
\r
1634 PUSHJ PDP,WNZWAT ;WAIT UNTIL THE READ IS FINISHED.
\r
1636 CONSZ DSK,DATERR!DEVERR!SETERR ;ANY ERRORS ?
\r
1637 JRST WNZRDX ;YES, GIVE ERROR RETURN.
\r
1638 MOVE TAC1,RCXCCW ;NO, BUT CHECK THAT THE FINAL VALUE OF THE
\r
1639 CAMN TAC1,RCXFIN ; CHANNEL CONTROL WORD WAS AS EXCPECTED ALSO.
\r
1640 AOS (PDP) ;***GOOD RETURN***........
\r
1641 WNZRDX: POPJ PDP, ;ERROR RETURN,
\r
1649 ;DISK WRITING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.
\r
1650 ; AVOIDS USING THE MONITOR QUEUES AND INTERRUPT STRUCTURE.
\r
1652 ;ON ENTRY TO THIS SUBROUTINE, TAC CONTAINS THE LOGICAL BLOCK NUMBER OF THE DISK
\r
1653 ; BLOCK WHICH IS TO BE WRITTEN ONTO THE DISK FROM THE ONCE-ONLY DISK BUFFER AREA.
\r
1655 WNZWR: CONO DSK,DATERR!DEVERR!SETERR!RESETB ;CLEAR THE DISK SYNCHRONIZER.
\r
1656 CONSZ DSK,BUSYBT!DONEFLG
\r
1657 JRST WNZWR ;DON'T PROCEED UNLESS THAE CLEAR WORKED.
\r
1659 MOVEM TAC,LBSAVE ;SAVE LOGICAL BLOCK NUMBER IN CASE AN ERROR RETURN
\r
1660 ; MUST BE TAKEN FROM THE "REFRESH" SUBROUTINE.
\r
1661 PUSH PDP,DSKFDG ;SAVE THIS ISNTRUCTION FROM "DSKINT".
\r
1662 MOVE TAC1,[HRRZI TAC,0] ;NOW TAMPER WITH THAT SAVED LOCATION SO
\r
1663 MOVEM TAC1,DSKFDG ; THAT DSKINT WILL NOT ENABLE ANY INTERRUPT CHANNEL.
\r
1664 MOVE TAC1,[XWD -200,WNZBUF-1]
\r
1665 PUSHJ PDP,DFWRT ;CALL DEVICE-DEPENDENT ROUTINE IN "DSKINT" DIRECTLY.
\r
1667 JRST WNZRDC ;THE REMAINDER OF THE WRITE ROUTINE IS IDENTICAL
\r
1668 ; TO THE READ ROUTINE
\r
1670 \f;SUBROUTINE TO WATCH FOR THE DONE FLAG TO COME ON AND TIME OUT IF
\r
1671 ; IT DOESN'T COME UP SOON ENOUGH (SAY 5 SEC OR SO).
\r
1673 WNZWAT: MOVE TAC,[^D1000000] ;AT MOST ONE MILLION TIMES THRU THE CONSZ-SOJG LOOP
\r
1674 WNZWTL: CONSZ DSK,DONEFLG ;DONE FLAG ON YET ?
\r
1675 POPJ PDP, ;YES, GOOD EXIT.......
\r
1676 SOJG TAC,WNZWTL ;NO, TIMED OUT YET ?
\r
1677 ;YES, PRINT "DISK HUNG" ERROR MESSAGE.
\r
1681 POP PDP,TAC ;SKIP UP A SUBROUTINE LEVEL, AND GIVE AN
\r
1682 POPJ PDP, ; ERROR RETURN FROM WNZRD OR WNZWR.......
\r
1683 WATMSG: ASCIZ /DISK HUNG.
\r
1687 ;SUBROUTINE TO SET SPECIFIED BITS IN A SAT BLOCK WHILE FORMING IT IN WNZBUF
\r
1689 ;ENTRY CONDITIONS -- C(TAC) = FIRST BIT NUMBER TO SET (NUMBERED BEGINNING AT 0)
\r
1690 ; C(TAC1) = NUMBER OF BITS TO SET
\r
1692 SETWNZ: MOVE AC1,TAC1
\r
1697 STWNZ1: ORM AC2,WNZBUF(TAC)
\r
1701 STWNZ2: SOJN AC1,STWNZ1
\r
1702 POPJ PDP, ;SUBROUTINE EXIT...........
\r
1705 ;SUBROUTINE TO CLEAR THE ONCE-ONLY OUTPUT BUFFER, WNZBUF
\r
1706 WNZCLR: SETZM WNZBUF
\r
1707 MOVE TAC,[XWD WNZBUF,WNZBUF+1]
\r
1708 BLT TAC,WNZBUF+177
\r
1709 POPJ PDP, ;SUBROUTINE EXIT...........
\r
1711 ;SUBROUTINE TO MASK THE TIME, DATE, AND DATA MODE (=14 FOR BINARY MODE0 INTO ACCUMU-
\r
1712 ; LATOR TAC IN THE FORMAT USED IN WORD 3 OF A DISK RETRIEVAL INFORMATION BLOCK.
\r
1714 MDTMOT: PUSH PDP,TAC
\r
1715 MOVE TAC,TIME ;GET TIME IN JIFFIES.
\r
1716 IDIVI TAC,JIFMIN ;CONVERT TO MINUTES
\r
1718 IOR TAC,THSDAT ;TODAY'S DATE
\r
1719 TLO TAC,14B<^D12*^D18> ;BINARY MODE
\r
1722 POPJ PDP, ;SUBROUTINE EXIT............
\r
1726 ;ERROR EXIT FROM "REFRESH" WHEN A BAD WRITE ON THE DISK OCCURS DURING REFREHSING.
\r
1728 REFER1: POP PDP,TAC ;CORRECT PDP IF EXTRA PUSH HAD OCCURRED.
\r
1729 REFERR: MOVE TAC,LBSAVE ;GET BLOCK NUMBER FOR THE ERROR MESSAGE AT REF4.
\r
1730 POPJ PDP, ;THIS NO-SKIP RETURN RE-ENTERS THE REFRESH DIALOGUE.
\r
1734 ;MISCELLANEOUS STORAGE SPACE USED BY THE PDP-10 DISK REFRESHING ROUTINE.
\r
1739 WNZBUF: BLOCK 200 ;BUFFER FOR READING AND WRITING DISK
\r
1740 ; BLOCKS DURING THE ONCE-ONLY CODE.
\r
1742 LOWSWP: 0 ;LOWEST LOGICAL BLOCK FOR SWAPPING
\r
1744 > ;END OF REFRESH PROCEDURE FOR THE RD10 DISK.
\r
1746 > ;CLOSE AN EVEN EARLIER FTDISK CONDITIONAL.
\r
1747 \fINTERNAL FTCHECK
\r
1750 EXTERNAL CHKREG,CHKEND,CHECK,MONPTR,MONSUM
\r
1752 CK: MOVEI TAC,CHKBEG
\r
1756 PUSHJ PDP,CHECK ;COMPUTE AND STORE CHECKSUM OF THE PURE AREA OF
\r
1757 MOVEM TAC1,MONSUM ; THE TIME-SHARING MONITOR.
\r