2017-08-26 22:37:54 +00:00
|
|
|
|
1 ********************************
|
|
|
|
|
2 *
|
|
|
|
|
3 * Apple][Sd Firmware
|
2017-11-01 15:22:35 +00:00
|
|
|
|
4 * Version 0.8
|
2017-08-26 22:37:54 +00:00
|
|
|
|
5 *
|
|
|
|
|
6 * (c) Florian Reitz, 2017
|
|
|
|
|
7 *
|
|
|
|
|
8 * X register usually contains SLOT16
|
|
|
|
|
9 * Y register is used for counting or SLOT
|
|
|
|
|
10 *
|
|
|
|
|
11 ********************************
|
2017-08-27 13:02:58 +00:00
|
|
|
|
12
|
2017-11-01 15:22:35 +00:00
|
|
|
|
1-NOV-17 16:06
|
2017-08-27 13:02:58 +00:00
|
|
|
|
14
|
2017-08-26 22:37:54 +00:00
|
|
|
|
15 XC ; enable 65C02 code
|
2017-08-27 13:02:58 +00:00
|
|
|
|
16 DEBUG = 0
|
|
|
|
|
17 DO DEBUG
|
|
|
|
|
18 ORG $8000
|
|
|
|
|
19 ELSE
|
2017-10-22 18:50:14 +00:00
|
|
|
|
20 ORG $C700 ; Expansion ROM
|
2017-08-27 13:02:58 +00:00
|
|
|
|
21 FIN
|
|
|
|
|
22
|
2017-08-26 22:37:54 +00:00
|
|
|
|
23 * Memory defines
|
2017-08-27 13:02:58 +00:00
|
|
|
|
24
|
2017-08-26 22:37:54 +00:00
|
|
|
|
25 SLOT16 = $2B ; $s0 -> slot * 16
|
2017-11-01 15:22:35 +00:00
|
|
|
|
26 SLOT = $3D ; $0s
|
|
|
|
|
27 CMDLO = $40
|
|
|
|
|
28 CMDHI = $41
|
|
|
|
|
29
|
|
|
|
|
30 DCMD = $42 ; Command code
|
|
|
|
|
31 BUFFER = $44 ; Buffer address
|
|
|
|
|
32 BLOCK = $46 ; Block number
|
|
|
|
|
33
|
|
|
|
|
34 CURSLOT = $07F8 ; $Cs
|
|
|
|
|
35 DATA = $C080
|
|
|
|
|
36 CTRL = DATA+1
|
|
|
|
|
37 DIV = DATA+2
|
|
|
|
|
38 SS = DATA+3
|
|
|
|
|
39 R30 = $0478
|
|
|
|
|
40 R31 = $04F8
|
|
|
|
|
41 R32 = $0578
|
|
|
|
|
42 R33 = $05F8
|
|
|
|
|
43
|
|
|
|
|
44 * Constants
|
|
|
|
|
45
|
|
|
|
|
46 DUMMY = $FF
|
|
|
|
|
47 FRX = $10 ; CTRL register
|
|
|
|
|
48 ECE = $04
|
|
|
|
|
49 SS0 = $01 ; SS register
|
|
|
|
|
50 WP = $20
|
|
|
|
|
51 CD = $40
|
|
|
|
|
52 INITED = $80
|
|
|
|
|
53
|
|
|
|
|
54
|
|
|
|
|
55 * signature bytes
|
2017-10-22 18:50:14 +00:00
|
|
|
|
56
|
2017-11-01 15:22:35 +00:00
|
|
|
|
C700: A2 20 57 LDX #$20
|
|
|
|
|
C702: A0 00 58 LDY #$00
|
|
|
|
|
C704: A2 03 59 LDX #$03
|
|
|
|
|
C706: A0 FF 60 LDY #$FF ; neither 5.25 nor Smartport
|
|
|
|
|
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
|
|
|
|
|
71 ELSE
|
|
|
|
|
C708: 20 58 FF 72 JSR $FF58
|
|
|
|
|
C70B: BA 73 TSX
|
|
|
|
|
C70C: BD 00 01 74 LDA $0100,X
|
|
|
|
|
C70F: 8D F8 07 75 STA CURSLOT ; $Cs
|
|
|
|
|
C712: 29 0F 76 AND #$0F
|
|
|
|
|
C714: 85 3D 77 STA SLOT ; $0s
|
|
|
|
|
C716: 0A 78 ASL A
|
|
|
|
|
C717: 0A 79 ASL A
|
|
|
|
|
C718: 0A 80 ASL A
|
|
|
|
|
C719: 0A 81 ASL A
|
|
|
|
|
82 FIN
|
|
|
|
|
83
|
|
|
|
|
C71A: 85 2B 84 STA SLOT16 ; $s0
|
|
|
|
|
C71C: AA 85 TAX ; X holds now SLOT16
|
|
|
|
|
C71D: 2C FF CF 86 BIT $CFFF
|
|
|
|
|
C720: 20 A7 C9 87 JSR CARDDET
|
|
|
|
|
C723: 90 03 88 BCC :INIT
|
|
|
|
|
C725: A9 2F 89 LDA #$2F ; no card inserted
|
|
|
|
|
C727: 00 90 BRK
|
|
|
|
|
91
|
|
|
|
|
C728: 20 00 C8 92 :INIT JSR INIT
|
|
|
|
|
93
|
2017-10-22 18:50:14 +00:00
|
|
|
|
94
|
2017-11-01 15:22:35 +00:00
|
|
|
|
95 ********************************
|
|
|
|
|
96 *
|
|
|
|
|
97 * Install SD card driver
|
|
|
|
|
98 *
|
|
|
|
|
99 ********************************
|
|
|
|
|
100
|
|
|
|
|
101 DO DEBUG
|
|
|
|
|
102
|
|
|
|
|
103 * see if slot has a driver already
|
|
|
|
|
104
|
|
|
|
|
105 LDX $BF31 ; get devcnt
|
|
|
|
|
106 INSTALL LDA $BF32,X ; get a devnum
|
|
|
|
|
107 AND #$70 ; isolate slot
|
|
|
|
|
108 CMP SLOT16 ; slot?
|
|
|
|
|
109 BEQ :INSOUT ; yes, skip it
|
|
|
|
|
110 DEX
|
|
|
|
|
111 BPL INSTALL ; keep up the search
|
|
|
|
|
112
|
|
|
|
|
113 * restore the devnum to the list
|
|
|
|
|
114
|
|
|
|
|
115 LDX $BF31 ; get devcnt again
|
|
|
|
|
116 CPX #$0D ; device table full?
|
|
|
|
|
117 BNE :INST2
|
|
|
|
|
118
|
|
|
|
|
119 JSR $FF3A ; bell
|
|
|
|
|
120 JMP :INSOUT ; do something!
|
2017-10-22 18:50:14 +00:00
|
|
|
|
121
|
2017-11-01 15:22:35 +00:00
|
|
|
|
122 :INST2 LDA $BF32-1,X ; move all entries down
|
|
|
|
|
123 STA $BF32,X ; to make room at front
|
|
|
|
|
124 DEX ; for a new entry
|
|
|
|
|
125 BNE :INST2
|
|
|
|
|
126 LDA #$04 ; ProFile type device
|
|
|
|
|
127 ORA SLOT16
|
|
|
|
|
128 STA $BF32 ; slot, drive 1 at top of list
|
|
|
|
|
129 INC $BF31 ; update devcnt
|
|
|
|
|
130
|
|
|
|
|
131 * now insert the device driver vector
|
|
|
|
|
132
|
|
|
|
|
133 LDA SLOT
|
|
|
|
|
134 ASL
|
|
|
|
|
135 TAX
|
|
|
|
|
136 LDA #<DRIVER
|
|
|
|
|
137 STA $BF10,X ; write to driver table
|
|
|
|
|
138 LDA #>DRIVER
|
|
|
|
|
139 STA $BF11,X
|
|
|
|
|
140 :INSOUT RTS
|
|
|
|
|
141
|
|
|
|
|
142
|
|
|
|
|
143 ********************************
|
|
|
|
|
144 *
|
|
|
|
|
145 * Boot from SD card
|
|
|
|
|
146 *
|
|
|
|
|
147 ********************************
|
|
|
|
|
148
|
|
|
|
|
149 ELSE
|
|
|
|
|
150
|
|
|
|
|
C72B: F0 01 151 BOOT BEQ :BOOT1 ; check for error
|
|
|
|
|
C72D: 00 152 BRK
|
2017-10-22 18:50:14 +00:00
|
|
|
|
153
|
2017-11-01 15:22:35 +00:00
|
|
|
|
C72E: A9 01 154 :BOOT1 LDA #$01
|
|
|
|
|
C730: 85 42 155 STA DCMD ; load command
|
|
|
|
|
C732: A6 2B 156 LDX SLOT16
|
|
|
|
|
C734: 85 43 157 STA $43 ; slot number
|
|
|
|
|
C736: A9 08 158 LDA #$08
|
|
|
|
|
C738: 85 45 159 STA BUFFER+1 ; buffer hi
|
|
|
|
|
C73A: 64 44 160 STZ BUFFER ; buffer lo
|
|
|
|
|
C73C: 64 47 161 STZ BLOCK+1 ; block hi
|
|
|
|
|
C73E: 64 46 162 STZ BLOCK ; block lo
|
|
|
|
|
C740: 2C FF CF 163 BIT $CFFF
|
|
|
|
|
C743: 20 CD C9 164 JSR READ ; call driver
|
|
|
|
|
C746: 4C 01 08 165 JMP $801 ; goto bootloader
|
|
|
|
|
166
|
|
|
|
|
167 FIN
|
|
|
|
|
168
|
|
|
|
|
169
|
|
|
|
|
170 ********************************
|
|
|
|
|
171 *
|
|
|
|
|
172 * Jump table
|
|
|
|
|
173 *
|
2017-10-22 18:50:14 +00:00
|
|
|
|
174 ********************************
|
2017-11-01 15:22:35 +00:00
|
|
|
|
175
|
|
|
|
|
C749: D8 176 DRIVER CLD
|
|
|
|
|
177
|
|
|
|
|
C74A: 48 178 :SAVEZP PHA ; make room for retval
|
|
|
|
|
C74B: A5 2B 179 LDA SLOT16 ; save all ZP locations
|
|
|
|
|
C74D: 48 180 PHA
|
|
|
|
|
C74E: A5 3D 181 LDA SLOT
|
|
|
|
|
C750: 48 182 PHA
|
|
|
|
|
C751: A5 40 183 LDA CMDLO
|
|
|
|
|
C753: 48 184 PHA
|
|
|
|
|
C754: A5 41 185 LDA CMDHI
|
|
|
|
|
C756: 48 186 PHA
|
|
|
|
|
187
|
|
|
|
|
188 DO DEBUG
|
|
|
|
|
189 LDA #$04
|
|
|
|
|
190 STA SLOT
|
|
|
|
|
191 LDA #$C4
|
|
|
|
|
192 STA CURSLOT
|
|
|
|
|
193 LDA #$40
|
|
|
|
|
194
|
|
|
|
|
195 ELSE
|
|
|
|
|
C757: 20 58 FF 196 JSR $FF58 ; find slot nr
|
|
|
|
|
C75A: BA 197 TSX
|
|
|
|
|
C75B: BD 00 01 198 LDA $0100,X
|
|
|
|
|
C75E: 8D F8 07 199 STA CURSLOT ; $Cs
|
|
|
|
|
C761: 29 0F 200 AND #$0F
|
|
|
|
|
C763: 85 3D 201 STA SLOT ; $0s
|
|
|
|
|
C765: 0A 202 ASL A
|
|
|
|
|
C766: 0A 203 ASL A
|
|
|
|
|
C767: 0A 204 ASL A
|
|
|
|
|
C768: 0A 205 ASL A
|
|
|
|
|
206 FIN
|
|
|
|
|
207
|
|
|
|
|
C769: 85 2B 208 STA SLOT16 ; $s0
|
|
|
|
|
C76B: AA 209 TAX ; X holds now SLOT16
|
|
|
|
|
C76C: 2C FF CF 210 BIT $CFFF
|
|
|
|
|
C76F: 20 A7 C9 211 JSR CARDDET
|
|
|
|
|
C772: 90 05 212 BCC :INITED
|
|
|
|
|
C774: A9 2F 213 LDA #$2F ; no card inserted
|
|
|
|
|
C776: 38 214 SEC
|
|
|
|
|
C777: 80 40 215 BRA :RESTZP
|
|
|
|
|
216
|
|
|
|
|
C779: A9 80 217 :INITED LDA #INITED ; check for init
|
|
|
|
|
C77B: 3C 83 C0 218 BIT SS,X
|
|
|
|
|
C77E: F0 34 219 BEQ :INIT
|
|
|
|
|
220
|
|
|
|
|
C780: A5 42 221 :CMD LDA DCMD ; get command
|
|
|
|
|
C782: C9 00 222 CMP #0
|
|
|
|
|
C784: F0 15 223 BEQ :STATUS
|
|
|
|
|
C786: C9 01 224 CMP #1
|
|
|
|
|
C788: F0 16 225 BEQ :READ
|
|
|
|
|
C78A: C9 02 226 CMP #2
|
|
|
|
|
C78C: F0 17 227 BEQ :WRITE
|
|
|
|
|
C78E: C9 03 228 CMP #3
|
|
|
|
|
C790: F0 18 229 BEQ :FORMAT
|
|
|
|
|
C792: C9 FF 230 CMP #$FF
|
|
|
|
|
C794: F0 19 231 BEQ :TEST
|
|
|
|
|
C796: A9 01 232 LDA #1 ; unknown command
|
|
|
|
|
C798: 38 233 SEC
|
|
|
|
|
C799: 80 1E 234 BRA :RESTZP
|
|
|
|
|
235
|
|
|
|
|
C79B: 20 BF C9 236 :STATUS JSR STATUS
|
|
|
|
|
C79E: 80 19 237 BRA :RESTZP
|
|
|
|
|
C7A0: 20 CD C9 238 :READ JSR READ
|
|
|
|
|
C7A3: 80 14 239 BRA :RESTZP
|
|
|
|
|
C7A5: 20 34 CA 240 :WRITE JSR WRITE
|
|
|
|
|
C7A8: 80 0F 241 BRA :RESTZP
|
|
|
|
|
C7AA: 20 A3 CA 242 :FORMAT JSR FORMAT
|
|
|
|
|
C7AD: 80 0A 243 BRA :RESTZP
|
|
|
|
|
C7AF: 20 A7 CA 244 :TEST JSR TEST ; do device test
|
|
|
|
|
C7B2: 80 05 245 BRA :RESTZP
|
|
|
|
|
C7B4: 20 00 C8 246 :INIT JSR INIT
|
|
|
|
|
C7B7: 90 C7 247 BCC :CMD ; init ok
|
|
|
|
|
248
|
|
|
|
|
C7B9: BA 249 :RESTZP TSX
|
|
|
|
|
C7BA: 9D 05 01 250 STA $105,X ; save retval on stack
|
|
|
|
|
C7BD: 68 251 PLA ; restore all ZP locations
|
|
|
|
|
C7BE: 85 41 252 STA CMDHI
|
|
|
|
|
C7C0: 68 253 PLA
|
|
|
|
|
C7C1: 85 40 254 STA CMDLO
|
|
|
|
|
C7C3: 68 255 PLA
|
|
|
|
|
C7C4: 85 3D 256 STA SLOT
|
|
|
|
|
C7C6: 68 257 PLA
|
|
|
|
|
C7C7: 85 2B 258 STA SLOT16
|
|
|
|
|
C7C9: 68 259 PLA ; get retval
|
|
|
|
|
C7CA: 60 260 RTS
|
|
|
|
|
261
|
|
|
|
|
262
|
|
|
|
|
263 * Signature bytes
|
|
|
|
|
264
|
|
|
|
|
C7CB: 00 00 00 265 DS \ ; fill with zeroes
|
|
|
|
|
C7CE: 00 00 00 00
|
|
|
|
|
C7D2: 00 00 00 00
|
|
|
|
|
C7D6: 00 00 00 00
|
|
|
|
|
C7DA: 00 00 00 00
|
|
|
|
|
C7DE: 00 00 00 00
|
|
|
|
|
C7E2: 00 00 00 00
|
|
|
|
|
C7E6: 00 00 00 00
|
|
|
|
|
C7EA: 00 00 00 00
|
|
|
|
|
C7EE: 00 00 00 00
|
|
|
|
|
C7F2: 00 00 00 00
|
|
|
|
|
C7F6: 00 00 00 00
|
|
|
|
|
C7FA: 00 00 00 00
|
|
|
|
|
C7FE: 00 00
|
|
|
|
|
266 DS -4 ; locate to $xxFC
|
|
|
|
|
C7FC: FF FF 267 DW $FFFF ; 65535 blocks
|
|
|
|
|
C7FE: 17 268 DB $17 ; Status bits
|
|
|
|
|
C7FF: 49 269 DB #<DRIVER ; LSB of driver
|
2017-10-22 18:50:14 +00:00
|
|
|
|
270
|
2017-11-01 15:22:35 +00:00
|
|
|
|
271 ********************************
|
|
|
|
|
272 *
|
|
|
|
|
273 * Initialize SD card
|
|
|
|
|
274 *
|
|
|
|
|
275 * C Clear - No error
|
|
|
|
|
276 * Set - Error
|
|
|
|
|
277 * A $00 - No error
|
|
|
|
|
278 * $27 - I/O error - Init failed
|
|
|
|
|
279 * $2F - No card inserted
|
|
|
|
|
280 *
|
|
|
|
|
281 ********************************
|
|
|
|
|
282
|
|
|
|
|
C800: D8 283 INIT CLD
|
|
|
|
|
C801: A9 03 284 LDA #$03 ; set SPI mode 3
|
|
|
|
|
C803: 9D 81 C0 285 STA CTRL,X
|
|
|
|
|
C806: BD 83 C0 286 LDA SS,X
|
|
|
|
|
C809: 09 01 287 ORA #SS0 ; set CS high
|
|
|
|
|
C80B: 9D 83 C0 288 STA SS,X
|
|
|
|
|
C80E: A9 07 289 LDA #7
|
|
|
|
|
C810: 9D 82 C0 290 STA DIV,X
|
|
|
|
|
C813: A0 0A 291 LDY #10
|
|
|
|
|
C815: A9 FF 292 LDA #DUMMY
|
|
|
|
|
293
|
|
|
|
|
C817: 9D 80 C0 294 :LOOP STA DATA,X
|
|
|
|
|
C81A: 3C 81 C0 295 :WAIT BIT CTRL,X
|
|
|
|
|
C81D: 10 FB 296 BPL :WAIT
|
|
|
|
|
C81F: 88 297 DEY
|
|
|
|
|
C820: D0 F5 298 BNE :LOOP ; do 10 times
|
|
|
|
|
C822: BD 83 C0 299 LDA SS,X
|
|
|
|
|
C825: 29 FE 300 AND #$FF!SS0 ; set CS low
|
|
|
|
|
C827: 9D 83 C0 301 STA SS,X
|
|
|
|
|
302
|
|
|
|
|
C82A: A9 FF 303 LDA #<CMD0 ; send CMD0
|
|
|
|
|
C82C: 85 40 304 STA CMDLO
|
|
|
|
|
C82E: A9 CA 305 LDA #>CMD0
|
|
|
|
|
C830: 85 41 306 STA CMDHI
|
|
|
|
|
C832: 20 EB C8 307 JSR SDCMD
|
|
|
|
|
C835: 20 FF C8 308 JSR GETR1 ; get response
|
|
|
|
|
C838: C9 01 309 CMP #$01
|
|
|
|
|
C83A: D0 39 310 BNE :ERROR1 ; error!
|
|
|
|
|
311
|
|
|
|
|
C83C: A9 0B 312 LDA #<CMD8 ; send CMD8
|
|
|
|
|
C83E: 85 40 313 STA CMDLO
|
|
|
|
|
C840: A9 CB 314 LDA #>CMD8
|
|
|
|
|
C842: 85 41 315 STA CMDHI
|
|
|
|
|
C844: 20 EB C8 316 JSR SDCMD
|
|
|
|
|
C847: 20 18 C9 317 JSR GETR3
|
|
|
|
|
C84A: C9 01 318 CMP #$01
|
|
|
|
|
C84C: D0 2A 319 BNE :SDV1 ; may be SD Ver. 1
|
2017-10-22 18:50:14 +00:00
|
|
|
|
320
|
2017-11-01 15:22:35 +00:00
|
|
|
|
321 * check for $01aa match!
|
|
|
|
|
C84E: A9 17 322 :SDV2 LDA #<CMD55
|
|
|
|
|
C850: 85 40 323 STA CMDLO
|
|
|
|
|
C852: A9 CB 324 LDA #>CMD55
|
|
|
|
|
C854: 85 41 325 STA CMDHI
|
|
|
|
|
C856: 20 EB C8 326 JSR SDCMD
|
|
|
|
|
C859: 20 FF C8 327 JSR GETR1
|
|
|
|
|
C85C: A9 1D 328 LDA #<ACMD4140
|
|
|
|
|
C85E: 85 40 329 STA CMDLO
|
|
|
|
|
C860: A9 CB 330 LDA #>ACMD4140
|
|
|
|
|
C862: 85 41 331 STA CMDHI
|
|
|
|
|
C864: 20 EB C8 332 JSR SDCMD
|
|
|
|
|
C867: 20 FF C8 333 JSR GETR1
|
|
|
|
|
C86A: C9 01 334 CMP #$01
|
|
|
|
|
C86C: F0 E0 335 BEQ :SDV2 ; wait for ready
|
|
|
|
|
C86E: C9 00 336 CMP #0
|
|
|
|
|
C870: D0 03 337 BNE :ERROR1 ; error!
|
|
|
|
|
338 * send CMD58
|
|
|
|
|
339 * SD Ver. 2 initialized!
|
|
|
|
|
C872: 4C B2 C8 340 JMP :BLOCKSZ
|
|
|
|
|
341
|
|
|
|
|
C875: 4C D9 C8 342 :ERROR1 JMP :IOERROR ; needed for far jump
|
|
|
|
|
343
|
|
|
|
|
C878: A9 17 344 :SDV1 LDA #<CMD55
|
|
|
|
|
C87A: 85 40 345 STA CMDLO
|
|
|
|
|
C87C: A9 CB 346 LDA #>CMD55
|
|
|
|
|
C87E: 85 41 347 STA CMDHI
|
|
|
|
|
C880: 20 EB C8 348 JSR SDCMD ; ignore response
|
|
|
|
|
C883: A9 23 349 LDA #<ACMD410
|
|
|
|
|
C885: 85 40 350 STA CMDLO
|
|
|
|
|
C887: A9 CB 351 LDA #>ACMD410
|
|
|
|
|
C889: 85 41 352 STA CMDHI
|
|
|
|
|
C88B: 20 EB C8 353 JSR SDCMD
|
|
|
|
|
C88E: 20 FF C8 354 JSR GETR1
|
|
|
|
|
C891: C9 01 355 CMP #$01
|
|
|
|
|
C893: F0 E3 356 BEQ :SDV1 ; wait for ready
|
|
|
|
|
C895: C9 00 357 CMP #0
|
|
|
|
|
C897: D0 03 358 BNE :MMC ; may be MMC card
|
|
|
|
|
359 * SD Ver. 1 initialized!
|
|
|
|
|
C899: 4C B2 C8 360 JMP :BLOCKSZ
|
|
|
|
|
361
|
|
|
|
|
C89C: A9 05 362 :MMC LDA #<CMD1
|
|
|
|
|
C89E: 85 40 363 STA CMDLO
|
|
|
|
|
C8A0: A9 CB 364 LDA #>CMD1
|
|
|
|
|
C8A2: 85 41 365 STA CMDHI
|
|
|
|
|
C8A4: 20 EB C8 366 :LOOP1 JSR SDCMD
|
|
|
|
|
C8A7: 20 FF C8 367 JSR GETR1
|
|
|
|
|
C8AA: C9 01 368 CMP #$01
|
|
|
|
|
C8AC: F0 F6 369 BEQ :LOOP1 ; wait for ready
|
|
|
|
|
C8AE: C9 00 370 CMP #0
|
|
|
|
|
C8B0: D0 27 371 BNE :IOERROR ; error!
|
|
|
|
|
372 * MMC Ver. 3 initialized!
|
|
|
|
|
373
|
|
|
|
|
C8B2: A9 11 374 :BLOCKSZ LDA #<CMD16
|
|
|
|
|
C8B4: 85 40 375 STA CMDLO
|
|
|
|
|
C8B6: A9 CB 376 LDA #>CMD16
|
|
|
|
|
C8B8: 85 41 377 STA CMDHI
|
|
|
|
|
C8BA: 20 EB C8 378 JSR SDCMD
|
|
|
|
|
C8BD: 20 FF C8 379 JSR GETR1
|
|
|
|
|
C8C0: C9 00 380 CMP #0
|
|
|
|
|
C8C2: D0 15 381 BNE :IOERROR ; error!
|
|
|
|
|
382
|
|
|
|
|
C8C4: BD 83 C0 383 :END LDA SS,X
|
|
|
|
|
C8C7: 09 80 384 ORA #INITED ; initialized
|
|
|
|
|
C8C9: 9D 83 C0 385 STA SS,X
|
|
|
|
|
C8CC: BD 81 C0 386 LDA CTRL,X
|
|
|
|
|
C8CF: 09 04 387 ORA #ECE ; enable 7MHz
|
|
|
|
|
C8D1: 9D 81 C0 388 STA CTRL,X
|
|
|
|
|
C8D4: 18 389 CLC ; all ok
|
|
|
|
|
C8D5: A0 00 390 LDY #0
|
|
|
|
|
C8D7: 90 03 391 BCC :END1
|
|
|
|
|
C8D9: 38 392 :IOERROR SEC
|
|
|
|
|
C8DA: A0 27 393 LDY #$27 ; init error
|
|
|
|
|
C8DC: BD 83 C0 394 :END1 LDA SS,X ; set CS high
|
|
|
|
|
C8DF: 09 01 395 ORA #SS0
|
|
|
|
|
C8E1: 9D 83 C0 396 STA SS,X
|
|
|
|
|
C8E4: A9 00 397 LDA #0 ; set div to 2
|
|
|
|
|
C8E6: 9D 82 C0 398 STA DIV,X
|
|
|
|
|
C8E9: 98 399 TYA ; retval in A
|
|
|
|
|
C8EA: 60 400 RTS
|
|
|
|
|
401
|
|
|
|
|
402
|
|
|
|
|
403 ********************************
|
2017-10-22 18:50:14 +00:00
|
|
|
|
404 *
|
2017-11-01 15:22:35 +00:00
|
|
|
|
405 * Send SD command
|
|
|
|
|
406 * Call with command in CMDHI and CMDLO
|
|
|
|
|
407 *
|
|
|
|
|
408 ********************************
|
|
|
|
|
409
|
|
|
|
|
C8EB: 5A 410 SDCMD PHY
|
|
|
|
|
C8EC: A0 00 411 LDY #0
|
|
|
|
|
C8EE: B1 40 412 :LOOP LDA (CMDLO),Y
|
|
|
|
|
C8F0: 9D 80 C0 413 STA DATA,X
|
|
|
|
|
C8F3: 3C 81 C0 414 :WAIT BIT CTRL,X ; TC is in N
|
|
|
|
|
C8F6: 10 FB 415 BPL :WAIT
|
|
|
|
|
C8F8: C8 416 INY
|
|
|
|
|
C8F9: C0 06 417 CPY #6
|
|
|
|
|
C8FB: 90 F1 418 BCC :LOOP
|
|
|
|
|
C8FD: 7A 419 PLY
|
|
|
|
|
C8FE: 60 420 RTS
|
|
|
|
|
421
|
|
|
|
|
422
|
|
|
|
|
423 ********************************
|
|
|
|
|
424 *
|
|
|
|
|
425 * Get R1
|
|
|
|
|
426 * R1 is in A
|
|
|
|
|
427 *
|
|
|
|
|
428 ********************************
|
|
|
|
|
429
|
|
|
|
|
C8FF: A9 FF 430 GETR1 LDA #DUMMY
|
|
|
|
|
C901: 9D 80 C0 431 STA DATA,X
|
|
|
|
|
C904: 3C 81 C0 432 :WAIT BIT CTRL,X
|
|
|
|
|
C907: 10 FB 433 BPL :WAIT
|
|
|
|
|
C909: BD 80 C0 434 LDA DATA,X ; get response
|
|
|
|
|
C90C: 89 80 435 BIT #$80
|
|
|
|
|
C90E: D0 EF 436 BNE GETR1 ; wait for MSB=0
|
|
|
|
|
C910: 48 437 PHA
|
|
|
|
|
C911: A9 FF 438 LDA #DUMMY
|
|
|
|
|
C913: 9D 80 C0 439 STA DATA,X ; send another dummy
|
|
|
|
|
C916: 68 440 PLA ; restore R1
|
|
|
|
|
C917: 60 441 RTS
|
|
|
|
|
442
|
|
|
|
|
443 ********************************
|
|
|
|
|
444 *
|
|
|
|
|
445 * Get R3
|
|
|
|
|
446 * R1 is in A
|
|
|
|
|
447 * R3 is in scratchpad ram
|
|
|
|
|
448 *
|
|
|
|
|
449 ********************************
|
|
|
|
|
450
|
|
|
|
|
C918: 20 FF C8 451 GETR3 JSR GETR1 ; get R1 first
|
|
|
|
|
C91B: 48 452 PHA ; save R1
|
|
|
|
|
C91C: 5A 453 PHY ; save Y
|
|
|
|
|
C91D: A0 04 454 LDY #04 ; load counter
|
|
|
|
|
C91F: A9 FF 455 :LOOP LDA #DUMMY ; send dummy
|
|
|
|
|
C921: 9D 80 C0 456 STA DATA,X
|
|
|
|
|
C924: 3C 81 C0 457 :WAIT BIT CTRL,X
|
|
|
|
|
C927: 10 FB 458 BPL :WAIT
|
|
|
|
|
C929: BD 80 C0 459 LDA DATA,X
|
|
|
|
|
C92C: 48 460 PHA
|
|
|
|
|
C92D: 88 461 DEY
|
|
|
|
|
C92E: D0 EF 462 BNE :LOOP ; do 4 times
|
|
|
|
|
C930: A4 3D 463 LDY SLOT
|
|
|
|
|
C932: 68 464 PLA
|
|
|
|
|
C933: 99 F8 05 465 STA R33,Y ; save R3
|
|
|
|
|
C936: 68 466 PLA
|
|
|
|
|
C937: 99 78 05 467 STA R32,Y
|
|
|
|
|
C93A: 68 468 PLA
|
|
|
|
|
C93B: 99 F8 04 469 STA R31,Y
|
|
|
|
|
C93E: 68 470 PLA
|
|
|
|
|
C93F: 99 78 04 471 STA R30,Y
|
|
|
|
|
C942: 7A 472 PLY ; restore Y
|
|
|
|
|
C943: A9 FF 473 LDA #DUMMY
|
|
|
|
|
C945: 9D 80 C0 474 STA DATA,X ; send another dummy
|
|
|
|
|
C948: 68 475 PLA ; restore R1
|
|
|
|
|
C949: 60 476 RTS
|
|
|
|
|
477
|
|
|
|
|
478
|
|
|
|
|
479 ********************************
|
|
|
|
|
480 *
|
|
|
|
|
481 * Calculate block address
|
|
|
|
|
482 * Unit number is in $43 DSSS0000
|
|
|
|
|
483 * Block no is in $46-47
|
|
|
|
|
484 * Address is in R30-R33
|
|
|
|
|
485 *
|
|
|
|
|
486 ********************************
|
|
|
|
|
487
|
|
|
|
|
C94A: DA 488 GETBLOCK PHX ; save X
|
|
|
|
|
C94B: 5A 489 PHY ; save Y
|
|
|
|
|
C94C: A6 3D 490 LDX SLOT
|
|
|
|
|
C94E: A5 46 491 LDA BLOCK ; store block num
|
|
|
|
|
C950: 9D F8 05 492 STA R33,X ; in R30-R33
|
|
|
|
|
C953: A5 47 493 LDA BLOCK+1
|
|
|
|
|
C955: 9D 78 05 494 STA R32,X
|
|
|
|
|
C958: A9 00 495 LDA #0
|
|
|
|
|
C95A: 9D F8 04 496 STA R31,X
|
|
|
|
|
C95D: 9D 78 04 497 STA R30,X
|
|
|
|
|
498
|
|
|
|
|
C960: A9 80 499 LDA #$80 ; drive number
|
|
|
|
|
C962: 24 43 500 BIT $43
|
|
|
|
|
C964: F0 05 501 BEQ :SHIFT ; D1
|
|
|
|
|
C966: A9 01 502 LDA #1 ; D2
|
|
|
|
|
C968: 9D F8 04 503 STA R31,X
|
|
|
|
|
504
|
|
|
|
|
C96B: A0 09 505 :SHIFT LDY #9 ; ASL can't be used with Y
|
|
|
|
|
C96D: 1E F8 05 506 :LOOP ASL R33,X ; mul block num
|
|
|
|
|
C970: 3E 78 05 507 ROL R32,X ; by 512 to get
|
|
|
|
|
C973: 3E F8 04 508 ROL R31,X ; real address
|
|
|
|
|
C976: 3E 78 04 509 ROL R30,X
|
|
|
|
|
C979: 88 510 DEY
|
|
|
|
|
C97A: D0 F1 511 BNE :LOOP
|
|
|
|
|
C97C: 7A 512 PLY ; restore Y
|
|
|
|
|
C97D: FA 513 PLX ; restore X
|
|
|
|
|
C97E: 60 514 RTS
|
|
|
|
|
515
|
|
|
|
|
516
|
|
|
|
|
517 ********************************
|
|
|
|
|
518 *
|
|
|
|
|
519 * Send SD command
|
|
|
|
|
520 * Cmd is in A
|
2017-10-22 18:50:14 +00:00
|
|
|
|
521 *
|
2017-11-01 15:22:35 +00:00
|
|
|
|
522 ********************************
|
|
|
|
|
523
|
|
|
|
|
C97F: 5A 524 COMMAND PHY ; save Y
|
|
|
|
|
C980: A4 3D 525 LDY SLOT
|
|
|
|
|
C982: 9D 80 C0 526 STA DATA,X ; send command
|
|
|
|
|
C985: B9 78 04 527 LDA R30,Y ; get arg from R30 on
|
|
|
|
|
C988: 9D 80 C0 528 STA DATA,X
|
|
|
|
|
C98B: B9 F8 04 529 LDA R31,Y
|
|
|
|
|
C98E: 9D 80 C0 530 STA DATA,X
|
|
|
|
|
C991: B9 78 05 531 LDA R32,Y
|
|
|
|
|
C994: 9D 80 C0 532 STA DATA,X
|
|
|
|
|
C997: B9 F8 05 533 LDA R33,Y
|
|
|
|
|
C99A: 9D 80 C0 534 STA DATA,X
|
|
|
|
|
C99D: A9 FF 535 LDA #DUMMY
|
|
|
|
|
C99F: 9D 80 C0 536 STA DATA,X ; dummy crc
|
|
|
|
|
C9A2: 20 FF C8 537 JSR GETR1
|
|
|
|
|
C9A5: 7A 538 PLY ; restore Y
|
|
|
|
|
C9A6: 60 539 RTS
|
|
|
|
|
540
|
|
|
|
|
541
|
|
|
|
|
542 ********************************
|
|
|
|
|
543 *
|
|
|
|
|
544 * Check for card detect
|
2017-10-22 18:50:14 +00:00
|
|
|
|
545 *
|
2017-11-01 15:22:35 +00:00
|
|
|
|
546 * C Clear - card in slot
|
|
|
|
|
547 * Set - no card in slot
|
|
|
|
|
548 *
|
|
|
|
|
549 ********************************
|
|
|
|
|
550
|
|
|
|
|
C9A7: 48 551 CARDDET PHA
|
|
|
|
|
C9A8: A9 40 552 LDA #CD ; 0: card in
|
|
|
|
|
C9AA: 3C 83 C0 553 BIT SS,X ; 1: card out
|
|
|
|
|
C9AD: 18 554 CLC
|
|
|
|
|
C9AE: F0 01 555 BEQ :DONE ; card is in
|
|
|
|
|
C9B0: 38 556 SEC ; card is out
|
|
|
|
|
C9B1: 68 557 :DONE PLA
|
|
|
|
|
C9B2: 60 558 RTS
|
|
|
|
|
559
|
|
|
|
|
560
|
|
|
|
|
561 ********************************
|
|
|
|
|
562 *
|
|
|
|
|
563 * Check for write protect
|
2017-10-16 22:06:33 +00:00
|
|
|
|
564 *
|
2017-11-01 15:22:35 +00:00
|
|
|
|
565 * C Clear - card not protected
|
|
|
|
|
566 * Set - card write protected
|
|
|
|
|
567 *
|
|
|
|
|
568 ********************************
|
|
|
|
|
569
|
|
|
|
|
C9B3: 48 570 WRPROT PHA
|
|
|
|
|
C9B4: A9 20 571 LDA #WP ; 0: write enabled
|
|
|
|
|
C9B6: 3C 83 C0 572 BIT SS,X ; 1: write disabled
|
|
|
|
|
C9B9: 18 573 CLC
|
|
|
|
|
C9BA: F0 01 574 BEQ :DONE
|
|
|
|
|
C9BC: 38 575 SEC
|
|
|
|
|
C9BD: 68 576 :DONE PLA
|
|
|
|
|
C9BE: 60 577 RTS
|
2017-10-22 18:50:14 +00:00
|
|
|
|
578
|
2017-11-01 15:22:35 +00:00
|
|
|
|
579
|
|
|
|
|
580 ********************************
|
|
|
|
|
581 *
|
|
|
|
|
582 * Status request
|
|
|
|
|
583 * $43 Unit number DSSS000
|
|
|
|
|
584 * $44-45 Unused
|
|
|
|
|
585 * $46-47 Unused
|
|
|
|
|
586 *
|
|
|
|
|
587 * C Clear - No error
|
|
|
|
|
588 * Set - Error
|
|
|
|
|
589 * A $00 - No error
|
|
|
|
|
590 * $2B - Card write protected
|
|
|
|
|
591 * $2F - No card inserted
|
|
|
|
|
592 * X - Blocks avail (low byte)
|
|
|
|
|
593 * Y - Blocks avail (high byte)
|
|
|
|
|
594 *
|
|
|
|
|
595 ********************************
|
|
|
|
|
596
|
|
|
|
|
C9BF: A9 00 597 STATUS LDA #0 ; no error
|
|
|
|
|
C9C1: A2 FF 598 LDX #$FF ; 32 MB partition
|
|
|
|
|
C9C3: A0 FF 599 LDY #$FF
|
|
|
|
|
600
|
|
|
|
|
C9C5: 20 B3 C9 601 JSR WRPROT
|
|
|
|
|
C9C8: 90 02 602 BCC :DONE
|
|
|
|
|
C9CA: A9 2B 603 LDA #$2B ; card write protected
|
|
|
|
|
604
|
|
|
|
|
C9CC: 60 605 :DONE RTS
|
|
|
|
|
606
|
2017-10-22 18:50:14 +00:00
|
|
|
|
607
|
2017-11-01 15:22:35 +00:00
|
|
|
|
608 ********************************
|
|
|
|
|
609 *
|
|
|
|
|
610 * Read 512 byte block
|
|
|
|
|
611 * $43 Unit number DSSS0000
|
|
|
|
|
612 * $44-45 Address (LO/HI) of buffer
|
|
|
|
|
613 * $46-47 Block number (LO/HI)
|
|
|
|
|
614 *
|
|
|
|
|
615 * C Clear - No error
|
|
|
|
|
616 * Set - Error
|
|
|
|
|
617 * A $00 - No error
|
|
|
|
|
618 * $27 - Bad block number
|
|
|
|
|
619 *
|
|
|
|
|
620 ********************************
|
|
|
|
|
621
|
|
|
|
|
C9CD: 20 4A C9 622 READ JSR GETBLOCK ; calc block address
|
|
|
|
|
623
|
|
|
|
|
C9D0: BD 83 C0 624 LDA SS,X ; enable /CS
|
|
|
|
|
C9D3: 29 FE 625 AND #$FF!SS0
|
|
|
|
|
C9D5: 9D 83 C0 626 STA SS,X
|
|
|
|
|
C9D8: A9 51 627 LDA #$51 ; send CMD17
|
|
|
|
|
C9DA: 20 7F C9 628 JSR COMMAND ; send command
|
|
|
|
|
C9DD: D0 50 629 BNE :ERROR ; check for error
|
|
|
|
|
630
|
|
|
|
|
C9DF: A9 FF 631 :GETTOK LDA #DUMMY ; get data token
|
|
|
|
|
C9E1: 9D 80 C0 632 STA DATA,X
|
|
|
|
|
C9E4: BD 80 C0 633 LDA DATA,X ; get response
|
|
|
|
|
C9E7: C9 FE 634 CMP #$FE
|
|
|
|
|
C9E9: D0 F4 635 BNE :GETTOK ; wait for $FE
|
|
|
|
|
636
|
|
|
|
|
C9EB: BD 81 C0 637 LDA CTRL,X ; enable FRX
|
|
|
|
|
C9EE: 09 10 638 ORA #FRX
|
|
|
|
|
C9F0: 9D 81 C0 639 STA CTRL,X
|
|
|
|
|
C9F3: A9 FF 640 LDA #DUMMY
|
|
|
|
|
C9F5: 9D 80 C0 641 STA DATA,X
|
|
|
|
|
642
|
|
|
|
|
C9F8: A0 00 643 LDY #0
|
|
|
|
|
C9FA: BD 80 C0 644 :LOOP1 LDA DATA,X ; read data from card
|
|
|
|
|
C9FD: 91 44 645 STA (BUFFER),Y
|
|
|
|
|
C9FF: C8 646 INY
|
|
|
|
|
CA00: D0 F8 647 BNE :LOOP1
|
|
|
|
|
CA02: E6 45 648 INC BUFFER+1 ; inc msb on page boundary
|
|
|
|
|
CA04: BD 80 C0 649 :LOOP2 LDA DATA,X
|
|
|
|
|
CA07: 91 44 650 STA (BUFFER),Y
|
|
|
|
|
CA09: C8 651 INY
|
|
|
|
|
CA0A: D0 F8 652 BNE :LOOP2
|
|
|
|
|
CA0C: C6 45 653 DEC BUFFER+1
|
|
|
|
|
654
|
|
|
|
|
CA0E: BD 80 C0 655 :CRC LDA DATA,X ; read two bytes crc
|
|
|
|
|
CA11: BD 80 C0 656 LDA DATA,X ; and ignore
|
|
|
|
|
CA14: BD 80 C0 657 LDA DATA,X ; read a dummy byte
|
|
|
|
|
658
|
|
|
|
|
CA17: BD 81 C0 659 LDA CTRL,X ; disable FRX
|
|
|
|
|
CA1A: 29 EF 660 AND #$FF!FRX
|
|
|
|
|
CA1C: 9D 81 C0 661 STA CTRL,X
|
|
|
|
|
CA1F: 18 662 CLC ; no error
|
|
|
|
|
CA20: A9 00 663 LDA #0
|
|
|
|
|
664
|
|
|
|
|
CA22: 08 665 :DONE PHP
|
|
|
|
|
CA23: 48 666 PHA
|
|
|
|
|
CA24: BD 83 C0 667 LDA SS,X
|
|
|
|
|
CA27: 09 01 668 ORA #SS0
|
|
|
|
|
CA29: 9D 83 C0 669 STA SS,X ; disable /CS
|
|
|
|
|
CA2C: 68 670 PLA
|
|
|
|
|
CA2D: 28 671 PLP
|
|
|
|
|
CA2E: 60 672 RTS
|
|
|
|
|
673
|
|
|
|
|
CA2F: 38 674 :ERROR SEC ; an error occured
|
|
|
|
|
CA30: A9 27 675 LDA #$27
|
|
|
|
|
CA32: 80 EE 676 BRA :DONE
|
2017-10-16 22:06:33 +00:00
|
|
|
|
677
|
2017-11-01 15:22:35 +00:00
|
|
|
|
678
|
|
|
|
|
679 ********************************
|
|
|
|
|
680 *
|
|
|
|
|
681 * Write 512 byte block
|
|
|
|
|
682 * $43 Unit number DSSS0000
|
|
|
|
|
683 * $44-45 Address (LO/HI) of buffer
|
|
|
|
|
684 * $46-47 Block number (LO/HI)
|
|
|
|
|
685 *
|
|
|
|
|
686 * C Clear - No error
|
|
|
|
|
687 * Set - Error
|
|
|
|
|
688 * A $00 - No error
|
|
|
|
|
689 * $27 - I/O error or bad block number
|
|
|
|
|
690 * $2B - Card write protected
|
|
|
|
|
691 *
|
|
|
|
|
692 ********************************
|
|
|
|
|
693
|
|
|
|
|
CA34: 20 B3 C9 694 WRITE JSR WRPROT
|
|
|
|
|
CA37: B0 65 695 BCS :WPERROR ; card write protected
|
|
|
|
|
696
|
|
|
|
|
CA39: 20 4A C9 697 JSR GETBLOCK ; calc block address
|
|
|
|
|
698
|
|
|
|
|
CA3C: BD 83 C0 699 LDA SS,X ; enable /CS
|
|
|
|
|
CA3F: 29 FE 700 AND #$FF!SS0
|
|
|
|
|
CA41: 9D 83 C0 701 STA SS,X
|
|
|
|
|
CA44: A9 58 702 LDA #$58 ; send CMD24
|
|
|
|
|
CA46: 20 7F C9 703 JSR COMMAND ; send command
|
|
|
|
|
CA49: D0 4E 704 BNE :IOERROR ; check for error
|
|
|
|
|
705
|
|
|
|
|
CA4B: A9 FF 706 LDA #DUMMY
|
|
|
|
|
CA4D: 9D 80 C0 707 STA DATA,X ; send dummy
|
|
|
|
|
CA50: A9 FE 708 LDA #$FE
|
|
|
|
|
CA52: 9D 80 C0 709 STA DATA,X ; send data token
|
|
|
|
|
710
|
|
|
|
|
CA55: A0 00 711 LDY #0
|
|
|
|
|
CA57: B1 44 712 :LOOP1 LDA (BUFFER),Y
|
|
|
|
|
CA59: 9D 80 C0 713 STA DATA,X : send data to card
|
|
|
|
|
CA5C: C8 714 INY
|
|
|
|
|
CA5D: D0 F8 715 BNE :LOOP1
|
|
|
|
|
CA5F: E6 45 716 INC BUFFER+1 : inc msb on page boundary
|
|
|
|
|
CA61: B1 44 717 :LOOP2 LDA (BUFFER),Y
|
|
|
|
|
CA63: 9D 80 C0 718 STA DATA,X
|
|
|
|
|
CA66: C8 719 INY
|
|
|
|
|
CA67: D0 F8 720 BNE :LOOP2
|
|
|
|
|
CA69: C6 45 721 DEC BUFFER+1
|
2017-10-22 18:50:14 +00:00
|
|
|
|
722
|
2017-11-01 15:22:35 +00:00
|
|
|
|
CA6B: A9 FF 723 :CRC LDA #DUMMY
|
|
|
|
|
CA6D: 9D 80 C0 724 STA DATA,X ; send 2 dummy crc bytes
|
|
|
|
|
CA70: 9D 80 C0 725 STA DATA,X
|
|
|
|
|
726
|
|
|
|
|
CA73: 9D 80 C0 727 STA DATA,X ; get data response
|
|
|
|
|
CA76: BD 80 C0 728 LDA DATA,X
|
|
|
|
|
CA79: 29 1F 729 AND #$1F
|
|
|
|
|
CA7B: C9 05 730 CMP #$05
|
|
|
|
|
CA7D: D0 1A 731 BNE :IOERROR ; check for write error
|
|
|
|
|
CA7F: 18 732 CLC ; no error
|
|
|
|
|
CA80: A9 00 733 LDA #0
|
|
|
|
|
734
|
|
|
|
|
CA82: 08 735 :DONE PHP
|
|
|
|
|
CA83: 48 736 PHA
|
|
|
|
|
CA84: A9 FF 737 :WAIT LDA #DUMMY
|
|
|
|
|
CA86: 9D 80 C0 738 STA DATA,X ; wait for write cycle
|
|
|
|
|
CA89: BD 80 C0 739 LDA DATA,X ; to complete
|
|
|
|
|
CA8C: F0 F6 740 BEQ :WAIT
|
|
|
|
|
741
|
|
|
|
|
CA8E: BD 83 C0 742 LDA SS,X ; disable /CS
|
|
|
|
|
CA91: 09 01 743 ORA #SS0
|
|
|
|
|
CA93: 9D 83 C0 744 STA SS,X
|
|
|
|
|
CA96: 68 745 PLA
|
|
|
|
|
CA97: 28 746 PLP
|
|
|
|
|
CA98: 60 747 RTS
|
|
|
|
|
748
|
|
|
|
|
CA99: 38 749 :IOERROR SEC ; an error occured
|
|
|
|
|
CA9A: A9 27 750 LDA #$27
|
|
|
|
|
CA9C: 80 E4 751 BRA :DONE
|
|
|
|
|
752
|
|
|
|
|
CA9E: 38 753 :WPERROR SEC
|
|
|
|
|
CA9F: A9 2B 754 LDA #$2B
|
|
|
|
|
CAA1: 80 DF 755 BRA :DONE
|
|
|
|
|
756
|
2017-10-22 18:50:14 +00:00
|
|
|
|
757
|
2017-11-01 15:22:35 +00:00
|
|
|
|
758
|
|
|
|
|
759 ********************************
|
|
|
|
|
760 *
|
|
|
|
|
761 * Format
|
|
|
|
|
762 * not supported!
|
|
|
|
|
763 *
|
|
|
|
|
764 ********************************
|
|
|
|
|
765
|
|
|
|
|
CAA3: 38 766 FORMAT SEC
|
|
|
|
|
CAA4: A9 01 767 LDA #$01 ; invalid command
|
|
|
|
|
CAA6: 60 768 RTS
|
|
|
|
|
769
|
2017-10-22 18:50:14 +00:00
|
|
|
|
770
|
2017-11-01 15:22:35 +00:00
|
|
|
|
771 ********************************
|
|
|
|
|
772 *
|
|
|
|
|
773 * Test routine
|
|
|
|
|
774 *
|
|
|
|
|
775 ********************************
|
|
|
|
|
776
|
|
|
|
|
CAA7: A5 2B 777 TEST LDA SLOT16
|
|
|
|
|
CAA9: 48 778 PHA
|
|
|
|
|
CAAA: A5 3D 779 LDA SLOT
|
|
|
|
|
CAAC: 48 780 PHA
|
|
|
|
|
781
|
|
|
|
|
782 * get buffer
|
|
|
|
|
CAAD: A9 02 783 LDA #2 ; get 512 byte buffer
|
|
|
|
|
CAAF: 20 F5 BE 784 JSR $BEF5 ; call GETBUFR
|
|
|
|
|
CAB2: B0 49 785 BCS :ERROR
|
|
|
|
|
CAB4: 85 45 786 STA BUFFER+1
|
|
|
|
|
CAB6: 64 44 787 STZ BUFFER
|
|
|
|
|
CAB8: 68 788 PLA
|
|
|
|
|
CAB9: 85 3D 789 STA SLOT
|
|
|
|
|
CABB: 68 790 PLA
|
|
|
|
|
CABC: 85 2B 791 STA SLOT16
|
|
|
|
|
792
|
|
|
|
|
793 * fill buffer
|
|
|
|
|
CABE: A0 00 794 LDY #0
|
|
|
|
|
CAC0: 98 795 :LOOP TYA
|
|
|
|
|
CAC1: 91 44 796 STA (BUFFER),Y
|
|
|
|
|
CAC3: C8 797 INY
|
|
|
|
|
CAC4: D0 FA 798 BNE :LOOP
|
|
|
|
|
CAC6: E6 45 799 INC BUFFER+1
|
|
|
|
|
CAC8: 98 800 :LOOP1 TYA
|
|
|
|
|
CAC9: 91 44 801 STA (BUFFER),Y
|
|
|
|
|
CACB: C8 802 INY
|
|
|
|
|
CACC: D0 FA 803 BNE :LOOP1
|
|
|
|
|
CACE: C6 45 804 DEC BUFFER+1
|
|
|
|
|
805
|
|
|
|
|
CAD0: 64 46 806 STZ BLOCK ; block number
|
|
|
|
|
CAD2: 64 47 807 STZ BLOCK+1
|
|
|
|
|
CAD4: A6 2B 808 LDX SLOT16
|
|
|
|
|
809
|
|
|
|
|
811 * write to card
|
|
|
|
|
CAD6: 20 34 CA 812 JSR WRITE
|
|
|
|
|
CAD9: B0 22 813 BCS :ERROR
|
|
|
|
|
814
|
|
|
|
|
815 * read from card
|
|
|
|
|
CADB: 20 CD C9 816 JSR READ
|
|
|
|
|
CADE: B0 1D 817 BCS :ERROR
|
|
|
|
|
818
|
|
|
|
|
819 * check for errors
|
|
|
|
|
CAE0: A0 00 820 LDY #0
|
|
|
|
|
CAE2: 98 821 :LOOP2 TYA
|
|
|
|
|
CAE3: D1 44 822 CMP (BUFFER),Y
|
|
|
|
|
CAE5: D0 17 823 BNE :ERRCMP ; error in buffer
|
|
|
|
|
CAE7: C8 824 INY
|
|
|
|
|
CAE8: D0 F8 825 BNE :LOOP2
|
|
|
|
|
CAEA: E6 45 826 INC BUFFER+1
|
|
|
|
|
CAEC: 98 827 :LOOP3 TYA
|
|
|
|
|
CAED: D1 44 828 CMP (BUFFER),Y
|
|
|
|
|
CAEF: D0 0D 829 BNE :ERRCMP
|
|
|
|
|
CAF1: C8 830 INY
|
|
|
|
|
CAF2: D0 F8 831 BNE :LOOP3
|
|
|
|
|
CAF4: C6 45 832 DEC BUFFER+1
|
|
|
|
|
833
|
|
|
|
|
834 * free buffer
|
|
|
|
|
CAF6: 20 F8 BE 835 JSR $BEF8 ; call FREEBUFR
|
|
|
|
|
CAF9: 18 836 CLC
|
|
|
|
|
CAFA: A9 00 837 LDA #0
|
|
|
|
|
CAFC: 60 838 RTS
|
2017-10-22 18:50:14 +00:00
|
|
|
|
839
|
2017-11-01 15:22:35 +00:00
|
|
|
|
CAFD: 00 840 :ERROR BRK
|
|
|
|
|
CAFE: 00 841 :ERRCMP BRK
|
|
|
|
|
842
|
|
|
|
|
843
|
|
|
|
|
CAFF: 40 00 00 844 CMD0 HEX 400000
|
|
|
|
|
CB02: 00 00 95 845 HEX 000095
|
|
|
|
|
CB05: 41 00 00 846 CMD1 HEX 410000
|
|
|
|
|
CB08: 00 00 F9 847 HEX 0000F9
|
|
|
|
|
CB0B: 48 00 00 848 CMD8 HEX 480000
|
|
|
|
|
CB0E: 01 AA 87 849 HEX 01AA87
|
|
|
|
|
CB11: 50 00 00 850 CMD16 HEX 500000
|
|
|
|
|
CB14: 02 00 FF 851 HEX 0200FF
|
|
|
|
|
CB17: 77 00 00 852 CMD55 HEX 770000
|
|
|
|
|
CB1A: 00 00 65 853 HEX 000065
|
|
|
|
|
CB1D: 69 40 00 854 ACMD4140 HEX 694000
|
|
|
|
|
CB20: 00 00 77 855 HEX 000077
|
|
|
|
|
CB23: 69 00 00 856 ACMD410 HEX 690000
|
|
|
|
|
CB26: 00 00 FF 857 HEX 0000FF
|
2017-08-26 22:37:54 +00:00
|
|
|
|
|
|
|
|
|
|
2017-11-01 15:22:35 +00:00
|
|
|
|
--End assembly, 1065 bytes, Errors: 0
|
2017-08-27 13:02:58 +00:00
|
|
|
|
|
2017-08-26 22:37:54 +00:00
|
|
|
|
|
2017-08-27 13:02:58 +00:00
|
|
|
|
Symbol table - alphabetical order:
|
2017-08-26 22:37:54 +00:00
|
|
|
|
|
2017-11-01 15:22:35 +00:00
|
|
|
|
ACMD410 =$CB23 ACMD4140=$CB1D BLOCK =$46 ? BOOT =$C72B
|
|
|
|
|
BUFFER =$44 CARDDET =$C9A7 CD =$40 CMD0 =$CAFF
|
|
|
|
|
CMD1 =$CB05 CMD16 =$CB11 CMD55 =$CB17 CMD8 =$CB0B
|
|
|
|
|
CMDHI =$41 CMDLO =$40 COMMAND =$C97F CTRL =$C081
|
|
|
|
|
CURSLOT =$07F8 DATA =$C080 DCMD =$42 DEBUG =$00
|
|
|
|
|
DIV =$C082 DRIVER =$C749 DUMMY =$FF ECE =$04
|
|
|
|
|
FORMAT =$CAA3 FRX =$10 GETBLOCK=$C94A GETR1 =$C8FF
|
|
|
|
|
GETR3 =$C918 INIT =$C800 INITED =$80 R30 =$0478
|
|
|
|
|
R31 =$04F8 R32 =$0578 R33 =$05F8 READ =$C9CD
|
|
|
|
|
SDCMD =$C8EB SLOT =$3D SLOT16 =$2B SS =$C083
|
|
|
|
|
SS0 =$01 STATUS =$C9BF TEST =$CAA7 WP =$20
|
|
|
|
|
WRITE =$CA34 WRPROT =$C9B3
|
2017-08-26 22:37:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Symbol table - numerical order:
|
|
|
|
|
|
2017-08-27 13:02:58 +00:00
|
|
|
|
DEBUG =$00 SS0 =$01 ECE =$04 FRX =$10
|
2017-11-01 15:22:35 +00:00
|
|
|
|
WP =$20 SLOT16 =$2B SLOT =$3D CMDLO =$40
|
|
|
|
|
CD =$40 CMDHI =$41 DCMD =$42 BUFFER =$44
|
|
|
|
|
BLOCK =$46 INITED =$80 DUMMY =$FF R30 =$0478
|
|
|
|
|
R31 =$04F8 R32 =$0578 R33 =$05F8 CURSLOT =$07F8
|
|
|
|
|
DATA =$C080 CTRL =$C081 DIV =$C082 SS =$C083
|
|
|
|
|
? BOOT =$C72B DRIVER =$C749 INIT =$C800 SDCMD =$C8EB
|
|
|
|
|
GETR1 =$C8FF GETR3 =$C918 GETBLOCK=$C94A COMMAND =$C97F
|
|
|
|
|
CARDDET =$C9A7 WRPROT =$C9B3 STATUS =$C9BF READ =$C9CD
|
|
|
|
|
WRITE =$CA34 FORMAT =$CAA3 TEST =$CAA7 CMD0 =$CAFF
|
|
|
|
|
CMD1 =$CB<43><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ٍ<EFBFBD><D98D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =$CB11 CMD55 =$CB17
|
|
|
|
|
ACMD4140=$CB1D ACMD410 =$CB23
|
|
|
|
|
31 =$04F8 R32 =$0578 R33 =$05F8
|
|
|
|
|
RAM0 =$0678 RAM1 =$06<30>8 READ =$82CF SLOT =$3D
|
|
|
|
|
SLOT16 =$2B S<><53><EFBFBD>Ս =$C083 SS0 =$01 STATUS =$82C1
|
|
|
|
|
TEST =$83AD WORK =$3C WP =$20 WRITE =$8338
|
|
|
|
|
WRPROT =$82B5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Symbol table - numerical order:
|
|
|
|
|
|
|
|
|
|
DEBUG =$01 SS0 =$01 ECE =$04 FRX =$10
|
2017-09-09 18:34:24 +00:00
|
|
|
|
WP =$20 SLOT16 =$2B WORK =$3C SLOT =$3D
|
2017-10-15 14:48:13 +00:00
|
|
|
|
CMDLO =$40 CD =$40 CMDHI =$41 DCMD =$42
|
|
|
|
|
BUFFER =$44 BLOCK =$46 INITED =$80 DUMMY =$FF
|
|
|
|
|
R30 =$0478 R31 =$04F8 R32 =$0578 R33 =$05F8
|
2017-11-01 15:22:35 +00:00
|
|
|
|
RAM0 =$0678 RAM1 =$06F8 CURSLOT =$07F8 INSTALL =$8027
|
|
|
|
|
DRIVER =$8062 INIT =$8100 CMD =$81EB GETR1 =$81FF
|
|
|
|
|
GETR3 =$821A GETBLOCK=$824C COMMAND =$8281 CARDDET =$82A9
|
|
|
|
|
WRPROT =$82B5 STATUS =$82C1 READ =$82CF WRITE =$8338
|
|
|
|
|
FORMAT =$83A9 TEST =$83AD CMD0 =$8431 CMD1 =$8437
|
|
|
|
|
CMD8 =$843D CMD16 =$8443 CMD55 =$8449 ACMD4140=$844F
|
|
|
|
|
ACMD410 =$8455 DATA =$C080 CTRL =$C081 DIV =$C082
|
|
|
|
|
SS =$C083
|
2017-08-26 22:37:54 +00:00
|
|
|
|
|