A large commit.
[pdp8.git] / sw / dumprest / original / dumprx01.pal
CommitLineData
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
50BUFGET, 0
51BUFPUT, 0
52 *20
53ERRCNT, 7760 / Stop when err count = 0, init at startup
54DRIVE, 0 / Drive # * 20
55DRVMSK, 60 / Mask for drive bits
56INTLV, 2 / Interleave factor for read, 13 (15 octal) wont work
57ERRCN2, 0 / Total # of errors
58RDCMD,106 / 8 bit read
59EMPCMD, 102 / 8 bit empty buffer
60RDERR, 116 / 8 bit read error
61M32, -32
62M115, -115
63K0037, 37
64TRACK, 0
65SECT, 0
66SCNT, 0
67LTRACK, 0
68LSECT, 0
69CURBUF, BUFA / Address to read data into
70LSTBUF, BUFA / Address to send data from
71BUFORG, BUFA / First buffer address
72BUFSZ, 400 / Big enough to hold double density
73LOC, 0
74LOC2, 0
75TEMP, 0
76MASK1, 17
77MASK2, 360
78FF, 377
79FE, 376
80FD, 375
81CHKSUM, 0
82IDLEFG, 0
83 DECIMAL
84M128, -128
85BLKSZ, -128
86 OCTAL
87ISRAC, 0
88ISRFLG, 0
89LEN, 0
90READST, 377
91PUNF, PUN
92SENDF, SEND
93READF, READ
94FINCTRK,INCTRK
95RISR, ISR
96
97L10, 10
98L32, 32
99L400, 400
100L412, 412
101L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE
102L7700, 7700
103L1734, 1734
104L4110,
105LM3670, -3670
106ZOO, 0
107DENSW, 0
108SIZE, 0
109FN, 0
110LTYPE, TYPE
111RX02, 0
112LLCD, 0 /REPLACED BY ROUTINE TO LOAD CMD REGISTER
113LLCD1, LCD1
114LLCD2, LCD2
115
116
117
118 *1
119 JMP I RISR / Interrupt handler
120
121 *2000
122BUFA, 1234
123 4321
124
125 *200
126START, 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
153DUMP, JMS I READF / Start read operation
154DMPLP, 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
175RECAL, 0
176 INIT
177 SDN / Done?
178 JMP .-1
179 JMP I RECAL
180 /JMP DUMP
181BADSTA, HLT
182
183LAST, 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
194WAITEM, 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
201GDHLT, HLT / Normal halt
202 JMP START
203
204CHKRD, 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
219ELOOP, STR
220 SKP
221 JMP EMPTY
222 SDN
223 JMP ELOOP
224 SER
225 JMP GOOD
226 JMP ERROR
227GOOD, TAD MASK1 / Reset error counter on good read
228 CMA
229 DCA ERRCNT
230 JMP I CHKRD
231EMPTY, XDR
232 DCA I LOC2
233 ISZ LOC2
234 JMP ELOOP
235
236 JMP I CHKRD / Not executed????
237
238ERROR, 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
258RETRY,
259 JMS RECAL / No, recal drive and try again
260 JMP DUMP /
261
262 PAGE
263TYPE, 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
277NORMAL, 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
316RX01, TAD LLCD1
317 DCA LLCD
318 JMP I TYPE /RETURN
319
320LCD1, 0
321 TAD FN
322 LCD
323 JMP I LCD1
324
325LCD2, 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
340CMD, 0
341
342 PAGE
343INCTRK, 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
360RETINC, CLA
361 JMP I INCTRK
362INC2, 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
374READ, 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
389SEND, 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
402OUT, CLA CLL
403 TAD I LOC
404 JMS PUN
405 ISZ LOC
406 ISZ LEN
407 JMP OUT
408 JMP I SEND
409
410PUN, 0 / Send a byte out serial port
411 DCA TEMP
412PUNLP, 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
435PUNOK, ION
436 CLA
437 CDF 0
438 JMP I PUN
439
440 PAGE
441ISR, 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
457IRET, CLA
458 TAD ISRFLG
459 RTF
460 CLA
461 TAD ISRAC
462 JMP I 0
463IEMPTY, CLA IAC
464 DCA IDLEFG
465 TCF2 / Clear interrupt
466/ PCF / PTP
467 JMP IRET
468 $