| 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 | $ |