:asm 1 2 ; LST OFF 3 ORG $B700 ; SST.RWTS 4 5 USE EDD.ROM >1 7 ******************************** 8 * * 9 * SST RWTS * 10 * (DOS 3.3 BASED) * 11 * * 12 ******************************** 13 14 * Zero page 15 16 SLOTZ EQU $27 17 CSUM EQU $27 18 PRIOR EQU $27 19 WTEMP EQU $26 20 TO EQU $26 21 IDX EQU $26 22 COUNT EQU $26 23 LAST EQU $26 24 TRKCNT EQU $26 25 VOLFND EQU $2F 26 TRKFND EQU $2E 27 SECFND EQU $2D 28 SLOTEMP EQU $2B 29 TRKN EQU $2A 30 PTRSDEST EQU $36 31 DRIVNO EQU $35 32 BUFADR EQU $3E 33 DEVCTBL EQU $3C 34 MONTIMEH EQU $47 35 MONTIMEL EQU $4E 36 SYNCNT EQU $46 37 TRACK EQU $44 38 VOLUME EQU $41 39 BUFADR2 EQU $42 40 IOBPH EQU $49 41 IOBPL EQU $48 42 43 DRV0TRK EQU $0478 44 CURTRK EQU $0478 45 L0478 EQU $0478 46 SEEKCNT EQU $04F8 47 DRV1TRK EQU $04F8 48 L04F8 EQU $04F8 49 RETRYCNT EQU $0578 50 SLOT EQU $05F8 51 SLOTABS EQU $0678 52 RECALCNT EQU $06F8 53 54 * DOS 3.3 patches+routines => NOT USED BY SST 55 56 DOSSTRT EQU $9D84 57 CLOSEALL EQU $A316 58 RSET0 EQU $A75B 59 TEMP1 EQU $AA63 60 BYTVAL EQU $AA70 61 RUNINTRC EQU $AAB7 62 SAVFMW EQU $AE7E 63 SETERROR EQU $B385 64 STKSAVE EQU $B39B 65 SUBCODE EQU $B5BC 66 VOLNUMBR EQU $B5F9 67 FRSTPAG EQU $B6FE ; HEX B6 68 NUMSECS EQU $B6FF ; HEX 09 69 70 *------------------------------- 71 72 * 73 * DOS SECOND STAGE BOOT PGM 74 * B700: 8E E9 B7 75 STX RWTS_SNUM16 B703: 8E F7 B7 76 STX RWTS_SLOTFND B706: A9 01 77 LDA #$1 B708: 8D F8 B7 78 STA RWTS_DRVFND B70B: 8D EA B7 79 STA RWTS_DNUM B70E: AD E0 B7 80 LDA NUMPGS B711: 8D E1 B7 81 STA NSECSRW B714: A9 02 82 LDA #2 B716: 8D EC B7 83 STA RWTS_TNUM B719: A9 04 84 LDA #4 B71B: 8D ED B7 85 STA RWTS_SNUM B71E: AC E7 B7 86 LDY FRSTBOOT+1 B721: 88 87 DEY B722: 8C F1 B7 88 STY RWTS_USRBUF+1 B725: A9 01 89 LDA #$1 B727: 8D F4 B7 90 STA RWTS_CMDCODE B72A: 8A 91 TXA B72B: 4A 92 LSR B72C: 4A 93 LSR B72D: 4A 94 LSR B72E: 4A 95 LSR B72F: AA 96 TAX B730: A9 00 97 LDA #0 B732: 9D F8 04 98 STA L04F8,X B735: 9D 78 04 99 STA L0478,X B738: 20 93 B7 100 JSR RWPAGES B73B: A2 FF 101 LDX #$FF B73D: 9A 102 TXS B73E: 8E EB B7 103 STX RWTS_VOLEXPT B741: 4C C8 BF 104 JMP REBOOT 105 B744: 20 89 FE 106 RESTART JSR SETKBD B747: 4C 84 9D 107 JMP DOSSTRT 108 * 109 * 110 * PUTDOS- WRITES DOS ON FIRST 111 * TWO TRACKS OF DISK 112 * B74A: AD E7 B7 113 PUTDOS LDA FRSTBOOT+1 B74D: 38 114 SEC B74E: ED F1 B7 115 SBC RWTS_USRBUF+1 B751: 8D E1 B7 116 STA NSECSRW B754: AD E7 B7 117 LDA FRSTBOOT+1 B757: 8D F1 B7 118 STA RWTS_USRBUF+1 B75A: CE F1 B7 119 DEC RWTS_USRBUF+1 B75D: A9 02 120 LDA #2 B75F: 8D EC B7 121 STA RWTS_TNUM B762: A9 04 122 LDA #4 B764: 8D ED B7 123 STA RWTS_SNUM B767: A9 02 124 LDA #2 B769: 8D F4 B7 125 STA RWTS_CMDCODE B76C: 20 93 B7 126 JSR RWPAGES B76F: AD E7 B7 127 LDA FRSTBOOT+1 B772: 8D FE B6 128 STA FRSTPAG B775: 18 129 CLC B776: 69 09 130 ADC #9 B778: 8D F1 B7 131 STA RWTS_USRBUF+1 B77B: A9 0A 132 LDA #$A B77D: 8D E1 B7 133 STA NSECSRW B780: 38 134 SEC B781: E9 01 135 SBC #$1 B783: 8D FF B6 136 STA NUMSECS B786: 8D ED B7 137 STA RWTS_SNUM B789: 20 93 B7 138 JSR RWPAGES B78C: 60 139 RTS 140 B78D: 00 00 00 141 DS 6,0 B790: 00 00 00 142 B793: AD E5 B7 143 RWPAGES LDA RWTSPPTR+1 B796: AC E4 B7 144 LDY RWTSPPTR B799: 20 B5 B7 145 JSR CALLRWTS B79C: AC ED B7 146 LDY RWTS_SNUM B79F: 88 147 DEY B7A0: 10 07 148 BPL L85 B7A2: A0 0F 149 LDY #$F B7A4: EA 150 NOP B7A5: EA 151 NOP B7A6: CE EC B7 152 DEC RWTS_TNUM B7A9: 8C ED B7 153 L85 STY RWTS_SNUM B7AC: CE F1 B7 154 DEC RWTS_USRBUF+1 B7AF: CE E1 B7 155 DEC NSECSRW B7B2: D0 DF 156 BNE RWPAGES B7B4: 60 157 RTS 158 B7B5: 08 159 CALLRWTS PHP B7B6: 78 160 SEI B7B7: 20 00 BD 161 JSR RWTS: B7BA: B0 03 162 BCS L86 B7BC: 28 163 PLP B7BD: 18 164 CLC B7BE: 60 165 RTS 166 B7BF: 28 167 L86 PLP B7C0: 38 168 SEC B7C1: 60 169 RTS 170 B7C2: AD BC B5 171 RWTSPRMS LDA SUBCODE B7C5: 8D F1 B7 172 STA RWTS_USRBUF+1 B7C8: A9 00 173 LDA #0 B7CA: 8D F0 B7 174 STA RWTS_USRBUF B7CD: AD F9 B5 175 LDA VOLNUMBR B7D0: 49 FF 176 EOR #$FF B7D2: 8D EB B7 177 STA RWTS_VOLEXPT B7D5: 60 178 RTS 179 B7D6: A9 00 180 ZEROBUFR LDA #0 B7D8: A8 181 TAY B7D9: 91 42 182 L87 STA (BUFADR2),Y B7DB: C8 183 INY B7DC: D0 FB 184 BNE L87 B7DE: 60 185 RTS 186 B7DF: 00 187 HEX 00 B7E0: 1B 188 NUMPGS HEX 1B B7E1: 00 0A 1B 189 NSECSRW HEX 000A1B B7E4: E8 B7 190 RWTSPPTR DA $B7E8 B7E6: 00 B6 191 FRSTBOOT DA $B600 192 193 *------------------------------* 194 * Table for RWTS * 195 *------------------------------* 196 197 RWTS_TABLE B7E8: 01 198 RWTS_TBLTYPE DFB 1 ; table type B7E9: 60 199 RWTS_SNUM16 HEX 60 ; slot*16 B7EA: 01 200 RWTS_DNUM DFB 1 ; drive number B7EB: FF 201 RWTS_VOLEXPT HEX FF ; volume number expected B7EC: 0E 202 RWTS_TNUM HEX 0E ; track number B7ED: 09 203 RWTS_SNUM HEX 09 ; sector number B7EE: FB B7 204 DA RWTS_DEVCT ; addr of device characteristics table B7F0: 00 96 205 RWTS_USRBUF DA $9600 ; R/W buffer B7F2: 00 01 206 RWTS_BYTCNT DA $0100 ; number of bytes B7F4: 01 207 RWTS_CMDCODE DFB 1 ; 0=seek/1=read/2=write/4=format 208 B7F5: 00 209 RWTS_ERRRCODE HEX 00 ; return code B7F6: FE 210 RWTS_VOLFND HEX FE ; volume number of last access B7F7: 60 211 RWTS_SLOTFND HEX 60 ; slot*16 of last access B7F8: 01 212 RWTS_DRVFND DFB 1 ; drive number of last access B7F9: 00 00 213 RWTS_UNUSED HEX 0000 214 215 * Device characteristics table 216 217 RWTS_DEVCT B7FB: 00 218 DFB 0 ; device type ($00=disk II) B7FC: 01 219 DFB 1 ; phases per track ($01=disk II) B7FD: EF D8 220 HEX EFD8 ; motor on time count 221 B7FF: 00 222 DS \,0 223 224 *------------------------------- 225 226 * 227 * PRENIBBLIZE ROUTINE 228 * 229 * CONVERTS 256 BYTES POINTED AT BY 230 * BUFADR TO 342 6-BIT NIBBLES 231 * OF THE FORM 00XXXXXX 232 * B800: A2 00 233 PRENIB16 LDX #0 B802: A0 02 234 LDY #2 235 * 236 * GET NEXT USER BYTE 237 * B804: 88 238 PRENIB1 DEY B805: B1 3E 239 LDA (BUFADR),Y 240 * 241 * SHIFT H.O. TWO BYTES INTO 242 * NBUF2. 243 * B807: 4A 244 LSR B808: 3E 00 BC 245 ROL NBUF2,X B80B: 4A 246 LSR B80C: 3E 00 BC 247 ROL NBUF2,X 248 * 249 * PUT L.O. SIX BITS (SHIFTED LEFT) 250 * INTO NBUF1. 251 * B80F: 99 00 BB 252 STA NBUF1,Y B812: E8 253 INX B813: E0 56 254 CPX #$56 B815: 90 ED 255 BCC PRENIB1 256 * 257 * 258 * DONE YET? 259 * B817: A2 00 260 LDX #0 B819: 98 261 TYA B81A: D0 E8 262 BNE PRENIB1 263 * 264 * 265 * STRIP H.O. TWO BITS OF NBUF2. 266 * B81C: A2 55 267 LDX #$55 B81E: BD 00 BC 268 PRENIB2 LDA NBUF2,X B821: 29 3F 269 AND #$3F B823: 9D 00 BC 270 STA NBUF2,X B826: CA 271 DEX B827: 10 F5 272 BPL PRENIB2 B829: 60 273 RTS 274 * 275 * 276 * WRITE SUBROUTINE 277 * 278 * WRITES PRENIBBILIZED DATA IN 279 * NBUF1 AND NBUF2 TO DISK. 280 * 281 * NOTE: THIS STUFF IS ALL TIME 282 * CRITICAL. 283 * 284 * WATCH PAGE BOUNDRIES, DON'T 285 * REMOVE NOP'S, ETC. 286 * 287 * 288 * B82A: 38 289 WRITE16 SEC ;ANTICIPATE WRITE PROTECT B82B: 86 27 290 STX SLOTZ B82D: 8E 78 06 291 STX SLOTABS B830: BD 8D C0 292 LDA HC08D,X B833: BD 8E C0 293 LDA HC08E,X ;SENSE WRITE PROTECT B836: 30 7C 294 BMI WEXIT B838: AD 00 BC 295 LDA NBUF2 B83B: 85 26 296 STA WTEMP B83D: A9 FF 297 LDA #$FF ;SYNC BYTE B83F: 9D 8F C0 298 STA HC08F,X ;WRITE 1ST NIBBLE B842: 1D 8C C0 299 ORA HC08C,X B845: 48 300 PHA B846: 68 301 PLA B847: EA 302 NOP B848: A0 04 303 LDY #4 304 * 305 * 306 * WRITE THE SYNC BYTE 307 * B84A: 48 308 WSYNC PHA B84B: 68 309 PLA B84C: 20 B9 B8 310 JSR WNIBL7 B84F: 88 311 DEY B850: D0 F8 312 BNE WSYNC B852: A9 D5 313 LDA #$D5 ;FIRST DATA MARK B854: 20 B8 B8 314 JSR WNIBL9 B857: A9 AA 315 LDA #$AA ;2ND DATA MARK B859: 20 B8 B8 316 JSR WNIBL9 B85C: A9 AD 317 LDA #$AD ;3RD DATA MARK B85E: 20 B8 B8 318 JSR WNIBL9 B861: 98 319 TYA ;CLEAR CHECKSUM B862: A0 56 320 LDY #$56 ;NBUF2 INDEX B864: D0 03 321 BNE L1 ;ALWAYS TAKEN 322 * 323 * 324 * B866: B9 00 BC 325 WDATA0 LDA NBUF2,Y ;GET PRIOR 6-BIT NIBBLE B869: 59 FF BB 326 L1 EOR NBUF2-1,Y ;AND XOR WITH CURRENT NIBBLE B86C: AA 327 TAX B86D: BD 29 BA 328 LDA NIBL,X B870: A6 27 329 LDX SLOTZ B872: 9D 8D C0 330 STA HC08D,X ;WRITE NIBBLE B875: BD 8C C0 331 LDA HC08C,X B878: 88 332 DEY ;NEXT NIBBLE B879: D0 EB 333 BNE WDATA0 334 * 335 * 336 * 337 * NOW HANDLE NBUF1. 338 * 339 * 340 * GET PRIOR NIBBLE 341 * B87B: A5 26 342 LDA WTEMP B87D: EA 343 RWTS_WDATA1 NOP 344 * 345 * LOOP TO WRITE OUT DATA IN NBUF1 346 * B87E: 59 00 BB 347 WDATA2 EOR NBUF1,Y B881: AA 348 TAX B882: BD 29 BA 349 LDA NIBL,X B885: AE 78 06 350 LDX SLOTABS B888: 9D 8D C0 351 STA HC08D,X ;WRITE NIBBLE B88B: BD 8C C0 352 LDA HC08C,X B88E: B9 00 BB 353 LDA NBUF1,Y B891: C8 354 INY B892: D0 EA 355 BNE WDATA2 B894: AA 356 TAX B895: BD 29 BA 357 LDA NIBL,X 358 * 359 * WRITE CHECKSUM 360 * B898: A6 27 361 LDX SLOTZ B89A: 20 BB B8 362 JSR WNIBL 363 * 364 * WRITE EPILOG TO DATA 365 * B89D: A9 DE 366 LDA #$DE ;DM4, BIT SLIP MARK B89F: 20 B8 B8 367 JSR WNIBL9 B8A2: A9 AA 368 LDA #$AA ;DM5, BSM B8A4: 20 B8 B8 369 JSR WNIBL9 B8A7: A9 EB 370 LDA #$EB ;DM6, BSM B8A9: 20 B8 B8 371 JSR WNIBL9 372 * 373 * ALL DONE, CLOSE UP THE SHOP! 374 * B8AC: A9 FF 375 LDA #$FF B8AE: 20 B8 B8 376 JSR WNIBL9 377 * 378 * TURN OFF THE WRITE MODE 379 * B8B1: BD 8E C0 380 LDA HC08E,X 381 * 382 * AND BACK TO THE READ MODE 383 * B8B4: BD 8C C0 384 WEXIT LDA HC08C,X B8B7: 60 385 RTS 386 * 387 * 388 * 389 * WNIBL9 9 CYCLES, THEN WRITE 390 * B8B8: 18 391 WNIBL9 CLC 392 * 393 * WNIBL7 7 CYCLES, THEN WRITE 394 * B8B9: 48 395 WNIBL7 PHA B8BA: 68 396 PLA 397 * 398 * 399 * WRITE NIBBLE TO DISK 400 * B8BB: 9D 8D C0 401 WNIBL STA HC08D,X B8BE: 1D 8C C0 402 ORA HC08C,X B8C1: 60 403 RTS 404 * 405 * 406 * POST NIBBLIZE ROUTINE. 407 * 408 * CONVERTS 342 NIBBLES OF THE FORM 409 * 410 * 00XXXXXX 411 * 412 * TO EIGHT BIT BYTES. 413 * 414 * THE NIBBLES ARE STORED IN NBUF1 415 * AND NBUF2, THE 8-BIT BYTES WILL 416 * BE STORED AT (BUFADR). 417 * 418 * B8C2: A0 00 419 POSTNB16 LDY #0 B8C4: A2 56 420 POST1 LDX #$56 B8C6: CA 421 POST2 DEX B8C7: 30 FB 422 BMI POST1 423 * 424 * GET BYTE AND SHIFT IN L.O. TWO 425 * BITS FROM NBUF2 426 * B8C9: B9 00 BB 427 LDA NBUF1,Y B8CC: 5E 00 BC 428 LSR NBUF2,X B8CF: 2A 429 ROL B8D0: 5E 00 BC 430 LSR NBUF2,X B8D3: 2A 431 ROL 432 * 433 * STORE IN USER BUFFER 434 * B8D4: 91 3E 435 STA (BUFADR),Y B8D6: C8 436 INY B8D7: C4 26 437 CPY TO B8D9: D0 EB 438 BNE POST2 B8DB: 60 439 RTS 440 * 441 * 442 * READ ROUTINE, READS A SECTOR 443 * FROM THE DISK AND STORES THE 444 * DATA IN NBUF1 AND NBUF2. 445 * B8DC: A0 20 446 READ16 LDY #$20 447 * 448 * GET SYNC BYTES 449 * B8DE: 88 450 RSYNC DEY B8DF: F0 61 451 BEQ RDERR 452 * 453 * WAIT UNTIL A BYTE IS RECIEVED 454 * FROM THE DISK DRIVE. 455 * B8E1: BD 8C C0 456 L2 LDA HC08C,X B8E4: 10 FB 457 BPL L2 458 * 459 * BYTE RECIEVED, CHECK FOR DM1 460 * B8E6: 49 D5 461 RSYNC1 EOR #$D5 B8E8: D0 F4 462 BNE RSYNC B8EA: EA 463 NOP 464 * 465 * GET NEXT BYTE AND CHECK FOR 466 * DM2 467 * B8EB: BD 8C C0 468 L3 LDA HC08C,X B8EE: 10 FB 469 BPL L3 B8F0: C9 AA 470 CMP #$AA B8F2: D0 F2 471 BNE RSYNC1 B8F4: A0 56 472 LDY #$56 473 * 474 * CHECK FOR DM3 475 * B8F6: BD 8C C0 476 L4 LDA HC08C,X B8F9: 10 FB 477 BPL L4 B8FB: C9 AD 478 CMP #$AD B8FD: D0 E7 479 BNE RSYNC1 480 * 481 * READ THE DATA FROM THE SECTOR 482 * B8FF: A9 00 483 LDA #0 ;INIT CHECKSUM 484 * 485 * READ STUFF INTO NBUF2 486 * B901: 88 487 RDATA1 DEY B902: 84 26 488 STY IDX B904: BC 8C C0 489 L5 LDY HC08C,X B907: 10 FB 490 BPL L5 B909: 59 00 BA 491 EOR MSWAIT,Y B90C: A4 26 492 LDY IDX B90E: 99 00 BC 493 STA NBUF2,Y B911: D0 EE 494 BNE RDATA1 495 * 496 * READ STUFF INTO NBUF1 497 * B913: 84 26 498 RDATA2 STY IDX B915: BC 8C C0 499 L6 LDY HC08C,X B918: 10 FB 500 BPL L6 B91A: 59 00 BA 501 EOR MSWAIT,Y B91D: A4 26 502 LDY IDX B91F: 99 00 BB 503 STA NBUF1,Y B922: C8 504 INY B923: D0 EE 505 BNE RDATA2 506 * 507 * GET AND CHECK THE CHECKSUM BYTE 508 * B925: BC 8C C0 509 L7 LDY HC08C,X B928: 10 FB 510 BPL L7 B92A: D9 00 BA 511 CMP MSWAIT,Y B92D: D0 13 512 BNE RDERR 513 * 514 * CHECK FOR DM4 515 * B92F: BD 8C C0 516 L8 LDA HC08C,X B932: 10 FB 517 BPL L8 B934: C9 DE 518 CMP #$DE B936: D0 0A 519 BNE RDERR B938: EA 520 NOP 521 * 522 * CHECK FOR DM5 523 * B939: BD 8C C0 524 L9 LDA HC08C,X B93C: 10 FB 525 BPL L9 B93E: C9 AA 526 CMP #$AA B940: F0 5C 527 BEQ RDADRX B942: 38 528 RDERR SEC B943: 60 529 RTS 530 * 531 * 532 * READ ADDRESS FIELD. 533 * 534 * READS STARTING ADDRESS MARKS 535 * ($D5, $AA, $96), ADDRESS INFO 536 * (VOLUME/TRACK/SECTOR/CHECKSUM), 537 * AND CLOSING ADDRESS MARKS 538 * ($DE, $AA) 539 * B944: A0 FC 540 RDADR16 LDY #$FC B946: 84 26 541 STY COUNT B948: C8 542 RDASYN INY B949: D0 04 543 BNE L10 B94B: E6 26 544 INC COUNT B94D: F0 F3 545 BEQ RDERR 546 * 547 * READ FIRST ADDRESS MARK ($D5) 548 * B94F: BD 8C C0 549 L10 LDA HC08C,X B952: 10 FB 550 BPL L10 B954: C9 D5 551 RDASYN1 CMP #$D5 B956: D0 F0 552 BNE RDASYN B958: EA 553 NOP 554 * 555 * READ NEXT ADDRESS MARK 556 * B959: BD 8C C0 557 L11 LDA HC08C,X B95C: 10 FB 558 BPL L11 B95E: C9 AA 559 CMP #$AA B960: D0 F2 560 BNE RDASYN1 B962: A0 03 561 LDY #3 562 * 563 * READ LAST ADDRESS MARK 564 * B964: BD 8C C0 565 L12 LDA HC08C,X B967: 10 FB 566 BPL L12 B969: C9 96 567 CMP #$96 B96B: D0 E7 568 BNE RDASYN1 569 * 570 * INIT CHECKSUM AND READ THE 571 * ADDRESS DATA FIELD (FOUR BYTES) 572 * B96D: A9 00 573 LDA #0 B96F: 85 27 574 RDAFLD STA CSUM 575 * 576 * READ 'ODD' BIT NIBBLE 577 * B971: BD 8C C0 578 L13 LDA HC08C,X B974: 10 FB 579 BPL L13 B976: 2A 580 ROL B977: 85 26 581 STA LAST 582 * 583 * READ EVEN BIT NIBBLE. 584 * B979: BD 8C C0 585 L14 LDA HC08C,X B97C: 10 FB 586 BPL L14 587 * 588 * MERGE THE TWO. 589 * B97E: 25 26 590 AND LAST 591 * 592 * STORE THE DATA BYTE, UPDATE 593 * CHECKSUM, AND REPEAT UNTIL 594 * ENTIRE ADDRESS FIELD IS READ. 595 * B980: 99 2C 00 596 STA SLOTEMP+1,Y B983: 45 27 597 EOR CSUM B985: 88 598 DEY B986: 10 E7 599 BPL RDAFLD 600 * 601 * CHECKSUM (IN ACC) MUST BE 0. 602 * B988: A8 603 TAY B989: D0 B7 604 BNE RDERR 605 * 606 * READ FIRST EPILOGUE BYTE ($DE) 607 * B98B: BD 8C C0 608 L15 LDA HC08C,X B98E: 10 FB 609 BPL L15 B990: C9 DE 610 CMP #$DE B992: D0 AE 611 BNE RDERR B994: EA 612 NOP 613 * 614 * READ SECOND EPILOGUE BYTE ($AA) 615 * B995: BD 8C C0 616 L16 LDA HC08C,X B998: 10 FB 617 BPL L16 B99A: C9 AA 618 CMP #$AA B99C: D0 A4 619 BNE RDERR B99E: 18 620 RDADRX CLC B99F: 60 621 RTS 622 * 623 * 624 * SEEKABS ROUTINE, MOVES THE 625 * DISK HEAD OVER THE DESIRED 626 * TRACK. 627 * B9A0: 86 2B 628 SEEKABS STX SLOTEMP B9A2: 85 2A 629 STA TRKN B9A4: CD 78 04 630 CMP DRV0TRK B9A7: F0 53 631 BEQ RTS0 B9A9: A9 00 632 LDA #0 B9AB: 85 26 633 STA TRKCNT B9AD: AD 78 04 634 MOVEHEAD LDA DRV0TRK B9B0: 85 27 635 STA PRIOR B9B2: 38 636 SEC B9B3: E5 2A 637 SBC TRKN B9B5: F0 33 638 BEQ ISTHERE B9B7: B0 07 639 BCS L17 B9B9: 49 FF 640 EOR #$FF B9BB: EE 78 04 641 INC DRV0TRK B9BE: 90 05 642 BCC L18 B9C0: 69 FE 643 L17 ADC #$FE B9C2: CE 78 04 644 DEC DRV0TRK B9C5: C5 26 645 L18 CMP TRKCNT B9C7: 90 02 646 BCC L19 B9C9: A5 26 647 LDA TRKCNT B9CB: C9 0C 648 L19 CMP #$C B9CD: B0 01 649 BCS L20 B9CF: A8 650 TAY B9D0: 38 651 L20 SEC B9D1: 20 EE B9 652 JSR CHKPOS B9D4: B9 11 BA 653 LDA ONTBL,Y B9D7: 20 00 BA 654 JSR MSWAIT B9DA: A5 27 655 LDA PRIOR B9DC: 18 656 CLC B9DD: 20 F1 B9 657 JSR CHKPOS2 B9E0: B9 1D BA 658 LDA OFFTBL,Y B9E3: 20 00 BA 659 JSR MSWAIT B9E6: E6 26 660 INC TRKCNT B9E8: D0 C3 661 BNE MOVEHEAD B9EA: 20 00 BA 662 ISTHERE JSR MSWAIT B9ED: 18 663 CLC B9EE: AD 78 04 664 CHKPOS LDA DRV0TRK B9F1: 29 03 665 CHKPOS2 AND #3 B9F3: 2A 666 ROL B9F4: 05 2B 667 ORA SLOTEMP B9F6: AA 668 TAX B9F7: BD 80 C0 669 LDA PHASEOFF,X B9FA: A6 2B 670 LDX SLOTEMP B9FC: 60 671 RTS0 RTS 672 B9FD: 00 00 00 673 DS 3,0 674 675 * 676 * HEAD MOVE DELAY SUBROUTINE 677 * DELAYS ACC*100 USEC 678 * 679 * BA00: A2 11 680 MSWAIT LDX #$11 BA02: CA 681 L21 DEX ;DELAY 86 USEC BA03: D0 FD 682 BNE L21 BA05: E6 4E 683 INC MONTIMEL BA07: D0 02 684 BNE L22 BA09: E6 47 685 INC MONTIMEH BA0B: 38 686 L22 SEC BA0C: E9 01 687 SBC #1 BA0E: D0 F0 688 BNE MSWAIT BA10: 60 689 RTS 690 * 691 * 692 * PHASEON/PHASEOFF TABLES 693 * BA11: 01 30 694 ONTBL HEX 0130 BA13: 28 24 20 695 HEX 2824201E1D1C1C1C1C1C BA16: 1E 1D 1C 1C BA1A: 1C 1C 1C BA1D: 70 2C 26 696 OFFTBL HEX 702C26221F1E1D1C1C1C1C1C BA20: 22 1F 1E 1D BA24: 1C 1C 1C 1C BA28: 1C 697 * 698 * 699 * WRITE TRANSLATE TABLES 700 * BA29: 96 97 9A 701 NIBL HEX 96979A9B9D9E9FA6A7ABACADAEAFB2B3 BA2C: 9B 9D 9E 9F BA30: A6 A7 AB AC BA34: AD AE AF B2 BA38: B3 BA39: B4 B5 B6 702 HEX B4B5B6B7B9BABBBCBDBEBFCBCDCECFD3 BA3C: B7 B9 BA BB BA40: BC BD BE BF BA44: CB CD CE CF BA48: D3 BA49: D6 D7 D9 703 HEX D6D7D9DADBDCDDDEDFE5E6E7E9EAEBEC BA4C: DA DB DC DD BA50: DE DF E5 E6 BA54: E7 E9 EA EB BA58: EC BA59: ED EE EF 704 HEX EDEEEFF2F3F4F5F6F7F9FAFBFCFDFEFF BA5C: F2 F3 F4 F5 BA60: F6 F7 F9 FA BA64: FB FC FD FE BA68: FF 705 * 706 * ALIGN REMAINDER OF TABLE 707 * BA69: 00 00 00 708 DS 45,0 BA6C: 00 00 00 00 BA70: 00 00 00 00 BA74: 00 00 00 00 BA78: 00 00 00 00 BA7C: 00 00 00 00 BA80: 00 00 00 00 BA84: 00 00 00 00 BA88: 00 00 00 00 BA8C: 00 00 00 00 BA90: 00 00 00 00 BA94: 00 00 709 * 710 * BA96: 00 01 98 711 HEX 0001989902039C040506A0A1A2A3A4A5 BA99: 99 02 03 9C BA9D: 04 05 06 A0 BAA1: A1 A2 A3 A4 BAA5: A5 BAA6: 07 08 A8 712 HEX 0708A8A9AA090A0B0C0DB0B10E0F1011 BAA9: A9 AA 09 0A BAAD: 0B 0C 0D B0 BAB1: B1 0E 0F 10 BAB5: 11 BAB6: 12 13 B8 713 HEX 1213B81415161718191AC0C1C2C3C4C5 BAB9: 14 15 16 17 BABD: 18 19 1A C0 BAC1: C1 C2 C3 C4 BAC5: C5 BAC6: C6 C7 C8 714 HEX C6C7C8C9CA1BCC1C1D1ED0D1D21FD4D5 BAC9: C9 CA 1B CC BACD: 1C 1D 1E D0 BAD1: D1 D2 1F D4 BAD5: D5 BAD6: 20 21 D8 715 HEX 2021D822232425262728E0E1E2E3E429 BAD9: 22 23 24 25 BADD: 26 27 28 E0 BAE1: E1 E2 E3 E4 BAE5: 29 BAE6: 2A 2B E8 716 HEX 2A2BE82C2D2E2F303132F0F133343536 BAE9: 2C 2D 2E 2F BAED: 30 31 32 F0 BAF1: F1 33 34 35 BAF5: 36 BAF6: 37 38 F8 717 HEX 3738F8393A3B3C3D3E3F BAF9: 39 3A 3B 3C BAFD: 3D 3E 3F 718 * 719 * 720 * 721 * NIBBLE BUFFERS, MUST BE IN THIS 722 * ORDER! 723 * BB00: 00 00 00 724 NBUF1 DS $100,0 BB03: 00 00 00 00 BB07: 00 00 00 00 BB0B: 00 00 00 00 BB0F: 00 00 00 00 BB13: 00 00 00 00 BB17: 00 00 00 00 BB1B: 00 00 00 00 BB1F: 00 00 00 00 BB23: 00 00 00 00 BB27: 00 00 00 00 BB2B: 00 00 00 00 BB2F: 00 00 00 00 BB33: 00 00 00 00 BB37: 00 00 00 00 BB3B: 00 00 00 00 BB3F: 00 00 00 00 BB43: 00 00 00 00 BB47: 00 00 00 00 BB4B: 00 00 00 00 BB4F: 00 00 00 00 BB53: 00 00 00 00 BB57: 00 00 00 00 BB5B: 00 00 00 00 BB5F: 00 00 00 00 BB63: 00 00 00 00 BB67: 00 00 00 00 BB6B: 00 00 00 00 BB6F: 00 00 00 00 BB73: 00 00 00 00 BB77: 00 00 00 00 BB7B: 00 00 00 00 BB7F: 00 00 00 00 BB83: 00 00 00 00 BB87: 00 00 00 00 BB8B: 00 00 00 00 BB8F: 00 00 00 00 BB93: 00 00 00 00 BB97: 00 00 00 00 BB9B: 00 00 00 00 BB9F: 00 00 00 00 BBA3: 00 00 00 00 BBA7: 00 00 00 00 BBAB: 00 00 00 00 BBAF: 00 00 00 00 BBB3: 00 00 00 00 BBB7: 00 00 00 00 BBBB: 00 00 00 00 BBBF: 00 00 00 00 BBC3: 00 00 00 00 BBC7: 00 00 00 00 BBCB: 00 00 00 00 BBCF: 00 00 00 00 BBD3: 00 00 00 00 BBD7: 00 00 00 00 BBDB: 00 00 00 00 BBDF: 00 00 00 00 BBE3: 00 00 00 00 BBE7: 00 00 00 00 BBEB: 00 00 00 00 BBEF: 00 00 00 00 BBF3: 00 00 00 00 BBF7: 00 00 00 00 BBFB: 00 00 00 00 BBFF: 00 BC00: 00 00 00 725 NBUF2 DS $56,0 BC03: 00 00 00 00 BC07: 00 00 00 00 BC0B: 00 00 00 00 BC0F: 00 00 00 00 BC13: 00 00 00 00 BC17: 00 00 00 00 BC1B: 00 00 00 00 BC1F: 00 00 00 00 BC23: 00 00 00 00 BC27: 00 00 00 00 BC2B: 00 00 00 00 BC2F: 00 00 00 00 BC33: 00 00 00 00 BC37: 00 00 00 00 BC3B: 00 00 00 00 BC3F: 00 00 00 00 BC43: 00 00 00 00 BC47: 00 00 00 00 BC4B: 00 00 00 00 BC4F: 00 00 00 00 BC53: 00 00 00 726 * 727 * 728 * 729 * WRITE AN ADDRESS FIELD ROUTINE 730 * 731 * BC56: 38 732 WRADR16 SEC ;ASSUME W/P ERROR BC57: BD 8D C0 733 LDA HC08D,X BC5A: BD 8E C0 734 LDA HC08E,X BC5D: 30 5E 735 BMI WPERROR 736 * 737 * OUTPUT SYNC BYTE 738 * BC5F: A9 FF 739 LDA #$FF BC61: 9D 8F C0 740 STA HC08F,X BC64: DD 8C C0 741 CMP HC08C,X BC67: 48 742 PHA BC68: 68 743 PLA BC69: 20 C3 BC 744 FRMSYNC JSR WAIT12 BC6C: 20 C3 BC 745 JSR WAIT12 BC6F: 9D 8D C0 746 STA HC08D,X BC72: DD 8C C0 747 CMP HC08C,X BC75: EA 748 NOP BC76: 88 749 DEY BC77: D0 F0 750 BNE FRMSYNC 751 * 752 * OUTPUT DATA MARKS 753 * BC79: A9 D5 754 LDA #$D5 BC7B: 20 D5 BC 755 JSR WBYTE9 BC7E: A9 AA 756 LDA #$AA BC80: 20 D5 BC 757 JSR WBYTE9 BC83: A9 96 758 LDA #$96 BC85: 20 D5 BC 759 JSR WBYTE9 760 * 761 * OUTPUT VOLUME TRACK SECTOR 762 * AND CHECKSUM 763 * BC88: A5 41 764 LDA VOLUME BC8A: 20 C4 BC 765 JSR WBYTE BC8D: A5 44 766 LDA TRACK BC8F: 20 C4 BC 767 JSR WBYTE BC92: A5 3F 768 LDA BUFADR+1 BC94: 20 C4 BC 769 JSR WBYTE BC97: A5 41 770 LDA VOLUME BC99: 45 44 771 EOR TRACK BC9B: 45 3F 772 EOR BUFADR+1 BC9D: 48 773 PHA BC9E: 4A 774 LSR BC9F: 05 3E 775 ORA BUFADR BCA1: 9D 8D C0 776 STA HC08D,X BCA4: BD 8C C0 777 LDA HC08C,X BCA7: 68 778 PLA BCA8: 09 AA 779 ORA #$AA BCAA: 20 D4 BC 780 JSR WBYTE11 781 * 782 * OUTPUT DATA MARKS 4,5, AND 6 783 * BCAD: A9 DE 784 LDA #$DE BCAF: 20 D5 BC 785 JSR WBYTE9 BCB2: A9 AA 786 LDA #$AA BCB4: 20 D5 BC 787 JSR WBYTE9 BCB7: A9 EB 788 LDA #$EB BCB9: 20 D5 BC 789 JSR WBYTE9 BCBC: 18 790 CLC BCBD: BD 8E C0 791 WPERROR LDA HC08E,X BCC0: BD 8C C0 792 LDA HC08C,X BCC3: 60 793 WAIT12 RTS 794 * 795 * 796 * WRITE A BYTE AS TWO FOUR BIT 797 * NIBBLES TO THE DISK. 798 * BCC4: 48 799 WBYTE PHA BCC5: 4A 800 LSR BCC6: 05 3E 801 ORA BUFADR 802 * 803 * WRITE ODD BITS 804 * BCC8: 9D 8D C0 805 STA HC08D,X BCCB: DD 8C C0 806 CMP HC08C,X BCCE: 68 807 PLA BCCF: EA 808 NOP BCD0: EA 809 NOP BCD1: EA 810 NOP BCD2: 09 AA 811 ORA #$AA BCD4: EA 812 WBYTE11 NOP BCD5: EA 813 WBYTE9 NOP BCD6: 48 814 PHA BCD7: 68 815 PLA 816 * 817 * WRITE EVEN BITS 818 * BCD8: 9D 8D C0 819 STA HC08D,X BCDB: DD 8C C0 820 CMP HC08C,X BCDE: 60 821 RTS 822 * 823 * 824 * FORCE RWTS TO PAGE BOUNDRY 825 * BCDF: 00 00 00 826 DS \,0 BCE2: 00 00 00 00 BCE6: 00 00 00 00 BCEA: 00 00 00 00 BCEE: 00 00 00 00 BCF2: 00 00 00 00 BCF6: 00 00 00 00 BCFA: 00 00 00 00 BCFE: 00 00 827 828 *------------------------------* 829 * * 830 * RWTS ENTRY POINT * 831 * * 832 *------------------------------* 833 834 RWTS: 835 836 * 837 * UPON ENTRY, A & Y POINT AT IOB 838 * BD00: 84 48 839 STY IOBPL BD02: 85 49 840 STA IOBPH 841 * 842 * SET UP FOR ONE RECAL AND 4 SEEKS 843 * BD04: A0 02 844 LDY #2 BD06: 8C F8 06 845 STY RECALCNT BD09: A0 04 846 LDY #4 BD0B: 8C F8 04 847 STY SEEKCNT 848 * 849 * GET SLOT # 850 * BD0E: A0 01 851 LDY #1 BD10: B1 48 852 LDA (IOBPL),Y BD12: AA 853 TAX 854 * 855 * 856 * SEE IF SLOT # WAS CHANGED 857 * BD13: A0 0F 858 LDY #$F BD15: D1 48 859 CMP (IOBPL),Y BD17: F0 1B 860 BEQ SAMESLOT 861 * 862 * IF SO, TURN OFF OLD DRIVE 863 * BD19: 8A 864 TXA BD1A: 48 865 PHA BD1B: B1 48 866 LDA (IOBPL),Y BD1D: AA 867 TAX BD1E: 68 868 PLA BD1F: 48 869 PHA BD20: 91 48 870 STA (IOBPL),Y BD22: BD 8E C0 871 LDA HC08E,X 872 * 873 * DELAY UNTIL DATA IS CONSTANT 874 * BD25: A0 08 875 STILLON LDY #8 BD27: BD 8C C0 876 LDA HC08C,X BD2A: DD 8C C0 877 NOTSURE CMP HC08C,X BD2D: D0 F6 878 BNE STILLON BD2F: 88 879 DEY BD30: D0 F8 880 BNE NOTSURE BD32: 68 881 PLA BD33: AA 882 TAX 883 * 884 * 885 * START THE MOTOR UP 886 * BD34: BD 8E C0 887 SAMESLOT LDA HC08E,X BD37: BD 8C C0 888 LDA HC08C,X BD3A: A0 08 889 LDY #8 BD3C: BD 8C C0 890 NOTSURE2 LDA HC08C,X BD3F: 48 891 PHA BD40: 68 892 PLA BD41: 48 893 PHA BD42: 68 894 PLA BD43: 8E F8 05 895 STX SLOT BD46: DD 8C C0 896 CMP HC08C,X BD49: D0 03 897 BNE L23 BD4B: 88 898 DEY BD4C: D0 EE 899 BNE NOTSURE2 BD4E: 08 900 L23 PHP BD4F: BD 89 C0 901 LDA HC089,X 902 * 903 * MOVE NECESSARY POINTERS TO 904 * PAGE ZERO 905 * BD52: A0 06 906 LDY #6 BD54: B1 48 907 PTRMOVE LDA (IOBPL),Y BD56: 99 36 00 908 STA PTRSDEST,Y BD59: C8 909 INY BD5A: C0 0A 910 CPY #$A BD5C: D0 F6 911 BNE PTRMOVE 912 * 913 * GET OTHER PARAMETERS 914 * BD5E: A0 03 915 LDY #3 BD60: B1 3C 916 LDA (DEVCTBL),Y BD62: 85 47 917 STA MONTIMEH BD64: A0 02 918 LDY #2 BD66: B1 48 919 LDA (IOBPL),Y BD68: A0 10 920 LDY #$10 BD6A: D1 48 921 CMP (IOBPL),Y BD6C: F0 06 922 BEQ L24 BD6E: 91 48 923 STA (IOBPL),Y BD70: 28 924 PLP BD71: A0 00 925 LDY #0 BD73: 08 926 PHP BD74: 6A 927 L24 ROR BD75: 90 05 928 BCC L25 BD77: BD 8A C0 929 LDA HC08A,X BD7A: B0 03 930 BCS DRVSEL BD7C: BD 8B C0 931 L25 LDA HC08B,X 932 * 933 * SAVE WHICH DRIVE IS BEING USED 934 * BD7F: 66 35 935 DRVSEL ROR DRIVNO BD81: 28 936 PLP BD82: 08 937 PHP BD83: D0 0B 938 BNE NOWAIT BD85: A0 07 939 LDY #7 940 * 941 * WAIT 100 USEC FOR OLD DRIVE'S 942 * TIMING CAPACITOR TO DISCHARGE 943 * BD87: 20 00 BA 944 STEPWAIT JSR MSWAIT BD8A: 88 945 DEY BD8B: D0 FA 946 BNE STEPWAIT BD8D: AE F8 05 947 LDX SLOT BD90: A0 04 948 NOWAIT LDY #4 BD92: B1 48 949 LDA (IOBPL),Y BD94: 20 5A BE 950 JSR MYSEEK BD97: 28 951 PLP BD98: D0 11 952 BNE TRYTRK BD9A: A4 47 953 LDY MONTIMEH BD9C: 10 0D 954 BPL TRYTRK 955 * 956 * WAIT FOR MOTOR TO COME UP TO 957 * SPEED. 958 * BD9E: A0 12 959 MOTOROFF LDY #$12 BDA0: 88 960 L26 DEY BDA1: D0 FD 961 BNE L26 BDA3: E6 4E 962 INC MONTIMEL BDA5: D0 F7 963 BNE MOTOROFF BDA7: E6 47 964 INC MONTIMEH BDA9: D0 F3 965 BNE MOTOROFF 966 * 967 * DISK IS NOW UP TO SPEED. 968 * IF NOT FORMAT OPERATION, 969 * POSITION THE HEAD OVER THE 970 * PROPER TRACK 971 * BDAB: A0 0C 972 TRYTRK LDY #$C BDAD: B1 48 973 LDA (IOBPL),Y BDAF: F0 5A 974 BEQ GALLDONE BDB1: C9 04 975 CMP #4 BDB3: F0 58 976 BEQ FORMDSK BDB5: 6A 977 ROR BDB6: 08 978 PHP ;SAVE R/W STATUS BDB7: B0 03 979 BCS TRYTRK2 980 * 981 * IF A READ OPERATION, MUST 982 * PRENIBBLIZE FIRST. 983 * BDB9: 20 00 B8 984 JSR PRENIB16 985 * 986 * 987 * SET UP FOR A MAXIMUM OF 48 988 * RETRIES. 989 * BDBC: A0 30 990 TRYTRK2 LDY #$30 BDBE: 8C 78 05 991 STY RETRYCNT BDC1: AE F8 05 992 TRYADR LDX SLOT BDC4: 20 44 B9 993 JSR RDADR16 BDC7: 90 24 994 BCC RDRIGHT BDC9: CE 78 05 995 TRYADR2 DEC RETRYCNT BDCC: 10 F3 996 BPL TRYADR 997 * 998 * RECALIBRATE DISK HEAD 999 * BDCE: AD 78 04 1000 RECAL LDA CURTRK BDD1: 48 1001 PHA BDD2: A9 60 1002 LDA #$60 BDD4: 20 95 BE 1003 JSR SETTRK BDD7: CE F8 06 1004 DEC RECALCNT BDDA: F0 28 1005 BEQ DRVERROR BDDC: A9 04 1006 LDA #4 BDDE: 8D F8 04 1007 STA SEEKCNT BDE1: A9 00 1008 LDA #0 BDE3: 20 5A BE 1009 JSR MYSEEK BDE6: 68 1010 PLA BDE7: 20 5A BE 1011 RESEEK JSR MYSEEK BDEA: 4C BC BD 1012 JMP TRYTRK2 1013 * 1014 * 1015 * WE HAVE JUST READ AN ADDRESS 1016 * FIELD, NOW CHECK FOR DESIRED 1017 * TRACK, SECTOR, AND VOLUME 1018 * BDED: A4 2E 1019 RDRIGHT LDY TRKFND BDEF: CC 78 04 1020 CPY CURTRK BDF2: F0 1C 1021 BEQ RTTRK 1022 * 1023 * SAVE DEST TRACK VALUE 1024 * BDF4: AD 78 04 1025 LDA CURTRK BDF7: 48 1026 PHA BDF8: 98 1027 TYA BDF9: 20 95 BE 1028 JSR SETTRK BDFC: 68 1029 PLA BDFD: CE F8 04 1030 DEC SEEKCNT BE00: D0 E5 1031 BNE RESEEK BE02: F0 CA 1032 BEQ RECAL 1033 * 1034 * BAD DRIVE ERROR. 1035 * BE04: 68 1036 DRVERROR PLA BE05: A9 40 1037 LDA #$40 1038 * 1039 * BE07: 28 1040 JMPTO1 PLP BE08: 4C 48 BE 1041 JMP HNDLERR BE0B: F0 39 1042 GALLDONE BEQ ALLDONE BE0D: 4C AF BE 1043 FORMDSK JMP DSKFORM 1044 * 1045 * 1046 * DRIVE IS ON THE RIGHT TRACK, 1047 * NOW CHECK FOR A VOL MISMATCH 1048 * BE10: A0 03 1049 RTTRK LDY #3 BE12: B1 48 1050 LDA (IOBPL),Y ;GET DESIRED VOLUME BE14: 48 1051 PHA 1052 * 1053 * SAVE VOLUME ACTUALLY FOUND IN 1054 * RWTS IOB. 1055 * BE15: A5 2F 1056 LDA VOLFND BE17: A0 0E 1057 LDY #$E BE19: 91 48 1058 STA (IOBPL),Y 1059 * 1060 * IF VOLUME SPECIFIED WAS ZERO, 1061 * NO ERROR. 1062 * BE1B: 68 1063 PLA BE1C: F0 08 1064 BEQ CRCTVOL 1065 * 1066 * OTHERWISE, CHECK FOR A VOLUME 1067 * MISMATCH ERROR. 1068 * BE1E: C5 2F 1069 CMP VOLFND BE20: F0 04 1070 BEQ CRCTVOL BE22: A9 20 1071 LDA #$20 BE24: D0 E1 1072 BNE JMPTO1 1073 * 1074 * NOW CHECK FOR THE CORRECT SECTOR 1075 * BE26: A0 05 1076 CRCTVOL LDY #5 BE28: B1 48 1077 LDA (IOBPL),Y ;GET THE SECTOR # 1078 * 1079 * CONVERT TO A "SOFT" SECTOR 1080 * NUMBER BY APPLYING THE SOFTWARE 1081 * INTERLEAVE. 1082 * BE2A: A8 1083 TAY BE2B: B9 B8 BF 1084 LDA INTRLEAV,Y 1085 * 1086 * ARE WE AT THAT SECTOR YET? 1087 * BE2E: C5 2D 1088 CMP SECFND BE30: D0 97 1089 BNE TRYADR2 1090 * 1091 * IF SO, SEE IF WE ARE DOING A 1092 * READ OR A WRITE. 1093 * BE32: 28 1094 PLP BE33: 90 1C 1095 BCC WRIT 1096 * 1097 * READING, SO READ IN THE 256 1098 * BYTES OF DATA THAT FOLLOW. 1099 * BE35: 20 DC B8 1100 JSR READ16 BE38: 08 1101 PHP BE39: B0 8E 1102 BCS TRYADR2 BE3B: 28 1103 PLP BE3C: A2 00 1104 LDX #0 BE3E: 86 26 1105 STX TO 1106 * 1107 * CONVERT THE NIBBLES TO BYTES. 1108 * BE40: 20 C2 B8 1109 JSR POSTNB16 BE43: AE F8 05 1110 LDX SLOT BE46: 18 1111 ALLDONE CLC BE47: 24 1112 DFB $24 ;BIT L38 BE48: 38 1113 HNDLERR SEC ;OPCODE SKIPPED BY BIT L38 BE49: A0 0D 1114 LDY #$D BE4B: 91 48 1115 STA (IOBPL),Y BE4D: 4C 07 BF 1116 JMP HNDERR2 ; LDA HC088,X BE50: 60 1117 RTS 1118 * 1119 * PERFORMING A WRITE, WRITE THE 1120 * DATA (ALREADY NIBBLIZED) TO 1121 * THE FOLLOWING DATA SECTOR. 1122 * BE51: 20 2A B8 1123 WRIT JSR WRITE16 BE54: 90 F0 1124 BCC ALLDONE BE56: A9 10 1125 LDA #$10 BE58: B0 EE 1126 BCS HNDLERR 1127 * 1128 * 1129 * MYSEEK IS THE SEEK ROUTINE, 1130 * IT SEEKS TRACK 'N' IN SLOT 1131 * X/16 1132 * 1133 * IF DRIVNO IS NEGATIVE - DRIVE 0 1134 * IF DRIVNO IS POSITIVE - DRIVE 1 1135 * BE5A: 48 1136 MYSEEK PHA BE5B: A0 01 1137 LDY #1 BE5D: B1 3C 1138 LDA (DEVCTBL),Y BE5F: 6A 1139 ROR BE60: 68 1140 PLA BE61: 90 08 1141 BCC SEEK1 BE63: 0A 1142 ASL BE64: 20 6B BE 1143 JSR SEEK1 BE67: 4E 78 04 1144 LSR CURTRK BE6A: 60 1145 RTS BE6B: 85 2A 1146 SEEK1 STA TRKN BE6D: 20 8E BE 1147 JSR XTOY BE70: B9 78 04 1148 LDA DRV0TRK,Y BE73: 24 35 1149 BIT DRIVNO BE75: 30 03 1150 BMI WASDO BE77: B9 F8 04 1151 LDA DRV1TRK,Y BE7A: 8D 78 04 1152 WASDO STA DRV0TRK BE7D: A5 2A 1153 LDA TRKN BE7F: 24 35 1154 BIT DRIVNO BE81: 30 05 1155 BMI ISDRV0 BE83: 99 F8 04 1156 STA DRV1TRK,Y BE86: 10 03 1157 BPL GOSEEK BE88: 99 78 04 1158 ISDRV0 STA DRV0TRK,Y BE8B: 4C A0 B9 1159 GOSEEK JMP SEEKABS BE8E: 8A 1160 XTOY TXA BE8F: 4A 1161 LSR BE90: 4A 1162 LSR BE91: 4A 1163 LSR BE92: 4A 1164 LSR BE93: A8 1165 TAY BE94: 60 1166 RTS 1167 * 1168 * 1169 * THIS ROUTINE SETS THE SLOT 1170 * DEPENDANT TRACK LOCATION 1171 * BE95: 48 1172 SETTRK PHA BE96: A0 02 1173 LDY #2 BE98: B1 48 1174 LDA (IOBPL),Y BE9A: 6A 1175 ROR BE9B: 66 35 1176 ROR DRIVNO BE9D: 20 8E BE 1177 JSR XTOY BEA0: 68 1178 PLA BEA1: 0A 1179 ASL BEA2: 24 35 1180 BIT DRIVNO BEA4: 30 05 1181 BMI ONDRV0 BEA6: 99 F8 04 1182 STA DRV1TRK,Y BEA9: 10 03 1183 BPL RTS3 BEAB: 99 78 04 1184 ONDRV0 STA DRV0TRK,Y BEAE: 60 1185 RTS3 RTS 1186 * 1187 * 1188 * THIS IS THE DISK FORMATTER 1189 * ROUTINE. 1190 * BEAF: A0 03 1191 DSKFORM LDY #3 BEB1: B1 48 1192 LDA (IOBPL),Y BEB3: 85 41 1193 STA VOLUME 1194 * 1195 * SAVE TIMING CONSTANT IN ZERO 1196 * PAGE (FOR TIME CRITICAL SECTION) 1197 * BEB5: A9 AA 1198 LDA #$AA BEB7: 85 3E 1199 STA BUFADR BEB9: A0 56 1200 LDY #$56 1201 * 1202 * SET UP TO START A TRACK ZERO. 1203 * BEBB: A9 00 1204 LDA #0 BEBD: 85 44 1205 STA TRACK 1206 * 1207 * 1208 * ZERO SECONDARY BUFFER. 1209 * BEBF: 99 FF BB 1210 L29 STA NBUF2-1,Y BEC2: 88 1211 DEY BEC3: D0 FA 1212 BNE L29 1213 * 1214 * ZERO PRIMARY BUFFER. 1215 * BEC5: 99 00 BB 1216 L30 STA NBUF1,Y BEC8: 88 1217 DEY BEC9: D0 FA 1218 BNE L30 1219 * 1220 * PRETEND WE ARE AT TRACK 40 1221 * (ACC=2*MAXTRACKS) 1222 * BECB: A9 50 1223 LDA #$50 BECD: 20 95 BE 1224 JSR SETTRK 1225 * 1226 * START WITH 40 BYTES OF SELF 1227 * SYNC BYTES. 1228 * BED0: A9 28 1229 LDA #$28 BED2: 85 46 1230 STA SYNCNT 1231 * 1232 * GOT TO THE TRACK AND FORMAT IT. 1233 * BED4: A5 44 1234 NXTTRK LDA TRACK BED6: 20 5A BE 1235 JSR MYSEEK BED9: 20 0D BF 1236 JSR DISKF2 1237 * 1238 * INIT IN CASE OF DISK I/O ERROR. 1239 * BEDC: A9 08 1240 LDA #8 BEDE: B0 24 1241 BCS HNDERR BEE0: A9 30 1242 LDA #$30 BEE2: 8D 78 05 1243 STA RETRYCNT 1244 * 1245 * VERIFY THE TRACK JUST FORMATTED. 1246 * BEE5: 38 1247 NOGOOD SEC BEE6: CE 78 05 1248 DEC RETRYCNT BEE9: F0 19 1249 BEQ HNDERR 1250 * 1251 * READ THE ADDRESS FIELD. 1252 * BEEB: 20 44 B9 1253 JSR RDADR16 BEEE: B0 F5 1254 BCS NOGOOD ;SOMETHING WRONG? 1255 * BEF0: A5 2D 1256 LDA SECFND BEF2: D0 F1 1257 BNE NOGOOD 1258 * 1259 * READ THE DATA AND SEE IF IT'S 1260 * OK. 1261 * BEF4: 20 DC B8 1262 JSR READ16 BEF7: B0 EC 1263 BCS NOGOOD 1264 * 1265 * A-OK, MOVE ON TO THE NEXT TRACK. 1266 * BEF9: E6 44 1267 INC TRACK 1268 * 1269 * AT THE LAST TRACK YET? 1270 * BEFB: A5 44 1271 LDA TRACK BEFD: C9 23 1272 CMP #$23 BEFF: 90 D3 1273 BCC NXTTRK 1274 * 1275 * FORCE ERROR FLAG (CARRY) OFF. 1276 * BF01: 18 1277 CLC BF02: 90 03 1278 BCC HNDERR2 ; BCC DONEDSK 1279 * 1280 * 1281 * STORE ERROR CODE IN IOB. 1282 * 1283 1284 * HNDERR LDY #$D 1285 * STA (IOBPL),Y 1286 * SEC 1287 BF04: 4C 48 BE 1288 HNDERR JMP HNDLERR BF07: 86 48 1289 HNDERR2 STX IOBPL 1290 * 1291 * TURN THE DISK OFF. 1292 * BF09: BD 88 C0 1293 DONEDSK LDA HC088,X BF0C: 60 1294 RTS 1295 * 1296 * FORMAT THE CURRENT TRACK. 1297 * BF0D: A9 00 1298 DISKF2 LDA #0 ;INIT SECTOR # BF0F: 85 3F 1299 STA BUFADR+1 BF11: A0 80 1300 LDY #$80 ;BEGIN TRACK WITH 128 SYNC BYTES 1301 * BF13: D0 02 1302 BNE L31 1303 * 1304 * BF15: A4 46 1305 TRKFRM LDY SYNCNT BF17: 20 56 BC 1306 L31 JSR WRADR16 ;WRITE AN ADDRESS FIELD BF1A: B0 6B 1307 BCS DELAY12 1308 * 1309 * WRITE A DATA FIELD. 1310 * BF1C: 20 2A B8 1311 JSR WRITE16 BF1F: B0 66 1312 BCS DELAY12 1313 * 1314 * INCREMENT THE SECTOR NUMBER 1315 * AND SEE IF IT IS 16 YET. 1316 * BF21: E6 3F 1317 INC BUFADR+1 BF23: A5 3F 1318 LDA BUFADR+1 BF25: C9 10 1319 CMP #$10 BF27: 90 EC 1320 BCC TRKFRM 1321 * 1322 * RESET SECTOR # TO 15 1323 * BF29: A0 0F 1324 LDY #$F BF2B: 84 3F 1325 STY BUFADR+1 1326 * 1327 * MARK THE CURRENT TRACK AS 1328 * FORMATTED. 1329 * BF2D: A9 30 1330 LDA #$30 BF2F: 8D 78 05 1331 STA RETRYCNT BF32: 99 A8 BF 1332 INITMAP STA SECMAP,Y BF35: 88 1333 DEY BF36: 10 FA 1334 BPL INITMAP BF38: A4 46 1335 LDY SYNCNT BF3A: 20 87 BF 1336 DELAY JSR DELAY12 BF3D: 20 87 BF 1337 JSR DELAY12 BF40: 20 87 BF 1338 JSR DELAY12 BF43: 48 1339 PHA BF44: 68 1340 PLA BF45: EA 1341 NOP BF46: 88 1342 DEY BF47: D0 F1 1343 BNE DELAY BF49: 20 44 B9 1344 JSR RDADR16 BF4C: B0 23 1345 BCS DOAGAIN BF4E: A5 2D 1346 LDA SECFND BF50: F0 15 1347 BEQ ITSGOOD BF52: A9 10 1348 LDA #$10 BF54: C5 46 1349 CMP SYNCNT BF56: A5 46 1350 LDA SYNCNT BF58: E9 01 1351 SBC #1 BF5A: 85 46 1352 STA SYNCNT BF5C: C9 05 1353 CMP #5 BF5E: B0 11 1354 BCS DOAGAIN BF60: 38 1355 SEC BF61: 60 1356 RTS BF62: 20 44 B9 1357 NXTSEC JSR RDADR16 BF65: B0 05 1358 BCS NXTTRY BF67: 20 DC B8 1359 ITSGOOD JSR READ16 BF6A: 90 1C 1360 BCC MARKMAP BF6C: CE 78 05 1361 NXTTRY DEC RETRYCNT BF6F: D0 F1 1362 BNE NXTSEC BF71: 20 44 B9 1363 DOAGAIN JSR RDADR16 BF74: B0 0B 1364 BCS ERRCNT BF76: A5 2D 1365 LDA SECFND BF78: C9 0F 1366 CMP #$F BF7A: D0 05 1367 BNE ERRCNT BF7C: 20 DC B8 1368 JSR READ16 BF7F: 90 8C 1369 BCC DISKF2 BF81: CE 78 05 1370 ERRCNT DEC RETRYCNT BF84: D0 EB 1371 BNE DOAGAIN BF86: 38 1372 SEC BF87: 60 1373 DELAY12 RTS BF88: A4 2D 1374 MARKMAP LDY SECFND BF8A: B9 A8 BF 1375 LDA SECMAP,Y BF8D: 30 DD 1376 BMI NXTTRY BF8F: A9 FF 1377 LDA #$FF BF91: 99 A8 BF 1378 STA SECMAP,Y BF94: C6 3F 1379 DEC BUFADR+1 BF96: 10 CA 1380 BPL NXTSEC BF98: A5 44 1381 LDA TRACK BF9A: D0 0A 1382 BNE TRKDONE BF9C: A5 46 1383 LDA SYNCNT BF9E: C9 10 1384 CMP #$10 BFA0: 90 E5 1385 BCC DELAY12 BFA2: C6 46 1386 DEC SYNCNT BFA4: C6 46 1387 DEC SYNCNT BFA6: 18 1388 TRKDONE CLC BFA7: 60 1389 RTS 1390 * 1391 * 1392 * SECMAP- USED TO MARK INITIALIZED 1393 * SECTORS. 1394 * BFA8: FF FF FF 1395 SECMAP HEX FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF BFAB: FF FF FF FF BFAF: FF FF FF FF BFB3: FF FF FF FF BFB7: FF 1396 * 1397 * 1398 * INTERLEAVE REMAPPING TABLE 1399 * BFB8: 00 0D 0B 1400 INTRLEAV HEX 000D0B09070503010E0C0A080604020F BFBB: 09 07 05 03 BFBF: 01 0E 0C 0A BFC3: 08 06 04 02 BFC7: 0F 1401 * 1402 * 1403 * 1404 * DOS 3.3 PATCHES. WARNING! THESE 1405 * ARE ADDRESSED BY OBJECT CODE 1406 * AND SHOULD NOT BE MOVED WITHOUT 1407 * CAREFUL THOUGHT. 1408 * BFC8: 20 93 FE 1409 REBOOT JSR SETVID BFCB: AD 81 C0 1410 LDA ROM BFCE: AD 81 C0 1411 LDA ROM BFD1: A9 00 1412 LDA #0 BFD3: 8D 00 E0 1413 STA BASIC BFD6: 4C 44 B7 1414 JMP RESTART 1415 * 1416 * UNUSED (to end of source code) 1417 * BFD9: 00 00 00 1418 DS 3,0 1419 * 1420 * BFDC: 8D 63 AA 1421 STA TEMP1 BFDF: 8D 70 AA 1422 STA BYTVAL BFE2: 8D 71 AA 1423 STA BYTVAL+1 BFE5: 60 1424 RTS 1425 BFE6: 20 5B A7 1426 JSR RSET0 BFE9: 8C B7 AA 1427 STY RUNINTRC BFEC: 60 1428 RTS 1429 BFED: 20 7E AE 1430 JSR SAVFMW BFF0: AE 9B B3 1431 LDX STKSAVE BFF3: 9A 1432 TXS BFF4: 20 16 A3 1433 JSR CLOSEALL BFF7: BA 1434 TSX BFF8: 8E 9B B3 1435 STX STKSAVE BFFB: A9 09 1436 LDA #9 BFFD: 4C 85 B3 1437 JMP SETERROR 1438 1439 SAV OBJ/DECKARD/SST.RWTS Object saved as OBJ/DECKARD/SST.RWTS,A$B700,L$0900,BIN --End assembly, 2304 bytes, Errors: 0 Symbol table - alphabetical order: ALLDONE =$BE46 ? AUXREAD =$C003 ? AUXWRT =$C005 BASIC =$E000 BUFADR =$3E BUFADR2 =$42 BYTVAL =$AA70 CALLRWTS=$B7B5 CHKPOS =$B9EE CHKPOS2 =$B9F1 CLOSEALL=$A316 COUNT =$26 ? COUT =$FDED ? COUT1 =$FDF0 CRCTVOL =$BE26 CSUM =$27 CURTRK =$0478 DELAY =$BF3A DELAY12 =$BF87 DEVCTBL =$3C DISKF2 =$BF0D DOAGAIN =$BF71 ? DONEDSK =$BF09 DOSSTRT =$9D84 DRIVNO =$35 DRV0TRK =$0478 DRV1TRK =$04F8 DRVERROR=$BE04 DRVSEL =$BD7F DSKFORM =$BEAF ERRCNT =$BF81 FORMDSK =$BE0D FRMSYNC =$BC69 FRSTBOOT=$B7E6 FRSTPAG =$B6FE GALLDONE=$BE0B GOSEEK =$BE8B HC088 =$C088 HC089 =$C089 HC08A =$C08A HC08B =$C08B HC08C =$C08C HC08D =$C08D HC08E =$C08E HC08F =$C08F ? HC0EC =$C0EC ? HIRES =$C057 ? HISCR =$C055 HNDERR =$BF04 HNDERR2 =$BF07 HNDLERR =$BE48 ? HOME =$FC58 IDX =$26 INITMAP =$BF32 INTRLEAV=$BFB8 IOBPH =$49 IOBPL =$48 ISDRV0 =$BE88 ISTHERE =$B9EA ITSGOOD =$BF67 JMPTO1 =$BE07 ? KEY =$C000 L0478 =$0478 L04F8 =$04F8 L1 =$B869 L10 =$B94F L11 =$B959 L12 =$B964 L13 =$B971 L14 =$B979 L15 =$B98B L16 =$B995 L17 =$B9C0 L18 =$B9C5 L19 =$B9CB L2 =$B8E1 L20 =$B9D0 L21 =$BA02 L22 =$BA0B L23 =$BD4E L24 =$BD74 L25 =$BD7C L26 =$BDA0 L29 =$BEBF L3 =$B8EB L30 =$BEC5 L31 =$BF17 L4 =$B8F6 L5 =$B904 L6 =$B915 L7 =$B925 L8 =$B92F L85 =$B7A9 L86 =$B7BF L87 =$B7D9 L9 =$B939 LAST =$26 ? LOWSCR =$C054 ? MAINREAD=$C002 ? MAINWRT =$C004 MARKMAP =$BF88 ? MIXCLR =$C052 MONTIMEH=$47 MONTIMEL=$4E MOTOROFF=$BD9E MOVEHEAD=$B9AD MSWAIT =$BA00 MYSEEK =$BE5A NBUF1 =$BB00 NBUF2 =$BC00 NIBL =$BA29 NOGOOD =$BEE5 NOTSURE =$BD2A NOTSURE2=$BD3C NOWAIT =$BD90 NSECSRW =$B7E1 NUMPGS =$B7E0 NUMSECS =$B6FF NXTSEC =$BF62 NXTTRK =$BED4 NXTTRY =$BF6C OFFTBL =$BA1D ? OLDRST =$FF59 ONDRV0 =$BEAB ONTBL =$BA11 PHASEOFF=$C080 POST1 =$B8C4 POST2 =$B8C6 POSTNB16=$B8C2 PRENIB1 =$B804 PRENIB16=$B800 PRENIB2 =$B81E PRIOR =$27 PTRMOVE =$BD54 PTRSDEST=$36 ? PUTDOS =$B74A RDADR16 =$B944 RDADRX =$B99E RDAFLD =$B96F RDASYN =$B948 RDASYN1 =$B954 RDATA1 =$B901 RDATA2 =$B913 RDERR =$B942 RDRIGHT =$BDED READ16 =$B8DC REBOOT =$BFC8 RECAL =$BDCE RECALCNT=$06F8 RESEEK =$BDE7 RESTART =$B744 RETRYCNT=$0578 ROM =$C081 ? ROM_VERSION=$FBB3 RSET0 =$A75B RSYNC =$B8DE RSYNC1 =$B8E6 RTS0 =$B9FC RTS3 =$BEAE RTTRK =$BE10 RUNINTRC=$AAB7 RWPAGES =$B793 RWTS: =$BD00 RWTSPPTR=$B7E4 ? RWTSPRMS=$B7C2 ? RWTS_BYTCNT=$B7F2 RWTS_CMDCODE=$B7F4 RWTS_DEVCT=$B7FB RWTS_DNUM=$B7EA RWTS_DRVFND=$B7F8 ? RWTS_ERRRCODE=$B7F5 RWTS_SLOTFND=$B7F7 RWTS_SNUM=$B7ED RWTS_SNUM16=$B7E9 ? RWTS_TABLE=$B7E8 ? RWTS_TBLTYPE=$B7E8 RWTS_TNUM=$B7EC ? RWTS_UNUSED=$B7F9 RWTS_USRBUF=$B7F0 RWTS_VOLEXPT=$B7EB ? RWTS_VOLFND=$B7F6 ? RWTS_WDATA1=$B87D SAMESLOT=$BD34 SAVFMW =$AE7E SECFND =$2D SECMAP =$BFA8 SEEK1 =$BE6B SEEKABS =$B9A0 SEEKCNT =$04F8 SETERROR=$B385 SETKBD =$FE89 SETTRK =$BE95 SETVID =$FE93 SLOT =$05F8 SLOTABS =$0678 SLOTEMP =$2B SLOTZ =$27 ? SPKR =$C030 STEPWAIT=$BD87 STILLON =$BD25 STKSAVE =$B39B ? STROBE =$C010 SUBCODE =$B5BC SYNCNT =$46 TEMP1 =$AA63 TO =$26 TRACK =$44 TRKCNT =$26 TRKDONE =$BFA6 TRKFND =$2E TRKFRM =$BF15 TRKN =$2A TRYADR =$BDC1 TRYADR2 =$BDC9 TRYTRK =$BDAB TRYTRK2 =$BDBC ? TXTCLR =$C050 ? TXTSET =$C051 VOLFND =$2F VOLNUMBR=$B5F9 VOLUME =$41 ? VTAB =$FC22 WAIT12 =$BCC3 WASDO =$BE7A WBYTE =$BCC4 WBYTE11 =$BCD4 WBYTE9 =$BCD5 WDATA0 =$B866 WDATA2 =$B87E WEXIT =$B8B4 WNIBL =$B8BB WNIBL7 =$B8B9 WNIBL9 =$B8B8 WPERROR =$BCBD WRADR16 =$BC56 WRIT =$BE51 WRITE16 =$B82A WSYNC =$B84A WTEMP =$26 XTOY =$BE8E ? ZEROBUFR=$B7D6 Symbol table - numerical order: WTEMP =$26 TO =$26 IDX =$26 COUNT =$26 LAST =$26 TRKCNT =$26 SLOTZ =$27 CSUM =$27 PRIOR =$27 TRKN =$2A SLOTEMP =$2B SECFND =$2D TRKFND =$2E VOLFND =$2F DRIVNO =$35 PTRSDEST=$36 DEVCTBL =$3C BUFADR =$3E VOLUME =$41 BUFADR2 =$42 TRACK =$44 SYNCNT =$46 MONTIMEH=$47 IOBPL =$48 IOBPH =$49 MONTIMEL=$4E DRV0TRK =$0478 CURTRK =$0478 L0478 =$0478 SEEKCNT =$04F8 DRV1TRK =$04F8 L04F8 =$04F8 RETRYCNT=$0578 SLOT =$05F8 SLOTABS =$0678 RECALCNT=$06F8 DOSSTRT =$9D84 CLOSEALL=$A316 RSET0 =$A75B TEMP1 =$AA63 BYTVAL =$AA70 RUNINTRC=$AAB7 SAVFMW =$AE7E SETERROR=$B385 STKSAVE =$B39B SUBCODE =$B5BC VOLNUMBR=$B5F9 FRSTPAG =$B6FE NUMSECS =$B6FF RESTART =$B744 ? PUTDOS =$B74A RWPAGES =$B793 L85 =$B7A9 CALLRWTS=$B7B5 L86 =$B7BF ? RWTSPRMS=$B7C2 ? ZEROBUFR=$B7D6 L87 =$B7D9 NUMPGS =$B7E0 NSECSRW =$B7E1 RWTSPPTR=$B7E4 FRSTBOOT=$B7E6 ? RWTS_TABLE=$B7E8 ? RWTS_TBLTYPE=$B7E8 RWTS_SNUM16=$B7E9 RWTS_DNUM=$B7EA RWTS_VOLEXPT=$B7EB RWTS_TNUM=$B7EC RWTS_SNUM=$B7ED RWTS_USRBUF=$B7F0 ? RWTS_BYTCNT=$B7F2 RWTS_CMDCODE=$B7F4 ? RWTS_ERRRCODE=$B7F5 ? RWTS_VOLFND=$B7F6 RWTS_SLOTFND=$B7F7 RWTS_DRVFND=$B7F8 ? RWTS_UNUSED=$B7F9 RWTS_DEVCT=$B7FB PRENIB16=$B800 PRENIB1 =$B804 PRENIB2 =$B81E WRITE16 =$B82A WSYNC =$B84A WDATA0 =$B866 L1 =$B869 ? RWTS_WDATA1=$B87D WDATA2 =$B87E WEXIT =$B8B4 WNIBL9 =$B8B8 WNIBL7 =$B8B9 WNIBL =$B8BB POSTNB16=$B8C2 POST1 =$B8C4 POST2 =$B8C6 READ16 =$B8DC RSYNC =$B8DE L2 =$B8E1 RSYNC1 =$B8E6 L3 =$B8EB L4 =$B8F6 RDATA1 =$B901 L5 =$B904 RDATA2 =$B913 L6 =$B915 L7 =$B925 L8 =$B92F L9 =$B939 RDERR =$B942 RDADR16 =$B944 RDASYN =$B948 L10 =$B94F RDASYN1 =$B954 L11 =$B959 L12 =$B964 RDAFLD =$B96F L13 =$B971 L14 =$B979 L15 =$B98B L16 =$B995 RDADRX =$B99E SEEKABS =$B9A0 MOVEHEAD=$B9AD L17 =$B9C0 L18 =$B9C5 L19 =$B9CB L20 =$B9D0 ISTHERE =$B9EA CHKPOS =$B9EE CHKPOS2 =$B9F1 RTS0 =$B9FC MSWAIT =$BA00 L21 =$BA02 L22 =$BA0B ONTBL =$BA11 OFFTBL =$BA1D NIBL =$BA29 NBUF1 =$BB00 NBUF2 =$BC00 WRADR16 =$BC56 FRMSYNC =$BC69 WPERROR =$BCBD WAIT12 =$BCC3 WBYTE =$BCC4 WBYTE11 =$BCD4 WBYTE9 =$BCD5 RWTS: =$BD00 STILLON =$BD25 NOTSURE =$BD2A SAMESLOT=$BD34 NOTSURE2=$BD3C L23 =$BD4E PTRMOVE =$BD54 L24 =$BD74 L25 =$BD7C DRVSEL =$BD7F STEPWAIT=$BD87 NOWAIT =$BD90 MOTOROFF=$BD9E L26 =$BDA0 TRYTRK =$BDAB TRYTRK2 =$BDBC TRYADR =$BDC1 TRYADR2 =$BDC9 RECAL =$BDCE RESEEK =$BDE7 RDRIGHT =$BDED DRVERROR=$BE04 JMPTO1 =$BE07 GALLDONE=$BE0B FORMDSK =$BE0D RTTRK =$BE10 CRCTVOL =$BE26 ALLDONE =$BE46 HNDLERR =$BE48 WRIT =$BE51 MYSEEK =$BE5A SEEK1 =$BE6B WASDO =$BE7A ISDRV0 =$BE88 GOSEEK =$BE8B XTOY =$BE8E SETTRK =$BE95 ONDRV0 =$BEAB RTS3 =$BEAE DSKFORM =$BEAF L29 =$BEBF L30 =$BEC5 NXTTRK =$BED4 NOGOOD =$BEE5 HNDERR =$BF04 HNDERR2 =$BF07 ? DONEDSK =$BF09 DISKF2 =$BF0D TRKFRM =$BF15 L31 =$BF17 INITMAP =$BF32 DELAY =$BF3A NXTSEC =$BF62 ITSGOOD =$BF67 NXTTRY =$BF6C DOAGAIN =$BF71 ERRCNT =$BF81 DELAY12 =$BF87 MARKMAP =$BF88 TRKDONE =$BFA6 SECMAP =$BFA8 INTRLEAV=$BFB8 REBOOT =$BFC8 ? KEY =$C000 ? MAINREAD=$C002 ? AUXREAD =$C003 ? MAINWRT =$C004 ? AUXWRT =$C005 ? STROBE =$C010 ? SPKR =$C030 ? TXTCLR =$C050 ? TXTSET =$C051 ? MIXCLR =$C052 ? LOWSCR =$C054 ? HISCR =$C055 ? HIRES =$C057 PHASEOFF=$C080 ROM =$C081 HC088 =$C088 HC089 =$C089 HC08A =$C08A HC08B =$C08B HC08C =$C08C HC08D =$C08D HC08E =$C08E HC08F =$C08F ? HC0EC =$C0EC BASIC =$E000 ? ROM_VERSION=$FBB3 ? VTAB =$FC22 ? HOME =$FC58 ? COUT =$FDED ? COUT1 =$FDF0 SETKBD =$FE89 SETVID =$FE93 ? OLDRST =$FF59