1 /4 OS/8 CASSETTE HANDLER
11 /COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
50 / DIGITAL EQUIPMENT CORPORATION
52 / MAYNARD MASSACHUSETTS 01754
58 KCLR=CODE^10+6700 /CLEAR ALL
59 KSDR=CODE^10+6701 /SKIP ON DATA FLAG
60 KSEN=CODE^10+6702 /SKIP ON ERROR
61 KSBF=CODE^10+6703 /SKIP ON READY FLAG
62 KLSA=CODE^10+6704 /LOAD STATUS A
63 KSAF=CODE^10+6705 /SKIP ON ANY FLAG OR ERROR
64 KGOA=CODE^10+6706 /ASSERT CONTENTS OF STATUS A AND XFER
65 KRSB=CODE^10+6707 /READ STATUS B
67 BSW=7002 /BYTE SWAP [8/E,F ONLY]
82 / 4-7 UNUSED (TAKES LOW ORDER 2 BITS ONLY CURRENTLY)
87 -2 /THERE ARE TWO HANDLERS
93 270 /DEVICE CONTROL BLOCK (TYPE 27)
94 4000+7 /ENTRY POINT FOR CSA0
102 4000+1 /ENTRY POINT FOR CSA1
106 K3700, 3700 /MUST BE FIRST LOCATION ON PAGE
108 CSA1, VERSION /ENTRY POINT FOR CSA1
109 CLA /PROTECT CODE AGAINST IGNORANT USERS
110 TAD CSA1 /PICK UP ARGUMENTS
112 STL IAC RAL /TAD (3 [8/I,L,E,F]
113 JMP .+3 /JOIN PROCESSING WITH UNIT 1
114 CSA0, VERSION /ENTRY POINT FOR CSA0
117 DCA UNIT /SAVE UNIT (0 IS 200, 1 IS 300)
118 CS, JMS T /INITIALIZATION; REPLACED BY RDF
119 TAD KCIF /FORM RETURN FIELD INSTRUCTION
120 DCA RETCIF /STORE IN RETURN CODE
121 TAD I CSA0 /GET FUNCTION CONTROL WORD
123 TAD FUN /GET IT BACK AGAIN
124 AND K70 /ISOLATE FIELD OF BUFFER
125 TAD KCDF /FORM CDF TO FIELD OF BUFFER
126 DCA BUFCDF /STORE IN APPROPRIATE SPOT
127 ISZ CSA0 /POINT TO ARGUMENT 2
128 TAD I CSA0 /GET BUFFER ADDRESS
130 ISZ CSA0 /POINT TO ARGUMENT 3
131 TAD I CSA0 /GET BLOCK NUMBER
132 ISZ CSA0 /POINT TO ERROR RETURN
133 KCIF, CIF CDF 0 /SEEK TEMPORARY SAFETY IN CURRENT DATA FIELD
135 JMP NOT1ST /NOT BLOCK 0
136 STL CLA RAR /TAD (4000
137 AND FUN /ISOLATE READ/WRITE BIT
138 TAD UNIT /INSERT UNIT
139 JMS I QCAS /CALL CASSETTE ROUTINE
140 REWIND-. /TO PERFORM A REWIND/INITIALIZATION
142 K200, AND K3700 /ISOLATE NUMBER OF BLOCKS TO XFER
144 JMP SPCASE /0 BLOCKS MEANS SPECIAL THING (EOF)
145 RECLP, DCA BLKNT /SET COUNT OF NUMBER OF BLOCKS
146 STL CLA RAR /TAD (4000
147 AND FUN /ISOLATE READ/WRITE BIT
148 TAD UNIT /INSERT UNIT
149 JMS I QCAS /CALL CASSETTE ROUTINE
150 RW-. /TO INITIATE READ OR WRITE
151 RETRY, SZA /NON-ZERO AC MEANS ERROR
152 JMP RETCIF /TOUGH LUCK BOOBIE - ERROR
153 TAD K7700 /GET READY TO XFER 100 DOUBLE WORDS
154 DCA DBWDCT /SET DOUBLE WORD COUNTER
155 TAD BUFFER /GET START OF BUFFER SEGMENT
157 BUFCDF, HLT /CHANGE TO DATA FIELD OF USER'S BUFFER
159 K7700, SMA CLA /WHICH DIRECTION IS TRANSFER?
160 JMP READ /WANT TO READ
161 \fWRITE, TAD I BPTR /WANT TO WRITE, SO GET WORD FROM BUFFER
163 TAD I BPTR /GET FIRST WORD AGAIN
164 AND P7400 /ISOLATE FIRST HALF OF BYTE 3
165 DCA T /SAVE FOR FUTURE REFERENCE
166 ISZ BPTR /POINT TO NEXT LOCATION IN BUFFER
167 TAD I BPTR /GET SECOND WORD OF BUFFER PAIR
168 JMS I QGPCH /WRITE BYTE #2
169 TAD I BPTR /RETRIEVE WORD 2
170 AND P7400 /ISOLATE 2ND HALF OF BYTE #3
171 CLL RTR /CREATE MYSTIC HIDDEN BYTE 3
173 TAD T /GOOD THING I STILL HAVE THIS
176 JMS I QGPCH /WRITE BYTE #3
178 \fREAD, JMS I QGPCH /READ BYTE #1 OF TRIPLE
179 DCA I BPTR /STORE IN WORD 1 OF BUFFER PAIR
180 JMS I QGPCH /READ BYTE #2 OF TRIPLE
181 DCA T /SAVE IT FOR POSTERITY
182 JMS I QGPCH /READ BYTE #3 OF TRIPLE
187 AND P7400 /AND MYSTIC CONSTANTS
188 TAD I BPTR /FIX UP BUFFER WORD 1 OF PAIR
195 ISZ BPTR /POINT TO SECOND WORD OF BUFFER PAIR
196 DCA I BPTR /STORE SECOND WORD
197 COM, ISZ BPTR /POINT TO BEGIN OF NEXT BUFFER PAIR
198 P7400, 7400 /PROTECTION AGAINST CORE WRAP AROUND
199 ISZ DBWDCT /BUMP DOUBLE WORD COUNT
200 JMP BUFCDF /REITERATE
201 JMS I QCAS /CALL CASSETTE ROUTINE
203 TAD BUFFER /GET BUFFER SEGMENT ADDRESS
204 TAD K200 /ADD 200 TO GET TO NEXT SEGMENT
206 TAD BLKNT /GET BLOCK COUNT
207 TAD K7700 /SUBTRAT 100
209 JMP RECLP /NO, REITERATE
210 ISZ CSA0 /POINT TO NORMAL GOOD RETURN
211 RETCIF, HLT /RETURN TO USER'S DATA AND INSTRUCTION FIELDS
213 \f/ INTIALIZATION ROUTINE - ONCE ONLY CODE
214 / OVERLAID BY TEMPORARIES
216 T, 0 /ENTRY POINT TO INITIALIZATION
217 T2, TAD KRDF /REPLACE CALL BY RDF
218 FUN, DCA CS /SO THAT WE'LL NEVER SEE YOU HERE AGAIN
219 BUFFER, TAD T /CORRECT ADDRESS OF GPCH
220 DBWDCT, TAD KQX1 /BY ADDING IN CS+1
221 QGPCH, DCA . /STORE IT HERE
222 BLKNT, STL CLA RTL /CORRECT ADDRESS OF CAS IS 2 MORE
224 QCAS, DCA . /THAN GPCH. STORE IT HERE.
225 BPTR, JMP CS /RETURN TO MAIN PROGRAM
230 AND L4003 /ISOLATE R/W BIT + SPECIAL CODE
234 JMP RETCIF-1 /LEAVE GRACEFULLY
239 \fGPCH, 0 /READ OR WRITE A BYTE
240 JMP AROUND /GO TO REAL LOCATION OF THIS SUBROUTINE
241 CAS, 0 /MUST BE AT GPCH+2; DO CASSETTE STUFF
242 DCA TEMP /SAVE ARGUMENT IN AC
244 TAD I CAS /GET UNRELOCATED RELATIVE LOCAL ENTRY POINT
246 ISZ CAS /POINT TO NORMAL RETURN LOCATION
247 DCA GPCH /SAVE ENTRY POINT IN TEMPORARY
248 JMP I GPCH /GO TO CORRECT ENTRY POINT
251 DCA RTRY /SAVE RETRY ADDRESS
252 TAD TEMP /GET ARGUMENT PASSED VIA AC
254 CLL STA RTL /TAD (7775
255 DCA ERKNT /SET ERROR COUNT TO -3
258 TAD (20 /READ CODE IS 0; WRITE IS 20
260 TAD FNUNIT /***KLSA CLEARS BIT 0
261 SMA CLA /READS HAVE TO BE INITIATED
274 TAD TEMP /GET CHAR JUST READ
275 JMP I GPCH /RETURN WITH IT IN AC
278 KLSA /INITIATE READ/WRITE CRC
279 TAD FNUNIT /***KLSA CLEARS BIT 0
281 JMS CWAIT /HAVE TO READ TWICE
282 JMS CWAIT /WRITE CRC WRITES BOTH
290 JMP I CAS /MERELY REWIND IF READING
309 JMP TRYAGN /KEEP TRYING IF ERROR CAUSED BY DRIVE EMPTY
325 TABLE, JMP EOF /0 WRITE EOF
326 JMP REWIND /1 REWIND AND WRITE EOF IF BIT 0=1
327 JMP BACKBL /2 BACK BLOCK
328 TAD TEMP /3 SKIP/BACK FILE DEPENDING ON BIT 0
330 JMP SKIPF /FORWARD FILE
333 KGOA /ASSERT CONTENTS OF STATUS A
334 DCA TEMP /SAVE ANYTHING READ
337 JMP .-2 /WAIT FOR SOMETHING TO HAPPEN
338 KSEN /WAS IT AN ERROR?
339 JMP I CWAIT /NO, SO RETURN
340 ERR, DCA TEMP /YES ... ERROR
346 JMP I RTRY /END OF FILE IS SOFT ERROR
347 ISZ ERKNT /SHALL WE TRY AGAIN?
349 STL CLA RAR /TAD (4000
350 JMP I RTRY /RETURN WITH NON-ZERO AC
352 TAD (50 /BUT FIRST DO BACKSPACE BLOCK GAP
356 CTCTST, 0 /TEST FOR CONTROL/C
365 JMP I L7600 /RETURN TO OS/8