Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /2 OS/8 TERTIARY CASSETTE BOOTSTRAP V5 |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | / | |
10 | / | |
11 | /COPYRIGHT (C) 1973,1974 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 | \f VERSON= 5 | |
46 | SUBVER= 01 /SUBVERSION A = 01, ETC | |
47 | ||
48 | BINARY=6200 | |
49 | ||
50 | FIELD 1 | |
51 | ||
52 | *5200 | |
53 | ||
54 | CIF CDF 0 /THE SECONDARY BOOTSTRAP BRANCHES HERE OF ALL PLACES | |
55 | JMP I .+1 | |
56 | C3STRT /WE WANT TO BE HERE | |
57 | ||
58 | ||
59 | ||
60 | /EXPLANATION: | |
61 | ||
62 | /THE PRIMARY (KEY-IN) BOOTSTRAP CONSISTS OF 32 WORDS | |
63 | /AND IS AWFUL PRIMITIVE. IT BARELY MANAGES TO READ IN THE | |
64 | /SECONDARY BOOTSTRAP. | |
65 | /THE SECONDARY BOOTSTRAP CONTAINS A FULL-FLEDGED BINARY LOADER | |
66 | /AND IS USED TO READ IN THE NEXT FILE INTO CORE | |
67 | /(BUT NOT OVER ITSELF (LOCS 3600-4040)) AND DOES LITTLE IF ANY | |
68 | /I/O ERROR CHECKING. THIS NEXT FILE IS IN FACT THE TERTIARY BOOTSTRAP. | |
69 | /THE SECONDARY BOOTSTRAP STARTS UP THE TERTIARY BOOTSTRAP AT | |
70 | /LOCATION 15200 WHICH THEN CONTAINS ANOTHER FULL-FLEDGED BINARY LOADER | |
71 | /AND IN ADDITION A COMPLETE TWO-PAGE CASSETTE HANDLER. | |
72 | /THIS TERTIARY BOOTSTRAP RESIDES IN BUFFER SPACE OF BUILD AND | |
73 | /READS IN BUILD WITH FULL I/O ERROR CHECKING. | |
74 | /WHEN IT IS THROUGH, IT BRANCHES TO BUILD AT LOCATION 02000. | |
75 | ||
76 | /RECORD SIZES: | |
77 | ||
78 | /C2BOOT MUST BE 200 BYTES/RECORD | |
79 | /C3BOOT MUST BE 200 BYTES/RECORD | |
80 | /BUILD MUST BE 300 BYTES/RECORD | |
81 | /OS8 MUST BE 300 BYTES/RECORD | |
82 | /CD MUST BE 300 BYTES/RECORD | |
83 | /MCPIP MUST BE 300 BYTES/RECORD | |
84 | /OTHER CUSPS CAN BE ANY RECORD SIZE. | |
85 | ||
86 | /C2BOOT AND C3BOOT MUST BE 200 BYTES/RECORD BECAUSE THAT'S WHAT THE PRIMARY BOOT READS. | |
87 | /THE ONES WHICH MUST BE 300 BYTES/RECORD ARE SUCH BECAUSE | |
88 | /THEY ARE USING THE OS/8 CASSETTE HANDLER TO READ IN. | |
89 | /OTHERS ARE READ IN BY MCPIP AND CAN BE ANY RECORD SIZE. | |
90 | \f FIELD 0 | |
91 | ||
92 | *5400 | |
93 | ||
94 | C3STRT, CLA | |
95 | JMS I (CSA0 | |
96 | 3 /SKIP FILE | |
97 | L7400, 7400 | |
98 | L200, 200 | |
99 | M200, -200 | |
100 | JMS I (CSA0 | |
101 | 100 /SKIP HEADER BY READING PAST IT | |
102 | ||
103 | BINARY | |
104 | M301, -301 | |
105 | SKP CLA /ERROR IS OK | |
106 | HLT /GOOD READ IS BAD | |
107 | LDABS2, DCA CKSUM | |
108 | JMS GCHAR | |
109 | SNA | |
110 | JMP .-2 /IGNORE BLANKS | |
111 | TAD M200 | |
112 | SZA CLA /IS IT LEADER? | |
113 | HLT /NOT BINARY | |
114 | LEADER, JMS GCHAR | |
115 | TAD M200 /STILL LEADER? | |
116 | SNA | |
117 | JMP LEADER /YES | |
118 | NEWWD, SMA /IS IT LESS THAN 200? | |
119 | JMP FIELDW /NO, IT'S A FIELD SETTING | |
120 | TAD L200 /RESTORE CHAR | |
121 | DCA WD1 | |
122 | JMS GCHAR | |
123 | DCA WD2 | |
124 | JMS GCHAR | |
125 | TAD M200 | |
126 | SNA | |
127 | JMP OVER /200 FINISHES US UP | |
128 | DCA WD /SAVE NEXT WORD FOR LATER | |
129 | JMS ASSEMB /ASSEMBLE PREVIOUS WORD | |
130 | SZL /IS IT AN ORIGIN? | |
131 | JMP ORG /YES | |
132 | XFIELD, CDF 0 /ASSUMES BUILD STARTS IN FIELD 0 | |
133 | DCA I ORIGIN | |
134 | CDF0, CDF 0 | |
135 | TAD ORIGIN | |
136 | IAC | |
137 | ORG, DCA ORIGIN | |
138 | NEXT, TAD WD1 | |
139 | TAD WD2 /MAKE UP CHECKSUM | |
140 | TAD CKSUM | |
141 | DCA CKSUM | |
142 | TAD WD | |
143 | JMP NEWWD | |
144 | L70, 70 | |
145 | \fFIELDW, AND L70 /EXTRACT FIELD SETTING | |
146 | TAD CDF0 | |
147 | DCA XFIELD | |
148 | JMS GCHAR | |
149 | TAD M200 | |
150 | SZA | |
151 | JMP NEWWD | |
152 | OVER, JMS ASSEMB | |
153 | CIA | |
154 | TAD CKSUM | |
155 | SZA CLA | |
156 | HLT /BAD CHECKSUM | |
157 | JMP I L200 /START BUILD | |
158 | ||
159 | ASSEMB, 0 | |
160 | TAD WD1 | |
161 | CLL RTL | |
162 | RTL | |
163 | RTL | |
164 | TAD WD2 | |
165 | JMP I ASSEMB | |
166 | ||
167 | ORIGIN, 0 | |
168 | WD1, 0 | |
169 | WD2, 0 | |
170 | WD, 0 | |
171 | CKSUM, 0 | |
172 | \fCHCNT, -1 | |
173 | CHPTR, BINBUF | |
174 | ||
175 | GCHAR, 0 | |
176 | ISZ JMPGET /POINT TO CORRECT ROUTINE | |
177 | ISZ CHCNT /NEED WE READ? | |
178 | JMPX, JMP JMPGET /NOT YET | |
179 | JMS I (CSA0 /CALL HANDLER | |
180 | 100 /READ ONE PAGE | |
181 | BINBUF, BINARY | |
182 | L377, 377 /DUMMY BLOCK NO. | |
183 | HLT /I/O ERROR | |
184 | TAD M301 | |
185 | DCA CHCNT /NEW CHAR COUNT | |
186 | TAD BINBUF | |
187 | DCA CHPTR | |
188 | TAD JMPX | |
189 | DCA JMPGET | |
190 | JMP GCHAR+1 | |
191 | JMPGET, JMP . | |
192 | JMP CHAR1 | |
193 | JMP CHAR2 | |
194 | TAD JMPX | |
195 | DCA JMPGET | |
196 | TAD I CHPTR | |
197 | AND L7400 | |
198 | CLL RTR | |
199 | RTR | |
200 | TAD CHTMP | |
201 | RTR | |
202 | RTR | |
203 | ISZ CHPTR | |
204 | JMP GCHCOM | |
205 | ||
206 | CHTMP, 0 | |
207 | ||
208 | CHAR2, TAD I CHPTR | |
209 | AND L7400 | |
210 | DCA CHTMP | |
211 | ISZ CHPTR | |
212 | CHAR1, TAD I CHPTR | |
213 | GCHCOM, AND L377 | |
214 | JMP I GCHAR | |
215 | PAGE | |
216 | \f CODE=0 | |
217 | ||
218 | KCLR=CODE^10+6700 /CLEAR ALL | |
219 | KSDR=CODE^10+6701 /SKIP ON DATA FLAG | |
220 | KSEN=CODE^10+6702 /SKIP ON ERROR | |
221 | KSBF=CODE^10+6703 /SKIP ON READY FLAG | |
222 | KLSA=CODE^10+6704 /LOAD STATUS A | |
223 | KSAF=CODE^10+6705 /SKIP ON ANY FLAG OR ERROR | |
224 | KGOA=CODE^10+6706 /ASSERT CONTENTS OF STATUS A AND XFER | |
225 | KRSB=CODE^10+6707 /READ STATUS B | |
226 | ||
227 | BSW=7002 /BYTE SWAP [8/E,F ONLY] | |
228 | ||
229 | /REWIND=10 | |
230 | /BACKFIL=30 | |
231 | /WRGAP=40 | |
232 | /BACKBLOCK=50 | |
233 | /SKPFIL=70 | |
234 | ||
235 | /SPECIAL CODES | |
236 | ||
237 | / 0 WRITE EOF | |
238 | / 1 REWIND | |
239 | / 3 SKIPFILE/BACKFILE | |
240 | / 2 BACKBLOCK | |
241 | ||
242 | / 4-7 UNUSED (TAKES LOW ORDER 2 BITS ONLY CURRENTLY) | |
243 | ||
244 | VERSION="B&77 /MODIFIED | |
245 | \fK3700, 3700 /MUST BE FIRST LOCATION ON PAGE | |
246 | UNIT, | |
247 | CSA1, VERSION /ENTRY POINT FOR CSA1 | |
248 | CLA /PROTECT CODE AGAINST IGNORANT USERS | |
249 | TAD CSA1 /PICK UP ARGUMENTS | |
250 | DCA CSA0 /VIA CSA0 | |
251 | STL IAC RAL /TAD (3 [8/I,L,E,F] | |
252 | JMP .+3 /JOIN PROCESSING WITH UNIT 1 | |
253 | CSA0, VERSION /ENTRY POINT FOR CSA0 | |
254 | STL CLA RTL /TAD (2 | |
255 | BSW / [8/E,F] | |
256 | DCA UNIT /SAVE UNIT (0 IS 200, 1 IS 300) | |
257 | CS, JMS T /INITIALIZATION; REPLACED BY RDF | |
258 | TAD KCIF /FORM RETURN FIELD INSTRUCTION | |
259 | DCA RETCIF /STORE IN RETURN CODE | |
260 | TAD I CSA0 /GET FUNCTION CONTROL WORD | |
261 | DCA FUN /SAVE IT | |
262 | TAD FUN /GET IT BACK AGAIN | |
263 | AND K70 /ISOLATE FIELD OF BUFFER | |
264 | TAD KCDF /FORM CDF TO FIELD OF BUFFER | |
265 | DCA BUFCDF /STORE IN APPROPRIATE SPOT | |
266 | ISZ CSA0 /POINT TO ARGUMENT 2 | |
267 | TAD I CSA0 /GET BUFFER ADDRESS | |
268 | DCA BUFFER /SAVE IT | |
269 | ISZ CSA0 /POINT TO ARGUMENT 3 | |
270 | TAD I CSA0 /GET BLOCK NUMBER | |
271 | ISZ CSA0 /POINT TO ERROR RETURN | |
272 | KCIF, CIF CDF 0 /SEEK TEMPORARY SAFETY IN CURRENT DATA FIELD | |
273 | SZA CLA | |
274 | JMP NOT1ST /NOT BLOCK 0 | |
275 | STL CLA RAR /TAD (4000 | |
276 | AND FUN /ISOLATE READ/WRITE BIT | |
277 | TAD UNIT /INSERT UNIT | |
278 | JMS I QCAS /CALL CASSETTE ROUTINE | |
279 | REWIND-. /TO PERFORM A REWIND/INITIALIZATION | |
280 | NOT1ST, TAD FUN | |
281 | K200, AND K3700 /ISOLATE NUMBER OF BLOCKS TO XFER | |
282 | SNA | |
283 | JMP SPCASE /0 BLOCKS MEANS SPECIAL THING (EOF) | |
284 | RECLP, DCA BLKNT /SET COUNT OF NUMBER OF BLOCKS | |
285 | STL CLA RAR /TAD (4000 | |
286 | AND FUN /ISOLATE READ/WRITE BIT | |
287 | TAD UNIT /INSERT UNIT | |
288 | JMS I QCAS /CALL CASSETTE ROUTINE | |
289 | RW-. /TO INITIATE READ OR WRITE | |
290 | RETRY, SZA /NON-ZERO AC MEANS ERROR | |
291 | JMP RETCIF /TOUGH LUCK BOOBIE - ERROR | |
292 | TAD K7700 /GET READY TO XFER 100 DOUBLE WORDS | |
293 | DCA DBWDCT /SET DOUBLE WORD COUNTER | |
294 | TAD BUFFER /GET START OF BUFFER SEGMENT | |
295 | DCA BPTR /SET 'BPTR' | |
296 | BUFCDF, HLT /CHANGE TO DATA FIELD OF USER'S BUFFER | |
297 | TAD FUN | |
298 | K7700, SMA CLA /WHICH DIRECTION IS TRANSFER? | |
299 | JMP READ /WANT TO READ | |
300 | \fWRITE, TAD I BPTR /WANT TO WRITE, SO GET WORD FROM BUFFER | |
301 | JMS I QGPCH /WRITE | |
302 | TAD I BPTR /GET FIRST WORD AGAIN | |
303 | AND P7400 /ISOLATE FIRST HALF OF BYTE 3 | |
304 | DCA T /SAVE FOR FUTURE REFERENCE | |
305 | ISZ BPTR /POINT TO NEXT LOCATION IN BUFFER | |
306 | TAD I BPTR /GET SECOND WORD OF BUFFER PAIR | |
307 | JMS I QGPCH /WRITE BYTE #2 | |
308 | TAD I BPTR /RETRIEVE WORD 2 | |
309 | AND P7400 /ISOLATE 2ND HALF OF BYTE #3 | |
310 | CLL RTR /CREATE MYSTIC HIDDEN BYTE 3 | |
311 | RTR | |
312 | TAD T /GOOD THING I STILL HAVE THIS | |
313 | CLL RTR | |
314 | RTR | |
315 | JMS I QGPCH /WRITE BYTE #3 | |
316 | JMP COM | |
317 | \fREAD, JMS I QGPCH /READ BYTE #1 OF TRIPLE | |
318 | DCA I BPTR /STORE IN WORD 1 OF BUFFER PAIR | |
319 | JMS I QGPCH /READ BYTE #2 OF TRIPLE | |
320 | DCA T /SAVE IT FOR POSTERITY | |
321 | JMS I QGPCH /READ BYTE #3 OF TRIPLE | |
322 | RTL | |
323 | RTL /MYSTIC ROTATES | |
324 | DCA T2 | |
325 | TAD T2 | |
326 | AND P7400 /AND MYSTIC CONSTANTS | |
327 | TAD I BPTR /FIX UP BUFFER WORD 1 OF PAIR | |
328 | DCA I BPTR | |
329 | TAD T2 | |
330 | RTL | |
331 | RTL /MORE ROTATION | |
332 | AND P7400 /AND MORE | |
333 | TAD T | |
334 | ISZ BPTR /POINT TO SECOND WORD OF BUFFER PAIR | |
335 | DCA I BPTR /STORE SECOND WORD | |
336 | COM, ISZ BPTR /POINT TO BEGIN OF NEXT BUFFER PAIR | |
337 | P7400, 7400 /PROTECTION AGAINST CORE WRAP AROUND | |
338 | ISZ DBWDCT /BUMP DOUBLE WORD COUNT | |
339 | JMP BUFCDF /REITERATE | |
340 | JMS I QCAS /CALL CASSETTE ROUTINE | |
341 | CRC-. /TO CHECK CRC | |
342 | TAD BUFFER /GET BUFFER SEGMENT ADDRESS | |
343 | TAD K200 /ADD 200 TO GET TO NEXT SEGMENT | |
344 | DCA BUFFER /REPLACE | |
345 | TAD BLKNT /GET BLOCK COUNT | |
346 | TAD K7700 /SUBTRAT 100 | |
347 | SZA /ARE WE DONE? | |
348 | JMP RECLP /NO, REITERATE | |
349 | ISZ CSA0 /POINT TO NORMAL GOOD RETURN | |
350 | RETCIF, HLT /RETURN TO USER'S DATA AND INSTRUCTION FIELDS | |
351 | JMP I CSA0 /RETURN | |
352 | \f/ INTIALIZATION ROUTINE - ONCE ONLY CODE | |
353 | / OVERLAID BY TEMPORARIES | |
354 | ||
355 | T, 0 /ENTRY POINT TO INITIALIZATION | |
356 | T2, TAD KRDF /REPLACE CALL BY RDF | |
357 | FUN, DCA CS /SO THAT WE'LL NEVER SEE YOU HERE AGAIN | |
358 | BUFFER, TAD T /CORRECT ADDRESS OF GPCH | |
359 | DBWDCT, TAD KQX1 /BY ADDING IN CS+1 | |
360 | QGPCH, DCA . /STORE IT HERE | |
361 | BLKNT, STL CLA RTL /CORRECT ADDRESS OF CAS IS 2 MORE | |
362 | TAD QGPCH | |
363 | QCAS, DCA . /THAN GPCH. STORE IT HERE. | |
364 | BPTR, JMP CS /RETURN TO MAIN PROGRAM | |
365 | KRDF, RDF | |
366 | KQX1, GPCH-CS-1 | |
367 | ||
368 | SPCASE, TAD FUN | |
369 | AND L4003 /ISOLATE R/W BIT + SPECIAL CODE | |
370 | TAD UNIT | |
371 | JMS I QCAS | |
372 | SPCODE-. | |
373 | JMP RETCIF-1 /LEAVE GRACEFULLY | |
374 | K70, 70 | |
375 | KCDF, CDF 0 | |
376 | L4003, 4003 | |
377 | PAGE | |
378 | \fGPCH, 0 /READ OR WRITE A BYTE | |
379 | JMP AROUND /GO TO REAL LOCATION OF THIS SUBROUTINE | |
380 | CAS, 0 /MUST BE AT GPCH+2; DO CASSETTE STUFF | |
381 | DCA TEMP /SAVE ARGUMENT IN AC | |
382 | CDF 0 | |
383 | TAD I CAS /GET UNRELOCATED RELATIVE LOCAL ENTRY POINT | |
384 | TAD CAS /RELOCATE IT | |
385 | ISZ CAS /POINT TO NORMAL RETURN LOCATION | |
386 | DCA GPCH /SAVE ENTRY POINT IN TEMPORARY | |
387 | JMP I GPCH /GO TO CORRECT ENTRY POINT | |
388 | ||
389 | RW, TAD CAS | |
390 | DCA RTRY /SAVE RETRY ADDRESS | |
391 | TAD TEMP /GET ARGUMENT PASSED VIA AC | |
392 | DCA FNUNIT /SAVE | |
393 | CLL STA RTL /TAD (7775 | |
394 | DCA ERKNT /SET ERROR COUNT TO -3 | |
395 | ERETRY, TAD FNUNIT | |
396 | SPA | |
397 | TAD (20 /READ CODE IS 0; WRITE IS 20 | |
398 | KLSA /LOAD STATUS A | |
399 | TAD FNUNIT /***KLSA CLEARS BIT 0 | |
400 | SMA CLA /READS HAVE TO BE INITIATED | |
401 | JMS CWAIT /READ | |
402 | JMP I RTRY /RETURN | |
403 | ||
404 | AROUND, DCA TEMP | |
405 | TAD FNUNIT | |
406 | SMA CLA | |
407 | JMP RDCHAR /READ | |
408 | TAD TEMP /WRITE | |
409 | JMS CWAIT | |
410 | JMP I GPCH /RETURN | |
411 | ||
412 | RDCHAR, JMS CWAIT | |
413 | TAD TEMP /GET CHAR JUST READ | |
414 | JMP I GPCH /RETURN WITH IT IN AC | |
415 | \fCRC, TAD FNUNIT | |
416 | TAD (60 | |
417 | KLSA /INITIATE READ/WRITE CRC | |
418 | TAD FNUNIT /***KLSA CLEARS BIT 0 | |
419 | SMA CLA | |
420 | JMS CWAIT /HAVE TO READ TWICE | |
421 | JMS CWAIT /WRITE CRC WRITES BOTH | |
422 | KCLR /WHY NOT? | |
423 | JMP I CAS /RETURN | |
424 | ||
425 | REWIND, TAD (10 | |
426 | JMS UTIL | |
427 | TAD TEMP | |
428 | SMA CLA | |
429 | JMP I CAS /MERELY REWIND IF READING | |
430 | JMP EOF | |
431 | SKIPF, TAD (20 | |
432 | BACKBL, TAD (10 | |
433 | EOF, TAD (10 | |
434 | BACKF, TAD (30 | |
435 | JMS UTIL | |
436 | JMP I CAS /RETURN | |
437 | ||
438 | UTIL, 0 | |
439 | TAD TEMP | |
440 | KLSA | |
441 | TRYAGN, KGOA | |
442 | KSBF /WAIT FOR READY | |
443 | JMP .-1 | |
444 | KRSB | |
445 | AND (10 | |
446 | SZA CLA | |
447 | JMP TRYAGN /KEEP TRYING IF ERROR CAUSED BY DRIVE EMPTY | |
448 | JMP I UTIL | |
449 | ||
450 | TEMP, 0 | |
451 | ERKNT, 0 | |
452 | FNUNIT, 0 | |
453 | RTRY, 0 | |
454 | ||
455 | SPCODE, TAD TEMP | |
456 | AND (3 | |
457 | TAD (JMP TABLE | |
458 | DCA J | |
459 | TAD TEMP | |
460 | AND (4300 | |
461 | DCA TEMP | |
462 | J, HLT | |
463 | TABLE, JMP EOF /0 WRITE EOF | |
464 | JMP REWIND /1 REWIND AND WRITE EOF IF BIT 0=1 | |
465 | JMP BACKBL /2 BACK BLOCK | |
466 | TAD TEMP /3 SKIP/BACK FILE DEPENDING ON BIT 0 | |
467 | SMA CLA | |
468 | JMP SKIPF /FORWARD FILE | |
469 | JMP BACKF /BACK FILE | |
470 | \fCWAIT, 0 | |
471 | KGOA /ASSERT CONTENTS OF STATUS A | |
472 | DCA TEMP /SAVE ANYTHING READ | |
473 | KSAF | |
474 | JMP .-1 /WAIT FOR SOMETHING TO HAPPEN | |
475 | KSEN /WAS IT AN ERROR? | |
476 | JMP I CWAIT /NO, SO RETURN | |
477 | ERR, DCA TEMP /YES ... ERROR | |
478 | KRSB | |
479 | AND (30 | |
480 | SNA | |
481 | JMP .+3 | |
482 | AND (20 | |
483 | JMP I RTRY /END OF FILE IS SOFT ERROR | |
484 | ISZ ERKNT /SHALL WE TRY AGAIN? | |
485 | JMP .+3 /YES | |
486 | STL CLA RAR /TAD (4000 | |
487 | JMP I RTRY /RETURN WITH NON-ZERO AC | |
488 | TAD FNUNIT /RETRY | |
489 | TAD (50 /BUT FIRST DO BACKSPACE BLOCK GAP | |
490 | JMS UTIL | |
491 | JMP ERETRY | |
492 | ||
493 | L7600, 7600 | |
494 | $ | |
495 | \f |