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.
9 / The program (PC) receiving the data should be started before this program
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
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
20 / Program uses field 0 & 1. 1 is transmit buffer
22 / It will handle single and double density disks. Will not handle quad
23 / correctly (don't have drive or information on disk organization)
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
33 INAD=030 / Address of serial input, 30 for console
41 OUTAD=040 / Address of serial output, 40 for console
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
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
101 L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE
112 LLCD, 0 /REPLACED BY ROUTINE TO LOAD CMD REGISTER
119 JMP I RISR / Interrupt handler
127 CLA CLL OSR / Init variables changed during run
146 ION / Turn on serial interrupt handler
147 CLA CLL IAC / Set bit 11 to enable interrupts
149 / RPE / Testing, use PTP with emulator
153 DUMP, JMS I READF / Start read operation
154 DMPLP, JMS CHKRD / Wait until done and check for errors
160 JMS I FINCTRK / Set read loc to next sector
162 JMP LAST / Last, send checksum
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
171 JMS I READF / Start the read
172 JMS I SENDF / Send the last buffer
173 JMP DMPLP / And check read started etc
183 LAST, CLA / Send FE and -checksum of all words
198 SZA / No character waiting to send
200 TAD ERRCN2 / Leave AC with # of errors
201 GDHLT, HLT / Normal halt
206 TAD FF / Set good read flag
227 GOOD, TAD MASK1 / Reset error counter on good read
236 JMP I CHKRD / Not executed????
238 ERROR, ISZ ERRCN2 / Inc total # of errors
239 ISZ ERRCNT / To many errors?
241 XDR / Yes, leave error in AC and halt
242 / HLT / ********* Put in halt to stop on errors
249 / HLT / ****** and display error code
252 TAD FD / Set bad read flag
259 JMS RECAL / No, recal drive and try again
264 TAD L412 /MAKE A DOUBLE DENSITY READ STATUS CODE
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
277 NORMAL, TAD ZOO /FETCH BACK TYPE CODE
278 SZA CLA /SKIP IF A SINGLE DENSITY
280 TAD L7700 /SINGLE=7700, DOUBLE=7600
281 DCA DENSW /PLACE FOR LOOP CONTROL
283 CLL RTR /PUT QUAD BIT TO LINK
284 SNA CLA /SKIP IF DOUBLE OR QUAD
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
293 TAD DRIVE /VOILA, 400*DOUBLE + 20*DRIVE
294 DCA FN /PLACE INTO FUNCTION CONTROL WORD
296 JMS I PUNF /SEND DENSITY
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
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
343 INCTRK, 0 / Increment track and exbit value for next sector
344 CLA CLL / AC non zero on return if done
347 JMP INC2 / Sector rolled over, head, track
375 CLA CLL / Standard read from manual
389 SEND, 0 / Move sector to transmit buffer
410 PUN, 0 / Send a byte out serial port
412 PUNLP, TAD BUFPUT / Room for another character?
417 JMP PUNLP / No, try again
433 TLS2 / Send character
441 ISR, DCA ISRAC / Save AC
443 DCA ISRFLG / And flags
444 CDF 10 / Buffer in field 1
447 JMP IRET / No, not our interrupt
451 SNA / No character waiting to send
455 TLS2 / Send character
465 TCF2 / Clear interrupt