1 TITLE DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING
\r
2 SUBTTL L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION
\r
5 ;SUBROUTINE FOR DIRECTORY SEARCH
\r
6 ;PROG CONTAINS ACTUAL START OF PROGRAM
\r
7 ;DEVDAT CONTAINS ACTUAL START OF DVDB
\r
8 ;UUO CONTAINS RELATIVE ADDRESS OF DIRECTORY ENTRY IN USER AREA
\r
9 ;FORMAT PUSHJ PDP, UDIRSH
\r
10 ; JRST X ;RETURN IF EMPTY ENTRY FOUND
\r
11 ; NORMAL RETURN WHEN ENTRY IS FOUND
\r
12 INTERNAL ULOOK, UENTER
\r
13 EXTERNAL UXIT,PUUOAC,IOIERR,DIRERR,ADRCK,CPOPJ1,THSDAT
\r
15 UDIRIN=100 ;DIRECTORY IN
\r
16 UDIREN=200 ;DIRECTORY ENTERED INTO
\r
17 UNWFRE=400 ;FREE BLCOK POINTER CHANGED
\r
18 ULINKF=1000 ;LAST OUTPUT BLOCK LINKED TO STORAGE
\r
22 UDIRSH: TRNE UUO,777760 ;IS BLOCK IN UUO ACS?
\r
23 PUSHJ PDP,ADRCK ;NO. CHECK ADDRESS
\r
27 HRRZ UX1, PROG ;COPY ADR OF START OF PROGRAM
\r
28 ADDM UX1, UUO ;ACTUAL START OF DIR. IN USER
\r
29 MOVEI UX1,@UDIR(DEVDAT) ;ACTUAL POINTER TO DIRECTORY
\r
30 HRRZ UX2, 0(UX1) ;RELATIVE ADDR OF 1ST ENTRY I
\r
32 HRLI UX1, -^D129+UDIRLN(UX2) ;ENTRY COUNTER
\r
33 ADDM UX2, UX1 ;START OF 1ST ENTRY IN DIRECT
\r
35 CAILE UX2,174 ;IS THE REL ADR OF 1ST ENTRY INSIDE BUF
\r
37 UDIR2: SKIPN UX2, 0 (UX1) ;FIRST WORD OF ENTRY
\r
38 POPJ PDP, ;SPACES FOUND
\r
39 CAMN UX2, 0(UUO) ;CHECK IF = TO USER AREA
\r
40 JRST UDIR4 ;CHECK 2ND WORD
\r
41 UDIR3: ADD UX1, UDIRK1
\r
43 POP PDP, UX1 ;TAKE PREVIOUS EXIT FROM TABL
\r
44 JRST UXIT ;TABLE FULL
\r
45 UDIR4: HLRZ UX2, 1 (UUO) ;2ND WORD IN USER ARE
\r
47 HLRZ UX3, 1 (UX1) ;2ND WORD OF DIRECTORY AREA
\r
49 JRST UDIR3 ;CHECK MORE ENTRIES
\r
50 JRST CPOPJ1 ;MATCH, SKIP RETURN
\r
52 UDIRK1: XWD UDIRLN, UDIRLN
\r
54 ;SUBROUTINE FOR DIRECTORY LOOKUP
\r
56 ;FORMAT PUSHJ PDP, UDIRLU ;VIA UUO
\r
57 ; JRST X ;ENTRY NOT IN TABLE
\r
59 ULOOK: PUSHJ PDP, UDIRSH
\r
62 HRLM UX3, DEVIAD (DEVDAT)
\r
63 ULOOK1: HRLI UX2, 0 (UX1) ;FROM DIRECTORY
\r
64 HRRI UX2, 0 (UUO) ;TO USER
\r
65 BLT UX2, UDIRLN-1(UUO)
\r
66 LDB UX2,[POINT 12,2(UX1),35] ;GET DATE USER(ENTER)EXEC(LOO
\r
67 JUMPN UX2,.+3 ;IS IT 0?
\r
68 MOVE UX2,THSDAT ;YES, USE CURRENT DATE
\r
69 DPB UX2,[POINT 12,2(UUO),35] ;SET EXEC
\r
73 ;SUBROUTINE TO ENTER NEW OR CHANGE OLD DIRECTORY ENTRY
\r
74 ;FORMAT PUSHJ PDP, UDIRCH
\r
75 ; JRST X ;NO ROOM IN TABLE
\r
77 UENTER: PUSHJ PDP, UDIRSH
\r
79 AOS UX3, UFREE (DEVDAT)
\r
81 HRLM UX3, DEVOAD (DEVDAT)
\r
83 TLO IOS, UDIREN+UNWFRE+ULINKF
\r
84 MOVEM IOS, DEVIOS(DEVDAT)
\r
87 ;CREATE A CLEAN TAPE AND DIRECTORY
\r
92 UTPCLR: LDB TAC,PUUOAC
\r
93 MOVE DEVDAT,USRJDA(TAC)
\r
95 HLRZ TAC,DEVNAM(DEVDAT)
\r
98 MOVE IOS,DEVIOS(DEVDAT)
\r
100 TLO IOS,UDIRIN+UDIREN+UNWFRE
\r
101 IFE DTSIZ,< MOVEM DEVDAT,DIREC>
\r
102 ;THIS FOR SINGLE DIRECTORY ONLY
\r
103 MOVE TAC,UDIR(DEVDAT)
\r
104 MOVE TAC1,[XWD 1,5]
\r
113 MOVEM TAC, UFREE (DEVDAT)
\r
114 MOVEM IOS, DEVIOS(DEVDAT)
\r
121 SUBTTL L. HANTMAN PART 1 7-13-65
\r
122 UREV=10000 ;DT REVERSE BIT
\r
123 DTSIZ=1 ;1 FOR ONE BUFFER PER TAPE UNIT
\r
125 UBLK=1 ;NUMBER OF BLOCKS/BLOCK
\r
126 UCHN=1 ;CHANNEL OF DATA CONTROL = 1, LOC 42
\r
127 UCHA=42 ;DATA CONTROL INTERRUPT POSITION
\r
128 EXTERNAL UXIT,ADVBFF,ADVBFE,IOSET,OUT,WAIT1,WSYNC
\r
129 EXTERNAL PIOMOD,PUNIT,UFREE,UDIR,ADRERR,JOBPFI
\r
132 DACI=4010 ;DC INPUT DT
\r
133 DACO=3410 ;DC OUTPUT DT
\r
134 SL=220000 ;DT TURN ON. SELECT
\r
135 DTR=3000 ;DT TURN AROUND DELAY
\r
136 DT=2000 ;DT START/STOP DELAY
\r
139 RB=200 ;DT READ BLOCK NOS.
\r
140 VEOT=2 ;EOT FLAG BIT
\r
141 GR=10000 ;DT REVERSE BIT
\r
142 JDE=40000 ;JOB DONE ENABLE
\r
143 EE=100000 ;ENABLE END FLAG
\r
144 URDIR=2000 ;READING DIRECTORY
\r
146 UTDSP: JRST UTPREL ;RELEASE
\r
150 JRST UENTER ;ENTER IN DIRECTORY
\r
151 JRST ULOOK ;LOOKUP IN DIRECTORY
\r
152 JRST UDMPO ;DUMPOUT
\r
154 JRST SETO ;SET OUTPUT BLOCK NO.
\r
155 JRST SETI ;SET INPUT BLOCK NO.
\r
156 JRST GETF ;GET FREE BLOCK
\r
158 UOUT: PUSHJ PDP, UINTER ;CHECK INTERLOCK
\r
159 TLO IOS, IO ;WRITING
\r
160 HRRZ TAC,DEVOAD(DEVDAT)
\r
161 ADD TAC, PROG ;ACTUAL BUFFER ADDRESS
\r
162 HLRZ TAC1, DEVOAD(DEVDAT) ;BLOCK TO WRITE
\r
164 JRST UOUT4 ;COPY DIRECTORY
\r
165 HLRZ TAC1, 1(TAC) ;BLOCK TIE
\r
166 TLZ IOS, ULINKF ;NOT LINKED TO FREE STORAGE
\r
167 JUMPN TAC1, UOUT1 ;USE BALOCK NUMBER INDICATED
\r
168 TLZE IOS, IOBEG ;GET FREE STORAGE BLOCK
\r
170 TLO IOS,UNWFRE+ULINKF ;LINKED TO FREE STORAGE
\r
171 MOVEM IOS, DEVIOS (DEVDAT)
\r
172 AOS TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK
\r
173 UOUT1: CAIN TAC1,1 ;IF 1, THIS IS LAST BLOCK
\r
174 SETZ TAC1, ;LAST BLOCK TIE = 0
\r
175 HRLM TAC1,1(TAC) ;BLOCK
\r
176 HRRZM TAC,UBUF ;ACTUAL LOCATION OF DATA
\r
177 HLR TAC,DEVOAD(DEVDAT)
\r
178 HRLM TAC1, DEVOAD(DEVDAT) ;NEXT BLOCK
\r
180 ;RETURN FROM WRITING 1 BLOCK
\r
182 UOUT2: MOVE TAC,DEVOAD(DEVDAT)
\r
183 HRLI TAC,PROG ;PROG, BUFFER ADDRESS
\r
185 ANDCAM TAC1,@TAC ;SET USE BIT IN BUFFER
\r
186 HLRZ TAC1,DEVOAD(DEVDAT) ;BLOCK TIE
\r
187 JUMPE TAC1,UOUT3 ;WAS BLOCK WRITTEN THE LAST 0
\r
188 HRR TAC,@TAC ;PROG, NEXT BUFFER ADDRESS
\r
189 HRRM TAC,DEVOAD(DEVDAT) ;NEXT BUFFER
\r
190 TRNE IOS, IOCON ;CONTINUOUS?
\r
191 JRST UOUT3 ;STOP TAPE AND DISMISS
\r
192 SKIPGE @TAC ;IS NEXT BUFFER EMPTY?
\r
193 JRST UOUT+1 ;PROCESS NEXT BLOCK
\r
194 UOUT3: POP PDP, TAC ;REDUCE TABLE
\r
195 JRST DTC1 ;STOP TAPE AND DISMISS
\r
197 ;COPY DIRECTORY WHEN WRITING BLOCK 1
\r
198 UOUT4: HRLI TAC1,1(TAC) ;BUFFER ADDRESS, FROM
\r
199 HRR TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO
\r
200 HRRZ TAC, UDIR(DEVDAT) ;DIRECTORY ADDRESS
\r
201 BLT TAC1, 177(TAC) ;MORE BUFFER AREA TO DIRECTORY
\r
202 TLO IOS, UDIRIN+UDIREN ;SET DIRECTORY BITS
\r
203 MOVE TAC1, @UDIR(DEVDAT) ;NEXT FREE BLOCK IN DIRECTORY
\r
204 HLRZM TAC1,UFREE(DEVDAT) ;PLACE IN DATA BLOCK
\r
206 ANDCAB TAC1, 0(TAC) ;CLEAR USE BIT
\r
207 HRRM TAC1, DEVOAD(DEVDAT) ;ADVANCE BUFFER POINTER
\r
211 UIN: PUSHJ PDP, UINTER ;CHECK INTERLOCK
\r
212 TLZ IOS, IO ;READING
\r
213 HRRZ TAC,DEVIAD(DEVDAT) ;UBUF:=TAC:=DEVIAD+PROG
\r
215 HLRZ TAC1, DEVIAD(DEVDAT) ;BLOCK TO READ
\r
216 CAIN TAC1, 1 ;TRYING TO READ DIRECTORY?
\r
217 JRST UIN2 ;COPY DIRECTORY
\r
219 HLRZ TAC,DEVIAD(DEVDAT) ;TAC:=C(DEVIAD LH)
\r
220 JUMPE TAC,UEND ;NEXT BLOCK=00, THEN END OF FI
\r
222 ;RETURN FROM READING ONE BLOCK
\r
224 UIN1: HRRZ TAC,DEVIAD(DEVDAT)
\r
227 HLRM TAC1,DEVIAD(DEVDAT) ;NEXT BLOCK NUMBER TO READ
\r
228 MOVE TAC,DEVIAD(DEVDAT)
\r
231 IORM TAC1,@TAC ;SET USE BIT
\r
233 HRRM TAC,DEVIAD(DEVDAT) ;NEXT BUFFER ADDRESS
\r
234 TRNE IOS, IOCON ;CONTINUOUS?
\r
236 SKIPL @TAC ;IS NEXT BUFFER FULL
\r
237 JRST UIN+1 ;PROCESS NEXT BLOCK
\r
240 UEND: TLO IOS, IOEND
\r
241 MOVEM IOS, DEVIOS(DEVDAT)
\r
242 CONSZ UTC, 20000 ;IS TAPE STOPPED?
\r
243 JRST UOUT3 ;STOP TAPE AND EXIT
\r
244 UEND2: SOSL DCREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA
\r
245 SETOM DCAVAL ;YES,SET DATA CONTROL AVAILABLE
\r
246 SOSL DTREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA
\r
247 SETOM DTAVAL ;YES,SET DECTAPE CONTROL AVAI
\r
248 TRZ IOS, IOACT ;CLEAR ACTIVE BIT
\r
249 MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE STATUS BITS
\r
252 ;COPY DIRECTORY WHEN READING BLOCK 1
\r
253 UIN2: TLZE IOS, IOBEG ;IS DIRECTORY IN
\r
254 JRST UIN4 ;READ IN DIRECTORY
\r
255 PUSHJ PDP, UEND2 ;CLR INDICATORS
\r
256 UIN3: MOVE TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK IN DATA BLOC
\r
257 HRLM TAC1, @UDIR(DEVDAT) ;PLACE IN DIRECTORY
\r
258 HRRI TAC1, 1(TAC) ;BUFFER ADDRESS, TO
\r
259 HRL TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO
\r
260 BLT TAC1, 200 (TAC) ;MOVE DIRECTORY TO BUFFER ARE
\r
262 IORB TAC1, IOUSE ;SET USE BIT
\r
263 HRRM TAC1,DEVIAD(DEVDAT) ;ADVANCE BUFFER
\r
265 UIN4: PUSHJ PDP, UBEG3
\r
267 SETI: PUSHJ PDP,WAIT1
\r
268 HRLM UUO,DEVIAD(DEVDAT) ;SET INPUT BLOCK NO.
\r
271 SETO: PUSHJ PDP,WAIT1
\r
272 PUSHJ PDP, UINTER ;WAIT FOR USE TO STOP
\r
273 PUSHJ PDP, UEND2 ;CLEAR INDICATORS
\r
274 HRLM UUO,DEVOAD(DEVDAT) ;SET OUTPUT BLOCK NO.
\r
277 GETF: PUSHJ PDP,WAIT1
\r
281 MOVEM IOS,DEVIOS(DEVDAT)
\r
282 AOS TAC, UFREE(DEVDAT) ;GET FREE BLOCK
\r
283 HRLM TAC, DEVOAD(DEVDAT)
\r
288 INTERNAL UTPCLS,UTWDR,UBEG,UTPREL
\r
290 UTWDR: IFE DTSIZ,< PUSHJ PDP,UTPREL>
\r
294 UTPCLS: TLNN IOS, ULINKF
\r
296 LDB TAC,PIOMOD ;MODE
\r
299 HLR TAC,DEVBUF(DEVDAT)
\r
301 HRR TAC, @TAC ;TAC:=BUFFER ADDRESS
\r
307 UTPREL: IFE DTSIZ,< TLNE IOS,IOBEG ;RELEASE
\r
316 IFN DTSIZ,< TLZN IOS,UDIREN+UNWFRE
\r
318 UTPRL1: PUSHJ PDP,UINTER ;IS SYSTEM AVAILABLE?
\r
319 HRR TAC,UFREE(DEVDAT)
\r
320 HRLM TAC,@UDIR(DEVDAT)
\r
321 MOVE TAC,UDIR(DEVDAT)
\r
325 MOVEM IOS,DEVIOS(DEVDAT)
\r
330 ,READ THE DIRECTORY FROM THIS DEC-TAPE
\r
332 UBEG: SKIPGE DEVMOD(DEVDAT) ;IS DIRECTORY IN CORE?
\r
336 PUSHJ PDP, UINTER ;CHECK INTERLOCK
\r
337 UBEG2: PUSH PDP, TAC ;SAVE TAC
\r
338 HRRZ TAC,UDIR(DEVDAT)
\r
341 TLO IOS,UDIRIN+URDIR
\r
343 MOVEM IOS,DEVIOS(DEVDAT)
\r
344 MOVSI TAC,DVDIRIN ;SET DIRECTORY IN CORE BIT
\r
345 IORM TAC,DEVMOD(DEVDAT)
\r
349 HLR TAC,@UDIR(DEVDAT)
\r
350 HRRZM TAC,UFREE(DEVDAT)
\r
354 UBEG3: TLNE IOS, UDIRIN
\r
358 UTBERR: PUSHJ PDP, DTC1 ;ILL. BLOCK NO.
\r
361 USETW: MOVEI TAC1, RIT
\r
363 USETR: MOVEI TAC1,READ
\r
366 JUMPLE TAC,UTBERR ;ILL. BLOCK NO.?
\r
368 JRST UTBERR ;ILL. BLOCK NO.
\r
369 LDB TAC,PUNIT ;UNIT
\r
371 ADDI TAC, DTCCHN ;DECTAPE CHANNEL
\r
372 MOVEM TAC, UNIT ;UNIT AND CHANNEL
\r
376 HRRM TAC, CONSZ1 ;FALL INTO FILL
\r
378 FILL: CONO DC,0 ;DESELECT DC
\r
379 CONO PI,2100 ;TURN ON CHANNEL 1
\r
380 MOVEM DEVDAT, USVDB ;SAVE DATA BLOCK ADDR
\r
381 MOVEM DEVDAT,UDVDAT ;UDVDAT:=DTJIOS POINTER
\r
384 MOVE TAC, [JSR DDIF] ;DATA CONTROL INTERRUPT CHANN
\r
386 MOVEM PROG,UPROG ;UPROG:=PROG
\r
387 MOVE TAC,UBUF ;BLI:=XWD-200,C(UBUF)
\r
392 CONSZ UTC, 20000 ;IS TAPE MOVING?
\r
394 MOVE TAC, UNIT ;RDDA:=RDRM:=WTDA:=WTRM:=C(UN
\r
400 ANDI TAC, 70 ;TAC HAS UNIT ONLY
\r
401 ADDI TAC, SL+DTR+RB+EE+UCHN
\r
402 TLNN IOS, UREV ;WAS REV, GO FWD
\r
403 ADDI TAC,GR ;WAS FWD, GO REV
\r
405 FILL2: CONO DC, DACI+UCHN ;SET UP DC FOR INPUT
\r
406 MOVEM IOS, DEVIOS (DEVDAT)
\r
409 ,TAPE IS ACTIVE - GIVE A COMMAND
\r
410 FILLC: CONI UTC,TAC ;UTC COMMAND: UNIT, OLD DIRE
\r
411 ANDI TAC,GR+70 ;DIRECTION PLUS UNIT
\r
412 CONO UTC,SL+RB+EE+UCHN(TAC) ;NO TIME DELAY
\r
415 F1: POINT 6,RDDA,35
\r
416 F2: POINT 6,RDRM,35
\r
417 F3: POINT 6,WTDA,35
\r
418 F4: POINT 6,WTRM,35
\r
419 ,CHANGE DIRECTIONS - GIVE NEW COMMANDS
\r
421 XORI TAC,GR ;REVERSE BIT
\r
427 ,EXAMINE BLOCK NUMBERS - DISPATCHED FROM INTERRUPT - CHAN, DC.
\r
428 DDIF: 0 ;GOING FORWARD
\r
429 MOVEM TAC,SV1 ;SV1:=TAC
\r
433 CAMN TAC,UBKN ;BLK NOT =STR
\r
434 DDIG: JRST . ;JRST READ, BIT, IFRIGHT UBK
\r
435 CONSZ UTC,10000 ;GOING BACKWARDS
\r
436 JRST .+4 ;BACKWARDS
\r
437 CAML TAC,UBKN ;BLK > STR > FORWARD
\r
440 CAMG TAC,UBKN ;BACKWARDS
\r
441 JRST RRV ;BACKWARDS
\r
442 DDIG2: CONI UTC,TAC
\r
446 DXIT1: HRRM TAC,UCHA
\r
447 DXIT: MOVE TAC,SV1 ;RESTORE TAC
\r
448 JEN @DDIF ;RE-ENABLE, DISMISS.
\r
450 ,DISPATCH FROM UCHA INITIALLY ON CORRECT BLOCK MARK
\r
451 ,SETS OP TO READ, WRITE IN FWD, REVERSE
\r
454 RDDA: CONO UTC,SL+RD+JDE+EE ;GETS UNIT NO. - RE
\r
459 WTDA: CONO UTC,SL+WD+JDE+EE ;GETS UNIT NO. - RE
\r
464 READ: CONSO UTC,10000 ;ENTRY TO SET UP READ
\r
467 RDRM: CONO UTC,SL+GR+RD+JDE+EE ;GETS UNIT NO. - RESETS TO RD
\r
471 RIT: CONSO UTC,10000 ;GOING REVERSE - ENTRY TO SET
\r
472 JRST WTDA ;WRITE FORWARD
\r
474 WTRM: CONO UTC,SL+WD+GR+JDE+EE ;GETS UNIT NO. -RESETS. TO WT
\r
479 ,DC INTERRUPT PROCESSSING TO READ/WRITE DATA IN EITHER
\r
480 ,DIRECTION, AND RE-ENABLE INTERRUP.
\r
481 ,EXIT BLOCK PROCESSING AT ENPT(WRITE), ENPTI(READ)
\r
483 RDRV: 0 ;ENTRY VIA UCHA - READ REV
\r
490 RDFW: 0 ;ENTRY VIA UCHA - READ FWD
\r
495 WTRV: 0 ;ENTRY VIA UCHA - WRITE REV
\r
502 WTFW: 0 ;ENTRY VIA UCHA - WRITE FWD
\r
507 ;END OF OUTPUT BLOCK
\r
511 ENPT2: MOVEM TAC,SV1 ;SV1:=TAC
\r
522 ,CHECK ERROR BITS DC MISSED, 0T PARITY, 1 LEG OP, TAPE END
\r
524 CONSZ DC, 10000; DATA MISSED
\r
528 ,SAVE STATE OF UTS, UTC, DC, TURN OFF DC, UTC, +1@ERRTAL,+1@UERR
\r
536 ;INTERRUPT FROM DATA FLAG AFER BLKO HAS COUNTED OUT
\r
538 CONO PI, 1100 ;TURN DC CHANNEL OFF
\r
539 JEN @UOFF ;DISMISS EXTRA WRITE FLAG
\r
541 ;END OF INPUT BLOCK
\r
549 ;DETECT FIRST ERROR ONLY
\r
551 SKIPN ERRFLG ;PREVIOUSLY DETECTED ERROR!
\r
552 JSR ERROR ;STORE ERROR CONDITIONS
\r
553 JRSTF @ERROR2 ;CONTINUE LOOP
\r
555 ;END OF PART 1 DTSER2
\r
558 INTERNAL UDMP0, UDMPI
\r
561 UDMPO: TLO IOS, IO ;SET FOR OUTPUT
\r
562 PUSHJ PDP, UINTER ;CHECK INTERLOCK
\r
563 TRNN UUO, 777777 ;COMMAND ADDRESS?
\r
564 JRST UDMP2-1 ;ERROR
\r
565 MOVEI TAC, DDUMP ;RETURN WHEN BLOCK FOUND
\r
566 UDMP0: MOVE TAC1, [JSR DMPADV] ;BLKI OR BLKO RETURN, COMMANDS
\r
568 ;COMMON ROUTINE FOR ALL DUMP MODES, START SEARCH
\r
569 UDMP1: HRRM TAC,DDIG ;SEARCH RETURN
\r
570 MOVEM TAC1, UCHA+1 ;INTERRUPT RETURN
\r
571 MOVE TAC, [JSR DDIF]
\r
572 MOVEM TAC, UCHA ;DATA CONTROL CHANNEL
\r
573 HLRZ TAC, DEVOAD (DEVDAT) ;BLOCK NUMBER
\r
574 TLNN IOS, IO ;WRITING?
\r
575 HLRZ TAC, DEVIAD(DEVDAT) ;INPUT BLOCK NUMBER
\r
576 MOVEM TAC, UBKN ;BLOCK TO LOOK FOR
\r
577 HRRZM DEVDAT, USVDB ;DATA BLOCK ADDRESS
\r
578 LDB TAC,PUNIT ;UNIT
\r
581 MOVEM TAC, UNIT ;UNIT AND DT CHANNEL
\r
583 CONO UTC, SL+DTR+RB+EE+UCHN(TAC)
\r
584 SETOM UERRCN ;SET ERROR COUNTER
\r
585 MOVEI TAC, 37 ;DO NOT CHECK FOR INCOMPLETE
\r
589 CONO DC, DACI+UCHN ;SET DATA CONTROL
\r
590 CONO PI,2100 ;INSURE CHANNEL 1 ON
\r
591 HRRZM PROG, UDMPA ;SAVE PROGRAM
\r
592 TRNN UUO, 777777 ;COMMAND ADDRESS
\r
593 POPJ PDP, 0 ;COMMAND LIST ON TAPE, INPUT
\r
594 HRRZ TAC, UUO ;GET CMD PNTR
\r
595 HRRZ TAC1, TAC ;SAVE POINTER
\r
596 UDMP1A: ADD TAC1, PROG ;GET ACTUAL POINTER
\r
597 HRRZM TAC1, UDMP ;STORE WORKING POINTER
\r
599 ;CHECK ENTIRE COMMAND LIST FOR VALIDITY
\r
600 UDMP1B: SKIPN TAC1, @UDMP ;GET COMMAND
\r
601 JRST UDMP1C ;END OF COMMAND LIST
\r
602 JUMPG TAC1, UDMP1A ;CHANGE COMMAND SEQUENCE
\r
603 HLREM TAC1, SVCNTR ;SAVE -N
\r
604 HRRZS TAC1 ;GET ADDRESS
\r
605 CAIGE TAC1, JOBPFI ;IS IT ABOVE IO PROT. AREA
\r
606 JRST ADRERR ;NO. ADDRESS CHECK ERROR
\r
607 SUB TAC1, SVCNTR ;GET AREA END
\r
608 CAMLE TAC1, USRREL ;LESS THEN END?
\r
609 JRST UDMP2-1 ;OUT OF BOUNDS
\r
610 AOS UDMP ;INDEX COMMAND LIST POINTER
\r
611 JRST UDMP1B ;GET NEXT COMMAND
\r
614 UDMP1C: ADD TAC, PROG ;GET ACTUAL ADDRESS
\r
615 HRRZM TAC, UDMP ;SAVE POINTER
\r
616 SKIPN TAC, @UDMP ;1ST COMMAND
\r
617 JRST UDMP2 ;NOTHING TO DO
\r
618 ADD TAC, PROG ;ACTUAL POINTER
\r
619 JUMPGE TAC, .-4 ;CHANGE COMMAND SEQUENCE
\r
620 MOVEM TAC, BLO ;SAVE I/O POINTER
\r
624 UDMP2: MOVEI TAC, -3
\r
629 ;SEARCH RETURN,OUTPUT,COMMAND LIST IN MEMORY
\r
630 DDUMP: CONSZ UTC,GR
\r
631 JRST DDIG2 ;KEEP GOING
\r
632 MOVE TAC,[BLKO DC,BLO]
\r
637 CONO UTC,SL+WD+JDE+EE(TAC)
\r
639 ;BLKI OR BLKO RETURNS, COMMAND LIST IN MEMORY
\r
642 AOSA TAC,UDMP ;POINTER
\r
644 DMPA1: HRRZM TAC, UDMP ;STORE POINTER
\r
645 SKIPN TAC, 0(TAC) ;IS WORD ZERO
\r
647 ADD TAC, UDMPA ;ADD PROGRAM
\r
648 JUMPGE TAC, DMPA1 ;CHANGE COMMAND
\r
650 DMPXT: MOVE TAC, SV1
\r
653 ;END OF COMMAND LIST, INPUT OR OUTPUT
\r
655 CONO PI, 1100 ;TURN DATA CONTROL CHANNEL OF
\r
656 CONSO UTS, 40 ;WRITING?
\r
657 CONO DC, 0 ;SHUT OFF DATA CONTROL
\r
659 ;SEARCH RETURN, INPUT COMMAND LIST ON TAPE
\r
660 DDMPI: CONSZ UTC, GR ;GOING BACKWARDS?
\r
661 JRST DDIG2 ;KEEP GOING
\r
662 MOVE TAC, [XWD -1,BLO-1]
\r
665 ;COMMON INSTRUCTIONS FOR COMMAND LIST IN MEMORY OR ON TAPE
\r
666 DDMPI2: MOVE TAC, [BLKI DC,BLO]
\r
670 CONO UTC, SL+RD+JDE+EE(TAC)
\r
673 ;INPUT COMMAND LIST ON TAPE. BLKI RETURN AFTER READING COMMAND
\r
675 SKIPL BLO ;END OF COMMAND LIST?
\r
677 MOVEM TAC, SV1 ;SAVE TAC
\r
678 MOVE TAC, BLO ;PICK UP COMMAND
\r
679 HLREM TAC, SVCNTR ;-N
\r
681 SUB TAC, SVCNTR ;END ADDRESS
\r
682 DMPRD0: CAILE TAC, 0 ;<END? MODIFIED
\r
683 JRST DMPERR ;OUT OF BOUNDS, EXIT
\r
684 MOVE TAC, UDMP ;PROG
\r
685 ADDM TAC, BLO ;TO GET ACTUAL I/O POINTER
\r
686 MOVEI TAC,DMPRDA ;NEW RETURN
\r
688 SKIPA TAC, SV1 ;RESTORE TAC
\r
692 ;INPUT COMMAND LIST ON TAPE. BLKI RETURN AFTER READING DATA
\r
694 MOVEM TAC, SV1 ;SAVE TAC
\r
695 MOVE TAC, [XWD -1,BLO-1]
\r
696 MOVEM TAC, BLO ;READ INTO BLO
\r
697 MOVEI TAC, DMPRD ;USE PREV. RETURN
\r
699 MOVE TAC, SV1 ;SAVE TAC
\r
704 TRNE UUO, 777777 ;COMMAND LIST ON TAPE
\r
705 JRST UDMPI2 ;COMMAND LIST IN CORE
\r
706 MOVE TAC, USRREL ;LENGTH OF USER AREA
\r
708 MOVEI TAC, DDMPI ;SEARCH RETURN
\r
709 MOVE TAC1, [JSR DMPRD] ;BLOCK IN RETURN
\r
711 UDMPI2: MOVEI TAC, DDMPI3 ;COMMAND LIST IN CORE
\r
713 ;SEARCH RETURN, INPUT COMMAND LIST IN MEMORY
\r
714 DDMPI3: CONSZ UTC, GR
\r
715 JRST DDIG2 ;KEEP GOING
\r
716 JRST DDMPI2 ;INPUT COMMAND LIST IN CORE
\r
717 ;JOB DONE AFTER COMMAND LIST RUNS OUT
\r
718 DMPEND: SKIPE ERRFLG
\r
720 MOVEM IOS,DEVIOS(DEVDAT)
\r
725 CONO UTC, SL+RB(TAC) ;SWITCH TO SEARCH MODE
\r
726 MOVE TAC, [JSR UDMPRB]
\r
729 ;SEARCH RETURN TO READ NEXT FREE BLOCK
\r
731 EXCH DEVDAT, USVDB ;GET DVDB
\r
736 MOVE IOS,DEVIOS(DEVDAT)
\r
737 TLNN IOS,IO ;INPUT OR OUTPUT?
\r
739 DATAI DC,UFREE(DEVDAT) ;LAST FREEBLOCK TALLY
\r
740 TLO IOS,UNWFRE ;SET FREE BLOCK CHANGED BIT
\r
741 CONO DC,0 ;TURN OFF DATA CONTROL
\r
743 CONO UTC,5000(TAC) ;STOP TAPE
\r
744 MOVE PDP,[XWD -5,SVAC+3] ;USE REST OF SCAV BLOCK
\r
754 ;ADDRESS CHECK FROM COMMAND. COMMANDS ON TAPE
\r
755 DMPERR: EXCH DEVDAT, USVDB ;GET DVDB
\r
756 MOVEI TAC, IOIMPM ;ERROR BITS
\r
757 ORM TAC, DEVIOS(DEVDAT) ;SET STATUS
\r
758 EXCH DEVDAT, USVDB ;RESTORE DEVDAT
\r
759 MOVE TAC, SV1 ;RESTORE TAC
\r
762 C11: 0 ;TEMP CONI DC
\r
763 C12: 0 ;TEMP CONI UTS
\r
764 C13: 0 ;TEMP CONI UTC
\r
765 BLO: 0 ;XWD -200 C(UBUF)
\r
766 BLI: 0 ;XWD,-200,C(UBUF+200)
\r
767 SV1: 0 ;TEMPORARY FOR TAC DURING INTERRUPT
\r
768 UNIT: 0 ;IN BITS 30-32
\r
769 UBKN: 0 ;BLOCK BEING SEARCHED FOR
\r
770 UPROG: 0 ;HOLDS PROG
\r
771 UBUF: 0 ;ABS. LOC OF DATA
\r
772 UDVDAT: 0 ;PTR TO IOS
\r
773 ERRTAL: 0 ;TOTAL NO. OF ERRORS
\r
774 ERRFLG: 0 ;-1 IF ERROR OCCURED, 0 OTHERWISSE
\r
776 UDMP: 0 ;HOLDS DUMP UUO ADDRESS
\r
777 UDMPA: 0 ;HOLDS USER PROGRAM STARTING ADDRESS
\r
780 SVCNTR: 0 ;HOLDS -N OF DUMP COMMAND WORD
\r
782 ;CHECK FRO INTERLOCK ON DECTAPE AND DATA CONTROLS
\r
783 UINTER: TRO IOS, IOACT
\r
784 MOVEM IOS, DEVIOS(DEVDAT)
\r
785 AOSE DTREQ ;IS DECTAPE CONTROL FREE?
\r
786 PUSHJ PDP, DTWAIT ;WAIT
\r
787 AOSE DCREQ ;IS DATA CONTROL FREE?
\r
788 PUSHJ PDP, DCWAIT ;WAIT
\r
791 USVDB: 0 ;SAVE DATA BLOCK ADDRESS
\r
792 USVIOS: 0 ;SAVE IOS
\r
793 UERRCN: -3 ;ERROR COUNTER
\r
798 MOVEM IOS,DEVIOS(DEVDAT)
\r
803 DTCINI: MOVEI TAC, -3 ;CLEAR ERROR COUNTER
\r
809 DTCINT: CONSO UTS, 137 ;ALL ERRORS AND JOB DONE
\r
810 JRST . ;MODIFIED BY INITIALIZATION
\r
811 CONSZ UTS,20 ;TIME FLAG
\r
812 JRST UTIME ;SET DECTAPE CONTROL AVAILABL
\r
813 CONSZ1: CONSZ UTS, 116 ;INC BLK, PARITY, ILL OP, END
\r
817 CONO DC, 0 ;TURN OFF DATA CONTROL
\r
818 MOVEM 0, SV0 ;SAVE ZERO
\r
821 ANDI 0, 230070 ;SAVE DIRECTION AND UNIT
\r
822 CONO UTC, @0 ;SWITCH TO MOVE MODE
\r
837 DTC1: MOVE TAC, USVIOS
\r
838 ANDI TAC, 10007 ;DIRECTION, CHANNEL
\r
839 ORI TAC,5000 ;TIME FLAG ENABLE
\r
840 CONO UTC, @ TAC ;STOP TAPE, AND DESELECT
\r
846 DTC1B: SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W
\r
847 SETOM DCAVAL ;YES.DATA CONTROL AVAILABLE
\r
849 DTC2: MOVEM IOS, DEVIOS(DEVDAT)
\r
855 DTCONT: MOVEI TAC1, UOUT2
\r
856 TLNN IOS, IO ;WRITING?
\r
861 ;INTERRUPT FROM TIME FLAG AFTER STOP DELAY
\r
862 UTIME: CONSO UTC,4000
\r
864 SOSL DTREQ ;DECREMENT REQUEST COUNT, IS ANYONE STI
\r
865 SETOM DTAVAL ;YES,DECTAPE CONTROL AVAILABL
\r
869 ;SET UP NECESSARY DECTAPE ACCUMULATORS
\r
870 DSETAC: MOVE DEVDAT, USVDB
\r
872 MOVE IOS, DEVIOS(DEVDAT)
\r
874 ;RE-DO DECTAPE COMMAND IF AN ERROR OCCURED
\r
878 AOS UERRCN ;NOT YET 3 ERRORS
\r
879 JRST DTRD2 ;THIRD ERROR
\r
880 SETZM ERRFLG ;CLEAR FLAG
\r
881 PUSHJ PDP, FILL ;RE-EXECUTE THE COMMAND
\r
883 DTRD2: TRO IOS, IODERR ;SET ERROR INDICATION
\r
885 PUSHJ PDP, SETIOD ;RELEASE WAIT
\r
886 JRST DTC1 ;STOP THE TAPE
\r
887 EXTERNAL DTREQ, DCREQ, DTWAIT, DCWAIT, DTCSAV,DTCRET
\r
888 EXTERNAL DTAVAL, DCAVAL, DTCCHL, UTBKER, DTCCHN, USRREL
\r
889 INTERNAL DTCINT, DTCINI, DTSIZ,UBUF
\r