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 000010 0000 BUFGET, 0 51 000011 0000 BUFPUT, 0 52 *20 53 000020 7760 ERRCNT, 7760 / Stop when err count = 0, init at startup 54 000021 0000 DRIVE, 0 / Drive # * 20 55 000022 0060 DRVMSK, 60 / Mask for drive bits 56 000023 0002 INTLV, 2 / Interleave factor for read, 13 (15 octal) wont work 57 000024 0000 ERRCN2, 0 / Total # of errors 58 000025 0106 RDCMD,106 / 8 bit read 59 000026 0102 EMPCMD, 102 / 8 bit empty buffer 60 000027 0116 RDERR, 116 / 8 bit read error 61 000030 7746 M32, -32 62 000031 7663 M115, -115 63 000032 0037 K0037, 37 64 000033 0000 TRACK, 0 65 000034 0000 SECT, 0 66 000035 0000 SCNT, 0 67 000036 0000 LTRACK, 0 68 000037 0000 LSECT, 0 69 000040 2000 CURBUF, BUFA / Address to read data into 70 000041 2000 LSTBUF, BUFA / Address to send data from 71 000042 2000 BUFORG, BUFA / First buffer address 72 000043 0400 BUFSZ, 400 / Big enough to hold double density 73 000044 0000 LOC, 0 74 000045 0000 LOC2, 0 75 000046 0000 TEMP, 0 76 000047 0017 MASK1, 17 77 000050 0360 MASK2, 360 78 000051 0377 FF, 377 79 000052 0376 FE, 376 80 000053 0375 FD, 375 81 000054 0000 CHKSUM, 0 82 000055 0000 IDLEFG, 0 83 DECIMAL 84 000056 7600 M128, -128 85 000057 7600 BLKSZ, -128 86 OCTAL 87 000060 0000 ISRAC, 0 88 000061 0000 ISRFLG, 0 89 000062 0000 LEN, 0 90 000063 0377 READST, 377 91 000064 0700 PUNF, PUN 92 000065 0654 SENDF, SEND 93 000066 0636 READF, READ 94 000067 0600 FINCTRK,INCTRK 95 000070 1000 RISR, ISR 96 97 000071 0010 L10, 10 98 000072 0032 L32, 32 99 000073 0400 L400, 400 100 000074 0412 L412, 412 101 000075 0422 L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE 102 000076 7700 L7700, 7700 103 000077 1734 L1734, 1734 104 L4110, 105 000100 4110 LM3670, -3670 106 000101 0000 ZOO, 0 107 000102 0000 DENSW, 0 108 000103 0000 SIZE, 0 109 000104 0000 FN, 0 110 000105 0400 LTYPE, TYPE 111 000106 0000 RX02, 0 112 000107 0000 LLCD, 0 /REPLACED BY ROUTINE TO LOAD CMD REGISTER 113 000110 0470 LLCD1, LCD1 114 000111 0474 LLCD2, LCD2 115 116 117 118 *1 119 000001 5470 JMP I RISR / Interrupt handler 120 121 *2000 122 002000 1234 BUFA, 1234 123 002001 4321 4321 124 125 *200 126 000200 6007 START, CAF 127 000201 7704 CLA CLL OSR / Init variables changed during run 128 000202 7006 RTL 129 000203 7006 RTL 130 000204 0022 AND DRVMSK 131 000205 3021 DCA DRIVE 132 000206 3033 DCA TRACK 133 000207 3010 DCA BUFGET 134 000210 3011 DCA BUFPUT 135 000211 7001 IAC 136 000212 3034 DCA SECT 137 000213 7001 IAC 138 000214 3055 DCA IDLEFG 139 000215 3054 DCA CHKSUM 140 000216 1047 TAD MASK1 141 000217 7040 CMA 142 000220 3020 DCA ERRCNT 143 000221 3024 DCA ERRCN2 144 000222 1030 TAD M32 145 000223 3035 DCA SCNT 146 000224 6001 ION / Turn on serial interrupt handler 147 000225 7301 CLA CLL IAC / Set bit 11 to enable interrupts 148 000226 6035 KIE2 149 / RPE / Testing, use PTP with emulator 150 000227 4256 JMS RECAL 151 000230 4505 JMS I LTYPE 152 153 000231 4466 DUMP, JMS I READF / Start read operation 154 000232 4310 DMPLP, JMS CHKRD / Wait until done and check for errors 155 000233 7200 CLA 156 000234 1033 TAD TRACK 157 000235 3036 DCA LTRACK 158 000236 1034 TAD SECT 159 000237 3037 DCA LSECT 160 000240 4467 JMS I FINCTRK / Set read loc to next sector 161 000241 7440 SZA 162 000242 5264 JMP LAST / Last, send checksum 163 000243 7200 CLA 164 000244 1040 TAD CURBUF 165 000245 3041 DCA LSTBUF / Save buffer data read into for dumping 166 000246 1040 TAD CURBUF / And setup to read into next buffer 167 000247 1043 TAD BUFSZ / Toggle between the two buffers 168 000250 0043 AND BUFSZ 169 000251 1042 TAD BUFORG 170 000252 3040 DCA CURBUF 171 000253 4466 JMS I READF / Start the read 172 000254 4465 JMS I SENDF / Send the last buffer 173 000255 5232 JMP DMPLP / And check read started etc 174 175 000256 0000 RECAL, 0 176 000257 6757 INIT 177 000260 6755 SDN / Done? 178 000261 5260 JMP .-1 179 000262 5656 JMP I RECAL 180 /JMP DUMP 181 000263 7402 BADSTA, HLT 182 183 000264 7200 LAST, CLA / Send FE and -checksum of all words 184 000265 1040 TAD CURBUF 185 000266 3041 DCA LSTBUF 186 000267 4465 JMS I SENDF 187 000270 7300 CLA CLL 188 000271 1052 TAD FE 189 000272 4464 JMS I PUNF 190 000273 7300 CLA CLL 191 000274 1054 TAD CHKSUM 192 000275 7041 CIA 193 000276 4464 JMS I PUNF 194 000277 7200 WAITEM, CLA 195 000300 1010 TAD BUFGET 196 000301 7041 CIA 197 000302 1011 TAD BUFPUT 198 000303 7440 SZA / No character waiting to send 199 000304 5277 JMP WAITEM 200 000305 1024 TAD ERRCN2 / Leave AC with # of errors 201 000306 7402 GDHLT, HLT / Normal halt 202 000307 5200 JMP START 203 204 000310 0000 CHKRD, 0 205 000311 7300 CLA CLL 206 000312 1051 TAD FF / Set good read flag 207 000313 3063 DCA READST 208 000314 6755 SDN / Done? 209 000315 5314 JMP .-1 210 000316 7200 CLA 211 000317 6754 SER / Any errors 212 000320 7410 SKP 213 000321 5350 JMP ERROR 214 000322 7300 CLA CLL 215 000323 1040 TAD CURBUF 216 000324 3045 DCA LOC2 217 000325 1026 TAD EMPCMD 218 000326 4507 JMS I LLCD 219 000327 6753 ELOOP, STR 220 000330 7410 SKP 221 000331 5343 JMP EMPTY 222 000332 6755 SDN 223 000333 5327 JMP ELOOP 224 000334 6754 SER 225 000335 5337 JMP GOOD 226 000336 5350 JMP ERROR 227 000337 1047 GOOD, TAD MASK1 / Reset error counter on good read 228 000340 7040 CMA 229 000341 3020 DCA ERRCNT 230 000342 5710 JMP I CHKRD 231 000343 6752 EMPTY, XDR 232 000344 3445 DCA I LOC2 233 000345 2045 ISZ LOC2 234 000346 5327 JMP ELOOP 235 236 000347 5710 JMP I CHKRD / Not executed???? 237 238 000350 2024 ERROR, ISZ ERRCN2 / Inc total # of errors 239 000351 2020 ISZ ERRCNT / To many errors? 240 000352 5372 JMP RETRY 241 000353 6752 XDR / Yes, leave error in AC and halt 242 / HLT / ********* Put in halt to stop on errors 243 000354 7200 CLA 244 000355 1027 TAD RDERR 245 000356 4507 JMS I LLCD 246 000357 6755 SDN 247 000360 5357 JMP .-1 248 000361 6752 XDR 249 / HLT / ****** and display error code 250 000362 4256 JMS RECAL 251 000363 7300 CLA CLL 252 000364 1053 TAD FD / Set bad read flag 253 000365 3063 DCA READST 254 000366 1047 TAD MASK1 255 000367 7040 CMA 256 000370 3020 DCA ERRCNT 257 000371 5710 JMP I CHKRD 258 RETRY, 259 000372 4256 JMS RECAL / No, recal drive and try again 260 000373 5231 JMP DUMP / 261 262 PAGE 263 000400 0000 TYPE, 0 264 000401 1074 TAD L412 /MAKE A DOUBLE DENSITY READ STATUS CODE 265 000402 1021 TAD DRIVE 266 000403 6751 LCD 267 000404 6755 SDN 268 000405 5204 JMP .-1 269 000406 6752 XDR /GET STATUS WORD 270 000407 3106 DCA RX02 271 000410 1106 TAD RX02 272 000411 0072 AND L32 /KEEP DENSITY ERROR; DOUBLE; QUAD 273 000412 1071 TAD L10 /SINGLE=10;SING/DOUB=40;DOUB=20;QUAD=22 274 000413 0075 AND L422 /SINGLE=0;SING/DOUB=0;DOUB=20;QUAD=22 275 000414 3101 DCA ZOO /PLACE TYPE CODE, THREE LOC.'S AFTER ENTRY POINT 276 000415 6754 SER 277 000416 1101 NORMAL, TAD ZOO /FETCH BACK TYPE CODE 278 000417 7640 SZA CLA /SKIP IF A SINGLE DENSITY 279 000420 1076 TAD L7700 /DOUBLE 280 000421 1076 TAD L7700 /SINGLE=7700, DOUBLE=7600 281 000422 3102 DCA DENSW /PLACE FOR LOOP CONTROL 282 000423 1101 TAD ZOO 283 000424 7112 CLL RTR /PUT QUAD BIT TO LINK 284 000425 7650 SNA CLA /SKIP IF DOUBLE OR QUAD 285 000426 1077 TAD L1734 /SINGLE 286 000427 1100 TAD L4110 /D&Q=4110, S=6044 287 000430 7420 SNL /SKIP ON QUAD, IT'S OK RIGHT NOW 288 000431 7130 CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2 289 000432 3103 DCA SIZE /S=7022, D=6044, Q=4110 290 000433 1102 TAD DENSW /7700 IF SINGLE, 7600 IF DOUBLE 291 000434 7146 CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE 292 000435 0073 AND L400 293 000436 1021 TAD DRIVE /VOILA, 400*DOUBLE + 20*DRIVE 294 000437 3104 DCA FN /PLACE INTO FUNCTION CONTROL WORD 295 000440 1103 TAD SIZE 296 000441 4464 JMS I PUNF /SEND DENSITY 297 000442 7200 CLA 298 000443 1101 TAD ZOO /FETCH BACK TYPE CODE 299 000444 7640 SZA CLA /SKIP IF A SINGLE DENSITY 300 000445 7001 IAC /INTERLEAVE 3 FOR DOUBLE 301 000446 7001 IAC /INTERLEAVE 2 FOR SINGLE 302 000447 7001 IAC /INTERLEAVE 2 FOR SINGLE 303 000450 3023 DCA INTLV 304 000451 1101 TAD ZOO /FETCH BACK TYPE CODE 305 000452 7640 SZA CLA /SKIP IF A SINGLE DENSITY 306 000453 1056 TAD M128 /256 BYTES SECTOR DOUBLE 307 000454 1056 TAD M128 /128 BYTES SINGLE 308 000455 3057 DCA BLKSZ 309 000456 1106 TAD RX02 310 000457 0071 AND L10 311 000460 7650 SNA CLA 312 000461 5265 JMP RX01 313 000462 1111 TAD LLCD2 314 000463 3107 DCA LLCD 315 000464 5600 JMP I TYPE /RETURN 316 000465 1110 RX01, TAD LLCD1 317 000466 3107 DCA LLCD 318 000467 5600 JMP I TYPE /RETURN 319 320 000470 0000 LCD1, 0 321 000471 1104 TAD FN 322 000472 6751 LCD 323 000473 5670 JMP I LCD1 324 325 000474 0000 LCD2, 0 326 000475 1104 TAD FN 327 000476 3313 DCA CMD 328 000477 1313 TAD CMD 329 000500 6751 LCD 330 000501 7200 CLA 331 000502 1313 TAD CMD 332 000503 7106 CLL RTL 333 000504 7006 RTL 334 000505 7004 RAL 335 000506 6753 STR 336 000507 5306 JMP .-1 337 000510 6752 XDR 338 000511 7200 CLA 339 000512 5674 JMP I LCD2 340 000513 0000 CMD, 0 341 342 PAGE 343 000600 0000 INCTRK, 0 / Increment track and exbit value for next sector 344 000601 7300 CLA CLL / AC non zero on return if done 345 000602 2035 ISZ SCNT 346 000603 7410 SKP 347 000604 5223 JMP INC2 / Sector rolled over, head, track 348 000605 1034 TAD SECT 349 000606 1023 TAD INTLV 350 000607 3034 DCA SECT 351 000610 1034 TAD SECT 352 000611 1030 TAD M32 353 000612 7550 SPA SNA 354 000613 5221 JMP RETINC 355 000614 3034 DCA SECT 356 000615 7040 CMA 357 000616 1034 TAD SECT 358 000617 7450 SNA 359 000620 2034 ISZ SECT 360 000621 7200 RETINC, CLA 361 000622 5600 JMP I INCTRK 362 000623 7201 INC2, CLA IAC 363 000624 3034 DCA SECT 364 000625 1030 TAD M32 365 000626 3035 DCA SCNT 366 000627 2033 ISZ TRACK 367 000630 1033 TAD TRACK 368 000631 1031 TAD M115 369 000632 7440 SZA 370 000633 5221 JMP RETINC 371 000634 7201 CLA IAC 372 000635 5600 JMP I INCTRK 373 374 000636 0000 READ, 0 375 000637 7300 CLA CLL / Standard read from manual 376 000640 1025 TAD RDCMD 377 000641 4507 JMS I LLCD 378 000642 6753 STR 379 000643 5242 JMP .-1 380 000644 1034 TAD SECT 381 000645 6752 XDR 382 000646 6753 STR 383 000647 5246 JMP .-1 384 000650 7200 CLA 385 000651 1033 TAD TRACK 386 000652 6752 XDR 387 000653 5636 JMP I READ 388 389 000654 0000 SEND, 0 / Move sector to transmit buffer 390 000655 7300 CLA CLL 391 000656 1041 TAD LSTBUF 392 000657 3044 DCA LOC 393 000660 1057 TAD BLKSZ 394 000661 3062 DCA LEN 395 000662 7300 CLA CLL 396 000663 1063 TAD READST 397 000664 4300 JMS PUN 398 000665 1036 TAD LTRACK 399 000666 4300 JMS PUN 400 000667 1037 TAD LSECT 401 000670 4300 JMS PUN 402 000671 7300 OUT, CLA CLL 403 000672 1444 TAD I LOC 404 000673 4300 JMS PUN 405 000674 2044 ISZ LOC 406 000675 2062 ISZ LEN 407 000676 5271 JMP OUT 408 000677 5654 JMP I SEND 409 410 000700 0000 PUN, 0 / Send a byte out serial port 411 000701 3046 DCA TEMP 412 000702 1011 PUNLP, TAD BUFPUT / Room for another character? 413 000703 7001 IAC 414 000704 7041 CIA 415 000705 1010 TAD BUFGET 416 000706 7450 SNA 417 000707 5302 JMP PUNLP / No, try again 418 000710 7200 CLA 419 000711 1046 TAD TEMP 420 000712 6211 CDF 10 421 000713 3411 DCA I BUFPUT 422 000714 1046 TAD TEMP 423 000715 0051 AND FF 424 000716 1054 TAD CHKSUM 425 000717 3054 DCA CHKSUM 426 000720 6002 IOF 427 000721 1055 TAD IDLEFG 428 000722 7450 SNA 429 000723 5330 JMP PUNOK 430 000724 7200 CLA 431 000725 3055 DCA IDLEFG 432 000726 1410 TAD I BUFGET 433 000727 6046 TLS2 / Send character 434 / PLS / PTP 435 000730 6001 PUNOK, ION 436 000731 7200 CLA 437 000732 6201 CDF 0 438 000733 5700 JMP I PUN 439 440 PAGE 441 001000 3060 ISR, DCA ISRAC / Save AC 442 001001 6004 GTF 443 001002 3061 DCA ISRFLG / And flags 444 001003 6211 CDF 10 / Buffer in field 1 445 001004 6041 TSF2 / Ready to send 446 / PSF / PTP 447 001005 5216 JMP IRET / No, not our interrupt 448 001006 1010 TAD BUFGET 449 001007 7041 CIA 450 001010 1011 TAD BUFPUT 451 001011 7450 SNA / No character waiting to send 452 001012 5224 JMP IEMPTY 453 001013 7200 CLA 454 001014 1410 TAD I BUFGET 455 001015 6046 TLS2 / Send character 456 / PLS / PTP 457 001016 7200 IRET, CLA 458 001017 1061 TAD ISRFLG 459 001020 6005 RTF 460 001021 7200 CLA 461 001022 1060 TAD ISRAC 462 001023 5400 JMP I 0 463 001024 7201 IEMPTY, CLA IAC 464 001025 3055 DCA IDLEFG 465 001026 6042 TCF2 / Clear interrupt 466 / PCF / PTP 467 001027 5216 JMP IRET 468 $ BADSTA 0263 unreferenced BLKSZ 0057 BUFA 2000 BUFGET 0010 BUFORG 0042 BUFPUT 0011 BUFSZ 0043 CHKRD 0310 CHKSUM 0054 CMD 0513 CURBUF 0040 DENSW 0102 DMPLP 0232 DRIVE 0021 DRVMSK 0022 DUMP 0231 ELOOP 0327 EMPCMD 0026 EMPTY 0343 ERRCN2 0024 ERRCNT 0020 ERROR 0350 FD 0053 FE 0052 FF 0051 FINCTR 0067 FN 0104 GDHLT 0306 unreferenced GOOD 0337 IDLEFG 0055 IEMPTY 1024 INAD 0030 INC2 0623 INCTRK 0600 INIT 6757 INTLV 0023 INTR 6756 unreferenced IRET 1016 ISR 1000 ISRAC 0060 ISRFLG 0061 K0037 0032 unreferenced KCC2 6032 unreferenced KCF2 6030 unreferenced KIE2 6035 KRB2 6036 unreferenced KRS2 6034 unreferenced KSF2 6031 unreferenced L10 0071 L1734 0077 L32 0072 L400 0073 L4110 0100 L412 0074 L422 0075 L7700 0076 LAST 0264 LCD 6751 LCD1 0470 LCD2 0474 LEN 0062 LLCD 0107 LLCD1 0110 LLCD2 0111 LM3670 0100 unreferenced LOC 0044 LOC2 0045 LSECT 0037 LSTBUF 0041 LTRACK 0036 LTYPE 0105 M115 0031 M128 0056 M32 0030 MASK1 0047 MASK2 0050 unreferenced NORMAL 0416 unreferenced OUT 0671 OUTAD 0040 PUN 0700 PUNF 0064 PUNLP 0702 PUNOK 0730 RDCMD 0025 RDERR 0027 READ 0636 READF 0066 READST 0063 RECAL 0256 RETINC 0621 RETRY 0372 RISR 0070 RX01 0465 RX02 0106 SCNT 0035 SDN 6755 SECT 0034 SEND 0654 SENDF 0065 SER 6754 SIZE 0103 START 0200 STR 6753 TCF2 6042 TEMP 0046 TFL2 6040 unreferenced TLS2 6046 TPC2 6044 unreferenced TRACK 0033 TSF2 6041 TSK2 6045 unreferenced TYPE 0400 WAITEM 0277 XDR 6752 ZOO 0101