2017-08-26 22:37:54 +00:00
|
|
|
|
1 ********************************
|
|
|
|
|
2 *
|
|
|
|
|
3 * Apple][Sd Firmware
|
2017-10-15 14:48:13 +00:00
|
|
|
|
4 * Version 0.7
|
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-10-22 18:50:14 +00:00
|
|
|
|
22-OCT-17 20:21
|
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-08-27 13:02:58 +00:00
|
|
|
|
26 WORK = $3C
|
2017-08-26 22:37:54 +00:00
|
|
|
|
27 SLOT = $3D ; $0s
|
2017-08-27 13:02:58 +00:00
|
|
|
|
28 CMDLO = $40
|
|
|
|
|
29 CMDHI = $41
|
|
|
|
|
30
|
2017-10-15 14:48:13 +00:00
|
|
|
|
31 DCMD = $42 ; Command code
|
|
|
|
|
32 BUFFER = $44 ; Buffer address
|
|
|
|
|
33 BLOCK = $46 ; Block number
|
|
|
|
|
34
|
|
|
|
|
35 CURSLOT = $07F8 ; $Cs
|
|
|
|
|
36 DATA = $C080
|
|
|
|
|
37 CTRL = DATA+1
|
|
|
|
|
38 DIV = DATA+2
|
|
|
|
|
39 SS = DATA+3
|
|
|
|
|
40 R30 = $0478
|
|
|
|
|
41 R31 = $04F8
|
|
|
|
|
42 R32 = $0578
|
|
|
|
|
43 R33 = $05F8
|
2017-10-22 18:50:14 +00:00
|
|
|
|
44 RAM0 = $0678
|
|
|
|
|
45 RAM1 = $06F8
|
2017-10-15 14:48:13 +00:00
|
|
|
|
46
|
2017-10-22 18:50:14 +00:00
|
|
|
|
47 * Constants
|
|
|
|
|
48
|
|
|
|
|
49 DUMMY = $FF
|
|
|
|
|
50 FRX = $10 ; CTRL register
|
|
|
|
|
51 ECE = $04
|
|
|
|
|
52 SS0 = $01 ; SS register
|
|
|
|
|
53 WP = $20
|
|
|
|
|
54 CD = $40
|
|
|
|
|
55 INITED = $80
|
|
|
|
|
56
|
|
|
|
|
57
|
|
|
|
|
58 * signature bytes
|
|
|
|
|
59
|
|
|
|
|
C700: A2 20 60 LDX #$20
|
|
|
|
|
C702: A0 00 61 LDY #$00
|
|
|
|
|
C704: A2 03 62 LDX #$03
|
|
|
|
|
C706: A0 FF 63 LDY #$FF ; neither 5.25 nor Smartport
|
|
|
|
|
64
|
|
|
|
|
65 * find slot nr
|
|
|
|
|
66
|
|
|
|
|
67 DO DEBUG
|
|
|
|
|
68 LDA #$04
|
|
|
|
|
69 STA SLOT
|
|
|
|
|
70 LDA #$C4
|
|
|
|
|
71 STA CURSLOT
|
|
|
|
|
72 LDA #$40
|
|
|
|
|
73
|
|
|
|
|
74 ELSE
|
|
|
|
|
C708: 20 58 FF 75 JSR $FF58
|
|
|
|
|
C70B: BA 76 TSX
|
|
|
|
|
C70C: BD 00 01 77 LDA $0100,X
|
|
|
|
|
C70F: 8D F8 07 78 STA CURSLOT ; $Cs
|
|
|
|
|
C712: 29 0F 79 AND #$0F
|
|
|
|
|
C714: 85 3D 80 STA SLOT ; $0s
|
|
|
|
|
C716: 0A 81 ASL A
|
|
|
|
|
C717: 0A 82 ASL A
|
|
|
|
|
C718: 0A 83 ASL A
|
|
|
|
|
C719: 0A 84 ASL A
|
|
|
|
|
85 FIN
|
|
|
|
|
86
|
|
|
|
|
C71A: 85 2B 87 STA SLOT16 ; $s0
|
|
|
|
|
C71C: AA 88 TAX ; X holds now SLOT16
|
|
|
|
|
C71D: 2C FF CF 89 BIT $CFFF
|
|
|
|
|
C720: 20 A9 C9 90 JSR CARDDET
|
|
|
|
|
C723: 90 03 91 BCC :INIT
|
|
|
|
|
C725: A9 2F 92 LDA #$2F ; no card inserted
|
|
|
|
|
C727: 00 93 BRK
|
|
|
|
|
94
|
|
|
|
|
C728: 20 00 C8 95 :INIT JSR INIT
|
2017-10-16 22:06:33 +00:00
|
|
|
|
96
|
2017-10-22 18:50:14 +00:00
|
|
|
|
97
|
|
|
|
|
98 ********************************
|
|
|
|
|
99 *
|
|
|
|
|
100 * Install SD card driver
|
|
|
|
|
101 *
|
|
|
|
|
102 ********************************
|
|
|
|
|
103
|
|
|
|
|
104 DO DEBUG
|
2017-10-15 14:48:13 +00:00
|
|
|
|
105
|
2017-10-22 18:50:14 +00:00
|
|
|
|
106 * see if slot has a driver already
|
|
|
|
|
107
|
|
|
|
|
108 LDX $BF31 ; get devcnt
|
|
|
|
|
109 INSTALL LDA $BF32,X ; get a devnum
|
|
|
|
|
110 AND #$70 ; isolate slot
|
|
|
|
|
111 CMP SLOT16 ; slot?
|
|
|
|
|
112 BEQ :INSOUT ; yes, skip it
|
|
|
|
|
113 DEX
|
|
|
|
|
114 BPL INSTALL ; keep up the search
|
|
|
|
|
115
|
|
|
|
|
116 * restore the devnum to the list
|
|
|
|
|
117
|
|
|
|
|
118 LDX $BF31 ; get devcnt again
|
|
|
|
|
119 CPX #$0D ; device table full?
|
|
|
|
|
120 BNE :INST2
|
|
|
|
|
121
|
|
|
|
|
122 JSR $FF3A ; bell
|
|
|
|
|
123 JMP :INSOUT ; do something!
|
|
|
|
|
124
|
|
|
|
|
125 :INST2 LDA $BF32-1,X ; move all entries down
|
|
|
|
|
126 STA $BF32,X ; to make room at front
|
|
|
|
|
127 DEX ; for a new entry
|
|
|
|
|
128 BNE :INST2
|
|
|
|
|
129 LDA #$04 ; ProFile type device
|
|
|
|
|
130 ORA SLOT16
|
|
|
|
|
131 STA $BF32 ; slot, drive 1 at top of list
|
|
|
|
|
132 INC $BF31 ; update devcnt
|
|
|
|
|
133
|
|
|
|
|
134 * now insert the device driver vector
|
|
|
|
|
135
|
|
|
|
|
136 LDA SLOT
|
|
|
|
|
137 ASL
|
|
|
|
|
138 TAX
|
|
|
|
|
139 LDA #<DRIVER
|
|
|
|
|
140 STA $BF10,X ; write to driver table
|
|
|
|
|
141 LDA #>DRIVER
|
|
|
|
|
142 STA $BF11,X
|
|
|
|
|
143 :INSOUT RTS
|
|
|
|
|
144
|
|
|
|
|
145
|
|
|
|
|
146 ********************************
|
|
|
|
|
147 *
|
|
|
|
|
148 * Boot from SD card
|
|
|
|
|
149 *
|
|
|
|
|
150 ********************************
|
|
|
|
|
151
|
|
|
|
|
152 ELSE
|
|
|
|
|
153
|
|
|
|
|
C72B: C9 00 154 BOOT CMP #0 ; check for error
|
|
|
|
|
C72D: F0 01 155 BEQ :BOOT1
|
|
|
|
|
C72F: 00 156 BRK
|
|
|
|
|
157
|
|
|
|
|
C730: A9 01 158 :BOOT1 LDA #$01
|
|
|
|
|
C732: 85 42 159 STA DCMD ; load command
|
|
|
|
|
C734: A6 2B 160 LDX SLOT16
|
|
|
|
|
C736: 85 43 161 STA $43 ; slot number
|
|
|
|
|
C738: 64 44 162 STZ BUFFER ; buffer lo
|
|
|
|
|
C73A: A9 08 163 LDA #$08
|
|
|
|
|
C73C: 85 45 164 STA BUFFER+1 ; buffer hi
|
|
|
|
|
C73E: 64 46 165 STZ BLOCK ; block lo
|
|
|
|
|
C740: 64 47 166 STZ BLOCK+1 ; block hi
|
|
|
|
|
C742: 2C FF CF 167 BIT $CFFF
|
|
|
|
|
C745: 20 CF C9 168 JSR READ ; call driver
|
|
|
|
|
C748: 4C 01 08 169 JMP $801 ; goto bootloader
|
|
|
|
|
170
|
|
|
|
|
171 FIN
|
|
|
|
|
172
|
|
|
|
|
173
|
|
|
|
|
174 ********************************
|
|
|
|
|
175 *
|
|
|
|
|
176 * Jump table
|
|
|
|
|
177 *
|
|
|
|
|
178 ********************************
|
|
|
|
|
179
|
|
|
|
|
C74B: D8 180 DRIVER CLD
|
|
|
|
|
181
|
|
|
|
|
182 DO DEBUG
|
|
|
|
|
183 LDA #$04
|
|
|
|
|
184 STA SLOT
|
|
|
|
|
185 LDA #$C4
|
|
|
|
|
186 STA CURSLOT
|
|
|
|
|
187 LDA #$40
|
|
|
|
|
188
|
|
|
|
|
189 ELSE
|
|
|
|
|
C74C: 20 58 FF 190 JSR $FF58 ; find slot nr
|
|
|
|
|
C74F: BA 191 TSX
|
|
|
|
|
C750: BD 00 01 192 LDA $0100,X
|
|
|
|
|
C753: 8D F8 07 193 STA CURSLOT ; $Cs
|
|
|
|
|
C756: 29 0F 194 AND #$0F
|
|
|
|
|
C758: 85 3D 195 STA SLOT ; $0s
|
|
|
|
|
C75A: 0A 196 ASL A
|
|
|
|
|
C75B: 0A 197 ASL A
|
|
|
|
|
C75C: 0A 198 ASL A
|
|
|
|
|
C75D: 0A 199 ASL A
|
|
|
|
|
200 FIN
|
|
|
|
|
201
|
|
|
|
|
C75E: 85 2B 202 STA SLOT16 ; $s0
|
|
|
|
|
C760: AA 203 TAX ; X holds now SLOT16
|
|
|
|
|
C761: 2C FF CF 204 BIT $CFFF
|
|
|
|
|
C764: 20 A9 C9 205 JSR CARDDET
|
|
|
|
|
C767: 90 04 206 BCC :INITED
|
|
|
|
|
C769: A9 2F 207 LDA #$2F ; no card inserted
|
|
|
|
|
C76B: 80 1F 208 BRA :DONE
|
2017-10-16 22:06:33 +00:00
|
|
|
|
209
|
2017-10-22 18:50:14 +00:00
|
|
|
|
C76D: A9 80 210 :INITED LDA #INITED ; check for init
|
|
|
|
|
C76F: 3C 83 C0 211 BIT SS,X
|
|
|
|
|
C772: F0 29 212 BEQ :INIT
|
|
|
|
|
213
|
|
|
|
|
C774: A5 42 214 :CMD LDA DCMD ; get command
|
|
|
|
|
C776: C9 00 215 CMP #0
|
|
|
|
|
C778: F0 14 216 BEQ :STATUS
|
|
|
|
|
C77A: C9 01 217 CMP #1
|
|
|
|
|
C77C: F0 13 218 BEQ :READ
|
|
|
|
|
C77E: C9 02 219 CMP #2
|
|
|
|
|
C780: F0 12 220 BEQ :WRITE
|
|
|
|
|
C782: C9 03 221 CMP #3
|
|
|
|
|
C784: F0 11 222 BEQ :FORMAT
|
|
|
|
|
C786: C9 FF 223 CMP #$FF
|
|
|
|
|
C788: F0 10 224 BEQ :TEST
|
|
|
|
|
C78A: A9 01 225 LDA #1 ; unknown command
|
|
|
|
|
226
|
|
|
|
|
C78C: 38 227 :DONE SEC
|
|
|
|
|
C78D: 60 228 RTS
|
|
|
|
|
229
|
|
|
|
|
C78E: 4C C1 C9 230 :STATUS JMP STATUS
|
|
|
|
|
C791: 4C CF C9 231 :READ JMP READ
|
|
|
|
|
C794: 4C 38 CA 232 :WRITE JMP WRITE
|
|
|
|
|
C797: 4C A9 CA 233 :FORMAT JMP FORMAT
|
|
|
|
|
C79A: 4C AD CA 234 :TEST JMP TEST ; do device test
|
|
|
|
|
C79D: 20 00 C8 235 :INIT JSR INIT
|
|
|
|
|
C7A0: B0 EA 236 BCS :DONE ; init failure
|
|
|
|
|
C7A2: 80 D0 237 BRA :CMD
|
|
|
|
|
238
|
2017-10-16 22:06:33 +00:00
|
|
|
|
239
|
2017-10-22 18:50:14 +00:00
|
|
|
|
240 * Signature bytes
|
|
|
|
|
241
|
|
|
|
|
C7A4: 00 00 00 242 DS \ ; fill with zeroes
|
|
|
|
|
C7A7: 00 00 00 00
|
|
|
|
|
C7AB: 00 00 00 00
|
|
|
|
|
C7AF: 00 00 00 00
|
|
|
|
|
C7B3: 00 00 00 00
|
|
|
|
|
C7B7: 00 00 00 00
|
|
|
|
|
C7BB: 00 00 00 00
|
|
|
|
|
C7BF: 00 00 00 00
|
|
|
|
|
C7C3: 00 00 00 00
|
|
|
|
|
C7C7: 00 00 00 00
|
|
|
|
|
C7CB: 00 00 00 00
|
|
|
|
|
C7CF: 00 00 00 00
|
|
|
|
|
C7D3: 00 00 00 00
|
|
|
|
|
C7D7: 00 00 00 00
|
|
|
|
|
C7DB: 00 00 00 00
|
|
|
|
|
C7DF: 00 00 00 00
|
|
|
|
|
C7E3: 00 00 00 00
|
|
|
|
|
C7E7: 00 00 00 00
|
|
|
|
|
C7EB: 00 00 00 00
|
|
|
|
|
C7EF: 00 00 00 00
|
|
|
|
|
C7F3: 00 00 00 00
|
|
|
|
|
C7F7: 00 00 00 00
|
|
|
|
|
C7FB: 00 00 00 00
|
|
|
|
|
C7FF: 00
|
|
|
|
|
243 DS -4 ; locate to $xxFC
|
|
|
|
|
C7FC: FF FF 244 DW $FFFF ; 65535 blocks
|
|
|
|
|
C7FE: 17 245 DB $17 ; Status bits
|
|
|
|
|
C7FF: 4B 246 DB #<DRIVER ; LSB of driver
|
|
|
|
|
247
|
|
|
|
|
248 ********************************
|
|
|
|
|
249 *
|
|
|
|
|
250 * Initialize SD card
|
|
|
|
|
251 *
|
|
|
|
|
252 * C Clear - No error
|
|
|
|
|
253 * Set - Error
|
|
|
|
|
254 * A $00 - No error
|
|
|
|
|
255 * $27 - I/O error - Init failed
|
|
|
|
|
256 * $2F - No card inserted
|
|
|
|
|
257 *
|
|
|
|
|
258 ********************************
|
|
|
|
|
259
|
|
|
|
|
C800: D8 260 INIT CLD
|
|
|
|
|
C801: A9 03 261 LDA #$03 ; set SPI mode 3
|
|
|
|
|
C803: 9D 81 C0 262 STA CTRL,X
|
|
|
|
|
C806: BD 83 C0 263 LDA SS,X
|
|
|
|
|
C809: 09 01 264 ORA #SS0 ; set CS high
|
|
|
|
|
C80B: 9D 83 C0 265 STA SS,X
|
|
|
|
|
C80E: A9 07 266 LDA #7
|
|
|
|
|
C810: 9D 82 C0 267 STA DIV,X
|
|
|
|
|
C813: A0 0A 268 LDY #10
|
|
|
|
|
C815: A9 FF 269 LDA #DUMMY
|
|
|
|
|
270
|
|
|
|
|
C817: 9D 80 C0 271 :LOOP STA DATA,X
|
|
|
|
|
C81A: 3C 81 C0 272 :WAIT BIT CTRL,X
|
|
|
|
|
C81D: 10 FB 273 BPL :WAIT
|
|
|
|
|
C81F: 88 274 DEY
|
|
|
|
|
C820: D0 F5 275 BNE :LOOP ; do 10 times
|
|
|
|
|
C822: BD 83 C0 276 LDA SS,X
|
|
|
|
|
C825: 29 FE 277 AND #$FF!SS0 ; set CS low
|
|
|
|
|
C827: 9D 83 C0 278 STA SS,X
|
|
|
|
|
279
|
|
|
|
|
C82A: A9 31 280 LDA #<CMD0 ; send CMD0
|
|
|
|
|
C82C: 85 40 281 STA CMDLO
|
|
|
|
|
C82E: A9 CB 282 LDA #>CMD0
|
|
|
|
|
C830: 85 41 283 STA CMDHI
|
|
|
|
|
C832: 20 EB C8 284 JSR CMD
|
|
|
|
|
C835: 20 FF C8 285 JSR GETR1 ; get response
|
|
|
|
|
C838: C9 01 286 CMP #$01
|
|
|
|
|
C83A: D0 39 287 BNE :ERROR1 ; error!
|
|
|
|
|
288
|
|
|
|
|
C83C: A9 3D 289 LDA #<CMD8 ; send CMD8
|
|
|
|
|
C83E: 85 40 290 STA CMDLO
|
|
|
|
|
C840: A9 CB 291 LDA #>CMD8
|
|
|
|
|
C842: 85 41 292 STA CMDHI
|
|
|
|
|
C844: 20 EB C8 293 JSR CMD
|
|
|
|
|
C847: 20 1A C9 294 JSR GETR3
|
|
|
|
|
C84A: C9 01 295 CMP #$01
|
|
|
|
|
C84C: D0 2A 296 BNE :SDV1 ; may be SD Ver. 1
|
|
|
|
|
297
|
|
|
|
|
298 * check for $01aa match!
|
|
|
|
|
C84E: A9 49 299 :SDV2 LDA #<CMD55
|
|
|
|
|
C850: 85 40 300 STA CMDLO
|
|
|
|
|
C852: A9 CB 301 LDA #>CMD55
|
|
|
|
|
C854: 85 41 302 STA CMDHI
|
|
|
|
|
C856: 20 EB C8 303 JSR CMD
|
|
|
|
|
C859: 20 FF C8 304 JSR GETR1
|
|
|
|
|
C85C: A9 4F 305 LDA #<ACMD4140
|
|
|
|
|
C85E: 85 40 306 STA CMDLO
|
|
|
|
|
C860: A9 CB 307 LDA #>ACMD4140
|
|
|
|
|
C862: 85 41 308 STA CMDHI
|
|
|
|
|
C864: 20 EB C8 309 JSR CMD
|
|
|
|
|
C867: 20 FF C8 310 JSR GETR1
|
|
|
|
|
C86A: C9 01 311 CMP #$01
|
|
|
|
|
C86C: F0 E0 312 BEQ :SDV2 ; wait for ready
|
|
|
|
|
C86E: C9 00 313 CMP #$00
|
|
|
|
|
C870: D0 03 314 BNE :ERROR1 ; error!
|
|
|
|
|
315 * send CMD58
|
|
|
|
|
316 * SD Ver. 2 initialized!
|
|
|
|
|
C872: 4C B2 C8 317 JMP :BLOCKSZ
|
|
|
|
|
318
|
|
|
|
|
C875: 4C D9 C8 319 :ERROR1 JMP :IOERROR ; needed for far jump
|
|
|
|
|
320
|
|
|
|
|
C878: A9 49 321 :SDV1 LDA #<CMD55
|
|
|
|
|
C87A: 85 40 322 STA CMDLO
|
|
|
|
|
C87C: A9 CB 323 LDA #>CMD55
|
|
|
|
|
C87E: 85 41 324 STA CMDHI
|
|
|
|
|
C880: 20 EB C8 325 JSR CMD ; ignore response
|
|
|
|
|
C883: A9 55 326 LDA #<ACMD410
|
|
|
|
|
C885: 85 40 327 STA CMDLO
|
|
|
|
|
C887: A9 CB 328 LDA #>ACMD410
|
|
|
|
|
C889: 85 41 329 STA CMDHI
|
|
|
|
|
C88B: 20 EB C8 330 JSR CMD
|
|
|
|
|
C88E: 20 FF C8 331 JSR GETR1
|
|
|
|
|
C891: C9 01 332 CMP #$01
|
|
|
|
|
C893: F0 E3 333 BEQ :SDV1 ; wait for ready
|
|
|
|
|
C895: C9 00 334 CMP #$00
|
|
|
|
|
C897: D0 03 335 BNE :MMC ; may be MMC card
|
|
|
|
|
336 * SD Ver. 1 initialized!
|
|
|
|
|
C899: 4C B2 C8 337 JMP :BLOCKSZ
|
|
|
|
|
338
|
|
|
|
|
C89C: A9 37 339 :MMC LDA #<CMD1
|
|
|
|
|
C89E: 85 40 340 STA CMDLO
|
|
|
|
|
C8A0: A9 CB 341 LDA #>CMD1
|
|
|
|
|
C8A2: 85 41 342 STA CMDHI
|
|
|
|
|
C8A4: 20 EB C8 343 :LOOP1 JSR CMD
|
|
|
|
|
C8A7: 20 FF C8 344 JSR GETR1
|
|
|
|
|
C8AA: C9 01 345 CMP #$01
|
|
|
|
|
C8AC: F0 F6 346 BEQ :LOOP1 ; wait for ready
|
|
|
|
|
C8AE: C9 00 347 CMP #$00
|
|
|
|
|
C8B0: D0 27 348 BNE :IOERROR ; error!
|
|
|
|
|
349 * MMC Ver. 3 initialized!
|
|
|
|
|
350
|
|
|
|
|
C8B2: A9 43 351 :BLOCKSZ LDA #<CMD16
|
|
|
|
|
C8B4: 85 40 352 STA CMDLO
|
|
|
|
|
C8B6: A9 CB 353 LDA #>CMD16
|
|
|
|
|
C8B8: 85 41 354 STA CMDHI
|
|
|
|
|
C8BA: 20 EB C8 355 JSR CMD
|
|
|
|
|
C8BD: 20 FF C8 356 JSR GETR1
|
|
|
|
|
C8C0: C9 00 357 CMP #$00
|
|
|
|
|
C8C2: D0 15 358 BNE :IOERROR ; error!
|
|
|
|
|
359
|
|
|
|
|
C8C4: BD 83 C0 360 :END LDA SS,X
|
|
|
|
|
C8C7: 09 80 361 ORA #INITED ; initialized
|
|
|
|
|
C8C9: 9D 83 C0 362 STA SS,X
|
|
|
|
|
C8CC: BD 81 C0 363 LDA CTRL,X
|
|
|
|
|
C8CF: 09 04 364 ORA #ECE ; enable 7MHz
|
|
|
|
|
C8D1: 9D 81 C0 365 STA CTRL,X
|
|
|
|
|
C8D4: 18 366 CLC ; all ok
|
|
|
|
|
C8D5: A0 00 367 LDY #0
|
|
|
|
|
C8D7: 90 03 368 BCC :END1
|
|
|
|
|
C8D9: 38 369 :IOERROR SEC
|
|
|
|
|
C8DA: A0 27 370 LDY #$27 ; init error
|
|
|
|
|
C8DC: BD 83 C0 371 :END1 LDA SS,X ; set CS high
|
|
|
|
|
C8DF: 09 01 372 ORA #SS0
|
|
|
|
|
C8E1: 9D 83 C0 373 STA SS,X
|
|
|
|
|
C8E4: A9 00 374 LDA #0 ; set div to 2
|
|
|
|
|
C8E6: 9D 82 C0 375 STA DIV,X
|
|
|
|
|
C8E9: 98 376 TYA ; retval in A
|
|
|
|
|
C8EA: 60 377 RTS
|
|
|
|
|
378
|
|
|
|
|
379
|
|
|
|
|
380 ********************************
|
|
|
|
|
381 *
|
|
|
|
|
382 * Send SD command
|
|
|
|
|
383 * Call with command in CMDHI and CMDLO
|
|
|
|
|
384 *
|
|
|
|
|
385 ********************************
|
|
|
|
|
386
|
|
|
|
|
C8EB: 5A 387 CMD PHY
|
|
|
|
|
C8EC: A0 00 388 LDY #0
|
|
|
|
|
C8EE: B1 40 389 :LOOP LDA (CMDLO),Y
|
|
|
|
|
C8F0: 9D 80 C0 390 STA DATA,X
|
|
|
|
|
C8F3: 3C 81 C0 391 :WAIT BIT CTRL,X ; TC is in N
|
|
|
|
|
C8F6: 10 FB 392 BPL :WAIT
|
|
|
|
|
C8F8: C8 393 INY
|
|
|
|
|
C8F9: C0 06 394 CPY #6
|
|
|
|
|
C8FB: 90 F1 395 BCC :LOOP
|
|
|
|
|
C8FD: 7A 396 PLY
|
|
|
|
|
C8FE: 60 397 RTS
|
2017-10-16 22:06:33 +00:00
|
|
|
|
398
|
2017-10-22 18:50:14 +00:00
|
|
|
|
399
|
|
|
|
|
400 ********************************
|
|
|
|
|
401 *
|
|
|
|
|
402 * Get R1
|
|
|
|
|
403 * R1 is in A
|
|
|
|
|
404 *
|
|
|
|
|
405 ********************************
|
|
|
|
|
406
|
|
|
|
|
C8FF: A9 FF 407 GETR1 LDA #DUMMY
|
|
|
|
|
C901: 9D 80 C0 408 STA DATA,X
|
|
|
|
|
C904: 3C 81 C0 409 :WAIT BIT CTRL,X
|
|
|
|
|
C907: 10 FB 410 BPL :WAIT
|
|
|
|
|
C909: BD 80 C0 411 LDA DATA,X ; get response
|
|
|
|
|
C90C: 85 3C 412 STA WORK ; save R1
|
|
|
|
|
C90E: 29 80 413 AND #$80
|
|
|
|
|
C910: D0 ED 414 BNE GETR1 ; wait for MSB=0
|
|
|
|
|
C912: A9 FF 415 LDA #DUMMY
|
|
|
|
|
C914: 9D 80 C0 416 STA DATA,X ; send another dummy
|
|
|
|
|
C917: A5 3C 417 LDA WORK ; restore R1
|
|
|
|
|
C919: 60 418 RTS
|
2017-10-16 22:06:33 +00:00
|
|
|
|
419
|
2017-10-22 18:50:14 +00:00
|
|
|
|
420
|
|
|
|
|
421 ********************************
|
|
|
|
|
422 *
|
|
|
|
|
423 * Get R3
|
|
|
|
|
424 * R1 is in A
|
|
|
|
|
425 * R3 is in scratchpad ram
|
|
|
|
|
426 *
|
|
|
|
|
427 ********************************
|
|
|
|
|
428
|
|
|
|
|
C91A: 20 FF C8 429 GETR3 JSR GETR1 ; get R1 first
|
|
|
|
|
C91D: 48 430 PHA ; save R1
|
|
|
|
|
C91E: 5A 431 PHY ; save Y
|
|
|
|
|
C91F: A0 04 432 LDY #04 ; load counter
|
|
|
|
|
C921: A9 FF 433 :LOOP LDA #DUMMY ; send dummy
|
|
|
|
|
C923: 9D 80 C0 434 STA DATA,X
|
|
|
|
|
C926: 3C 81 C0 435 :WAIT BIT CTRL,X
|
|
|
|
|
C929: 10 FB 436 BPL :WAIT
|
|
|
|
|
C92B: BD 80 C0 437 LDA DATA,X
|
|
|
|
|
C92E: 48 438 PHA
|
|
|
|
|
C92F: 88 439 DEY
|
|
|
|
|
C930: D0 EF 440 BNE :LOOP ; do 4 times
|
|
|
|
|
C932: A4 3D 441 LDY SLOT
|
|
|
|
|
C934: 68 442 PLA
|
|
|
|
|
C935: 99 F8 05 443 STA R33,Y ; save R3
|
|
|
|
|
C938: 68 444 PLA
|
|
|
|
|
C939: 99 78 05 445 STA R32,Y
|
|
|
|
|
C93C: 68 446 PLA
|
|
|
|
|
C93D: 99 F8 04 447 STA R31,Y
|
|
|
|
|
C940: 68 448 PLA
|
|
|
|
|
C941: 99 78 04 449 STA R30,Y
|
|
|
|
|
C944: 7A 450 PLY ; restore Y
|
|
|
|
|
C945: A9 FF 451 LDA #DUMMY
|
|
|
|
|
C947: 9D 80 C0 452 STA DATA,X ; send another dummy
|
|
|
|
|
C94A: 68 453 PLA ; restore R1
|
|
|
|
|
C94B: 60 454 RTS
|
|
|
|
|
455
|
|
|
|
|
456
|
|
|
|
|
457 ********************************
|
|
|
|
|
458 *
|
|
|
|
|
459 * Calculate block address
|
|
|
|
|
460 * Unit number is in $43 DSSS0000
|
|
|
|
|
461 * Block no is in $46-47
|
|
|
|
|
462 * Address is in R30-R33
|
|
|
|
|
463 *
|
|
|
|
|
464 ********************************
|
|
|
|
|
465
|
|
|
|
|
C94C: DA 466 GETBLOCK PHX ; save X
|
|
|
|
|
C94D: 5A 467 PHY ; save Y
|
|
|
|
|
C94E: A6 3D 468 LDX SLOT
|
|
|
|
|
C950: A5 46 469 LDA BLOCK ; store block num
|
|
|
|
|
C952: 9D F8 05 470 STA R33,X ; in R30-R33
|
|
|
|
|
C955: A5 47 471 LDA BLOCK+1
|
|
|
|
|
C957: 9D 78 05 472 STA R32,X
|
|
|
|
|
C95A: A9 00 473 LDA #0
|
|
|
|
|
C95C: 9D F8 04 474 STA R31,X
|
|
|
|
|
C95F: 9D 78 04 475 STA R30,X
|
2017-10-16 22:06:33 +00:00
|
|
|
|
476
|
2017-10-22 18:50:14 +00:00
|
|
|
|
C962: A9 80 477 LDA #$80 ; drive number
|
|
|
|
|
C964: 24 43 478 BIT $43
|
|
|
|
|
C966: F0 05 479 BEQ :SHIFT ; D1
|
|
|
|
|
C968: A9 01 480 LDA #1 ; D2
|
|
|
|
|
C96A: 9D F8 04 481 STA R31,X
|
|
|
|
|
482
|
|
|
|
|
C96D: A0 09 483 :SHIFT LDY #9 ; ASL can't be used with Y
|
|
|
|
|
C96F: 1E F8 05 484 :LOOP ASL R33,X ; mul block num
|
|
|
|
|
C972: 3E 78 05 485 ROL R32,X ; by 512 to get
|
|
|
|
|
C975: 3E F8 04 486 ROL R31,X ; real address
|
|
|
|
|
C978: 3E 78 04 487 ROL R30,X
|
|
|
|
|
C97B: 88 488 DEY
|
|
|
|
|
C97C: D0 F1 489 BNE :LOOP
|
|
|
|
|
C97E: 7A 490 PLY ; restore Y
|
|
|
|
|
C97F: FA 491 PLX ; restore X
|
|
|
|
|
C980: 60 492 RTS
|
|
|
|
|
493
|
|
|
|
|
494
|
|
|
|
|
495 ********************************
|
|
|
|
|
496 *
|
|
|
|
|
497 * Send SD command
|
|
|
|
|
498 * Cmd is in A
|
|
|
|
|
499 *
|
|
|
|
|
500 ********************************
|
|
|
|
|
501
|
|
|
|
|
C981: 5A 502 COMMAND PHY ; save Y
|
|
|
|
|
C982: A4 3D 503 LDY SLOT
|
|
|
|
|
C984: 9D 80 C0 504 STA DATA,X ; send command
|
|
|
|
|
C987: B9 78 04 505 LDA R30,Y ; get arg from R30 on
|
|
|
|
|
C98A: 9D 80 C0 506 STA DATA,X
|
|
|
|
|
C98D: B9 F8 04 507 LDA R31,Y
|
|
|
|
|
C990: 9D 80 C0 508 STA DATA,X
|
|
|
|
|
C993: B9 78 05 509 LDA R32,Y
|
|
|
|
|
C996: 9D 80 C0 510 STA DATA,X
|
|
|
|
|
C999: B9 F8 05 511 LDA R33,Y
|
|
|
|
|
C99C: 9D 80 C0 512 STA DATA,X
|
|
|
|
|
C99F: A9 FF 513 LDA #DUMMY
|
|
|
|
|
C9A1: 9D 80 C0 514 STA DATA,X ; dummy crc
|
|
|
|
|
C9A4: 20 FF C8 515 JSR GETR1
|
|
|
|
|
C9A7: 7A 516 PLY ; restore Y
|
|
|
|
|
C9A8: 60 517 RTS
|
|
|
|
|
518
|
|
|
|
|
519
|
|
|
|
|
520 ********************************
|
|
|
|
|
521 *
|
|
|
|
|
522 * Check for card detect
|
|
|
|
|
523 *
|
|
|
|
|
524 * C Clear - card in slot
|
|
|
|
|
525 * Set - no card in slot
|
|
|
|
|
526 *
|
|
|
|
|
527 ********************************
|
|
|
|
|
528
|
|
|
|
|
C9A9: 48 529 CARDDET PHA
|
|
|
|
|
C9AA: A9 40 530 LDA #CD ; 0: card in
|
|
|
|
|
C9AC: 3C 83 C0 531 BIT SS,X ; 1: card out
|
|
|
|
|
C9AF: 18 532 CLC
|
|
|
|
|
C9B0: F0 01 533 BEQ :DONE ; card is in
|
|
|
|
|
C9B2: 38 534 SEC ; card is out
|
|
|
|
|
C9B3: 68 535 :DONE PLA
|
|
|
|
|
C9B4: 60 536 RTS
|
2017-10-16 22:06:33 +00:00
|
|
|
|
537
|
2017-10-22 18:50:14 +00:00
|
|
|
|
538
|
|
|
|
|
539 ********************************
|
|
|
|
|
540 *
|
|
|
|
|
541 * Check for write protect
|
|
|
|
|
542 *
|
|
|
|
|
543 * C Clear - card not protected
|
|
|
|
|
544 * Set - card write protected
|
|
|
|
|
545 *
|
|
|
|
|
546 ********************************
|
|
|
|
|
547
|
|
|
|
|
C9B5: 48 548 WRPROT PHA
|
|
|
|
|
C9B6: A9 20 549 LDA #WP ; 0: write enabled
|
|
|
|
|
C9B8: 3C 83 C0 550 BIT SS,X ; 1: write disabled
|
|
|
|
|
C9BB: 18 551 CLC
|
|
|
|
|
C9BC: F0 01 552 BEQ :DONE
|
|
|
|
|
C9BE: 38 553 SEC
|
|
|
|
|
C9BF: 68 554 :DONE PLA
|
|
|
|
|
C9C0: 60 555 RTS
|
2017-10-16 22:06:33 +00:00
|
|
|
|
556
|
2017-10-22 18:50:14 +00:00
|
|
|
|
557
|
|
|
|
|
558 ********************************
|
|
|
|
|
559 *
|
|
|
|
|
560 * Status request
|
|
|
|
|
561 * $43 Unit number DSSS000
|
|
|
|
|
562 * $44-45 Unused
|
|
|
|
|
563 * $46-47 Unused
|
2017-10-16 22:06:33 +00:00
|
|
|
|
564 *
|
2017-10-22 18:50:14 +00:00
|
|
|
|
565 * C Clear - No error
|
|
|
|
|
566 * Set - Error
|
|
|
|
|
567 * A $00 - No error
|
|
|
|
|
568 * $2B - Card write protected
|
|
|
|
|
569 * $2F - No card inserted
|
|
|
|
|
570 * X - Blocks avail (low byte)
|
|
|
|
|
571 * Y - Blocks avail (high byte)
|
|
|
|
|
572 *
|
|
|
|
|
573 ********************************
|
2017-10-16 22:06:33 +00:00
|
|
|
|
574
|
2017-10-22 18:50:14 +00:00
|
|
|
|
C9C1: A9 00 575 STATUS LDA #0 ; no error
|
|
|
|
|
C9C3: A2 FF 576 LDX #$FF ; 32 MB partition
|
|
|
|
|
C9C5: A0 FF 577 LDY #$FF
|
|
|
|
|
578
|
|
|
|
|
C9C7: 20 B5 C9 579 JSR WRPROT
|
|
|
|
|
C9CA: 90 02 580 BCC :DONE
|
|
|
|
|
C9CC: A9 2B 581 LDA #$2B ; card write protected
|
|
|
|
|
582
|
|
|
|
|
C9CE: 60 583 :DONE RTS
|
|
|
|
|
584
|
|
|
|
|
585
|
|
|
|
|
586 ********************************
|
|
|
|
|
587 *
|
|
|
|
|
588 * Read 512 byte block
|
|
|
|
|
589 * $43 Unit number DSSS0000
|
|
|
|
|
590 * $44-45 Address (LO/HI) of buffer
|
|
|
|
|
591 * $46-47 Block number (LO/HI)
|
|
|
|
|
592 *
|
|
|
|
|
593 * C Clear - No error
|
|
|
|
|
594 * Set - Error
|
|
|
|
|
595 * A $00 - No error
|
|
|
|
|
596 * $27 - Bad block number
|
|
|
|
|
597 *
|
|
|
|
|
598 ********************************
|
|
|
|
|
599
|
|
|
|
|
C9CF: 20 4C C9 600 READ JSR GETBLOCK ; calc block address
|
|
|
|
|
601
|
|
|
|
|
C9D2: BD 83 C0 602 LDA SS,X ; enable /CS
|
|
|
|
|
C9D5: 29 FE 603 AND #$FF!SS0
|
|
|
|
|
C9D7: 9D 83 C0 604 STA SS,X
|
|
|
|
|
C9DA: A9 51 605 LDA #$51 ; send CMD17
|
|
|
|
|
C9DC: 20 81 C9 606 JSR COMMAND ; send command
|
|
|
|
|
607
|
|
|
|
|
C9DF: C9 00 608 CMP #0 ; check for error
|
|
|
|
|
C9E1: D0 50 609 BNE :ERROR
|
|
|
|
|
610
|
|
|
|
|
C9E3: A9 FF 611 :GETTOK LDA #DUMMY ; get data token
|
|
|
|
|
C9E5: 9D 80 C0 612 STA DATA,X
|
|
|
|
|
C9E8: BD 80 C0 613 LDA DATA,X ; get response
|
|
|
|
|
C9EB: C9 FE 614 CMP #$FE
|
|
|
|
|
C9ED: D0 F4 615 BNE :GETTOK ; wait for $FE
|
|
|
|
|
616
|
|
|
|
|
C9EF: A0 02 617 LDY #2 ; read data from card
|
|
|
|
|
C9F1: BD 81 C0 618 LDA CTRL,X ; enable FRX
|
|
|
|
|
C9F4: 09 10 619 ORA #FRX
|
|
|
|
|
C9F6: 9D 81 C0 620 STA CTRL,X
|
|
|
|
|
C9F9: A9 FF 621 LDA #DUMMY
|
|
|
|
|
C9FB: 9D 80 C0 622 STA DATA,X
|
|
|
|
|
C9FE: 64 3C 623 :LOOPY STZ WORK
|
|
|
|
|
CA00: BD 80 C0 624 :LOOPW LDA DATA,X
|
|
|
|
|
CA03: 92 44 625 STA (BUFFER)
|
|
|
|
|
CA05: E6 44 626 INC BUFFER
|
|
|
|
|
CA07: D0 02 627 BNE :INW
|
|
|
|
|
CA09: E6 45 628 INC BUFFER+1 ; inc msb on page boundary
|
|
|
|
|
CA0B: E6 3C 629 :INW INC WORK
|
|
|
|
|
CA0D: D0 F1 630 BNE :LOOPW
|
|
|
|
|
CA0F: 88 631 DEY
|
|
|
|
|
CA10: D0 EC 632 BNE :LOOPY
|
|
|
|
|
633
|
|
|
|
|
CA12: BD 80 C0 634 :CRC LDA DATA,X ; read two bytes crc
|
|
|
|
|
CA15: BD 80 C0 635 LDA DATA,X ; and ignore
|
|
|
|
|
CA18: BD 80 C0 636 LDA DATA,X ; read a dummy byte
|
|
|
|
|
637
|
|
|
|
|
CA1B: BD 81 C0 638 LDA CTRL,X ; disable FRX
|
|
|
|
|
CA1E: 29 EF 639 AND #$FF!FRX
|
|
|
|
|
CA20: 9D 81 C0 640 STA CTRL,X
|
|
|
|
|
CA23: 18 641 CLC ; no error
|
|
|
|
|
CA24: A9 00 642 LDA #0
|
|
|
|
|
643
|
|
|
|
|
CA26: 08 644 :DONE PHP
|
|
|
|
|
CA27: 48 645 PHA
|
|
|
|
|
CA28: BD 83 C0 646 LDA SS,X
|
|
|
|
|
CA2B: 09 01 647 ORA #SS0
|
|
|
|
|
CA2D: 9D 83 C0 648 STA SS,X ; disable /CS
|
|
|
|
|
CA30: 68 649 PLA
|
|
|
|
|
CA31: 28 650 PLP
|
|
|
|
|
CA32: 60 651 RTS
|
|
|
|
|
652
|
|
|
|
|
CA33: 38 653 :ERROR SEC ; an error occured
|
|
|
|
|
CA34: A9 27 654 LDA #$27
|
|
|
|
|
CA36: 80 EE 655 BRA :DONE
|
|
|
|
|
656
|
2017-10-16 22:06:33 +00:00
|
|
|
|
657
|
2017-10-22 18:50:14 +00:00
|
|
|
|
658 ********************************
|
|
|
|
|
659 *
|
|
|
|
|
660 * Write 512 byte block
|
|
|
|
|
661 * $43 Unit number DSSS0000
|
|
|
|
|
662 * $44-45 Address (LO/HI) of buffer
|
|
|
|
|
663 * $46-47 Block number (LO/HI)
|
|
|
|
|
664 *
|
|
|
|
|
665 * C Clear - No error
|
|
|
|
|
666 * Set - Error
|
|
|
|
|
667 * A $00 - No error
|
|
|
|
|
668 * $27 - I/O error or bad block number
|
|
|
|
|
669 * $2B - Card write protected
|
|
|
|
|
670 *
|
|
|
|
|
671 ********************************
|
|
|
|
|
672
|
|
|
|
|
CA38: 20 B5 C9 673 WRITE JSR WRPROT
|
|
|
|
|
CA3B: B0 67 674 BCS :WPERROR ; card write protected
|
|
|
|
|
675
|
|
|
|
|
CA3D: 20 4C C9 676 JSR GETBLOCK ; calc block address
|
2017-10-16 22:06:33 +00:00
|
|
|
|
677
|
2017-10-22 18:50:14 +00:00
|
|
|
|
CA40: BD 83 C0 678 LDA SS,X ; enable /CS
|
|
|
|
|
CA43: 29 FE 679 AND #$FF!SS0
|
|
|
|
|
CA45: 9D 83 C0 680 STA SS,X
|
|
|
|
|
CA48: A9 58 681 LDA #$58 ; send CMD24
|
|
|
|
|
CA4A: 20 81 C9 682 JSR COMMAND ; send command
|
|
|
|
|
683
|
|
|
|
|
CA4D: C9 00 684 CMP #0 ; check for error
|
|
|
|
|
CA4F: D0 4E 685 BNE :IOERROR
|
|
|
|
|
686
|
|
|
|
|
CA51: A9 FF 687 LDA #DUMMY
|
|
|
|
|
CA53: 9D 80 C0 688 STA DATA,X ; send dummy
|
|
|
|
|
CA56: A9 FE 689 LDA #$FE
|
|
|
|
|
CA58: 9D 80 C0 690 STA DATA,X ; send data token
|
2017-10-15 14:48:13 +00:00
|
|
|
|
691
|
2017-10-22 18:50:14 +00:00
|
|
|
|
CA5B: A0 02 692 LDY #2 ; send data to card
|
|
|
|
|
CA5D: 64 3C 693 :LOOPY STZ WORK
|
|
|
|
|
CA5F: B2 44 694 :LOOPW LDA (BUFFER)
|
|
|
|
|
CA61: 9D 80 C0 695 STA DATA,X
|
|
|
|
|
CA64: E6 44 696 INC BUFFER
|
|
|
|
|
CA66: D0 02 697 BNE :INW
|
|
|
|
|
CA68: E6 45 698 INC BUFFER+1 ; inc msb on page boundary
|
|
|
|
|
CA6A: E6 3C 699 :INW INC WORK
|
|
|
|
|
CA6C: D0 F1 700 BNE :LOOPW
|
|
|
|
|
CA6E: 88 701 DEY
|
|
|
|
|
CA6F: D0 EC 702 BNE :LOOPY
|
|
|
|
|
703
|
|
|
|
|
CA71: 9D 80 C0 704 :CRC STA DATA,X ; send 2 dummy crc bytes
|
|
|
|
|
CA74: 9D 80 C0 705 STA DATA,X
|
|
|
|
|
706
|
|
|
|
|
CA77: 9D 80 C0 707 STA DATA,X ; get data response
|
|
|
|
|
CA7A: BD 80 C0 708 LDA DATA,X
|
|
|
|
|
CA7D: 29 1F 709 AND #$1F
|
|
|
|
|
CA7F: C9 05 710 CMP #$05
|
|
|
|
|
CA81: D0 1C 711 BNE :IOERROR ; check for write error
|
|
|
|
|
CA83: 18 712 CLC ; no error
|
|
|
|
|
CA84: A9 00 713 LDA #0
|
|
|
|
|
714
|
|
|
|
|
CA86: 08 715 :DONE PHP
|
|
|
|
|
CA87: 48 716 PHA
|
|
|
|
|
CA88: A9 FF 717 :WAIT LDA #DUMMY
|
|
|
|
|
CA8A: 9D 80 C0 718 STA DATA,X ; wait for write cycle
|
|
|
|
|
CA8D: BD 80 C0 719 LDA DATA,X ; to complete
|
|
|
|
|
CA90: C9 00 720 CMP #$00
|
|
|
|
|
CA92: F0 F4 721 BEQ :WAIT
|
|
|
|
|
722
|
|
|
|
|
CA94: BD 83 C0 723 LDA SS,X ; disable /CS
|
|
|
|
|
CA97: 09 01 724 ORA #SS0
|
|
|
|
|
CA99: 9D 83 C0 725 STA SS,X
|
|
|
|
|
CA9C: 68 726 PLA
|
|
|
|
|
CA9D: 28 727 PLP
|
|
|
|
|
CA9E: 60 728 RTS
|
|
|
|
|
729
|
|
|
|
|
CA9F: 38 730 :IOERROR SEC ; an error occured
|
|
|
|
|
CAA0: A9 27 731 LDA #$27
|
|
|
|
|
CAA2: 80 E2 732 BRA :DONE
|
|
|
|
|
733
|
|
|
|
|
CAA4: 38 734 :WPERROR SEC
|
|
|
|
|
CAA5: A9 2B 735 LDA #$2B
|
|
|
|
|
CAA7: 80 DD 736 BRA :DONE
|
2017-10-16 22:06:33 +00:00
|
|
|
|
737
|
2017-10-22 18:50:14 +00:00
|
|
|
|
738
|
2017-10-16 22:06:33 +00:00
|
|
|
|
739
|
2017-10-22 18:50:14 +00:00
|
|
|
|
740 ********************************
|
|
|
|
|
741 *
|
|
|
|
|
742 * Format
|
|
|
|
|
743 * not supported!
|
|
|
|
|
744 *
|
|
|
|
|
745 ********************************
|
|
|
|
|
746
|
|
|
|
|
CAA9: 38 747 FORMAT SEC
|
|
|
|
|
CAAA: A9 01 748 LDA #$01 ; invalid command
|
|
|
|
|
CAAC: 60 749 RTS
|
|
|
|
|
750
|
2017-10-16 22:06:33 +00:00
|
|
|
|
751
|
2017-10-22 18:50:14 +00:00
|
|
|
|
752 ********************************
|
|
|
|
|
753 *
|
|
|
|
|
754 * Test routine
|
|
|
|
|
755 *
|
|
|
|
|
756 ********************************
|
|
|
|
|
757
|
|
|
|
|
758 TEST
|
|
|
|
|
759
|
|
|
|
|
760 * get buffer
|
|
|
|
|
CAAD: A4 3D 761 LDY SLOT
|
|
|
|
|
CAAF: A9 02 762 LDA #2 ; get 512 byte buffer
|
|
|
|
|
CAB1: 20 F5 BE 763 JSR $BEF5 ; call GETBUFR
|
|
|
|
|
CAB4: B0 79 764 BCS :ERROR
|
|
|
|
|
CAB6: 99 F8 06 765 STA RAM1,Y
|
|
|
|
|
CAB9: 85 45 766 STA BUFFER+1
|
|
|
|
|
CABB: A9 00 767 LDA #0
|
|
|
|
|
CABD: 99 78 06 768 STA RAM0,Y
|
|
|
|
|
CAC0: 85 44 769 STA BUFFER
|
|
|
|
|
770
|
|
|
|
|
771 * fill buffer
|
|
|
|
|
CAC2: A0 00 772 LDY #0
|
|
|
|
|
CAC4: 98 773 :LOOP TYA
|
|
|
|
|
CAC5: 91 44 774 STA (BUFFER),Y
|
|
|
|
|
CAC7: C8 775 INY
|
|
|
|
|
CAC8: D0 FA 776 BNE :LOOP
|
|
|
|
|
CACA: E6 45 777 INC BUFFER+1
|
|
|
|
|
CACC: 98 778 :LOOP1 TYA
|
|
|
|
|
CACD: 91 44 779 STA (BUFFER),Y
|
|
|
|
|
CACF: C8 780 INY
|
|
|
|
|
CAD0: D0 FA 781 BNE :LOOP1
|
|
|
|
|
782
|
|
|
|
|
783 * write to card
|
|
|
|
|
CAD2: A9 02 784 LDA #2 ; write cmd
|
|
|
|
|
CAD4: A4 3D 785 LDY SLOT
|
|
|
|
|
CAD6: 85 42 786 STA DCMD
|
|
|
|
|
CAD8: AD 78 06 787 LDA RAM0 ; buffer address
|
|
|
|
|
CADB: 85 44 788 STA BUFFER
|
|
|
|
|
CADD: B9 F8 06 789 LDA RAM1,Y
|
|
|
|
|
CAE0: 85 45 790 STA BUFFER+1
|
|
|
|
|
CAE2: 64 46 791 STZ BLOCK ; block number
|
|
|
|
|
CAE4: 64 47 792 STZ BLOCK+1
|
|
|
|
|
CAE6: A6 2B 793 LDX SLOT16
|
|
|
|
|
CAE8: 20 4B C7 794 JSR DRIVER
|
|
|
|
|
CAEB: B0 42 795 BCS :ERROR
|
|
|
|
|
796
|
|
|
|
|
797 * read from card
|
|
|
|
|
CAED: A9 01 798 LDA #1 ; read cmd
|
|
|
|
|
CAEF: A4 3D 799 LDY SLOT
|
|
|
|
|
CAF1: 85 42 800 STA DCMD
|
|
|
|
|
CAF3: B9 78 06 801 LDA RAM0,Y ; buffer address
|
|
|
|
|
CAF6: 85 44 802 STA BUFFER
|
|
|
|
|
CAF8: B9 F8 06 803 LDA RAM1,Y
|
|
|
|
|
CAFB: 85 45 804 STA BUFFER+1
|
|
|
|
|
CAFD: 64 46 805 STZ BLOCK ; block number
|
|
|
|
|
CAFF: 64 47 806 STZ BLOCK+1
|
|
|
|
|
CB01: A6 2B 807 LDX SLOT16
|
|
|
|
|
CB03: 20 4B C7 808 JSR DRIVER
|
|
|
|
|
CB06: B0 27 809 BCS :ERROR
|
|
|
|
|
810
|
|
|
|
|
811 * check for errors
|
|
|
|
|
CB08: A4 3D 812 LDY SLOT
|
|
|
|
|
CB0A: B9 78 06 813 LDA RAM0,Y ; buffer address
|
|
|
|
|
CB0D: 85 44 814 STA BUFFER
|
|
|
|
|
CB0F: B9 F8 06 815 LDA RAM1,Y
|
|
|
|
|
CB12: 85 45 816 STA BUFFER+1
|
|
|
|
|
CB14: A0 00 817 LDY #0
|
|
|
|
|
CB16: 98 818 :LOOP2 TYA
|
|
|
|
|
CB17: D1 44 819 CMP (BUFFER),Y
|
|
|
|
|
CB19: D0 15 820 BNE :ERRCMP ; error in buffer
|
|
|
|
|
CB1B: C8 821 INY
|
|
|
|
|
CB1C: D0 F8 822 BNE :LOOP2
|
|
|
|
|
CB1E: E6 45 823 INC BUFFER+1
|
|
|
|
|
CB20: 98 824 :LOOP3 TYA
|
|
|
|
|
CB21: D1 44 825 CMP (BUFFER),Y
|
|
|
|
|
CB23: D0 0B 826 BNE :ERRCMP
|
|
|
|
|
CB25: C8 827 INY
|
|
|
|
|
CB26: D0 F8 828 BNE :LOOP3
|
|
|
|
|
829
|
|
|
|
|
830 * free buffer
|
|
|
|
|
CB28: 20 F8 BE 831 JSR $BEF8 ; call FREEBUFR
|
|
|
|
|
CB2B: 18 832 CLC
|
|
|
|
|
CB2C: A9 00 833 LDA #0
|
|
|
|
|
CB2E: 60 834 RTS
|
2017-10-16 22:06:33 +00:00
|
|
|
|
835
|
2017-10-22 18:50:14 +00:00
|
|
|
|
CB2F: 00 836 :ERROR BRK
|
|
|
|
|
CB30: 00 837 :ERRCMP BRK
|
|
|
|
|
838
|
|
|
|
|
839
|
|
|
|
|
CB31: 40 00 00 840 CMD0 HEX 400000
|
|
|
|
|
CB34: 00 00 95 841 HEX 000095
|
|
|
|
|
CB37: 41 00 00 842 CMD1 HEX 410000
|
|
|
|
|
CB3A: 00 00 F9 843 HEX 0000F9
|
|
|
|
|
CB3D: 48 00 00 844 CMD8 HEX 480000
|
|
|
|
|
CB40: 01 AA 87 845 HEX 01AA87
|
|
|
|
|
CB43: 50 00 00 846 CMD16 HEX 500000
|
|
|
|
|
CB46: 02 00 FF 847 HEX 0200FF
|
|
|
|
|
CB49: 77 00 00 848 CMD55 HEX 770000
|
|
|
|
|
CB4C: 00 00 65 849 HEX 000065
|
|
|
|
|
CB4F: 69 40 00 850 ACMD4140 HEX 694000
|
|
|
|
|
CB52: 00 00 77 851 HEX 000077
|
|
|
|
|
CB55: 69 00 00 852 ACMD410 HEX 690000
|
|
|
|
|
CB58: 00 00 FF 853 HEX 0000FF
|
2017-08-26 22:37:54 +00:00
|
|
|
|
|
|
|
|
|
|
2017-10-22 18:50:14 +00:00
|
|
|
|
--End assembly, 1115 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-10-22 18:50:14 +00:00
|
|
|
|
ACMD410 =$CB55 ACMD4140=$CB4F BLOCK =$46 ? BOOT =$C72B
|
|
|
|
|
BUFFER =$44 CARDDET =$C9A9 CD =$40 CMD =$C8EB
|
|
|
|
|
CMD0 =$CB31 CMD1 =$CB37 CMD16 =$CB43 CMD55 =$CB49
|
|
|
|
|
CMD8 =$CB3D CMDHI =$41 CMDLO =$40 COMMAND =$C981
|
2017-10-15 14:48:13 +00:00
|
|
|
|
CTRL =$C081 CURSLOT =$07F8 DATA =$C080 DCMD =$42
|
2017-10-22 18:50:14 +00:00
|
|
|
|
DEBUG =$00 DIV =$C082 DRIVER =$C74B DUMMY =$FF
|
|
|
|
|
ECE =$04 FORMAT =$CAA9 FRX =$10 GETBLOCK=$C94C
|
|
|
|
|
GETR1 =$C8FF GETR3 =$C91A INIT =$C800 INITED =$80
|
2017-10-15 14:48:13 +00:00
|
|
|
|
R30 =$0478 R31 =$04F8 R32 =$0578 R33 =$05F8
|
2017-10-22 18:50:14 +00:00
|
|
|
|
RAM0 =$0678 RAM1 =$06F8 READ =$C9CF SLOT =$3D
|
|
|
|
|
SLOT16 =$2B SS =$C083 SS0 =$01 STATUS =$C9C1
|
|
|
|
|
TEST =$CAAD WORK =$3C WP =$20 WRITE =$CA38
|
|
|
|
|
WRPROT =$C9B5
|
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-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-10-22 18:50:14 +00:00
|
|
|
|
RAM0 =$0678 RAM1 =$06F8 CURSLOT =$07F8 DATA =$C080
|
|
|
|
|
CTRL =$C081 DIV =$C082 SS =$C083 ? BOOT =$C72B
|
|
|
|
|
DRIVER =$C74B INIT =$C800 CMD =$C8EB GETR1 =$C8FF
|
|
|
|
|
GETR3 =$C91A GETBLOCK=$C94C COMMAND =$C981 CARDDET =$C9A9
|
|
|
|
|
WRPROT =$C9B5 STATUS =$C9C1 READ =$C9CF WRITE =$CA38
|
|
|
|
|
FORMAT =$CAA9 TEST =$CAAD CMD0 =$CB31 CMD1 =$CB37
|
|
|
|
|
CMD8 =$CB3D CMD16 =$CB43 CMD55 =$CB49 ACMD4140=$CB4F
|
|
|
|
|
ACMD410 =$CB55
|
2017-08-26 22:37:54 +00:00
|
|
|
|
|