From f3751b90fb6167e0520dc8b718c64e0fe47d82ca Mon Sep 17 00:00:00 2001 From: Florian Reitz Date: Sun, 27 Aug 2017 00:37:54 +0200 Subject: [PATCH] 7MHz clock used, read/write improved reverted to Merlin-8 --- AppleIISd.bin | Bin 975 -> 914 bytes AppleIISd.lst | 1457 ++++++++++++++++++++++++++----------------------- AppleIISd.s | 154 +++--- AppleIISd.s19 | 101 ++-- README.md | 2 +- make.bat | 5 - 6 files changed, 904 insertions(+), 815 deletions(-) delete mode 100644 make.bat diff --git a/AppleIISd.bin b/AppleIISd.bin index c5d1d067b37739d783427dde696b909b2b3bbec6..e138100318572c41c35140cbd0b57d27f2011a02 100644 GIT binary patch delta 516 zcmX@lK8amok-`FoMa*qB3K9Qz?PXxpag;3tE0l>lM3HYo@BgWxv~TyB6JEU zqP4OCA@cp?$~I))NyZNkPBL6z_E~e%=ln?|l`DJDls$$jTbYL}Aqq6$8&F1hWfhX} z_V z$Avd5fwn?qSMmeR0GgQqX4G4(R7aQ`0WsMfZ1T!~Ko=}vO0n7G0%V|=2IND~-i8C3 q@+Vm@h{D~%@Zk%>29O_sN>0KAL6%vpWK3{i0D`HGKw|QGW(5E*(*+Lz literal 975 zcmc&zJ#W)M7(Rccp;DT%RSaOkP(t|uL9)}dq)i47uvM8n1S$CiwKBONgBPR-38@(@ z9Z?Lr2*lTbf)wEeiF1bDSQrojDP2HGi$DgXnseINbp>-z^7*~zdHme_p6_jm5VW}4 zlDOu-?g8emHA-2^Te>4{IJ19D@&nBT!~-Lb`o@y@5sP~mGvo?-5+Ny$1~O;305J{dx`BE`Uag+YO^gO!0qc1-davJq>N@8c7r z&XMa{%oXiV5(|u96eg?C^Q%dAAUlDBYZKlfno;H)7RZ?xMB8E*?)q;gi{{m!Tk=73 e++PajUnKyT&Yf!ju)tprkQ=o;o!4tY?EeLQW~wj% diff --git a/AppleIISd.lst b/AppleIISd.lst index 3da73db..07ab2fd 100644 --- a/AppleIISd.lst +++ b/AppleIISd.lst @@ -1,677 +1,780 @@ -------+-----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- - 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 | -------+-----------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + 1 ******************************** + 2 * + 3 * Apple][Sd Firmware + 4 * Version 0.6 + 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 + 27-AUG-17 0:31 + 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 FRXEN = $17 + 48 FRXDIS = $07 + 49 + 50 + 51 * signature bytes + 52 +C800: A2 20 53 LDX #$20 +C802: A0 00 54 LDY #$00 +C804: A2 03 55 LDX #$03 +C806: 86 3C 56 STX WORK + 57 + 58 * find slot nr + 59 + ===== Page 2 ===== + + 60 DO DEBUG + 61 LDA #$04 + 62 STA SLOT + 63 LDA #$C4 + 64 STA CURSLOT + 65 LDA #$40 + 66 STA SLOT16 + 67 ELSE +C808: 20 58 FF 68 JSR $FF58 +C80B: BA 69 TSX +C80C: BD 00 01 70 LDA $0100,X +C80F: 29 0F 71 AND #$0F +C811: 85 3D 72 STA SLOT ; $0s +C813: 09 C0 73 ORA #$C0 +C815: 8D F8 07 74 STA CURSLOT ; $Cs +C818: 0A 75 ASL A +C819: 0A 76 ASL A +C81A: 0A 77 ASL A +C81B: 0A 78 ASL A +C81C: 85 2B 79 STA SLOT16 ; $s0 + 80 FIN +C81E: AA 81 TAX ; X holds now SLOT16 + 82 +C81F: 2C FF CF 83 BIT $CFFF +C822: 20 00 C9 84 JSR INIT + 85 + 86 * + 87 * TODO: check for init error + 88 * + 89 + 90 ******************************** + 91 * + 92 * Install SD card driver + 93 * + 94 ******************************** + 95 + 96 DO DEBUG + 97 + 98 * see if slot has a driver already + 99 + 100 LDX $BF31 ; get devcnt + 101 INSTALL LDA $BF32,X ; get a devnum + 102 AND #$70 ; isolate slot + 103 CMP SLOT16 ; slot? + 104 BEQ :INSOUT ; yes, skip it + 105 DEX + 106 BPL INSTALL ; keep up the search + 107 + 108 * restore the devnum to the list + 109 + 110 LDX $BF31 ; get devcnt again + 111 CPX #$0D ; device table full? + 112 BNE :INST2 + 113 + 114 JSR $FF3A ; bell + 115 JMP :INSOUT ; do something! + 116 + ===== Page 3 ===== + + 117 :INST2 LDA $BF32-1,X ; move all entries down + 118 STA $BF32,X ; to make room at front + 119 DEX ; for a new entry + 120 BNE :INST2 + 121 LDA #$04 ; ProFile type device + 122 ORA SLOT16 + 123 STA $BF32 ; slot, drive 1 at top of list + 124 INC $BF31 ; update devcnt + 125 + 126 * now insert the device driver vector + 127 + 128 LDA SLOT + 129 ASL + 130 TAX + 131 LDA #DRIVER + 134 STA $BF11,X + 135 :INSOUT RTS + 136 + 137 + 138 ******************************** + 139 * + 140 * Boot from SD card + 141 * + 142 ******************************** + 143 + 144 ELSE + 145 +C825: A9 01 146 BOOT LDA #$01 +C827: 85 42 147 STA $42 ; load command +C829: A5 2B 148 LDA SLOT16 +C82B: AA 149 TAX +C82C: 85 43 150 STA $43 ; slot number +C82E: 64 44 151 STZ $44 ; buffer lo +C830: A9 08 152 LDA #$08 +C832: 85 45 153 STA $45 ; buffer hi +C834: 64 46 154 STZ $46 ; block lo +C836: 64 47 155 STZ $47 ; block hi +C838: 2C FF CF 156 BIT $CFFF +C83B: 20 9E CA 157 JSR READ ; call driver +C83E: 4C 01 08 158 JMP $801 ; goto bootloader + 159 + 160 FIN + 161 + 162 + 163 ******************************** + 164 * + 165 * Jump table + 166 * + 167 ******************************** + 168 +C841: D8 169 DRIVER CLD + 170 DO DEBUG + 171 LDA #$04 + 172 STA SLOT + 173 LDA #$C4 + ===== Page 4 ===== + + 174 STA CURSLOT + 175 LDA #$40 + 176 STA SLOT16 + 177 ELSE +C842: 20 58 FF 178 JSR $FF58 ; find slot nr +C845: BA 179 TSX +C846: BD 00 01 180 LDA $0100,X +C849: 29 0F 181 AND #$0F +C84B: 85 3D 182 STA SLOT ; $0s +C84D: 09 C0 183 ORA #$C0 +C84F: 8D F8 07 184 STA CURSLOT ; $Cs +C852: 0A 185 ASL A +C853: 0A 186 ASL A +C854: 0A 187 ASL A +C855: 0A 188 ASL A +C856: 85 2B 189 STA SLOT16 ; $s0 + 190 FIN +C858: AA 191 TAX ; X holds now SLOT16 + 192 +C859: 2C FF CF 193 BIT $CFFF +C85C: A4 3D 194 LDY SLOT +C85E: B9 78 06 195 LDA INITED,Y ; check for init +C861: C9 01 196 CMP #$01 +C863: 90 22 197 BCC :INIT +C865: A5 42 198 :CMD LDA $42 ; get command +C867: C9 00 199 CMP #$00 +C869: F0 10 200 BEQ :STATUS +C86B: C9 01 201 CMP #$01 +C86D: F0 0F 202 BEQ :READ +C86F: C9 02 203 CMP #$02 +C871: F0 0E 204 BEQ :WRITE +C873: C9 03 205 CMP #$03 +C875: F0 0D 206 BEQ :FORMAT +C877: 38 207 SEC ; unknown command +C878: A9 01 208 LDA #$01 +C87A: 60 209 RTS + 210 +C87B: 4C 96 CA 211 :STATUS JMP STATUS +C87E: 4C 9E CA 212 :READ JMP READ +C881: 4C F7 CA 213 :WRITE JMP WRITE +C884: 4C 64 CB 214 :FORMAT JMP FORMAT +C887: 20 00 C9 215 :INIT JSR INIT +C88A: 80 D9 216 BRA :CMD + 217 + 218 + 219 * Signature bytes + 220 +C88C: 00 00 00 221 DS \ ; fill with zeroes +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 + ===== Page 5 ===== + +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 +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 + 222 DS -4 ; locate to $xxFC +C8FC: FF FF 223 DW $FFFF ; 65535 blocks +C8FE: 47 224 DB $47 ; Status bits +C8FF: 41 225 DB #CMD0 +C92A: 85 41 261 STA CMDHI +C92C: 20 E3 C9 262 JSR CMD +C92F: 20 F7 C9 263 JSR GETR1 ; get response +C932: C9 01 264 CMP #$01 +C934: D0 39 265 BNE :ERROR1 ; error! + 266 +C936: A9 74 267 LDA #CMD8 +C93C: 85 41 270 STA CMDHI +C93E: 20 E3 C9 271 JSR CMD +C941: 20 12 CA 272 JSR GETR3 +C944: C9 01 273 CMP #$01 +C946: D0 2A 274 BNE :SDV1 ; may be SD Ver. 1 + 275 + 276 * check for $01aa match! +C948: A9 80 277 :SDV2 LDA #CMD55 +C94E: 85 41 280 STA CMDHI +C950: 20 E3 C9 281 JSR CMD +C953: 20 F7 C9 282 JSR GETR1 +C956: A9 86 283 LDA #ACMD4140 +C95C: 85 41 286 STA CMDHI +C95E: 20 E3 C9 287 JSR CMD +C961: 20 F7 C9 288 JSR GETR1 +C964: C9 01 289 CMP #$01 +C966: F0 E0 290 BEQ :SDV2 ; wait for ready +C968: C9 00 291 CMP #$00 +C96A: D0 03 292 BNE :ERROR1 ; error! + 293 * send CMD58 + 294 * SD Ver. 2 initialized! +C96C: 4C AC C9 295 JMP :BLOCKSZ + 296 +C96F: 4C CF C9 297 :ERROR1 JMP :IOERROR ; needed for far jump + 298 +C972: A9 80 299 :SDV1 LDA #CMD55 +C978: 85 41 302 STA CMDHI +C97A: 20 E3 C9 303 JSR CMD ; ignore response +C97D: A9 8C 304 LDA #ACMD410 +C983: 85 41 307 STA CMDHI +C985: 20 E3 C9 308 JSR CMD +C988: 20 F7 C9 309 JSR GETR1 +C98B: C9 01 310 CMP #$01 +C98D: F0 E3 311 BEQ :SDV1 ; wait for ready +C98F: C9 00 312 CMP #$00 +C991: D0 03 313 BNE :MMC ; may be MMC card + 314 * SD Ver. 1 initialized! +C993: 4C AC C9 315 JMP :BLOCKSZ + ===== Page 7 ===== + + 316 +C996: A9 6E 317 :MMC LDA #CMD1 +C99C: 85 41 320 STA CMDHI +C99E: 20 E3 C9 321 :LOOP1 JSR CMD +C9A1: 20 F7 C9 322 JSR GETR1 +C9A4: C9 01 323 CMP #$01 +C9A6: F0 F6 324 BEQ :LOOP1 ; wait for ready +C9A8: C9 00 325 CMP #$00 +C9AA: D0 23 326 BNE :IOERROR ; error! + 327 * MMC Ver. 3 initialized! + 328 +C9AC: A9 7A 329 :BLOCKSZ LDA #CMD16 +C9B2: 85 41 332 STA CMDHI +C9B4: 20 E3 C9 333 JSR CMD +C9B7: 20 F7 C9 334 JSR GETR1 +C9BA: C9 00 335 CMP #$00 +C9BC: D0 11 336 BNE :IOERROR ; error! + 337 +C9BE: A4 3D 338 :END LDY SLOT +C9C0: A9 01 339 LDA #$01 +C9C2: 99 78 06 340 STA INITED,Y ; initialized +C9C5: 18 341 CLC ; all ok +C9C6: A0 00 342 LDY #0 +C9C8: 90 08 343 BCC :END1 +C9CA: 38 344 :CDERROR SEC +C9CB: A0 28 345 LDY #$28 ; no card error +C9CD: B0 03 346 BCS :END1 +C9CF: 38 347 :IOERROR SEC +C9D0: A0 27 348 LDY #$27 ; init error +C9D2: A9 0F 349 :END1 LDA #SSNONE ; deselect card +C9D4: 9D 83 C0 350 STA SS,X +C9D7: A9 07 351 LDA #7 ; enable 7MHz +C9D9: 9D 81 C0 352 STA CTRL,X +C9DC: A9 00 353 LDA #0 ; set div to 2 +C9DE: 9D 82 C0 354 STA DIV,X +C9E1: 98 355 TYA ; retval in A +C9E2: 60 356 RTS + 357 + 358 + 359 ******************************** + 360 * + 361 * Send SD command + 362 * Call with command in CMDHI and CMDLO + 363 * + 364 ******************************** + 365 +C9E3: 5A 366 CMD PHY +C9E4: A0 00 367 LDY #0 +C9E6: B1 40 368 :LOOP LDA (CMDLO),Y +C9E8: 9D 80 C0 369 STA DATA,X +C9EB: 3C 81 C0 370 :WAIT BIT CTRL,X ; TC is in N +C9EE: 10 FB 371 BPL :WAIT +C9F0: C8 372 INY + ===== Page 8 ===== + +C9F1: C0 06 373 CPY #6 +C9F3: 90 F1 374 BCC :LOOP +C9F5: 7A 375 PLY +C9F6: 60 376 RTS + 377 + 378 + 379 ******************************** + 380 * + 381 * Get R1 + 382 * R1 is in A + 383 * + 384 ******************************** + 385 +C9F7: A9 FF 386 GETR1 LDA #DUMMY +C9F9: 9D 80 C0 387 STA DATA,X +C9FC: 3C 81 C0 388 :WAIT BIT CTRL,X +C9FF: 10 FB 389 BPL :WAIT +CA01: BD 80 C0 390 LDA DATA,X ; get response +CA04: 85 3C 391 STA WORK ; save R1 +CA06: 29 80 392 AND #$80 +CA08: D0 ED 393 BNE GETR1 ; wait for MSB=0 +CA0A: A9 FF 394 LDA #DUMMY +CA0C: 9D 80 C0 395 STA DATA,X ; send another dummy +CA0F: A5 3C 396 LDA WORK ; restore R1 +CA11: 60 397 RTS + 398 + 399 + 400 ******************************** + 401 * + 402 * Get R3 + 403 * R1 is in A + 404 * R3 is in scratchpad ram + 405 * + 406 ******************************** + 407 +CA12: 20 F7 C9 408 GETR3 JSR GETR1 ; get R1 first +CA15: 48 409 PHA ; save R1 +CA16: 5A 410 PHY ; save Y +CA17: A0 04 411 LDY #04 ; load counter +CA19: A9 FF 412 :LOOP LDA #DUMMY ; send dummy +CA1B: 9D 80 C0 413 STA DATA,X +CA1E: 3C 81 C0 414 :WAIT BIT CTRL,X +CA21: 10 FB 415 BPL :WAIT +CA23: BD 80 C0 416 LDA DATA,X +CA26: 48 417 PHA +CA27: 88 418 DEY +CA28: D0 EF 419 BNE :LOOP ; do 4 times +CA2A: A4 3D 420 LDY SLOT +CA2C: 68 421 PLA +CA2D: 99 F8 05 422 STA R33,Y ; save R3 +CA30: 68 423 PLA +CA31: 99 78 05 424 STA R32,Y +CA34: 68 425 PLA +CA35: 99 F8 04 426 STA R31,Y +CA38: 68 427 PLA +CA39: 99 78 04 428 STA R30,Y +CA3C: 7A 429 PLY ; restore Y + ===== Page 9 ===== + +CA3D: A9 FF 430 LDA #DUMMY +CA3F: 9D 80 C0 431 STA DATA,X ; send another dummy +CA42: 68 432 PLA ; restore R1 +CA43: 60 433 RTS + 434 + 435 + 436 ******************************** + 437 * + 438 * Calculate block address + 439 * Block no is in $46-47 + 440 * Address is in R30-R33 + 441 * + 442 ******************************** + 443 +CA44: DA 444 BLOCK PHX ; save X +CA45: 5A 445 PHY ; save Y +CA46: A6 3D 446 LDX SLOT +CA48: A5 46 447 LDA $46 ; store block num +CA4A: 9D F8 05 448 STA R33,X ; in R30-R33 +CA4D: A5 47 449 LDA $47 +CA4F: 9D 78 05 450 STA R32,X +CA52: A9 00 451 LDA #0 +CA54: 9D F8 04 452 STA R31,X +CA57: 9D 78 04 453 STA R30,X + 454 +CA5A: A0 09 455 LDY #9 ; ASL can't be used with Y +CA5C: 1E F8 05 456 :LOOP ASL R33,X ; mul block num +CA5F: 3E 78 05 457 ROL R32,X ; by 512 to get +CA62: 3E F8 04 458 ROL R31,X ; real address +CA65: 3E 78 04 459 ROL R30,X +CA68: 88 460 DEY +CA69: D0 F1 461 BNE :LOOP +CA6B: 7A 462 PLY ; restore Y +CA6C: FA 463 PLX ; restore X +CA6D: 60 464 RTS + 465 + 466 + 467 ******************************** + 468 * + 469 * Send SD command + 470 * Cmd is in A + 471 * + 472 ******************************** + 473 +CA6E: 5A 474 COMMAND PHY ; save Y +CA6F: A4 3D 475 LDY SLOT +CA71: 9D 80 C0 476 STA DATA,X ; send command +CA74: B9 78 04 477 LDA R30,Y ; get arg from R30 on +CA77: 9D 80 C0 478 STA DATA,X +CA7A: B9 F8 04 479 LDA R31,Y +CA7D: 9D 80 C0 480 STA DATA,X +CA80: B9 78 05 481 LDA R32,Y +CA83: 9D 80 C0 482 STA DATA,X +CA86: B9 F8 05 483 LDA R33,Y +CA89: 9D 80 C0 484 STA DATA,X +CA8C: A9 FF 485 LDA #DUMMY +CA8E: 9D 80 C0 486 STA DATA,X ; dummy crc + ===== Page 10 ===== + +CA91: 20 F7 C9 487 JSR GETR1 +CA94: 7A 488 PLY ; restore Y +CA95: 60 489 RTS + 490 + 491 + 492 ******************************** + 493 * + 494 * Status request + 495 * $43 Unit number DSSS000 + 496 * $44-45 Unused + 497 * $46-47 Unused + 498 * + 499 * C Clear - No error + 500 * Set - Error + 501 * A $00 - No error + 502 * $27 - I/O error + 503 * $28 - No card inserted / no init + 504 * $2B - Card write protected + 505 * x - Blocks avail (low byte) + 506 * y - Blocks avail (high byte) + 507 * + 508 ******************************** + 509 +CA96: 18 510 STATUS CLC ; no error +CA97: A9 00 511 LDA #0 +CA99: A2 FF 512 LDX #$FF ; 32 MB partition +CA9B: A0 FF 513 LDY #$FF +CA9D: 60 514 RTS + 515 + 516 * TODO: check for card detect and write protect! + 517 + 518 + 519 ******************************** + 520 * + 521 * Read 512 byte block + 522 * $43 Unit number DSSS0000 + 523 * $44-45 Address (LO/HI) of buffer + 524 * $46-47 Block number (LO/HI) + 525 * + 526 * C Clear - No error + 527 * Set - Error + 528 * A $00 - No error + 529 * $27 - Bad block number + 530 * $28 - No card inserted + 531 * + 532 ******************************** + 533 + 534 * TODO: check for card detect! + 535 +CA9E: 20 44 CA 536 READ JSR BLOCK ; calc block address + 537 +CAA1: A9 0E 538 LDA #SS0 ; enable /CS +CAA3: 9D 83 C0 539 STA SS,X +CAA6: A9 51 540 LDA #$51 ; send CMD17 +CAA8: 20 6E CA 541 JSR COMMAND ; send command + 542 +CAAB: C9 00 543 CMP #0 ; check for error + ===== Page 11 ===== + +CAAD: D0 3F 544 BNE :ERROR + 545 +CAAF: A9 FF 546 :GETTOK LDA #DUMMY ; get data token +CAB1: 9D 80 C0 547 STA DATA,X +CAB4: BD 80 C0 548 LDA DATA,X ; get response +CAB7: C9 FE 549 CMP #$FE +CAB9: D0 F4 550 BNE :GETTOK ; wait for $FE + 551 +CABB: A0 02 552 LDY #2 ; read data from card +CABD: A9 17 553 LDA #FRXEN ; enable FRX +CABF: 9D 81 C0 554 STA CTRL,X +CAC2: A9 FF 555 LDA #DUMMY +CAC4: 9D 80 C0 556 STA DATA,X +CAC7: 64 3C 557 :LOOPY STZ WORK +CAC9: BD 80 C0 558 :LOOPW LDA DATA,X +CACC: 92 44 559 STA ($44) +CACE: E6 44 560 INC $44 +CAD0: D0 02 561 BNE :INW +CAD2: E6 45 562 INC $45 ; inc msb on page boundary +CAD4: E6 3C 563 :INW INC WORK +CAD6: D0 F1 564 BNE :LOOPW +CAD8: 88 565 DEY +CAD9: D0 EC 566 BNE :LOOPY + 567 +CADB: A9 07 568 LDA #FRXDIS ; disable FRX +CADD: 9D 81 C0 569 STA CTRL,X + 570 +CAE0: A9 FF 571 :CRC LDA #DUMMY ; first crc byte has +CAE2: 9D 80 C0 572 STA DATA,X ; already been read + 573 +CAE5: A9 0F 574 LDA #SSNONE +CAE7: 9D 83 C0 575 STA SS,X ; disable /CS +CAEA: 18 576 CLC ; no error +CAEB: A9 00 577 LDA #$00 +CAED: 60 578 RTS + 579 +CAEE: A9 0F 580 :ERROR LDA #SSNONE +CAF0: 9D 83 C0 581 STA SS,X ; disable /CS +CAF3: 38 582 SEC ; an error occured +CAF4: A9 27 583 LDA #$27 +CAF6: 60 584 RTS + 585 + 586 + 587 ******************************** + 588 * + 589 * Write 512 byte block + 590 * $43 Unit number DSSS000 + 591 * $44-45 Address (LO/HI) of buffer + 592 * $46-47 Block number (LO/HI) + 593 * + 594 * C Clear - No error + 595 * Set - Error + 596 * A $00 - No error + 597 * $27 - I/O error or bad block number + 598 * $28 - No card inserted + 599 * $2B - Card write protected + 600 * + ===== Page 12 ===== + + 601 ******************************** + 602 + 603 * TODO: check for card detect and write protect! + 604 +CAF7: 20 44 CA 605 WRITE JSR BLOCK ; calc block address + 606 +CAFA: A9 0E 607 LDA #SS0 ; enable /CS +CAFC: 9D 83 C0 608 STA SS,X +CAFF: A9 58 609 LDA #$58 ; send CMD24 +CB01: 20 6E CA 610 JSR COMMAND ; send command + 611 +CB04: C9 00 612 CMP #0 ; check for error +CB06: D0 47 613 BNE :ERROR + 614 +CB08: A9 FF 615 LDA #DUMMY +CB0A: 9D 80 C0 616 STA DATA,X ; send dummy +CB0D: A9 FE 617 LDA #$FE +CB0F: 9D 80 C0 618 STA DATA,X ; send data token + 619 +CB12: A0 02 620 LDY #2 ; send data to card +CB14: 64 3C 621 :LOOPY STZ WORK +CB16: B2 44 622 :LOOPW LDA ($44) +CB18: 9D 80 C0 623 STA DATA,X +CB1B: E6 44 624 INC $44 +CB1D: D0 02 625 BNE :INW +CB1F: E6 45 626 INC $45 ; inc msb on page boundary +CB21: E6 3C 627 :INW INC WORK +CB23: D0 F1 628 BNE :LOOPW +CB25: 88 629 DEY +CB26: D0 EC 630 BNE :LOOPY + 631 +CB28: 9D 80 C0 632 :CRC STA DATA,X ; send 2 dummy crc bytes +CB2B: 9D 80 C0 633 STA DATA,X + 634 +CB2E: 9D 80 C0 635 STA DATA,X ; get data response +CB31: BD 80 C0 636 LDA DATA,X +CB34: 29 1F 637 AND #$1F +CB36: C9 05 638 CMP #$05 +CB38: D0 15 639 BNE :ERROR ; check for write error + 640 +CB3A: A9 FF 641 :WAIT6 LDA #DUMMY +CB3C: 9D 80 C0 642 STA DATA,X ; wait for write cycle +CB3F: BD 80 C0 643 LDA DATA,X ; to complete +CB42: C9 00 644 CMP #$00 +CB44: F0 F4 645 BEQ :WAIT6 + 646 +CB46: A9 0F 647 LDA #SSNONE ; disable /CS +CB48: 9D 83 C0 648 STA SS,X +CB4B: 18 649 CLC ; no error +CB4C: A9 00 650 LDA #0 +CB4E: 60 651 RTS + 652 +CB4F: A9 FF 653 :ERROR LDA #DUMMY +CB51: 9D 80 C0 654 STA DATA,X ; wait for write cycle +CB54: BD 80 C0 655 LDA DATA,X ; to complete +CB57: C9 00 656 CMP #$00 +CB59: F0 F4 657 BEQ :ERROR + ===== Page 13 ===== + + 658 +CB5B: A9 0F 659 LDA #SSNONE +CB5D: 9D 83 C0 660 STA SS,X ; disable /CS +CB60: 38 661 SEC ; an error occured +CB61: A9 27 662 LDA #$27 +CB63: 60 663 RTS + 664 + 665 + 666 ******************************** + 667 * + 668 * Format + 669 * not supported! + 670 * + 671 ******************************** + 672 +CB64: 38 673 FORMAT SEC +CB65: A9 01 674 LDA #$01 ; invalid command +CB67: 60 675 RTS + 676 + 677 +CB68: 40 00 00 678 CMD0 HEX 400000 +CB6B: 00 00 95 679 HEX 000095 +CB6E: 41 00 00 680 CMD1 HEX 410000 +CB71: 00 00 F9 681 HEX 0000F9 +CB74: 48 00 00 682 CMD8 HEX 480000 +CB77: 01 AA 87 683 HEX 01AA87 +CB7A: 50 00 00 684 CMD16 HEX 500000 +CB7D: 02 00 FF 685 HEX 0200FF +CB80: 77 00 00 686 CMD55 HEX 770000 +CB83: 00 00 65 687 HEX 000065 +CB86: 69 40 00 688 ACMD4140 HEX 694000 +CB89: 00 00 77 689 HEX 000077 +CB8C: 69 00 00 690 ACMD410 HEX 690000 +CB8F: 00 00 FF 691 HEX 0000FF + + +--End assembly, 914 bytes, Errors: 0 + + +Symbol table - alphabetical order: + + ACMD410 =$CB8C ACMD4140=$CB86 BLOCK =$CA44 ? BOOT =$C825 + CMD =$C9E3 CMD0 =$CB68 CMD1 =$CB6E CMD16 =$CB7A + CMD55 =$CB80 CMD8 =$CB74 CMDHI =$41 CMDLO =$40 + COMMAND =$CA6E CTRL =$C081 CURSLOT =$07F8 DATA =$C080 + DEBUG =$00 DIV =$C082 DRIVER =$C841 DUMMY =$FF + FORMAT =$CB64 FRXDIS =$07 FRXEN =$17 GETR1 =$C9F7 + GETR3 =$CA12 INIT =$C900 INITED =$0678 R30 =$0478 + R31 =$04F8 R32 =$0578 R33 =$05F8 READ =$CA9E + SLOT =$3D SLOT16 =$2B SS =$C083 SS0 =$0E + SSNONE =$0F STATUS =$CA96 WORK =$3C WRITE =$CAF7 + + + +Symbol table - numerical order: + + DEBUG =$00 FRXDIS =$07 SS0 =$0E SSNONE =$0F + ===== Page 14 ===== + + FRXEN =$17 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 =$C825 DRIVER =$C841 INIT =$C900 + CMD =$C9E3 GETR1 =$C9F7 GETR3 =$CA12 BLOCK =$CA44 + COMMAND =$CA6E STATUS =$CA96 READ =$CA9E WRITE =$CAF7 + FORMAT =$CB64 CMD0 =$CB68 CMD1 =$CB6E CMD8 =$CB74 + CMD16 =$CB7A CMD55 =$CB80 ACMD4140=$CB86 ACMD410 =$CB8C + + \ No newline at end of file diff --git a/AppleIISd.s b/AppleIISd.s index c564c2c..27756ce 100644 --- a/AppleIISd.s +++ b/AppleIISd.s @@ -1,7 +1,7 @@ ******************************** * * Apple][Sd Firmware -* Version 0.5 +* Version 0.6 * * (c) Florian Reitz, 2017 * @@ -44,14 +44,10 @@ INITED = $0678 SSNONE = $0F SS0 = $0E DUMMY = $FF +FRXEN = $17 +FRXDIS = $07 -******************************** -* -* Install SD card driver -* -******************************** - * signature bytes LDX #$20 @@ -72,9 +68,10 @@ DUMMY = $FF JSR $FF58 TSX LDA $0100,X - STA CURSLOT ; $Cs AND #$0F STA SLOT ; $0s + ORA #$C0 + STA CURSLOT ; $Cs ASL A ASL A ASL A @@ -86,34 +83,41 @@ DUMMY = $FF BIT $CFFF JSR INIT - DO DEBUG * * TODO: check for init error * +******************************** +* +* Install SD card driver +* +******************************** + + DO DEBUG + * see if slot has a driver already LDX $BF31 ; get devcnt -INSLP LDA $BF32,X ; get a devnum +INSTALL LDA $BF32,X ; get a devnum AND #$70 ; isolate slot CMP SLOT16 ; slot? - BEQ INSOUT ; yes, skip it + BEQ :INSOUT ; yes, skip it DEX - BPL INSLP ; keep up the search + BPL INSTALL ; keep up the search * restore the devnum to the list LDX $BF31 ; get devcnt again CPX #$0D ; device table full? - BNE INSLP2 + BNE :INST2 JSR $FF3A ; bell - JMP INSOUT ; do something! + JMP :INSOUT ; do something! -INSLP2 LDA $BF32-1,X ; move all entries down +:INST2 LDA $BF32-1,X ; move all entries down STA $BF32,X ; to make room at front DEX ; for a new entry - BNE INSLP2 + BNE :INST2 LDA #$04 ; ProFile type device ORA SLOT16 STA $BF32 ; slot, drive 1 at top of list @@ -128,9 +132,16 @@ INSLP2 LDA $BF32-1,X ; move all entries down STA $BF10,X ; write to driver table LDA #>DRIVER STA $BF11,X +:INSOUT RTS -INSOUT RTS - FIN + +******************************** +* +* Boot from SD card +* +******************************** + + ELSE BOOT LDA #$01 STA $42 ; load command @@ -146,6 +157,8 @@ BOOT LDA #$01 JSR READ ; call driver JMP $801 ; goto bootloader + FIN + ******************************** * @@ -165,9 +178,10 @@ DRIVER CLD JSR $FF58 ; find slot nr TSX LDA $0100,X - STA CURSLOT ; $Cs AND #$0F STA SLOT ; $0s + ORA #$C0 + STA CURSLOT ; $Cs ASL A ASL A ASL A @@ -201,10 +215,11 @@ DRIVER CLD :INIT JSR INIT BRA :CMD + * Signature bytes DS \ ; fill with zeroes - ORG *-4 ; locate to $C8FC + DS -4 ; locate to $xxFC DW $FFFF ; 65535 blocks DB $47 ; Status bits DB #