1 /16 TM8-E MAGTAPE HANDLER FOR OS/8
14 /COPYRIGHT (C) 1973,1974,1975 BY DIGITAL EQUIPMENT CORPORATION
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.
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.
35 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
36 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
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)
56 /SPECIAL CODES USED WHEN PAGE COUNT=0 (CODES IN BITS 9-11 OF FN WORD)
58 /0 (CLOSE) WRITE 2 EOF'S
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
82 /6 PERFORM OPERATION WITH SPECIFIED BLOCKSIZE
83 / THE NEGATIVE OF THE DESIRED BLOCKSIZE IS SPECIFIED AS ARG 3.
86 /NOTE: SKIP TO EOD CAN BE PERFORMED BY SKIPPING 4096 FILES
88 /MAINTENANCE RELEASE CHANGES:
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
100 /BUILD DESCRIPTOR BLOCK
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
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
122 MTEXIT, HLT /CIF CDF TO USER'S FIELD
127 TAD MTANO /GET UNIT #
129 TAD MTATAD /FIND WHICH ENTRY POINT
130 DCA MTFUN /MAKE A 'TAD MTAN' AND EXECUTE IT
132 DCA MTHX /COLLECT ARGUMENTS VIA 'MTHX'
134 TAD MTFUN /MAKE A 'DCA MTAN' AND EXECUTE IT
136 TAD MTISZ /RESTORE DESTROYED ISZ
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
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
167 DCA MTANO /RESET 'MTANO' FOR NEXT CALL
170 AND P7600 /GET # OF WORDS IN BUFFER
171 SNA SZL /ZERO BUFFER IF READING
185 SNA /OPERATE IN MULTIPLE-FILE MODE?
186 TAD NBLOK /RETRIEVE BLOCK
187 SZA CLA /IS IT BLOCK 0?
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)
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
200 /SET UP WC AND CA REGISTERS, LOAD FUNCTION AND GO
208 / MASK FOR UNACCEPTABLE ERROR CONDITIONS
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
215 MTH, 0 /MUST BE AT 2ND LOC AFTER CALL TO NEXT
216 DCA ERROR /SAVE FUNCTION TEMPORARILY
218 JMP .-1 /FIX TIMING BUG
221 LCMR /LOAD COMMAND REGISTER
222 TAD I MTH /GET CURRENT ADDRESS
224 ISZ MTH /POINT TO WORD COUNT
225 TAD I MTH /GET WORD COUNT (TWO'S COMPLEMENT THEREOF)
227 ISZ MTH /POINT TO ERROR MASK
228 TAD ERROR /GET FUNCTION BACK
230 JMS ERROR /CHECK FOR ERROR
233 JMS ERROR /YES, ANY ERRORS?
234 E1, ISZ MTH /AMAZING WE MADE IT (NO ERRORS)
235 JMP I MTH /NORMAL RETURN
237 IFNZRO MTH-NBUFF-1 <MTHERR,XXX>
241 TAD M7603 /ALLOW PARITY TELETYPES
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?
254 AND L100 /IS IT AN E.O.F.?
255 SNA /IF SO, LEAVE BIT 0 CLEAR
257 JMP MTEXIT /AND LEAVE WITH STATUS IN AC
259 IFZERO .-367&4000 <PERR,ZZXX>
270 JMS PNEXT /GET ADDRESS OF FIRST LOCATION ON NEXT PAGE
273 IFNZRO PARITY-200 <PARERR,ZZZ>
277 DCA RECNO /READ OR WRITE AND HOW MANY
280 DCA NSTOP /ADDRESS OF RETURN ROUTINES
287 DCA BUFFER /GET BUFFER ADDRESS - 1
288 ISZ NEXT /POINT TO MTH
290 DCA ERFLAG /DEFAULT IS REPORT ALL ERRORS EXCEPT EOF
292 CLL RAL /LINK SPECIFIES READ OR WRITE
293 AND L7600 /-(# OF BLOCKS)^200
295 JMP ZERO /0 PAGE COUNT!
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
302 DCA WC /OS/8 USES 128 WORD BLOCKS
304 DCA ERFLAG /NOW DEFAULT IS REPORT ALL ERRORS
307 TAD BUFFER /NEXT 200 WORDS
313 JMP I NSTOP /NO, FINISH
315 JMP RL1 /REJOIN PROCESSING
317 KSTOP, STOP-NBUFF /USED TO RELOCATE 'STOP'
326 JMS GO /ALL THIS CODE IS NEW FOR V3C
342 \fZERO, TAD RECNO /RETRIEVE FN WORD (MUST PRESERVE LINK)
343 AND L7 /ISOLATE SPECIAL CODE
346 FN, HLT /BRANCH THROUGH JUMP TABLE
348 TABLE, JMP EFL2 /0 CLOSE. WRITE TWO EOF'S
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
357 SEOF, RAR /LINK ON MEANS REVERSE
365 AND (3000 /CHECK BOT BIT
366 SZA CLA /SIMULATE DATA IF AT BOT (OR REWINDING)
370 TAD L6100 /V3C FORWARD [OR BACKSPACE] A RECORD
374 SNA CLA /SKIP IF FILE MARK FOUND
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)
387 UNLOAD, TAD P100 /ADD IN 'GO' BIT
393 JMP I NSTOP /CHECK FOR EOD BEFORE COUNT
395 /FLAG .NE. 0 MEANS SAW DATA
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
407 REW, DCA ERFLAG /NO REWIND ERRORS