7264fb46e15ab131b0f89d3ccb4f5035422fea02
[retro-software/dec/tops10/v1.19.git] / src / dtser2.mac
1 TITLE DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING\r
2 SUBTTL  L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION\r
3         DTSIZ=1\r
4 \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
14           UDIRLN=4\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
19           UX1=TAC\r
20           UX2=TAC1\r
21           UX3=DAT\r
22 UDIRSH:   TRNE UUO,777760       ;IS BLOCK IN UUO ACS?\r
23           PUSHJ PDP,ADRCK       ;NO. CHECK ADDRESS\r
24           MOVEI  TAC,3(UUO)\r
25           TLNE IOS,IOBEG\r
26           PUSHJ PDP, UBEG\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
31                                         ;DIRECTORY\r
32           HRLI UX1, -^D129+UDIRLN(UX2)  ;ENTRY COUNTER\r
33           ADDM UX2, UX1                 ;START OF 1ST ENTRY IN DIRECT\r
34           SKIPE UX2\r
35           CAILE UX2,174         ;IS THE REL ADR OF 1ST ENTRY INSIDE BUF\r
36           JRST DIRERR           ;NO\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
42           JUMPL UX1, UDIR2\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
46           JUMPE UX2, CPOPJ1\r
47           HLRZ UX3, 1 (UX1)             ;2ND WORD OF DIRECTORY AREA\r
48           CAIE UX3, 0 (UX2)\r
49           JRST UDIR3                    ;CHECK MORE ENTRIES\r
50           JRST CPOPJ1           ;MATCH, SKIP RETURN\r
51 \r
52 UDIRK1:   XWD UDIRLN, UDIRLN\r
53 \f\r
54 ;SUBROUTINE FOR DIRECTORY LOOKUP\r
55 \r
56 ;FORMAT   PUSHJ PDP, UDIRLU             ;VIA UUO\r
57 ;         JRST X                        ;ENTRY NOT IN TABLE\r
58 \r
59 ULOOK:    PUSHJ PDP, UDIRSH\r
60           JRST UXIT\r
61           HRR UX3, 1 (UX1)\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
70           AOS (PDP)\r
71           JRST UTWDR\r
72 \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
76 \r
77 UENTER:   PUSHJ PDP, UDIRSH\r
78           JRST .+1\r
79           AOS UX3, UFREE (DEVDAT)\r
80           HRRM UX3,1(UUO)\r
81           HRLM UX3, DEVOAD (DEVDAT)\r
82           EXCH UX1, UUO\r
83           TLO IOS, UDIREN+UNWFRE+ULINKF\r
84           MOVEM IOS, DEVIOS(DEVDAT)\r
85           JRST ULOOK1\r
86 \f\r
87 ;CREATE A CLEAN TAPE AND DIRECTORY\r
88 \r
89 INTERNAL UTPCLR\r
90 EXTERNAL USRJDA\r
91 \r
92 UTPCLR:   LDB TAC,PUUOAC\r
93           MOVE DEVDAT,USRJDA(TAC)\r
94           JUMPE DEVDAT,IOIERR\r
95           HLRZ TAC,DEVNAM(DEVDAT)\r
96           CAIE TAC,446441\r
97           JRST UXIT             ;NOT DTA\r
98           MOVE IOS,DEVIOS(DEVDAT)\r
99           TLZ IOS,IOBEG\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
105           MOVEM TAC1,(TAC)\r
106           HRLS TAC\r
107           AOBJN TAC,.+1\r
108           SETZM (TAC)\r
109           MOVE TAC1,TAC\r
110           AOS TAC\r
111           BLT TAC,176(TAC1)\r
112           MOVEI TAC, 1\r
113           MOVEM TAC, UFREE (DEVDAT)\r
114           MOVEM IOS, DEVIOS(DEVDAT)\r
115           PUSHJ PDP,UTPREL\r
116           JRST UXIT\r
117 \r
118 \r
119 ;END OF DTDR\r
120 \f\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
124 \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
130           ENTRY UTDSP\r
131 \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
137 RD=300                          ;DT RD\r
138 WD=700                          ;DT WR\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
145 \r
146 UTDSP:    JRST UTPREL           ;RELEASE\r
147           JRST UTPCLS           ;CLOSE\r
148           JRST UOUT             ;OUTPUT\r
149           JRST UIN              ;INPUT\r
150           JRST UENTER           ;ENTER IN DIRECTORY\r
151           JRST ULOOK            ;LOOKUP IN DIRECTORY\r
152           JRST UDMPO            ;DUMPOUT\r
153           JRST UDMPI            ;DUMPIN\r
154           JRST SETO             ;SET OUTPUT BLOCK NO.\r
155           JRST SETI             ;SET INPUT BLOCK NO.\r
156           JRST GETF             ;GET FREE BLOCK\r
157 \f\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
163           CAIN TAC1,1\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
169           PUSHJ PDP, UBEG3\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
179           JRST USETW\r
180 ;RETURN FROM WRITING 1 BLOCK\r
181 \r
182 UOUT2:    MOVE TAC,DEVOAD(DEVDAT)\r
183           HRLI TAC,PROG                 ;PROG, BUFFER ADDRESS\r
184           HRLZI TAC1,IOUSE\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
196 \f\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
205           HRLZI TAC1, IOUSE\r
206           ANDCAB TAC1, 0(TAC)           ;CLEAR USE BIT\r
207           HRRM TAC1, DEVOAD(DEVDAT)     ;ADVANCE BUFFER POINTER\r
208           JRST UEND2\r
209 ,INPUT- NON DUMP\r
210 \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
214           ADD TAC,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
218           HRRZM TAC,UBUF\r
219           HLRZ TAC,DEVIAD(DEVDAT)       ;TAC:=C(DEVIAD LH)\r
220           JUMPE TAC,UEND                ;NEXT BLOCK=00, THEN END OF FI\r
221           JRST USETR\r
222 ;RETURN FROM READING ONE BLOCK\r
223 \r
224 UIN1:     HRRZ TAC,DEVIAD(DEVDAT)\r
225           ADD TAC,PROG\r
226           HLRZ TAC1,1(TAC)\r
227           HLRM TAC1,DEVIAD(DEVDAT)      ;NEXT BLOCK NUMBER TO READ\r
228           MOVE TAC,DEVIAD(DEVDAT)\r
229           HRLI TAC,PROG\r
230           HRLZI TAC1,IOUSE\r
231           IORM TAC1,@TAC                ;SET USE BIT\r
232           HRR TAC,@TAC\r
233           HRRM TAC,DEVIAD(DEVDAT)       ;NEXT BUFFER ADDRESS\r
234           TRNE IOS, IOCON               ;CONTINUOUS?\r
235           JRST UOUT3                    ;EXIT\r
236           SKIPL @TAC                    ;IS NEXT BUFFER FULL\r
237           JRST UIN+1                    ;PROCESS NEXT BLOCK\r
238           JRST UOUT3                    ;EXIT\r
239 \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
250           POPJ PDP, 0                   ;EXIT\r
251 \f\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
261           HRLZI TAC1, IOUSE\r
262           IORB TAC1, IOUSE              ;SET USE BIT\r
263           HRRM TAC1,DEVIAD(DEVDAT)      ;ADVANCE BUFFER\r
264           POPJ PDP, 0                   ;EXIT\r
265 UIN4:     PUSHJ PDP, UBEG3\r
266           JRST UIN3\r
267 SETI:     PUSHJ PDP,WAIT1\r
268           HRLM UUO,DEVIAD(DEVDAT)       ;SET INPUT BLOCK NO.\r
269           JRST UXIT\r
270 \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
275           JRST UXIT\r
276 \r
277 GETF:     PUSHJ PDP,WAIT1\r
278           TLNE IOS,IOBEG\r
279           PUSHJ PDP,UBEG\r
280           TLO IOS,UNWFRE\r
281           MOVEM IOS,DEVIOS(DEVDAT)\r
282           AOS TAC, UFREE(DEVDAT)        ;GET FREE BLOCK\r
283           HRLM TAC, DEVOAD(DEVDAT)\r
284           HRLI UUO,PROG\r
285           HRRM TAC,@UUO\r
286           JRST UXIT\r
287 \f\r
288 INTERNAL UTPCLS,UTWDR,UBEG,UTPREL\r
289 \r
290 UTWDR:    IFE DTSIZ,<        PUSHJ PDP,UTPREL>\r
291 \r
292           JRST UXIT\r
293 \r
294 UTPCLS:   TLNN IOS, ULINKF\r
295           JRST UTPREL\r
296           LDB TAC,PIOMOD        ;MODE\r
297           CAIL TAC,16\r
298           JRST UTPREL\r
299           HLR TAC,DEVBUF(DEVDAT)\r
300           HLRI TAC, PROG\r
301           HRR TAC, @TAC                 ;TAC:=BUFFER ADDRESS\r
302           ADDI TAC,1\r
303           MOVEI TAC1,1\r
304           HRLM TAC1,@TAC\r
305           JRST OUT\r
306 \r
307 UTPREL:   IFE DTSIZ,< TLNE  IOS,IOBEG   ;RELEASE\r
308  POPJ PDP,\r
309  TLZE IOS,UDIREN\r
310  JRST UTPRL1\r
311  TLNN IOS,UNWFRE\r
312  POPJ PDP,\r
313  TLNN IOS,UDIRIN\r
314  PUSHJ PDP,UBEG>\r
315 \r
316           IFN DTSIZ,< TLZN IOS,UDIREN+UNWFRE\r
317  POPJ PDP,>\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
322           SUBI TAC,1\r
323           MOVEM TAC,UBUF\r
324           TLO IOS, URDIR\r
325           MOVEM IOS,DEVIOS(DEVDAT)\r
326           MOVEI TAC,1\r
327           PUSHJ PDP,USETW\r
328           JRST WAIT1\r
329 \f\r
330 ,READ THE DIRECTORY FROM THIS DEC-TAPE\r
331 \r
332 UBEG:     SKIPGE DEVMOD(DEVDAT)         ;IS DIRECTORY IN CORE?\r
333           TLO IOS,UDIRIN\r
334           TLNE IOS,UDIRIN\r
335           POPJ PDP, 0\r
336           PUSHJ PDP, UINTER             ;CHECK INTERLOCK\r
337 UBEG2:    PUSH PDP, TAC                 ;SAVE TAC\r
338           HRRZ TAC,UDIR(DEVDAT)\r
339           SUBI TAC, 1\r
340           MOVEM TAC,UBUF\r
341           TLO IOS,UDIRIN+URDIR\r
342           TLZ IOS, IOBEG\r
343           MOVEM IOS,DEVIOS(DEVDAT)\r
344           MOVSI TAC,DVDIRIN     ;SET DIRECTORY IN CORE BIT\r
345           IORM TAC,DEVMOD(DEVDAT)\r
346           MOVEI TAC,1\r
347           PUSHJ PDP,USETR\r
348           PUSHJ PDP,WSYNC\r
349           HLR TAC,@UDIR(DEVDAT)\r
350           HRRZM TAC,UFREE(DEVDAT)\r
351 UBEGX:    POP PDP,TAC\r
352           POPJ PDP, 0\r
353 \r
354 UBEG3:    TLNE IOS, UDIRIN\r
355           POPJ PDP, 0\r
356           JRST UBEG2\r
357 \r
358 UTBERR:   PUSHJ PDP, DTC1       ;ILL. BLOCK NO.\r
359           JRST UTBKER\r
360 \r
361 USETW:    MOVEI TAC1, RIT\r
362           SKIPA\r
363 USETR:    MOVEI TAC1,READ\r
364           HRRM TAC1,DDIG\r
365           HRRZM TAC,UBKN\r
366           JUMPLE TAC,UTBERR     ;ILL. BLOCK NO.?\r
367           CAIL TAC,1102\r
368           JRST UTBERR           ;ILL. BLOCK NO.\r
369           LDB TAC,PUNIT         ;UNIT\r
370           ROT TAC, 3\r
371           ADDI TAC, DTCCHN              ;DECTAPE CHANNEL\r
372           MOVEM TAC, UNIT               ;UNIT AND CHANNEL\r
373           MOVEI TAC, 137\r
374           HRRM TAC, DTCINT\r
375           SUBI TAC, 21\r
376           HRRM TAC, CONSZ1              ;FALL INTO FILL\r
377 \f\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
382           MOVEI TAC, DEVIOS\r
383           ADDM TAC,UDVDAT\r
384           MOVE TAC, [JSR DDIF]          ;DATA CONTROL INTERRUPT CHANN\r
385           MOVEM TAC,UCHA\r
386           MOVEM PROG,UPROG              ;UPROG:=PROG\r
387           MOVE TAC,UBUF                 ;BLI:=XWD-200,C(UBUF)\r
388           HRLI TAC,-200\r
389           MOVEM TAC,BLI\r
390           ADDI TAC,200-1\r
391           MOVEM TAC,BLO\r
392           CONSZ UTC, 20000              ;IS TAPE MOVING?\r
393           JRST FILLC                    ;YES\r
394           MOVE TAC, UNIT                ;RDDA:=RDRM:=WTDA:=WTRM:=C(UN\r
395           DPB TAC,F1\r
396           DPB TAC,F2\r
397           DPB TAC,F3\r
398           DPB TAC,F4\r
399           MOVE TAC,UNIT\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
404           CONO UTC, @TAC\r
405 FILL2:    CONO DC, DACI+UCHN            ;SET UP DC FOR INPUT\r
406           MOVEM IOS, DEVIOS (DEVDAT)\r
407           POPJ PDP,\r
408 \f\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
413           JRST FILL2\r
414 \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
420 RRV:      CONI UTC,TAC\r
421           XORI TAC,GR                   ;REVERSE BIT\r
422           ANDI TAC,550777\r
423           IORI TAC,DT\r
424           CONO UTC,SL(TAC)\r
425           CONO DC,DACI+UCHN\r
426           JRST DXIT\r
427 ,EXAMINE BLOCK NUMBERS - DISPATCHED FROM INTERRUPT - CHAN, DC.\r
428 DDIF:     0                             ;GOING FORWARD\r
429           MOVEM TAC,SV1                 ;SV1:=TAC\r
430           CONSZ UTS, VEOT\r
431           JRST RRV\r
432           DATAI DC,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
438           JRST RRV\r
439           JRST .+3\r
440           CAMG TAC,UBKN                 ;BACKWARDS\r
441           JRST RRV                      ;BACKWARDS\r
442 DDIG2:    CONI UTC,TAC\r
443           ANDI TAC,550777\r
444           CONO UTC,SL(TAC)\r
445           SKIPA\r
446 DXIT1:    HRRM TAC,UCHA\r
447 DXIT:     MOVE TAC,SV1                  ;RESTORE TAC\r
448           JEN @DDIF                     ;RE-ENABLE, DISMISS.\r
449 \f\r
450 ,DISPATCH FROM UCHA INITIALLY ON CORRECT BLOCK MARK\r
451 ,SETS OP TO READ, WRITE IN FWD, REVERSE\r
452 \r
453 ;RD FORWARD\r
454 RDDA:     CONO UTC,SL+RD+JDE+EE                 ;GETS UNIT NO. - RE\r
455           MOVEI TAC,RDFW\r
456           CONO DC,DACI+UCHN\r
457           JRST DXIT1\r
458 \r
459 WTDA:     CONO UTC,SL+WD+JDE+EE                 ;GETS UNIT NO. - RE\r
460           MOVEI TAC,WTFW\r
461           CONO DC,DACO+UCHN\r
462           JRST DXIT1\r
463 \r
464 READ:     CONSO UTC,10000               ;ENTRY TO SET UP READ\r
465           JRST, RDDA\r
466 ;READ REVERSE\r
467 RDRM:     CONO UTC,SL+GR+RD+JDE+EE      ;GETS UNIT NO. - RESETS TO RD\r
468           MOVEI TAC,RDRV\r
469           CONO DC,DACI+UCHN\r
470           JRST DXIT1\r
471 RIT:      CONSO UTC,10000               ;GOING REVERSE - ENTRY TO SET\r
472           JRST WTDA                     ;WRITE FORWARD\r
473 ;WRITE REVERSE\r
474 WTRM:     CONO UTC,SL+WD+GR+JDE+EE      ;GETS UNIT NO. -RESETS. TO WT\r
475           MOVEI TAC,WTRV\r
476           CONO DC,DACO+UCHN\r
477           JRST DXIT1\r
478 \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
482 \r
483 RDRV:     0                             ;ENTRY VIA UCHA - READ REV\r
484           BLKI DC,BLO\r
485           JSR ENPTI\r
486           SOS BLO\r
487           SOS BLO\r
488           JEN @RDRV\r
489 \r
490 RDFW:     0                             ;ENTRY VIA UCHA - READ FWD\r
491           BLKI DC,BLI\r
492           JSR ENPTI\r
493           JEN @RDFW\r
494 \r
495 WTRV:     0                             ;ENTRY VIA UCHA - WRITE REV\r
496           BLKO DC,BLO\r
497           JSR ENPT\r
498           SOS BLO\r
499           SOS BLO\r
500           JEN @WTRV\r
501 \r
502 WTFW:     0                             ;ENTRY VIA UCHA - WRITE FWD\r
503           BLKO DC,BLI\r
504           JSR ENPT\r
505           JEN @WTFW\r
506 \f\r
507 ;END OF OUTPUT BLOCK\r
508 \r
509 ENPT:     0\r
510           JSR, ENP\r
511 ENPT2:    MOVEM TAC,SV1                 ;SV1:=TAC\r
512           HRLZI TAC,UREV\r
513           CONSZ UTC,10000\r
514           ANDCAM TAC,@UDVDAT\r
515           CONSO UTC,10000\r
516           IORM TAC,@UDVDAT\r
517           MOVEI TAC,UOFF\r
518           HRRM TAC,UCHA\r
519           MOVE TAC,SV1\r
520           JRSTF @ENPT\r
521 \r
522 ,CHECK ERROR BITS DC MISSED, 0T PARITY, 1 LEG OP, TAPE END\r
523 ENP:      0\r
524           CONSZ DC, 10000;      DATA MISSED\r
525           JSR ERROR2\r
526           JRSTF @ENP\r
527 \r
528 ,SAVE STATE OF UTS, UTC, DC, TURN OFF DC, UTC, +1@ERRTAL,+1@UERR\r
529 ;ERROR LOOPS\r
530 ERROR:    0\r
531           CONI UTS, C12\r
532           CONI UTC, C13\r
533           CONI DC, C11\r
534           SETOM ERRFLG\r
535           JRSTF @ERROR\r
536 ;INTERRUPT FROM DATA FLAG AFER BLKO HAS COUNTED OUT\r
537 UOFF:     0\r
538           CONO PI, 1100         ;TURN DC CHANNEL OFF\r
539           JEN @UOFF             ;DISMISS EXTRA WRITE FLAG\r
540 \r
541 ;END OF INPUT BLOCK\r
542 ENPTI:    0\r
543           EXCH TAC, ENPTI\r
544           MOVEM TAC, ENPT\r
545           JSR ENP\r
546           CONO DC, 0\r
547           MOVE TAC, ENPTI\r
548           JRST ENPT2\r
549 ;DETECT FIRST ERROR ONLY\r
550 ERROR2:   0\r
551           SKIPN ERRFLG          ;PREVIOUSLY DETECTED ERROR!\r
552           JSR ERROR             ;STORE ERROR CONDITIONS\r
553           JRSTF @ERROR2         ;CONTINUE LOOP\r
554 \r
555 ;END OF PART 1 DTSER2\r
556 \f\r
557           EXTERNAL SETIOD\r
558           INTERNAL UDMP0, UDMPI\r
559 \r
560 ; DUMP OUT\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
567 \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
579           ROT TAC, 3\r
580           ADDI TAC, DTCCHN\r
581           MOVEM TAC, UNIT               ;UNIT AND DT CHANNEL\r
582           ANDI TAC, 70\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
586           HRRM TAC, DTCINT\r
587           MOVEI TAC,16\r
588           HRRM TAC, DTCINT+4\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
598 \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
612 \f\r
613 ;GET FIRST 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
621           POPJ PDP, 0\r
622 ;EXIT WITH ERROR\r
623           TRO IOS, IOBKTL\r
624 UDMP2:    MOVEI TAC, -3\r
625           HRREM TAC, UERRCN\r
626           SETZM ERRFLG\r
627           JRST UEND2\r
628 \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
633           MOVEM TAC, UCHA\r
634           CONO DC,DACO+UCHN\r
635           MOVE TAC,UNIT\r
636 \r
637           CONO UTC,SL+WD+JDE+EE(TAC)\r
638           JRST DXIT\r
639 ;BLKI OR BLKO RETURNS, COMMAND LIST IN MEMORY\r
640 DMPADV:   0\r
641           MOVEM TAC,SV1\r
642           AOSA TAC,UDMP                 ;POINTER\r
643 \f\r
644 DMPA1:    HRRZM TAC, UDMP               ;STORE POINTER\r
645           SKIPN TAC, 0(TAC)             ;IS WORD ZERO\r
646           JRST DMPA2                    ;END\r
647           ADD TAC, UDMPA                ;ADD PROGRAM\r
648           JUMPGE TAC, DMPA1             ;CHANGE COMMAND\r
649           MOVEM TAC, BLO\r
650 DMPXT:    MOVE TAC, SV1\r
651           JEN @DMPADV\r
652 \r
653 ;END OF COMMAND LIST, INPUT OR OUTPUT\r
654 DMPA2:    JSR ENP\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
658           JRST DMPXT\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
663           MOVEM TAC, BLO\r
664 \r
665 ;COMMON INSTRUCTIONS FOR COMMAND LIST IN MEMORY OR ON TAPE\r
666 DDMPI2:   MOVE TAC, [BLKI DC,BLO]\r
667           MOVEM TAC, UCHA\r
668           CONO DC, DACI+UCHN\r
669           MOVE TAC, UNIT\r
670           CONO UTC, SL+RD+JDE+EE(TAC)\r
671           JRST DXIT\r
672 \r
673 ;INPUT COMMAND LIST ON TAPE.  BLKI RETURN AFTER READING COMMAND\r
674 DMPRD:    0\r
675           SKIPL BLO                     ;END OF COMMAND LIST?\r
676           JRST DMPRD1\r
677           MOVEM TAC, SV1                ;SAVE TAC\r
678           MOVE TAC, BLO                 ;PICK UP COMMAND\r
679           HLREM TAC, SVCNTR             ;-N\r
680           HRRZS TAC                     ;ADDRESS\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
687           HRRM TAC, UCHA+\r
688           SKIPA TAC, SV1                ;RESTORE TAC\r
689 DMPRD1:   CONO DC, 0\r
690           JEN @DMPRD\r
691 \f\r
692 ;INPUT COMMAND LIST ON TAPE.  BLKI RETURN AFTER READING DATA\r
693 DMPRDA:   0\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
698           HRRM TAC, UCHA+1\r
699           MOVE TAC, SV1                 ;SAVE TAC\r
700           JEN @DMPRDA\r
701 ;DUMP IN\r
702 UDMPI:    TLZ IOS, IO\r
703           PUSHJ PDP, UINTER\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
707           HRRM TAC, DMPRD0\r
708           MOVEI TAC, DDMPI              ;SEARCH RETURN\r
709           MOVE TAC1, [JSR DMPRD]                ;BLOCK IN RETURN\r
710           JRST UDMP1\r
711 UDMPI2:   MOVEI TAC, DDMPI3             ;COMMAND LIST IN CORE\r
712           JRST UDMP0\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
719           TRO IOS,IODERR\r
720           MOVEM IOS,DEVIOS(DEVDAT)\r
721           MOVE TAC,UNIT\r
722           ANDI TAC, 70\r
723           CONO PI,2100\r
724           CONO DC, DACI+UCHN\r
725           CONO UTC, SL+RB(TAC)          ;SWITCH TO SEARCH MODE\r
726           MOVE TAC, [JSR UDMPRB]\r
727           MOVEM TAC, UCHA\r
728           JRST DTCRET\r
729 ;SEARCH RETURN TO READ NEXT FREE BLOCK\r
730 UDMPRB:   0\r
731           EXCH DEVDAT, USVDB            ;GET DVDB\r
732           MOVEM TAC,SVAC\r
733           MOVEM IOS,SVAC+1\r
734           MOVEM PDP,SVAC+2\r
735           MOVEM TAC1,SVAC+3\r
736           MOVE IOS,DEVIOS(DEVDAT)\r
737           TLNN IOS,IO                   ;INPUT OR OUTPUT?\r
738           JRST .+3                      ;INPUT\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
742           MOVEI TAC,DTCCHN\r
743           CONO UTC,5000(TAC)            ;STOP TAPE\r
744           MOVE PDP,[XWD -5,SVAC+3]      ;USE REST OF SCAV BLOCK\r
745           JSR IODSET\r
746           PUSHJ PDP,DTC1B\r
747 \f\r
748           MOVE TAC,SVAC\r
749           MOVE IOS,SVAC+1\r
750           MOVE PDP,SVAC+2\r
751           MOVE TAC1,SVAC+3\r
752           EXCH DEVDAT,USVDB\r
753           JEN @UDMPRB\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
760           JRST DMPRD1\r
761 \f\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
775 \r
776 UDMP:     0             ;HOLDS DUMP UUO ADDRESS\r
777 UDMPA:    0             ;HOLDS USER PROGRAM STARTING ADDRESS\r
778 SV0:      0\r
779 SVAC:     BLOCK 11\r
780 SVCNTR:   0             ;HOLDS -N OF DUMP COMMAND WORD\r
781 \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
789           POPJ PDP, 0                   ;EXIT\r
790 \r
791 USVDB:    0             ;SAVE DATA BLOCK ADDRESS\r
792 USVIOS:   0             ;SAVE IOS\r
793 UERRCN:   -3            ;ERROR COUNTER\r
794 \r
795 IODSET:   0\r
796           TLZE IOS,IOW\r
797           PUSHJ PDP,SETIOD\r
798           MOVEM IOS,DEVIOS(DEVDAT)\r
799           JRST @IODSET\r
800 \f\r
801 ;INITIALZATION\r
802 \r
803 DTCINI:   MOVEI TAC, -3                 ;CLEAR ERROR COUNTER\r
804           HRREM TAC, UERRCN\r
805           SETZM ERRFLG\r
806           CONO UTC, 0\r
807           POPJ PDP, 0\r
808 \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
814           JSR ERROR2                    ;ERROR\r
815 \r
816 ;JOB DONE\r
817           CONO DC, 0                    ;TURN OFF DATA CONTROL\r
818           MOVEM 0, SV0                  ;SAVE ZERO\r
819           CONI UTC, 0\r
820           MOVEM 0, USVIOS\r
821           ANDI 0, 230070                ;SAVE DIRECTION AND UNIT\r
822           CONO UTC, @0                  ;SWITCH TO MOVE MODE\r
823           MOVE 0, SV0\r
824           JSR DTCSAV\r
825           PUSHJ PDP, DSETAC\r
826           SKIPE ERRFLG\r
827           JRST DTRED0\r
828           TLZE IOS,URDIR\r
829           JRST .+3\r
830           JSR IODSET\r
831           JRST DTC1\r
832           TRC IOS,17\r
833           TRCN IOS,17\r
834           JRST DMPEND\r
835           JSR IODSET\r
836           JRST DTCONT\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
841           TLZ IOS, UREV\r
842           TRNE TAC, 10000\r
843           TLO IOS,UREV\r
844 \f\r
845 DTC1A:\r
846 DTC1B:    SOSL DCREQ            ;DECREMENT REQUEST COUNT, ANYONE LEFT W\r
847           SETOM DCAVAL                  ;YES.DATA CONTROL AVAILABLE\r
848           TRZ IOS, IOACT\r
849 DTC2:     MOVEM IOS, DEVIOS(DEVDAT)\r
850           MOVEI TAC, -3\r
851           HRREM TAC, UERRCN\r
852           SETZM ERRFLG\r
853           POPJ PDP,\r
854 \r
855 DTCONT:   MOVEI TAC1, UOUT2\r
856           TLNN IOS, IO                  ;WRITING?\r
857           MOVEI TAC1, UIN1\r
858           PUSHJ PDP, 0(TAC1)\r
859           JRST DTC2\r
860 \r
861 ;INTERRUPT FROM TIME FLAG AFTER STOP DELAY\r
862 UTIME:    CONSO UTC,4000\r
863           JRST DTCINT+1\r
864           SOSL DTREQ            ;DECREMENT REQUEST COUNT, IS ANYONE STI\r
865           SETOM DTAVAL                  ;YES,DECTAPE CONTROL AVAILABL\r
866           CONO UTC, 0\r
867           JEN @DTCCHL\r
868 \r
869 ;SET UP NECESSARY DECTAPE ACCUMULATORS\r
870 DSETAC:   MOVE DEVDAT, USVDB\r
871           MOVE PROG, UPROG\r
872           MOVE IOS, DEVIOS(DEVDAT)\r
873           POPJ PDP,\r
874 ;RE-DO DECTAPE COMMAND IF AN ERROR OCCURED\r
875 DTRED0:   TRC IOS,17\r
876           TRCN IOS,17\r
877           JRST DMPEND\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
882           JRST DTCRET                   ;EXIT\r
883 DTRD2:    TRO IOS, IODERR               ;SET ERROR INDICATION\r
884           TLZE IOS, IOW\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
890 \r
891           END,\r