1 / P?S/8 RX01 NON-SYSTEM HANDLER 2 3 / LAST EDIT: 17-DEC-1986 23:00:00 CJL 4 5 / MAY BE ASSEMBLED WITH '/J' SWITCH SET. 6 7 / P?S/8 NON-SYSTEM HANDLER FOR SINGLE-DENSITY 8" FLOPPY DISKS ON VARIOUS 8 / HARDWARE CONFIGURATIONS: 9 10 / A) RX01 AND COMPATIBLES (DSD-210, ETC.). 11 12 / B) RX02 WITH SINGLE-DENSITY DISKS AND COMPATIBLES (ALSO RX03). 13 14 / C) ANY OF THE ABOVE ON VT78, VT278 (DECMATE I), PC278 (DECMATE II). 15 16 / SUPPORTS DOUBLE-SIDED DISKS ON RX03. 17 18 / SUPPORTS SECONDARY DRIVES (UNITS 2 AND 3) ON VT78/VT278/PC278 AND DSD-210. 19 20 / USES DEC OS/8 COMPATIBLE (12-BIT MODE) SINGLE-DENSITY DISK FORMAT FOR 21 / FILE CONVERSION, ETC. COMPATIBILITY. 22 23 / CALLING SEQUENCE: 24 25 / CDF MYFLD /SET CALLER'S DATA FIELD 26 / CIF HNDFLD /SET HANDLER'S INSTRUCTION FIELD 27 / JMS I (RXAHND) /CALL THE HANDLER 28 / PARAM /PARAMETER POINTER 29 / ERRORRETURN /RETURNS HERE WITH STATUS IN AC 30 / GOODRETURN /RETURNS HERE WITH CLEAR AC IF I/O OK 31 32 / PARAMETER LIST BREAKDOWN: 33 34 / PARAM= . /PARAMETER LIST HERE 35 36 / ADDRESS /TRANSFER ADDRESS 37 / FUNCTION /FUNCTION WORD 38 / BLOCK /LOGICAL BLOCK FOR TRANSFER 39 40 / FUNCTION WORD BREAKDOWN: 41 42 / BIT[0]: READ IF 0, WRITE IF 1 43 / BITS[1-5]: PAGE COUNT, 40 IF 0 44 / BITS[6-8]: TRANSFER FIELD 45 / BITS[9-11]: LOGICAL UNIT 46 47 / BIT[9] IS IGNORED ON ALL SYSTEMS. 48 49 / BIT[10] IS IGNORED ON ALL SYSTEMS WITH ONLY 1-2 DRIVES. 50 PAGE /START ON A NEW PAGE 51 52 HERE= . /WHERE WE ARE NOW 56 XLIST ON 57 58 / DEFINITIONS. 59 61 XLIST ON 62 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 63 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 64 NL7777= CLA CMA /LOAD AC WITH 7777 65 REVISIO="F&77 /REVISION OF HANDLER 70 XLIST ON 71 RXLENGT=114^32%2 /LENGTH OF RX01 (ONE SIDE) 77 XLIST ON 78 79 / RX8B DEFINITIONS. 80 81 DEVCODE=75^10+6000 /SKELETON IOT CODE OF DISK 82 83 SEL= DEVCODE+0 /LOAD DRIVE PAIR PER AC[11] 84 LCD= DEVCODE+1 /LOAD COMMAND REGISTER 85 XDR= DEVCODE+2 /TRANSFER DATA REGISTER 86 STR= DEVCODE+3 /SKIP ON, CLEAR TRANSFER FLAG 87 SER= DEVCODE+4 /SKIP ON, CLEAR ERROR FLAG 88 SDN= DEVCODE+5 /SKIP ON, CLEAR DONE FLAG 89 INTR= DEVCODE+6 /INTERRUPT ENABLE/DISABLE PER AC[11] 90 INIT= DEVCODE+7 /INITIALIZE CONTROLLER, RECALIBRATE DRIVES 91 92 / DEVICE HANDLER HEADER BLOCK. 93 94 *"R&177;*"X&177;*"A&177 /GROUP NAME 95 *-1 /GROUP COUNT 96 *"R&177;*"X&177;*"A&177 /DEVICE NAME 97 *RXAHND&177 /ENTRY POINT 98 *RXLENGTH-1 /HIGHEST BLOCK 99 *REVISION /REVISION OF HANDLER 100 *HERE /RESTORE ORIGIN 101 102 / THE FOLLOWING LITERALS ARE BEING GENERATED NOW SO THAT THE LAST TWO 103 / LOCATIONS ON THIS PAGE LOOK LIKE THIS: 104 105 / *.!177-1 /GET NEAR END OF PAGE 106 107 /RSECT, .-. /WILL CONTAIN OUR ACTUAL LOAD ADDRESS 108 / TAD RSECT /GET LOAD ADDRESS AND FALL THROUGH TO NEXT PAGE 109 110 RSECT= .!177-1 /INITIALIZE HEADER 111 RTRACK= (TAD RSECT) /GENERATE ADD INSTRUCTION 112 RSECT= (.-.) /GENERATE HEADER 113 114 / ENTRY POINT FOR HANDLER. 115 116 000200 0000 RXAHND, .-. /ACTUAL HANDLER ENTRY POINT 117 000201 7346 NL7775 /SETUP THE 118 000202 3353 DCA RXTRYCOUNTER /ERROR RETRY COUNTER 119 000203 1600 RXAGAIN,TAD I RXAHND /GET PARAMETER LIST POINTER 120 000204 3331 DCA RXEXIT /STASH THE POINTER 121 000205 1731 TAD I RXEXIT /GET THE TRANSFER ADDRESS 122 000206 3347 DCA RXBUFFER /STASH IT 123 000207 2331 ISZ RXEXIT /BUMP TO NEXT 124 000210 1731 TAD I RXEXIT /GET FUNCTION WORD 125 000211 0326 AND RX70/(70) /JUST FIELD BITS 126 000212 1270 TAD RXCDF/(CDF) /MAKE INTO CDF TRANSFER INSTRUCTION 127 000213 3263 DCA RXCDFBUFFER /STORE IN-LINE 128 000214 1731 TAD I RXEXIT /GET FUNCTION WORD AGAIN 129 000215 7004 RAL /MOVE UP 130 000216 0344 AND RX7600/(7600) /JUST PAGE BITS 131 000217 7440 SZA /SKIP IF FULL FIELD TRANSFER 132 000220 7041 CIA /ELSE INVERT FOR WORD COUNT 133 000221 3355 DCA RXWC /SAVE WORD COUNT 134 000222 7026 CML RTL /0 IF WRITING, 2 IF READING 135 000223 3350 DCA RXFUNCTION /SAVE AS BASIC FUNCTION 136 000224 1731 TAD I RXEXIT /GET FUNCTION WORD AGAIN 137 000225 0375 AND (3) /JUST UNIT BITS 138 000226 7106 CLL RTL;IAC;RTL /FORM UNIT^20+4 000227 7001 000230 7006 139 000231 3354 DCA RXUNIT /SAVE AS UNIT VALUE 140 000232 2331 ISZ RXEXIT /BUMP TO NEXT 141 000233 1731 TAD I RXEXIT /GET BLOCK NUMBER 142 000234 7104 CLL RAL /*2 FOR LOGICAL SECTOR NUMBER 143 000235 3352 DCA RXSECTOR /STASH IT 144 000236 6214 RDF /GET CALLING FIELD 145 000237 1270 TAD RXCDF/(CDF) /FORM CDF CALLING FIELD 146 000240 3333 DCA RXERR /STORE IN-LINE FOR POSSIBLE ERROR USE 147 000241 7326 NL0002 /SET CIF BIT 148 000242 1333 TAD RXERR /FORM CIF CDF CALLING FIELD 149 000243 3331 DCA RXEXIT /STORE IN-LINE FOR EXIT LATER 150 000244 4376 RXSTATU,JMS RSECT /ERROR STATUS; INITIALIZED TO CAUSE HANDLER 151 /INITIALIZATION; WILL BE HARMLESS "AND" 152 000245 4774 RXLOC, JMS I (RXSYNC-RXLOC) /GET DONE FLAG TO COME UP 153 000246 3244 RECODE, DCA RXSTATUS /ERROR CODE; INITIALIZED TO CANCEL ONCE-ONLY CODE 154 000247 1354 RXUNZAP,TAD RXUNIT /GET THE UNIT; **** ZAPPED **** 0000 155 000250 4773 JMS I (RXSEL-RXLOC) /GO SELECT PROPER PAIR OF DRIVES 156 000251 3772 DCA I (RXSECSW-RXLOC) /CAUSE PRIMARY SECTOR AND TRACK CALCULATION 157 000252 4771 JMS I (RSECALC-RXLOC) /CALCULATE FIRST SECTOR NEEDED 158 000253 1350 TAD RXFUNCTION /GET READ/WRITE FUNCTION 159 000254 7640 SZA CLA /SKIP IF WRITE 160 000255 5301 JMP RXREAD /JUMP IF READ 161 000256 1350 RXSILOA,TAD RXFUNCTION /GET FUNCTION WORD; 0 IF LOAD, 2 IF EMPTY 162 000257 6751 LCD /LOAD THE COMMAND 163 000260 1325 TAD RXM100/(-100) /SETUP THE 164 000261 3351 DCA RXSCTCNT /SECTOR COUNTER 165 000262 4343 RXTRNLO,JMS TRWAIT /WAIT FOR TRANSFER FLAG TO COME UP 166 000263 0000 RXCDFBU,.-. /WILL BE CDF TRANSFER FIELD 167 000264 1747 TAD I RXBUFFER /GET A WORD 168 000265 6752 XDR /SEND (OR RECEIVE) IT 169 000266 3747 DCA I RXBUFFER /PUT A WORD (EXTRANEOUS IF WRITING) 170 000267 2347 ISZ RXBUFFER /BUMP TO NEXT 171 000270 6201 RXCDF, CDF /CONSTANT 6201; THIS CAN BE SKIPPED 172 000271 2351 ISZ RXSCTCNT /DONE WITH SECTOR YET? 173 000272 5262 JMP RXTRNLOOP /NO, KEEP GOING 174 000273 4337 JMS DNWAIT /WAIT FOR DONE FLAG 175 000274 1355 TAD RXWC /GET CURRENT WORD COUNT 176 000275 1370 TAD (-7701) /COMPARE TO LIMIT 177 000276 7450 SNA /SKIP IF NOT DONE 178 000277 5321 JMP RXDONE /ELSE EXIT ON READ DONE 179 000300 3355 DCA RXWC /SAVE UPDATED VALUE AND KEEP GOING 180 000301 4767 RXREAD, JMS I (RXHEAD-RXLOC) /CHECK FOR SECOND HEAD USAGE 181 000302 1366 TAD (1000) /SET SECOND HEAD BIT 182 000303 1350 TAD RXFUNCTION /GET FUNCTION VALUE 183 000304 1354 TAD RXUNIT /GET UNIT BITS AND CONVERT TO READ OR WRITE 184 000305 6751 LCD /LOAD THE READ (OR WRITE) COMMAND 185 000306 4343 JMS TRWAIT /WAIT FOR TRANSFER FLAG TO COME UP 186 000307 1376 TAD RSECT /GET CALCULATED SECTOR 187 000310 6752 XDR /SEND IT 188 000311 4343 JMS TRWAIT /WAIT FOR TRANSFER FLAG TO COME UP 189 000312 1377 TAD RTRACK /GET CALCULATED TRACK 190 000313 6752 XDR /SEND IT 191 000314 2352 ISZ RXSECTOR /BUMP TO NEXT LOGICAL SECTOR 192 000315 4771 JMS I (RSECALC-RXLOC) /CALCULATE NEXT SECTOR FOR NEXT TRANSFER 193 000316 4337 JMS DNWAIT /WAIT FOR READ (OR WRITE) TO FINISH 194 000317 2355 ISZ RXWC /DONE WRITING? 195 000320 5256 JMP RXSILOAD /NO, KEEP GOING 196 / COMES HERE IF NO ERRORS. 197 198 000321 2200 RXDONE, ISZ RXAHND /BUMP EXTRA TIME FOR GOOD RETURN 199 000322 3244 DCA RXSTATUS /STASH EXIT STATUS 200 000323 1370 RXOUT, TAD (77)/(16) /GET "READ ERROR REGISTER" VALUE 201 000324 6751 LCD /LOAD THE COMMAND TO RAISE THE DONE FLAG 202 000325 7700 RXM100, -100 /CONSTANT 7700; THIS CLEARS THE AC 203 000326 0070 RX70, 70 /CONSTANT 0070; THIS CAN BE SKIPPED 204 000327 2200 ISZ RXAHND /BUMP AROUND ARGUMENT AT LEAST 205 000330 1244 TAD RXSTATUS /GET EXIT STATUS 206 000331 0000 RXEXIT, .-. /WILL BE CIF CDF RETURN FIELD 207 000332 5600 JMP I RXAHND /RETURN 208 209 / COMES HERE ON ERROR. 210 211 000333 0000 RXERR, .-. /WILL BE CDF CALLING FIELD 212 000334 2353 ISZ RXTRYCOUNTER /TOO MANY ERRORS? 213 000335 5203 JMP RXAGAIN /NO, TRY AGAIN 214 215 / TOO MANY ERRORS, SO TAKE ERROR RETURN. 216 217 000336 5323 JMP RXOUT /CONTINUE THERE 218 219 / WAIT FOR DONE ROUTINE. 220 221 000337 0000 DNWAIT, .-. /WAIT FOR DONE ROUTINE 222 000340 7240 NL7777 /INDICATE DONE IS CALLING 223 000341 4765 JMS I (RXWAIT-RXLOC) /CALL WAIT ROUTINE 224 000342 5737 JMP I DNWAIT /RETURN 225 226 / WAIT FOR TRANSFER FLAG ROUTINE. 227 228 000343 0000 TRWAIT, .-. /WAIT FOR TRANSFER FLAG ROUTINE 229 000344 7600 RX7600, CLA!400 /INDICATE TRANSFER IS CALLING 230 000345 4765 JMS I (RXWAIT-RXLOC) /CALL WAIT ROUTINE 231 000346 5743 JMP I TRWAIT /RETURN 232 233 000347 0000 RXBUFFE,.-. /TRANSFER ADDRESS 234 000350 0000 RXFUNCT,.-. /READ/WRITE FUNCTION 235 000351 0000 RXSCTCN,.-. /SECTOR BUFFER COUNTER 236 000352 0000 RXSECTO,.-. /LOGICAL SECTOR 237 000353 0000 RXTRYCO,.-. /RETRY COUNTER 238 000354 0000 RXUNIT, .-. /UNIT BITS+4 STORED HERE 239 000355 0000 RXWC, .-. /WORD COUNTER 240 241 / RELOCATION ADDRESSES FOR THIS PAGE. 242 243 RXRL0= (RSECALC-RXLOC) /POINTER TO RSECALC 244 RXRL1= (RXHEAD-RXLOC) /POINTER TO RXHEAD 245 RXRL2= (RXSECSW-RXLOC) /POINTER TO RXSECSW 246 RXRL3= (RXSEL-RXLOC) /POINTER TO RXSEL 247 RXRL4= (RXSYNC-RXLOC) /POINTER TO RXSYNC 248 RXRL5= (RXWAIT-RXLOC) /POINTER TO RXWAIT 249 000365 0420 PAGE 000366 1000 000367 0252 000370 0077 000371 0334 000372 0337 000373 0217 000374 0235 000375 0003 000376 0000 000377 1376 250 / ONCE-ONLY INITIALIZATION CODE. 251 252 / THE AC CONTAINS THE ACTUAL VALUE OF "RXLOC" RELOCATED TO THE BASE PAGE WE 253 / WERE LOADED INTO. ALL ADDRESS CONSTANTS MUST BE UPDATED TO REFLECT THIS. 254 255 IFNZRO .&177 256 257 000400 3200 RXPAG2, DCA RXPAG2 /SAVE RELOCATION VALUE 258 000401 6224 RXTEMP, RIF /GET OUR FIELD 259 000402 1377 TAD (CDF) /MAKE INTO CDF INSTRUCTION 260 000403 3204 DCA RXTEM2 /STORE IN-LINE 261 000404 0000 RXTEM2, .-. /WILL BE CDF OUR FIELD 262 000405 1337 RXRLINS,TAD RXRLST /GET A RELOCATABLE ADDRESS 263 000406 7450 SNA /END OF LIST? 264 000407 5217 JMP RXDOIT /YES, CONTINUE THERE 265 000410 1200 TAD RXPAG2 /NO, ADD ON RELOCATION FACTOR 266 000411 3201 DCA RXTEMP /STASH THE CORRECTED POINTER 267 000412 1601 TAD I RXTEMP /GET RELOCATABLE ADDRESS 268 000413 1200 TAD RXPAG2 /RELOCATE IT 269 000414 3601 DCA I RXTEMP /STORE CORRECTED VALUE BACK 270 000415 2205 ISZ RXRLINS /BUMP TO NEXT LIST ELEMENT 271 000416 5205 JMP RXRLINS /KEEP GOING 272 273 000417 4302 RXDOIT, JMS RXSYNC /GET DONE FLAG UP 274 / NL0000 /SETUP FOR NORMAL PAIR 275 000420 4264 JMS RXSEL /SELECT IT NOW 276 000421 1776 TAD I (RXUNIT-RXLOC) /GET CURRENT UNIT+4 277 000422 1304 TAD RX406/(412-4) /TURN INTO "READ STATUS" VALUE 278 000423 6751 LCD /LOAD THE COMMAND 279 000424 4326 JMS RXTMSETUP /SETUP TIME-OUT 280 000425 6755 SDN /DONE YET? 281 000426 5332 JMP RXSTIMOUT /NO, CHECK IF WAITING TOO LONG 282 000427 6752 XDR /YES, GET THE STATUS 283 000430 0300 AND RX60/(60) /JUST DENSITY, DENSITY ERROR BITS 284 000431 7640 SZA CLA /SKIP IF RX01 285 000432 5235 JMP RXHEDOK /JUMP IF RX02 OR RX03 286 000433 1327 TAD RX7200/(CLA) /GET CLEARING INSTRUCTION 287 000434 3323 DCA RX01ZAP /PREVENT SECOND HEAD LOGIC 288 000435 1204 RXHEDOK,TAD RXTEM2 /GET OUR CDF INSTRUCTION 289 000436 3775 DCA I (RXOCDF-RXLOC) /STORE IN-LINE 290 000437 1204 TAD RXTEM2 /GET IT AGAIN 291 000440 3774 DCA I (RXWCDF-RXLOC) /STORE IN-LINE 292 000441 1204 TAD RXTEM2 /GET IT AGAIN 293 000442 3265 DCA RXSCDF /STORE IN-LINE 294 000443 1373 TAD (40) /SET ALTERNATE PAIR BIT 295 000444 4264 JMS RXSEL /ATTEMPT TO SELECT OTHER PAIR 296 000445 1276 TAD RX16/(16) /GET "READ ERROR REGISTER" VALUE 297 000446 6751 LCD /LOAD THE COMMAND 298 000447 6755 RXTST, SDN /DONE FLAG UP? 299 000450 5253 JMP RXTMOUT /NO, TIME IT OUT 300 RXNORM, /NL0000 /SETUP FOR NORMAL PAIR 301 000451 4264 JMS RXSEL /SELECT NORMAL PAIR 302 000452 5600 JMP I RXPAG2 /GO BACK TO THE NOW FIXED-UP CODE 303 / COMES HERE WHILE WAITING FOR THE ALTERNATE PAIR OF DISKS TO SELECT. 304 305 000453 2365 RXTMOUT,ISZ RXTMCNT /WAITED TOO LONG? 306 000454 5247 JMP RXTST /NO, KEEP GOING 307 / NL0000 /SETUP FOR NORMAL PAIR 308 000455 4264 JMS RXSEL /SELECT NORMAL PAIR NOW 309 000456 6757 INIT /RESET THE HARDWARE 310 000457 3772 DCA I (RXUNZAP-RXLOC) /PREVENT ALTERNATE PAIR SELECT LATER 311 000460 4326 JMS RXTMSETUP /SETUP TIME-OUT 312 000461 6755 SDN /DONE YET? 313 000462 5332 JMP RXSTIMOUT /NO, CHECK IF WAITING TOO LONG 314 000463 5251 JMP RXNORM /YES, CONTINUE THERE 315 316 000464 0000 RXSEL, .-. /SELECTION ROUTINE 317 000465 0000 RXSCDF, .-. /WILL BE CDF OUR FIELD 318 000466 0373 AND (40) /JUST PAIR BIT 319 000467 7112 CLL RTR;RTR;STL RAR /MOVE OVER PASSED VALUE AND SET PC278 BIT 000470 7012 000471 7130 320 000472 6750 SEL /SELECT THE PAIR 321 000473 6750 SEL /SELECT IT AGAIN TO BE SURE 322 000474 7200 CLA /CLEAN UP 323 000475 6755 SDN /CLEAR DONE FLAG NOW 324 000476 0016 RX16, 16 /CONSTANT 0016; THIS CAN BE SKIPPED 325 000477 6754 SER /CLEAR ERROR FLAG NOW 326 000500 0060 RX60, 60 /CONSTANT 0060; THIS CAN BE SKIPPED 327 000501 5664 JMP I RXSEL /RETURN 328 329 000502 0000 RXSYNC, .-. /DISK DONE FLAG SYNC ROUTINE 330 000503 6755 SDN /SKIP ON, CLEARING THE DONE FLAG NOW (IF POSSIBLE) 331 000504 0406 RX406, 406 /CONSTANT 0406; THIS CAN BE SKIPPED 332 000505 1276 TAD RX16/(16) /GET "READ ERROR REGISTER" VALUE 333 000506 6751 LCD /LOAD THE COMMAND 334 000507 4326 JMS RXTMSETUP /SETUP TIME-OUT 335 000510 6753 STR /TRANSFER FLAG UP? 336 000511 7610 RXTCNT, SKP CLA /SKIP IF NOT 337 000512 6752 XDR /TRANSFER A WORD IF TRANSFER FLAG IS UP 338 000513 6755 SDN /DONE FLAG UP? 339 000514 5332 JMP RXSTIMOUT /NO, CHECK IF WAITING TOO LONG 340 000515 7200 CLA /CLEAN UP 341 000516 5702 JMP I RXSYNC /RETURN 342 343 000517 0000 RXHEAD, .-. /SECOND HEAD CHECK ROUTINE 344 000520 1771 TAD I (RXSECTOR-RXLOC)/GET CURRENT SECTOR 345 000521 7100 CLL /CLEAR LINK FOR TEST 346 000522 1370 TAD (-114^32) /COMPARE TO ONE-SIDE LIMIT 347 000523 7620 RX01ZAP,SNL CLA /**** RX01 **** CLA 348 000524 2317 ISZ RXHEAD /BUMP RETURN IF ONE SIDE ONLY 349 000525 5717 JMP I RXHEAD /RETURN 350 / TIME-OUT ROUTINE. 351 352 000526 0000 RXTMSET,.-. /TIME-OUT SETUP ROUTINE 353 000527 7200 RX7200, CLA /CLEAN UP 354 000530 1311 TAD RXTCNT/(-170) /SETUP THE 355 000531 3264 DCA RXSEL /TIME-OUT COUNTER 356 357 / COMES HERE IF THE FLAG(S) IS(ARE) NOT UP YET. 358 359 000532 2201 RXSTIMO,ISZ RXTEMP /WAITED ENOUGH? 360 000533 5726 JMP I RXTMSETUP /NO, KEEP GOING 361 000534 2264 ISZ RXSEL /WAITED TOO MUCH? 362 000535 5726 JMP I RXTMSETUP /NO, KEEP GOING 363 000536 5767 JMP I (FLGBARF-RXLOC) /YES, CONTINUE THERE 364 365 / RELOCATION LIST. 366 367 RXRLST= . /RELOCATABLE ADDRESSES START HERE 368 369 000537 0333 PRTRACK-RXLOC /POINTER TO RTRACK 370 000540 0124 RXRL0-RXLOC /POINTER TO RSECALC 371 000541 0122 RXRL1-RXLOC /POINTER TO RXHEAD 372 000542 0125 RXRL2-RXLOC /POINTER TO RXSECSW 373 000543 0126 RXRL3-RXLOC /POINTER TO RXSEL 374 000544 0127 RXRL4-RXLOC /POINTER TO RXSYNC 375 000545 0120 RXRL5-RXLOC /POINTER TO RXWAIT 376 000546 0322 (FLGBARF-RXLOC)-RXLOC /POINTER TO FLGBARF 377 000547 0330 (RXOCDF-RXLOC)-RXLOC /POINTER TO RXOCDF 378 000550 0324 (RXSECTOR-RXLOC)-RXLOC /POINTER TO RXSECTOR 379 000551 0331 (RXUNIT-RXLOC)-RXLOC /POINTER TO RXUNIT 380 000552 0325 (RXUNZAP-RXLOC)-RXLOC /POINTER TO RXUNZAP 381 000553 0327 (RXWCDF-RXLOC)-RXLOC /POINTER TO RXWCDF 382 000554 0514 RXREL0-RXLOC /POINTER TO RECODE 383 000555 0531 RXREL1-RXLOC /POINTER TO RSECT 384 000556 0511 RXREL2-RXLOC /POINTER TO RXERR 385 000557 0524 RXREL3-RXLOC /POINTER TO RXHEAD 386 000560 0526 RXREL4-RXLOC /POINTER TO RXSECTOR 387 000561 0517 RXREL5-RXLOC /POINTER TO RXSTATUS 388 000562 0516 RXREL6-RXLOC /POINTER TO RXSTIMOUT 389 000563 0520 RXREL7-RXLOC /POINTER TO RXTMSETUP 390 000564 0513 RXREL8-RXLOC /POINTER TO RXUNIT 391 000565 0000 RXTMCNT,0 /THIS ENDS THE LIST 392 393 000567 0430 PAGE 000570 4110 000571 0105 000572 0002 000573 0040 000574 0421 000575 0335 000576 0107 000577 6201 394 / THE FIRST LITERAL ON THE PAGE MUST BE (60). 395 396 FOO= AND (60) /GENERATE LITERAL NOW 397 398 IFNZRO FOO&177-177 399 400 IFNZRO .&177 401 000600 0132 PRTRACK,RTRACK-RXLOC /POINTER TO RTRACK **** RELOCATE **** 402 403 000601 0000 RSECALC,.-. /SECTOR CALCULATION ROUTINE 404 000602 0000 RXOCDF, .-. /WILL BE CDF OUR FIELD 405 000603 2354 ISZ RSTATUS /ARE WE CALCULATING LAST SECTOR ON FIRST SIDE? 406 000604 7610 RXSECSW,SKP CLA /CLEAN UP AND SKIP IF NOT; **** FIRST CALL **** 0000 407 000605 5224 JMP RX7770 /JUMP IF SWITCHING DISKETTE SIDES OR FIRST CALL 408 000606 2776 ISZ I (RSECT-RXLOC) /BUMP TO THE 409 000607 2776 ISZ I (RSECT-RXLOC) /NEXT SECTOR 410 000610 1776 TAD I (RSECT-RXLOC) /GET THE SECTOR NOW 411 000611 1375 TAD (-33) /COMPARE TO LIMIT 412 000612 7510 SPA /SKIP IF TOO FAR 413 000613 5221 JMP RX7700 /JUMP IF NOT 414 000614 7440 SZA /SKIP IF GOING TO EVEN SECTORS ON SAME TRACK 415 000615 2600 RXSETSE,ISZ I PRTRACK/(RTRACK)/ELSE BUMP TRACK SINCE AC CONTAINS (SECTOR) ONE 416 000616 7450 SNA /SKIP IF GOING TO SECTOR ONE NEXT 417 000617 7326 NL0002 /ELSE WE'RE GOING TO SECTOR TWO 418 000620 3776 DCA I (RSECT-RXLOC) /STORE NEW SECTOR NUMBER 419 420 / COMES HERE WITH NEGATIVE AC IF WE MERELY ADDED TWO TO THE PREVIOUS SECTOR 421 / TO CALCULATE LATEST SECTOR. THIS WILL PREVENT EXECUTION OF "RX3", AS "RX7700" 422 / WILL SKIP AND CLEAR THE AC. THIS DOES NOT COMPROMISE SPEED WHICH MIGHT BE 423 / IMPORTANT (VT-8/E RUNNING OR SLOW CPU, I. E. VT-78). 424 425 000621 7700 RX7700, SMA CLA /CONSTANT 7700; THIS CLEARS THE AC 426 000622 0003 RX3, 3 /CONSTANT 0003; THIS CAN BE SKIPPED 427 000623 5601 JMP I RSECALC /RETURN 428 / COMES HERE TO INITIALLY CALCULATE ABSOLUTE SECTOR AND TRACK, OR AT END OF 429 / DISKETTE FIRST SIDE DURING SECONDARY CALCULATION. 430 431 000624 7770 RX7770, SPA SNA SZL CLA /CONSTANT 7770; THIS CLEARS THE AC 432 000625 0100 RX100, 100 /CONSTANT 0100; THIS CAN BE SKIPPED 433 000626 1374 TAD (SKP CLA) /SETUP THE SECONDARY 434 000627 3204 DCA RXSECSW /ROUTINE FOR LATER CALLS 435 000630 1773 TAD I (RXSECTOR-RXLOC)/GET SECTOR NUMBER 436 000631 1372 TAD (-114^32) /TURN INTO COUNTER LIMITING SECONDARY ROUTINE USAGE 437 000632 3354 DCA RSTATUS /STASH THE COUNTER 438 000633 1224 TAD RX7770/(-10) /SETUP THE 439 000634 3265 DCA RXWAIT /SHIFT COUNTER 440 000635 4771 JMS I (RXHEAD-RXLOC) /CHECK FOR TWO-HEAD OPERATION 441 000636 1372 TAD (-114^32) /REDUCE LOGICAL SECTOR IF ON SECOND HEAD 442 000637 1773 TAD I (RXSECTOR-RXLOC)/USE LOGICAL SECTOR AT LEAST 443 000640 7104 RXDIVLP,CLL RAL /MOVE UP 444 000641 1370 TAD (-15^400) /COMPARE TO -13*256 445 000642 7420 SNL /SKIP IF NOT TOO LARGE 446 000643 1367 TAD (15^400-1) /RESTORE IF TOO LARGE 447 000644 7001 IAC /ADD ONE TO QUOTIENT OR JUST FINISH RESTORING 448 000645 2265 ISZ RXWAIT /DONE YET? 449 000646 5240 JMP RXDIVLP /NO, KEEP GOING 450 000647 7110 CLL RAR /GET LOW-ORDER QUOTIENT BIT TO LINK 451 000650 3265 DCA RXWAIT /STORE FOR NOW 452 000651 1265 TAD RXWAIT /GET IT BACK 453 000652 0366 AND (177) /REMOVE REMAINDER BITS 454 000653 3600 RX3600, DCA I PRTRACK/(RTRACK)/STASH THE QUOTIENT 455 000654 1265 TAD RXWAIT /GET IT AGAIN 456 000655 0253 AND RX3600/(3600) /JUST REMAINDER BITS 457 000656 7430 SZL /SKIP IF EVEN 458 000657 1225 TAD RX100/(100) /ELSE ADD ONE MORE 459 000660 7112 CLL RTR;RTR;RTR /MOVE DOWN TO AC[7-11] 000661 7012 000662 7012 460 000663 7001 IAC /INCREMENT TO FINAL VALUE 461 000664 5215 JMP RXSETSECTOR /CONTINUE THERE TO STORE SECTOR AND BUMP TRACK 462 463 000665 0000 RXWAIT, .-. /WAIT ROUTINE 464 000666 0000 RXWCDF, .-. /WILL BE CDF OUR FIELD 465 000667 3201 DCA RSECALC /SAVE PASSED VALUE 466 000670 4765 JMS I (RXTMSETU-RXLOC)/SETUP TIME-OUT ROUTINE 467 000671 6753 STR /TRANSFER FLAG UP? 468 000672 5300 JMP TRYDONE /NO, TRY DONE FLAG 469 000673 2201 ISZ RSECALC /YES, WAS THAT EXPECTED? 470 000674 5665 JMP I RXWAIT /YES, RETURN 471 472 / COMES HERE IF WRONG FLAG COMES UP. 473 474 000675 7240 FLGBARF,NL7777 /INDICATE BARFED STATUS 475 000676 3764 DCA I (RXSTATUS-RXLOC)/STORE IN STATUS WORD 476 000677 5347 JMP RXBARF /TRY TO CLEAR THE PROBLEM THERE 477 000700 6755 TRYDONE,SDN /DONE FLAG UP? 478 000701 5763 JMP I (RXSTIMOU-RXLOC)/NO, CHECK IF WAITING TOO LONG 479 000702 6754 SER /YES, ANY ERRORS? 480 000703 5351 JMP TESTFLG /NO, CHECK IF EXPECTED THERE 481 000704 6752 XDR /GET ERROR STATUS NOW 482 000705 0341 AND RX377/(377) /JUST VALID BITS 483 000706 3764 DCA I (RXSTATUS-RXLOC)/SAVE FOR OTHERS 484 000707 1362 TAD (16) /GET "READ ERROR REGISTER" VALUE 485 000710 6751 LCD /LOAD THE COMMAND 486 000711 4765 JMS I (RXTMSETU-RXLOC)/SETUP TIME-OUT ROUTINE 487 000712 6755 SDN /DONE FLAG UP? 488 000713 5763 JMP I (RXSTIMOU-RXLOC)/NO, CHECK IF WAITING TOO LONG 489 000714 6752 XDR /GET ERROR CODE 490 000715 0341 AND RX377/(377) /JUST VALID BITS 491 000716 3761 DCA I (RECODE-RXLOC) /SAVE THEM 492 000717 1760 TAD I (RXUNIT-RXLOC) /GET UNIT BITS+4 493 000720 1357 TAD (412-4) /TURN INTO "READ STATUS" VALUE 494 000721 6751 LCD /LOAD THE COMMAND 495 000722 4765 JMS I (RXTMSETU-RXLOC)/SETUP TIME-OUT ROUTINE 496 000723 6755 SDN /DONE FLAG UP? 497 000724 5763 JMP I (RXSTIMOU-RXLOC)/NO, CHECK IF WAITING TOO LONG 498 000725 6752 XDR /YES, GET THE STATUS 499 000726 0341 AND RX377/(377) /JUST VALID BITS 500 000727 3354 DCA RSTATUS /SAVE THEM 501 000730 1354 TAD RSTATUS /GET THEM BACK 502 000731 0253 AND RX3600/(200) /JUST READY BIT 503 000732 7650 SNA CLA /SKIP IF READY 504 000733 5756 JMP I (RXERR-RXLOC) /JUMP IF NOT 505 000734 1761 TAD I (RECODE-RXLOC) /GET ERROR CODE 506 000735 1221 TAD RX7700/(-100) /COMPARE TO WRITE-LOCK ERROR VALUE 507 000736 7650 SNA CLA /SKIP IF OTHER 508 000737 5756 JMP I (RXERR-RXLOC) /JUMP IF IT MATCHES 509 000740 1354 TAD RSTATUS /GET CURRENT STATUS 510 000741 0377 RX377, AND (60) /JUST DENSITY, DENSITY ERROR BITS 511 000742 7640 SZA CLA /SKIP IF RX01 512 000743 1362 TAD (21-3) /ELSE SET DENSITY, CRC BITS 513 000744 1222 TAD RX3/(3) /USE PARITY, CRC BITS 514 000745 0764 AND I (RXSTATUS-RXLOC)/ISOLATE PROPER BITS 515 000746 7650 SNA CLA /SKIP IF NORMAL ERROR 516 000747 6757 RXBARF, INIT /ELSE CLEAR THE WORLD OF ERRORS 517 000750 5756 JMP I (RXERR-RXLOC) /CONTINUE THERE 518 519 / IF DONE FLAG IS UP WITHOUT ERRORS, CHECK IF THIS IS THE DESIRED RESULT. 520 521 000751 2201 TESTFLG,ISZ RSECALC /SHOULD DONE FLAG HAVE COME UP? 522 000752 5275 JMP FLGBARF /NO, COMPLAIN THERE 523 000753 5665 JMP I RXWAIT /YES, RETURN 524 525 000754 0000 RSTATUS,.-. /DRIVE STATUS 526 / RELOCATION ADDRESSES FOR THIS PAGE. 527 528 RXREL0= (RECODE-RXLOC) /POINTER TO RECODE 529 RXREL1= (RSECT-RXLOC) /POINTER TO RSECT 530 RXREL2= (RXERR-RXLOC) /POINTER TO RXERR 531 RXREL3= (RXHEAD-RXLOC) /POINTER TO RXHEAD 532 RXREL4= (RXSECTOR-RXLOC)/POINTER TO RXSECTOR 533 RXREL5= (RXSTATUS-RXLOC)/POINTER TO RXSTATUS 534 RXREL6= (RXSTIMO-RXLOC) /POINTER TO RXSTIMOUT 535 RXREL7= (RXTMSETU-RXLOC)/POINTER TO RXTMSETUP 536 RXREL8= (RXUNIT-RXLOC) /POINTER TO RXUNIT 537 538 000756 0066 PAGE 000757 0406 000760 0107 000761 0001 000762 0016 000763 0265 000764 7777 000765 0261 000766 0177 000767 6377 000770 1400 000771 0252 000772 4110 000773 0105 000774 7610 000775 7745 000776 0131 000777 0060 539 540 $ /THAT'S ALL FOLK! DEVCOD 6750 DNWAIT 0337 FLGBAR 0675 FOO 0377 HERE 0200 INIT 6757 INTR 6756 unreferenced LCD 6751 NL0002 7326 NL7775 7346 NL7777 7240 OFF 0001 ON 0000 PRTRAC 0600 RECODE 0246 REVISI 0006 RSECAL 0601 RSECT 0376 RSTATU 0754 RTRACK 0377 RX01ZA 0523 RX100 0625 RX16 0476 RX3 0622 RX3600 0653 RX377 0741 RX406 0504 RX60 0500 RX70 0326 RX7200 0527 RX7600 0344 RX7700 0621 RX7770 0624 RXAGAI 0203 RXAHND 0200 RXBARF 0747 RXBUFF 0347 RXCDF 0270 RXCDFB 0263 RXDIVL 0640 RXDOIT 0417 RXDONE 0321 RXERR 0333 RXEXIT 0331 RXFUNC 0350 RXHEAD 0517 RXHEDO 0435 RXLENG 1734 RXLOC 0245 RXM100 0325 RXNORM 0451 RXOCDF 0602 RXOUT 0323 RXPAG2 0400 RXREAD 0301 RXREL0 0761 RXREL1 0776 RXREL2 0756 RXREL3 0771 RXREL4 0773 RXREL5 0764 RXREL6 0763 RXREL7 0765 RXREL8 0760 RXRL0 0371 RXRL1 0367 RXRL2 0372 RXRL3 0373 RXRL4 0374 RXRL5 0365 RXRLIN 0405 RXRLST 0537 RXSCDF 0465 RXSCTC 0351 RXSECS 0604 RXSECT 0352 RXSEL 0464 RXSETS 0615 RXSILO 0256 RXSTAT 0244 RXSTIM 0532 RXSYNC 0502 RXTCNT 0511 RXTEM2 0404 RXTEMP 0401 RXTMCN 0565 RXTMOU 0453 RXTMSE 0526 RXTRNL 0262 RXTRYC 0353 RXTST 0447 RXUNIT 0354 RXUNZA 0247 RXWAIT 0665 RXWC 0355 RXWCDF 0666 SDN 6755 SEL 6750 SER 6754 STR 6753 TESTFL 0751 TRWAIT 0343 TRYDON 0700 XDR 6752