:asm 1 2 ; LST OFF 3 ORG $1D00 ; SST.SUBS ($1D00-$23FF) 4 5 USE EDD.PAGE0 6 USE EDD.ROM 7 8 ******************************** 9 * * 10 * SST SUBS * 11 * (c) Saltine * 12 * Source by Deckard * 13 * * 14 ******************************** 15 16 * EDD.MAIN 17 18 ERSBTM EQU $1610 ; erase the 2 bottom lines of the screen 19 20 * Apple II ram 21 22 PARMBUFSV EQU $2500 ; backup of EDD parameters buffer (unpack with 23 ; "your parms" option) 24 H7800 EQU $7800 ; $7800-$93FF track buffer 25 H9400 EQU $9400 ; $9400-$AFFF timing bit buffer 26 27 * EDD.B000.B4FF 28 29 CONTRLP EQU $B100 ; prewrite routine buffer 30 LTC EQU $B230 ; lookup table for divide routine 31 POS EQU $B280 ; original slot 32 POD EQU $B281 ; original drive 33 PDS EQU $B282 ; duplicate slot 34 PDD EQU $B283 ; duplicate drive 35 DRVCOUNT EQU $B285 ; one or two drives 36 CTRKO EQU $B286 ; original track 37 CTRKD EQU $B287 ; duplicate track 38 STARTRK EQU $B288 ; start track 39 ENDTRK EQU $B289 ; end track 40 STEP EQU $B28A ; step 41 TRACK EQU $B28B ; track 42 SYNCFLG EQU $B28C ; synchronized track flag 43 NBLCFLG EQU $B28D ; nibble count flag 44 PARMS EQU $B300 ; parameter buffer 45 46 * SST.CONTROLER 47 48 CTL_DO_MOVE EQU $B523 ; switch SST bank 2 and EDD 49 CTL_XCH1 EQU $B539 ; switch module 50 CTL_EDDREAD EQU $B560 51 CTL_EDDWRITE EQU $B566 52 CTL_VAR1 EQU $B56D ; "packed parms" or "your parms" 53 CTL_VAR2 EQU $B56E ; [$00 or $FF] 54 CTL_VAR3 EQU $B56F ; copy or pack or unpack [0..2] 55 CTL_POS EQU $B570 ; original slot 56 CTL_PDS EQU $B571 ; duplicate slot 57 CTL_POD EQU $B572 ; original drive 58 CTL_PDD EQU $B573 ; duplicate drive 59 CTL_DRVCOUNT EQU $B574 ; 1 or 2 drives 60 CTL_STARTRK EQU $B575 ; start track 61 CTL_ENDTRK EQU $B576 ; end track 62 CTL_STEP EQU $B577 ; step 63 CTL_NBLCFLG EQU $B578 ; nibble count flag 64 CTL_SYNCFLG EQU $B579 ; synchronized track flag 65 CTL_SIDE EQU $B57A ; "side" 66 CTL_TRACK EQU $B57B ; track 67 68 * SST.RWTS 69 70 CMD_READ = 1 71 CMD_WRITE = 2 72 CMD_FORMAT = 4 73 74 RWTS_TABLE EQU $B7E8 75 RWTS_SNUM16 = RWTS_TABLE+1 ; slot * 16 76 RWTS_DNUM = RWTS_TABLE+2 ; drive number 77 RWTS_VOLEXPT = RWTS_TABLE+3 ; volume number expected 78 RWTS_TNUM = RWTS_TABLE+4 ; track number 79 RWTS_SNUM = RWTS_TABLE+5 ; sector number 80 RWTS_USRBUF = RWTS_TABLE+8 ; R/W buffer 81 RWTS_CMDCODE = RWTS_TABLE+12 ; command 82 83 RWTS: EQU $BD00 ; RWTS entry point 84 85 * EDD.DRIVE 86 87 ARMV EQU $B87D ; move disk II drive's arm to a track 88 89 *------------------------------* 90 * * 91 * Switch * 92 * EDD disk drive routines mod * 93 * and SST RWTS * 94 * * 95 *------------------------------* 96 97 * Switch EDD ($B700-$BFFF) <=> BANK 2 SST ($D700-$DFFF) 98 99 SBS_XCHANGE 1D00: A9 B7 100 LDA #>$B700 1D02: 85 3D 101 STA $3D 1D04: A9 D7 102 LDA #>$D700 1D06: 85 3F 103 STA $3F 1D08: A9 00 104 LDA #0 ; low 1D0A: 85 3C 105 STA $3C 1D0C: 85 3E 106 STA $3E 1D0E: A8 107 TAY 1D0F: A9 C0 108 LDA #>$C000 ; end 1D11: 85 42 109 STA $42 1D13: 4C 39 B5 110 JMP CTL_XCH1 ; exec switch 111 112 113 *------------------------------* 114 * * 115 * Set pointers up * 116 * * 117 *------------------------------* 118 119 * Out: ($3C) track buff 120 * ($3E) timing bit buff 121 1D16: A9 78 122 SBS_PUP LDA #>H7800 ; track buffer addr high 1D18: 85 3D 123 STA $3D 1D1A: A9 94 124 LDA #>H9400 ; timing bit buffer addr high 1D1C: 85 3F 125 STA $3F 1D1E: A9 00 126 LDA #$00 ; low 1D20: 85 3C 127 STA $3C 1D22: 85 3E 128 STA $3E 1D24: A8 129 TAY ; Y=0 1D25: 60 130 RTS 131 132 *------------------------------* 133 * * 134 * Build the timing bit buffer * 135 * with the loaded track buffer * 136 * (Unpack) * 137 * * 138 *------------------------------- 139 140 * in : track buffer (with flag on every bit 7) 141 * for every nibble: bit 7 = 0 => timing bit 142 * bit 7 = 1 => no timing bit 143 * Out: track buffer 144 * for every nibble: bit 7 = 1 (normal) 145 * timing bit buffer 146 * for every byte: bit 0 = 0 => no timing bit 147 * bit 0 = 1 => timing bit 148 149 SBS_BUILDTBB 1D26: 20 16 1D 150 JSR SBS_PUP ; set pointers 1D29: B1 3C 151 SBS_BTBB1 LDA ($3C),Y ; nibble from track buffer 1D2B: C9 80 152 CMP #$80 ; bit 7 = 0? 1D2D: 90 05 153 BCC SBS_SETBIT ; yes, set timing bit 154 1D2F: A9 00 155 LDA #0 ; no timing bit 1D31: 4C 3A 1D 156 JMP SBS_STRBIT 157 1D34: 49 80 158 SBS_SETBIT EOR #$80 ; normal nibble always has bit 7 on 1D36: 91 3C 159 STA ($3C),Y ; store nibble without this "flag" 160 1D38: A9 01 161 LDA #1 ; set timing bit 162 1D3A: 91 3E 163 SBS_STRBIT STA ($3E),Y ; fill timing bit buffer 1D3C: C8 164 INY ; next nibble 1D3D: D0 EA 165 BNE SBS_BTBB1 166 1D3F: E6 3D 167 INC $3D ; next page 1D41: E6 3F 168 INC $3F 1D43: A5 3F 169 LDA $3F 1D45: C9 B0 170 CMP #>$B000 ; until $AFFF (end of timing bit buff) 1D47: D0 E0 171 BNE SBS_BTBB1 ; continue 1D49: 60 172 RTS 173 174 *------------------------------* 175 * * 176 * Clear 40c TXT window * 177 * middle to bottom * 178 * * 179 *------------------------------* 180 1D4A: A9 0C 181 SBS_CLMID LDA #12 1D4C: 85 22 182 STA WNDTOP 1D4E: 20 58 FC 183 JSR HOME 1D51: 60 184 RTS 185 186 *------------------------------* 187 * * 188 * Check that the floppy is a * 189 * SST data disk * 190 * * 191 *------------------------------* 192 193 * If pack option, this is always the case because 194 * the program has a correct program variables storage 195 * buffer. 196 * If unpack option, page $B2 ($B200-$B2FF) is loaded 197 * from the disk. 198 1D52: A0 00 199 SBS_CHKDSK LDY #0 1D54: B9 30 B2 200 :1 LDA LTC,Y ; reference bytes 1D57: D9 A8 1F 201 CMP SBS_DSKCMP,Y ; copy of standard LTC stored inside SST 1D5A: D0 09 202 BNE SBS_BAD ; difference means error (sector $02) 203 1D5C: C8 204 INY ; next ref byte 1D5D: C0 05 205 CPY #5 1D5F: D0 F3 206 BNE :1 207 1D61: 18 208 CLC ; ok no error 1D62: 4C C5 1D 209 JMP SBS_GOOD 210 211 * Bad disk (occurs only for Unpack) 212 1D65: 20 10 16 213 SBS_BAD JSR ERSBTM ; clean bottom of screen 1D68: 20 2B 22 214 JSR SBS_SETCRS ; set pos 22 1D6B: AD 7A B5 215 LDA CTL_SIDE ; include side number into message 1D6E: 8D B0 1D 216 STA SBS_SIDEA 1D71: A0 00 217 LDY #0 ; display the "wrong disk" message 1D73: B9 8A 1D 218 SBS_BAD1 LDA SBS_WDSK,Y 1D76: C9 FF 219 CMP #$FF ; terminator? 1D78: F0 07 220 BEQ SBS_BAD2 ; yes, end of string 221 1D7A: 20 ED FD 222 JSR COUT ; display char 1D7D: C8 223 INY ; next char 1D7E: 4C 73 1D 224 JMP SBS_BAD1 225 226 * Wait for a key and retry 227 1D81: 20 72 21 228 SBS_BAD2 JSR SBS_GETKEY ; waiting for a key 1D84: AD 7B B5 229 LDA CTL_TRACK ; retry this track 1D87: 4C A7 1E 230 JMP SBS_DOTRACK ; do it again 231 232 *------------------------------- 233 1D8A: A0 D7 D2 234 SBS_WDSK ASC " WRONG DISK!!!! Insert data disk side " 1D8D: CF CE C7 A0 1D91: C4 C9 D3 CB 1D95: A1 A1 A1 A1 1D99: A0 C9 EE F3 1D9D: E5 F2 F4 A0 1DA1: E4 E1 F4 E1 1DA5: A0 E4 E9 F3 1DA9: EB A0 F3 E9 1DAD: E4 E5 A0 1DB0: B1 8D 235 SBS_SIDEA ASC "1"8D 1DB2: A0 E1 EE 236 ASC " and press return."FF 1DB5: E4 A0 F0 F2 1DB9: E5 F3 F3 A0 1DBD: F2 E5 F4 F5 1DC1: F2 EE AE FF 237 238 *------------------------------- 239 1DC5: 4C 0D 1F 240 SBS_GOOD JMP SBS_RST_EDD ; continue => restore EDD environment 241 242 243 *------------------------------* 244 * * 245 * Call the DOS 3.3 RWTS * 246 * * 247 *------------------------------* 248 249 * In : RWTS_TNUM disk 1 => [$00..$22] 250 * disk 2 => [$23..$45] replaced by 251 * [$00..$22] 252 * 253 * Out: carry = 0 : ok 254 * carry = 1 : cancelled/error 255 1DC8: A9 B1 256 SBS_RWTS LDA #"1" ; first part of the .NIB (.dsk #1) 1DCA: 8D 7A B5 257 STA CTL_SIDE 1DCD: AD EC B7 258 LDA RWTS_TNUM 1DD0: C9 23 259 CMP #$23 ; track <$23? 1DD2: 90 18 260 BCC SBS_RWTSKEY ; yep 261 1DD4: C9 24 262 CMP #$24 ; track >=$24? 1DD6: B0 06 263 BCS :1 ; yes 264 265 ; special case: track 0 of 2nd disk (T$23) 1DD8: 20 5F 21 266 JSR SBS_TDO ; message "turn disk over" + key 1DDB: 4C E3 1D 267 JMP :2 268 1DDE: A9 B2 269 :1 LDA #"2" ; 2nd part of the .NIB (.dsk #2) 1DE0: 8D 7A B5 270 STA CTL_SIDE 1DE3: AD EC B7 271 :2 LDA RWTS_TNUM 1DE6: 38 272 SEC ; remove offset 1DE7: E9 23 273 SBC #$23 1DE9: 8D EC B7 274 STA RWTS_TNUM ; set correct track number 275 1DEC: AD 00 C0 276 SBS_RWTSKEY LDA KEY ; check if esc key pressed 1DEF: C9 9B 277 CMP #$9B ; esc 1DF1: F0 0A 278 BEQ :1 ; yep 279 280 ; no esc 1DF3: A9 B7 281 LDA #>RWTS_TABLE 1DF5: A0 E8 282 LDY # 1* NIB floppy disk 329 1E13: 2C 10 C0 330 SBS_DOUNPACK BIT STROBE 1E16: 20 00 1D 331 JSR SBS_XCHANGE ; save EDD disk drive rt & retrieve RWTS 332 333 * Fill RWTS parameters (for original disk drive) 334 1E19: AD 81 B2 335 LDA POD ; original EDD drive number 1E1C: 8D EA B7 336 STA RWTS_DNUM 1E1F: AD 80 B2 337 LDA POS ; original EDD slot*16 1E22: 0A 338 ASL 1E23: 0A 339 ASL 1E24: 0A 340 ASL 1E25: 0A 341 ASL 1E26: 8D E9 B7 342 STA RWTS_SNUM16 1E29: A9 01 343 LDA #CMD_READ ; read 16 sectors floppy disk 1E2B: 8D F4 B7 344 STA RWTS_CMDCODE 1E2E: 20 55 1E 345 JSR SBS_RWPROG ; read the track buffer from disk 1E31: 4C 23 B5 346 JMP CTL_DO_MOVE ; get EDD routines & save SST subs 347 348 349 *------------------------------* 350 * * 351 * Pack entry point * 352 * * 353 *------------------------------* 354 355 * 1* NIB floppy disk => 2* DSK floppy disks 356 1E34: 20 00 1D 357 SBS_DOPACK JSR SBS_XCHANGE ; retrieve RWTS (and store EDD disk drive rt) 358 359 * Fill RWTS parameters (for duplicate disk drive) 360 1E37: AD 82 B2 361 LDA PDS ; duplicate EDD slot *16 1E3A: 0A 362 ASL 1E3B: 0A 363 ASL 1E3C: 0A 364 ASL 1E3D: 0A 365 ASL 1E3E: 8D E9 B7 366 STA RWTS_SNUM16 1E41: AD 83 B2 367 LDA PDD ; duplicate EDD disk drive number 1E44: 8D EA B7 368 STA RWTS_DNUM 369 1E47: 20 36 22 370 JSR SBS_MERGE ; merge timing bits and raw data buffers 1E4A: A9 02 371 LDA #CMD_WRITE ; command=write 16 sectors disk 1E4C: 8D F4 B7 372 STA RWTS_CMDCODE 1E4F: 20 55 1E 373 JSR SBS_RWPROG ; save the track buffer to duplicate disk 1E52: 4C 23 B5 374 JMP CTL_DO_MOVE ; get EDD routines & save SST subs 375 376 377 *------------------------------* 378 * * 379 * Shared routine : RWTS access * 380 * * 381 *------------------------------* 382 383 * In : TRACK [$00..$88] step 4 (track $00 to $22) 384 * [$8C] (extra track. E.g.:$23) 385 * 386 * NOTE: TRACK LENGTH IS $1C00 (NOT $1A00 as in .NIB files) 387 388 SBS_RWPROG 389 390 * Set parameters (EDD to SST) 391 1E55: AD 80 B2 392 LDA POS ; original slot 1E58: 8D 70 B5 393 STA CTL_POS 1E5B: AD 82 B2 394 LDA PDS ; duplicate slot 1E5E: 8D 71 B5 395 STA CTL_PDS 1E61: AD 81 B2 396 LDA POD ; original disk drive 1E64: 8D 72 B5 397 STA CTL_POD 1E67: AD 83 B2 398 LDA PDD ; duplicate disk drive 1E6A: 8D 73 B5 399 STA CTL_PDD 1E6D: AD 85 B2 400 LDA DRVCOUNT ; nbr of drives 1E70: 8D 74 B5 401 STA CTL_DRVCOUNT 1E73: AD 8B B2 402 LDA TRACK ; track "to do" 1E76: 8D 7B B5 403 STA CTL_TRACK 1E79: AD 6D B5 404 LDA CTL_VAR1 ; 0=packed parms, 1=your parms 1E7C: F0 17 405 BEQ :1 406 407 ; "your parms" option (unpack) 1E7E: AD 8D B2 408 LDA NBLCFLG ; nibble count flag 1E81: 8D 78 B5 409 STA CTL_NBLCFLG 1E84: AD 8C B2 410 LDA SYNCFLG ; track synchro flag 1E87: 8D 79 B5 411 STA CTL_SYNCFLG 412 1E8A: A0 00 413 LDY #0 ; save EDD parameter buffer ($B300-$B3FF) 1E8C: B9 00 B3 414 :2 LDA PARMS,Y 1E8F: 99 00 25 415 STA PARMBUFSV,Y 1E92: C8 416 INY 1E93: D0 F7 417 BNE :2 418 419 1E95: AD 88 B2 420 :1 LDA STARTRK ; start track (track "to do", not the 1st track) 1E98: 8D 75 B5 421 STA CTL_STARTRK 1E9B: AD 89 B2 422 LDA ENDTRK ; end track 1E9E: 8D 76 B5 423 STA CTL_ENDTRK 1EA1: AD 8A B2 424 LDA STEP ; step 1EA4: 8D 77 B5 425 STA CTL_STEP 426 427 * Set parameters (RWTS) 428 429 SBS_DOTRACK 1EA7: AD 7B B5 430 LDA CTL_TRACK ; quarter track format to "double disk" format 1EAA: 4A 431 LSR ; /2 1EAB: 8D EC B7 432 STA RWTS_TNUM 1EAE: A9 78 433 LDA #>H7800 ; start=1st page of track buffer 1EB0: 8D F1 B7 434 STA RWTS_USRBUF+1 ; buffer high 1EB3: A9 00 435 LDA #H9400 ; end of buffer? 1ED5: F0 10 450 BEQ SBS_H1EE7 ; yes 451 1ED7: CE ED B7 452 DEC RWTS_SNUM ; previous sector 1EDA: 10 EE 453 BPL SBS_H1ECA ; >=0 454 1EDC: A9 0F 455 LDA #$0F ; continue to sector $0F 1EDE: 8D ED B7 456 STA RWTS_SNUM 1EE1: EE EC B7 457 INC RWTS_TNUM ; of the next track (track ASCending) 1EE4: 4C CA 1E 458 JMP SBS_H1ECA 459 460 * Read/Save the EDD buffers for EVERY track buffer 461 462 ; ok, the $1C00 track buffer is done. 463 ; now add/read 3 additionnal sectors 1EE7: CE ED B7 464 SBS_H1EE7 DEC RWTS_SNUM ; sector $03 1EEA: A9 B1 465 LDA #>CONTRLP 1EEC: 8D F1 B7 466 STA RWTS_USRBUF+1 1EEF: 20 EC 1D 467 JSR SBS_RWTSKEY ; prewrite routine buffer ($B100-$B1FF) 468 1EF2: CE ED B7 469 DEC RWTS_SNUM ; sector $02 1EF5: EE F1 B7 470 INC RWTS_USRBUF+1 1EF8: 20 EC 1D 471 JSR SBS_RWTSKEY ; program variable storage buffer ($B200-$B2FF) 472 1EFB: CE ED B7 473 DEC RWTS_SNUM ; sector $01 1EFE: EE F1 B7 474 INC RWTS_USRBUF+1 1F01: 20 EC 1D 475 JSR SBS_RWTSKEY ; parameter buffer ($B300-$B3FF) 1F04: 90 04 476 BCC SBS_GOCHKDSK ; no err 477 1F06: 20 00 1D 478 JSR SBS_XCHANGE ; err. Retrieve EDD.DRIVE & store SST.RWTS 1F09: 60 479 RTS 480 1F0A: 4C 52 1D 481 SBS_GOCHKDSK JMP SBS_CHKDSK ; check SST data disk & continue 482 483 484 *------------------------------* 485 * * 486 * Restore EDD environment * 487 * * 488 *------------------------------* 489 490 * Called by SBS_GOOD 491 1F0D: AD 80 B2 492 SBS_RST_EDD LDA POS ; unpack => USE RESTORED VALUES!!! (BUG) 1F10: CD 82 B2 493 CMP PDS ; original slot = duplicate slot? 1F13: D0 1B 494 BNE SBS_H1F30 ; no 495 1F15: AD 81 B2 496 LDA POD ; unpack => USE RESTORED VALUES!!! (BUG) 1F18: CD 83 B2 497 CMP PDD ; original drive # = duplicate drive #? 1F1B: D0 13 498 BNE SBS_H1F30 ; no 499 500 ; the user has only 1 drive for the process. 501 ; theorically this is done only with pack option 502 ; because Saltine said that the unpack process 503 ; is exec with an emulator (and 2 disk drives) 1F1D: AD EC B7 504 LDA RWTS_TNUM ; track*4 to get EDD internal track # 1F20: 0A 505 ASL 1F21: 0A 506 ASL 1F22: 85 12 507 STA CTRK 1F24: 20 00 1D 508 JSR SBS_XCHANGE ; retrieve EDD.DRIVE and store SST.RWTS 1F27: AD 8B B2 509 LDA TRACK 1F2A: 20 7D B8 510 JSR ARMV ; move arm to good track (due to original/duplicate 511 ; track mapping difference) 1F2D: 4C 33 1F 512 JMP SBS_H1F33 ; continue (EDD.DRIVE already in place) 513 1F30: 20 00 1D 514 SBS_H1F30 JSR SBS_XCHANGE ; retrieve EDD.DRIVE and store SST.RWTS 515 1F33: AD 6F B5 516 SBS_H1F33 LDA CTL_VAR3 1F36: C9 02 517 CMP #$02 ; unpack option? 1F38: D0 14 518 BNE SBS_H1F4E ; no 519 520 ; unpack 1F3A: 20 26 1D 521 JSR SBS_BUILDTBB ; build timing bit buffer 1F3D: AD 6E B5 522 LDA CTL_VAR2 1F40: C9 FF 523 CMP #$FF 1F42: F0 0A 524 BEQ SBS_H1F4E ; always 525 1F44: AD 8B B2 526 LDA TRACK ; not used... 1F47: 38 527 SEC 1F48: ED 8A B2 528 SBC STEP 1F4B: 8D 87 B2 529 STA CTRKD 530 531 * Set parameters (SST to EDD) 532 1F4E: AD 8B B2 533 SBS_H1F4E LDA TRACK 1F51: 85 12 534 STA CTRK 1F53: A9 00 535 LDA #0 1F55: 8D 6E B5 536 STA CTL_VAR2 1F58: 20 10 16 537 JSR ERSBTM 1F5B: AD 72 B5 538 LDA CTL_POD 1F5E: 8D 81 B2 539 STA POD 1F61: AD 70 B5 540 LDA CTL_POS 1F64: 8D 80 B2 541 STA POS 1F67: AD 71 B5 542 LDA CTL_PDS 1F6A: 8D 82 B2 543 STA PDS 1F6D: AD 73 B5 544 LDA CTL_PDD 1F70: 8D 83 B2 545 STA PDD 1F73: AD 74 B5 546 LDA CTL_DRVCOUNT 1F76: 8D 85 B2 547 STA DRVCOUNT 1F79: AD 75 B5 548 LDA CTL_STARTRK 1F7C: 8D 88 B2 549 STA STARTRK 1F7F: AD 76 B5 550 LDA CTL_ENDTRK 1F82: 8D 89 B2 551 STA ENDTRK 1F85: AD 77 B5 552 LDA CTL_STEP 1F88: 8D 8A B2 553 STA STEP 1F8B: AD 6D B5 554 LDA CTL_VAR1 ; packed parms? 1F8E: F0 17 555 BEQ SBS_RILDON ; yes 556 1F90: AD 78 B5 557 LDA CTL_NBLCFLG ; nibble count 1F93: 8D 8D B2 558 STA NBLCFLG 1F96: AD 79 B5 559 LDA CTL_SYNCFLG ; syncronized track 1F99: 8D 8C B2 560 STA SYNCFLG 561 1F9C: A0 00 562 LDY #0 1F9E: B9 00 25 563 SBS_RPARM LDA PARMBUFSV,Y ; restore EDD parameter buffer 1FA1: 99 00 B3 564 STA PARMS,Y 1FA4: C8 565 INY 1FA5: D0 F7 566 BNE SBS_RPARM 567 1FA7: 60 568 SBS_RILDON RTS 569 570 571 *------------------------------* 572 * * 573 * Copy of LTC bytes * 574 * * 575 *------------------------------* 576 577 * Use the table for divide routine as reference 578 1FA8: 10 27 E8 579 SBS_DSKCMP DA 10000,1000 1FAB: 03 1FAC: 64 580 HEX 64 581 582 583 *------------------------------* 584 * * 585 * Choose menu sub-option * 586 * (Pirate a Disk) * 587 * * 588 *------------------------------* 589 590 * Out: CTL_VAR3 [0=EDD copy,1=pack,2=unpack] 591 * CTL_VAR2 $FF 592 * CTL_VAR1 [0=packed parms,1=your parms] if unpack 593 * [0=packed parms] if EDD copy or pack 594 1FAD: 20 4A 1D 595 SBS_CHOOSE JSR SBS_CLMID ; clear window: middle to bottom 1FB0: A9 FF 596 LDA #$FF 1FB2: 8D 6E B5 597 STA CTL_VAR2 1FB5: 8D 86 B2 598 STA CTRKO ; EDD original track 599 1FB8: A0 00 600 LDY #0 1FBA: 2C 10 C0 601 BIT STROBE 1FBD: B9 21 20 602 :1 LDA SBS_CHTXT,Y ; display sub-menu: Pirate a disk 1FC0: C9 FF 603 CMP #$FF ; terminator? 1FC2: F0 07 604 BEQ :2 ; yep 605 1FC4: 20 ED FD 606 JSR COUT ; print character 1FC7: C8 607 INY ; next char 1FC8: 4C BD 1F 608 JMP :1 ; string loop 609 1FCB: AD 00 C0 610 :2 LDA KEY ; wait for a key 1FCE: 10 FB 611 BPL :2 612 1FD0: C9 9B 613 CMP #$9B ; esc? 1FD2: D0 01 614 BNE :3 ; no 1FD4: 60 615 RTS ; return to main menu 616 617 ; check selection validity 1FD5: C9 B1 618 :3 CMP #"1" ; <"1" 1FD7: 90 F2 619 BCC :2 ; bad: wait for another key 620 1FD9: C9 B4 621 CMP #"4" ; >="4" 1FDB: B0 EE 622 BCS :2 ; bad: wait for another key 623 1FDD: 38 624 SEC ; ["1","3"] => [0,2] 1FDE: E9 B1 625 SBC #"1" 1FE0: 8D 6F B5 626 STA CTL_VAR3 1FE3: C9 02 627 CMP #2 ; unpack 1FE5: D0 31 628 BNE :8 ; copy or pack -> finished 629 630 * Unpack: ask for detail 631 1FE7: 20 58 FC 632 JSR HOME 1FEA: 2C 10 C0 633 BIT STROBE 1FED: A0 00 634 LDY #0 ; display sub-menu: unpack 1FEF: B9 88 20 635 :5 LDA SBS_PARMTXT,Y 1FF2: C9 FF 636 CMP #$FF ; terminator 1FF4: F0 07 637 BEQ :4 638 1FF6: 20 ED FD 639 JSR COUT ; print character 1FF9: C8 640 INY ; next char 1FFA: 4C EF 1F 641 JMP :5 ; string loop 642 1FFD: AD 00 C0 643 :4 LDA KEY ; get key 2000: 10 FB 644 BPL :4 ; bad, try again 645 2002: C9 9B 646 CMP #$9B ; esc 2004: D0 01 647 BNE :6 ; no 2006: 60 648 RTS ; return to main menu 649 650 ; check selection validity 2007: C9 B1 651 :6 CMP #"1" ; <"1" 2009: 90 F2 652 BCC :4 ; bad: wait for another key 653 200B: C9 B3 654 CMP #"3" ; >="2" 200D: B0 EE 655 BCS :4 ; bad: wait for another key 656 200F: 38 657 SEC ; ["1","2"] => [0,1] 2010: E9 B1 658 SBC #"1" 2012: 8D 6D B5 659 STA CTL_VAR1 2015: 4C 1D 20 660 JMP :7 661 2018: A9 00 662 :8 LDA #0 ; packed parm for copy/pack 201A: 8D 6D B5 663 STA CTL_VAR1 201D: 2C 10 C0 664 :7 BIT STROBE 2020: 60 665 RTS 666 667 668 *------------------------------* 669 * * 670 * TEXT STRINGS * 671 * * 672 *------------------------------* 673 674 * Sub-menu: Pirate a disk 675 2021: A0 A0 A0 676 SBS_CHTXT ASC " 1) Copy " 2024: A0 A0 A0 A0 2028: A0 A0 A0 A0 202C: A0 A0 B1 A9 2030: A0 C3 EF F0 2034: F9 A0 A0 A0 2038: A0 A0 A0 A0 203C: A0 A0 A0 A0 2040: A0 A0 A0 A0 2044: A0 A0 A0 A0 2048: A0 2049: A0 A0 A0 677 ASC " 2) Pack " 204C: A0 A0 A0 A0 2050: A0 A0 A0 A0 2054: A0 A0 B2 A9 2058: A0 D0 E1 E3 205C: EB A0 A0 A0 2060: A0 A0 A0 A0 2064: A0 A0 A0 A0 2068: A0 A0 A0 A0 206C: A0 A0 A0 A0 2070: A0 2071: A0 A0 A0 678 ASC " 3) Unpack" 2074: A0 A0 A0 A0 2078: A0 A0 A0 A0 207C: A0 A0 B3 A9 2080: A0 D5 EE F0 2084: E1 E3 EB 2087: FF 679 HEX FF ; terminator 680 2088: A0 A0 A0 681 SBS_PARMTXT ASC " 1) Packed parms " 208B: A0 A0 A0 A0 208F: A0 A0 A0 A0 2093: A0 A0 B1 A9 2097: A0 D0 E1 E3 209B: EB E5 E4 A0 209F: F0 E1 F2 ED 20A3: F3 A0 A0 A0 20A7: A0 A0 A0 A0 20AB: A0 A0 A0 A0 20AF: A0 20B0: A0 A0 A0 682 ASC " 2) Your parms" 20B3: A0 A0 A0 A0 20B7: A0 A0 A0 A0 20BB: A0 A0 B2 A9 20BF: A0 D9 EF F5 20C3: F2 A0 F0 E1 20C7: F2 ED F3 20CA: FF 683 HEX FF ; terminator 684 20CB: A0 A0 A0 685 SBS_INITEXT ASC " riginal or uplicate drive?" 20CE: A0 BC CF BE 20D2: F2 E9 E7 E9 20D6: EE E1 EC A0 20DA: EF F2 A0 BC 20DE: C4 BE F5 F0 20E2: EC E9 E3 E1 20E6: F4 E5 A0 E4 20EA: F2 E9 F6 E5 20EE: BF 20EF: FF 686 HEX FF ; terminator 687 20F0: A0 A0 A0 688 SBS_PAKTXT ASC " Press a key when ready" 20F3: A0 A0 A0 A0 20F7: A0 D0 F2 E5 20FB: F3 F3 A0 E1 20FF: A0 EB E5 F9 2103: A0 F7 E8 E5 2107: EE A0 F2 E5 210B: E1 E4 F9 210E: FF 689 HEX FF ; terminator 690 210F: A0 A0 A0 691 DS 79," " 2112: A0 A0 A0 A0 2116: A0 A0 A0 A0 211A: A0 A0 A0 A0 211E: A0 A0 A0 A0 2122: A0 A0 A0 A0 2126: A0 A0 A0 A0 212A: A0 A0 A0 A0 212E: A0 A0 A0 A0 2132: A0 A0 A0 A0 2136: A0 A0 A0 A0 213A: A0 A0 A0 A0 213E: A0 A0 A0 A0 2142: A0 A0 A0 A0 2146: A0 A0 A0 A0 214A: A0 A0 A0 A0 214E: A0 A0 A0 A0 2152: A0 A0 A0 A0 2156: A0 A0 A0 A0 215A: A0 A0 A0 A0 215E: FF 692 HEX FF ; terminator 693 694 695 *------------------------------* 696 * * 697 * Turn Disk Over * 698 * * 699 *------------------------------* 700 215F: 20 2B 22 701 SBS_TDO JSR SBS_SETCRS ; pos line 22 2162: A0 00 702 LDY #0 2164: B9 7E 21 703 :1 LDA SBS_TURNDSK,Y ; display "turn disk over" message 2167: C9 20 704 CMP #$20 ; JMP of next intruction (=terminator) 2169: F0 07 705 BEQ SBS_GETKEY 706 216B: 20 ED FD 707 JSR COUT ; print character 216E: C8 708 INY ; next char 216F: 4C 64 21 709 JMP :1 ; string loop 710 2172: 2C 10 C0 711 SBS_GETKEY BIT STROBE 712 2175: AD 00 C0 713 :1 LDA KEY ; wait any key 2178: 10 FB 714 BPL :1 715 217A: 20 10 16 716 JSR ERSBTM ; clear bottom of screen 217D: 60 717 RTS 718 217E: A0 A0 D4 719 SBS_TURNDSK ASC " Turn DATA disk over and press RETURN" 2181: F5 F2 EE A0 2185: C4 C1 D4 C1 2189: A0 E4 E9 F3 218D: EB A0 EF F6 2191: E5 F2 A0 E1 2195: EE E4 A0 F0 2199: F2 E5 F3 F3 219D: A0 D2 C5 D4 21A1: D5 D2 CE 720 721 722 *------------------------------* 723 * * 724 * Initialize a disk * 725 * Exec routine * 726 * * 727 *------------------------------* 728 21A4: 20 10 16 729 SBS_INIT JSR ERSBTM ; clear bottom of screen 21A7: 20 00 1D 730 JSR SBS_XCHANGE ; retrieve RWTS (store EDD disk drive rt) 21AA: 2C 10 C0 731 BIT $C010 21AD: 20 2B 22 732 JSR SBS_SETCRS ; pos line 22 21B0: A0 00 733 LDY #0 21B2: B9 CB 20 734 :2 LDA SBS_INITEXT,Y ; msg asking for original of duplicate drive 21B5: C9 FF 735 CMP #$FF ; terminator? 21B7: F0 07 736 BEQ :1 ; yes 737 21B9: 20 ED FD 738 JSR COUT ; print character 21BC: C8 739 INY ; next char 21BD: 4C B2 21 740 JMP :2 ; string loop 741 21C0: AD 00 C0 742 :1 LDA KEY ; wait key 21C3: 10 FB 743 BPL :1 744 ; check selection validity 21C5: 2C 10 C0 745 BIT STROBE 21C8: C9 CF 746 CMP #"O" ; original? 21CA: F0 07 747 BEQ :3 ; yes 748 21CC: C9 C4 749 CMP #"D" ; duplicate? 21CE: F0 16 750 BEQ :4 ; yes 751 21D0: 4C C0 21 752 JMP :1 ; bad: wait for another key 753 754 * Fill RWTS parameters for original disk 755 21D3: AD 81 B2 756 :3 LDA POD ; original drive 21D6: 8D EA B7 757 STA RWTS_DNUM 21D9: AD 80 B2 758 LDA POS ; original slot*16 21DC: 0A 759 ASL 21DD: 0A 760 ASL 21DE: 0A 761 ASL 21DF: 0A 762 ASL 21E0: 8D E9 B7 763 STA RWTS_SNUM16 21E3: 4C F6 21 764 JMP :5 ; wait key 765 766 * Fill RWTS parameters for duplicator disk 767 21E6: AD 83 B2 768 :4 LDA PDD ; duplicate drive 21E9: 8D EA B7 769 STA RWTS_DNUM 21EC: AD 82 B2 770 LDA PDS ; duplicate slot*16 21EF: 0A 771 ASL 21F0: 0A 772 ASL 21F1: 0A 773 ASL 21F2: 0A 774 ASL 21F3: 8D E9 B7 775 STA RWTS_SNUM16 776 777 * Wait for a key (=disk ready) 778 21F6: 2C 10 C0 779 :5 BIT STROBE 21F9: 20 10 16 780 JSR ERSBTM ; clear bottom screen 21FC: 20 2B 22 781 JSR SBS_SETCRS ; pos line 22 21FF: A0 00 782 LDY #0 ; display press a key (pak) message 2201: B9 F0 20 783 :7 LDA SBS_PAKTXT,Y 2204: C9 FF 784 CMP #$FF ; terminator 2206: F0 07 785 BEQ :6 ; yep 786 2208: 20 ED FD 787 JSR COUT ; print character 220B: C8 788 INY ; next char 220C: 4C 01 22 789 JMP :7 ; string loop 790 220F: AD 00 C0 791 :6 LDA KEY ; wait for any key 2212: 10 FB 792 BPL :6 793 2214: 2C 10 C0 794 BIT STROBE 2217: A9 00 795 LDA #0 ; any volume 2219: 8D EB B7 796 STA RWTS_VOLEXPT 221C: A9 04 797 LDA #CMD_FORMAT ; rwts command 221E: 8D F4 B7 798 STA RWTS_CMDCODE 2221: 20 C8 1D 799 JSR SBS_RWTS ; do format disk 2224: 20 10 16 800 JSR ERSBTM ; clear bottom of screen 2227: 20 00 1D 801 JSR SBS_XCHANGE ; store RWTS and retrieve EDD disk drive rt 222A: 60 802 RTS 803 804 805 *------------------------------* 806 * * 807 * Cursor position line 22 * 808 * * 809 *------------------------------* 810 222B: A9 00 811 SBS_SETCRS LDA #0 ; set X 222D: 85 24 812 STA CH 222F: A9 16 813 LDA #22 ; set Y 2231: 85 25 814 STA CV 2233: 4C 22 FC 815 JMP VTAB ; position 816 817 818 *------------------------------* 819 * * 820 * Merge timing bit buffer and * 821 * raw data buffer * 822 * * 823 *------------------------------* 824 825 * Default EDD parm#9=1 (TIMEBITS $B309) 826 * Normal mode 827 2236: 20 16 1D 828 SBS_MERGE JSR SBS_PUP ; set pointers up 829 ; Y=0 2239: B1 3E 830 :1 LDA ($3E),Y ; 0 or 1 or 2 (timing bit) %00000011 223B: 0A 831 ASL 223C: 0A 832 ASL 223D: 0A 833 ASL 223E: 0A 834 ASL 223F: 0A 835 ASL 2240: 0A 836 ASL 2241: 0A 837 ASL ; keep only default value!!!! (TIMEBITS=2 lost) 2242: 51 3C 838 EOR ($3C),Y ; merge with nibble 2244: 91 3C 839 STA ($3C),Y ; store result 2246: C8 840 INY 2247: D0 F0 841 BNE :1 842 2249: E6 3D 843 INC $3D ; merge the full rawdata buffer 224B: E6 3F 844 INC $3F 224D: A5 3F 845 LDA $3F 224F: C9 B0 846 CMP #>$B000 2251: D0 E6 847 BNE :1 848 2253: 60 849 RTS 850 851 852 *------------------------------* 853 * * 854 * Read/Write an extra track * 855 * typically Track 35 ($23) * 856 * * 857 *------------------------------* 858 2254: 20 5F 21 859 SBS_TRK35 JSR SBS_TDO ; message "turn disk over" + key 860 ; use the holes left by the tracks $00-$22 process 2257: A9 00 861 LDA #0 ; Begin with sector $00 2259: 8D ED B7 862 STA RWTS_SNUM 225C: A9 01 863 LDA #1 ; and track $01 225E: 8D EC B7 864 STA RWTS_TNUM 2261: A9 B2 865 LDA #"2" ; not used (no effect!!) 2263: 8D 7A B5 866 STA CTL_SIDE 2266: 20 C8 1D 867 SBS_H2266 JSR SBS_RWTS 2269: 90 01 868 BCC SBS_H226C ; no err 869 226B: 60 870 RTS ; Ooops! Missing code: JSR SBS_XCHANGE + restore 871 ; EDD parms. Assume no I/O err. 16 sector disk 872 ; must be ok. 873 226C: EE EC B7 874 SBS_H226C INC RWTS_TNUM ; next sector 2 tracks later 226F: EE EC B7 875 INC RWTS_TNUM 2272: EE F1 B7 876 INC RWTS_USRBUF+1 ; high 2275: AD F1 B7 877 LDA RWTS_USRBUF+1 2278: C9 94 878 CMP #>H9400 ; end of track buffer? 227A: D0 EA 879 BNE SBS_H2266 ; no 880 881 * Continue with the 3 extra sectors (EDD buffers) 882 227C: A9 B1 883 LDA #>CONTRLP ; prewrite routine buffer 227E: 8D F1 B7 884 STA RWTS_USRBUF+1 2281: 20 C8 1D 885 SBS_H2281 JSR SBS_RWTS ; T$16 S$00 886 2284: EE F1 B7 887 INC RWTS_USRBUF+1 ; program variable storage buffer 2287: EE EC B7 888 INC RWTS_TNUM 228A: EE EC B7 889 INC RWTS_TNUM 228D: 20 C8 1D 890 JSR SBS_RWTS ; T$18 S$00 891 2290: EE F1 B7 892 INC RWTS_USRBUF+1 ; parameter buffer 2293: EE EC B7 893 INC RWTS_TNUM 2296: EE EC B7 894 INC RWTS_TNUM 2299: 20 C8 1D 895 JSR SBS_RWTS ; T$1A S$00 896 ; assume no I/O err!!! 229C: 4C 0A 1F 897 JMP SBS_GOCHKDSK ; check SST data disk & continue 898 229F: 00 00 00 899 DS \,0 22A2: 00 00 00 00 22A6: 00 00 00 00 22AA: 00 00 00 00 22AE: 00 00 00 00 22B2: 00 00 00 00 22B6: 00 00 00 00 22BA: 00 00 00 00 22BE: 00 00 00 00 22C2: 00 00 00 00 22C6: 00 00 00 00 22CA: 00 00 00 00 22CE: 00 00 00 00 22D2: 00 00 00 00 22D6: 00 00 00 00 22DA: 00 00 00 00 22DE: 00 00 00 00 22E2: 00 00 00 00 22E6: 00 00 00 00 22EA: 00 00 00 00 22EE: 00 00 00 00 22F2: 00 00 00 00 22F6: 00 00 00 00 22FA: 00 00 00 00 22FE: 00 00 2300: 00 00 00 900 DS $100,0 2303: 00 00 00 00 2307: 00 00 00 00 230B: 00 00 00 00 230F: 00 00 00 00 2313: 00 00 00 00 2317: 00 00 00 00 231B: 00 00 00 00 231F: 00 00 00 00 2323: 00 00 00 00 2327: 00 00 00 00 232B: 00 00 00 00 232F: 00 00 00 00 2333: 00 00 00 00 2337: 00 00 00 00 233B: 00 00 00 00 233F: 00 00 00 00 2343: 00 00 00 00 2347: 00 00 00 00 234B: 00 00 00 00 234F: 00 00 00 00 2353: 00 00 00 00 2357: 00 00 00 00 235B: 00 00 00 00 235F: 00 00 00 00 2363: 00 00 00 00 2367: 00 00 00 00 236B: 00 00 00 00 236F: 00 00 00 00 2373: 00 00 00 00 2377: 00 00 00 00 237B: 00 00 00 00 237F: 00 00 00 00 2383: 00 00 00 00 2387: 00 00 00 00 238B: 00 00 00 00 238F: 00 00 00 00 2393: 00 00 00 00 2397: 00 00 00 00 239B: 00 00 00 00 239F: 00 00 00 00 23A3: 00 00 00 00 23A7: 00 00 00 00 23AB: 00 00 00 00 23AF: 00 00 00 00 23B3: 00 00 00 00 23B7: 00 00 00 00 23BB: 00 00 00 00 23BF: 00 00 00 00 23C3: 00 00 00 00 23C7: 00 00 00 00 23CB: 00 00 00 00 23CF: 00 00 00 00 23D3: 00 00 00 00 23D7: 00 00 00 00 23DB: 00 00 00 00 23DF: 00 00 00 00 23E3: 00 00 00 00 23E7: 00 00 00 00 23EB: 00 00 00 00 23EF: 00 00 00 00 23F3: 00 00 00 00 23F7: 00 00 00 00 23FB: 00 00 00 00 23FF: 00 901 902 SAV OBJ/DECKARD/SST.SUBS Object saved as OBJ/DECKARD/SST.SUBS,A$1D00,L$0700,BIN --End assembly, 1792 bytes, Errors: 0 Symbol table - alphabetical order: ARMV =$B87D ? AUXREAD =$C003 ? AUXWRT =$C005 ? BASIC =$E000 ? CDRV =$11 CH =$24 CMD_FORMAT=$04 CMD_READ=$01 CMD_WRITE=$02 CONTRLP =$B100 COUT =$FDED ? COUT1 =$FDF0 ? CSLT =$10 ? CSWH =$37 ? CSWL =$36 CTL_DO_MOVE=$B523 CTL_DRVCOUNT=$B574 CTL_EDDREAD=$B560 CTL_EDDWRITE=$B566 CTL_ENDTRK=$B576 CTL_NBLCFLG=$B578 CTL_PDD =$B573 CTL_PDS =$B571 CTL_POD =$B572 CTL_POS =$B570 CTL_SIDE=$B57A CTL_STARTRK=$B575 CTL_STEP=$B577 CTL_SYNCFLG=$B579 CTL_TRACK=$B57B CTL_VAR1=$B56D CTL_VAR2=$B56E CTL_VAR3=$B56F CTL_XCH1=$B539 CTRK =$12 CTRKD =$B287 CTRKO =$B286 CV =$25 ? CWRK =$13 ? DCF =$14 DRVCOUNT=$B285 ENDTRK =$B289 ERSBTM =$1610 H7800 =$7800 H9400 =$9400 ? HC088 =$C088 ? HC089 =$C089 ? HC08A =$C08A ? HC08B =$C08B ? HC08C =$C08C ? HC08D =$C08D ? HC08E =$C08E ? HC08F =$C08F ? HC0EC =$C0EC ? HDCF =$18 ? HHXH =$1A ? HHXL =$19 ? HIRES =$C057 ? HISCR =$C055 HOME =$FC58 ? HXF =$15 ? HXH =$17 ? HXL =$16 KEY =$C000 ? LDCF =$1B ? LHXH =$1D ? LHXL =$1C ? LOWSCR =$C054 LTC =$B230 ? MAINREAD=$C002 ? MAINWRT =$C004 ? MIXCLR =$C052 NBLCFLG =$B28D ? OLDRST =$FF59 PARMBUFSV=$2500 PARMS =$B300 PDD =$B283 PDS =$B282 ? PHASEOFF=$C080 POD =$B281 POS =$B280 ? ROM =$C081 ? ROM_VERSION=$FBB3 RWTS: =$BD00 RWTS_CMDCODE=$B7F4 RWTS_DNUM=$B7EA RWTS_SNUM=$B7ED RWTS_SNUM16=$B7E9 RWTS_TABLE=$B7E8 RWTS_TNUM=$B7EC RWTS_USRBUF=$B7F0 RWTS_VOLEXPT=$B7EB ? SAH =$0D ? SAL =$0C SBS_BAD =$1D65 SBS_BAD1=$1D73 SBS_BAD2=$1D81 SBS_BTBB1=$1D29 SBS_BUILDTBB=$1D26 SBS_CHKDSK=$1D52 ? SBS_CHOOSE=$1FAD SBS_CHTXT=$2021 SBS_CLMID=$1D4A SBS_DOPACK=$1E34 SBS_DOTRACK=$1EA7 SBS_DOUNPACK=$1E13 SBS_DSKCMP=$1FA8 SBS_GETKEY=$2172 SBS_GOCHKDSK=$1F0A SBS_GOOD=$1DC5 SBS_H1EC5=$1EC5 SBS_H1ECA=$1ECA SBS_H1EE7=$1EE7 SBS_H1F30=$1F30 SBS_H1F33=$1F33 SBS_H1F4E=$1F4E SBS_H2266=$2266 SBS_H226C=$226C ? SBS_H2281=$2281 ? SBS_INIT=$21A4 SBS_INITEXT=$20CB SBS_MERGE=$2236 SBS_PAKTXT=$20F0 SBS_PARMTXT=$2088 SBS_PUP =$1D16 SBS_RILDON=$1FA7 SBS_RPARM=$1F9E SBS_RST_EDD=$1F0D SBS_RWPROG=$1E55 SBS_RWTS=$1DC8 SBS_RWTSKEY=$1DEC SBS_SETBIT=$1D34 SBS_SETCRS=$222B SBS_SIDEA=$1DB0 ? SBS_SSTTRKR=$1DFF ? SBS_SSTTRKWV=$1E09 SBS_STRBIT=$1D3A SBS_TDO =$215F SBS_TRK35=$2254 SBS_TURNDSK=$217E SBS_WDSK=$1D8A SBS_XCHANGE=$1D00 ? SCHP =$0B ? SCVP =$0A ? SETKBD =$FE89 ? SETVID =$FE93 ? SPKR =$C030 STARTRK =$B288 STEP =$B28A STROBE =$C010 SYNCFLG =$B28C TRACK =$B28B ? TXTCLR =$C050 ? TXTSET =$C051 ? VMODE =$20 VTAB =$FC22 ? W1H =$01 ? W1L =$00 ? W2H =$03 ? W2L =$02 ? W3H =$05 ? W3L =$04 ? W4H =$07 ? W4L =$06 ? W5H =$09 ? W5L =$08 WNDTOP =$22 ? WZPAGE1 =$0E ? WZPAGE2 =$0F Symbol table - numerical order: ? W1L =$00 ? W1H =$01 CMD_READ=$01 ? W2L =$02 CMD_WRITE=$02 ? W2H =$03 ? W3L =$04 CMD_FORMAT=$04 ? W3H =$05 ? W4L =$06 ? W4H =$07 ? W5L =$08 ? W5H =$09 ? SCVP =$0A ? SCHP =$0B ? SAL =$0C ? SAH =$0D ? WZPAGE1 =$0E ? WZPAGE2 =$0F ? CSLT =$10 ? CDRV =$11 CTRK =$12 ? CWRK =$13 ? DCF =$14 ? HXF =$15 ? HXL =$16 ? HXH =$17 ? HDCF =$18 ? HHXL =$19 ? HHXH =$1A ? LDCF =$1B ? LHXL =$1C ? LHXH =$1D ? VMODE =$20 WNDTOP =$22 CH =$24 CV =$25 ? CSWL =$36 ? CSWH =$37 ERSBTM =$1610 SBS_XCHANGE=$1D00 SBS_PUP =$1D16 SBS_BUILDTBB=$1D26 SBS_BTBB1=$1D29 SBS_SETBIT=$1D34 SBS_STRBIT=$1D3A SBS_CLMID=$1D4A SBS_CHKDSK=$1D52 SBS_BAD =$1D65 SBS_BAD1=$1D73 SBS_BAD2=$1D81 SBS_WDSK=$1D8A SBS_SIDEA=$1DB0 SBS_GOOD=$1DC5 SBS_RWTS=$1DC8 SBS_RWTSKEY=$1DEC ? SBS_SSTTRKR=$1DFF ? SBS_SSTTRKWV=$1E09 SBS_DOUNPACK=$1E13 SBS_DOPACK=$1E34 SBS_RWPROG=$1E55 SBS_DOTRACK=$1EA7 SBS_H1EC5=$1EC5 SBS_H1ECA=$1ECA SBS_H1EE7=$1EE7 SBS_GOCHKDSK=$1F0A SBS_RST_EDD=$1F0D SBS_H1F30=$1F30 SBS_H1F33=$1F33 SBS_H1F4E=$1F4E SBS_RPARM=$1F9E SBS_RILDON=$1FA7 SBS_DSKCMP=$1FA8 ? SBS_CHOOSE=$1FAD SBS_CHTXT=$2021 SBS_PARMTXT=$2088 SBS_INITEXT=$20CB SBS_PAKTXT=$20F0 SBS_TDO =$215F SBS_GETKEY=$2172 SBS_TURNDSK=$217E ? SBS_INIT=$21A4 SBS_SETCRS=$222B SBS_MERGE=$2236 SBS_TRK35=$2254 SBS_H2266=$2266 SBS_H226C=$226C ? SBS_H2281=$2281 PARMBUFSV=$2500 H7800 =$7800 H9400 =$9400 CONTRLP =$B100 LTC =$B230 POS =$B280 POD =$B281 PDS =$B282 PDD =$B283 DRVCOUNT=$B285 CTRKO =$B286 CTRKD =$B287 STARTRK =$B288 ENDTRK =$B289 STEP =$B28A TRACK =$B28B SYNCFLG =$B28C NBLCFLG =$B28D PARMS =$B300 CTL_DO_MOVE=$B523 CTL_XCH1=$B539 CTL_EDDREAD=$B560 CTL_EDDWRITE=$B566 CTL_VAR1=$B56D CTL_VAR2=$B56E CTL_VAR3=$B56F CTL_POS =$B570 CTL_PDS =$B571 CTL_POD =$B572 CTL_PDD =$B573 CTL_DRVCOUNT=$B574 CTL_STARTRK=$B575 CTL_ENDTRK=$B576 CTL_STEP=$B577 CTL_NBLCFLG=$B578 CTL_SYNCFLG=$B579 CTL_SIDE=$B57A CTL_TRACK=$B57B RWTS_TABLE=$B7E8 RWTS_SNUM16=$B7E9 RWTS_DNUM=$B7EA RWTS_VOLEXPT=$B7EB RWTS_TNUM=$B7EC RWTS_SNUM=$B7ED RWTS_USRBUF=$B7F0 RWTS_CMDCODE=$B7F4 ARMV =$B87D RWTS: =$BD00 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