Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | / TD8E Dectape DUMP Program |
2 | / This program will send a Dectape image out the console port. | |
3 | / The format of the data sent is 0xff (0377) or 0xfd if read error | |
4 | / followed by 128 word of data for each block. | |
5 | / After the last block a 0xfe (0376) is sent | |
6 | / with a two byte checksum, low 8 bits first then upper 4. | |
7 | / The words in a block are sent as three bytes for each 2 words. | |
8 | / 1 = low 8 bits first word | |
9 | / 2 = upper 4 bits first and lower 4 bits second | |
10 | / 3 = upper 8 bits second word | |
11 | / | |
12 | / The program (PC) receiving the data should be started before this program | |
13 | / | |
14 | / To run start at 0200. | |
15 | / SR 11 should be drive, only 0 and 1 supported without reassembling | |
16 | / SR 6-8 should be maximum memory field in computer, needs 8k minimum | |
17 | / The receiving program should be running first. | |
18 | / At normal exit hitting cont will restart the program | |
19 | / | |
20 | / Should halt at label finish (140) with number of recoverable errors in AC | |
21 | / The current block being read will be displayed in the AC | |
22 | / while running. | |
23 | / | |
24 | / If a unrecoverable error occurs the program will halt with the error in | |
25 | / the AC. Hit continue to dump more or comment out hlt, search for *****. | |
26 | / The PC program will print out the bad location if an error occurs | |
27 | / | |
28 | / We will retry each read up to 16 times on error | |
29 | / | |
30 | / This transfers the standard 129 word by 1474 blocks used by OS/8 etc. | |
31 | / Other formats can be handled by changing constants below | |
32 | ||
33 | INAD=030 / Address of serial input, 30 for console | |
34 | KCF2=6000 INAD | |
35 | KSF2=6001 INAD | |
36 | KCC2=6002 INAD | |
37 | KRS2=6004 INAD | |
38 | KIE2=6005 INAD | |
39 | KRB2=6006 INAD | |
40 | ||
41 | OUTAD=040 / Address of serial output, 40 for console | |
42 | TFL2=6000 OUTAD | |
43 | TSF2=6001 OUTAD | |
44 | TCF2=6002 OUTAD | |
45 | TPC2=6004 OUTAD | |
46 | TSK2=6005 OUTAD | |
47 | TLS2=6006 OUTAD | |
48 | ||
49 | /2 TD8E INITIALIZER PROGRAM, V7A | |
50 | / | |
51 | /COPYRIGHT (C) 1975, 1977 | |
52 | /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. | |
53 | / | |
54 | / | |
55 | / | |
56 | /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A | |
57 | /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- | |
58 | /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER | |
59 | /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE | |
60 | /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO | |
61 | /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE | |
62 | /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. | |
63 | / | |
64 | / | |
65 | /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT | |
66 | /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL | |
67 | /EQUIPMRNT COROPATION. | |
68 | / | |
69 | /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS | |
70 | /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. | |
71 | / | |
72 | / | |
73 | / | |
74 | / | |
75 | / | |
76 | / | |
77 | \f | |
78 | /DECEMBER 21, 1973 GB/RL/EF/SR | |
79 | ||
80 | /ABSTRACT-- | |
81 | / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL | |
82 | /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE | |
83 | /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT | |
84 | /WHICH IS COMPATIBLE WITH OS/8 DEVICE HANDLER CALLING | |
85 | /SEQUENCES. | |
86 | ||
87 | /FIXES SINCE FIELD-TEST RELEASE: | |
88 | ||
89 | /1. FIXED BUG RE CLA ON RETRY AFTER ERROR | |
90 | /2. ALLOWED FINAL BOOTSTRAP TO BE INTO A WRITE-LOCKED DEVICE | |
91 | ||
92 | /OS/8 V3D CHANGES: | |
93 | ||
94 | /3. FIXED BUG RE TD8E BUILD (V6B PATCH) | |
95 | \f | |
96 | /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE | |
97 | /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS | |
98 | /CONTROL: | |
99 | /A) WHAT DRIVES (UNITS 0-7) WILL BE USED | |
100 | /B) THE ORIGIN OF THE TWO PAGE ROUTINE | |
101 | /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN | |
102 | /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN | |
103 | ||
104 | /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD | |
105 | /DEC VERSION OF THIS ROUTINE: | |
106 | ||
107 | DRIVE=10 /UNITS 0 AND 1 SELECTED | |
108 | ORIGIN=600 /ENTER AT ORIGIN, ORIGIN+4 | |
109 | AFIELD=0 /INITIAL FIELD SETTING | |
110 | MFIELD=00 /AFIELD*10=MFIELD | |
111 | WDSBLK=201 /129 WORDS PER BLOCK | |
112 | ||
113 | /THE USE OF THE PARAMETERS IS AS FOLLOWS: | |
114 | ||
115 | / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED | |
116 | / DRIVE=10 IMPLIES UNITS 0 &1 | |
117 | / DRIVE=20 IMPLIES UNITS 2&3 | |
118 | / DRIVE=30 IMPLIES UNITS 4&5 | |
119 | / DRIVE=40 IMPLIES UNITS 6&7 | |
120 | ||
121 | /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT | |
122 | / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND | |
123 | /THAT THIS IS A TWO PAGE ROUTINE. | |
124 | ||
125 | /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE | |
126 | / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. | |
127 | ||
128 | /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. | |
129 | / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES | |
130 | / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. | |
131 | ||
132 | /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE | |
133 | / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR | |
134 | / 128 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN | |
135 | / 129 DECIMAL ??? (DJG) | |
136 | / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED | |
137 | / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS | |
138 | / FORMATTED TO CONTAIN. | |
139 | ||
140 | /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN | |
141 | /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS | |
142 | /PER BLOCK, THE PARAMETERS WOULD BE: | |
143 | / DRIVE=20 | |
144 | / ORIGIN=3000 | |
145 | / AFIELD=2 | |
146 | / MFIELD=20 | |
147 | / WDSBLK=400 | |
148 | \f/THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE | |
149 | /CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS. | |
150 | /THE CALLING SEQUENCE IS: | |
151 | ||
152 | / CDF CURRENT | |
153 | / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN | |
154 | / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE | |
155 | /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. | |
156 | / ARG1 | |
157 | / ARG1B (DJG) | |
158 | / ARG2 | |
159 | / ARG3 | |
160 | / ERROR RETURN | |
161 | / NORMAL RETURN | |
162 | ||
163 | /THE ARGUMENTS ARE: | |
164 | ||
165 | /ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE | |
166 | / BITS 1-5: UNUSED, WAS # BLOCKS IN OPERATION (DJG) | |
167 | / BITS 6-8: FIELD OF BUFFER AREA | |
168 | / BIT 9: UNUSED | |
169 | / BIT 10: # OF WORDS/BLOCK. | |
170 | / 0= WDSBLK, 1=WDSBLK-1 | |
171 | / BIT 11: 1=START FORWARD, 0=REVERSE | |
172 | /ARG1A: # OF BLOCKS IN OPERATIONA (DJG) | |
173 | /ARG2: BUFFER ADDRESS FOR OPERATION | |
174 | /ARG3: STARTING BLOCK FOR OPERATION | |
175 | ||
176 | /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: | |
177 | /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, | |
178 | / TOO GREAT A BLOCK NUMBER | |
179 | / FATAL ERRORS TAKE ERROR RETURN WITH THE | |
180 | / AC=4000. | |
181 | /B) NON-FATAL- SELECT ERROR. | |
182 | / IF NO PROPER UNIT IS SELECTED, THE ERROR | |
183 | / RETURN IS TAKEN WITH CLEAR AC. | |
184 | /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. | |
185 | /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED | |
186 | /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. | |
187 | ||
188 | /THE TD8E IOT'S ARE: | |
189 | SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG | |
190 | SDST=7002-DRIVE /SKIP ON TIMING ERROR | |
191 | SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG | |
192 | SDLC=7004-DRIVE /LOAD COMMAND REGISTER | |
193 | SDLD=7005-DRIVE /LOAD DATA REGISTER | |
194 | SDRC=7006-DRIVE /READ COMMAND REGISTER | |
195 | SDRD=7007-DRIVE /READ DATA REGISTER | |
196 | ||
197 | /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. | |
198 | /THE OTHERS CONTROL UNITS 2-7. | |
199 | ||
200 | / THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS ! | |
201 | ||
202 | *ORIGIN | |
203 | ||
204 | / MODIFIED SO BIT 0 ON ENTRY IS UNIT 1 | |
205 | DTA0, 0 | |
206 | DCA UNIT /SAVE UNIT POSITION | |
207 | RDF | |
208 | TAD C6203 /GET DATA FIELD AND SETUP RETURN | |
209 | DCA LEAVE | |
210 | TAD I DTA0 /GET FUNCTION WORD | |
211 | SDLD /PUT FUNCTION INTO DATA REGISTER | |
212 | CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER | |
213 | /BLOCK INTO LINK | |
214 | SZL CLA /KNOCK ONE OFF WDSBLK? | |
215 | IAC /YES | |
216 | TAD MWORDS | |
217 | DCA WCOUNT /STORE MASTER WORD COUNT | |
218 | ISZ DTA0 /TO BLOCK COUNT (DJG) | |
219 | TAD I DTA0 / (DJG) | |
220 | CIA / (DJG) | |
221 | DCA PGCT / (DJG) | |
222 | ISZ DTA0 /TO BUFFER | |
223 | TAD I DTA0 | |
224 | DCA XBUFF /SAVE ADDRESS (DJG) | |
225 | / DCA BUFF | |
226 | ISZ DTA0 /TO BLOCK NUMBER | |
227 | TAD I DTA0 | |
228 | DCA BLOCK | |
229 | ISZ DTA0 /POINT TO ERROR EXIT | |
230 | CIF CDF MFIELD /TO ROUTINES DATA FIELD | |
231 | / SDRD /GET FUNCTION INTO AC | |
232 | / CLL RAL | |
233 | / AND CM200 /GET # PAGES TO XFER | |
234 | / DCA PGCT | |
235 | SDRD | |
236 | AND C70 /GET FIELD FOR XFER | |
237 | TAD C6201 /FORM CDF N | |
238 | DCA XFIELD /IF=0 AND DF=N AT XFER. | |
239 | TAD UNIT /TEST FOR SELECT ERROR | |
240 | SDLC | |
241 | CLA / Moved here because my drive 1 is slow selecting | |
242 | TAD RETRY | |
243 | DCA TRYCNT /3 ERROR TRIES | |
244 | SDRC | |
245 | AND C100 | |
246 | SZA CLA | |
247 | JMP FATAL-1 | |
248 | SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. | |
249 | DCA I CXFUN | |
250 | TAD WCOUNT | |
251 | DCA I CXWCT | |
252 | SDRD /GET MOTION BIT TO LINK | |
253 | CLL RAR | |
254 | XFIELD, HLT /INTO NEXT PAGE | |
255 | JMP GO /AND START THE MOTION. | |
256 | RWCOM, SDST /ANY CHECKSUM ERRORS? | |
257 | SZA CLA /OR CHECKSUM ERRORS? | |
258 | JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS | |
259 | /SET AT RWCOM. GETCHK SETS IT. | |
260 | / TAD PGCT /NO ERROR..FINISHED XFER? | |
261 | / TAD CM200 | |
262 | / SNA | |
263 | ISZ PGCT / (DJG) | |
264 | SKP / (DJG) | |
265 | JMP EXIT /ALL DONE. GET OUT | |
266 | / DCA PGCT /NEW PAGE COUNT | |
267 | ISZ BLOCK /NEXT BLOCK TO XFER | |
268 | / TAD WCOUNT /FORM NEXT BUFFER ADDRESS | |
269 | / CIA | |
270 | / TAD BUFF | |
271 | / DCA XBUFF /SAVE ADDRESS (DJG) | |
272 | / DCA BUFF / (DJG) | |
273 | CLL CML /FORCES MOTION FORWARD | |
274 | GO, CLA CML RTR /LINK BECOMES MOTION BIT | |
275 | TAD C1000 | |
276 | TAD UNIT /PUT IN 'GO' AND UNIT # | |
277 | SDLC /LOOK FOR BLOCK NO. | |
278 | CLA | |
279 | TAD XBUFF | |
280 | DCA OLDBUF | |
281 | RDF | |
282 | TAD C6201 | |
283 | DCA OLDFLD | |
284 | JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK | |
285 | JMS I CRDQUD | |
286 | CM200, 7600 /COULD HAVE SAVED A LOC. HERE | |
287 | SRCH, SDSS | |
288 | JMP .-1 /WAIT FOR SINGLE LINE FLAG | |
289 | SDRC | |
290 | CLL RTL /DIRECTION TO LINK. INFO BITS | |
291 | /ARE SHIFTED. | |
292 | AND C374 /ISOLATE MARK TRACK BITS | |
293 | TAD M110 /IS IT END ZONE? | |
294 | SNA /THE LINK STAYS SAME THRU THIS | |
295 | JMP ENDZ | |
296 | TAD M20 /CHECK FOR BLOCK MARK | |
297 | SZA CLA | |
298 | JMP SRCH | |
299 | SDRD /GET THE BLOCK NUMBER | |
300 | SZL /IF WE ARE IN REVERSE, LOOK FOR 3 | |
301 | /BLOCKS BEFORE TARGET BLOCK. THIS | |
302 | /ALLOWS TURNAROUND AND UP TO SPEED. | |
303 | TAD C3 /REVERSE | |
304 | CMA | |
305 | TAD BLOCK | |
306 | CMA /IS IT RIGHT BLOCK? | |
307 | SNA | |
308 | JMP FOUND /YES..HOORAY! | |
309 | M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? | |
310 | /ABOVE SNA IS SUPERFLUOUS. | |
311 | JMP SRCH /YES | |
312 | ENDZ, SDRC /WE ARE IN THE END ZONE | |
313 | CLL RTL /DIRECTION TO LINK | |
314 | CLA /ARE WE IN REVERSE? | |
315 | JMP GO /YES..TURN US AROUND | |
316 | /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR | |
317 | TRY3, CLA | |
318 | OLDFLD, NOP | |
319 | TAD OLDBUF | |
320 | DCA XBUFF | |
321 | ISZ TRYCNT | |
322 | JMP GO /TRY 3 TIMES | |
323 | JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN | |
324 | EXIT, ISZ DTA0 | |
325 | CLL CML /AC=0 ON NORMAL RETURN | |
326 | FATAL, TAD UNIT | |
327 | SDLC /STOP THE UNIT | |
328 | CLA CML RAR | |
329 | LEAVE, HLT | |
330 | JMP I DTA0 | |
331 | ||
332 | \f | |
333 | C6203, 6203 | |
334 | C6201, 6201 | |
335 | CRDQUD, RDQUAD | |
336 | /WCOUNT, 0 (MOVED PAGE 0 DJG) | |
337 | BUFF, 0 | |
338 | /MWORDS, -WDSBLK (MOVED PAGE 0 DJG) | |
339 | UNIT, 0 | |
340 | CXFUN, XFUNCT | |
341 | M20, -20 | |
342 | PGCT, 0 | |
343 | CXWCT, XWCT | |
344 | C100, 100 | |
345 | TRYCNT, -3 | |
346 | C1000, 1000 | |
347 | ||
348 | ||
349 | *ORIGIN+172 | |
350 | FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? | |
351 | JMP GO /WRONG..TURN AROUND | |
352 | TAD UNIT /PUT UNIT INTO LINK | |
353 | CLL RAL /AC IS NOW 0 | |
354 | C70, 70 /********DON'T MOVE THIS!!!!****** | |
355 | C3, 3 | |
356 | / TAD BUFF /GET BUFFER ADDRESS (DJG) | |
357 | /XFIELD, HLT /INTO NEXT PAGE | |
358 | \f *ORIGIN+200 | |
359 | CIF MFIELD | |
360 | / DCA XBUFF /SAVE ADDRESS (DJG) | |
361 | RAR /NOW GET UNIT # | |
362 | DCA XUNIT | |
363 | SDRC | |
364 | SDLC | |
365 | REVGRD, SDSS | |
366 | JMP .-1 /LOOK FOR REVERSE GUARD | |
367 | SDRC | |
368 | AND K77 | |
369 | TAD CM32 /IS IT REVERSE GUARD? | |
370 | SZA CLA | |
371 | JMP REVGRD /NO.KEEP LOOKING | |
372 | TAD XWCT | |
373 | DCA WORDS /WORD COUNTER | |
374 | TAD XFUNCT /GET FUNCTION READ OR WRITE | |
375 | K7700, SMA CLA | |
376 | JMP READ /NEG. IS WRITE | |
377 | WRITE, SDRC | |
378 | AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR | |
379 | CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS | |
380 | SZA CLA | |
381 | JMP I CFATAL /FATAL ERROR. LINK MUST BE ON | |
382 | JMS RDQUAD /NO ONE EVER USES THIS WORD! | |
383 | C7600, 7600 | |
384 | TAD C1400 | |
385 | TAD XUNIT /INITIATE WRITE MODE | |
386 | SDLC | |
387 | CLA CMA | |
388 | JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM | |
389 | CLA CMA | |
390 | DCA CHKSUM | |
391 | WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! | |
392 | JMS WRQUAD | |
393 | ISZ XBUFF /BUMP CORE POINTER | |
394 | JMP STFLD1+1 /NOT AT END OF FIELD (DJG) | |
395 | RDF | |
396 | TAD (6211 | |
397 | DCA STFLD1 | |
398 | STFLD1, NOP | |
399 | ISZ WORDS /DONE THIS BLOCK? | |
400 | JMP WRLP /NOT YET..LOOP A WHILE | |
401 | TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? | |
402 | CLL RTR /IF NO, WRITE A 0 WORD | |
403 | SZL CLA | |
404 | JMS WRQUAD /WRITE A WORD OF 0 | |
405 | JMS GETCHK /DO THE CHECK SUM | |
406 | JMS WRQUAD /WRITE FORWARD CHECKSUM | |
407 | JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN | |
408 | JMP I CRWCOM | |
409 | K77, 77 /ABOVE MAY SKIP (NOT ANYMORE DJG) | |
410 | \fREAD, JMS RDQUAD | |
411 | JMS RDQUAD | |
412 | JMS RDQUAD /SKIP CONTROL WORDS | |
413 | AND K77 | |
414 | TAD K7700 /TACK 7700 ONTO CHECKSUM. | |
415 | DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY | |
416 | RDLP, JMS RDQUAD | |
417 | JMS EQUFUN /COMPUT CHECKSUM AS WE GO | |
418 | DCA I XBUFF /IT GETS CONDENSED LATER | |
419 | ISZ XBUFF /AT END OF FIELD? | |
420 | JMP STFLD2+1 /NOT AT END OF FIELD (DJG) | |
421 | RDF | |
422 | TAD (6211 | |
423 | DCA STFLD2 | |
424 | STFLD2, NOP | |
425 | ISZ WORDS /DONE THIS OP? | |
426 | JMP RDLP /NO SUCH LUCK | |
427 | TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND | |
428 | CLL RTR /CHECKSUM THE LAST TAPE WORD | |
429 | SNL CLA | |
430 | JMP RDLP2 | |
431 | JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK | |
432 | JMS EQUFUN /CHECKSUM IT | |
433 | RDLP2, JMS RDQUAD /READ CHECKSUM | |
434 | AND K7700 | |
435 | JMS EQUFUN | |
436 | JMS GETCHK /GET SIX BIT CHECKSUM | |
437 | JMP I CRWCOM | |
438 | C300, 300 /PROTECTION (NOT ANYMORE DJG) | |
439 | ||
440 | WRQUAD, 0 /WRITE OUT A 12 BIT WORD | |
441 | JMS EQUFUN /ADD THIS TO CHECKSUM | |
442 | SDSQ /SKIP ON QUADLINE FLAG | |
443 | JMP .-1 | |
444 | SDLD /LOAD DATA ONTO BUS | |
445 | CLA /SDLD DOESN'T CLEAR AC | |
446 | JMP I WRQUAD | |
447 | ||
448 | RDQUAD, 0 /READ A 12 BIT WORD | |
449 | SDSQ | |
450 | JMP .-1 | |
451 | SDRD /READ DATA | |
452 | JMP I RDQUAD | |
453 | ||
454 | \fXUNIT, | |
455 | EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM | |
456 | CMA | |
457 | DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE | |
458 | TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD | |
459 | AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE | |
460 | CIA /IS ASSOCIATIVE, WE CAN DO IT 12 | |
461 | CLL RAL /BITS AT A TIME AND CONDENSE LATER. | |
462 | TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: | |
463 | TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) | |
464 | DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) | |
465 | TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) | |
466 | CMA | |
467 | JMP I EQUFUN | |
468 | ||
469 | GETCHK, 0 /FORM 6 BIT CHECKSUM | |
470 | CLA | |
471 | TAD CHKSUM | |
472 | CMA | |
473 | CLL RTL | |
474 | RTL | |
475 | RTL | |
476 | JMS EQUFUN | |
477 | CLA CLL CML /FORCES LINK ON AT RWCOM | |
478 | TAD CHKSUM | |
479 | AND K7700 | |
480 | JMP I GETCHK | |
481 | ||
482 | CFATAL, FATAL | |
483 | CRWCOM, RWCOM | |
484 | XFUNCT, 0 | |
485 | CM32, -32 | |
486 | C1400, 1400 | |
487 | CHKSUM, 0 | |
488 | WORDS, 0 | |
489 | XWCT, 0 | |
490 | EQUTMP, 0 | |
491 | ||
492 | *20 | |
493 | RETRY, 7774 / RETRY UP TO 4 TIME | |
494 | NUMBLK, 2702 / NUMBER OF BLOCKS | |
495 | MWORDS, -WDSBLK / WORDS PER BLOCK | |
496 | WCOUNT, 0 | |
497 | BLKFLD, 37 / 31 129 word blocks per field | |
498 | / WRAPPING PAST END OF LAST FIELD DOESN'T WORK | |
499 | FIELDS, 0 | |
500 | RDSIZE, 0 / NUMBER BLOCKS PER READ | |
501 | CBLOCK, 0 / CURRENT BLOCK TO XFER | |
502 | CLKSUM, 0 | |
503 | DRVSEL, 0 | |
504 | READST, 377 | |
505 | LOC, 0 | |
506 | LEN, 0 | |
507 | BCNT, 0 / BLOCKS TO SEND TO PC | |
508 | TEMP, 0 | |
509 | C17, 17 | |
510 | C360, 360 | |
511 | CHKSM, 0 | |
512 | ERRCN2, 0 | |
513 | OLDBUF, 0 / USED BY DTA0 ROUTINE | |
514 | XBUFF, 0 / USED BY DTA0 ROUTINE | |
515 | C374, 374 / USED BY DTA0 ROUTINE | |
516 | BLOCK, 0 / USED BY DTA0 ROUTINE | |
517 | ||
518 | *140 | |
519 | FINISH, HLT / Normal good halt | |
520 | JMP START | |
521 | ||
522 | *200 | |
523 | START, CDF 0 | |
524 | CAF | |
525 | CLA CLL OSR / Get drive | |
526 | AND (1 | |
527 | RTR | |
528 | DCA DRVSEL | |
529 | CLA CLL OSR / Get max field | |
530 | RTR | |
531 | RAR | |
532 | AND (7 | |
533 | SNA | |
534 | HLT / Must have at least 1 field for buffer | |
535 | CIA | |
536 | DCA FIELDS | |
537 | DCA ERRCN2 | |
538 | RDSZLP, TAD BLKFLD / Multiply by number of fields available | |
539 | ISZ FIELDS | |
540 | JMP RDSZLP | |
541 | DCA RDSIZE / NUMBER BLOCK PER READ | |
542 | DCA CBLOCK | |
543 | DCA CHKSM | |
544 | ||
545 | DUMPLP, CLA | |
546 | TAD RDSIZE | |
547 | TAD CBLOCK | |
548 | CIA | |
549 | TAD NUMBLK / MORE BLOCKS LEFT THAN READSIZE? | |
550 | SMA / NO, READ NUMBER LEFT | |
551 | CLA / YES, ONLY READ RDSIZE | |
552 | TAD RDSIZE | |
553 | SNA / ANY MORE BLOCKS? | |
554 | JMP DONE / NO, DO FINISH STUFF | |
555 | DCA ARGSZ | |
556 | TAD CBLOCK | |
557 | DCA ARGBK | |
558 | TAD DRVSEL | |
559 | JMS DTA0 | |
560 | 0010 / READ STARTING IN FIELD 1 | |
561 | ARGSZ, 0 | |
562 | 0 | |
563 | ARGBK, 0 | |
564 | JMP ERRRET | |
565 | TAD (377 / All blocks good | |
566 | DCA READST | |
567 | / Send data, each block starts with FF | |
568 | CLA CLL / then 2 12 bit words in 3 bytes | |
569 | DCA LOC / ERRRET DUPLICATES SOME OF THIS | |
570 | TAD ARGSZ | |
571 | CIA | |
572 | DCA BCNT / Setup loop counter with number blocks read | |
573 | CDF 10 | |
574 | OUTBL1, JMS OUTBLK / Send a block | |
575 | ISZ CBLOCK | |
576 | ISZ BCNT / Send all read? | |
577 | JMP OUTBL1 / No | |
578 | CDF 0 | |
579 | JMP DUMPLP / Go read next batch | |
580 | ||
581 | ||
582 | DONE, CLA / Send FE and -checksum of all words | |
583 | TAD (376 | |
584 | JMS PUN | |
585 | CLA CLL | |
586 | TAD CHKSM / Send checksum in two bytes, low bits first | |
587 | CIA | |
588 | JMS PUN | |
589 | CLA CLL | |
590 | TAD CHKSM | |
591 | CIA | |
592 | RTR | |
593 | RTR | |
594 | RTR | |
595 | RTR | |
596 | AND C17 | |
597 | JMS PUN | |
598 | CLA | |
599 | TAD DRVSEL | |
600 | JMS DTA0 / REWIND TAPE | |
601 | 0010 | |
602 | 1 | |
603 | 0 | |
604 | 0 | |
605 | NOP | |
606 | TAD ERRCN2 / Leave AC with # of errors | |
607 | JMP FINISH | |
608 | ||
609 | /SEND GOOD BLOCKS READ WITH GOOD BLOCK FLAG | |
610 | /THEN BAD WITH BAD BLOCK FLAG. | |
611 | ERRRET, | |
612 | / HLT / ****** If we want to stop on error | |
613 | CDF 10 | |
614 | CLA CLL | |
615 | DCA LOC | |
616 | TAD CBLOCK | |
617 | CIA | |
618 | TAD BLOCK /Get - number good blocks read | |
619 | CIA /Last was bad | |
620 | SNA | |
621 | JMP FSTBAD /First block is bad, no good to send | |
622 | DCA BCNT | |
623 | TAD (377 | |
624 | DCA READST | |
625 | OUTBL2, JMS OUTBLK /Send good blocks | |
626 | ISZ CBLOCK | |
627 | ISZ BCNT | |
628 | JMP OUTBL2 | |
629 | FSTBAD, TAD (375 /NOW SEND BAD BLOCK | |
630 | DCA READST | |
631 | JMS OUTBLK | |
632 | ISZ CBLOCK | |
633 | ISZ ERRCN2 | |
634 | CDF 0 | |
635 | JMP DUMPLP /And read from here on | |
636 | ||
637 | PAGE | |
638 | OUTBLK, 0 /Send a block of data out serial port | |
639 | CLA | |
640 | TAD WCOUNT | |
641 | DCA LEN | |
642 | TAD READST /Send good/bad flag | |
643 | JMS PUN | |
644 | OUT, CLA CLL | |
645 | TAD I LOC | |
646 | TAD CHKSM / Keep checksum of all words sent | |
647 | DCA CHKSM | |
648 | TAD I LOC / Send 2 words as 3 bytes | |
649 | JMS PUN | |
650 | CLA CLL | |
651 | TAD I LOC | |
652 | RTR / Shift top 4 bits to low 4 | |
653 | RTR | |
654 | RTR | |
655 | RTR | |
656 | AND C17 | |
657 | DCA TEMP | |
658 | ISZ LOC | |
659 | JMP STFLD3+1 /NOT AT END OF FIELD (DJG) | |
660 | RDF /At end, inc to next field | |
661 | TAD (6211 /BUILD CDF | |
662 | DCA STFLD3 | |
663 | STFLD3, NOP | |
664 | ISZ LEN /END IF BUFFER? | |
665 | SKP /NO | |
666 | JMP ENDBK /YES | |
667 | TAD I LOC | |
668 | TAD CHKSM | |
669 | DCA CHKSM | |
670 | TAD I LOC | |
671 | RTL | |
672 | RTL | |
673 | AND C360 | |
674 | TAD TEMP | |
675 | JMS PUN | |
676 | CLA CLL | |
677 | TAD I LOC | |
678 | RTR | |
679 | RTR | |
680 | JMS PUN | |
681 | ISZ LOC | |
682 | JMP STFLD4+1 /NOT AT END OF FIELD (DJG) | |
683 | RDF | |
684 | TAD (6211 /BUILD CDF | |
685 | DCA STFLD4 | |
686 | STFLD4, NOP | |
687 | ISZ LEN | |
688 | JMP OUT | |
689 | JMP I OUTBLK | |
690 | ENDBK, TAD TEMP /SEND LAST PART OF WORD | |
691 | JMS PUN | |
692 | JMP I OUTBLK | |
693 | ||
694 | PUN, 0 / Send byte out serial port | |
695 | / PLS / Punch for testing with emulator | |
696 | TLS2 / Send out console | |
697 | CLA CLL | |
698 | TAD CBLOCK | |
699 | / PSF | |
700 | TSF2 /Wait until character sent | |
701 | JMP .-1 | |
702 | CLA | |
703 | JMP I PUN | |
704 | ||
705 | $ |