Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | / RX01 DUMP |
2 | / This program will send a RX01 image out the console port. | |
3 | / The format of the data sent is 0xff (0377) if no errors, or 0xfd | |
4 | / if error followed by 1 byte track, 1 byte sector, then 128 or 256 word | |
5 | / of data for each sector. After the last sector a 0xfe (0376) is sent | |
6 | / with a one byte -checksum of all bytes sent. | |
7 | / The data is read in 8 bit mode so all data on the disk is dumped. | |
8 | / | |
9 | / The program (PC) receiving the data should be started before this program | |
10 | / | |
11 | / To run start at 0200. | |
12 | / SR 10-11 should be drive # | |
13 | / Should halt at HLT at label GDHLT with number of recoverable errors | |
14 | / At normal exit hitting cont will restart the program | |
15 | / | |
16 | / If unrecoverable errors occur the program will halt, hit continue to | |
17 | / send bad sector and continue. | |
18 | / The PC program will print out the bad location | |
19 | / | |
20 | / Program uses field 0 & 1. 1 is transmit buffer | |
21 | / | |
22 | / It will handle single and double density disks. Will not handle quad | |
23 | / correctly (don't have drive or information on disk organization) | |
24 | ||
25 | LCD=6751 / Load the command reg with AC | |
26 | XDR=6752 / Load or read the transfer register | |
27 | STR=6753 / Skip on transfer request flag | |
28 | SER=6754 / Skip on error flag | |
29 | SDN=6755 / Skip on done flag | |
30 | INTR=6756 / AC = 0 interrupt off, 1 = on | |
31 | INIT=6757 / Initialize RX8/RX01 | |
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 | *10 | |
50 | BUFGET, 0 | |
51 | BUFPUT, 0 | |
52 | *20 | |
53 | ERRCNT, 7760 / Stop when err count = 0, init at startup | |
54 | DRIVE, 0 / Drive # * 20 | |
55 | DRVMSK, 60 / Mask for drive bits | |
56 | INTLV, 2 / Interleave factor for read, 13 (15 octal) wont work | |
57 | ERRCN2, 0 / Total # of errors | |
58 | RDCMD,106 / 8 bit read | |
59 | EMPCMD, 102 / 8 bit empty buffer | |
60 | RDERR, 116 / 8 bit read error | |
61 | M32, -32 | |
62 | M115, -115 | |
63 | K0037, 37 | |
64 | TRACK, 0 | |
65 | SECT, 0 | |
66 | SCNT, 0 | |
67 | LTRACK, 0 | |
68 | LSECT, 0 | |
69 | CURBUF, BUFA / Address to read data into | |
70 | LSTBUF, BUFA / Address to send data from | |
71 | BUFORG, BUFA / First buffer address | |
72 | BUFSZ, 400 / Big enough to hold double density | |
73 | LOC, 0 | |
74 | LOC2, 0 | |
75 | TEMP, 0 | |
76 | MASK1, 17 | |
77 | MASK2, 360 | |
78 | FF, 377 | |
79 | FE, 376 | |
80 | FD, 375 | |
81 | CHKSUM, 0 | |
82 | IDLEFG, 0 | |
83 | DECIMAL | |
84 | M128, -128 | |
85 | BLKSZ, -128 | |
86 | OCTAL | |
87 | ISRAC, 0 | |
88 | ISRFLG, 0 | |
89 | LEN, 0 | |
90 | READST, 377 | |
91 | PUNF, PUN | |
92 | SENDF, SEND | |
93 | READF, READ | |
94 | FINCTRK,INCTRK | |
95 | RISR, ISR | |
96 | ||
97 | L10, 10 | |
98 | L32, 32 | |
99 | L400, 400 | |
100 | L412, 412 | |
101 | L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE | |
102 | L7700, 7700 | |
103 | L1734, 1734 | |
104 | L4110, | |
105 | LM3670, -3670 | |
106 | ZOO, 0 | |
107 | DENSW, 0 | |
108 | SIZE, 0 | |
109 | FN, 0 | |
110 | LTYPE, TYPE | |
111 | RX02, 0 | |
112 | LLCD, 0 /REPLACED BY ROUTINE TO LOAD CMD REGISTER | |
113 | LLCD1, LCD1 | |
114 | LLCD2, LCD2 | |
115 | ||
116 | ||
117 | ||
118 | *1 | |
119 | JMP I RISR / Interrupt handler | |
120 | ||
121 | *2000 | |
122 | BUFA, 1234 | |
123 | 4321 | |
124 | ||
125 | *200 | |
126 | START, CAF | |
127 | CLA CLL OSR / Init variables changed during run | |
128 | RTL | |
129 | RTL | |
130 | AND DRVMSK | |
131 | DCA DRIVE | |
132 | DCA TRACK | |
133 | DCA BUFGET | |
134 | DCA BUFPUT | |
135 | IAC | |
136 | DCA SECT | |
137 | IAC | |
138 | DCA IDLEFG | |
139 | DCA CHKSUM | |
140 | TAD MASK1 | |
141 | CMA | |
142 | DCA ERRCNT | |
143 | DCA ERRCN2 | |
144 | TAD M32 | |
145 | DCA SCNT | |
146 | ION / Turn on serial interrupt handler | |
147 | CLA CLL IAC / Set bit 11 to enable interrupts | |
148 | KIE2 | |
149 | / RPE / Testing, use PTP with emulator | |
150 | JMS RECAL | |
151 | JMS I LTYPE | |
152 | ||
153 | DUMP, JMS I READF / Start read operation | |
154 | DMPLP, JMS CHKRD / Wait until done and check for errors | |
155 | CLA | |
156 | TAD TRACK | |
157 | DCA LTRACK | |
158 | TAD SECT | |
159 | DCA LSECT | |
160 | JMS I FINCTRK / Set read loc to next sector | |
161 | SZA | |
162 | JMP LAST / Last, send checksum | |
163 | CLA | |
164 | TAD CURBUF | |
165 | DCA LSTBUF / Save buffer data read into for dumping | |
166 | TAD CURBUF / And setup to read into next buffer | |
167 | TAD BUFSZ / Toggle between the two buffers | |
168 | AND BUFSZ | |
169 | TAD BUFORG | |
170 | DCA CURBUF | |
171 | JMS I READF / Start the read | |
172 | JMS I SENDF / Send the last buffer | |
173 | JMP DMPLP / And check read started etc | |
174 | ||
175 | RECAL, 0 | |
176 | INIT | |
177 | SDN / Done? | |
178 | JMP .-1 | |
179 | JMP I RECAL | |
180 | /JMP DUMP | |
181 | BADSTA, HLT | |
182 | ||
183 | LAST, CLA / Send FE and -checksum of all words | |
184 | TAD CURBUF | |
185 | DCA LSTBUF | |
186 | JMS I SENDF | |
187 | CLA CLL | |
188 | TAD FE | |
189 | JMS I PUNF | |
190 | CLA CLL | |
191 | TAD CHKSUM | |
192 | CIA | |
193 | JMS I PUNF | |
194 | WAITEM, CLA | |
195 | TAD BUFGET | |
196 | CIA | |
197 | TAD BUFPUT | |
198 | SZA / No character waiting to send | |
199 | JMP WAITEM | |
200 | TAD ERRCN2 / Leave AC with # of errors | |
201 | GDHLT, HLT / Normal halt | |
202 | JMP START | |
203 | ||
204 | CHKRD, 0 | |
205 | CLA CLL | |
206 | TAD FF / Set good read flag | |
207 | DCA READST | |
208 | SDN / Done? | |
209 | JMP .-1 | |
210 | CLA | |
211 | SER / Any errors | |
212 | SKP | |
213 | JMP ERROR | |
214 | CLA CLL | |
215 | TAD CURBUF | |
216 | DCA LOC2 | |
217 | TAD EMPCMD | |
218 | JMS I LLCD | |
219 | ELOOP, STR | |
220 | SKP | |
221 | JMP EMPTY | |
222 | SDN | |
223 | JMP ELOOP | |
224 | SER | |
225 | JMP GOOD | |
226 | JMP ERROR | |
227 | GOOD, TAD MASK1 / Reset error counter on good read | |
228 | CMA | |
229 | DCA ERRCNT | |
230 | JMP I CHKRD | |
231 | EMPTY, XDR | |
232 | DCA I LOC2 | |
233 | ISZ LOC2 | |
234 | JMP ELOOP | |
235 | ||
236 | JMP I CHKRD / Not executed???? | |
237 | ||
238 | ERROR, ISZ ERRCN2 / Inc total # of errors | |
239 | ISZ ERRCNT / To many errors? | |
240 | JMP RETRY | |
241 | XDR / Yes, leave error in AC and halt | |
242 | / HLT / ********* Put in halt to stop on errors | |
243 | CLA | |
244 | TAD RDERR | |
245 | JMS I LLCD | |
246 | SDN | |
247 | JMP .-1 | |
248 | XDR | |
249 | / HLT / ****** and display error code | |
250 | JMS RECAL | |
251 | CLA CLL | |
252 | TAD FD / Set bad read flag | |
253 | DCA READST | |
254 | TAD MASK1 | |
255 | CMA | |
256 | DCA ERRCNT | |
257 | JMP I CHKRD | |
258 | RETRY, | |
259 | JMS RECAL / No, recal drive and try again | |
260 | JMP DUMP / | |
261 | ||
262 | PAGE | |
263 | TYPE, 0 | |
264 | TAD L412 /MAKE A DOUBLE DENSITY READ STATUS CODE | |
265 | TAD DRIVE | |
266 | LCD | |
267 | SDN | |
268 | JMP .-1 | |
269 | XDR /GET STATUS WORD | |
270 | DCA RX02 | |
271 | TAD RX02 | |
272 | AND L32 /KEEP DENSITY ERROR; DOUBLE; QUAD | |
273 | TAD L10 /SINGLE=10;SING/DOUB=40;DOUB=20;QUAD=22 | |
274 | AND L422 /SINGLE=0;SING/DOUB=0;DOUB=20;QUAD=22 | |
275 | DCA ZOO /PLACE TYPE CODE, THREE LOC.'S AFTER ENTRY POINT | |
276 | SER | |
277 | NORMAL, TAD ZOO /FETCH BACK TYPE CODE | |
278 | SZA CLA /SKIP IF A SINGLE DENSITY | |
279 | TAD L7700 /DOUBLE | |
280 | TAD L7700 /SINGLE=7700, DOUBLE=7600 | |
281 | DCA DENSW /PLACE FOR LOOP CONTROL | |
282 | TAD ZOO | |
283 | CLL RTR /PUT QUAD BIT TO LINK | |
284 | SNA CLA /SKIP IF DOUBLE OR QUAD | |
285 | TAD L1734 /SINGLE | |
286 | TAD L4110 /D&Q=4110, S=6044 | |
287 | SNL /SKIP ON QUAD, IT'S OK RIGHT NOW | |
288 | CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2 | |
289 | DCA SIZE /S=7022, D=6044, Q=4110 | |
290 | TAD DENSW /7700 IF SINGLE, 7600 IF DOUBLE | |
291 | CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE | |
292 | AND L400 | |
293 | TAD DRIVE /VOILA, 400*DOUBLE + 20*DRIVE | |
294 | DCA FN /PLACE INTO FUNCTION CONTROL WORD | |
295 | TAD SIZE | |
296 | JMS I PUNF /SEND DENSITY | |
297 | CLA | |
298 | TAD ZOO /FETCH BACK TYPE CODE | |
299 | SZA CLA /SKIP IF A SINGLE DENSITY | |
300 | IAC /INTERLEAVE 3 FOR DOUBLE | |
301 | IAC /INTERLEAVE 2 FOR SINGLE | |
302 | IAC /INTERLEAVE 2 FOR SINGLE | |
303 | DCA INTLV | |
304 | TAD ZOO /FETCH BACK TYPE CODE | |
305 | SZA CLA /SKIP IF A SINGLE DENSITY | |
306 | TAD M128 /256 BYTES SECTOR DOUBLE | |
307 | TAD M128 /128 BYTES SINGLE | |
308 | DCA BLKSZ | |
309 | TAD RX02 | |
310 | AND L10 | |
311 | SNA CLA | |
312 | JMP RX01 | |
313 | TAD LLCD2 | |
314 | DCA LLCD | |
315 | JMP I TYPE /RETURN | |
316 | RX01, TAD LLCD1 | |
317 | DCA LLCD | |
318 | JMP I TYPE /RETURN | |
319 | ||
320 | LCD1, 0 | |
321 | TAD FN | |
322 | LCD | |
323 | JMP I LCD1 | |
324 | ||
325 | LCD2, 0 | |
326 | TAD FN | |
327 | DCA CMD | |
328 | TAD CMD | |
329 | LCD | |
330 | CLA | |
331 | TAD CMD | |
332 | CLL RTL | |
333 | RTL | |
334 | RAL | |
335 | STR | |
336 | JMP .-1 | |
337 | XDR | |
338 | CLA | |
339 | JMP I LCD2 | |
340 | CMD, 0 | |
341 | ||
342 | PAGE | |
343 | INCTRK, 0 / Increment track and exbit value for next sector | |
344 | CLA CLL / AC non zero on return if done | |
345 | ISZ SCNT | |
346 | SKP | |
347 | JMP INC2 / Sector rolled over, head, track | |
348 | TAD SECT | |
349 | TAD INTLV | |
350 | DCA SECT | |
351 | TAD SECT | |
352 | TAD M32 | |
353 | SPA SNA | |
354 | JMP RETINC | |
355 | DCA SECT | |
356 | CMA | |
357 | TAD SECT | |
358 | SNA | |
359 | ISZ SECT | |
360 | RETINC, CLA | |
361 | JMP I INCTRK | |
362 | INC2, CLA IAC | |
363 | DCA SECT | |
364 | TAD M32 | |
365 | DCA SCNT | |
366 | ISZ TRACK | |
367 | TAD TRACK | |
368 | TAD M115 | |
369 | SZA | |
370 | JMP RETINC | |
371 | CLA IAC | |
372 | JMP I INCTRK | |
373 | ||
374 | READ, 0 | |
375 | CLA CLL / Standard read from manual | |
376 | TAD RDCMD | |
377 | JMS I LLCD | |
378 | STR | |
379 | JMP .-1 | |
380 | TAD SECT | |
381 | XDR | |
382 | STR | |
383 | JMP .-1 | |
384 | CLA | |
385 | TAD TRACK | |
386 | XDR | |
387 | JMP I READ | |
388 | ||
389 | SEND, 0 / Move sector to transmit buffer | |
390 | CLA CLL | |
391 | TAD LSTBUF | |
392 | DCA LOC | |
393 | TAD BLKSZ | |
394 | DCA LEN | |
395 | CLA CLL | |
396 | TAD READST | |
397 | JMS PUN | |
398 | TAD LTRACK | |
399 | JMS PUN | |
400 | TAD LSECT | |
401 | JMS PUN | |
402 | OUT, CLA CLL | |
403 | TAD I LOC | |
404 | JMS PUN | |
405 | ISZ LOC | |
406 | ISZ LEN | |
407 | JMP OUT | |
408 | JMP I SEND | |
409 | ||
410 | PUN, 0 / Send a byte out serial port | |
411 | DCA TEMP | |
412 | PUNLP, TAD BUFPUT / Room for another character? | |
413 | IAC | |
414 | CIA | |
415 | TAD BUFGET | |
416 | SNA | |
417 | JMP PUNLP / No, try again | |
418 | CLA | |
419 | TAD TEMP | |
420 | CDF 10 | |
421 | DCA I BUFPUT | |
422 | TAD TEMP | |
423 | AND FF | |
424 | TAD CHKSUM | |
425 | DCA CHKSUM | |
426 | IOF | |
427 | TAD IDLEFG | |
428 | SNA | |
429 | JMP PUNOK | |
430 | CLA | |
431 | DCA IDLEFG | |
432 | TAD I BUFGET | |
433 | TLS2 / Send character | |
434 | / PLS / PTP | |
435 | PUNOK, ION | |
436 | CLA | |
437 | CDF 0 | |
438 | JMP I PUN | |
439 | ||
440 | PAGE | |
441 | ISR, DCA ISRAC / Save AC | |
442 | GTF | |
443 | DCA ISRFLG / And flags | |
444 | CDF 10 / Buffer in field 1 | |
445 | TSF2 / Ready to send | |
446 | / PSF / PTP | |
447 | JMP IRET / No, not our interrupt | |
448 | TAD BUFGET | |
449 | CIA | |
450 | TAD BUFPUT | |
451 | SNA / No character waiting to send | |
452 | JMP IEMPTY | |
453 | CLA | |
454 | TAD I BUFGET | |
455 | TLS2 / Send character | |
456 | / PLS / PTP | |
457 | IRET, CLA | |
458 | TAD ISRFLG | |
459 | RTF | |
460 | CLA | |
461 | TAD ISRAC | |
462 | JMP I 0 | |
463 | IEMPTY, CLA IAC | |
464 | DCA IDLEFG | |
465 | TCF2 / Clear interrupt | |
466 | / PCF / PTP | |
467 | JMP IRET | |
468 | $ |