1 TITLE MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES
\r
2 SUBTTL L. HANTMAN 8-9-65
\r
4 ; MAG TAPE SERVICE SUBROUTINES
\r
6 MTAPE1: PUSHJ PDP,WAIT1
\r
8 ANDCAB IOS,DEVIOS(DEVDAT)
\r
13 MTAPE: PUSHJ PDP,WAIT1
\r
15 TRO IOS, IOACT ;SET ACTIVE
\r
16 PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AV
\r
17 LSH T,^D8 ;MOVE TO FUNCTION
\r
18 ANDI T,7400 ;MODE BITS
\r
19 CAIN T,4000 ;LOGICAL EOT?
\r
23 CONSZ 224,4000 ;AT LOAD POINT?
\r
25 MOVEI TAC, TCF ;LOOK FOR TAPE CONTROL FREE 0
\r
26 MTGO1: HRRM TAC, MTCONO
\r
28 MTGO1A: LDB TAC,PUNIT ;UNIT
\r
29 DPB TAC,[POINT 3,T,31] ;UNIT
\r
30 LDB TAC, [POINT 3, IOS,28] ;DENSITY PARITY
\r
31 XORI TAC, 5 ;ODD, 556
\r
32 DPB TAC,[POINT 3,T,23]
\r
33 MOVEI TAC,MTCCHN(T) ;CHANNEL
\r
35 MTGO: CONO 224, 0 ;DISABLE ALL INTERRUPTS
\r
36 TRO TAC, 200 ;INHIBIT RETURN TO POOL
\r
37 CONO 220,(TAC) ;COMMAND
\r
38 SETZM MTEOFF# ;CLEAR EOF FLAG
\r
39 HRRM DEVDAT,MTDEV# ;COMMAND, DVDB
\r
44 MTCONO: CONO 224,TCF+ERF ;ENABLE FLAGS
\r
48 MTIN: TLZ IOS, IO ;READING
\r
49 PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE?
\r
50 SETCM TAC,@DEVIAD(DEVDAT) ;-SIZE-1
\r
51 MTIN1: HRRI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE
\r
52 ADD TAC,[XWD 2,1] ;-SIZE+1,BUFFER+1
\r
54 MTIN2: MOVE TAC1,[BLKI DC,4000+DCN+MTDC*10]
\r
57 ;IS SYSTEM AVAILABLE
\r
58 MTCHEK: TRO IOS, IOACT ;SET ACTIVE
\r
59 TLO IOS, IODT ;SET FOR DATA TRANSFER
\r
60 MOVEM IOS, DEVIOS(DEVDAT)
\r
63 MTCHK2: TLZ IOS, IOSEOF+IOBEG ;CLEAR SPACE TO EOF
\r
64 MOVEM IOS, DEVIOS(DEVDAT) ;STORE BITS
\r
68 ROT TAC, 4 ;PUT IN UNIT POSITION
\r
69 CONO 220, 200(TAC) ;HAS UNIT ONLY
\r
70 CONO 224, SEL ;JAM UNIT INTO COMMAND BUFFER
\r
71 CONSZ 224, SEL ;UNIT NOT READY?
\r
73 ROT TAC, -4 ;UNIT IN TAC
\r
74 HRRM DEVDAT, MTSTAK(TAC) ;PUT IN STACK
\r
75 MOVE TAC1, [XWD MTCLOK,^D32] ;HALF SECOND
\r
76 DPB TAC, [POINT 3,TAC1,23] ;STORE UNIT NUMBER
\r
77 HRLM TAC1, MTSTAK(TAC) ;SAVE ACTUAL CLOCK REQUEST
\r
78 CONO PI, 400 ;TURN OFF PI
\r
79 IDPB TAC1, CLOCK ;REQUEST CLOCK RETURN TO MTCL
\r
80 CONO PI, 200 ;TURN PI ON
\r
81 SOSL MTREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W
\r
82 SETOM MTAVAL ;YES,SET MAG TAPE AVAL
\r
83 TLNN IOS, IODT ;NON-DATA TRANSFER?
\r
85 SOSL DCREQ ;NO,DECREMENT REQUEST COUNT,ANYONE LEFT
\r
86 SETOM DCAVAL ;YES,SET DATA CONTROL AVAILAB
\r
87 MTCHK3: PUSHJ PDP, WSYNC ;REQUEST WAIT
\r
88 MOVE IOS, DEVIOS(DEVDAT) ;LOAD STATUS
\r
89 TLNN IOS, IODT ;DATA TRANFER?
\r
90 JRST MTCHK2+2 ;CHECK FOR MT AVAILABLE ONLY
\r
91 JRST MTCHK1 ;CHECK FOR MT AND DC AVAIALABL
\r
94 MTOUT: TLO IOS, IO ;WRITING
\r
96 CONSZ 224,200 ;IS FILE PROTECT RING IN?
\r
97 JRST MTOUTE ;NO, ERROR CANT WRITE. CROCK!!
\r
98 MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE
\r
99 MOVN TAC1,1(TAC) ;-WD COUNT
\r
100 HRL TAC,TAC1 ;-WD CMT,BUFFER
\r
101 AOJG TAC,MTNOTI ;BUFFER+1, TEST FOR ZERO WORD COUNT
\r
102 MTOUT2: MOVE TAC,[BLKO DC,3400+DCN+MTDC*10]
\r
103 MOVEI T,1000 ;WRITE
\r
104 MTINDC: MOVEM TAC,MTDCCN# ;BLKO POINTER
\r
106 HRRZM TAC1, MDCSAV# ;SAVE DC COMMAND
\r
108 MOVEM TAC1,40+<2*DCN> ;BLK COMMAND
\r
109 MOVE TAC1,[JSR MTDCND]
\r
110 MOVEM TAC1,41+<2*DCN>
\r
112 CONO DC, @MDCSAV ;DATA CONTROL COMMAND
\r
116 MTOUTE: TRO IOS,IODERR ;WRITE LOCK, DEVICE ERROR
\r
120 MTCLS: LDB TAC,PIOMOD ;MODE
\r
121 CAIG TAC, 16 ;DUMP MODE
\r
122 JRST MTCLS1 ;CLOSE OUTPUT
\r
123 TLNE IOS,IO ;INPUT?
\r
124 JRST MTCLS1+1 ;WRITE EOFS
\r
125 MOVEI T,16 ;SPACE TO EOF
\r
126 JRST MTAPE ;GOES BACK TO UUO LEVEL
\r
127 MTCLS1: PUSHJ PDP,OUT
\r
128 MOVEI T,3 ;WRITE IOF
\r
130 MOVEI T,3 ;WRITE EOF
\r
134 MTDISP: POPJ PDP, ;RELEASE
\r
138 JRST CUXIT1 ;ENTER IN DIRECTORY
\r
139 JRST CUXIT1 ;LOOKUP IN DIRECTORY
\r
140 JRST MTDMPO ;DUMP OUT
\r
141 JRST MTDMPI ;DUMP IN
\r
146 MTCINI: MOVN TAC, MTREDO ;REPEAT COUNTER
\r
147 HRREM TAC, MTERCN ;RESET ERROR CNTR
\r
148 CONO 224,0 ;CLEAR ENABLES
\r
149 HLLZS MTCINT ;CLEAR CONSO
\r
158 CONO PI,DCB+1000 ;SHUT OF DC CHANNEL
\r
162 ;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO
\r
163 MTCINT: CONSO 224,TCF+ERF
\r
165 JSR MTCSAV ;SAVE ACS
\r
166 HRRZ DEVDAT,MTDEV ;DVBD
\r
167 LDB PROG,PJOBN; JOB NUMBER
\r
168 HRRZ PROG, JBTADR(PROG)
\r
169 MOVE IOS, DEVIOS(DEVDAT)
\r
170 CONSO 224,TCF ;TAPE CONTROL FREE
\r
172 MTIDSP: JRST MTPDUN ;POINTS TO MTERR FOR ERROR
\r
173 JRST MTBSP ;AFTER BACKSPACE
\r
174 JRST MTERR ;IF ERROR FOUND
\r
175 MTPDUN: TLNN IOS,IODT
\r
181 JRST MTNOTI ;WRITING
\r
182 SKIPE MTEOFF ;NOT EOF?
\r
184 MTINDN: MOVEI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS
\r
185 MOVN TAC1,MTDCCN ;WD CNT-1
\r
186 AOBJN TAC1, .+1 ;WD CNT
\r
187 HLLZS TAC1 ;CLR RT HALF
\r
188 ADD TAC1,DCWRD ;ADD CURRENT COUNT=NO. OF WDS
\r
189 HLRM TAC1,1(TAC) ;STORE AT WORD COUNT
\r
191 JRST .+2 ;NEXT BUFFER FULL
\r
192 JRST MTCON ;CONTINUE MODE
\r
193 MTEND1: CONO DC, 0 ;TURN OFF DATA CONTROL
\r
194 SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT?
\r
195 SETOM DCAVAL ;YES, SET FLAG FOR CLOCK
\r
197 SETOM MTAVAL ;YES, SET FLAG FOR CLOCK
\r
198 CONSZ 224,10000 ;END OF TAPE?
\r
199 TRO IOS, IOTEND ;SET END OF TAPE INDICATION
\r
200 TRZ IOS, IOBOT ;CLR LOAD POINT INDICATION
\r
201 CONSZ 224, 4000 ;LOAD POINT?
\r
202 TRO IOS, IOBOT ;SET LOAD POINT INDICATION
\r
203 CONSZ 224, 20000 ;TAPE REWINDING?
\r
204 TRO IOS, IOBOT ;SET LOAD POINT INDICATION
\r
205 TLZE IOS, IOW ;CLEAR WAIT
\r
206 PUSHJ PDP, SETIOD ;REQUEST WAIT SATISFIED
\r
207 TRZ IOS, IOACT ;CLEAR ACTIVE
\r
208 MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE BITS
\r
209 CONO 224,0 ;CLEAR MAG TAPE ENABLES
\r
210 HLLZS MTCINT ;CLEAR CONSO
\r
211 MOVN TAC, MTREDO ;REPEAT COUNTER
\r
213 POPJ PDP, ;DISMISS INTERRUPT OR RETURN TO CALLER
\r
215 MTNOTI: PUSHJ PDP,ADVBFE ;WRITING
\r
217 MTCON: TRNE IOS,IOCON ;CONTINUOUS?
\r
218 JRST MTEND1 ;STOP TAPE
\r
219 CONSZ 224,10000 ;END OF TAPE?
\r
220 JRST MTEND1 ;STOP TAPE
\r
221 CONO DC,0 ;CLEAR DATA CONTROL
\r
224 MOVEM IOS,DEVIOS(DEVDAT)
\r
227 TLNN IOS,IO ;INPUT OR OUTPUT?
\r
228 JRST MTIN1 ;CALL INPUT SUBROUTINE
\r
229 JRST MTOUT1 ;CALL OUTPUT SUBROUTINE
\r
230 MTNIO2: HLRZ TAC,MTDEV ;COMMAND
\r
232 CAIE TAC, 3000 ;SPACE ONE RECORD
\r
234 CONSZ 224, 400 ;EOF?
\r
235 TLO IOS, IOSEOF ;SET EOF DETECTED
\r
237 MTEOF: TLO IOS, IOEND
\r
239 MTEOR: CONSZ 224,LPE+CPE ;IF END OF RECORD CHECK PARIT
\r
240 SOS MTIDSP ;IF ERROR CAUSE INTERRUPT TO
\r
241 ;ERROR ROUTIE VIA TCF
\r
242 CONSZ 224, 400 ;EOF?
\r
243 SETOM MTEOFF ;SET EOF FLAG
\r
244 MTIGN: CONO 224, TCF ;IF ERF, CAUSE INTERRUPT TO D
\r
245 ;PATCH TABLE, DISABLE ERF FLA
\r
246 MOVEM TAC, MTDCND ;SAVE TAC
\r
247 MOVEI TAC, TCF ;LOOK FOR TCF ONLY
\r
248 HRRM TAC, MTCINT ;SET CONSO
\r
249 MOVE TAC,MTDCND ;RESTORE TAC
\r
250 JRST MTCRET ;DISMISS AND RETURN VIA TCF
\r
252 MTERR: HLRZ TAC,MTDEV ;COMMAND
\r
254 CAIN TAC,2400 ;READ?
\r
256 CAIN TAC,1000 ;WRITE
\r
257 JRST MTIGN2 ;IGNORE IF NOT RD OR WRITE
\r
258 TRNN IOS, IONRCK ;RE-DO?
\r
259 AOSL MTERCN ;THIRD ERROR?
\r
260 JRST MTERR2 ;TRIPLE ERROR
\r
261 HLRZ TAC,MTDEV ;COMMAND
\r
263 CONO 220,3400(TAC) ;BSP
\r
267 MTERR2: TRO IOS, IODERR ;DEVICE ERROR
\r
270 MTBSP: MOVE TAC,MTDCCN ;POINTER
\r
271 MOVEM TAC,DCWRD ;RESET POINTER WORD
\r
272 CONI DC,TAC ;SAVE IN/OUT, PACK MD. DEV NU
\r
275 ADDI TAC,3000 ;MAKE WRITE
\r
276 TRNN TAC,400 ;WAS IT WRITING?
\r
277 ADDI TAC,1000 ;MAKE READ
\r
278 CONO DC,(TAC) ;REISSUE CONO
\r
279 HLRZ TAC,MTDEV ;COMMAND
\r
280 CONSO 224,XNC ;WAIT FOR XNC
\r
281 JRST .-1 ;SHOULD ADD A COUNT(RUNAWAY TAPE TURNED
\r
282 CONO 220,(TAC) ;REISSUE RD OR WRITE
\r
283 SETZM MTEOFF ;CLR EOF FLAG
\r
284 CONO PI,2000+DCB ;TURN ON CHANNEL
\r
285 MOVEI TAC,MTPDUN ;RESET SWITCH
\r
290 JRST MTCRET ;ENABLE PROPER FLAGS
\r
291 MTIGN2: AOS MTIDSP ;RESET DISPATCH SWITCH
\r
294 ;NEED TO TRY WRITING LONG RECORD GAP ON OUTPUT(ONLY) AND TRY
\r
295 ;ONCE MORE AT NEW SPOT ON TAPE IF TRIPLE ERROR
\r
298 XNC=40000 ;TRANSFER NEW COMMAND
\r
299 MTDC=2 ;MAG TAPE DATA CONTROL DEVICE NO.
\r
300 TCF=1 ;TAPE CONTROL FREE
\r
301 ERF=4 ;END OF RECORD FLAG
\r
302 LPE=20 ;LONG. PARITY ERROR
\r
303 CPE=10 ;CHAR. PARITY ERROR
\r
304 DCB=100 ;DATA CHANNEL NUMBER
\r
305 DCN=1 ;DATA CHANNEL NUMBER
\r
306 SEL=2 ;UNIT TO COMMAND BUFFER
\r
307 IOSEOF=4000 ;SPACING ONE RECORD FORWARD FOUND EOF
\r
308 IOTEND=2000 ;EOT INDICATION
\r
309 IONRCK=100 ;DO NOT RE-TRY ON ERRORS
\r
310 IOBOT=4000 ;TAPE AT LOAD POINT
\r
311 IODT=10000 ;A 1 FOR A DATA TRANFER TYPE COMMAND
\r
312 EXTERNAL UXIT, ADVBFF, ADVBFE, DCREQ, DCWAIT, MTCSAV
\r
313 EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTCCHL, MTREQ
\r
314 EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,CUXIT1
\r
315 EXTERNAL WSYNC,USRREL,WAIT1,ADRERR,PUNIT,PIOMOD,PJOBN
\r
318 INTERNAL MTCINT,MTAPE1,MTCINI
\r
319 ;CLOCK INTERRUPT, UNIT IN TAC
\r
320 MTCLOK: HRRZ DEVDAT, MTSTAK(TAC) ;DVDB
\r
321 ROT TAC, 4 ;PUT UNIT IN SEL BITS
\r
322 CONO 220, 200(TAC) ;UNIT ONLY
\r
323 CONO 224, SEL ;SEL UNIT
\r
324 CONSZ 224, SEL ;UNIT NOT READY?
\r
325 JRST MTCLK2 ;UNIT READY
\r
326 ROT TAC, -4 ;FOR INDEXING PURPOSES
\r
327 HLR TAC1, MTSTAK(TAC) ;CLOCK REQUEST
\r
328 HRLI TAC1, MTCLOK ;GET CLOCK REQUEST
\r
329 CONO PI, 400 ;TURN OFF PI
\r
330 IDPB TAC1, CLOCK ;STORE CLOCK REQUESTED
\r
331 CONO PI, 200 ;TURN ON PI
\r
333 MTCLK2: MOVE IOS, DEVIOS(DEVDAT)
\r
336 MOVEM IOS, DEVIOS(DEVDAT)
\r
341 ;LOGICAL END OF TAPE LOOP
\r
342 MTLEOT: CONSZ 224, 4000 ;TAPE NOT AT LOAD POINT?
\r
343 JRST MTEOT2 ;AVOID BACKSPACE IFAT LOAD P
\r
344 MOVEI T,3400 ;BACKSPACE
\r
346 MTEOT2: MOVEI T,16 ;SPACE ONE FILE
\r
348 MOVEI T,6 ;SPACE ONE RECORD
\r
350 PUSHJ PDP, WAIT1 ;WAIT UNTIL SPACING IS COMPLE
\r
351 MOVE IOS, DEVIOS(DEVDAT)
\r
352 TLNN IOS, IOSEOF ;WAS EOF DETECTED?
\r
353 JRST MTEOT2 ;RESUME SPACING
\r
354 MOVEI T,7 ;BACKSPACE, LOGICAL EOF FOUND
\r
355 JRST MTAPE ;RETURN BACK TO MAIN PROGRAM
\r
356 MTREDO: 12 ;NUMBER OF TIMES TO RE-EXECUTE
\r
359 ;DEVICE DEPENDENT DUMP MODES. MODE 16.
\r
361 MTDMPO: TLO IOS, IO ;WRITING
\r
363 PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE?
\r
364 MOVE TAC1, @MTOUT2 ;BLK0 AND DATA CONTROL COMMAN
\r
365 MOVE TAC,T ;COMMAND LIST POINTER
\r
366 MOVEI T,1000 ;WRITING COMMAND
\r
367 MTDMP1: HRLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LI
\r
368 MOVEM TAC, MTCMDP# ;COMMAND POINTER
\r
369 SKIPN TAC,@TAC ;COMMAND WORD
\r
370 JRST MTDMP3 ;NOTHING TO DO
\r
371 JUMPGE TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE
\r
372 HLREM TAC, SVCNTR# ;SAVE COUNTER
\r
373 HRRZS TAC ;GET ADDRESS ALONE
\r
374 SUB TAC, SVCNTR ;GET LAST ADDRESS
\r
375 CAMLE TAC, USRREL ;LESS THAN END?
\r
376 JRST MTDMP2 ;OUT OF BOUNDS
\r
377 MOVE TAC, @MTCMDP ;PICK UP POINTER AGAIN
\r
378 ADD TAC, PROG ;GET ACTUAL ADDRESS
\r
379 PUSHJ PDP, MTINDC ;MOVE TAPE
\r
381 AOS T,MTCMDP ;UPDATE COMMAND POINTER
\r
382 TLNN IOS, IO ;WRITING?
\r
383 JRST MTDMPI+2 ;READING
\r
384 JRST MTDMPO+2 ;WRITING
\r
386 MTDMPI: TLZ IOS, IO ;READING
\r
388 PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE
\r
389 MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAN
\r
390 MOVE TAC,T ;COMMAND LIST POINTER
\r
391 MOVEI T,2400 ;READ COMMAND
\r
395 MTDMP2: PUSHJ PDP,MTDMP3
\r
397 ;CLEAR ALL USE BITS. NOTHING IN COMMAND LIST
\r
406 MOVEM IOS,DEVIOS(DEVDAT)
\r