Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape3 / TM8E.PA
1 /16 TM8-E MAGTAPE HANDLER FOR OS/8
2
3
4
5
6
7
8
9
10
11
12 /
13 /
14 /COPYRIGHT (C) 1973,1974,1975 BY DIGITAL EQUIPMENT CORPORATION
15 /
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
26 /AND SHOULD NOT BE CONTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
27 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
28 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
29 /
30 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
31 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
32 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
33 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
34 /
35 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
36 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
37 /DIGITAL.
38 /
39 /
40 /
41 /
42 /
43 \f LWCR=6701 /LOAD WORD COUNT REGISTER AND CLEAR AC
44 LCAR=6703 /LOAD CURRENT ADDRESS REGISTER AND CLEAR AC
45 LCMR=6705 /LOAD COMMAND REGISTER AND CLEAR AC
46 LFGR=6706 /LOAD FUNCTION REGISTER AND CLEAR AC
47 CLT=6712 /CLEAR TRANSPORT
48 RMSR=6714 /CLEAR AC AND READ MAIN STATUS REGISTER
49 RFSR=6716 /CLEAR AC AND READ STUFF
50 SKEF=6721 /SKIP IF ERROR FLAG IS SET
51 SKJD=6723 /SKIP IF THE JOB IS DONE (MTTF IS SET)
52 SKTR=6724 /SKIP IF TAPE UNIT READY (TUR TRUE)
53
54 MTAVERSION="F&77
55
56 /SPECIAL CODES USED WHEN PAGE COUNT=0 (CODES IN BITS 9-11 OF FN WORD)
57
58 /0 (CLOSE) WRITE 2 EOF'S
59 /1 REWIND
60 /2 SPACE FORWARD/REVERSE RECORDS
61 / IF BIT 0 OF THE FUNCTION WORD IS A 0,
62 / THIS CODE ADVANCES RECORDS.
63 / THE NEGATIVE OF THE NUMBER OF RECODRDS IS SPECIFIED IN ARG 3
64 / IF BIT 0 OF THE FUNCTION WORD IS A 1,
65 / THIS CODE BACKSPACES RECORDS.
66 / THE NEGATIVE OF THE NUMBER OF RECORDS IS SPECIFIED AS ARG 3.
67 / UNDER NO CIRCUMSTANCES DOES THIS COMMAND CONTINUE PAST A FILE MARK.
68 /3 SPACE FORWARD/REVERSE FILES
69 / IF BIT 0 OF THE FUNCTION WORD IS A 0
70 / THEN THIS FUNCTION ADVANCE FILE MARKS
71 / THE NEGATIVE OF THE NUMBER OF FILE MARKS IS SPECIFIED BY ARG3
72 / THE TAPE IS LEFT POSITIONED AFTER THIS FILE MARK
73 / BUT UNDER NO CIRCUMSTANCES DOES THE TAPE ADVANCE PAST
74 / THE SECOND MARK OF TWO CONSECUTIVE FILE MARKS
75 / IF BIT 0 OF THE FUNCTION WORD IS A 1,
76 / THIS CODE BACKSPACES PAST FILE MARKS.
77 / THE NEGATIVE OF THE NUMBER OF FILE MARKS IS SPECIFIED BY ARG 3.
78 / THE TAPE IS LEFT POSITIONED BEFORE THE LAST FILE MARK,
79 / SO THE USER PROBABLY WANTS TO DO A FORWARD RECORD NEXT.
80 /4 REWIND AND PUT OFF-LINE
81 /5 WRITE EOF
82 /6 PERFORM OPERATION WITH SPECIFIED BLOCKSIZE
83 / THE NEGATIVE OF THE DESIRED BLOCKSIZE IS SPECIFIED AS ARG 3.
84 /7 CURRENTLY UNUSED
85
86 /NOTE: SKIP TO EOD CAN BE PERFORMED BY SKIPPING 4096 FILES
87
88 /MAINTENANCE RELEASE CHANGES:
89
90 /1. MAJOR CODE OVERHAUL
91 /2. SKIP RECORDS RETURNS NON-FATAL ERROR IF IT DETECTS FILE MARK
92 /3. SKIP FORWARD FILES NEVER EVER PASSES EOD
93 /4. SKIP FORWARD FILES RETURNS ERROR IF IT STARTS IMMEDIATELY
94 / BEFORE A FILE MARK (UNLESS IT'S AT BOT)
95 / IT THEN REMAINS BEFORE THE FILE MARK
96 /5. FIXED TIMING PROBLEM FOR TS03
97 /6. CHANGED ORDER OF TEST FOR DATA DURING SKIP FORWARD FILES
98 /7. MADE UNUSED FUNCTION CODE 7 ACT SAME AS 0
99 \f
100 /BUILD DESCRIPTOR BLOCK
101
102 *0
103
104 -10 /8 ENTRY POINTS
105
106 DEVICE TM8E;DEVICE MTA0;200;MTA0&177+4000;ZBLOCK 2
107 DEVICE TM8E;DEVICE MTA1;200;MTA1&177+4000;ZBLOCK 2
108 DEVICE TM8E;DEVICE MTA2;200;MTA2&177+4000;ZBLOCK 2
109 DEVICE TM8E;DEVICE MTA3;200;MTA3&177+4000;ZBLOCK 2
110 DEVICE TM8E;DEVICE MTA4;200;MTA4&177+4000;ZBLOCK 2
111 DEVICE TM8E;DEVICE MTA5;200;MTA5&177+4000;ZBLOCK 2
112 DEVICE TM8E;DEVICE MTA6;200;MTA6&177+4000;ZBLOCK 2
113 DEVICE TM8E;DEVICE MTA7;200;MTA7&177+4000;ZBLOCK 2
114 \f *200
115
116 PARITY, 402 /CHANGE TO 2 TO HAVE EVEN PARITY
117 BLOCK0, 0 /SET TO 1 TO INHIBIT REWIND ON BLOCK 0
118 MTATAD, TAD MTA0 /USED TO MAKE HANDLER SERIALLY REUSABLE
119 /CONTENTS MUST BE 13XX [V3C]
120 MTISZ, ISZ MTANO /DITTO
121 STOP, ISZ MTHX
122 MTEXIT, HLT /CIF CDF TO USER'S FIELD
123 JMP I MTHX
124
125 PNEXT, 0
126 /V3C CLA
127 TAD MTANO /GET UNIT #
128 CIA
129 TAD MTATAD /FIND WHICH ENTRY POINT
130 DCA MTFUN /MAKE A 'TAD MTAN' AND EXECUTE IT
131 MTFUN, HLT
132 DCA MTHX /COLLECT ARGUMENTS VIA 'MTHX'
133 CLA STL RTR /2000
134 TAD MTFUN /MAKE A 'DCA MTAN' AND EXECUTE IT
135 DCA NBLOK
136 TAD MTISZ /RESTORE DESTROYED ISZ
137 NBLOK, HLT
138 TAD I MTHX /GET FUNCTION WORD
139 DCA MTFUN /SAVE IT IN 'MTFUN'
140 ISZ MTHX /POINT TO BUFFER ADDRESS
141 STA /GET ONE LESS THAN
142 TAD I MTHX /BUFFER ADDRESS
143 DCA NBUFF /AND STORE AWAY
144 ISZ MTHX /POINT TO BLOCK NUMBER
145 TAD I MTHX /GET BLOCK NUMBER
146 DCA NBLOK /STORE AWAY
147 ISZ MTHX /POINT TO ERROR RETURN
148 RDF /GET CALLING FIELD
149 TAD MTCDIF /CREATE CIF CDF TO USER'S FIELD
150 DCA MTEXIT /STORE AWAY WHERE WILL BE USEFUL LATER
151 MTCDIF, CIF CDF 0 /GO TO FIELD 0
152 TAD MTANO /GET UNIT NUMBER
153 CLL RTR
154 RTR
155 DCA MTANO /PUT IN BITS 0-2 OF 'MTANO'
156 TAD MTFUN /RETRIEVE FUNCTION WORD
157 AND L70 /ISOLATE FIELD OF BUFFER
158 TAD PARITY /SET ODD PARITY BITS, AND DENSITY 8 (800 BPI, 7-CHANNEL)
159 TAD MTANO /COMBINE WITH UNIT NUMBER
160 DCA MTAWD /TO GET A USEFUL MTA COMMAND
161 TAD MTFUN /ZERO BUFFER FOR PIP ON EOF
162 AND L70 /FIELD OF ORIGIN
163 TAD MTCDF
164 DCA USRCDF
165 USRCDF,
166 MTANO, 0
167 DCA MTANO /RESET 'MTANO' FOR NEXT CALL
168 TAD MTFUN
169 RAL
170 AND P7600 /GET # OF WORDS IN BUFFER
171 SNA SZL /ZERO BUFFER IF READING
172 JMP P7600
173 CIA
174 DCA MTH
175 TAD NBUFF
176 DCA ERROR
177 MCLRLP, ISZ ERROR
178 L100, 100
179 DCA I ERROR
180 ISZ MTH
181 JMP MCLRLP
182 P7600, 7600
183 MTCDF, CDF 0
184 TAD BLOCK0
185 SNA /OPERATE IN MULTIPLE-FILE MODE?
186 TAD NBLOK /RETRIEVE BLOCK
187 SZA CLA /IS IT BLOCK 0?
188 JMP BIGBLK /NO
189 TAD MTATAD /YES, REWIND [CAN BE 13XX]
190 JMS MTH /CALL MAGTAPE ROUTINE
191 MTAWD, 1000 /CA IMMATERIAL
192 M7603, -7603 /WC IMMATERIAL
193 L70, 70 /NO REWIND ERRORS (THESE CAN'T OCCUR)
194 BIGBLK, TAD MTFUN
195 JMS I PNEXT /GO READ OR WRITE NEXT PAGE
196 NBUFF, 0 /ONE LESS THAN ADDRESS OF BUFFER
197 /MUST BE AT LOC AFTER CALL TO NEXT
198 \f/ MTH
199
200 /SET UP WC AND CA REGISTERS, LOAD FUNCTION AND GO
201
202 /CALLING SEQUENCE:
203
204 / TAD (FNWORD
205 / JMS MTH
206 / BUFFER ADDRESS-1
207 / -WORD COUNT
208 / MASK FOR UNACCEPTABLE ERROR CONDITIONS
209 / <NORMAL RETURN>
210
211 / TAKES HANDLER ERROR RETURN ON ERRORS.
212 / IF ERROR, AC HAS ERROR CODE FROM MAIN STATUS REGISTER
213 / AC IS POSITIVE IF E.O.F. READ
214
215 MTH, 0 /MUST BE AT 2ND LOC AFTER CALL TO NEXT
216 DCA ERROR /SAVE FUNCTION TEMPORARILY
217 SKTR /V3C
218 JMP .-1 /FIX TIMING BUG
219 CLT /CLEAR THE WORLD
220 TAD MTAWD
221 LCMR /LOAD COMMAND REGISTER
222 TAD I MTH /GET CURRENT ADDRESS
223 LCAR /LOAD IT
224 ISZ MTH /POINT TO WORD COUNT
225 TAD I MTH /GET WORD COUNT (TWO'S COMPLEMENT THEREOF)
226 LWCR /LOAD IT
227 ISZ MTH /POINT TO ERROR MASK
228 TAD ERROR /GET FUNCTION BACK
229 LFGR /GO BABY GO
230 JMS ERROR /CHECK FOR ERROR
231 SKJD /THROUGH?
232 JMP .-2 /NO
233 JMS ERROR /YES, ANY ERRORS?
234 E1, ISZ MTH /AMAZING WE MADE IT (NO ERRORS)
235 JMP I MTH /NORMAL RETURN
236
237 IFNZRO MTH-NBUFF-1 <MTHERR,XXX>
238 \fERROR, 0
239 TAD P7600 /YES
240 KRS /IS IT CTRL/C?
241 TAD M7603 /ALLOW PARITY TELETYPES
242 SNA CLA
243 KSF
244 JMP SIFE
245 CLT /ABORT I/O
246 JMP I P7600 /RETURN TO OS/8 KEYBOARD MONITOR
247 SIFE, SKEF /SKIP ON ERROR
248 JMP I ERROR /RETURN, NO ERRORS
249 RMSR /WHAT'S CAUSING THE ERROR?
250 AND I MTH /IS IT A GOOD ONE? (USE ERROR MASK)
251 SNA CLA /IS ERROR ACCEPTABLE?
252 JMP E1 /YES
253 RMSR /NOT ACCEPTABLE
254 AND L100 /IS IT AN E.O.F.?
255 SNA /IF SO, LEAVE BIT 0 CLEAR
256 RMSR
257 JMP MTEXIT /AND LEAVE WITH STATUS IN AC
258
259 IFZERO .-367&4000 <PERR,ZZXX>
260 \f *366
261 MTHX, MTAVERSION
262 MTA7, ISZ MTANO
263 MTA6, ISZ MTANO
264 MTA5, ISZ MTANO
265 MTA4, ISZ MTANO
266 MTA3, ISZ MTANO
267 MTA2, ISZ MTANO
268 MTA1, ISZ MTANO
269 MTA0, ISZ MTANO
270 JMS PNEXT /GET ADDRESS OF FIRST LOCATION ON NEXT PAGE
271 PAGE
272
273 IFNZRO PARITY-200 <PARERR,ZZZ>
274 \f *400
275
276 NEXT, 0
277 DCA RECNO /READ OR WRITE AND HOW MANY
278 TAD NEXT
279 TAD KSTOP
280 DCA NSTOP /ADDRESS OF RETURN ROUTINES
281 TAD NEXT
282 TAD KBLOK
283 DCA WC
284 TAD I WC
285 DCA WC
286 TAD I NEXT
287 DCA BUFFER /GET BUFFER ADDRESS - 1
288 ISZ NEXT /POINT TO MTH
289 TAD (3677 /V3C
290 DCA ERFLAG /DEFAULT IS REPORT ALL ERRORS EXCEPT EOF
291 TAD RECNO
292 CLL RAL /LINK SPECIFIES READ OR WRITE
293 AND L7600 /-(# OF BLOCKS)^200
294 SNA
295 JMP ZERO /0 PAGE COUNT!
296 DCA RECNO
297 SZL /READ OR WRITE?
298 STL CLA RTR /WRITE. +2000 TO CONVERT READ CODE TO WRITE CODE
299 TAD L2100 /READ (OR WRITE) & GO
300 DCA TEMP /SAVE THIS COMMAND
301 TAD L7600
302 DCA WC /OS/8 USES 128 WORD BLOCKS
303 STA /V3C
304 DCA ERFLAG /NOW DEFAULT IS REPORT ALL ERRORS
305 RL1, TAD TEMP
306 JMS GO
307 TAD BUFFER /NEXT 200 WORDS
308 TAD L200
309 DCA BUFFER
310 TAD RECNO /ANY MORE?
311 TAD L7600
312 SNA
313 JMP I NSTOP /NO, FINISH
314 DCA RECNO /YES, LOOP
315 JMP RL1 /REJOIN PROCESSING
316
317 KSTOP, STOP-NBUFF /USED TO RELOCATE 'STOP'
318
319 KBLOK, NBLOK-NBUFF
320 \fFLAG, 0
321
322 COUNT,
323 TEMP, 0
324
325 EFL2, TAD L5100
326 JMS GO /ALL THIS CODE IS NEW FOR V3C
327 EFL1, TAD L5100
328 JMP GOO /V3C
329
330 GO, 0
331 JMS I NEXT /CALL MTH
332 BUFFER, HLT
333 WC, 0
334 ERFLAG, -1
335 JMP I GO
336
337 L5100, 5100
338 RECNO, 0
339 NSTOP, 0
340 L7, 7
341 L2100, 2100
342 \fZERO, TAD RECNO /RETRIEVE FN WORD (MUST PRESERVE LINK)
343 AND L7 /ISOLATE SPECIAL CODE
344 TAD PJUMP
345 DCA .+1
346 FN, HLT /BRANCH THROUGH JUMP TABLE
347
348 TABLE, JMP EFL2 /0 CLOSE. WRITE TWO EOF'S
349 JMP REW /1 REWIND
350 JMP SPACE /2 SPACE FORWARD/REVERSE RECORDS
351 JMP SEOF /3 SPACE FORWARD/REVERSE FILES
352 JMP UNLOAD /4 REWIND AND OFF-LINE
353 JMP EFL1 /5 WRITE EOF
354 JMP SPEC /6 READ OR WRITE WITH SPECIAL BLOCKSIZE
355 PJUMP, JMP TABLE /7 UNUSED SAME AS 0
356
357 SEOF, RAR /LINK ON MEANS REVERSE
358 RTR
359 DCA FN
360 TAD WC
361 DCA COUNT
362 STA
363 DCA WC
364 RMSR
365 AND (3000 /CHECK BOT BIT
366 SZA CLA /SIMULATE DATA IF AT BOT (OR REWINDING)
367 FILE, CLA IAC
368 FILE2, DCA FLAG
369 TAD FN
370 TAD L6100 /V3C FORWARD [OR BACKSPACE] A RECORD
371 JMS GO
372 RMSR
373 AND P100
374 SNA CLA /SKIP IF FILE MARK FOUND
375 JMP FILE
376 TAD FN
377 TAD FLAG
378 SZA CLA /WAS THERE ANY DATA?
379 JMP CONT /V3C YES, CONTINUE
380 /EITHER SAW DATA OR WAS GOING IN REVERSE
381 STL /NO, BACKSPACE ONE RECORD
382 SPACE, CLA CMA /V3C DON'T TOUCH LINK
383 DCA ERFLAG /ALL ERRORS ARE FATAL
384 RAR /LINK ON MEANS REVERSE (READ BIT)
385 STL RAR
386 STL RAR
387 UNLOAD, TAD P100 /ADD IN 'GO' BIT
388 GOO, JMS GO
389 JMP I NSTOP
390
391 CONT, ISZ COUNT /V3C
392 JMP FILE2 /CONTINUE?
393 JMP I NSTOP /CHECK FOR EOD BEFORE COUNT
394
395 /FLAG .NE. 0 MEANS SAW DATA
396 \fL6100, 6100
397 P100, 100
398 L7600, 7600
399
400 SPEC, CLA CMA /V3C DON'T TOUCH LINK
401 DCA ERFLAG /ALL ERRORS ARE NOW FATAL
402 SZL /LINK STILL CONTAINS READ/WRITE BIT
403 STL CLA RTR
404 TAD L2100 /V3C
405 JMP GOO /V3C
406
407 REW, DCA ERFLAG /NO REWIND ERRORS
408 TAD (1000 /V3C
409 JMP UNLOAD /V3C
410 L200, 200
411 PAGE
412 $
413 \f\v