Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /TD8E DECTAPE COPY, V4 |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | // | |
9 | / | |
10 | / | |
11 | / | |
12 | / | |
13 | /COPYRIGHT (C) 1972, 1975 | |
14 | /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. | |
15 | / | |
16 | / | |
17 | / | |
18 | /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A | |
19 | /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- | |
20 | /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER | |
21 | /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE | |
22 | /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO | |
23 | /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE | |
24 | /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. | |
25 | / | |
26 | / | |
27 | /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT | |
28 | /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL | |
29 | /EQUIPMRNT COROPATION. | |
30 | / | |
31 | /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS | |
32 | /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. | |
33 | / | |
34 | / | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | \f | |
40 | ||
41 | ||
42 | /DEFINITIONS FOR PAL8 AND PAL10 | |
43 | ||
44 | BSW=7002 | |
45 | MQL=7421 | |
46 | MQA=7501 | |
47 | CAM=7621 | |
48 | SWP=7521 | |
49 | ACL=7701 | |
50 | CAF=6007 | |
51 | CDI=6203 | |
52 | KCF=6030 | |
53 | SDSS=6771 | |
54 | SDST=6772 | |
55 | SDSQ=6773 | |
56 | SDLC=6774 | |
57 | SDLD=6775 | |
58 | SDRC=6776 | |
59 | SDRD=6777 | |
60 | FIXTAB | |
61 | ||
62 | ||
63 | HALT=HLT | |
64 | ||
65 | ||
66 | /UNIT NUMBER DEFINITIONS FOR TD8E IOT'S | |
67 | ||
68 | UNIT01=0770 | |
69 | UNIT23=0760 | |
70 | UNIT45=0750 | |
71 | UNIT67=0740 | |
72 | ||
73 | \f | |
74 | ||
75 | LIMIT=7600 | |
76 | ||
77 | *11 | |
78 | ||
79 | X11, 0 | |
80 | X12, 0 | |
81 | ||
82 | /PAGE 0 CONSTANTS AND VARIABLES | |
83 | ||
84 | *20 | |
85 | INPUT, 0 /INPUT UNIT CONSTANT | |
86 | OUTPUT, 0 /OUTPUT UNIT CONSTANTS | |
87 | 0 | |
88 | 0 | |
89 | 0 | |
90 | 0 | |
91 | 0 | |
92 | 0 | |
93 | OCOUNT, 0 /NUMBER OF OUTPUT UNITS SPECIFIED | |
94 | OPOINT, 0 | |
95 | LIST, OUTPUT-1 | |
96 | OUTNUM, 0 | |
97 | IBLOCK, 0 /STARTING INPUT BLOCK | |
98 | OBLOCK, 0 /STARTING OUTPUT BLOCK | |
99 | NUMBER, 0 /NUMBER OF BLOCKS TO TRANSFER | |
100 | FIELDS, 0 /-(HIGHEST FIELD AVAILABLE) | |
101 | COUNT, 0 /TEMPORARY COUNTERS | |
102 | COUNT1, 0 / " | |
103 | COUNT2, 0 / " | |
104 | COUNT3, 0 / " | |
105 | COUNT4, 0 / " | |
106 | UNIT, 0 /UNIT CONSTANT--THIS TRANSFER | |
107 | VERF, 0 /VERIFY SWITCH (1=YES,0=NO) | |
108 | WDCNT, 0 /-(NUMBER OF WORDS PER BLOCK) | |
109 | RW, 0 /READ/WRITE BIT--THIS TRANSFER | |
110 | FLD0, 0 /# OF BLOCKS IN FIELD 0 BUFFER | |
111 | FLDN, 0 /# OF BLOCKS IN FIELD N BUFFER | |
112 | BUF0, 0 /START OF FIELD 0 BUFFER | |
113 | BUFN, 0 /START OF FIELD N BUFFER | |
114 | XNUMB, 0 /# OF BLOCKS LEFT TO TRANSFER | |
115 | BLOCKN, 0 /STARTING BLOCK NUMBER--THIS TRANSFER | |
116 | NUMB1, 0 | |
117 | NUMB2, 0 | |
118 | VB, 0 | |
119 | END0, 0 /BEGINNING OF FIELD 0 VERIFY BUFFER | |
120 | ENTRY, 0 /ENTRY TO TD8E HANDLER | |
121 | INB, 0 | |
122 | OUTB, 0 | |
123 | OHOLD, 0 | |
124 | \f | |
125 | MESSG1, TEXT @TD8E COPY V4A@ | |
126 | MESSG3, TEXT @ 12-BIT WORDS PER BLOCK@ | |
127 | \f | |
128 | *200 | |
129 | ||
130 | START, TLS | |
131 | JMS CRLF | |
132 | JMS I [MESSGE | |
133 | MESSG1 /@TD8E COPY@ | |
134 | JMS CRLF | |
135 | DCA COUNT | |
136 | JMP I [END /ONCE ONLY CODE FOR MULTIPLE FIELD TEST | |
137 | START1, JMS QUEST | |
138 | MESSG4 /@FROM UNIT:@ | |
139 | SWP | |
140 | JMS UNITNO /MAKE UNIT NUMBER CONSTANT | |
141 | DCA INPUT | |
142 | TAD LIST | |
143 | DCA OPOINT | |
144 | SKP | |
145 | AGAIN, JMS ERR4 /*ILLEGAL RESPONSE* | |
146 | DCA OCOUNT | |
147 | DCA COUNT | |
148 | JMS I [MESSGE | |
149 | MESSG5 /@TO UNITS:@ | |
150 | MORE2, JMS I [ANSWER | |
151 | JMP AGAIN | |
152 | ACL | |
153 | JMS UNITNO /MAKE UNIT NUMBER CONSTANT | |
154 | MQL /STORE IN MQ | |
155 | MQA /RESTORE TO AC | |
156 | CIA | |
157 | TAD INPUT | |
158 | SNA CLA /IS OUTPUT UNIT = INPUT UNIT ? | |
159 | JMP MORE2+1 /YES--ERROR | |
160 | ISZ OPOINT | |
161 | ISZ OCOUNT /COUNT ONE MORE OUTPUT UNIT | |
162 | TAD OCOUNT | |
163 | TAD [-10 | |
164 | SPA CLA /WERE MORE THAN 7 UNITS SPECIFIED? | |
165 | JMP .+3 | |
166 | JMS CRLF /YES--CARRIAGE RETURN | |
167 | JMP OALL /IGNORE EXTRA ONE | |
168 | SWP /NO-- | |
169 | DCA I OPOINT /STORE UNIT CONSTANT IN LIST | |
170 | TAD COUNT | |
171 | CIA | |
172 | TAD OCOUNT | |
173 | SPA SNA CLA /ALL UNITS IN? | |
174 | JMP MORE2 /YES | |
175 | \f | |
176 | OALL, DCA COUNT | |
177 | JMS I [MESSGE | |
178 | MESSG6 /@FIRST INPUT BLOCK:@ | |
179 | JMS I [ANSWER | |
180 | JMP WHOLE /COPY WHOLE TAPE | |
181 | TAD COUNT | |
182 | SNA CLA /WERE TOO MANY SPECIFIED? | |
183 | JMP .+5 | |
184 | JMS I [MESSGE /YES | |
185 | ERROR4 /@ILLEGAL RESPONSE@ | |
186 | JMS CRLF | |
187 | JMP OALL /REPEAT THE QUESTION | |
188 | ACL /NO | |
189 | DCA IBLOCK /STORE | |
190 | JMS QUEST | |
191 | MESSG7 /@FIRST OUTPUT BLOCK:@ | |
192 | ACL | |
193 | DCA OBLOCK | |
194 | JMS QUEST | |
195 | MESSG8 /@NUMBER OF BLOCKS TO COPY:@ | |
196 | ACL | |
197 | SNA /WERE 0 BLOCKS SPECIFIED? | |
198 | JMP QUEST1 /YES--REPEAT QUESTION | |
199 | DCA NUMBER | |
200 | JMP .+4 | |
201 | WHOLE, DCA IBLOCK | |
202 | DCA OBLOCK | |
203 | DCA NUMBER /0 MEANS WHOLE TAPE | |
204 | JMS QUEST | |
205 | MESSG9 /@VERIFY OUTPUT (YES=1,NO=0):@ | |
206 | ACL | |
207 | AND [7 | |
208 | DCA VERF | |
209 | JMP I (SETUP | |
210 | \f | |
211 | /OUTPUT CARRIAGE RETURN/LINE FEED | |
212 | ||
213 | CRLF, 0 | |
214 | TAD (215 | |
215 | JMS I [TYPE | |
216 | TAD [212 | |
217 | JMS I [TYPE | |
218 | JMP I CRLF /--RETURN-- | |
219 | ||
220 | ERR4, 0 | |
221 | JMS I [MESSGE | |
222 | ERROR4 /@ILLEGAL RESPONSE@ | |
223 | JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED | |
224 | TAD [-4 | |
225 | TAD ERR4 | |
226 | DCA ERR4 | |
227 | DCA COUNT | |
228 | JMP I ERR4 /--RETURN-- | |
229 | ||
230 | \f | |
231 | QUEST, 0 | |
232 | TAD I QUEST | |
233 | DCA MNUM | |
234 | ISZ QUEST | |
235 | JMS I [MESSGE | |
236 | MNUM, 0 | |
237 | JMS I [ANSWER | |
238 | QUEST1, JMS ERR4 | |
239 | TAD COUNT | |
240 | SZA CLA | |
241 | JMP QUEST1 | |
242 | JMP I QUEST /--RETURN-- | |
243 | ||
244 | ||
245 | /CONVERT UNIT NUMBER TO A WORD OF THE FORM | |
246 | /000 XXX XXX 000 OR | |
247 | /100 XXX XXX 000 | |
248 | /WHERE XY0 IS THE THIRD DIGIT OF THE IOT | |
249 | /AND 0 OR 1 REFLECTS THE TD8E UNIT NUMBER | |
250 | /ENTER WITH THE UNIT NUMBER IN THE AC | |
251 | /EXIT WITH SPECIAL CODE IN AC | |
252 | ||
253 | UNITNO, 0 | |
254 | AND [7 /MASK OUT ALL EXTRANEOUS BITS | |
255 | CLL RAR /SAVE 0/1 BIT IN LINK | |
256 | MQL /STORE ROTATED WORD, CLEAR AC | |
257 | RAR | |
258 | SWP /PRESERVE 0/1 BIT IN MQ | |
259 | TAD TABX /GET DEVICE NUMBER CORRECTLY | |
260 | DCA CRLF | |
261 | TAD I CRLF | |
262 | MQA /OR IN 0/1 BIT | |
263 | JMP I UNITNO /--RETURN-- | |
264 | ||
265 | TABX, UNITS | |
266 | ||
267 | /SKIP 4 LINES AND FETCH MARK TRACK | |
268 | ||
269 | SKIPQ, 0 | |
270 | IOTR5, SDSQ | |
271 | JMP .-1 | |
272 | IOTR6, SDRC | |
273 | JMP I SKIPQ /--RETURN-- | |
274 | \f | |
275 | *400 | |
276 | ||
277 | /USER RESPONSE HANDLER | |
278 | /USES MQ FOR TEMPORARY STORAGE | |
279 | /EXIT WITH RESPONSE IN MQ | |
280 | /EXIT TO CALL+1 IF JUST CARRIAGE RETURN | |
281 | /OR ILLEGAL CHARACTER, CARRIAGE RETURN | |
282 | /OR ;,CARRIAGE RETURN | |
283 | /EXIT TO CALL+2 IF GOOD DATA, CARRIAGE RETURN | |
284 | /INCREMENT COUNT AND EXIT TO CALL+2 IF GOOD DATA; | |
285 | /ILLEGAL CHARACTERS CAUSE WHOLE ANSWER TO BE IGNORED | |
286 | /AND EXIT TO CALL+1 | |
287 | ||
288 | ANSWER, 0 | |
289 | CAM /CLEAR AC AND MQ | |
290 | TAD CLEAR | |
291 | DCA SWITCH | |
292 | MORE, JMS LISTEN /FETCH A CHARACTER | |
293 | TAD (-215 | |
294 | SZA /IS IT A CARRIAGE RETURN? | |
295 | JMP .+5 /NO | |
296 | TAD [212 /YES--OUTPUT LINE FEED | |
297 | JMS TYPE | |
298 | SWITCH, NOP /SET UP EXIT ADDRESS | |
299 | JMP I ANSWER /--RETURN-- | |
300 | TAD (215-260 | |
301 | SPA /IS CHARACTER LESS THAN 260? | |
302 | JMP BAD /YES--ILLEGAL CHARACTER | |
303 | TAD [260-270 /NO | |
304 | SMA /IS IT MORE THAN 269? | |
305 | JMP SEMI /YES--CHECK FOR SEMICOLON | |
306 | TAD (270 /RESTORE CHARACTER | |
307 | AND [7 /MASK OUT EXTRANEOUS BITS | |
308 | CLL | |
309 | SWP | |
310 | AND (777 /MASK OUT FIRST DIGIT IF THERE ARE 4 | |
311 | RAL /ROTATE 3 LEFT | |
312 | RTL | |
313 | MQA /FETCH NEW CHARACTER | |
314 | MQL /STORE RESULT IN MQ | |
315 | TAD SKIP /SET UP TO SKIP ON RETURN | |
316 | DCA SWITCH | |
317 | JMP MORE /FETCH ANOTHER | |
318 | ||
319 | \f | |
320 | CLEAR, NOP | |
321 | SKIP, ISZ ANSWER | |
322 | ||
323 | BAD, CLA /ILLEGAL CHARACTER | |
324 | JMS I [CRLF | |
325 | JMP I ANSWER /--RETURN-- | |
326 | ||
327 | ||
328 | /TEST FOR SEMICOLON | |
329 | ||
330 | SEMI, TAD (270-273 | |
331 | SZA CLA /IS CHARACTER A SEMICOLON? | |
332 | JMP BAD /NO--ILLEGAL CHARACTER | |
333 | ISZ COUNT /YES--INCREMENT COUNTER | |
334 | JMP SWITCH /EXIT FROM ANSWER ROUTINE | |
335 | ||
336 | ||
337 | /TELETYPE INPUT AND ECHO HANDLER | |
338 | ||
339 | LISTEN, 0 | |
340 | KSF | |
341 | JMP .-1 | |
342 | JMS I [PARITY | |
343 | TLS /ECHO CHARACTER | |
344 | JMS CHECK /CHECK FOR CTRL/C AND CTRL/S | |
345 | JMP I LISTEN /--RETURN-- | |
346 | ||
347 | /CHECK FOR CTRL/C AND CTRL/S | |
348 | /ENTER WITH INPUT CHARACTER IN AC | |
349 | /EXIT TO HANDLER OR WITH CHARACTER IN AC | |
350 | ||
351 | CHECK, 0 | |
352 | TAD (-203 | |
353 | SNA /IS IT CTRL/C? | |
354 | JMP I CTRLC /YES--HANDLE IT | |
355 | TAD (203-223 | |
356 | SNA /IS IT CTRL/S? | |
357 | JMP I [REPEAT /YES--HANDLE IT | |
358 | TAD (223 /RESTORE CHARACTER | |
359 | JMP I CHECK /--RETURN-- | |
360 | ||
361 | CTRLC, LIMIT | |
362 | \f | |
363 | /MESSAGE OUTPUT HANDLER | |
364 | ||
365 | /EXPECTS MESSAGE ADDRESS TO BE IN LOCATION AFTER CALL | |
366 | /EXITS TO CALL+2 | |
367 | ||
368 | MESSGE, 0 | |
369 | TAD I MESSGE | |
370 | DCA FINDER /SET UP POINTER | |
371 | ISZ MESSGE | |
372 | DCA LOC /SET L/R SWITCH TO L (EVEN) | |
373 | LNEXT, TAD I FINDER /GET WORD | |
374 | BSW | |
375 | RHALF, AND [77 | |
376 | SNA /IS CHARACTER 0 (TERMINATOR)? | |
377 | JMP I MESSGE /YES--RETURN-- | |
378 | DCA CHAR | |
379 | TAD CHAR | |
380 | AND (40 | |
381 | SNA CLA /IS IT A LETTER? | |
382 | TAD [100 /YES--301-337 | |
383 | TAD [200 /NO--240-277 | |
384 | TAD CHAR /RESTORE CHARACTER | |
385 | JMS TYPE /OUTPUT IT | |
386 | ISZ LOC | |
387 | TAD LOC | |
388 | RAR | |
389 | SZL CLA /WHICH HALF WAS THAT? | |
390 | JMP .+3 | |
391 | ISZ FINDER /RIGHT | |
392 | JMP LNEXT | |
393 | TAD I FINDER /LEFT | |
394 | JMP RHALF | |
395 | FINDER, 0 | |
396 | LOC, 0 | |
397 | CHAR, 0 | |
398 | ||
399 | ||
400 | /TELETYPE OUTPUT ROUTINE | |
401 | ||
402 | ||
403 | TYPE, 0 | |
404 | TSF | |
405 | JMP .-1 | |
406 | TLS | |
407 | CLA | |
408 | JMP I TYPE /--RETURN-- | |
409 | ||
410 | \f | |
411 | /INSERT IOT'S ACCORDING TO TABLES | |
412 | /UNIT CONTAINS APPROPRIATE UNIT CODE | |
413 | /COUNT CONTAINS -(NUMBER OF IOT'S TO TRANSFER) | |
414 | /COUNT1 CONTAINS ADDRESS OF ADDRESS TABLE | |
415 | /UNIT CONTAINS UNIT CODE OF CURRENT UNIT | |
416 | ||
417 | INSERT, 0 | |
418 | TAD I COUNT1 | |
419 | DCA COUNT3 | |
420 | TAD UNIT | |
421 | MQL | |
422 | TAD I COUNT3 /MAKE NEW IOT | |
423 | AND (7007 | |
424 | MQA | |
425 | CIA | |
426 | TAD I COUNT3 /COMPARE WITH IOT FROM PROGRAM | |
427 | SNA CLA /ARE THE IOT'S THE SAME AS THE LAST UNIT? | |
428 | JMP I INSERT /YES--RETURN-- | |
429 | INS1, TAD I COUNT1 | |
430 | DCA COUNT3 | |
431 | TAD I COUNT3 /GET IOT FROM PROGRAM | |
432 | AND (7007 /RETAIN ONLY SIGNIFICANT BITS | |
433 | MQA /OR IN UNIT NUMBER | |
434 | DCA I COUNT3 /PUT IT IN PROGRAM | |
435 | ISZ COUNT1 /BUMP COUNTERS | |
436 | ISZ COUNT /DONE YET? | |
437 | JMP INS1 /NO | |
438 | JMP I INSERT /YES--RETURN-- | |
439 | ||
440 | ||
441 | PAGE | |
442 | \f | |
443 | /COUNT THE NUMBER OF WORDS PER BLOCK | |
444 | /PLACE IT IN MWORDS | |
445 | /BE SURE ALL TAPES MATCH INPUT FORMAT | |
446 | ||
447 | SETUP, TAD LIST | |
448 | DCA OPOINT /SET POINTER TO I/O LIST | |
449 | DCA COUNT2 /CLEAR COUNTER | |
450 | TAD OCOUNT | |
451 | CMA | |
452 | DCA OUTNUM /SET # OF UNITS | |
453 | SET4, TAD (TABLE1-END1-1 /SET UP COUNTERS FOR IOT FIX | |
454 | DCA COUNT | |
455 | TAD (TABLE1 | |
456 | DCA COUNT1 | |
457 | TAD I OPOINT | |
458 | DCA UNIT | |
459 | JMS I [INSERT /PUT THE PROPER IOT'S IN THE FOLLOWING ROUTINE | |
460 | DCA WDCNT /CLEAR WORD COUNT | |
461 | TAD UNIT | |
462 | AND [4000 | |
463 | TAD (2000 | |
464 | IOTX7, SDLC | |
465 | CLA | |
466 | IOTX8, SDRC | |
467 | RTL | |
468 | SZL /DOES UNIT EXIST? | |
469 | JMP .+3 /YES | |
470 | SELERR, JMS I [ERR3 /@SELECT ERROR UNIT N@ | |
471 | JMP SETUP | |
472 | AND (400 | |
473 | SZA CLA /TURNED ON? | |
474 | JMP SELERR /NO | |
475 | TAD UNIT /GET 0 OR 1 UNIT BIT (0 OR 4000) | |
476 | AND [4000 | |
477 | TAD [1000 /GET GO BIT | |
478 | IOTX1, SDLC /START READING FORWARD | |
479 | JMS SKIP4 /SKIP 8 LINES TO AVOID GARBAGE | |
480 | JMS SKIP4 | |
481 | IOTX3, SDSS /LOOK FOR FORWARD BLOCK NUMBER (26) | |
482 | JMP .-1 | |
483 | IOTX4, SDRC | |
484 | AND [77 | |
485 | TAD (-26 | |
486 | SZA CLA /FOUND YET? | |
487 | JMP IOTX3 /NO--KEEP LOOKING | |
488 | \f | |
489 | SET2, JMS SKIP4 /YES--START COUNTING LINES BY FOURS | |
490 | ISZ WDCNT | |
491 | NOP | |
492 | AND [77 | |
493 | TAD (-51 | |
494 | SZA CLA /FOUND GUARD YET? | |
495 | JMP SET2 /NO | |
496 | TAD UNIT /YES | |
497 | AND [4000 | |
498 | IOTX2, SDLC /STOP UNIT | |
499 | CLA | |
500 | TAD COUNT2 | |
501 | SZA /IS THIS THE INPUT UNIT? | |
502 | JMP SET5 /NO | |
503 | TAD (-11 /YES--SAVE THE COUNT | |
504 | TAD WDCNT | |
505 | CIA | |
506 | DCA COUNT2 | |
507 | JMP SET3 /FIRST OUTPUT UNIT | |
508 | SET5, TAD (-11 /NOT INPUT UNIT | |
509 | TAD WDCNT | |
510 | SZA CLA /SAME NUMBER OF WORDS AS INPUT UNIT? | |
511 | JMP ERR5 /NO*ILLEGAL FORMAT* | |
512 | SET3, ISZ OPOINT /NEXT UNIT | |
513 | ISZ OUTNUM /DONE YET? | |
514 | JMP SET4 /NO | |
515 | TAD COUNT2 /YES--PRINT MESSAGE | |
516 | DCA I [MWORDS /SET UP NUMBER OF WORDS PER BLOCK | |
517 | TAD I [MWORDS | |
518 | CIA | |
519 | JMS I [PRINT /PRINT 4 DIGIT NUMBER OF BLOCKS | |
520 | JMS I [MESSGE /YES--PRINT REST OF MESSAGE | |
521 | MESSG3 | |
522 | JMS I [CRLF | |
523 | \f | |
524 | /IF WHOLE TAPE IS TO BE COPIED, IT IS NECESSARY TO | |
525 | /COMPUTE THE NUMBER OF BLOCKS ON THE TAPE (NB) | |
526 | /USING THE NUMBER OF WORDS PER BLOCK (WB) | |
527 | /AND THE FORMULA: | |
528 | /OCTAL: NB=[63 6160/(WB+17)]+2 | |
529 | /DECIMAL: NB=[212,080/(WB+15)]+2 | |
530 | ||
531 | TAD NUMBER | |
532 | SZA CLA /COPY WHOLE TAPE? | |
533 | JMP VERFQ /NO-- | |
534 | DCA COUNT /YES--COMPUTE NUMBER OF BLOCKS ON TAPE | |
535 | TAD I [MWORDS | |
536 | CIA | |
537 | TAD (17 | |
538 | DCA COUNT1 /GET NUMBER OF WORDS PER BLOCK+17 | |
539 | TAD (-64 | |
540 | DCA COUNT2 | |
541 | TAD (-6160 | |
542 | SUB, CLL | |
543 | TAD COUNT1 | |
544 | ISZ COUNT /COUNT A BLOCK--TOO MANY? | |
545 | SKP /NO | |
546 | JMP ERR5 /YES--ERROR | |
547 | SZL | |
548 | ISZ COUNT2 | |
549 | JMP SUB | |
550 | CLA CLL | |
551 | TAD COUNT /COUNT IS [63 6160/WB+17]+1 | |
552 | IAC /ADD 1 MORE | |
553 | DCA NUMBER /STORE AS # OF BLOCKS TO TRANSFER | |
554 | JMP I .+1 | |
555 | VERFQ | |
556 | ||
557 | ERR5, CLA | |
558 | JMS I [MESSGE | |
559 | ERROR5 /*ILLEGAL FORMAT UNIT* | |
560 | JMS I [DECODE /PRINT UNIT NUMBER | |
561 | JMS I [CTRLR /WAIT FOR CTRL/R | |
562 | JMS I [CRLF /CARRIAGE RETURN/LINE FEED | |
563 | JMP SETUP /TRY AGAIN | |
564 | ||
565 | ||
566 | ||
567 | ||
568 | /READ FOUR LINES AND FETCH MARK TRACK | |
569 | ||
570 | SKIP4, 0 | |
571 | IOTX5, SDSQ | |
572 | JMP .-1 | |
573 | IOTX6, SDRC | |
574 | JMP I SKIP4 /--RETURN-- | |
575 | ||
576 | ||
577 | ||
578 | \f | |
579 | PAGE | |
580 | ||
581 | /IS TAPE TO BE VERIFIED? | |
582 | /SET UP DEPENDING ON RESPONSE | |
583 | VERFQ, TAD VERF | |
584 | SZA CLA /VERIFY? | |
585 | JMP YES /YES-- | |
586 | TAD (NOP /NO-- | |
587 | DCA I VERF1A | |
588 | TAD (OUTN | |
589 | DCA I VERF2A | |
590 | JMP CONT | |
591 | YES, TAD (RAR | |
592 | DCA I VERF1A | |
593 | TAD (VERIFY | |
594 | DCA I VERF2A | |
595 | CONT, JMP I .+1 | |
596 | DOIT | |
597 | ||
598 | VERF1A, VERF1 | |
599 | VERF2A, VERF2 | |
600 | ||
601 | /WAIT FOR CTRL/R | |
602 | ||
603 | CTRLR, 0 | |
604 | JMS I [LISTEN /FETCH CHARACTER | |
605 | TAD [-222 | |
606 | SZA CLA /IT IT CTRL/R? | |
607 | JMP .-3 /NO--WAIT FOR ONE | |
608 | JMS I [CRLF /CARRIAGE RETURN/LINE FEED | |
609 | JMP I CTRLR /--RETURN-- | |
610 | ||
611 | ||
612 | REPEAT, DCA COUNT | |
613 | JMS I [CRLF | |
614 | JMS I [QUEST /@REPEAT (YES=1;NO=0):@ | |
615 | MESS11 | |
616 | ACL | |
617 | AND [7 | |
618 | SZA CLA | |
619 | JMP I [CLEAN /YES | |
620 | JMP I [START+4 /NO--RESTART | |
621 | \f | |
622 | MESSG6, TEXT @FIRST INPUT BLOCK:@ | |
623 | MESSG7, TEXT @FIRST OUTPUT BLOCK:@ | |
624 | MESSG8, TEXT @NUMBER OF BLOCKS TO COPY:@ | |
625 | MESSG9, TEXT @VERIFY OUTPUT (YES=1,NO=0):@ | |
626 | MESS10, TEXT @DONE@ | |
627 | MESS11, TEXT @REPEAT (YES=1,NO=0):@ | |
628 | ERROR1, TEXT @VERIFY ERROR BLOCK @ | |
629 | ERROR2, TEXT @TAPE ERROR BLOCK @ | |
630 | ERROR3, TEXT @SELECT ERROR UNIT @ | |
631 | \f | |
632 | PAGE | |
633 | ||
634 | /SETUP FOR ACTUAL READ/WRITE/VERIFY OPERATION | |
635 | DOIT, TAD [LIMIT-END /SET UP NUMBER OF BLOCKS | |
636 | JMS DIV1 /IN FIELD 0 BUFFER | |
637 | DCA FLD0 | |
638 | TAD M200 | |
639 | JMS DIV1 /AND IN FIELD N BUFFERS | |
640 | DCA FLDN | |
641 | TAD IBLOCK /SET UP RUNNING COUNTERS AND POINTERS | |
642 | DCA INB /FOR NEXT INPUT BLOCK | |
643 | TAD OBLOCK | |
644 | DCA OUTB /FOR NEXT OUTPUT BLOCK | |
645 | TAD NUMBER | |
646 | DCA NUMB1 /FOR NUMBER OF BLOCKS LEFT TO TRANSFER | |
647 | JMP .+4 | |
648 | ALLDUN, TAD XNUMB | |
649 | SNA CLA /DONE WITH ALL BLOCKS YET? | |
650 | JMP REWIND /YES | |
651 | /READ--- | |
652 | READX, TAD LIST /NO--SET UP POINTER TO OUTPUT UNITS | |
653 | DCA OPOINT | |
654 | TAD OCOUNT | |
655 | CMA | |
656 | DCA OUTNUM | |
657 | TAD INB | |
658 | DCA BLOCKN | |
659 | TAD NUMB1 /SET POINTERS FOR TRANSFER | |
660 | DCA XNUMB | |
661 | TAD NUMB1 | |
662 | DCA NUMB2 /SAVE COUNTER FOR WRITE | |
663 | TAD INPUT /SELECT INPUT UNIT | |
664 | DCA UNIT | |
665 | DCA RW /SET R/W BIT TO READ | |
666 | \f | |
667 | TAD [END /SET START OF BUFFERS IN CASE | |
668 | DCA BUF0 /THEY WERE CHANGED BY VERIFY | |
669 | DCA BUFN | |
670 | JMS I [READY /FILL THE BUFFERS | |
671 | TAD XNUMB /SAVE THE POINTERS | |
672 | DCA NUMB1 | |
673 | TAD BLOCKN | |
674 | DCA INB | |
675 | ||
676 | OUTN, ISZ OPOINT | |
677 | ISZ OUTNUM /DONE WITH ALL UNITS YET? | |
678 | JMP .+4 /NO--CONTINUE WRITING | |
679 | TAD OHOLD /YES | |
680 | DCA OUTB | |
681 | JMP ALLDUN /READ ANOTHER BUFFER LOAD | |
682 | WRITEX, TAD OUTB | |
683 | DCA OHOLD | |
684 | TAD OHOLD /WRITE | |
685 | DCA BLOCKN /RESET POINTERS | |
686 | TAD OUTB | |
687 | DCA VB /SAVE COUNTER FOR VERIFY | |
688 | TAD NUMB2 | |
689 | DCA XNUMB | |
690 | TAD I OPOINT /SELECT OUTPUT UNIT | |
691 | DCA UNIT | |
692 | CLA CLL CML RAR /AC=4000 | |
693 | DCA RW /SET R/W BIT TO WRITE | |
694 | JMS I [READY | |
695 | TAD BLOCKN | |
696 | DCA OHOLD | |
697 | JMP I .+1 | |
698 | VERF2, VERIFY | |
699 | ||
700 | ||
701 | \f | |
702 | /SEE HOW MANY BLOCKS WILL FIT INTO BUFFER | |
703 | /ENTER WITH BUFFER SIZE IN AC | |
704 | /EXIT WITH # OF BLOCKS IN AC | |
705 | ||
706 | DIV1, 0 | |
707 | DCA COUNT1 | |
708 | DCA COUNT | |
709 | TAD COUNT1 /TOTAL WORDS | |
710 | DIV2, CLL | |
711 | TAD I [MWORDS /-NUMBER OF WORDS PER BLOCK | |
712 | SNL /RUN OUT OF ROOM? | |
713 | JMP .+3 /YES-- | |
714 | ISZ COUNT /NO--COUNT A BLOCK | |
715 | JMP DIV2 | |
716 | CLA CLL /IGNORE LESS THAN A BLOCK LEFT | |
717 | TAD COUNT | |
718 | VERF1, RAR /DIVIDE BY 2 IF VERIFY (NOP IF NO VERIFY) | |
719 | JMP I DIV1 /--RETURN-- | |
720 | ||
721 | /END OF OPERATION | |
722 | /REWIND TAPES TO INITIAL END ZONE | |
723 | ||
724 | REWIND, TAD OCOUNT | |
725 | CMA | |
726 | DCA COUNT2 /SET NUMBER OF TAPES STILL SPINNING | |
727 | RLIST, CLA CMA | |
728 | TAD LIST | |
729 | DCA OPOINT /SET POINTER TO UNIT LIST | |
730 | TAD OCOUNT | |
731 | IAC | |
732 | CMA | |
733 | DCA OUTNUM /SET NUMBER OF UNITS IN LIST | |
734 | RUNIT, JMS I [PARITY | |
735 | JMS I [CHECK /CHECK TTY FOR CTRL/S OR CTRL/C | |
736 | ISZ OUTNUM /DONE WITH WHOLE LIST YET? | |
737 | SKP CLA /NO | |
738 | JMP RLIST /YES--START THROUGH LIST AGAIN | |
739 | ISZ OPOINT | |
740 | TAD I OPOINT /GET UNIT CODE | |
741 | RTL | |
742 | SZL CLA /STILL SPINNING? | |
743 | JMP RUNIT /NO--TRY NEXT TAPE | |
744 | TAD I OPOINT /YES | |
745 | DCA UNIT | |
746 | \f | |
747 | ||
748 | TAD [-6 | |
749 | DCA COUNT | |
750 | TAD [RTAB | |
751 | DCA COUNT1 | |
752 | JMS I [INSERT /PUT PROPER IOT'S IN THIS ROUTINE | |
753 | TAD I OPOINT | |
754 | AND [4000 /UNIT/READ | |
755 | TAD [3000 /REVERSE/GO | |
756 | IOTR1, SDLC | |
757 | JMS I [SKIPQ | |
758 | JMS I [SKIPQ /WAIT FOR DRIVE TO GET UP TO SPEED | |
759 | IOTR2, SDSS | |
760 | JMP .-1 | |
761 | IOTR3, SDRC /GET MARK TRACK BITS | |
762 | AND [77 | |
763 | TAD [-22 | |
764 | SZA CLA /END ZONE? | |
765 | JMP RUNIT /NO--NEXT UNIT | |
766 | CLA CLL CML RTR /AC=2000 | |
767 | MQA /UNIT CODE STILL IN MQ FROM INSERT | |
768 | DCA I OPOINT /SET STOPPED BIT | |
769 | TAD I OPOINT | |
770 | AND [6000 | |
771 | IOTR4, SDLC /STOP UNIT | |
772 | M200, 7600 /CLA | |
773 | ISZ COUNT2 /ALL TAPES STOPPED? | |
774 | JMP RUNIT /NO--NEXT UNIT | |
775 | JMS I [MESSGE /YES | |
776 | MESS10 /@DONE@ | |
777 | JMP I [REPEAT | |
778 | ||
779 | \f | |
780 | ||
781 | PAGE | |
782 | ||
783 | /VERIFICATION ROUTINES | |
784 | ||
785 | VERIFY, TAD VB /SET POINTERS AND COUNTERS FOR TRANSFER | |
786 | DCA BLOCKN | |
787 | TAD NUMB2 | |
788 | DCA XNUMB | |
789 | DCA RW | |
790 | TAD END0 /SET BEGINNINGS OF VERIFY BUFFERS | |
791 | DCA BUF0 | |
792 | TAD (3700 | |
793 | DCA BUFN | |
794 | TAD CDF0 | |
795 | DCA COMP2 | |
796 | JMS I [READY /READ VERIFY BUFFERS FULL | |
797 | TAD COUNT1 /GET # OF BLOCKS IN LAST BUFFER FILLED | |
798 | DCA COUNT3 | |
799 | CMA /SET AUTOINDEX POINTERS TO BUFFERS | |
800 | TAD [END | |
801 | DCA X11 | |
802 | CMA CLL | |
803 | TAD END0 | |
804 | DCA X12 | |
805 | TAD COUNT | |
806 | CMA | |
807 | TAD FIELDS | |
808 | DCA COUNT /SET NUMBER OF FIELDS WHICH WERE FILLED | |
809 | JMS COMP4 /GET NUMBER OF BLOCKS | |
810 | TAD FLD0 | |
811 | CIA | |
812 | DCA COUNT4 /SET COUNTER | |
813 | JMS COMP /COMPARE THE BUFFERS | |
814 | \f | |
815 | COMP3, TAD COUNT | |
816 | SNA CLA | |
817 | JMP I [OUTN | |
818 | JMS COMP4 /GET NUMBER OF BLOCKS | |
819 | TAD FLDN | |
820 | CIA | |
821 | DCA COUNT4 | |
822 | TAD COMP2 /EACH FIELD------ | |
823 | TAD (10 | |
824 | DCA COMP2 /SET CDF INSTRUCTION PROPERLY | |
825 | CMA CLL /SET AUTOINDEX POINTERS TO BUFFERS | |
826 | DCA X11 | |
827 | TAD (3677 | |
828 | DCA X12 | |
829 | JMS COMP | |
830 | JMP COMP3 /DO THE NEXT FIELD | |
831 | ||
832 | ||
833 | /ENTER WITH AC CLEAR | |
834 | /EXIT TO CALL+1 WITH AC CLEAR IF | |
835 | /NORMAL BUFFER FILL | |
836 | /EXIT TO CALL+2 WITH # OF BLOCKS IN AC IF | |
837 | /LAST BUFFER | |
838 | ||
839 | COMP4, 0 | |
840 | ISZ COUNT /LAST FIELD FILLED? | |
841 | JMP I COMP4 /NO--RETURN-- | |
842 | TAD XNUMB /YES--OUT OF BLOCKS? | |
843 | SZA CLA | |
844 | JMP I COMP4 /NO--RETURN-- | |
845 | TAD COUNT3 /YES--GET ACTUAL # OF BLOCKS | |
846 | ISZ COMP4 /INCREMENT RETURN ADDRESS | |
847 | JMP I COMP4 /--RETURN-- | |
848 | ||
849 | \f | |
850 | /COMPARE PORTION OF VERIFY ROUTINE | |
851 | ||
852 | COMP, 0 | |
853 | TAD I [MWORDS /SET NUMBER OF WORDS PER BLOCK COUNTER | |
854 | DCA COUNT2 | |
855 | COMP2, HALT /SHOULD CONTAIN CDF N | |
856 | TAD I X11 /GET CORRESPONDING WORDS FROM EACH BUFFER | |
857 | CIA | |
858 | TAD I X12 | |
859 | CDF0, CDF 0 | |
860 | SZA CLA /DO WORDS MATCH? | |
861 | JMP ERR1 /NO--VERIFY ERROR | |
862 | TRY, ISZ COUNT2 /DONE WITH BLOCK? | |
863 | JMP COMP2 /NO--CONTINUE | |
864 | ISZ COUNT4 /DONE WITH ALL BLOCKS? | |
865 | JMP COMP+1 /NO | |
866 | JMP I COMP /YES--RETURN-- | |
867 | ||
868 | ERR1, JMS I [MESSGE | |
869 | ERROR1 /*VERIFY ERROR BLOCK * | |
870 | TAD COUNT4 /GET CURRENT BLOCK NUMBER | |
871 | CIA | |
872 | TAD I (BLOCKS /FROM BLOCK THIS OPERATION STARTED WITH | |
873 | JMS PRINT /PRINT 4 DIGIT BLOCK NUMBER | |
874 | JMS I [MESSGE | |
875 | ERROR6 /*UNIT * | |
876 | JMS I [DECODE /PRINT UNIT NUMBER | |
877 | WAIT, JMS I [LISTEN /WAIT FOR RESPONSE | |
878 | DCA PRINT | |
879 | JMS I [CRLF | |
880 | TAD PRINT | |
881 | TAD [-224 | |
882 | SNA /WAS IT CTRL/T? | |
883 | JMP I [WRITEX /YES--TRY AGAIN | |
884 | TAD [2 | |
885 | SZA CLA /WAS IT CTRL/R? | |
886 | JMP WAIT /NO--WAIT FOR A GOOD RESPONSE | |
887 | JMP TRY /YES--IGNORE AND CONTINUE | |
888 | ||
889 | \f | |
890 | ||
891 | ||
892 | /PRINT A 4 DIGIT OCTAL NUMBER | |
893 | /ENTER WITH NUMBER IN AC | |
894 | ||
895 | PRINT, 0 | |
896 | DCA I [MESSGE /TEMPORARY STORAGE | |
897 | TAD [-4 | |
898 | DCA I [ANSWER /SET DIGIT COUNTER | |
899 | TAD I [MESSGE | |
900 | RAL | |
901 | DCA I [CRLF | |
902 | FOUR, TAD I [CRLF | |
903 | RAL | |
904 | RTL | |
905 | DCA I [CRLF | |
906 | TAD I [CRLF | |
907 | AND [7 | |
908 | TAD [260 | |
909 | JMS I [TYPE /PRINT ONE DIGIT | |
910 | ISZ I [ANSWER /DONE YET? | |
911 | JMP FOUR /NO | |
912 | JMP I PRINT /YES--RETURN-- | |
913 | ||
914 | ||
915 | /CLEAN UP UNIT TABLES AFTER REWIND | |
916 | ||
917 | CLEAN, TAD LIST | |
918 | DCA OPOINT | |
919 | TAD OCOUNT | |
920 | CMA | |
921 | DCA OUTNUM /SET POINTER AND COUNTER | |
922 | CLEAN1, TAD I OPOINT /GET UNIT CODE | |
923 | AND (4770 /MASK OUT EXTRANEOUS BITS | |
924 | DCA I OPOINT /REPLACE IT | |
925 | ISZ OPOINT | |
926 | ISZ OUTNUM /DONE YET? | |
927 | JMP CLEAN1 /NO | |
928 | JMP I [DOIT /YES--NEXT OPERATION | |
929 | ||
930 | ||
931 | ||
932 | \f | |
933 | PAGE | |
934 | ||
935 | /FILL ALL N FIELDS ONCE | |
936 | /ENTER WITH AC CLEAR | |
937 | /# OF BLOCKS FOR FIELD 0 IN FLD0 | |
938 | /# OF BLOCKS FOR OTHERS IN FLDN | |
939 | /ADDRESSES OF BUFFERS IN BUF0, BUFN | |
940 | /R/W BIT (0 OR 4000) IN RW | |
941 | ||
942 | ||
943 | ||
944 | READY, 0 | |
945 | TAD [IOTLOC-TABEND-1 | |
946 | DCA COUNT | |
947 | TAD [IOTLOC | |
948 | DCA COUNT1 | |
949 | JMS I [INSERT /PUT PROPER IOT'S IN HANDLER | |
950 | TAD UNIT | |
951 | SPA CLA /EVEN OR ODD UNIT NUMBER? | |
952 | CLL IAC RTL /ODD | |
953 | TAD [ORIGIN /EVEN | |
954 | DCA ENTRY /SET UP ENTRY TO HANDLER | |
955 | TAD RW | |
956 | MQL /STORE UNIT BIT FOR LATER | |
957 | CMA | |
958 | TAD FIELDS /SET COUNTER FOR # OF FIELDS | |
959 | DCA COUNT | |
960 | CLL | |
961 | TAD FLD0 /ADJUST NUMBER OF BLOCKS TO | |
962 | JMS SUB1 /TRANSFER DEPENDING ON NUMBER | |
963 | TAD FLD0 /LEFT TO BE TRANSFERRED | |
964 | JMS SUB2 /RESET FUNCTION WORD | |
965 | TAD BUF0 /SET UP BUFFER POINTERS | |
966 | JMS SUB3 | |
967 | JMS TRANS /TRANSFER DATA--FIELD 0 | |
968 | ZOOM, ISZ COUNT /BEGINNING OF LOOP FOR EACH FIELD ABOVE 0 | |
969 | SKP /DONE YET? | |
970 | JMP I READY /YES--RETURN-- | |
971 | \f | |
972 | TAD FIELDS | |
973 | CIA CLL | |
974 | TAD COUNT | |
975 | IAC | |
976 | RAL | |
977 | RTL /GET FIELD SETTING READY | |
978 | MQL /STORE IN MQ | |
979 | TAD FUNCTN /GET PREVIOUS FUNCTION WORD | |
980 | AND [4000 /GET R/W BIT | |
981 | MQA /OR IN FIELD SETTING | |
982 | MQL /STORE | |
983 | CLL | |
984 | TAD FLDN /ADJUST NUMBER OF BLOCKS TO TRANSFER | |
985 | JMS SUB1 | |
986 | TAD FLDN | |
987 | JMS SUB2 /AND RESET FUNCTION WORD | |
988 | TAD BUFN | |
989 | JMS SUB3 /SET UP BUFFER POINTERS | |
990 | JMS TRANS /TRANSFER DATA--FIELDS 1-N | |
991 | JMP ZOOM /FILL ANOTHER FIELD | |
992 | ||
993 | SUB1, 0 | |
994 | CIA | |
995 | TAD XNUMB | |
996 | CLL CML /SET LINK=1 | |
997 | SMA /ARE THERE LESS BLOCKS LEFT THAN A FIELD FULL? | |
998 | DCA XNUMB /NO--REDUCE COUNT OF BLOCKS LEFT | |
999 | JMP I SUB1 /YES-TRANSFER BLOCKS LEFT--RETURN-- | |
1000 | ||
1001 | SUB2, 0 | |
1002 | DCA COUNT1 /LINK=1 IF BLOCKS LEFT, 0 IF NONE | |
1003 | SNL /DONE WITH ALL BLOCKS YET? | |
1004 | DCA XNUMB /YES--BUMP SWITCH | |
1005 | TAD COUNT1 /NO | |
1006 | BSW | |
1007 | MQA /PUT # OF BLOCKS INTO FUNCTION WORD | |
1008 | DCA FUNCTN /START REVERSE | |
1009 | JMP I SUB2 /--RETURN-- | |
1010 | ||
1011 | \f | |
1012 | SUB3, 0 | |
1013 | DCA BUFADD | |
1014 | TAD BLOCKN /SET STARTING BLOCK NUMBER | |
1015 | DCA BLOCKS | |
1016 | TAD COUNT1 | |
1017 | TAD BLOCKN | |
1018 | DCA BLOCKN /RESET STARTING BLOCK FOR NEXT TIME | |
1019 | JMP I SUB3 /--RETURN-- | |
1020 | ||
1021 | ||
1022 | /CALL TO THE HANDLER | |
1023 | ||
1024 | TRANS, 0 | |
1025 | JMS I [PARITY /CHECK TELETYPE | |
1026 | JMS I [CHECK /WAS ^C OR ^S TYPED? | |
1027 | JMS I ENTRY | |
1028 | FUNCTN, 0 /FUNCTION WORD | |
1029 | BUFADD, 0 /BUFFER ADDRESS | |
1030 | BLOCKS, 0 /STARTING BLOCK NUMBER | |
1031 | JMP ERR /ERROR RETURN | |
1032 | JMS I [PARITY /CHECK TELETYPE | |
1033 | JMS I [CHECK /WAS ^C OR ^S TYPED? | |
1034 | CLA | |
1035 | TAD XNUMB | |
1036 | SZA CLA /DONE YET? | |
1037 | JMP I TRANS /NO--RETURN-- | |
1038 | ISZ COUNT | |
1039 | JMP I READY /--RETURN-- | |
1040 | JMP I READY /--RETURN-- | |
1041 | ||
1042 | /TRANSFER ERROR HANDLER | |
1043 | ||
1044 | ERR, SNA CLA /FATAL ERROR? | |
1045 | JMP SELECT /NO | |
1046 | JMS I [MESSGE /YES | |
1047 | ERROR2 /*TAPE ERROR BLOCK * | |
1048 | TAD I (BLOCK | |
1049 | JMS I [PRINT /PRINT BLOCK NUMBER | |
1050 | JMS I [MESSGE | |
1051 | ERROR6 /*UNIT * | |
1052 | JMS DECODE /PRINT UNIT NUMBER | |
1053 | JMS I [CRLF | |
1054 | JMP I [REWIND | |
1055 | SELECT, JMS ERR3 | |
1056 | ISZ FUNCTN /TURN AROUND AND TRY AGAIN | |
1057 | JMP FUNCTN-1 | |
1058 | ||
1059 | \f | |
1060 | ERR3, 0 | |
1061 | JMS I [MESSGE | |
1062 | ERROR3 /*SELECT ERROR UNIT * | |
1063 | JMS DECODE /PRINT UNIT NUMBER | |
1064 | JMS CTRLR /WAIT FOR CTRL/R | |
1065 | JMP I ERR3 /--RETURN-- | |
1066 | ||
1067 | ||
1068 | /DECODE UNIT NUMBER FOR PRINTING | |
1069 | /PRINT UNIT NUMBER BEFORE RETURNING | |
1070 | ||
1071 | DECODE, 0 | |
1072 | CLL | |
1073 | TAD UNIT | |
1074 | RAL | |
1075 | MQL /SAVE ROTATED CODE IN MQ | |
1076 | RAL | |
1077 | SWP /SAVE EVEN/ODD BIT IN MQ | |
1078 | RAR /WORK ON IOT CODE | |
1079 | RTR | |
1080 | IAC | |
1081 | CMA | |
1082 | AND [7 | |
1083 | MQA /INCLUDE EVEN/ODD BIT | |
1084 | TAD [260 /MAKE ASCII DIGIT | |
1085 | JMS I [TYPE | |
1086 | JMP I DECODE /--RETURN-- | |
1087 | ||
1088 | ||
1089 | PAGE | |
1090 | ||
1091 | \f | |
1092 | /TD8E DECTAPE HANDLER | |
1093 | ||
1094 | /SLIGHTLY MODIFIED VERSION OF DEC-E8-UZTA-D | |
1095 | /COPYRIGHT 1971 DIGITAL EQUIPMENT CORPORATION | |
1096 | / MAYNARD, MASSACHUSETTS 01754 | |
1097 | ||
1098 | /THE CALLING SEQUENCE IS: | |
1099 | / JMS ENTRY | |
1100 | / FUNCTION WORD | |
1101 | / BUFFER ADDRESS | |
1102 | / STARTING BLOCK | |
1103 | / ERROR RETURN | |
1104 | / NORMAL RETURN (AC CLEAR) | |
1105 | ||
1106 | /FUNCTION WORD: | |
1107 | / BIT 0: 0=READ, 1=WRITE | |
1108 | / BITS 1-5: # OF BLOCKS TO BE TRANSFERRED | |
1109 | / BITS 6-8: FIELD OF BUFFER AREA | |
1110 | / BITS 9-10: UNUSED | |
1111 | / BIT 11: 1=START FORWARD, 0=START REVERSE | |
1112 | ||
1113 | /ERRORS: | |
1114 | /THE HANDLER DETECTS TWO TYPES OF ERRORS: | |
1115 | /FATAL ERRORS: | |
1116 | / PARITY ERROR | |
1117 | / TIMING ERROR | |
1118 | / TOO GREAT A BLOCK NUMBER | |
1119 | /FATAL ERRORS TAKE ERROR RETURN WITH AC=4000 | |
1120 | /NON-FATAL ERROR: | |
1121 | / SELECT ERROR (IMPROPER UNIT NUMBER OR NO UNIT NUMBER) | |
1122 | /NON-FATAL ERROR TAKES ERROR RETURN WITH AC=0 | |
1123 | \fPAGE | |
1124 | ||
1125 | MFIELD=0 | |
1126 | ORIGIN=. | |
1127 | ||
1128 | DTA0, 0 /ENTRY POINT FROM UNIT 0 | |
1129 | CLA CLL /0 TO LINK | |
1130 | JMP DTA1X | |
1131 | C1000, 1000 | |
1132 | DTA1, 0 /UNIT 2 ENTRY | |
1133 | CLA CLL CML /1 TO LINK | |
1134 | TAD DTA1 | |
1135 | DCA DTA0 /PICK UP ARGS AT DTA0 | |
1136 | DTA1X, RAR | |
1137 | DCA YUNIT /LINK TO UNIT POSITION | |
1138 | RDF | |
1139 | TAD C6203 /GET DATA FIELD AND SETUP RETURN | |
1140 | DCA LEAVE | |
1141 | TAD YUNIT /GET FUNCTION WORD | |
1142 | IOT4, SDLC /PUT FUNCTION INTO DATA REGISTER | |
1143 | TAD I DTA0 | |
1144 | IOT1, SDLD | |
1145 | CLA | |
1146 | TAD MWORDS | |
1147 | DCA WCOUNT /STORE MASTER WORD COUNT | |
1148 | ISZ DTA0 /TO BUFFER | |
1149 | TAD I DTA0 | |
1150 | DCA BUFF | |
1151 | ISZ DTA0 /TO BLOCK NUMBER | |
1152 | TAD I DTA0 | |
1153 | DCA BLOCK | |
1154 | ISZ DTA0 /POINT TO ERROR EXIT | |
1155 | CIF CDF MFIELD /TO ROUTINES DATA FIELD | |
1156 | IOT2, SDRD /GET FUNCTION INTO AC | |
1157 | CLL RAL | |
1158 | AND CM200 /GET # PAGES TO XFER | |
1159 | DCA PGCT | |
1160 | IOT3, SDRD | |
1161 | C374, AND C70 /GET FIELD FOR XFER | |
1162 | TAD C6201 /FORM CDF N | |
1163 | DCA XFIELD /IF=0 AND DF=N AT XFER. | |
1164 | CLA CLL CMA RTL | |
1165 | DCA TRYCNT /3 ERROR TRIES | |
1166 | IOT5, SDRC | |
1167 | AND C100 | |
1168 | SZA CLA | |
1169 | JMP FATAL-1 | |
1170 | \f | |
1171 | IOT6, SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. | |
1172 | DCA I CXFUN | |
1173 | TAD WCOUNT | |
1174 | DCA I CXWCT | |
1175 | IOT7, SDRD /GET MOTION BIT TO LINK | |
1176 | CLL RAR | |
1177 | JMP GO /AND START THE MOTION. | |
1178 | RWCOM, SDST /ANY CHECKSUM ERRORS? | |
1179 | SZA CLA /OR CHECKSUM ERRORS? | |
1180 | JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS | |
1181 | /SET AT RWCOM. GETCHK SETS IT. | |
1182 | TAD PGCT /NO ERROR..FINISHED XFER? | |
1183 | TAD CM200 | |
1184 | SNA | |
1185 | JMP EXIT /ALL DONE. GET OUT | |
1186 | DCA PGCT /NEW PAGE COUNT | |
1187 | ISZ BLOCK /NEXT BLOCK TO XFER | |
1188 | TAD WCOUNT /FORM NEXT BUFFER ADDRESS | |
1189 | CIA | |
1190 | TAD BUFF | |
1191 | DCA BUFF | |
1192 | CLL CML /FORCES MOTION FORWARD | |
1193 | GO, CLA CML RTR /LINK BECOMES MOTION BIT | |
1194 | TAD C1000 | |
1195 | TAD YUNIT /PUT IN 'GO' AND UNIT # | |
1196 | IOT8, SDLC /LOOK FOR BLOCK NO. | |
1197 | JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK | |
1198 | JMS I CRDQUD | |
1199 | CM200, 7600 /COULD HAVE SAVED A LOC. HERE | |
1200 | SRCH, SDSS | |
1201 | JMP .-1 /WAIT FOR SINGLE LINE FLAG | |
1202 | IOT9, SDRC | |
1203 | CLL RTL /DIRECTION TO LINK. INFO BITS | |
1204 | /ARE SHIFTED. | |
1205 | AND C374 /ISOLATE MARK TRACK BITS | |
1206 | TAD M110 /IS IT END ZONE? | |
1207 | SNA /THE LINK STAYS SAME THRU THIS | |
1208 | JMP ENDZ | |
1209 | TAD M20 /CHECK FOR BLOCK MARK | |
1210 | SZA CLA | |
1211 | JMP SRCH | |
1212 | IOT10, SDRD /GET THE BLOCK NUMBER | |
1213 | SZL /IF WE ARE IN REVERSE, LOOK FOR 3 | |
1214 | /BLOCKS BEFORE TARGET BLOCK. THIS | |
1215 | /ALLOWS TURNAROUND AND UP TO SPEED. | |
1216 | TAD C3 /REVERSE | |
1217 | CMA | |
1218 | TAD BLOCK | |
1219 | CMA /IS IT RIGHT BLOCK? | |
1220 | SNA | |
1221 | JMP FOUND /YES..HOORAY! | |
1222 | M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? | |
1223 | /ABOVE SNA IS SUPERFLUOUS. | |
1224 | JMP SRCH /YES | |
1225 | ENDZ, SDRC /WE ARE IN THE END ZONE | |
1226 | CLL RTL /DIRECTION TO LINK | |
1227 | CLA /ARE WE IN REVERSE? | |
1228 | JMP GO /YES..TURN US AROUND | |
1229 | /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR | |
1230 | TRY3, CLL CLA | |
1231 | ISZ TRYCNT | |
1232 | JMP GO /TRY 3 TIMES | |
1233 | CLL CLA | |
1234 | JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN | |
1235 | EXIT, ISZ DTA0 | |
1236 | CLL CML /AC=0 ON NORMAL RETURN | |
1237 | FATAL, TAD YUNIT | |
1238 | SDLC /STOP THE UNIT | |
1239 | CLA CML RAR | |
1240 | LEAVE, HLT | |
1241 | JMP I DTA0 /--RETURN-- | |
1242 | ||
1243 | \f | |
1244 | C6201, 6201 | |
1245 | C6203, 6203 | |
1246 | CRDQUD, RDQUAD | |
1247 | WCOUNT, 0 | |
1248 | BUFF, 0 | |
1249 | MWORDS, 0 | |
1250 | YUNIT, 0 | |
1251 | CXFUN, XFUNCT | |
1252 | M20, -20 | |
1253 | PGCT, 0 | |
1254 | CXWCT, XWCT | |
1255 | C100, 100 | |
1256 | TRYCNT, -3 | |
1257 | BLOCK=DTA1 | |
1258 | ||
1259 | ||
1260 | *ORIGIN+170 | |
1261 | FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? | |
1262 | JMP GO /WRONG..TURN AROUND | |
1263 | TAD YUNIT /PUT UNIT INTO LINK | |
1264 | CLL RAL /AC IS NOW 0 | |
1265 | C70, 70 /********DON'T MOVE THIS!!!!****** | |
1266 | C3, 3 | |
1267 | TAD BUFF /GET BUFFER ADDRESS | |
1268 | XFIELD, HLT /INTO NEXT PAGE | |
1269 | ||
1270 | *ORIGIN+200 | |
1271 | XUNIT=EQUFUN | |
1272 | ||
1273 | DCA XBUFF | |
1274 | IOT16, SDRC | |
1275 | IOT17, SDLC | |
1276 | RAR /NOW GET UNIT # | |
1277 | DCA XUNIT | |
1278 | REVGRD, SDSS | |
1279 | JMP REVGRD /LOOK FOR REVERSE GUARD | |
1280 | IOT11, SDRC | |
1281 | AND K77 | |
1282 | TAD CM32 /IS IT REVERSE GUARD? | |
1283 | SZA CLA | |
1284 | JMP REVGRD /NO.KEEP LOOKING | |
1285 | TAD XWCT | |
1286 | DCA WORDS /WORD COUNTER | |
1287 | TAD XFUNCT /GET FUNCTION READ OR WRITE | |
1288 | K7700, SMA CLA | |
1289 | JMP READ /NEG. IS WRITE | |
1290 | WRITE, SDRC | |
1291 | AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR | |
1292 | CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS | |
1293 | SZA CLA | |
1294 | JMP I CFATAL /FATAL ERROR. LINK MUST BE ON | |
1295 | JMS RDQUAD /NO ONE EVER USES THIS WORD! | |
1296 | C7600, 7600 | |
1297 | TAD C1400 | |
1298 | TAD XUNIT /INITIATE WRITE MODE | |
1299 | IOT12, SDLC | |
1300 | CLA CMA | |
1301 | JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM | |
1302 | CLA CMA | |
1303 | DCA CHKSUM | |
1304 | WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! | |
1305 | JMS WRQUAD | |
1306 | ISZ XBUFF /BUMP CORE POINTER | |
1307 | K77, 77 /ABOVE MAY SKIP | |
1308 | ISZ WORDS /DONE THIS BLOCK? | |
1309 | JMP WRLP /NOT YET..LOOP A WHILE | |
1310 | TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? | |
1311 | CLL RTR /IF NO, WRITE A 0 WORD | |
1312 | SZL CLA | |
1313 | \f | |
1314 | JMS WRQUAD /WRITE A WORD OF 0 | |
1315 | JMS GETCHK /DO THE CHECK SUM | |
1316 | JMS WRQUAD /WRITE FORWARD CHECKSUM | |
1317 | JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN | |
1318 | JMP I CRWCOM | |
1319 | ||
1320 | ||
1321 | READ, JMS RDQUAD | |
1322 | JMS RDQUAD | |
1323 | JMS RDQUAD /SKIP CONTROL WORDS | |
1324 | AND K77 | |
1325 | TAD K7700 /TACK 7700 ONTO CHECKSUM. | |
1326 | DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY | |
1327 | RDLP, JMS RDQUAD | |
1328 | JMS EQUFUN /COMPUT CHECKSUM AS WE GO | |
1329 | DCA I XBUFF /IT GETS CONDENSED LATER | |
1330 | ISZ XBUFF | |
1331 | C300, 300 /PROTECTION | |
1332 | ISZ WORDS /DONE THIS OP? | |
1333 | JMP RDLP /NO SUCH LUCK | |
1334 | TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND | |
1335 | CLL RTR /CHECKSUM THE LAST TAPE WORD | |
1336 | SNL CLA | |
1337 | JMP RDLP2 | |
1338 | JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK | |
1339 | JMS EQUFUN /CHECKSUM IT | |
1340 | RDLP2, JMS RDQUAD /READ CHECKSUM | |
1341 | AND K7700 | |
1342 | JMS EQUFUN | |
1343 | JMS GETCHK /GET SIX BIT CHECKSUM | |
1344 | JMP I CRWCOM | |
1345 | ||
1346 | WRQUAD, 0 /WRITE OUT A 12 BIT WORD | |
1347 | JMS EQUFUN /ADD THIS TO CHECKSUM | |
1348 | IOT13, SDSQ /SKIP ON QUADLINE FLAG | |
1349 | JMP .-1 | |
1350 | IOT14, SDLD /LOAD DATA ONTO BUS | |
1351 | CLA /SDLD DOESN'T CLEAR AC | |
1352 | JMP I WRQUAD | |
1353 | ||
1354 | RDQUAD, 0 /READ A 12 BIT WORD | |
1355 | SDSQ | |
1356 | JMP .-1 | |
1357 | IOT15, SDRD /READ DATA | |
1358 | JMP I RDQUAD | |
1359 | ||
1360 | \f | |
1361 | EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM | |
1362 | CMA | |
1363 | DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE | |
1364 | TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD | |
1365 | AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE | |
1366 | CIA /IS ASSOCIATIVE, WE CAN DO IT 12 | |
1367 | CLL RAL /BITS AT A TIME AND CONDENSE LATER. | |
1368 | TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: | |
1369 | TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) | |
1370 | DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) | |
1371 | TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) | |
1372 | CMA | |
1373 | JMP I EQUFUN | |
1374 | ||
1375 | GETCHK, 0 /FORM 6 BIT CHECKSUM | |
1376 | CLA | |
1377 | TAD CHKSUM | |
1378 | CMA | |
1379 | CLL RTL | |
1380 | RTL | |
1381 | RTL | |
1382 | JMS EQUFUN | |
1383 | CLA CLL CML /FORCES LINK ON AT RWCOM | |
1384 | TAD CHKSUM | |
1385 | AND K7700 | |
1386 | JMP I GETCHK | |
1387 | ||
1388 | CFATAL, FATAL | |
1389 | CRWCOM, RWCOM | |
1390 | XFUNCT, 0 | |
1391 | CM32, -32 | |
1392 | C1400, 1400 | |
1393 | CHKSUM, 0 | |
1394 | WORDS, 0 | |
1395 | XBUFF, 0 | |
1396 | XWCT, 0 | |
1397 | EQUTMP, 0 | |
1398 | ||
1399 | \fPAGE | |
1400 | / | |
1401 | / | |
1402 | PARITY, 0 | |
1403 | KRB | |
1404 | AND [177 | |
1405 | TAD [200 | |
1406 | JMP I PARITY | |
1407 | ||
1408 | /IOT TABLES FOR TD8E SUBROUTINE | |
1409 | ||
1410 | IOTLOC, IOT1 | |
1411 | IOT2 | |
1412 | IOT3 | |
1413 | IOT4 | |
1414 | IOT5 | |
1415 | IOT6 | |
1416 | IOT7 | |
1417 | RWCOM | |
1418 | IOT8 | |
1419 | SRCH | |
1420 | IOT9 | |
1421 | IOT10 | |
1422 | ENDZ | |
1423 | FATAL+1 | |
1424 | REVGRD | |
1425 | IOT11 | |
1426 | WRITE | |
1427 | IOT12 | |
1428 | IOT13 | |
1429 | IOT14 | |
1430 | RDQUAD+1 | |
1431 | IOT15 | |
1432 | IOT16 | |
1433 | TABEND, IOT17 | |
1434 | ||
1435 | UNITS=. | |
1436 | UNIT01 | |
1437 | UNIT23 | |
1438 | UNIT45 | |
1439 | UNIT67 | |
1440 | ||
1441 | RTAB, IOTR1 | |
1442 | IOTR2 | |
1443 | IOTR3 | |
1444 | IOTR4 | |
1445 | IOTR5 | |
1446 | IOTR6 | |
1447 | ||
1448 | ||
1449 | /IOT TABLES FOR WORDS PER BLOCK ROUTINE | |
1450 | ||
1451 | TABLE1, IOTX1 | |
1452 | IOTX2 | |
1453 | IOTX3 | |
1454 | IOTX4 | |
1455 | IOTX5 | |
1456 | IOTX6 | |
1457 | IOTX7 | |
1458 | END1, IOTX8 | |
1459 | ||
1460 | \fMESSG4, TEXT @FROM UNIT:@ | |
1461 | MESSG5, TEXT @TO UNITS:@ | |
1462 | ERROR5, TEXT @ILLEGAL FORMAT UNIT @ | |
1463 | ERROR6, TEXT @ UNIT @ | |
1464 | ERROR4, TEXT @ILLEGAL RESPONSE@ | |
1465 | ||
1466 | \f | |
1467 | PAGE | |
1468 | /ONCE ONLY CODE | |
1469 | ||
1470 | END, JMS I (QUEST | |
1471 | MESSG2 /@HIGHEST FIELD AVAILABLE:@ | |
1472 | ACL | |
1473 | AND [7 | |
1474 | CIA | |
1475 | DCA FIELDS | |
1476 | TAD (CDF | |
1477 | DCA CDF00 | |
1478 | TAD FIELDS | |
1479 | SNA /MORE THAN 1 FIELD?? | |
1480 | JMP LIM /NO--NO PROBLEM | |
1481 | DCA COUNT1 /YES--ARE THEY ALL PRESENT? | |
1482 | NEXT, TAD CDF00 | |
1483 | TAD (10 | |
1484 | DCA CDF00 /SET FOR DATA FIELD CHANGE | |
1485 | TAD (HLT | |
1486 | CDF00, CDF | |
1487 | DCA I (10 /TRY LOCATION 10 | |
1488 | TAD I (10 | |
1489 | CDF 0 | |
1490 | CIA | |
1491 | TAD (HLT | |
1492 | SNA CLA /IS FIELD THERE? | |
1493 | JMP NEXT1 /YES--TRY NEXT ONE | |
1494 | JMS I [MESSGE /NO | |
1495 | ERROR4 /ILLEGAL RESPONSE | |
1496 | JMS I [CRLF /CARRIAGE RETURN/LINE FEED | |
1497 | DCA COUNT /CLEAR COUNT | |
1498 | JMP END /TRY AGAIN | |
1499 | NEXT1, ISZ COUNT1 /DONE YET? | |
1500 | JMP NEXT /NO | |
1501 | ||
1502 | LIM, TAD (LIMIT-END /SET BEGINNING OF VERIFY BUFFER | |
1503 | CLL RAR | |
1504 | TAD [END | |
1505 | DCA END0 | |
1506 | TAD (NOP | |
1507 | DCA I (START1-1 | |
1508 | JMP I (START1 | |
1509 | MESSG2, TEXT @HIGHEST FIELD AVAILABLE:@ | |
1510 | ||
1511 | FIELD 0 | |
1512 | *200 | |
1513 | ||
1514 | $ | |
1515 | \f\f |