From 6e37a8c482e2a7f6341a2a1e8412981fdd61df41 Mon Sep 17 00:00:00 2001 From: Florian Reitz Date: Sat, 26 Aug 2017 13:07:42 +0200 Subject: [PATCH] Code updated for Merlin32 --- AppleIISd.bin | Bin 971 -> 975 bytes AppleIISd.lst | 1467 +++++++++++++++++++++++-------------------------- AppleIISd.s | 974 ++++++++++++++++---------------- make.bat | 5 + 4 files changed, 1155 insertions(+), 1291 deletions(-) create mode 100644 make.bat diff --git a/AppleIISd.bin b/AppleIISd.bin index 25b1be9a892ec936dc229ba374c59f0fd2d5f6b8..c5d1d067b37739d783427dde696b909b2b3bbec6 100644 GIT binary patch delta 13 VcmX@jex7~8pNR`tHvT!!1OPAY2Iv3) delta 10 RcmX@lewuy4pG}PCnE)G~1i1hJ diff --git a/AppleIISd.lst b/AppleIISd.lst index 5ec259a..3da73db 100644 --- a/AppleIISd.lst +++ b/AppleIISd.lst @@ -1,790 +1,677 @@ - 1 ******************************** - 2 * - 3 * Apple][Sd Firmware - 4 * Version 0.5 - 5 * - 6 * (c) Florian Reitz, 2017 - 7 * - 8 * X register usually contains SLOT16 - 9 * Y register is used for counting or SLOT - 10 * - 11 ******************************** - 12 - 13-AUG-17 13:35 - 14 - 15 XC ; enable 65C02 code - 16 DEBUG = 0 - 17 DO DEBUG - 18 ORG $8000 - 19 ELSE - 20 ORG $C800 ; Expansion ROM - 21 FIN - 22 - 23 * Memory defines - 24 - 25 SLOT16 = $2B ; $s0 -> slot * 16 - 26 WORK = $3C - 27 SLOT = $3D ; $0s - 28 CMDLO = $40 - 29 CMDHI = $41 - 30 - 31 CURSLOT = $07F8 ; $Cs - 32 DATA = $C080 - 33 CTRL = DATA+1 - 34 DIV = DATA+2 - 35 SS = DATA+3 - 36 R30 = $0478 - 37 R31 = $04F8 - 38 R32 = $0578 - 39 R33 = $05F8 - 40 INITED = $0678 - 41 - 42 * Constants - 43 - 44 SSNONE = $0F - 45 SS0 = $0E - 46 DUMMY = $FF - 47 - 48 - 49 ******************************** - 50 * - 51 * Install SD card driver - 52 * - 53 ******************************** - 54 - 55 * signature bytes - 56 -C800: A2 20 57 LDX #$20 -C802: A0 00 58 LDY #$00 -C804: A2 03 59 LDX #$03 - ===== Page 2 ===== - -C806: 86 3C 60 STX WORK - 61 - 62 * find slot nr - 63 - 64 DO DEBUG - 65 LDA #$04 - 66 STA SLOT - 67 LDA #$C4 - 68 STA CURSLOT - 69 LDA #$40 - 70 STA SLOT16 - 71 ELSE -C808: 20 58 FF 72 JSR $FF58 -C80B: BA 73 TSX -C80C: BD 00 01 74 LDA $0100,X -C80F: 8D F8 07 75 STA CURSLOT ; $Cs -C812: 29 0F 76 AND #$0F -C814: 85 3D 77 STA SLOT ; $0s -C816: 0A 78 ASL A -C817: 0A 79 ASL A -C818: 0A 80 ASL A -C819: 0A 81 ASL A -C81A: 85 2B 82 STA SLOT16 ; $s0 - 83 FIN -C81C: AA 84 TAX ; X holds now SLOT16 - 85 -C81D: 2C FF CF 86 BIT $CFFF -C820: 20 00 C9 87 JSR INIT - 88 - 89 DO 0 - 90 * - 91 * TODO: check for init error - 92 * - 93 - 94 * see if slot has a driver already - 95 - 96 LDX $BF31 ; get devcnt - 97 INSLP LDA $BF32,X ; get a devnum - 98 AND #$70 ; isolate slot - 99 CMP SLOT16 ; slot? - 100 BEQ INSOUT ; yes, skip it - 101 DEX - 102 BPL INSLP ; keep up the search - 103 - 104 * restore the devnum to the list - 105 - 106 LDX $BF31 ; get devcnt again - 107 CPX #$0D ; device table full? - 108 BNE INSLP2 - 109 - 110 JSR $FF3A ; bell - 111 JMP INSOUT ; do something! - 112 - 113 INSLP2 LDA $BF32-1,X ; move all entries down - 114 STA $BF32,X ; to make room at front - 115 DEX ; for a new entry - 116 BNE INSLP2 - ===== Page 3 ===== - - 117 LDA #$04 ; ProFile type device - 118 ORA SLOT16 - 119 STA $BF32 ; slot, drive 1 at top of list - 120 INC $BF31 ; update devcnt - 121 - 122 * now insert the device driver vector - 123 - 124 LDA SLOT - 125 ASL - 126 TAX - 127 LDA #DRIVER - 131 ELSE - 132 LDA CURSLOT - 133 FIN - 134 STA $BF11,X - 135 - 136 INSOUT RTS - 137 FIN - 138 -C823: A9 01 139 BOOT LDA #$01 -C825: 85 42 140 STA $42 ; load command -C827: A5 2B 141 LDA SLOT16 -C829: AA 142 TAX -C82A: 85 43 143 STA $43 ; slot number -C82C: 64 44 144 STZ $44 ; buffer lo -C82E: A9 08 145 LDA #$08 -C830: 85 45 146 STA $45 ; buffer hi -C832: 64 46 147 STZ $46 ; block lo -C834: 64 47 148 STZ $47 ; block hi -C836: 2C FF CF 149 BIT $CFFF -C839: 20 B7 CA 150 JSR READ ; call driver -C83C: 4C 01 08 151 JMP $801 ; goto bootloader - 152 - 153 - 154 ******************************** - 155 * - 156 * Jump table - 157 * - 158 ******************************** - 159 -C83F: D8 160 DRIVER CLD - 161 DO DEBUG - 162 LDA #$04 - 163 STA SLOT - 164 LDA #$C4 - 165 STA CURSLOT - 166 LDA #$40 - 167 STA SLOT16 - 168 ELSE -C840: 20 58 FF 169 JSR $FF58 ; find slot nr -C843: BA 170 TSX -C844: BD 00 01 171 LDA $0100,X -C847: 8D F8 07 172 STA CURSLOT ; $Cs -C84A: 29 0F 173 AND #$0F - ===== Page 4 ===== - -C84C: 85 3D 174 STA SLOT ; $0s -C84E: 0A 175 ASL A -C84F: 0A 176 ASL A -C850: 0A 177 ASL A -C851: 0A 178 ASL A -C852: 85 2B 179 STA SLOT16 ; $s0 - 180 FIN -C854: AA 181 TAX ; X holds now SLOT16 - 182 -C855: 2C FF CF 183 BIT $CFFF -C858: A4 3D 184 LDY SLOT -C85A: B9 78 06 185 LDA INITED,Y ; check for init -C85D: C9 01 186 CMP #$01 -C85F: 90 22 187 BCC :INIT -C861: A5 42 188 :CMD LDA $42 ; get command -C863: C9 00 189 CMP #$00 -C865: F0 10 190 BEQ :STATUS -C867: C9 01 191 CMP #$01 -C869: F0 0F 192 BEQ :READ -C86B: C9 02 193 CMP #$02 -C86D: F0 0E 194 BEQ :WRITE -C86F: C9 03 195 CMP #$03 -C871: F0 0D 196 BEQ :FORMAT -C873: 38 197 SEC ; unknown command -C874: A9 01 198 LDA #$01 -C876: 60 199 RTS - 200 -C877: 4C AF CA 201 :STATUS JMP STATUS -C87A: 4C B7 CA 202 :READ JMP READ -C87D: 4C 0D CB 203 :WRITE JMP WRITE -C880: 4C 9D CB 204 :FORMAT JMP FORMAT -C883: 20 00 C9 205 :INIT JSR INIT -C886: 80 D9 206 BRA :CMD - 207 - 208 * Signature bytes - 209 -C888: 00 00 00 210 DS \ ; fill with zeroes -C88B: 00 00 00 00 -C88F: 00 00 00 00 -C893: 00 00 00 00 -C897: 00 00 00 00 -C89B: 00 00 00 00 -C89F: 00 00 00 00 -C8A3: 00 00 00 00 -C8A7: 00 00 00 00 -C8AB: 00 00 00 00 -C8AF: 00 00 00 00 -C8B3: 00 00 00 00 -C8B7: 00 00 00 00 -C8BB: 00 00 00 00 -C8BF: 00 00 00 00 -C8C3: 00 00 00 00 -C8C7: 00 00 00 00 -C8CB: 00 00 00 00 -C8CF: 00 00 00 00 -C8D3: 00 00 00 00 -C8D7: 00 00 00 00 - ===== Page 5 ===== - -C8DB: 00 00 00 00 -C8DF: 00 00 00 00 -C8E3: 00 00 00 00 -C8E7: 00 00 00 00 -C8EB: 00 00 00 00 -C8EF: 00 00 00 00 -C8F3: 00 00 00 00 -C8F7: 00 00 00 00 -C8FB: 00 00 00 00 -C8FF: 00 - 211 DS -4 ; locate to $C8FC -C8FC: FF FF 212 DW $FFFF ; 65535 blocks -C8FE: 47 213 DB $47 ; Status bits -C8FF: 3F 214 DB #CMD0 -C92A: 85 41 250 STA CMDHI -C92C: 20 DE C9 251 JSR CMD -C92F: 20 F2 C9 252 JSR GETR1 ; get response -C932: C9 01 253 CMP #$01 -C934: D0 39 254 BNE :ERROR1 ; error! - 255 -C936: A9 AD 256 LDA #CMD8 -C93C: 85 41 259 STA CMDHI -C93E: 20 DE C9 260 JSR CMD -C941: 20 0D CA 261 JSR GETR3 -C944: C9 01 262 CMP #$01 -C946: D0 2A 263 BNE :SDV1 ; may be SD Ver. 1 - 264 - 265 * check for $01aa match! -C948: A9 B9 266 :SDV2 LDA #CMD55 -C94E: 85 41 269 STA CMDHI -C950: 20 DE C9 270 JSR CMD -C953: 20 F2 C9 271 JSR GETR1 -C956: A9 BF 272 LDA #ACMD4140 -C95C: 85 41 275 STA CMDHI -C95E: 20 DE C9 276 JSR CMD -C961: 20 F2 C9 277 JSR GETR1 -C964: C9 01 278 CMP #$01 -C966: F0 E0 279 BEQ :SDV2 ; wait for ready -C968: C9 00 280 CMP #$00 -C96A: D0 03 281 BNE :ERROR1 ; error! - 282 * send CMD58 - 283 * SD Ver. 2 initialized! -C96C: 4C AC C9 284 JMP :BLOCKSZ - 285 -C96F: 4C CF C9 286 :ERROR1 JMP :IOERROR ; needed for far jump - 287 -C972: A9 B9 288 :SDV1 LDA #CMD55 -C978: 85 41 291 STA CMDHI -C97A: 20 DE C9 292 JSR CMD ; ignore response -C97D: A9 C5 293 LDA #ACMD410 -C983: 85 41 296 STA CMDHI -C985: 20 DE C9 297 JSR CMD -C988: 20 F2 C9 298 JSR GETR1 -C98B: C9 01 299 CMP #$01 -C98D: F0 E3 300 BEQ :SDV1 ; wait for ready -C98F: C9 00 301 CMP #$00 -C991: D0 03 302 BNE :MMC ; may be MMC card - 303 * SD Ver. 1 initialized! -C993: 4C AC C9 304 JMP :BLOCKSZ - 305 -C996: A9 A7 306 :MMC LDA #CMD1 -C99C: 85 41 309 STA CMDHI -C99E: 20 DE C9 310 :LOOP1 JSR CMD -C9A1: 20 F2 C9 311 JSR GETR1 -C9A4: C9 01 312 CMP #$01 -C9A6: F0 F6 313 BEQ :LOOP1 ; wait for ready -C9A8: C9 00 314 CMP #$00 - ===== Page 7 ===== - -C9AA: D0 23 315 BNE :IOERROR ; error! - 316 * MMC Ver. 3 initialized! - 317 -C9AC: A9 B3 318 :BLOCKSZ LDA #CMD16 -C9B2: 85 41 321 STA CMDHI -C9B4: 20 DE C9 322 JSR CMD -C9B7: 20 F2 C9 323 JSR GETR1 -C9BA: C9 00 324 CMP #$00 -C9BC: D0 11 325 BNE :IOERROR ; error! - 326 -C9BE: A4 3D 327 :END LDY SLOT ; all ok -C9C0: A9 01 328 LDA #$01 -C9C2: 99 78 06 329 STA INITED,Y ; initialized -C9C5: 18 330 CLC -C9C6: A0 00 331 LDY #0 -C9C8: 90 08 332 BCC :END1 -C9CA: 38 333 :CDERROR SEC -C9CB: A0 28 334 LDY #$28 ; no card error -C9CD: B0 03 335 BCS :END1 -C9CF: 38 336 :IOERROR SEC -C9D0: A0 27 337 LDY #$27 ; init error -C9D2: A9 0F 338 :END1 LDA #SSNONE ; deselect card -C9D4: 9D 83 C0 339 STA SS,X -C9D7: A9 00 340 LDA #0 ; set div to 2 -C9D9: 9D 82 C0 341 STA DIV,X -C9DC: 98 342 TYA ; retval in A -C9DD: 60 343 RTS - 344 - 345 - 346 ******************************** - 347 * - 348 * Send SD command - 349 * Call with command in CMDHI and CMDLO - 350 * - 351 ******************************** - 352 -C9DE: 5A 353 CMD PHY -C9DF: A0 00 354 LDY #0 -C9E1: B1 40 355 :LOOP LDA (CMDLO),Y -C9E3: 9D 80 C0 356 STA DATA,X -C9E6: 3C 81 C0 357 :WAIT BIT CTRL,X ; TC is in N -C9E9: 10 FB 358 BPL :WAIT -C9EB: C8 359 INY -C9EC: C0 06 360 CPY #6 -C9EE: 90 F1 361 BCC :LOOP -C9F0: 7A 362 PLY -C9F1: 60 363 RTS - 364 - 365 - 366 ******************************** - 367 * - 368 * Get R1 - 369 * R1 is in A - 370 * - 371 ******************************** - ===== Page 8 ===== - - 372 -C9F2: A9 FF 373 GETR1 LDA #DUMMY -C9F4: 9D 80 C0 374 STA DATA,X -C9F7: 3C 81 C0 375 :WAIT BIT CTRL,X -C9FA: 10 FB 376 BPL :WAIT -C9FC: BD 80 C0 377 LDA DATA,X ; get response -C9FF: 85 3C 378 STA WORK ; save R1 -CA01: 29 80 379 AND #$80 -CA03: D0 ED 380 BNE GETR1 ; wait for MSB=0 -CA05: A9 FF 381 LDA #DUMMY -CA07: 9D 80 C0 382 STA DATA,X ; send another dummy -CA0A: A5 3C 383 LDA WORK ; restore R1 -CA0C: 60 384 RTS - 385 - 386 - 387 ******************************** - 388 * - 389 * Get R3 - 390 * R1 is in A - 391 * R3 is in scratchpad ram - 392 * - 393 ******************************** - 394 -CA0D: 20 F2 C9 395 GETR3 JSR GETR1 ; get R1 first -CA10: 48 396 PHA ; save R1 -CA11: 5A 397 PHY ; save Y -CA12: A0 04 398 LDY #04 ; load counter -CA14: A9 FF 399 :LOOP LDA #DUMMY ; send dummy -CA16: 9D 80 C0 400 STA DATA,X -CA19: 3C 81 C0 401 :WAIT BIT CTRL,X -CA1C: 10 FB 402 BPL :WAIT -CA1E: BD 80 C0 403 LDA DATA,X -CA21: 48 404 PHA -CA22: 88 405 DEY -CA23: D0 EF 406 BNE :LOOP ; do 4 times -CA25: A4 3D 407 LDY SLOT -CA27: 68 408 PLA -CA28: 99 F8 05 409 STA R33,Y ; save R3 -CA2B: 68 410 PLA -CA2C: 99 78 05 411 STA R32,Y -CA2F: 68 412 PLA -CA30: 99 F8 04 413 STA R31,Y -CA33: 68 414 PLA -CA34: 99 78 04 415 STA R30,Y -CA37: 7A 416 PLY ; restore Y -CA38: A9 FF 417 LDA #DUMMY -CA3A: 9D 80 C0 418 STA DATA,X ; send another dummy -CA3D: 68 419 PLA ; restore R1 -CA3E: 60 420 RTS - 421 - 422 - 423 ******************************** - 424 * - 425 * Calculate block address - 426 * Block no is in $46-47 - 427 * Address is in R30-R33 - 428 * - ===== Page 9 ===== - - 429 ******************************** - 430 -CA3F: DA 431 BLOCK PHX ; save X -CA40: 5A 432 PHY ; save Y -CA41: A6 3D 433 LDX SLOT -CA43: A5 46 434 LDA $46 ; store block num -CA45: 9D F8 05 435 STA R33,X ; in R30-R33 -CA48: A5 47 436 LDA $47 -CA4A: 9D 78 05 437 STA R32,X -CA4D: A9 00 438 LDA #0 -CA4F: 9D F8 04 439 STA R31,X -CA52: 9D 78 04 440 STA R30,X - 441 -CA55: A0 09 442 LDY #9 ; ASL can't be used with Y -CA57: 1E F8 05 443 :LOOP ASL R33,X ; mul block num -CA5A: 3E 78 05 444 ROL R32,X ; by 512 to get -CA5D: 3E F8 04 445 ROL R31,X ; real address -CA60: 3E 78 04 446 ROL R30,X -CA63: 88 447 DEY -CA64: D0 F1 448 BNE :LOOP -CA66: 7A 449 PLY ; restore Y -CA67: FA 450 PLX ; restore X -CA68: 60 451 RTS - 452 - 453 - 454 ******************************** - 455 * - 456 * Send SD command - 457 * Cmd is in A - 458 * - 459 ******************************** - 460 -CA69: 5A 461 COMMAND PHY ; save Y -CA6A: A4 3D 462 LDY SLOT -CA6C: 9D 80 C0 463 STA DATA,X ; send command -CA6F: 3C 81 C0 464 :WAIT BIT CTRL,X -CA72: 10 FB 465 BPL :WAIT -CA74: B9 78 04 466 :ARG LDA R30,Y ; get arg from R30 on -CA77: 9D 80 C0 467 STA DATA,X -CA7A: 3C 81 C0 468 :WAIT1 BIT CTRL,X -CA7D: 10 FB 469 BPL :WAIT1 -CA7F: B9 F8 04 470 LDA R31,Y -CA82: 9D 80 C0 471 STA DATA,X -CA85: 3C 81 C0 472 :WAIT11 BIT CTRL,X -CA88: 10 FB 473 BPL :WAIT11 -CA8A: B9 78 05 474 LDA R32,Y -CA8D: 9D 80 C0 475 STA DATA,X -CA90: 3C 81 C0 476 :WAIT12 BIT CTRL,X -CA93: 10 FB 477 BPL :WAIT12 -CA95: B9 F8 05 478 LDA R33,Y -CA98: 9D 80 C0 479 STA DATA,X -CA9B: 3C 81 C0 480 :WAIT13 BIT CTRL,X -CA9E: 10 FB 481 BPL :WAIT13 -CAA0: A9 FF 482 LDA #DUMMY -CAA2: 9D 80 C0 483 STA DATA,X ; dummy crc -CAA5: 3C 81 C0 484 :WAIT2 BIT CTRL,X -CAA8: 10 FB 485 BPL :WAIT2 - ===== Page 10 ===== - -CAAA: 20 F2 C9 486 JSR GETR1 -CAAD: 7A 487 PLY ; restore Y -CAAE: 60 488 RTS - 489 - 490 - 491 ******************************** - 492 * - 493 * Status request - 494 * $43 Unit number DSSS000 - 495 * $44-45 Unused - 496 * $46-47 Unused - 497 * - 498 * C Clear - No error - 499 * Set - Error - 500 * A $00 - No error - 501 * $27 - I/O error - 502 * $28 - No card inserted / no init - 503 * $2B - Card write protected - 504 * x - Blocks avail (low byte) - 505 * y - Blocks avail (high byte) - 506 * - 507 ******************************** - 508 -CAAF: 18 509 STATUS CLC ; no error -CAB0: A9 00 510 LDA #0 -CAB2: A2 FF 511 LDX #$FF ; 32 MB partition -CAB4: A0 FF 512 LDY #$FF -CAB6: 60 513 RTS - 514 - 515 * TODO: check for card detect and write protect! - 516 - 517 - 518 ******************************** - 519 * - 520 * Read 512 byte block - 521 * $43 Unit number DSSS0000 - 522 * $44-45 Address (LO/HI) of buffer - 523 * $46-47 Block number (LO/HI) - 524 * - 525 * C Clear - No error - 526 * Set - Error - 527 * A $00 - No error - 528 * $27 - Bad block number - 529 * $28 - No card inserted - 530 * - 531 ******************************** - 532 - 533 * TODO: check for card detect! - 534 -CAB7: 20 3F CA 535 READ JSR BLOCK ; calc block address - 536 -CABA: A9 0E 537 LDA #SS0 ; enable /CS -CABC: 9D 83 C0 538 STA SS,X -CABF: A9 51 539 LDA #$51 ; send CMD17 -CAC1: 20 69 CA 540 JSR COMMAND ; send command - 541 -CAC4: A9 FF 542 :GETTOK LDA #DUMMY ; get data token - ===== Page 11 ===== - -CAC6: 9D 80 C0 543 STA DATA,X -CAC9: 3C 81 C0 544 :WAIT BIT CTRL,X -CACC: 10 FB 545 BPL :WAIT -CACE: BD 80 C0 546 LDA DATA,X ; get response - 547 * - 548 * TODO: check for error! - 549 * -CAD1: C9 FE 550 CMP #$FE -CAD3: D0 EF 551 BNE :GETTOK ; wait for $FE - 552 -CAD5: A0 02 553 LDY #2 ; read data from card -CAD7: 64 3C 554 :LOOPY STZ WORK -CAD9: A9 FF 555 :LOOPW LDA #DUMMY -CADB: 9D 80 C0 556 STA DATA,X -CADE: 3C 81 C0 557 :WAIT1 BIT CTRL,X -CAE1: 10 FB 558 BPL :WAIT1 -CAE3: BD 80 C0 559 LDA DATA,X -CAE6: 92 44 560 STA ($44) -CAE8: E6 44 561 INC $44 -CAEA: D0 02 562 BNE :INW -CAEC: E6 45 563 INC $45 ; inc msb on page boundary -CAEE: E6 3C 564 :INW INC WORK -CAF0: D0 E7 565 BNE :LOOPW -CAF2: 88 566 DEY -CAF3: D0 E2 567 BNE :LOOPY - 568 -CAF5: A0 02 569 LDY #2 -CAF7: A9 FF 570 :CRC LDA #DUMMY ; read 2 bytes crc -CAF9: 9D 80 C0 571 STA DATA,X ; and ignore -CAFC: 3C 81 C0 572 :WAIT2 BIT CTRL,X -CAFF: 10 FB 573 BPL :WAIT2 -CB01: 88 574 DEY -CB02: D0 F3 575 BNE :CRC - 576 -CB04: A9 0F 577 LDA #SSNONE -CB06: 9D 83 C0 578 STA SS,X ; disable /CS -CB09: 18 579 CLC ; no error -CB0A: A9 00 580 LDA #$00 -CB0C: 60 581 RTS - 582 - 583 - 584 ******************************** - 585 * - 586 * Write 512 byte block - 587 * $43 Unit number DSSS000 - 588 * $44-45 Address (LO/HI) of buffer - 589 * $46-47 Block number (LO/HI) - 590 * - 591 * C Clear - No error - 592 * Set - Error - 593 * A $00 - No error - 594 * $27 - I/O error or bad block number - 595 * $28 - No card inserted - 596 * $2B - Card write protected - 597 * - 598 ******************************** - 599 - ===== Page 12 ===== - - 600 * TODO: check for card detect and write protect! - 601 -CB0D: 20 3F CA 602 WRITE JSR BLOCK ; calc block address - 603 -CB10: A9 0E 604 LDA #SS0 ; enable /CS -CB12: 9D 83 C0 605 STA SS,X -CB15: A9 58 606 LDA #$58 ; send CMD24 -CB17: 20 69 CA 607 JSR COMMAND ; send command - 608 -CB1A: A9 FF 609 LDA #DUMMY -CB1C: 9D 80 C0 610 STA DATA,X ; send dummy -CB1F: 3C 81 C0 611 :WAIT1 BIT CTRL,X -CB22: 10 FB 612 BPL :WAIT1 -CB24: A9 FE 613 LDA #$FE -CB26: 9D 80 C0 614 STA DATA,X ; send data token -CB29: 3C 81 C0 615 :WAIT2 BIT CTRL,X -CB2C: 10 FB 616 BPL :WAIT2 - 617 -CB2E: A0 02 618 LDY #2 ; send data to card -CB30: 64 3C 619 :LOOPY STZ WORK -CB32: B2 44 620 :LOOPW LDA ($44) -CB34: 9D 80 C0 621 STA DATA,X -CB37: 3C 81 C0 622 :WAIT3 BIT CTRL,X -CB3A: 10 FB 623 BPL :WAIT3 -CB3C: E6 44 624 INC $44 -CB3E: D0 02 625 BNE :INW -CB40: E6 45 626 INC $45 ; inc msb on page boundary -CB42: E6 3C 627 :INW INC WORK -CB44: D0 EC 628 BNE :LOOPW -CB46: 88 629 DEY -CB47: D0 E7 630 BNE :LOOPY - 631 -CB49: A0 02 632 LDY #2 ; send 2 dummy crc bytes -CB4B: 9D 80 C0 633 :CRC STA DATA,X -CB4E: 3C 81 C0 634 :WAIT4 BIT CTRL,X -CB51: 10 FB 635 BPL :WAIT4 -CB53: 88 636 DEY -CB54: D0 F5 637 BNE :CRC - 638 -CB56: A9 FF 639 LDA #DUMMY ; get data response -CB58: 9D 80 C0 640 STA DATA,X -CB5B: 3C 81 C0 641 :WAIT5 BIT CTRL,X -CB5E: 10 FB 642 BPL :WAIT5 -CB60: BD 80 C0 643 LDA DATA,X -CB63: 29 1F 644 AND #$1F -CB65: C9 05 645 CMP #$05 -CB67: D0 1A 646 BNE :ERROR ; check for write error - 647 -CB69: A9 FF 648 :WAIT6 LDA #DUMMY ; wait for write cycle -CB6B: 9D 80 C0 649 STA DATA,X ; to complete -CB6E: 3C 81 C0 650 :WAIT61 BIT CTRL,X -CB71: 10 FB 651 BPL :WAIT61 -CB73: BD 80 C0 652 LDA DATA,X -CB76: C9 00 653 CMP #$00 -CB78: F0 EF 654 BEQ :WAIT6 - 655 -CB7A: A9 0F 656 LDA #SSNONE ; disable /CS - ===== Page 13 ===== - -CB7C: 9D 83 C0 657 STA SS,X -CB7F: 18 658 CLC ; no error -CB80: A9 00 659 LDA #0 -CB82: 60 660 RTS - 661 - 662 :ERROR -CB83: A9 FF 663 :WAIT7 LDA #DUMMY ; wait for write cycle -CB85: 9D 80 C0 664 STA DATA,X ; to complete -CB88: 3C 81 C0 665 :WAIT71 BIT CTRL,X -CB8B: 10 FB 666 BPL :WAIT71 -CB8D: BD 80 C0 667 LDA DATA,X -CB90: C9 00 668 CMP #$00 -CB92: F0 EF 669 BEQ :WAIT7 -CB94: A9 0F 670 LDA #SSNONE -CB96: 9D 83 C0 671 STA SS,X ; disable /CS -CB99: 38 672 SEC ; an error occured -CB9A: A9 27 673 LDA #$27 -CB9C: 60 674 RTS - 675 - 676 - 677 ******************************** - 678 * - 679 * Format - 680 * not supported! - 681 * - 682 ******************************** - 683 -CB9D: 38 684 FORMAT SEC -CB9E: A9 01 685 LDA #$01 ; invalid command -CBA0: 60 686 RTS - 687 - 688 -CBA1: 40 00 00 689 CMD0 HEX 400000 -CBA4: 00 00 95 690 HEX 000095 -CBA7: 41 00 00 691 CMD1 HEX 410000 -CBAA: 00 00 F9 692 HEX 0000F9 -CBAD: 48 00 00 693 CMD8 HEX 480000 -CBB0: 01 AA 87 694 HEX 01AA87 -CBB3: 50 00 00 695 CMD16 HEX 500000 -CBB6: 02 00 FF 696 HEX 0200FF -CBB9: 77 00 00 697 CMD55 HEX 770000 -CBBC: 00 00 65 698 HEX 000065 -CBBF: 69 40 00 699 ACMD4140 HEX 694000 -CBC2: 00 00 77 700 HEX 000077 -CBC5: 69 00 00 701 ACMD410 HEX 690000 -CBC8: 00 00 FF 702 HEX 0000FF - - ---End assembly, 971 bytes, Errors: 0 - - -Symbol table - alphabetical order: - - ACMD410 =$CBC5 ACMD4140=$CBBF BLOCK =$CA3F ? BOOT =$C823 - CMD =$C9DE CMD0 =$CBA1 CMD1 =$CBA7 CMD16 =$CBB3 - CMD55 =$CBB9 CMD8 =$CBAD CMDHI =$41 CMDLO =$40 - COMMAND =$CA69 CTRL =$C081 CURSLOT =$07F8 DATA =$C080 - ===== Page 14 ===== - - DEBUG =$00 DIV =$C082 DRIVER =$C83F DUMMY =$FF - FORMAT =$CB9D GETR1 =$C9F2 GETR3 =$CA0D INIT =$C900 - INITED =$0678 R30 =$0478 R31 =$04F8 R32 =$0578 - R33 =$05F8 READ =$CAB7 SLOT =$3D SLOT16 =$2B - SS =$C083 SS0 =$0E SSNONE =$0F STATUS =$CAAF - WORK =$3C WRITE =$CB0D - - -Symbol table - numerical order: - - DEBUG =$00 SS0 =$0E SSNONE =$0F SLOT16 =$2B - WORK =$3C SLOT =$3D CMDLO =$40 CMDHI =$41 - DUMMY =$FF R30 =$0478 R31 =$04F8 R32 =$0578 - R33 =$05F8 INITED =$0678 CURSLOT =$07F8 DATA =$C080 - CTRL =$C081 DIV =$C082 SS =$C083 ? BOOT =$C823 - DRIVER =$C83F INIT =$C900 CMD =$C9DE GETR1 =$C9F2 - GETR3 =$CA0D BLOCK =$CA3F COMMAND =$CA69 STATUS =$CAAF - READ =$CAB7 WRITE =$CB0D FORMAT =$CB9D CMD0 =$CBA1 - CMD1 =$CBA7 CMD8 =$CBAD CMD16 =$CBB3 CMD55 =$CBB9 - ACMD4140=$CBBF ACMD410 =$CBC5 - \ No newline at end of file +------+-----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code +------+-----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + 1 | 1 AppleIISd.s 1 | Comment | 11 | | 0 | 00/8000 | ******************************** + 2 | 1 AppleIISd.s 2 | Comment | 11 | | 0 | 00/8000 | * + 3 | 1 AppleIISd.s 3 | Comment | 11 | | 0 | 00/8000 | * Apple][Sd Firmware + 4 | 1 AppleIISd.s 4 | Comment | 11 | | 0 | 00/8000 | * Version 0.5 + 5 | 1 AppleIISd.s 5 | Comment | 11 | | 0 | 00/8000 | * + 6 | 1 AppleIISd.s 6 | Comment | 11 | | 0 | 00/8000 | * (c) Florian Reitz, 2017 + 7 | 1 AppleIISd.s 7 | Comment | 11 | | 0 | 00/8000 | * + 8 | 1 AppleIISd.s 8 | Comment | 11 | | 0 | 00/8000 | * X register usually contains SLOT16 + 9 | 1 AppleIISd.s 9 | Comment | 11 | | 0 | 00/8000 | * Y register is used for counting or SLOT + 10 | 1 AppleIISd.s 10 | Comment | 11 | | 0 | 00/8000 | * + 11 | 1 AppleIISd.s 11 | Comment | 11 | | 0 | 00/8000 | ******************************** + 12 | 1 AppleIISd.s 12 | Empty | 11 | | 0 | 00/8000 | + 13 | 1 AppleIISd.s 13 | Directive | 11 | | 0 | 00/8000 | DAT + 14 | 1 AppleIISd.s 14 | Empty | 11 | | 0 | 00/8000 | + 15 | 1 AppleIISd.s 15 | Directive | 11 | | 0 | 00/8000 | XC ; enable 65C02 code + 16 | 1 AppleIISd.s 16 | Equivalence | 11 | | 0 | 00/8000 | DEBUG = 0 + 17 | 1 AppleIISd.s 17 | Directive | 11 | | 0 | 00/8000 | DO {0} + 18 | 1 AppleIISd.s 19 | Directive | 11 | | 0 | 00/8000 | ELSE + 19 | 1 AppleIISd.s 20 | Directive | 11 | | 0 | 00/8000 | ORG $C800 ; Expansion ROM + 20 | 1 AppleIISd.s 21 | Directive | 11 | | 0 | 00/C800 | FIN + 21 | 1 AppleIISd.s 22 | Empty | 11 | | 0 | 00/C800 | + 22 | 1 AppleIISd.s 23 | Comment | 11 | | 0 | 00/C800 | * Memory defines + 23 | 1 AppleIISd.s 24 | Empty | 11 | | 0 | 00/C800 | + 24 | 1 AppleIISd.s 25 | Equivalence | 11 | | 0 | 00/C800 | SLOT16 = $2B ; $s0 -> slot * 16 + 25 | 1 AppleIISd.s 26 | Equivalence | 11 | | 0 | 00/C800 | WORK = $3C + 26 | 1 AppleIISd.s 27 | Equivalence | 11 | | 0 | 00/C800 | SLOT = $3D ; $0s + 27 | 1 AppleIISd.s 28 | Equivalence | 11 | | 0 | 00/C800 | CMDLO = $40 + 28 | 1 AppleIISd.s 29 | Equivalence | 11 | | 0 | 00/C800 | CMDHI = $41 + 29 | 1 AppleIISd.s 30 | Empty | 11 | | 0 | 00/C800 | + 30 | 1 AppleIISd.s 31 | Equivalence | 11 | | 0 | 00/C800 | CURSLOT = $07F8 ; $Cs + 31 | 1 AppleIISd.s 32 | Equivalence | 11 | | 0 | 00/C800 | DATA = $C080 + 32 | 1 AppleIISd.s 33 | Equivalence | 11 | | 0 | 00/C800 | CTRL = {$C080}+1 + 33 | 1 AppleIISd.s 34 | Equivalence | 11 | | 0 | 00/C800 | DIV = {$C080}+2 + 34 | 1 AppleIISd.s 35 | Equivalence | 11 | | 0 | 00/C800 | SS = {$C080}+3 + 35 | 1 AppleIISd.s 36 | Equivalence | 11 | | 0 | 00/C800 | R30 = $0478 + 36 | 1 AppleIISd.s 37 | Equivalence | 11 | | 0 | 00/C800 | R31 = $04F8 + 37 | 1 AppleIISd.s 38 | Equivalence | 11 | | 0 | 00/C800 | R32 = $0578 + 38 | 1 AppleIISd.s 39 | Equivalence | 11 | | 0 | 00/C800 | R33 = $05F8 + 39 | 1 AppleIISd.s 40 | Equivalence | 11 | | 0 | 00/C800 | INITED = $0678 + 40 | 1 AppleIISd.s 41 | Empty | 11 | | 0 | 00/C800 | + 41 | 1 AppleIISd.s 42 | Comment | 11 | | 0 | 00/C800 | * Constants + 42 | 1 AppleIISd.s 43 | Empty | 11 | | 0 | 00/C800 | + 43 | 1 AppleIISd.s 44 | Equivalence | 11 | | 0 | 00/C800 | SSNONE = $0F + 44 | 1 AppleIISd.s 45 | Equivalence | 11 | | 0 | 00/C800 | SS0 = $0E + 45 | 1 AppleIISd.s 46 | Equivalence | 11 | | 0 | 00/C800 | DUMMY = $FF + 46 | 1 AppleIISd.s 47 | Empty | 11 | | 0 | 00/C800 | + 47 | 1 AppleIISd.s 48 | Empty | 11 | | 0 | 00/C800 | + 48 | 1 AppleIISd.s 49 | Comment | 11 | | 0 | 00/C800 | ******************************** + 49 | 1 AppleIISd.s 50 | Comment | 11 | | 0 | 00/C800 | * + 50 | 1 AppleIISd.s 51 | Comment | 11 | | 0 | 00/C800 | * Install SD card driver + 51 | 1 AppleIISd.s 52 | Comment | 11 | | 0 | 00/C800 | * + 52 | 1 AppleIISd.s 53 | Comment | 11 | | 0 | 00/C800 | ******************************** + 53 | 1 AppleIISd.s 54 | Empty | 11 | | 0 | 00/C800 | + 54 | 1 AppleIISd.s 55 | Comment | 11 | | 0 | 00/C800 | * signature bytes + 55 | 1 AppleIISd.s 56 | Empty | 11 | | 0 | 00/C800 | + 56 | 1 AppleIISd.s 57 | Code | 11 | | 2 | 00/C800 : A2 20 | LDX #$20 + 57 | 1 AppleIISd.s 58 | Code | 11 | | 2 | 00/C802 : A0 00 | LDY #$00 + 58 | 1 AppleIISd.s 59 | Code | 11 | | 2 | 00/C804 : A2 03 | LDX #$03 + 59 | 1 AppleIISd.s 60 | Code | 11 | | 2 | 00/C806 : 86 3C | STX {$3C} + 60 | 1 AppleIISd.s 61 | Empty | 11 | | 0 | 00/C808 | + 61 | 1 AppleIISd.s 62 | Comment | 11 | | 0 | 00/C808 | * find slot nr + 62 | 1 AppleIISd.s 63 | Empty | 11 | | 0 | 00/C808 | + 63 | 1 AppleIISd.s 64 | Directive | 11 | | 0 | 00/C808 | DO {0} + 64 | 1 AppleIISd.s 71 | Directive | 11 | | 0 | 00/C808 | ELSE + 65 | 1 AppleIISd.s 72 | Code | 11 | | 3 | 00/C808 : 20 58 FF | JSR $FF58 + 66 | 1 AppleIISd.s 73 | Code | 11 | | 1 | 00/C80B : BA | TSX + 67 | 1 AppleIISd.s 74 | Code | 11 | | 3 | 00/C80C : BD 00 01 | LDA $0100,X + 68 | 1 AppleIISd.s 75 | Code | 11 | | 3 | 00/C80F : 8D F8 07 | STA {$07F8} ; $Cs + 69 | 1 AppleIISd.s 76 | Code | 11 | | 2 | 00/C812 : 29 0F | AND #$0F + 70 | 1 AppleIISd.s 77 | Code | 11 | | 2 | 00/C814 : 85 3D | STA {$3D} ; $0s + 71 | 1 AppleIISd.s 78 | Code | 11 | | 1 | 00/C816 : 0A | ASL A + 72 | 1 AppleIISd.s 79 | Code | 11 | | 1 | 00/C817 : 0A | ASL A + 73 | 1 AppleIISd.s 80 | Code | 11 | | 1 | 00/C818 : 0A | ASL A + 74 | 1 AppleIISd.s 81 | Code | 11 | | 1 | 00/C819 : 0A | ASL A + 75 | 1 AppleIISd.s 82 | Code | 11 | | 2 | 00/C81A : 85 2B | STA {$2B} ; $s0 + 76 | 1 AppleIISd.s 83 | Directive | 11 | | 0 | 00/C81C | FIN + 77 | 1 AppleIISd.s 84 | Code | 11 | | 1 | 00/C81C : AA | TAX ; X holds now SLOT16 + 78 | 1 AppleIISd.s 85 | Empty | 11 | | 0 | 00/C81D | + 79 | 1 AppleIISd.s 86 | Code | 11 | | 3 | 00/C81D : 2C FF CF | BIT $CFFF + 80 | 1 AppleIISd.s 87 | Code | 11 | | 3 | 00/C820 : 20 00 C9 | JSR INIT + 81 | 1 AppleIISd.s 88 | Empty | 11 | | 0 | 00/C823 | + 82 | 1 AppleIISd.s 89 | Directive | 11 | | 0 | 00/C823 | DO {0} + 83 | 1 AppleIISd.s 133 | Directive | 11 | | 0 | 00/C823 | FIN + 84 | 1 AppleIISd.s 134 | Empty | 11 | | 0 | 00/C823 | + 85 | 1 AppleIISd.s 135 | Code | 11 | | 2 | 00/C823 : A9 01 | BOOT LDA #$01 + 86 | 1 AppleIISd.s 136 | Code | 11 | | 2 | 00/C825 : 85 42 | STA $42 ; load command + 87 | 1 AppleIISd.s 137 | Code | 11 | | 2 | 00/C827 : A5 2B | LDA {$2B} + 88 | 1 AppleIISd.s 138 | Code | 11 | | 1 | 00/C829 : AA | TAX + 89 | 1 AppleIISd.s 139 | Code | 11 | | 2 | 00/C82A : 85 43 | STA $43 ; slot number + 90 | 1 AppleIISd.s 140 | Code | 11 | | 2 | 00/C82C : 64 44 | STZ $44 ; buffer lo + 91 | 1 AppleIISd.s 141 | Code | 11 | | 2 | 00/C82E : A9 08 | LDA #$08 + 92 | 1 AppleIISd.s 142 | Code | 11 | | 2 | 00/C830 : 85 45 | STA $45 ; buffer hi + 93 | 1 AppleIISd.s 143 | Code | 11 | | 2 | 00/C832 : 64 46 | STZ $46 ; block lo + 94 | 1 AppleIISd.s 144 | Code | 11 | | 2 | 00/C834 : 64 47 | STZ $47 ; block hi + 95 | 1 AppleIISd.s 145 | Code | 11 | | 3 | 00/C836 : 2C FF CF | BIT $CFFF + 96 | 1 AppleIISd.s 146 | Code | 11 | | 3 | 00/C839 : 20 B7 CA | JSR READ ; call driver + 97 | 1 AppleIISd.s 147 | Code | 11 | | 3 | 00/C83C : 4C 01 08 | JMP $801 ; goto bootloader + 98 | 1 AppleIISd.s 148 | Empty | 11 | | 0 | 00/C83F | + 99 | 1 AppleIISd.s 149 | Empty | 11 | | 0 | 00/C83F | + 100 | 1 AppleIISd.s 150 | Comment | 11 | | 0 | 00/C83F | ******************************** + 101 | 1 AppleIISd.s 151 | Comment | 11 | | 0 | 00/C83F | * + 102 | 1 AppleIISd.s 152 | Comment | 11 | | 0 | 00/C83F | * Jump table + 103 | 1 AppleIISd.s 153 | Comment | 11 | | 0 | 00/C83F | * + 104 | 1 AppleIISd.s 154 | Comment | 11 | | 0 | 00/C83F | ******************************** + 105 | 1 AppleIISd.s 155 | Empty | 11 | | 0 | 00/C83F | + 106 | 1 AppleIISd.s 156 | Code | 11 | | 1 | 00/C83F : D8 | DRIVER CLD + 107 | 1 AppleIISd.s 157 | Directive | 11 | | 0 | 00/C840 | DO {0} + 108 | 1 AppleIISd.s 164 | Directive | 11 | | 0 | 00/C840 | ELSE + 109 | 1 AppleIISd.s 165 | Code | 11 | | 3 | 00/C840 : 20 58 FF | JSR $FF58 ; find slot nr + 110 | 1 AppleIISd.s 166 | Code | 11 | | 1 | 00/C843 : BA | TSX + 111 | 1 AppleIISd.s 167 | Code | 11 | | 3 | 00/C844 : BD 00 01 | LDA $0100,X + 112 | 1 AppleIISd.s 168 | Code | 11 | | 3 | 00/C847 : 8D F8 07 | STA {$07F8} ; $Cs + 113 | 1 AppleIISd.s 169 | Code | 11 | | 2 | 00/C84A : 29 0F | AND #$0F + 114 | 1 AppleIISd.s 170 | Code | 11 | | 2 | 00/C84C : 85 3D | STA {$3D} ; $0s + 115 | 1 AppleIISd.s 171 | Code | 11 | | 1 | 00/C84E : 0A | ASL A + 116 | 1 AppleIISd.s 172 | Code | 11 | | 1 | 00/C84F : 0A | ASL A + 117 | 1 AppleIISd.s 173 | Code | 11 | | 1 | 00/C850 : 0A | ASL A + 118 | 1 AppleIISd.s 174 | Code | 11 | | 1 | 00/C851 : 0A | ASL A + 119 | 1 AppleIISd.s 175 | Code | 11 | | 2 | 00/C852 : 85 2B | STA {$2B} ; $s0 + 120 | 1 AppleIISd.s 176 | Directive | 11 | | 0 | 00/C854 | FIN + 121 | 1 AppleIISd.s 177 | Code | 11 | | 1 | 00/C854 : AA | TAX ; X holds now SLOT16 + 122 | 1 AppleIISd.s 178 | Empty | 11 | | 0 | 00/C855 | + 123 | 1 AppleIISd.s 179 | Code | 11 | | 3 | 00/C855 : 2C FF CF | BIT $CFFF + 124 | 1 AppleIISd.s 180 | Code | 11 | | 2 | 00/C858 : A4 3D | LDY {$3D} + 125 | 1 AppleIISd.s 181 | Code | 11 | | 3 | 00/C85A : B9 78 06 | LDA {$0678},Y ; check for init + 126 | 1 AppleIISd.s 182 | Code | 11 | | 2 | 00/C85D : C9 01 | CMP #$01 + 127 | 1 AppleIISd.s 183 | Code | 11 | | 2 | 00/C85F : 90 22 | BCC _INIT + 128 | 1 AppleIISd.s 184 | Code | 11 | | 2 | 00/C861 : A5 42 | _CMD LDA $42 ; get command + 129 | 1 AppleIISd.s 185 | Code | 11 | | 2 | 00/C863 : C9 00 | CMP #$00 + 130 | 1 AppleIISd.s 186 | Code | 11 | | 2 | 00/C865 : F0 10 | BEQ _STATUS + 131 | 1 AppleIISd.s 187 | Code | 11 | | 2 | 00/C867 : C9 01 | CMP #$01 + 132 | 1 AppleIISd.s 188 | Code | 11 | | 2 | 00/C869 : F0 0F | BEQ _READ + 133 | 1 AppleIISd.s 189 | Code | 11 | | 2 | 00/C86B : C9 02 | CMP #$02 + 134 | 1 AppleIISd.s 190 | Code | 11 | | 2 | 00/C86D : F0 0E | BEQ _WRITE + 135 | 1 AppleIISd.s 191 | Code | 11 | | 2 | 00/C86F : C9 03 | CMP #$03 + 136 | 1 AppleIISd.s 192 | Code | 11 | | 2 | 00/C871 : F0 0D | BEQ _FORMAT + 137 | 1 AppleIISd.s 193 | Code | 11 | | 1 | 00/C873 : 38 | SEC ; unknown command + 138 | 1 AppleIISd.s 194 | Code | 11 | | 2 | 00/C874 : A9 01 | LDA #$01 + 139 | 1 AppleIISd.s 195 | Code | 11 | | 1 | 00/C876 : 60 | RTS + 140 | 1 AppleIISd.s 196 | Empty | 11 | | 0 | 00/C877 | + 141 | 1 AppleIISd.s 197 | Code | 11 | | 3 | 00/C877 : 4C AF CA | _STATUS JMP STATUS + 142 | 1 AppleIISd.s 198 | Code | 11 | | 3 | 00/C87A : 4C B7 CA | _READ JMP READ + 143 | 1 AppleIISd.s 199 | Code | 11 | | 3 | 00/C87D : 4C 0D CB | _WRITE JMP WRITE + 144 | 1 AppleIISd.s 200 | Code | 11 | | 3 | 00/C880 : 4C 9D CB | _FORMAT JMP FORMAT + 145 | 1 AppleIISd.s 201 | Code | 11 | | 3 | 00/C883 : 20 00 C9 | _INIT JSR INIT + 146 | 1 AppleIISd.s 202 | Code | 11 | | 2 | 00/C886 : 80 D9 | BRA _CMD + 147 | 1 AppleIISd.s 203 | Empty | 11 | | 0 | 00/C888 | + 148 | 1 AppleIISd.s 204 | Comment | 11 | | 0 | 00/C888 | * Signature bytes + 149 | 1 AppleIISd.s 205 | Empty | 11 | | 0 | 00/C888 | + 150 | 1 AppleIISd.s 206 | Data | 11 | | 120 | 00/C888 : 00 00 00 00 | DS \ ; fill with zeroes + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + | | | | | | 00 00 00 00 | + 151 | 1 AppleIISd.s 207 | Empty | 11 | | 0 | 00/C900 | ozunid_25 + 152 | 1 AppleIISd.s 207 | Directive | 11 | | 0 | 00/C900 | ORG ozunid_25-4 ; locate to $C8FC + 153 | 1 AppleIISd.s 208 | Data | 11 | | 2 | 00/C8FC : FF FF | DW $FFFF ; 65535 blocks + 154 | 1 AppleIISd.s 209 | Data | 11 | | 1 | 00/C8FE : 47 | DB $47 ; Status bits + 155 | 1 AppleIISd.s 210 | Data | 11 | | 1 | 00/C8FF : 3F | DB #CMD0 + 191 | 1 AppleIISd.s 246 | Code | 11 | | 2 | 00/C92A : 85 41 | STA {$41} + 192 | 1 AppleIISd.s 247 | Code | 11 | | 3 | 00/C92C : 20 DE C9 | JSR CMD + 193 | 1 AppleIISd.s 248 | Code | 11 | | 3 | 00/C92F : 20 F2 C9 | JSR GETR1 ; get response + 194 | 1 AppleIISd.s 249 | Code | 11 | | 2 | 00/C932 : C9 01 | CMP #$01 + 195 | 1 AppleIISd.s 250 | Code | 11 | | 2 | 00/C934 : D0 39 | BNE _ERROR1 ; error! + 196 | 1 AppleIISd.s 251 | Empty | 11 | | 0 | 00/C936 | + 197 | 1 AppleIISd.s 252 | Code | 11 | | 2 | 00/C936 : A9 AD | LDA #CMD8 + 200 | 1 AppleIISd.s 255 | Code | 11 | | 2 | 00/C93C : 85 41 | STA {$41} + 201 | 1 AppleIISd.s 256 | Code | 11 | | 3 | 00/C93E : 20 DE C9 | JSR CMD + 202 | 1 AppleIISd.s 257 | Code | 11 | | 3 | 00/C941 : 20 0D CA | JSR GETR3 + 203 | 1 AppleIISd.s 258 | Code | 11 | | 2 | 00/C944 : C9 01 | CMP #$01 + 204 | 1 AppleIISd.s 259 | Code | 11 | | 2 | 00/C946 : D0 2A | BNE _SDV1 ; may be SD Ver. 1 + 205 | 1 AppleIISd.s 260 | Empty | 11 | | 0 | 00/C948 | + 206 | 1 AppleIISd.s 261 | Comment | 11 | | 0 | 00/C948 | * check for $01aa match! + 207 | 1 AppleIISd.s 262 | Code | 11 | | 2 | 00/C948 : A9 B9 | _SDV2 LDA #CMD55 + 210 | 1 AppleIISd.s 265 | Code | 11 | | 2 | 00/C94E : 85 41 | STA {$41} + 211 | 1 AppleIISd.s 266 | Code | 11 | | 3 | 00/C950 : 20 DE C9 | JSR CMD + 212 | 1 AppleIISd.s 267 | Code | 11 | | 3 | 00/C953 : 20 F2 C9 | JSR GETR1 + 213 | 1 AppleIISd.s 268 | Code | 11 | | 2 | 00/C956 : A9 BF | LDA #ACMD4140 + 216 | 1 AppleIISd.s 271 | Code | 11 | | 2 | 00/C95C : 85 41 | STA {$41} + 217 | 1 AppleIISd.s 272 | Code | 11 | | 3 | 00/C95E : 20 DE C9 | JSR CMD + 218 | 1 AppleIISd.s 273 | Code | 11 | | 3 | 00/C961 : 20 F2 C9 | JSR GETR1 + 219 | 1 AppleIISd.s 274 | Code | 11 | | 2 | 00/C964 : C9 01 | CMP #$01 + 220 | 1 AppleIISd.s 275 | Code | 11 | | 2 | 00/C966 : F0 E0 | BEQ _SDV2 ; wait for ready + 221 | 1 AppleIISd.s 276 | Code | 11 | | 2 | 00/C968 : C9 00 | CMP #$00 + 222 | 1 AppleIISd.s 277 | Code | 11 | | 2 | 00/C96A : D0 03 | BNE _ERROR1 ; error! + 223 | 1 AppleIISd.s 278 | Comment | 11 | | 0 | 00/C96C | * send CMD58 + 224 | 1 AppleIISd.s 279 | Comment | 11 | | 0 | 00/C96C | * SD Ver. 2 initialized! + 225 | 1 AppleIISd.s 280 | Code | 11 | | 3 | 00/C96C : 4C AC C9 | JMP _BLOCKSZ + 226 | 1 AppleIISd.s 281 | Empty | 11 | | 0 | 00/C96F | + 227 | 1 AppleIISd.s 282 | Code | 11 | | 3 | 00/C96F : 4C CF C9 | _ERROR1 JMP _IOERROR ; needed for far jump + 228 | 1 AppleIISd.s 283 | Empty | 11 | | 0 | 00/C972 | + 229 | 1 AppleIISd.s 284 | Code | 11 | | 2 | 00/C972 : A9 B9 | _SDV1 LDA #CMD55 + 232 | 1 AppleIISd.s 287 | Code | 11 | | 2 | 00/C978 : 85 41 | STA {$41} + 233 | 1 AppleIISd.s 288 | Code | 11 | | 3 | 00/C97A : 20 DE C9 | JSR CMD ; ignore response + 234 | 1 AppleIISd.s 289 | Code | 11 | | 2 | 00/C97D : A9 C5 | LDA #ACMD410 + 237 | 1 AppleIISd.s 292 | Code | 11 | | 2 | 00/C983 : 85 41 | STA {$41} + 238 | 1 AppleIISd.s 293 | Code | 11 | | 3 | 00/C985 : 20 DE C9 | JSR CMD + 239 | 1 AppleIISd.s 294 | Code | 11 | | 3 | 00/C988 : 20 F2 C9 | JSR GETR1 + 240 | 1 AppleIISd.s 295 | Code | 11 | | 2 | 00/C98B : C9 01 | CMP #$01 + 241 | 1 AppleIISd.s 296 | Code | 11 | | 2 | 00/C98D : F0 E3 | BEQ _SDV1 ; wait for ready + 242 | 1 AppleIISd.s 297 | Code | 11 | | 2 | 00/C98F : C9 00 | CMP #$00 + 243 | 1 AppleIISd.s 298 | Code | 11 | | 2 | 00/C991 : D0 03 | BNE _MMC ; may be MMC card + 244 | 1 AppleIISd.s 299 | Comment | 11 | | 0 | 00/C993 | * SD Ver. 1 initialized! + 245 | 1 AppleIISd.s 300 | Code | 11 | | 3 | 00/C993 : 4C AC C9 | JMP _BLOCKSZ + 246 | 1 AppleIISd.s 301 | Empty | 11 | | 0 | 00/C996 | + 247 | 1 AppleIISd.s 302 | Code | 11 | | 2 | 00/C996 : A9 A7 | _MMC LDA #CMD1 + 250 | 1 AppleIISd.s 305 | Code | 11 | | 2 | 00/C99C : 85 41 | STA {$41} + 251 | 1 AppleIISd.s 306 | Code | 11 | | 3 | 00/C99E : 20 DE C9 | _LOOP1 JSR CMD + 252 | 1 AppleIISd.s 307 | Code | 11 | | 3 | 00/C9A1 : 20 F2 C9 | JSR GETR1 + 253 | 1 AppleIISd.s 308 | Code | 11 | | 2 | 00/C9A4 : C9 01 | CMP #$01 + 254 | 1 AppleIISd.s 309 | Code | 11 | | 2 | 00/C9A6 : F0 F6 | BEQ _LOOP1 ; wait for ready + 255 | 1 AppleIISd.s 310 | Code | 11 | | 2 | 00/C9A8 : C9 00 | CMP #$00 + 256 | 1 AppleIISd.s 311 | Code | 11 | | 2 | 00/C9AA : D0 23 | BNE _IOERROR ; error! + 257 | 1 AppleIISd.s 312 | Comment | 11 | | 0 | 00/C9AC | * MMC Ver. 3 initialized! + 258 | 1 AppleIISd.s 313 | Empty | 11 | | 0 | 00/C9AC | + 259 | 1 AppleIISd.s 314 | Code | 11 | | 2 | 00/C9AC : A9 B3 | _BLOCKSZ LDA #CMD16 + 262 | 1 AppleIISd.s 317 | Code | 11 | | 2 | 00/C9B2 : 85 41 | STA {$41} + 263 | 1 AppleIISd.s 318 | Code | 11 | | 3 | 00/C9B4 : 20 DE C9 | JSR CMD + 264 | 1 AppleIISd.s 319 | Code | 11 | | 3 | 00/C9B7 : 20 F2 C9 | JSR GETR1 + 265 | 1 AppleIISd.s 320 | Code | 11 | | 2 | 00/C9BA : C9 00 | CMP #$00 + 266 | 1 AppleIISd.s 321 | Code | 11 | | 2 | 00/C9BC : D0 11 | BNE _IOERROR ; error! + 267 | 1 AppleIISd.s 322 | Empty | 11 | | 0 | 00/C9BE | + 268 | 1 AppleIISd.s 323 | Code | 11 | | 2 | 00/C9BE : A4 3D | _END LDY {$3D} ; all ok + 269 | 1 AppleIISd.s 324 | Code | 11 | | 2 | 00/C9C0 : A9 01 | LDA #$01 + 270 | 1 AppleIISd.s 325 | Code | 11 | | 3 | 00/C9C2 : 99 78 06 | STA {$0678},Y ; initialized + 271 | 1 AppleIISd.s 326 | Code | 11 | | 1 | 00/C9C5 : 18 | CLC + 272 | 1 AppleIISd.s 327 | Code | 11 | | 2 | 00/C9C6 : A0 00 | LDY #0 + 273 | 1 AppleIISd.s 328 | Code | 11 | | 2 | 00/C9C8 : 90 08 | BCC _END1 + 274 | 1 AppleIISd.s 329 | Code | 11 | | 1 | 00/C9CA : 38 | _CDERROR SEC + 275 | 1 AppleIISd.s 330 | Code | 11 | | 2 | 00/C9CB : A0 28 | LDY #$28 ; no card error + 276 | 1 AppleIISd.s 331 | Code | 11 | | 2 | 00/C9CD : B0 03 | BCS _END1 + 277 | 1 AppleIISd.s 332 | Code | 11 | | 1 | 00/C9CF : 38 | _IOERROR SEC + 278 | 1 AppleIISd.s 333 | Code | 11 | | 2 | 00/C9D0 : A0 27 | LDY #$27 ; init error + 279 | 1 AppleIISd.s 334 | Code | 11 | | 2 | 00/C9D2 : A9 0F | _END1 LDA #{$0F} ; deselect card + 280 | 1 AppleIISd.s 335 | Code | 11 | | 3 | 00/C9D4 : 9D 83 C0 | STA {{$C080}+3},X + 281 | 1 AppleIISd.s 336 | Code | 11 | | 2 | 00/C9D7 : A9 00 | LDA #0 ; set div to 2 + 282 | 1 AppleIISd.s 337 | Code | 11 | | 3 | 00/C9D9 : 9D 82 C0 | STA {{$C080}+2},X + 283 | 1 AppleIISd.s 338 | Code | 11 | | 1 | 00/C9DC : 98 | TYA ; retval in A + 284 | 1 AppleIISd.s 339 | Code | 11 | | 1 | 00/C9DD : 60 | RTS + 285 | 1 AppleIISd.s 340 | Empty | 11 | | 0 | 00/C9DE | + 286 | 1 AppleIISd.s 341 | Empty | 11 | | 0 | 00/C9DE | + 287 | 1 AppleIISd.s 342 | Comment | 11 | | 0 | 00/C9DE | ******************************** + 288 | 1 AppleIISd.s 343 | Comment | 11 | | 0 | 00/C9DE | * + 289 | 1 AppleIISd.s 344 | Comment | 11 | | 0 | 00/C9DE | * Send SD command + 290 | 1 AppleIISd.s 345 | Comment | 11 | | 0 | 00/C9DE | * Call with command in CMDHI and CMDLO + 291 | 1 AppleIISd.s 346 | Comment | 11 | | 0 | 00/C9DE | * + 292 | 1 AppleIISd.s 347 | Comment | 11 | | 0 | 00/C9DE | ******************************** + 293 | 1 AppleIISd.s 348 | Empty | 11 | | 0 | 00/C9DE | + 294 | 1 AppleIISd.s 349 | Code | 11 | | 1 | 00/C9DE : 5A | CMD PHY + 295 | 1 AppleIISd.s 350 | Code | 11 | | 2 | 00/C9DF : A0 00 | LDY #0 + 296 | 1 AppleIISd.s 351 | Code | 11 | | 2 | 00/C9E1 : B1 40 | ozunid_3 LDA ({$40}),Y + 297 | 1 AppleIISd.s 352 | Code | 11 | | 3 | 00/C9E3 : 9D 80 C0 | STA {$C080},X + 298 | 1 AppleIISd.s 353 | Code | 11 | | 3 | 00/C9E6 : 3C 81 C0 | ozunid_4 BIT {{$C080}+1},X ; TC is in N + 299 | 1 AppleIISd.s 354 | Code | 11 | | 2 | 00/C9E9 : 10 FB | BPL ozunid_4 + 300 | 1 AppleIISd.s 355 | Code | 11 | | 1 | 00/C9EB : C8 | INY + 301 | 1 AppleIISd.s 356 | Code | 11 | | 2 | 00/C9EC : C0 06 | CPY #6 + 302 | 1 AppleIISd.s 357 | Code | 11 | | 2 | 00/C9EE : 90 F1 | BCC ozunid_3 + 303 | 1 AppleIISd.s 358 | Code | 11 | | 1 | 00/C9F0 : 7A | PLY + 304 | 1 AppleIISd.s 359 | Code | 11 | | 1 | 00/C9F1 : 60 | RTS + 305 | 1 AppleIISd.s 360 | Empty | 11 | | 0 | 00/C9F2 | + 306 | 1 AppleIISd.s 361 | Empty | 11 | | 0 | 00/C9F2 | + 307 | 1 AppleIISd.s 362 | Comment | 11 | | 0 | 00/C9F2 | ******************************** + 308 | 1 AppleIISd.s 363 | Comment | 11 | | 0 | 00/C9F2 | * + 309 | 1 AppleIISd.s 364 | Comment | 11 | | 0 | 00/C9F2 | * Get R1 + 310 | 1 AppleIISd.s 365 | Comment | 11 | | 0 | 00/C9F2 | * R1 is in A + 311 | 1 AppleIISd.s 366 | Comment | 11 | | 0 | 00/C9F2 | * + 312 | 1 AppleIISd.s 367 | Comment | 11 | | 0 | 00/C9F2 | ******************************** + 313 | 1 AppleIISd.s 368 | Empty | 11 | | 0 | 00/C9F2 | + 314 | 1 AppleIISd.s 369 | Code | 11 | | 2 | 00/C9F2 : A9 FF | GETR1 LDA #{$FF} + 315 | 1 AppleIISd.s 370 | Code | 11 | | 3 | 00/C9F4 : 9D 80 C0 | STA {$C080},X + 316 | 1 AppleIISd.s 371 | Code | 11 | | 3 | 00/C9F7 : 3C 81 C0 | ozunid_5 BIT {{$C080}+1},X + 317 | 1 AppleIISd.s 372 | Code | 11 | | 2 | 00/C9FA : 10 FB | BPL ozunid_5 + 318 | 1 AppleIISd.s 373 | Code | 11 | | 3 | 00/C9FC : BD 80 C0 | LDA {$C080},X ; get response + 319 | 1 AppleIISd.s 374 | Code | 11 | | 2 | 00/C9FF : 85 3C | STA {$3C} ; save R1 + 320 | 1 AppleIISd.s 375 | Code | 11 | | 2 | 00/CA01 : 29 80 | AND #$80 + 321 | 1 AppleIISd.s 376 | Code | 11 | | 2 | 00/CA03 : D0 ED | BNE GETR1 ; wait for MSB=0 + 322 | 1 AppleIISd.s 377 | Code | 11 | | 2 | 00/CA05 : A9 FF | LDA #{$FF} + 323 | 1 AppleIISd.s 378 | Code | 11 | | 3 | 00/CA07 : 9D 80 C0 | STA {$C080},X ; send another dummy + 324 | 1 AppleIISd.s 379 | Code | 11 | | 2 | 00/CA0A : A5 3C | LDA {$3C} ; restore R1 + 325 | 1 AppleIISd.s 380 | Code | 11 | | 1 | 00/CA0C : 60 | RTS + 326 | 1 AppleIISd.s 381 | Empty | 11 | | 0 | 00/CA0D | + 327 | 1 AppleIISd.s 382 | Empty | 11 | | 0 | 00/CA0D | + 328 | 1 AppleIISd.s 383 | Comment | 11 | | 0 | 00/CA0D | ******************************** + 329 | 1 AppleIISd.s 384 | Comment | 11 | | 0 | 00/CA0D | * + 330 | 1 AppleIISd.s 385 | Comment | 11 | | 0 | 00/CA0D | * Get R3 + 331 | 1 AppleIISd.s 386 | Comment | 11 | | 0 | 00/CA0D | * R1 is in A + 332 | 1 AppleIISd.s 387 | Comment | 11 | | 0 | 00/CA0D | * R3 is in scratchpad ram + 333 | 1 AppleIISd.s 388 | Comment | 11 | | 0 | 00/CA0D | * + 334 | 1 AppleIISd.s 389 | Comment | 11 | | 0 | 00/CA0D | ******************************** + 335 | 1 AppleIISd.s 390 | Empty | 11 | | 0 | 00/CA0D | + 336 | 1 AppleIISd.s 391 | Code | 11 | | 3 | 00/CA0D : 20 F2 C9 | GETR3 JSR GETR1 ; get R1 first + 337 | 1 AppleIISd.s 392 | Code | 11 | | 1 | 00/CA10 : 48 | PHA ; save R1 + 338 | 1 AppleIISd.s 393 | Code | 11 | | 1 | 00/CA11 : 5A | PHY ; save Y + 339 | 1 AppleIISd.s 394 | Code | 11 | | 2 | 00/CA12 : A0 04 | LDY #04 ; load counter + 340 | 1 AppleIISd.s 395 | Code | 11 | | 2 | 00/CA14 : A9 FF | ozunid_6 LDA #{$FF} ; send dummy + 341 | 1 AppleIISd.s 396 | Code | 11 | | 3 | 00/CA16 : 9D 80 C0 | STA {$C080},X + 342 | 1 AppleIISd.s 397 | Code | 11 | | 3 | 00/CA19 : 3C 81 C0 | ozunid_7 BIT {{$C080}+1},X + 343 | 1 AppleIISd.s 398 | Code | 11 | | 2 | 00/CA1C : 10 FB | BPL ozunid_7 + 344 | 1 AppleIISd.s 399 | Code | 11 | | 3 | 00/CA1E : BD 80 C0 | LDA {$C080},X + 345 | 1 AppleIISd.s 400 | Code | 11 | | 1 | 00/CA21 : 48 | PHA + 346 | 1 AppleIISd.s 401 | Code | 11 | | 1 | 00/CA22 : 88 | DEY + 347 | 1 AppleIISd.s 402 | Code | 11 | | 2 | 00/CA23 : D0 EF | BNE ozunid_6 ; do 4 times + 348 | 1 AppleIISd.s 403 | Code | 11 | | 2 | 00/CA25 : A4 3D | LDY {$3D} + 349 | 1 AppleIISd.s 404 | Code | 11 | | 1 | 00/CA27 : 68 | PLA + 350 | 1 AppleIISd.s 405 | Code | 11 | | 3 | 00/CA28 : 99 F8 05 | STA {$05F8},Y ; save R3 + 351 | 1 AppleIISd.s 406 | Code | 11 | | 1 | 00/CA2B : 68 | PLA + 352 | 1 AppleIISd.s 407 | Code | 11 | | 3 | 00/CA2C : 99 78 05 | STA {$0578},Y + 353 | 1 AppleIISd.s 408 | Code | 11 | | 1 | 00/CA2F : 68 | PLA + 354 | 1 AppleIISd.s 409 | Code | 11 | | 3 | 00/CA30 : 99 F8 04 | STA {$04F8},Y + 355 | 1 AppleIISd.s 410 | Code | 11 | | 1 | 00/CA33 : 68 | PLA + 356 | 1 AppleIISd.s 411 | Code | 11 | | 3 | 00/CA34 : 99 78 04 | STA {$0478},Y + 357 | 1 AppleIISd.s 412 | Code | 11 | | 1 | 00/CA37 : 7A | PLY ; restore Y + 358 | 1 AppleIISd.s 413 | Code | 11 | | 2 | 00/CA38 : A9 FF | LDA #{$FF} + 359 | 1 AppleIISd.s 414 | Code | 11 | | 3 | 00/CA3A : 9D 80 C0 | STA {$C080},X ; send another dummy + 360 | 1 AppleIISd.s 415 | Code | 11 | | 1 | 00/CA3D : 68 | PLA ; restore R1 + 361 | 1 AppleIISd.s 416 | Code | 11 | | 1 | 00/CA3E : 60 | RTS + 362 | 1 AppleIISd.s 417 | Empty | 11 | | 0 | 00/CA3F | + 363 | 1 AppleIISd.s 418 | Empty | 11 | | 0 | 00/CA3F | + 364 | 1 AppleIISd.s 419 | Comment | 11 | | 0 | 00/CA3F | ******************************** + 365 | 1 AppleIISd.s 420 | Comment | 11 | | 0 | 00/CA3F | * + 366 | 1 AppleIISd.s 421 | Comment | 11 | | 0 | 00/CA3F | * Calculate block address + 367 | 1 AppleIISd.s 422 | Comment | 11 | | 0 | 00/CA3F | * Block no is in $46-47 + 368 | 1 AppleIISd.s 423 | Comment | 11 | | 0 | 00/CA3F | * Address is in R30-R33 + 369 | 1 AppleIISd.s 424 | Comment | 11 | | 0 | 00/CA3F | * + 370 | 1 AppleIISd.s 425 | Comment | 11 | | 0 | 00/CA3F | ******************************** + 371 | 1 AppleIISd.s 426 | Empty | 11 | | 0 | 00/CA3F | + 372 | 1 AppleIISd.s 427 | Code | 11 | | 1 | 00/CA3F : DA | BLOCK PHX ; save X + 373 | 1 AppleIISd.s 428 | Code | 11 | | 1 | 00/CA40 : 5A | PHY ; save Y + 374 | 1 AppleIISd.s 429 | Code | 11 | | 2 | 00/CA41 : A6 3D | LDX {$3D} + 375 | 1 AppleIISd.s 430 | Code | 11 | | 2 | 00/CA43 : A5 46 | LDA $46 ; store block num + 376 | 1 AppleIISd.s 431 | Code | 11 | | 3 | 00/CA45 : 9D F8 05 | STA {$05F8},X ; in R30-R33 + 377 | 1 AppleIISd.s 432 | Code | 11 | | 2 | 00/CA48 : A5 47 | LDA $47 + 378 | 1 AppleIISd.s 433 | Code | 11 | | 3 | 00/CA4A : 9D 78 05 | STA {$0578},X + 379 | 1 AppleIISd.s 434 | Code | 11 | | 2 | 00/CA4D : A9 00 | LDA #0 + 380 | 1 AppleIISd.s 435 | Code | 11 | | 3 | 00/CA4F : 9D F8 04 | STA {$04F8},X + 381 | 1 AppleIISd.s 436 | Code | 11 | | 3 | 00/CA52 : 9D 78 04 | STA {$0478},X + 382 | 1 AppleIISd.s 437 | Empty | 11 | | 0 | 00/CA55 | + 383 | 1 AppleIISd.s 438 | Code | 11 | | 2 | 00/CA55 : A0 09 | LDY #9 ; ASL can't be used with Y + 384 | 1 AppleIISd.s 439 | Code | 11 | | 3 | 00/CA57 : 1E F8 05 | ozunid_8 ASL {$05F8},X ; mul block num + 385 | 1 AppleIISd.s 440 | Code | 11 | | 3 | 00/CA5A : 3E 78 05 | ROL {$0578},X ; by 512 to get + 386 | 1 AppleIISd.s 441 | Code | 11 | | 3 | 00/CA5D : 3E F8 04 | ROL {$04F8},X ; real address + 387 | 1 AppleIISd.s 442 | Code | 11 | | 3 | 00/CA60 : 3E 78 04 | ROL {$0478},X + 388 | 1 AppleIISd.s 443 | Code | 11 | | 1 | 00/CA63 : 88 | DEY + 389 | 1 AppleIISd.s 444 | Code | 11 | | 2 | 00/CA64 : D0 F1 | BNE ozunid_8 + 390 | 1 AppleIISd.s 445 | Code | 11 | | 1 | 00/CA66 : 7A | PLY ; restore Y + 391 | 1 AppleIISd.s 446 | Code | 11 | | 1 | 00/CA67 : FA | PLX ; restore X + 392 | 1 AppleIISd.s 447 | Code | 11 | | 1 | 00/CA68 : 60 | RTS + 393 | 1 AppleIISd.s 448 | Empty | 11 | | 0 | 00/CA69 | + 394 | 1 AppleIISd.s 449 | Empty | 11 | | 0 | 00/CA69 | + 395 | 1 AppleIISd.s 450 | Comment | 11 | | 0 | 00/CA69 | ******************************** + 396 | 1 AppleIISd.s 451 | Comment | 11 | | 0 | 00/CA69 | * + 397 | 1 AppleIISd.s 452 | Comment | 11 | | 0 | 00/CA69 | * Send SD command + 398 | 1 AppleIISd.s 453 | Comment | 11 | | 0 | 00/CA69 | * Cmd is in A + 399 | 1 AppleIISd.s 454 | Comment | 11 | | 0 | 00/CA69 | * + 400 | 1 AppleIISd.s 455 | Comment | 11 | | 0 | 00/CA69 | ******************************** + 401 | 1 AppleIISd.s 456 | Empty | 11 | | 0 | 00/CA69 | + 402 | 1 AppleIISd.s 457 | Code | 11 | | 1 | 00/CA69 : 5A | COMMAND PHY ; save Y + 403 | 1 AppleIISd.s 458 | Code | 11 | | 2 | 00/CA6A : A4 3D | LDY {$3D} + 404 | 1 AppleIISd.s 459 | Code | 11 | | 3 | 00/CA6C : 9D 80 C0 | STA {$C080},X ; send command + 405 | 1 AppleIISd.s 460 | Code | 11 | | 3 | 00/CA6F : 3C 81 C0 | ozunid_9 BIT {{$C080}+1},X + 406 | 1 AppleIISd.s 461 | Code | 11 | | 2 | 00/CA72 : 10 FB | BPL ozunid_9 + 407 | 1 AppleIISd.s 462 | Code | 11 | | 3 | 00/CA74 : B9 78 04 | _ARG LDA {$0478},Y ; get arg from R30 on + 408 | 1 AppleIISd.s 463 | Code | 11 | | 3 | 00/CA77 : 9D 80 C0 | STA {$C080},X + 409 | 1 AppleIISd.s 464 | Code | 11 | | 3 | 00/CA7A : 3C 81 C0 | ozunid_10 BIT {{$C080}+1},X + 410 | 1 AppleIISd.s 465 | Code | 11 | | 2 | 00/CA7D : 10 FB | BPL ozunid_10 + 411 | 1 AppleIISd.s 466 | Code | 11 | | 3 | 00/CA7F : B9 F8 04 | LDA {$04F8},Y + 412 | 1 AppleIISd.s 467 | Code | 11 | | 3 | 00/CA82 : 9D 80 C0 | STA {$C080},X + 413 | 1 AppleIISd.s 468 | Code | 11 | | 3 | 00/CA85 : 3C 81 C0 | _WAIT11 BIT {{$C080}+1},X + 414 | 1 AppleIISd.s 469 | Code | 11 | | 2 | 00/CA88 : 10 FB | BPL _WAIT11 + 415 | 1 AppleIISd.s 470 | Code | 11 | | 3 | 00/CA8A : B9 78 05 | LDA {$0578},Y + 416 | 1 AppleIISd.s 471 | Code | 11 | | 3 | 00/CA8D : 9D 80 C0 | STA {$C080},X + 417 | 1 AppleIISd.s 472 | Code | 11 | | 3 | 00/CA90 : 3C 81 C0 | _WAIT12 BIT {{$C080}+1},X + 418 | 1 AppleIISd.s 473 | Code | 11 | | 2 | 00/CA93 : 10 FB | BPL _WAIT12 + 419 | 1 AppleIISd.s 474 | Code | 11 | | 3 | 00/CA95 : B9 F8 05 | LDA {$05F8},Y + 420 | 1 AppleIISd.s 475 | Code | 11 | | 3 | 00/CA98 : 9D 80 C0 | STA {$C080},X + 421 | 1 AppleIISd.s 476 | Code | 11 | | 3 | 00/CA9B : 3C 81 C0 | _WAIT13 BIT {{$C080}+1},X + 422 | 1 AppleIISd.s 477 | Code | 11 | | 2 | 00/CA9E : 10 FB | BPL _WAIT13 + 423 | 1 AppleIISd.s 478 | Code | 11 | | 2 | 00/CAA0 : A9 FF | LDA #{$FF} + 424 | 1 AppleIISd.s 479 | Code | 11 | | 3 | 00/CAA2 : 9D 80 C0 | STA {$C080},X ; dummy crc + 425 | 1 AppleIISd.s 480 | Code | 11 | | 3 | 00/CAA5 : 3C 81 C0 | ozunid_11 BIT {{$C080}+1},X + 426 | 1 AppleIISd.s 481 | Code | 11 | | 2 | 00/CAA8 : 10 FB | BPL ozunid_11 + 427 | 1 AppleIISd.s 482 | Code | 11 | | 3 | 00/CAAA : 20 F2 C9 | JSR GETR1 + 428 | 1 AppleIISd.s 483 | Code | 11 | | 1 | 00/CAAD : 7A | PLY ; restore Y + 429 | 1 AppleIISd.s 484 | Code | 11 | | 1 | 00/CAAE : 60 | RTS + 430 | 1 AppleIISd.s 485 | Empty | 11 | | 0 | 00/CAAF | + 431 | 1 AppleIISd.s 486 | Empty | 11 | | 0 | 00/CAAF | + 432 | 1 AppleIISd.s 487 | Comment | 11 | | 0 | 00/CAAF | ******************************** + 433 | 1 AppleIISd.s 488 | Comment | 11 | | 0 | 00/CAAF | * + 434 | 1 AppleIISd.s 489 | Comment | 11 | | 0 | 00/CAAF | * Status request + 435 | 1 AppleIISd.s 490 | Comment | 11 | | 0 | 00/CAAF | * $43 Unit number DSSS000 + 436 | 1 AppleIISd.s 491 | Comment | 11 | | 0 | 00/CAAF | * $44-45 Unused + 437 | 1 AppleIISd.s 492 | Comment | 11 | | 0 | 00/CAAF | * $46-47 Unused + 438 | 1 AppleIISd.s 493 | Comment | 11 | | 0 | 00/CAAF | * + 439 | 1 AppleIISd.s 494 | Comment | 11 | | 0 | 00/CAAF | * C Clear - No error + 440 | 1 AppleIISd.s 495 | Comment | 11 | | 0 | 00/CAAF | * Set - Error + 441 | 1 AppleIISd.s 496 | Comment | 11 | | 0 | 00/CAAF | * A $00 - No error + 442 | 1 AppleIISd.s 497 | Comment | 11 | | 0 | 00/CAAF | * $27 - I/O error + 443 | 1 AppleIISd.s 498 | Comment | 11 | | 0 | 00/CAAF | * $28 - No card inserted / no init + 444 | 1 AppleIISd.s 499 | Comment | 11 | | 0 | 00/CAAF | * $2B - Card write protected + 445 | 1 AppleIISd.s 500 | Comment | 11 | | 0 | 00/CAAF | * x - Blocks avail (low byte) + 446 | 1 AppleIISd.s 501 | Comment | 11 | | 0 | 00/CAAF | * y - Blocks avail (high byte) + 447 | 1 AppleIISd.s 502 | Comment | 11 | | 0 | 00/CAAF | * + 448 | 1 AppleIISd.s 503 | Comment | 11 | | 0 | 00/CAAF | ******************************** + 449 | 1 AppleIISd.s 504 | Empty | 11 | | 0 | 00/CAAF | + 450 | 1 AppleIISd.s 505 | Code | 11 | | 1 | 00/CAAF : 18 | STATUS CLC ; no error + 451 | 1 AppleIISd.s 506 | Code | 11 | | 2 | 00/CAB0 : A9 00 | LDA #0 + 452 | 1 AppleIISd.s 507 | Code | 11 | | 2 | 00/CAB2 : A2 FF | LDX #$FF ; 32 MB partition + 453 | 1 AppleIISd.s 508 | Code | 11 | | 2 | 00/CAB4 : A0 FF | LDY #$FF + 454 | 1 AppleIISd.s 509 | Code | 11 | | 1 | 00/CAB6 : 60 | RTS + 455 | 1 AppleIISd.s 510 | Empty | 11 | | 0 | 00/CAB7 | + 456 | 1 AppleIISd.s 511 | Comment | 11 | | 0 | 00/CAB7 | * TODO: check for card detect and write protect! + 457 | 1 AppleIISd.s 512 | Empty | 11 | | 0 | 00/CAB7 | + 458 | 1 AppleIISd.s 513 | Empty | 11 | | 0 | 00/CAB7 | + 459 | 1 AppleIISd.s 514 | Comment | 11 | | 0 | 00/CAB7 | ******************************** + 460 | 1 AppleIISd.s 515 | Comment | 11 | | 0 | 00/CAB7 | * + 461 | 1 AppleIISd.s 516 | Comment | 11 | | 0 | 00/CAB7 | * Read 512 byte block + 462 | 1 AppleIISd.s 517 | Comment | 11 | | 0 | 00/CAB7 | * $43 Unit number DSSS0000 + 463 | 1 AppleIISd.s 518 | Comment | 11 | | 0 | 00/CAB7 | * $44-45 Address (LO/HI) of buffer + 464 | 1 AppleIISd.s 519 | Comment | 11 | | 0 | 00/CAB7 | * $46-47 Block number (LO/HI) + 465 | 1 AppleIISd.s 520 | Comment | 11 | | 0 | 00/CAB7 | * + 466 | 1 AppleIISd.s 521 | Comment | 11 | | 0 | 00/CAB7 | * C Clear - No error + 467 | 1 AppleIISd.s 522 | Comment | 11 | | 0 | 00/CAB7 | * Set - Error + 468 | 1 AppleIISd.s 523 | Comment | 11 | | 0 | 00/CAB7 | * A $00 - No error + 469 | 1 AppleIISd.s 524 | Comment | 11 | | 0 | 00/CAB7 | * $27 - Bad block number + 470 | 1 AppleIISd.s 525 | Comment | 11 | | 0 | 00/CAB7 | * $28 - No card inserted + 471 | 1 AppleIISd.s 526 | Comment | 11 | | 0 | 00/CAB7 | * + 472 | 1 AppleIISd.s 527 | Comment | 11 | | 0 | 00/CAB7 | ******************************** + 473 | 1 AppleIISd.s 528 | Empty | 11 | | 0 | 00/CAB7 | + 474 | 1 AppleIISd.s 529 | Comment | 11 | | 0 | 00/CAB7 | * TODO: check for card detect! + 475 | 1 AppleIISd.s 530 | Empty | 11 | | 0 | 00/CAB7 | + 476 | 1 AppleIISd.s 531 | Code | 11 | | 3 | 00/CAB7 : 20 3F CA | READ JSR BLOCK ; calc block address + 477 | 1 AppleIISd.s 532 | Empty | 11 | | 0 | 00/CABA | + 478 | 1 AppleIISd.s 533 | Code | 11 | | 2 | 00/CABA : A9 0E | LDA #{$0E} ; enable /CS + 479 | 1 AppleIISd.s 534 | Code | 11 | | 3 | 00/CABC : 9D 83 C0 | STA {{$C080}+3},X + 480 | 1 AppleIISd.s 535 | Code | 11 | | 2 | 00/CABF : A9 51 | LDA #$51 ; send CMD17 + 481 | 1 AppleIISd.s 536 | Code | 11 | | 3 | 00/CAC1 : 20 69 CA | JSR COMMAND ; send command + 482 | 1 AppleIISd.s 537 | Empty | 11 | | 0 | 00/CAC4 | + 483 | 1 AppleIISd.s 538 | Code | 11 | | 2 | 00/CAC4 : A9 FF | _GETTOK LDA #{$FF} ; get data token + 484 | 1 AppleIISd.s 539 | Code | 11 | | 3 | 00/CAC6 : 9D 80 C0 | STA {$C080},X + 485 | 1 AppleIISd.s 540 | Code | 11 | | 3 | 00/CAC9 : 3C 81 C0 | ozunid_12 BIT {{$C080}+1},X + 486 | 1 AppleIISd.s 541 | Code | 11 | | 2 | 00/CACC : 10 FB | BPL ozunid_12 + 487 | 1 AppleIISd.s 542 | Code | 11 | | 3 | 00/CACE : BD 80 C0 | LDA {$C080},X ; get response + 488 | 1 AppleIISd.s 543 | Comment | 11 | | 0 | 00/CAD1 | * + 489 | 1 AppleIISd.s 544 | Comment | 11 | | 0 | 00/CAD1 | * TODO: check for error! + 490 | 1 AppleIISd.s 545 | Comment | 11 | | 0 | 00/CAD1 | * + 491 | 1 AppleIISd.s 546 | Code | 11 | | 2 | 00/CAD1 : C9 FE | CMP #$FE + 492 | 1 AppleIISd.s 547 | Code | 11 | | 2 | 00/CAD3 : D0 EF | BNE _GETTOK ; wait for $FE + 493 | 1 AppleIISd.s 548 | Empty | 11 | | 0 | 00/CAD5 | + 494 | 1 AppleIISd.s 549 | Code | 11 | | 2 | 00/CAD5 : A0 02 | LDY #2 ; read data from card + 495 | 1 AppleIISd.s 550 | Code | 11 | | 2 | 00/CAD7 : 64 3C | ozunid_13 STZ {$3C} + 496 | 1 AppleIISd.s 551 | Code | 11 | | 2 | 00/CAD9 : A9 FF | ozunid_14 LDA #{$FF} + 497 | 1 AppleIISd.s 552 | Code | 11 | | 3 | 00/CADB : 9D 80 C0 | STA {$C080},X + 498 | 1 AppleIISd.s 553 | Code | 11 | | 3 | 00/CADE : 3C 81 C0 | ozunid_15 BIT {{$C080}+1},X + 499 | 1 AppleIISd.s 554 | Code | 11 | | 2 | 00/CAE1 : 10 FB | BPL ozunid_15 + 500 | 1 AppleIISd.s 555 | Code | 11 | | 3 | 00/CAE3 : BD 80 C0 | LDA {$C080},X + 501 | 1 AppleIISd.s 556 | Code | 11 | | 2 | 00/CAE6 : 92 44 | STA ($44) + 502 | 1 AppleIISd.s 557 | Code | 11 | | 2 | 00/CAE8 : E6 44 | INC $44 + 503 | 1 AppleIISd.s 558 | Code | 11 | | 2 | 00/CAEA : D0 02 | BNE ozunid_16 + 504 | 1 AppleIISd.s 559 | Code | 11 | | 2 | 00/CAEC : E6 45 | INC $45 ; inc msb on page boundary + 505 | 1 AppleIISd.s 560 | Code | 11 | | 2 | 00/CAEE : E6 3C | ozunid_16 INC {$3C} + 506 | 1 AppleIISd.s 561 | Code | 11 | | 2 | 00/CAF0 : D0 E7 | BNE ozunid_14 + 507 | 1 AppleIISd.s 562 | Code | 11 | | 1 | 00/CAF2 : 88 | DEY + 508 | 1 AppleIISd.s 563 | Code | 11 | | 2 | 00/CAF3 : D0 E2 | BNE ozunid_13 + 509 | 1 AppleIISd.s 564 | Empty | 11 | | 0 | 00/CAF5 | + 510 | 1 AppleIISd.s 565 | Code | 11 | | 2 | 00/CAF5 : A0 02 | LDY #2 + 511 | 1 AppleIISd.s 566 | Code | 11 | | 2 | 00/CAF7 : A9 FF | ozunid_17 LDA #{$FF} ; read 2 bytes crc + 512 | 1 AppleIISd.s 567 | Code | 11 | | 3 | 00/CAF9 : 9D 80 C0 | STA {$C080},X ; and ignore + 513 | 1 AppleIISd.s 568 | Code | 11 | | 3 | 00/CAFC : 3C 81 C0 | ozunid_18 BIT {{$C080}+1},X + 514 | 1 AppleIISd.s 569 | Code | 11 | | 2 | 00/CAFF : 10 FB | BPL ozunid_18 + 515 | 1 AppleIISd.s 570 | Code | 11 | | 1 | 00/CB01 : 88 | DEY + 516 | 1 AppleIISd.s 571 | Code | 11 | | 2 | 00/CB02 : D0 F3 | BNE ozunid_17 + 517 | 1 AppleIISd.s 572 | Empty | 11 | | 0 | 00/CB04 | + 518 | 1 AppleIISd.s 573 | Code | 11 | | 2 | 00/CB04 : A9 0F | LDA #{$0F} + 519 | 1 AppleIISd.s 574 | Code | 11 | | 3 | 00/CB06 : 9D 83 C0 | STA {{$C080}+3},X ; disable /CS + 520 | 1 AppleIISd.s 575 | Code | 11 | | 1 | 00/CB09 : 18 | CLC ; no error + 521 | 1 AppleIISd.s 576 | Code | 11 | | 2 | 00/CB0A : A9 00 | LDA #$00 + 522 | 1 AppleIISd.s 577 | Code | 11 | | 1 | 00/CB0C : 60 | RTS + 523 | 1 AppleIISd.s 578 | Empty | 11 | | 0 | 00/CB0D | + 524 | 1 AppleIISd.s 579 | Empty | 11 | | 0 | 00/CB0D | + 525 | 1 AppleIISd.s 580 | Comment | 11 | | 0 | 00/CB0D | ******************************** + 526 | 1 AppleIISd.s 581 | Comment | 11 | | 0 | 00/CB0D | * + 527 | 1 AppleIISd.s 582 | Comment | 11 | | 0 | 00/CB0D | * Write 512 byte block + 528 | 1 AppleIISd.s 583 | Comment | 11 | | 0 | 00/CB0D | * $43 Unit number DSSS000 + 529 | 1 AppleIISd.s 584 | Comment | 11 | | 0 | 00/CB0D | * $44-45 Address (LO/HI) of buffer + 530 | 1 AppleIISd.s 585 | Comment | 11 | | 0 | 00/CB0D | * $46-47 Block number (LO/HI) + 531 | 1 AppleIISd.s 586 | Comment | 11 | | 0 | 00/CB0D | * + 532 | 1 AppleIISd.s 587 | Comment | 11 | | 0 | 00/CB0D | * C Clear - No error + 533 | 1 AppleIISd.s 588 | Comment | 11 | | 0 | 00/CB0D | * Set - Error + 534 | 1 AppleIISd.s 589 | Comment | 11 | | 0 | 00/CB0D | * A $00 - No error + 535 | 1 AppleIISd.s 590 | Comment | 11 | | 0 | 00/CB0D | * $27 - I/O error or bad block number + 536 | 1 AppleIISd.s 591 | Comment | 11 | | 0 | 00/CB0D | * $28 - No card inserted + 537 | 1 AppleIISd.s 592 | Comment | 11 | | 0 | 00/CB0D | * $2B - Card write protected + 538 | 1 AppleIISd.s 593 | Comment | 11 | | 0 | 00/CB0D | * + 539 | 1 AppleIISd.s 594 | Comment | 11 | | 0 | 00/CB0D | ******************************** + 540 | 1 AppleIISd.s 595 | Empty | 11 | | 0 | 00/CB0D | + 541 | 1 AppleIISd.s 596 | Comment | 11 | | 0 | 00/CB0D | * TODO: check for card detect and write protect! + 542 | 1 AppleIISd.s 597 | Empty | 11 | | 0 | 00/CB0D | + 543 | 1 AppleIISd.s 598 | Code | 11 | | 3 | 00/CB0D : 20 3F CA | WRITE JSR BLOCK ; calc block address + 544 | 1 AppleIISd.s 599 | Empty | 11 | | 0 | 00/CB10 | + 545 | 1 AppleIISd.s 600 | Code | 11 | | 2 | 00/CB10 : A9 0E | LDA #{$0E} ; enable /CS + 546 | 1 AppleIISd.s 601 | Code | 11 | | 3 | 00/CB12 : 9D 83 C0 | STA {{$C080}+3},X + 547 | 1 AppleIISd.s 602 | Code | 11 | | 2 | 00/CB15 : A9 58 | LDA #$58 ; send CMD24 + 548 | 1 AppleIISd.s 603 | Code | 11 | | 3 | 00/CB17 : 20 69 CA | JSR COMMAND ; send command + 549 | 1 AppleIISd.s 604 | Empty | 11 | | 0 | 00/CB1A | + 550 | 1 AppleIISd.s 605 | Code | 11 | | 2 | 00/CB1A : A9 FF | LDA #{$FF} + 551 | 1 AppleIISd.s 606 | Code | 11 | | 3 | 00/CB1C : 9D 80 C0 | STA {$C080},X ; send dummy + 552 | 1 AppleIISd.s 607 | Code | 11 | | 3 | 00/CB1F : 3C 81 C0 | ozunid_19 BIT {{$C080}+1},X + 553 | 1 AppleIISd.s 608 | Code | 11 | | 2 | 00/CB22 : 10 FB | BPL ozunid_19 + 554 | 1 AppleIISd.s 609 | Code | 11 | | 2 | 00/CB24 : A9 FE | LDA #$FE + 555 | 1 AppleIISd.s 610 | Code | 11 | | 3 | 00/CB26 : 9D 80 C0 | STA {$C080},X ; send data token + 556 | 1 AppleIISd.s 611 | Code | 11 | | 3 | 00/CB29 : 3C 81 C0 | ozunid_20 BIT {{$C080}+1},X + 557 | 1 AppleIISd.s 612 | Code | 11 | | 2 | 00/CB2C : 10 FB | BPL ozunid_20 + 558 | 1 AppleIISd.s 613 | Empty | 11 | | 0 | 00/CB2E | + 559 | 1 AppleIISd.s 614 | Code | 11 | | 2 | 00/CB2E : A0 02 | LDY #2 ; send data to card + 560 | 1 AppleIISd.s 615 | Code | 11 | | 2 | 00/CB30 : 64 3C | ozunid_21 STZ {$3C} + 561 | 1 AppleIISd.s 616 | Code | 11 | | 2 | 00/CB32 : B2 44 | ozunid_22 LDA ($44) + 562 | 1 AppleIISd.s 617 | Code | 11 | | 3 | 00/CB34 : 9D 80 C0 | STA {$C080},X + 563 | 1 AppleIISd.s 618 | Code | 11 | | 3 | 00/CB37 : 3C 81 C0 | _WAIT3 BIT {{$C080}+1},X + 564 | 1 AppleIISd.s 619 | Code | 11 | | 2 | 00/CB3A : 10 FB | BPL _WAIT3 + 565 | 1 AppleIISd.s 620 | Code | 11 | | 2 | 00/CB3C : E6 44 | INC $44 + 566 | 1 AppleIISd.s 621 | Code | 11 | | 2 | 00/CB3E : D0 02 | BNE ozunid_23 + 567 | 1 AppleIISd.s 622 | Code | 11 | | 2 | 00/CB40 : E6 45 | INC $45 ; inc msb on page boundary + 568 | 1 AppleIISd.s 623 | Code | 11 | | 2 | 00/CB42 : E6 3C | ozunid_23 INC {$3C} + 569 | 1 AppleIISd.s 624 | Code | 11 | | 2 | 00/CB44 : D0 EC | BNE ozunid_22 + 570 | 1 AppleIISd.s 625 | Code | 11 | | 1 | 00/CB46 : 88 | DEY + 571 | 1 AppleIISd.s 626 | Code | 11 | | 2 | 00/CB47 : D0 E7 | BNE ozunid_21 + 572 | 1 AppleIISd.s 627 | Empty | 11 | | 0 | 00/CB49 | + 573 | 1 AppleIISd.s 628 | Code | 11 | | 2 | 00/CB49 : A0 02 | LDY #2 ; send 2 dummy crc bytes + 574 | 1 AppleIISd.s 629 | Code | 11 | | 3 | 00/CB4B : 9D 80 C0 | ozunid_24 STA {$C080},X + 575 | 1 AppleIISd.s 630 | Code | 11 | | 3 | 00/CB4E : 3C 81 C0 | _WAIT4 BIT {{$C080}+1},X + 576 | 1 AppleIISd.s 631 | Code | 11 | | 2 | 00/CB51 : 10 FB | BPL _WAIT4 + 577 | 1 AppleIISd.s 632 | Code | 11 | | 1 | 00/CB53 : 88 | DEY + 578 | 1 AppleIISd.s 633 | Code | 11 | | 2 | 00/CB54 : D0 F5 | BNE ozunid_24 + 579 | 1 AppleIISd.s 634 | Empty | 11 | | 0 | 00/CB56 | + 580 | 1 AppleIISd.s 635 | Code | 11 | | 2 | 00/CB56 : A9 FF | LDA #{$FF} ; get data response + 581 | 1 AppleIISd.s 636 | Code | 11 | | 3 | 00/CB58 : 9D 80 C0 | STA {$C080},X + 582 | 1 AppleIISd.s 637 | Code | 11 | | 3 | 00/CB5B : 3C 81 C0 | _WAIT5 BIT {{$C080}+1},X + 583 | 1 AppleIISd.s 638 | Code | 11 | | 2 | 00/CB5E : 10 FB | BPL _WAIT5 + 584 | 1 AppleIISd.s 639 | Code | 11 | | 3 | 00/CB60 : BD 80 C0 | LDA {$C080},X + 585 | 1 AppleIISd.s 640 | Code | 11 | | 2 | 00/CB63 : 29 1F | AND #$1F + 586 | 1 AppleIISd.s 641 | Code | 11 | | 2 | 00/CB65 : C9 05 | CMP #$05 + 587 | 1 AppleIISd.s 642 | Code | 11 | | 2 | 00/CB67 : D0 1A | BNE _ERROR ; check for write error + 588 | 1 AppleIISd.s 643 | Empty | 11 | | 0 | 00/CB69 | + 589 | 1 AppleIISd.s 644 | Code | 11 | | 2 | 00/CB69 : A9 FF | _WAIT6 LDA #{$FF} ; wait for write cycle + 590 | 1 AppleIISd.s 645 | Code | 11 | | 3 | 00/CB6B : 9D 80 C0 | STA {$C080},X ; to complete + 591 | 1 AppleIISd.s 646 | Code | 11 | | 3 | 00/CB6E : 3C 81 C0 | _WAIT61 BIT {{$C080}+1},X + 592 | 1 AppleIISd.s 647 | Code | 11 | | 2 | 00/CB71 : 10 FB | BPL _WAIT61 + 593 | 1 AppleIISd.s 648 | Code | 11 | | 3 | 00/CB73 : BD 80 C0 | LDA {$C080},X + 594 | 1 AppleIISd.s 649 | Code | 11 | | 2 | 00/CB76 : C9 00 | CMP #$00 + 595 | 1 AppleIISd.s 650 | Code | 11 | | 2 | 00/CB78 : F0 EF | BEQ _WAIT6 + 596 | 1 AppleIISd.s 651 | Empty | 11 | | 0 | 00/CB7A | + 597 | 1 AppleIISd.s 652 | Code | 11 | | 2 | 00/CB7A : A9 0F | LDA #{$0F} ; disable /CS + 598 | 1 AppleIISd.s 653 | Code | 11 | | 3 | 00/CB7C : 9D 83 C0 | STA {{$C080}+3},X + 599 | 1 AppleIISd.s 654 | Code | 11 | | 1 | 00/CB7F : 18 | CLC ; no error + 600 | 1 AppleIISd.s 655 | Code | 11 | | 2 | 00/CB80 : A9 00 | LDA #0 + 601 | 1 AppleIISd.s 656 | Code | 11 | | 1 | 00/CB82 : 60 | RTS + 602 | 1 AppleIISd.s 657 | Empty | 11 | | 0 | 00/CB83 | + 603 | 1 AppleIISd.s 658 | Empty | 11 | | 0 | 00/CB83 | _ERROR + 604 | 1 AppleIISd.s 659 | Code | 11 | | 2 | 00/CB83 : A9 FF | _WAIT7 LDA #{$FF} ; wait for write cycle + 605 | 1 AppleIISd.s 660 | Code | 11 | | 3 | 00/CB85 : 9D 80 C0 | STA {$C080},X ; to complete + 606 | 1 AppleIISd.s 661 | Code | 11 | | 3 | 00/CB88 : 3C 81 C0 | _WAIT71 BIT {{$C080}+1},X + 607 | 1 AppleIISd.s 662 | Code | 11 | | 2 | 00/CB8B : 10 FB | BPL _WAIT71 + 608 | 1 AppleIISd.s 663 | Code | 11 | | 3 | 00/CB8D : BD 80 C0 | LDA {$C080},X + 609 | 1 AppleIISd.s 664 | Code | 11 | | 2 | 00/CB90 : C9 00 | CMP #$00 + 610 | 1 AppleIISd.s 665 | Code | 11 | | 2 | 00/CB92 : F0 EF | BEQ _WAIT7 + 611 | 1 AppleIISd.s 666 | Code | 11 | | 2 | 00/CB94 : A9 0F | LDA #{$0F} + 612 | 1 AppleIISd.s 667 | Code | 11 | | 3 | 00/CB96 : 9D 83 C0 | STA {{$C080}+3},X ; disable /CS + 613 | 1 AppleIISd.s 668 | Code | 11 | | 1 | 00/CB99 : 38 | SEC ; an error occured + 614 | 1 AppleIISd.s 669 | Code | 11 | | 2 | 00/CB9A : A9 27 | LDA #$27 + 615 | 1 AppleIISd.s 670 | Code | 11 | | 1 | 00/CB9C : 60 | RTS + 616 | 1 AppleIISd.s 671 | Empty | 11 | | 0 | 00/CB9D | + 617 | 1 AppleIISd.s 672 | Empty | 11 | | 0 | 00/CB9D | + 618 | 1 AppleIISd.s 673 | Comment | 11 | | 0 | 00/CB9D | ******************************** + 619 | 1 AppleIISd.s 674 | Comment | 11 | | 0 | 00/CB9D | * + 620 | 1 AppleIISd.s 675 | Comment | 11 | | 0 | 00/CB9D | * Format + 621 | 1 AppleIISd.s 676 | Comment | 11 | | 0 | 00/CB9D | * not supported! + 622 | 1 AppleIISd.s 677 | Comment | 11 | | 0 | 00/CB9D | * + 623 | 1 AppleIISd.s 678 | Comment | 11 | | 0 | 00/CB9D | ******************************** + 624 | 1 AppleIISd.s 679 | Empty | 11 | | 0 | 00/CB9D | + 625 | 1 AppleIISd.s 680 | Code | 11 | | 1 | 00/CB9D : 38 | FORMAT SEC + 626 | 1 AppleIISd.s 681 | Code | 11 | | 2 | 00/CB9E : A9 01 | LDA #$01 ; invalid command + 627 | 1 AppleIISd.s 682 | Code | 11 | | 1 | 00/CBA0 : 60 | RTS + 628 | 1 AppleIISd.s 683 | Empty | 11 | | 0 | 00/CBA1 | + 629 | 1 AppleIISd.s 684 | Empty | 11 | | 0 | 00/CBA1 | + 630 | 1 AppleIISd.s 685 | Data | 11 | | 3 | 00/CBA1 : 40 00 00 | CMD0 HEX 400000 + 631 | 1 AppleIISd.s 686 | Data | 11 | | 3 | 00/CBA4 : 00 00 95 | HEX 000095 + 632 | 1 AppleIISd.s 687 | Data | 11 | | 3 | 00/CBA7 : 41 00 00 | CMD1 HEX 410000 + 633 | 1 AppleIISd.s 688 | Data | 11 | | 3 | 00/CBAA : 00 00 F9 | HEX 0000F9 + 634 | 1 AppleIISd.s 689 | Data | 11 | | 3 | 00/CBAD : 48 00 00 | CMD8 HEX 480000 + 635 | 1 AppleIISd.s 690 | Data | 11 | | 3 | 00/CBB0 : 01 AA 87 | HEX 01AA87 + 636 | 1 AppleIISd.s 691 | Data | 11 | | 3 | 00/CBB3 : 50 00 00 | CMD16 HEX 500000 + 637 | 1 AppleIISd.s 692 | Data | 11 | | 3 | 00/CBB6 : 02 00 FF | HEX 0200FF + 638 | 1 AppleIISd.s 693 | Data | 11 | | 3 | 00/CBB9 : 77 00 00 | CMD55 HEX 770000 + 639 | 1 AppleIISd.s 694 | Data | 11 | | 3 | 00/CBBC : 00 00 65 | HEX 000065 + 640 | 1 AppleIISd.s 695 | Data | 11 | | 3 | 00/CBBF : 69 40 00 | ACMD4140 HEX 694000 + 641 | 1 AppleIISd.s 696 | Data | 11 | | 3 | 00/CBC2 : 00 00 77 | HEX 000077 + 642 | 1 AppleIISd.s 697 | Data | 11 | | 3 | 00/CBC5 : 69 00 00 | ACMD410 HEX 690000 + 643 | 1 AppleIISd.s 698 | Data | 11 | | 3 | 00/CBC8 : 00 00 FF | HEX 0000FF + 644 | 1 AppleIISd.s 699 | Empty | 11 | | 0 | 00/CBCB | +------+-----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- diff --git a/AppleIISd.s b/AppleIISd.s index 9891a27..c564c2c 100644 --- a/AppleIISd.s +++ b/AppleIISd.s @@ -10,40 +10,40 @@ * ******************************** - DAT + DAT - XC ; enable 65C02 code -DEBUG = 0 - DO DEBUG - ORG $8000 - ELSE - ORG $C800 ; Expansion ROM - FIN + XC ; enable 65C02 code +DEBUG = 0 + DO DEBUG + ORG $8000 + ELSE + ORG $C800 ; Expansion ROM + FIN * Memory defines -SLOT16 = $2B ; $s0 -> slot * 16 -WORK = $3C -SLOT = $3D ; $0s -CMDLO = $40 -CMDHI = $41 +SLOT16 = $2B ; $s0 -> slot * 16 +WORK = $3C +SLOT = $3D ; $0s +CMDLO = $40 +CMDHI = $41 -CURSLOT = $07F8 ; $Cs -DATA = $C080 -CTRL = DATA+1 -DIV = DATA+2 -SS = DATA+3 -R30 = $0478 -R31 = $04F8 -R32 = $0578 -R33 = $05F8 -INITED = $0678 +CURSLOT = $07F8 ; $Cs +DATA = $C080 +CTRL = DATA+1 +DIV = DATA+2 +SS = DATA+3 +R30 = $0478 +R31 = $04F8 +R32 = $0578 +R33 = $05F8 +INITED = $0678 * Constants -SSNONE = $0F -SS0 = $0E -DUMMY = $FF +SSNONE = $0F +SS0 = $0E +DUMMY = $FF ******************************** @@ -54,105 +54,97 @@ DUMMY = $FF * signature bytes - LDX #$20 - LDY #$00 - LDX #$03 - ===== Page 2 ===== - - STX WORK + LDX #$20 + LDY #$00 + LDX #$03 + STX WORK * find slot nr - DO DEBUG - LDA #$04 - STA SLOT - LDA #$C4 - STA CURSLOT - LDA #$40 - STA SLOT16 - ELSE - JSR $FF58 - TSX - LDA $0100,X - STA CURSLOT ; $Cs - AND #$0F - STA SLOT ; $0s - ASL A - ASL A - ASL A - ASL A - STA SLOT16 ; $s0 - FIN - TAX ; X holds now SLOT16 + DO DEBUG + LDA #$04 + STA SLOT + LDA #$C4 + STA CURSLOT + LDA #$40 + STA SLOT16 + ELSE + JSR $FF58 + TSX + LDA $0100,X + STA CURSLOT ; $Cs + AND #$0F + STA SLOT ; $0s + ASL A + ASL A + ASL A + ASL A + STA SLOT16 ; $s0 + FIN + TAX ; X holds now SLOT16 - BIT $CFFF - JSR INIT + BIT $CFFF + JSR INIT - DO 0 + DO DEBUG * * TODO: check for init error * * see if slot has a driver already - LDX $BF31 ; get devcnt -INSLP LDA $BF32,X ; get a devnum - AND #$70 ; isolate slot - CMP SLOT16 ; slot? - BEQ INSOUT ; yes, skip it - DEX - BPL INSLP ; keep up the search + LDX $BF31 ; get devcnt +INSLP LDA $BF32,X ; get a devnum + AND #$70 ; isolate slot + CMP SLOT16 ; slot? + BEQ INSOUT ; yes, skip it + DEX + BPL INSLP ; keep up the search * restore the devnum to the list - LDX $BF31 ; get devcnt again - CPX #$0D ; device table full? - BNE INSLP2 + LDX $BF31 ; get devcnt again + CPX #$0D ; device table full? + BNE INSLP2 - JSR $FF3A ; bell - JMP INSOUT ; do something! + JSR $FF3A ; bell + JMP INSOUT ; do something! -INSLP2 LDA $BF32-1,X ; move all entries down - STA $BF32,X ; to make room at front - DEX ; for a new entry - BNE INSLP2 - ===== Page 3 ===== - - LDA #$04 ; ProFile type device - ORA SLOT16 - STA $BF32 ; slot, drive 1 at top of list - INC $BF31 ; update devcnt +INSLP2 LDA $BF32-1,X ; move all entries down + STA $BF32,X ; to make room at front + DEX ; for a new entry + BNE INSLP2 + LDA #$04 ; ProFile type device + ORA SLOT16 + STA $BF32 ; slot, drive 1 at top of list + INC $BF31 ; update devcnt * now insert the device driver vector - LDA SLOT - ASL - TAX - LDA #DRIVER - ELSE - LDA CURSLOT - FIN - STA $BF11,X + LDA SLOT + ASL + TAX + LDA #DRIVER + STA $BF11,X -INSOUT RTS - FIN +INSOUT RTS + FIN -BOOT LDA #$01 - STA $42 ; load command - LDA SLOT16 - TAX - STA $43 ; slot number - STZ $44 ; buffer lo - LDA #$08 - STA $45 ; buffer hi - STZ $46 ; block lo - STZ $47 ; block hi - BIT $CFFF - JSR READ ; call driver - JMP $801 ; goto bootloader +BOOT LDA #$01 + STA $42 ; load command + LDA SLOT16 + TAX + STA $43 ; slot number + STZ $44 ; buffer lo + LDA #$08 + STA $45 ; buffer hi + STZ $46 ; block lo + STZ $47 ; block hi + BIT $CFFF + JSR READ ; call driver + JMP $801 ; goto bootloader ******************************** @@ -161,63 +153,61 @@ BOOT LDA #$01 * ******************************** -DRIVER CLD - DO DEBUG - LDA #$04 - STA SLOT - LDA #$C4 - STA CURSLOT - LDA #$40 - STA SLOT16 - ELSE - JSR $FF58 ; find slot nr - TSX - LDA $0100,X - STA CURSLOT ; $Cs - AND #$0F - ===== Page 4 ===== - - STA SLOT ; $0s - ASL A - ASL A - ASL A - ASL A - STA SLOT16 ; $s0 - FIN - TAX ; X holds now SLOT16 +DRIVER CLD + DO DEBUG + LDA #$04 + STA SLOT + LDA #$C4 + STA CURSLOT + LDA #$40 + STA SLOT16 + ELSE + JSR $FF58 ; find slot nr + TSX + LDA $0100,X + STA CURSLOT ; $Cs + AND #$0F + STA SLOT ; $0s + ASL A + ASL A + ASL A + ASL A + STA SLOT16 ; $s0 + FIN + TAX ; X holds now SLOT16 - BIT $CFFF - LDY SLOT - LDA INITED,Y ; check for init - CMP #$01 - BCC :INIT -:CMD LDA $42 ; get command - CMP #$00 - BEQ :STATUS - CMP #$01 - BEQ :READ - CMP #$02 - BEQ :WRITE - CMP #$03 - BEQ :FORMAT - SEC ; unknown command - LDA #$01 - RTS + BIT $CFFF + LDY SLOT + LDA INITED,Y ; check for init + CMP #$01 + BCC :INIT +:CMD LDA $42 ; get command + CMP #$00 + BEQ :STATUS + CMP #$01 + BEQ :READ + CMP #$02 + BEQ :WRITE + CMP #$03 + BEQ :FORMAT + SEC ; unknown command + LDA #$01 + RTS -:STATUS JMP STATUS -:READ JMP READ -:WRITE JMP WRITE -:FORMAT JMP FORMAT -:INIT JSR INIT - BRA :CMD +:STATUS JMP STATUS +:READ JMP READ +:WRITE JMP WRITE +:FORMAT JMP FORMAT +:INIT JSR INIT + BRA :CMD * Signature bytes - DS \ ; fill with zeroes - DS -4 ; locate to $C8FC - DW $FFFF ; 65535 blocks - DB $47 ; Status bits - DB #CMD0 - STA CMDHI - JSR CMD - JSR GETR1 ; get response - CMP #$01 - BNE :ERROR1 ; error! + LDA #CMD0 + STA CMDHI + JSR CMD + JSR GETR1 ; get response + CMP #$01 + BNE :ERROR1 ; error! - LDA #CMD8 - STA CMDHI - JSR CMD - JSR GETR3 - CMP #$01 - BNE :SDV1 ; may be SD Ver. 1 + LDA #CMD8 + STA CMDHI + JSR CMD + JSR GETR3 + CMP #$01 + BNE :SDV1 ; may be SD Ver. 1 * check for $01aa match! -:SDV2 LDA #CMD55 - STA CMDHI - JSR CMD - JSR GETR1 - LDA #ACMD4140 - STA CMDHI - JSR CMD - JSR GETR1 - CMP #$01 - BEQ :SDV2 ; wait for ready - CMP #$00 - BNE :ERROR1 ; error! +:SDV2 LDA #CMD55 + STA CMDHI + JSR CMD + JSR GETR1 + LDA #ACMD4140 + STA CMDHI + JSR CMD + JSR GETR1 + CMP #$01 + BEQ :SDV2 ; wait for ready + CMP #$00 + BNE :ERROR1 ; error! * send CMD58 * SD Ver. 2 initialized! - JMP :BLOCKSZ + JMP :BLOCKSZ -:ERROR1 JMP :IOERROR ; needed for far jump - - ===== Page 6 ===== - -:SDV1 LDA #CMD55 - STA CMDHI - JSR CMD ; ignore response - LDA #ACMD410 - STA CMDHI - JSR CMD - JSR GETR1 - CMP #$01 - BEQ :SDV1 ; wait for ready - CMP #$00 - BNE :MMC ; may be MMC card +:ERROR1 JMP :IOERROR ; needed for far jump + +:SDV1 LDA #CMD55 + STA CMDHI + JSR CMD ; ignore response + LDA #ACMD410 + STA CMDHI + JSR CMD + JSR GETR1 + CMP #$01 + BEQ :SDV1 ; wait for ready + CMP #$00 + BNE :MMC ; may be MMC card * SD Ver. 1 initialized! - JMP :BLOCKSZ + JMP :BLOCKSZ -:MMC LDA #CMD1 - STA CMDHI -:LOOP1 JSR CMD - JSR GETR1 - CMP #$01 - BEQ :LOOP1 ; wait for ready - CMP #$00 - BNE :IOERROR ; error! +:MMC LDA #CMD1 + STA CMDHI +:LOOP1 JSR CMD + JSR GETR1 + CMP #$01 + BEQ :LOOP1 ; wait for ready + CMP #$00 + BNE :IOERROR ; error! * MMC Ver. 3 initialized! -:BLOCKSZ LDA #CMD16 - STA CMDHI - JSR CMD - JSR GETR1 - CMP #$00 - BNE :IOERROR ; error! +:BLOCKSZ LDA #CMD16 + STA CMDHI + JSR CMD + JSR GETR1 + CMP #$00 + BNE :IOERROR ; error! + +:END LDY SLOT ; all ok + LDA #$01 + STA INITED,Y ; initialized + CLC + LDY #0 + BCC :END1 +:CDERROR SEC + LDY #$28 ; no card error + BCS :END1 +:IOERROR SEC + LDY #$27 ; init error +:END1 LDA #SSNONE ; deselect card + STA SS,X + LDA #0 ; set div to 2 + STA DIV,X + TYA ; retval in A + RTS -:END LDY SLOT ; all ok - LDA #$01 - STA INITED,Y ; initialized - CLC - LDY #0 - BCC :END1 -:CDERROR SEC - LDY #$28 ; no card error - BCS :END1 -:IOERROR SEC - LDY #$27 ; init error -:END1 LDA #SSNONE ; deselect card - STA SS,X - LDA #0 ; set div to 2 - STA DIV,X - TYA ; retval in A - RTS - - ===== Page 7 ===== - ******************************** * @@ -362,17 +346,17 @@ INIT CLD * ******************************** -CMD PHY - LDY #0 -:LOOP LDA (CMDLO),Y - STA DATA,X -:WAIT BIT CTRL,X ; TC is in N - BPL :WAIT - INY - CPY #6 - BCC :LOOP - PLY - RTS +CMD PHY + LDY #0 +:LOOP LDA (CMDLO),Y + STA DATA,X +:WAIT BIT CTRL,X ; TC is in N + BPL :WAIT + INY + CPY #6 + BCC :LOOP + PLY + RTS ******************************** @@ -382,18 +366,18 @@ CMD PHY * ******************************** -GETR1 LDA #DUMMY - STA DATA,X -:WAIT BIT CTRL,X - BPL :WAIT - LDA DATA,X ; get response - STA WORK ; save R1 - AND #$80 - BNE GETR1 ; wait for MSB=0 - LDA #DUMMY - STA DATA,X ; send another dummy - LDA WORK ; restore R1 - RTS +GETR1 LDA #DUMMY + STA DATA,X +:WAIT BIT CTRL,X + BPL :WAIT + LDA DATA,X ; get response + STA WORK ; save R1 + AND #$80 + BNE GETR1 ; wait for MSB=0 + LDA #DUMMY + STA DATA,X ; send another dummy + LDA WORK ; restore R1 + RTS ******************************** @@ -404,34 +388,32 @@ GETR1 LDA #DUMMY * ******************************** -GETR3 JSR GETR1 ; get R1 first - PHA ; save R1 - PHY ; save Y - LDY #04 ; load counter -:LOOP LDA #DUMMY ; send dummy - STA DATA,X -:WAIT BIT CTRL,X - ===== Page 8 ===== - - BPL :WAIT - LDA DATA,X - PHA - DEY - BNE :LOOP ; do 4 times - LDY SLOT - PLA - STA R33,Y ; save R3 - PLA - STA R32,Y - PLA - STA R31,Y - PLA - STA R30,Y - PLY ; restore Y - LDA #DUMMY - STA DATA,X ; send another dummy - PLA ; restore R1 - RTS +GETR3 JSR GETR1 ; get R1 first + PHA ; save R1 + PHY ; save Y + LDY #04 ; load counter +:LOOP LDA #DUMMY ; send dummy + STA DATA,X +:WAIT BIT CTRL,X + BPL :WAIT + LDA DATA,X + PHA + DEY + BNE :LOOP ; do 4 times + LDY SLOT + PLA + STA R33,Y ; save R3 + PLA + STA R32,Y + PLA + STA R31,Y + PLA + STA R30,Y + PLY ; restore Y + LDA #DUMMY + STA DATA,X ; send another dummy + PLA ; restore R1 + RTS ******************************** @@ -442,66 +424,64 @@ GETR3 JSR GETR1 ; get R1 first * ******************************** -BLOCK PHX ; save X - PHY ; save Y - LDX SLOT - LDA $46 ; store block num - STA R33,X ; in R30-R33 - LDA $47 - STA R32,X - LDA #0 - STA R31,X - STA R30,X +BLOCK PHX ; save X + PHY ; save Y + LDX SLOT + LDA $46 ; store block num + STA R33,X ; in R30-R33 + LDA $47 + STA R32,X + LDA #0 + STA R31,X + STA R30,X - LDY #9 ; ASL can't be used with Y -:LOOP ASL R33,X ; mul block num - ROL R32,X ; by 512 to get - ROL R31,X ; real address - ROL R30,X - DEY - BNE :LOOP - PLY ; restore Y - PLX ; restore X - RTS + LDY #9 ; ASL can't be used with Y +:LOOP ASL R33,X ; mul block num + ROL R32,X ; by 512 to get + ROL R31,X ; real address + ROL R30,X + DEY + BNE :LOOP + PLY ; restore Y + PLX ; restore X + RTS ******************************** * * Send SD command * Cmd is in A -* - ===== Page 9 ===== - +* ******************************** -COMMAND PHY ; save Y - LDY SLOT - STA DATA,X ; send command -:WAIT BIT CTRL,X - BPL :WAIT -:ARG LDA R30,Y ; get arg from R30 on - STA DATA,X -:WAIT1 BIT CTRL,X - BPL :WAIT1 - LDA R31,Y - STA DATA,X -:WAIT11 BIT CTRL,X - BPL :WAIT11 - LDA R32,Y - STA DATA,X -:WAIT12 BIT CTRL,X - BPL :WAIT12 - LDA R33,Y - STA DATA,X -:WAIT13 BIT CTRL,X - BPL :WAIT13 - LDA #DUMMY - STA DATA,X ; dummy crc -:WAIT2 BIT CTRL,X - BPL :WAIT2 - JSR GETR1 - PLY ; restore Y - RTS +COMMAND PHY ; save Y + LDY SLOT + STA DATA,X ; send command +:WAIT BIT CTRL,X + BPL :WAIT +:ARG LDA R30,Y ; get arg from R30 on + STA DATA,X +:WAIT1 BIT CTRL,X + BPL :WAIT1 + LDA R31,Y + STA DATA,X +:WAIT11 BIT CTRL,X + BPL :WAIT11 + LDA R32,Y + STA DATA,X +:WAIT12 BIT CTRL,X + BPL :WAIT12 + LDA R33,Y + STA DATA,X +:WAIT13 BIT CTRL,X + BPL :WAIT13 + LDA #DUMMY + STA DATA,X ; dummy crc +:WAIT2 BIT CTRL,X + BPL :WAIT2 + JSR GETR1 + PLY ; restore Y + RTS ******************************** @@ -522,15 +502,13 @@ COMMAND PHY ; save Y * ******************************** -STATUS CLC ; no error - LDA #0 - LDX #$FF ; 32 MB partition - LDY #$FF - RTS +STATUS CLC ; no error + LDA #0 + LDX #$FF ; 32 MB partition + LDY #$FF + RTS -* TODO: check for card detect and write protect! - ===== Page 10 ===== - +* TODO: check for card detect and write protect! ******************************** @@ -550,55 +528,53 @@ STATUS CLC ; no error * TODO: check for card detect! -READ JSR BLOCK ; calc block address +READ JSR BLOCK ; calc block address - LDA #SS0 ; enable /CS - STA SS,X - LDA #$51 ; send CMD17 - JSR COMMAND ; send command + LDA #SS0 ; enable /CS + STA SS,X + LDA #$51 ; send CMD17 + JSR COMMAND ; send command -:GETTOK LDA #DUMMY ; get data token - STA DATA,X -:WAIT BIT CTRL,X - BPL :WAIT - LDA DATA,X ; get response +:GETTOK LDA #DUMMY ; get data token + STA DATA,X +:WAIT BIT CTRL,X + BPL :WAIT + LDA DATA,X ; get response * * TODO: check for error! * - CMP #$FE - BNE :GETTOK ; wait for $FE + CMP #$FE + BNE :GETTOK ; wait for $FE - LDY #2 ; read data from card -:LOOPY STZ WORK -:LOOPW LDA #DUMMY - STA DATA,X -:WAIT1 BIT CTRL,X - BPL :WAIT1 - LDA DATA,X - STA ($44) - INC $44 - BNE :INW - INC $45 ; inc msb on page boundary -:INW INC WORK - BNE :LOOPW - DEY - BNE :LOOPY + LDY #2 ; read data from card +:LOOPY STZ WORK +:LOOPW LDA #DUMMY + STA DATA,X +:WAIT1 BIT CTRL,X + BPL :WAIT1 + LDA DATA,X + STA ($44) + INC $44 + BNE :INW + INC $45 ; inc msb on page boundary +:INW INC WORK + BNE :LOOPW + DEY + BNE :LOOPY - LDY #2 -:CRC LDA #DUMMY ; read 2 bytes crc - STA DATA,X ; and ignore -:WAIT2 BIT CTRL,X - ===== Page 11 ===== - - BPL :WAIT2 - DEY - BNE :CRC + LDY #2 +:CRC LDA #DUMMY ; read 2 bytes crc + STA DATA,X ; and ignore +:WAIT2 BIT CTRL,X + BPL :WAIT2 + DEY + BNE :CRC - LDA #SSNONE - STA SS,X ; disable /CS - CLC ; no error - LDA #$00 - RTS + LDA #SSNONE + STA SS,X ; disable /CS + CLC ; no error + LDA #$00 + RTS ******************************** @@ -619,81 +595,79 @@ READ JSR BLOCK ; calc block address * TODO: check for card detect and write protect! -WRITE JSR BLOCK ; calc block address +WRITE JSR BLOCK ; calc block address - LDA #SS0 ; enable /CS - STA SS,X - LDA #$58 ; send CMD24 - JSR COMMAND ; send command + LDA #SS0 ; enable /CS + STA SS,X + LDA #$58 ; send CMD24 + JSR COMMAND ; send command - LDA #DUMMY - STA DATA,X ; send dummy -:WAIT1 BIT CTRL,X - BPL :WAIT1 - LDA #$FE - STA DATA,X ; send data token -:WAIT2 BIT CTRL,X - BPL :WAIT2 + LDA #DUMMY + STA DATA,X ; send dummy +:WAIT1 BIT CTRL,X + BPL :WAIT1 + LDA #$FE + STA DATA,X ; send data token +:WAIT2 BIT CTRL,X + BPL :WAIT2 - LDY #2 ; send data to card -:LOOPY STZ WORK -:LOOPW LDA ($44) - STA DATA,X -:WAIT3 BIT CTRL,X - BPL :WAIT3 - INC $44 - BNE :INW - INC $45 ; inc msb on page boundary -:INW INC WORK - BNE :LOOPW - DEY - ===== Page 12 ===== - - BNE :LOOPY + LDY #2 ; send data to card +:LOOPY STZ WORK +:LOOPW LDA ($44) + STA DATA,X +:WAIT3 BIT CTRL,X + BPL :WAIT3 + INC $44 + BNE :INW + INC $45 ; inc msb on page boundary +:INW INC WORK + BNE :LOOPW + DEY + BNE :LOOPY - LDY #2 ; send 2 dummy crc bytes -:CRC STA DATA,X -:WAIT4 BIT CTRL,X - BPL :WAIT4 - DEY - BNE :CRC + LDY #2 ; send 2 dummy crc bytes +:CRC STA DATA,X +:WAIT4 BIT CTRL,X + BPL :WAIT4 + DEY + BNE :CRC - LDA #DUMMY ; get data response - STA DATA,X -:WAIT5 BIT CTRL,X - BPL :WAIT5 - LDA DATA,X - AND #$1F - CMP #$05 - BNE :ERROR ; check for write error + LDA #DUMMY ; get data response + STA DATA,X +:WAIT5 BIT CTRL,X + BPL :WAIT5 + LDA DATA,X + AND #$1F + CMP #$05 + BNE :ERROR ; check for write error -:WAIT6 LDA #DUMMY ; wait for write cycle - STA DATA,X ; to complete -:WAIT61 BIT CTRL,X - BPL :WAIT61 - LDA DATA,X - CMP #$00 - BEQ :WAIT6 +:WAIT6 LDA #DUMMY ; wait for write cycle + STA DATA,X ; to complete +:WAIT61 BIT CTRL,X + BPL :WAIT61 + LDA DATA,X + CMP #$00 + BEQ :WAIT6 - LDA #SSNONE ; disable /CS - STA SS,X - CLC ; no error - LDA #0 - RTS + LDA #SSNONE ; disable /CS + STA SS,X + CLC ; no error + LDA #0 + RTS :ERROR -:WAIT7 LDA #DUMMY ; wait for write cycle - STA DATA,X ; to complete -:WAIT71 BIT CTRL,X - BPL :WAIT71 - LDA DATA,X - CMP #$00 - BEQ :WAIT7 - LDA #SSNONE - STA SS,X ; disable /CS - SEC ; an error occured - LDA #$27 - RTS +:WAIT7 LDA #DUMMY ; wait for write cycle + STA DATA,X ; to complete +:WAIT71 BIT CTRL,X + BPL :WAIT71 + LDA DATA,X + CMP #$00 + BEQ :WAIT7 + LDA #SSNONE + STA SS,X ; disable /CS + SEC ; an error occured + LDA #$27 + RTS ******************************** @@ -703,24 +677,22 @@ WRITE JSR BLOCK ; calc block address * ******************************** -FORMAT SEC - LDA #$01 ; invalid command - RTS - ===== Page 13 ===== - +FORMAT SEC + LDA #$01 ; invalid command + RTS -CMD0 HEX 400000 - HEX 000095 -CMD1 HEX 410000 - HEX 0000F9 -CMD8 HEX 480000 - HEX 01AA87 -CMD16 HEX 500000 - HEX 0200FF -CMD55 HEX 770000 - HEX 000065 -ACMD4140 HEX 694000 - HEX 000077 -ACMD410 HEX 690000 - HEX 0000FF +CMD0 HEX 400000 + HEX 000095 +CMD1 HEX 410000 + HEX 0000F9 +CMD8 HEX 480000 + HEX 01AA87 +CMD16 HEX 500000 + HEX 0200FF +CMD55 HEX 770000 + HEX 000065 +ACMD4140 HEX 694000 + HEX 000077 +ACMD410 HEX 690000 + HEX 0000FF diff --git a/make.bat b/make.bat new file mode 100644 index 0000000..ea1e98f --- /dev/null +++ b/make.bat @@ -0,0 +1,5 @@ + +merlin32 -V "C:\Program Files (x86)\Merlin32\Library" AppleIISd.s +move AppleIISd AppleIISd.bin +move AppleIISd_Output.txt AppleIISd.lst +del /AH _FileInformation.txt