2 / This program will receive a RX01 image and write it to the disk. The
3 / entire disk it written, with a reread check when done writing.
5 / This program should be started before the program (PC) sending the data
7 / See dump for the format of the serial data.
8 / To run start at 0200.
9 / SR9-11 shoulb be drive number
10 / Should halt at label GDHLT (140) with AC = 0 if it worked.
11 / At normal exit hitting cont will restart the program
13 LCD=6751 / Load the command reg with AC
14 XDR=6752 / Load or read the transfer register
15 STR=6753 / Skip on transfer request flag
16 SER=6754 / Skip on error flag
17 SDN=6755 / Skip on done flag
18 INTR=6756 / AC = 0 interrupt off, 1 = on
19 INIT=6757 / Initialize RX8/RX01
21 INAD=030 / Address of serial input, 30 for console
29 OUTAD=040 / Address of serial output, 40 for console
38 WRTLOC, 7777 / Address to write data to disk, auto inc
39 BUFLOC, 7777 / Address to store next word received
42 DRIVE, 0 / Drive # * 2
43 DRVMSK, 60 / Mask for drive bits
44 DONEFG, 0 / Set to one when fe end of data flag rx
45 WRCMD, 104 / 8 bit write
46 FILCMD, 100 / 8 bit fill buffer
47 RDCMD,106 / 8 bit read
48 EMPCMD, 102 / 8 bit empty buffer
49 RDERR, 116 / 8 bit read error
53 NUMSEC, 0 / Number of sectors received but not written
61 STATE, 0 / Where in serial data we are 0 = Need ff sector head,
62 / 1 = need image size byte
63 / -1 = byte1, ... -3 = byte 3
64 BUFCNT, 0 / Count of words received in sector
69 NBLKSZ, -130 / 128 words + track and sector number
82 L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE
93 LLCD, 0 /REPLACED BY ROUTINE TO LOAD CMD REGISTER
98 JMP I RISR / Interrupt handler
105 START, CDF 0 / Init all our variables
107 CLA CLL OSR / Init variables changed during run
123 ION / Turn on serial interrupt handler
124 CLA CLL IAC / Set bit 11 to enable interrupts
127 / RPE / Testing, use PTR with emulator
135 TAD STATE / Wait for size flag to be sent
139 AND K377 / Size received is only a byte so mask our size
142 SZA / If disk size not same as image being sent
147 TAD L412 /MAKE A DOUBLE DENSITY READ STATUS CODE
155 AND L32 /KEEP DENSITY ERROR; DOUBLE; QUAD
156 TAD L10 /SINGLE=10;SING/DOUB=40;DOUB=20;QUAD=22
157 AND L422 /SINGLE=0;SING/DOUB=0;DOUB=20;QUAD=22
158 DCA ZOO /PLACE TYPE CODE, THREE LOC.'S AFTER ENTRY POINT
160 NORMAL, TAD ZOO /FETCH BACK TYPE CODE
161 SZA CLA /SKIP IF A SINGLE DENSITY
163 TAD L7700 /SINGLE=7700, DOUBLE=7600
164 DCA DENSW /PLACE FOR LOOP CONTROL
166 CLL RTR /PUT QUAD BIT TO LINK
167 SNA CLA /SKIP IF DOUBLE OR QUAD
169 TAD L4110 /D&Q=4110, S=6044
170 SNL /SKIP ON QUAD, IT'S OK RIGHT NOW
171 CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2
172 DCA SIZE /S=7022, D=6044, Q=4110
173 TAD DENSW /7700 IF SINGLE, 7600 IF DOUBLE
174 CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE
176 TAD DRIVE /VOILA, 400*DOUBLE + 20*DRIVE
177 DCA FN /PLACE INTO FUNCTION CONTROL WORD
179 TAD ZOO /FETCH BACK TYPE CODE
180 SZA CLA /SKIP IF A SINGLE DENSITY
181 TAD M128 /256 BYTES SECTOR DOUBLE
182 TAD M128 /128 BYTES SINGLE
183 TAD KN1 /2 extra bytes for sector # etc in buffer
199 IOF / Turn off interrupts so we can safely update
200 CLA / # of sectors in buffer
211 TAD DONEFG / All data rx
216 WRSEC, CLA CLL / We have one waiting, write it
224 JMS I LLCD / Do fill buffer command
234 XDR / Yes, leave error in AC and halt
268 XDR / Yes, leave error in AC and halt
281 DONE, CLA CLL / Done, wait for one more byte
288 TAD CHKSUM / Got checksum byte, receive routine has added it
289 AND K377 / to checksum, verify final checksum (8 bit) is zero
291 HLT / Stop if checksum wrong
295 REREAD, CLA IAC / Reread disk to check for errors
300 RDCHK, CLA CLL / Standard read from manual
340 GOOD, CLA CLL IAC RAL / LOAD 2
363 TAD K377 / fe at end before checksum
366 TAD I WRTLOC / received checksum
371 ERROR, XDR / Yes, leave error in AC and halt
409 DCA ISRFLG / And flags
410 CDF 10 / Buffer in field 1
411 KSF2 / Have character waiting
412 / RSF / Testing, use PTR with emulator
413 JMP IRET / No, not our interrupt
421 TAD STATE / Find out where in sequence we are
423 JMP SBLK / Start of block
424 CMA IAC / STATE +1, get size flag
432 DATA, CLA / data byte
437 DCA STATE / End of sector, set to 0 to check header byte
438 ISZ NUMSEC / Inc number of sectors buffered
443 HLT / To many buffered, halt. Must of had to many
453 TAD TEMP / Is is a ff?
459 ISZ DONEFG / All data received
460 FLAGOK, STA / -1 for byte 1
462 TAD NBLKSZ / And setup to look for blocksize words