software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape1 / TD8EB.PA
1 /4 TD8E HANDLER FOR BUILD..TD8E-B
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
12 /
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
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.
26 /
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.
31 /
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34 /DIGITAL.
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 *0
46 -2
47 DEVICE TD8B;DEVICE DTA2;4210;4011;ZBLOCK 2
48 DEVICE TD8B;DEVICE DTA3;4210;4015;ZBLOCK 2
49
50 SDSS=6761 /SKIP ON SINGLE LINE FLAG
51 SDST=6762 /SKIP ON TIME ERROR
52 SDSQ=6763 /SKIP ON QUAD LINE FLAG
53 SDLC=6764 /LOAD TAPE COMMAND REGISTER
54 SDLD=6765 /LOAD DATA REGISTER
55 SDRC=6766 /READ COMMAND REGISTER
56 SDRD=6767 /READ DATA REGISTER
57
58 TDVERSION="D&77
59
60 /V3 CHANGES:
61
62 /1. VERSION # IS NOW 1
63 /2. PARITY ^C IS NOW LEGAL
64 /3. ^C CHECK NO LONGER ADVANCES READER
65
66 /MAINTENANCE RELEASE CHANGES:
67
68 /4. FIXED ^C BUG
69 /5. MADE CODE IMPROVEMENTS
70 /6. FIXED RETRY BUG
71
72
73
74 *200
75
76 NXINIT, 7600 /CLEAR AC HERE!!!
77 JMS I CINIT2
78 BASE2, DCA JINIT
79 JMP JINIT
80 CRDQAD, R4LINE-BASE
81 CINIT2, INIT2-BASE
82 CSELCT, SELECT-BASE
83 CXUNIT, XUNIT-BASE
84 BUFF, 4000 /MUST BE NEGATIVE INITIALLY
85
86
87 DTA0, TDVERSION /ENTRY FOR UNIT 0
88 CLA CLL
89 JMP DTA1X
90 UNIT, 0 /FILLER WORD
91 DTA1, TDVERSION /ENTRY FOR UNIT 1
92 CLA CLL CML
93 TAD DTA1
94 DCA DTA0 /PICK UP ARGS AT DTA0
95 DTA1X, RAR
96 DCA UNIT /UNIT # FROM LINK
97 RDF
98 TAD C6203
99 DCA LEAVE /SET UP EXIT FROM HANDLER
100 JINIT, JMP INIT
101 TAD I DTA0
102 DCA FUNCT /SAVE FUNCTION WORD
103 TAD FUNCT
104 CLL RAL
105 C200, AND CM200 /GET A PAGE COUNT
106 DCA PGCT
107 TAD FUNCT
108 C374, AND C70 /ISOLATE FIELD OF TRANSFER
109 TAD C6203
110 DCA XFIELD
111 ISZ DTA0 /POINT TO BUFFER
112 TAD I DTA0
113 DCA BUFF
114 ISZ DTA0 /POINT TO RECORD
115 TAD I DTA0
116 CLL RAL /CONVERT TO DECTAPE BLOCKS
117 DCA TBLOCK
118 ISZ DTA0 /POINT TO ERROR RET.
119 C6203, CIF CDF 0
120 \f
121 /THE RETURN FROM INIT ZEROES IT
122 CLA CLL CMA RTL
123 DCA ERCNT /3 ERROR TRIES
124 TAD UNIT
125 DCA I CXUNIT
126 JMS I CSELCT /CHECK FOR SELEC ERROR
127 JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR
128 TAD FUNCT
129 CLL RAR
130 JMP GO /OK.. START THE SEARCH
131 TRWCOM, SDST /TIME OR CHECK SUM ERROR?
132 SZA CLA
133 JMP TRY3 /YES TRY UP TO 3 TIMES
134 TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED?
135 TAD CM200
136 SNA
137 JMP EXIT /YES.. DONE THIS TRANSFER
138 DCA PGCT /NEW PAGE COUNT
139 ISZ TBLOCK
140 TAD BUFF
141 TAD C200 /GET NEW BUFFER ADDRESS
142 DCA BUFF
143 CLL CML /FORCE FORWARD MOTION
144 GO, CLA CML RTR /PUT IN DIRECTION BIT
145 TAD C1000
146 TAD UNIT
147 SDLC /INITIATE THE MOTION
148 JMS I CRDQAD /WAIT FOR 8 LINES TO PASS
149 JMS I CRDQAD
150 M20, 7760 /DON'T CARE IF IT DOES SKIP!!!
151 TSRCH, SDSS /WAIT\ f FOR BLOCK MARK OR END ZONE
152 JMP .-1
153 SDRC
154 CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9
155 AND C374 /ISOLATE M.T BITS
156 TAD M110 /IS IT END ZONE?
157 SNA
158 JMP ENDZ /YES..DO SOMETHING REASONABLE
159 TAD M20 /HOW ABOUT BLOCK MARK?
160 SZA CLA
161 JMP TSRCH /NEITHER..KEEP LOOKING
162 SDRD /WHAT IS THIS BLOCK'S #?
163 SZL /IF IN REVERSE, LOOK FOR 3 BEFORE
164 TAD TC3 /THE ACTUAL TARGET BLOCK
165 CMA
166 TAD TBLOCK
167 CMA
168 SNA /IS THIS THE BLOCK?
169 JMP TFOUND /YES..HAVE CORRECT ONE
170 M110, SZL SNA CLA /ARE WE HEADED PROPERLY?
171 JMP TSRCH /YES.. KEEP LOOKING
172 ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE
173 CLL RTL
174 JMP GO /EXECUTE TURN AROUND AND SEARCH
175 \fTRY3, CLA CLL /V3C
176 ISZ ERCNT /TRIED 3 TIMES?
177 JMP GO
178 JMP FATAL
179 EXIT, ISZ DTA0 /NORMAL RETURN
180 CLL CML
181 FATAL, TAD UNIT /STOP TAPE FIRST
182 SDLC
183 CLA CML RAR /EITHER 0 OR 4000 IN AC
184 LEAVE, HLT /GETS CIF CDF N
185 JMP I DTA0
186
187 INIT, JMS . /FIND OUT WHERE WE GOT LOADED
188 BASE, TAD CRDQAD
189 SPA /NEGATIVE ENDS LIST
190 JMP NXINIT
191 TAD INIT
192 DCA CRDQAD
193 ISZ .-1
194 ISZ BASE
195 JMP BASE
196
197 PGCT, 0
198 FUNCT, 0
199 C1000, 1000
200
201 *367
202 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION
203 JMP GO /NOT YET
204 TAD FUNCT
205 CLL RAL /R/W TO LINK
206 CLA
207 C70, 70
208 TC3, 3
209 TAD BUFF
210 XFIELD, HLT /CONTROL 'TRICKLES THROUGH
211
212 TBLOCK=DTA1
213 ERCNT=INIT+1
214 CM200=NXINIT
215 DTA2=DTA0
216 DTA3=DTA1
217 DTA4=DTA0
218 DTA5=DTA1
219 DTA6=DTA0
220 DTA7=DTA1
221 \f *400
222 CIF 0 /WE ARE IN FIELD 0
223 DCA XBUFF
224 RAR
225 DCA XFUNCT /READ/WRITE TO FUNCTION
226 RGRD, SDSS
227 JMP .-1 /LOOK FOR REVERSE GUARD PATTERN
228 SDRC
229 AND K77
230 TAD CM32
231 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING
232 JMP RGRD
233 TAD C7600
234 DCA WORDS /128 WORDS/BLOCK
235 TAD XFUNCT
236 K7700, SMA CLA /IS IT READ OR WRITE?
237 JMP TREAD
238 SDRC /CHECK FOR WRITE LOCKOUT
239 AND TC300
240 CLL /SETUP TO RETRY IF WRITE LOCK
241 SZA CLA
242 JMP I CTRY3 /IF LOCKED OUT, ERROR
243 JMS R4LINE /SKIP A WORD
244 C7600, 7600 /CLA
245 TAD C1400
246 TAD XUNIT
247 SDLC /TURN ON WRITE HEAD
248 CLA CMA
249 JMS W4LINE /7777 IN REV. CHECKSUM
250 CLA CMA
251 DCA CSUM /AND ALSO TAPE CHECKSUM
252 WRTLP, TAD I XBUFF
253 JMS W4LINE
254 ISZ XBUFF /INCREMENT BUFF. ADD.
255 K77, 77
256 ISZ WORDS /DONE A BLOCK?
257 JMP WRTLP
258 JMS W4LINE /A 129 TH WORD OF 0
259 JMS GCHK /GET 6 BIT CHECKSUM
260 JMS W4LINE /WRITE IT TO TAPE
261 JMS W4LINE /LET CHECK SUM FINISH
262 JMP I CRWCOM /SEE IF WE ARE FINISHED
263 \f
264 TREAD, JMS R4LINE
265 JMS R4LINE /SKIP CONTROL WORDS
266 JMS R4LINE
267 AND K77 /CHECKSUM
268 TAD K7700
269 DCA CSUM
270 RDLP, JMS R4LINE
271 JMS EFUN /ADD WORD TO CHECKSUM
272 DCA I XBUFF
273 ISZ XBUFF
274 TC300, 300
275 ISZ WORDS /DONE BLOCK?
276 JMP RDLP
277 JMS R4LINE
278 JMS EFUN /CHECK SUM 129 TH WORD
279 JMS R4LINE
280 AND K7700 /READ CHECKSUM
281 JMS EFUN
282 JMS GCHK /COMPARE TAPE AND OUR CHECKSUM
283 JMP I CRWCOM
284
285 W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT
286 JMS EFUN /WORD
287 SDSQ
288 JMP .-1 /SKIP ON QUAD LINE FLAG
289 SDLD
290 CLA /AC IS NOT CLEARED AFTER SDLD
291 JMP I W4LINE
292
293 R4LINE, 0 /WAIT FOR QUAD FLAG AND READ
294 SDSQ
295 JMP .-1
296 SDRD
297 JMP I R4LINE
298
299 EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM
300 CMA
301 DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE
302 TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD
303 AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE
304 CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME
305 CLL RAL /AND CONDENSE LATER.
306 TAD ETMP /IDENTITIES USED ARE:
307 TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B)
308 DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B)
309 TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B))
310 CMA
311 JMP I EFUN
312
313 \fGCHK, 0 /FORM 6 BIT CHECKSUM
314 CLA
315 TAD CSUM
316 CLL CMA RTL
317 RTL
318 RTL
319 JMS EFUN
320 CLA CLL CML
321 TAD CSUM
322 AND K7700
323 JMP I GCHK
324
325 INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2
326 INIT3, TAD CTRY3
327 SNA
328 JMP I INIT2 /0 ENDS LIST
329 TAD INIT2
330 DCA CTRY3 /UPDATE THE LIST
331 ISZ .-1
332 ISZ INIT3
333 JMP INIT3
334
335 CTRY3, TRY3-BASE2
336 CRWCOM, TRWCOM-BASE2
337 XBUFF, 0 /0 MUST TERMINATE IT!!
338 CM32, -32
339 C1400, 1400
340
341 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT
342 TAD XUNIT /AND ^C TYPED
343 SDLC
344 SDRC /GET STATUS AND SEE IF SELECT ERROR ON
345 AND C100
346 SNA CLA
347 ISZ SELECT /NOPE .TAKE NORMAL OUT
348 KSF /SEE IF FLAG IS UP
349 JMP I SELECT /NO..EXIT
350 TAD C7600
351 KRS
352 TAD (-7603 /IS IT ^C?
353 SZA CLA
354 JMP I SELECT /NO..EXIT
355 JMP I C7600
356
357 C100, 100
358
359 XFUNCT=INIT2
360 CSUM=XFUNCT+1
361 WORDS=CSUM+1
362 ETMP=WORDS+1
363 XUNIT=ETMP+1
364 $$$$$$$
365 \f