Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape3 / TM8E.PA
CommitLineData
7af5ad59
PH
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
106DEVICE TM8E;DEVICE MTA0;200;MTA0&177+4000;ZBLOCK 2
107DEVICE TM8E;DEVICE MTA1;200;MTA1&177+4000;ZBLOCK 2
108DEVICE TM8E;DEVICE MTA2;200;MTA2&177+4000;ZBLOCK 2
109DEVICE TM8E;DEVICE MTA3;200;MTA3&177+4000;ZBLOCK 2
110DEVICE TM8E;DEVICE MTA4;200;MTA4&177+4000;ZBLOCK 2
111DEVICE TM8E;DEVICE MTA5;200;MTA5&177+4000;ZBLOCK 2
112DEVICE TM8E;DEVICE MTA6;200;MTA6&177+4000;ZBLOCK 2
113DEVICE TM8E;DEVICE MTA7;200;MTA7&177+4000;ZBLOCK 2
114\f *200
115
116PARITY, 402 /CHANGE TO 2 TO HAVE EVEN PARITY
117BLOCK0, 0 /SET TO 1 TO INHIBIT REWIND ON BLOCK 0
118MTATAD, TAD MTA0 /USED TO MAKE HANDLER SERIALLY REUSABLE
119 /CONTENTS MUST BE 13XX [V3C]
120MTISZ, ISZ MTANO /DITTO
121STOP, ISZ MTHX
122MTEXIT, HLT /CIF CDF TO USER'S FIELD
123 JMP I MTHX
124
125PNEXT, 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
131MTFUN, 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
137NBLOK, 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
151MTCDIF, 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
165USRCDF,
166MTANO, 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
177MCLRLP, ISZ ERROR
178L100, 100
179 DCA I ERROR
180 ISZ MTH
181 JMP MCLRLP
182P7600, 7600
183MTCDF, 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
191MTAWD, 1000 /CA IMMATERIAL
192M7603, -7603 /WC IMMATERIAL
193L70, 70 /NO REWIND ERRORS (THESE CAN'T OCCUR)
194BIGBLK, TAD MTFUN
195 JMS I PNEXT /GO READ OR WRITE NEXT PAGE
196NBUFF, 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
215MTH, 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?
234E1, 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
247SIFE, 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
261MTHX, MTAVERSION
262MTA7, ISZ MTANO
263MTA6, ISZ MTANO
264MTA5, ISZ MTANO
265MTA4, ISZ MTANO
266MTA3, ISZ MTANO
267MTA2, ISZ MTANO
268MTA1, ISZ MTANO
269MTA0, 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
276NEXT, 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
305RL1, 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
317KSTOP, STOP-NBUFF /USED TO RELOCATE 'STOP'
318
319KBLOK, NBLOK-NBUFF
320\fFLAG, 0
321
322COUNT,
323TEMP, 0
324
325EFL2, TAD L5100
326 JMS GO /ALL THIS CODE IS NEW FOR V3C
327EFL1, TAD L5100
328 JMP GOO /V3C
329
330GO, 0
331 JMS I NEXT /CALL MTH
332BUFFER, HLT
333WC, 0
334ERFLAG, -1
335 JMP I GO
336
337L5100, 5100
338RECNO, 0
339NSTOP, 0
340L7, 7
341L2100, 2100
342\fZERO, TAD RECNO /RETRIEVE FN WORD (MUST PRESERVE LINK)
343 AND L7 /ISOLATE SPECIAL CODE
344 TAD PJUMP
345 DCA .+1
346FN, HLT /BRANCH THROUGH JUMP TABLE
347
348TABLE, 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
355PJUMP, JMP TABLE /7 UNUSED SAME AS 0
356
357SEOF, 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)
367FILE, CLA IAC
368FILE2, 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
382SPACE, 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
387UNLOAD, TAD P100 /ADD IN 'GO' BIT
388GOO, JMS GO
389 JMP I NSTOP
390
391CONT, 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
397P100, 100
398L7600, 7600
399
400SPEC, 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
407REW, DCA ERFLAG /NO REWIND ERRORS
408 TAD (1000 /V3C
409 JMP UNLOAD /V3C
410L200, 200
411 PAGE
412 $
413\f\v