Polls the sd controller until the read flag is set, at which point it reads 32 bits of data from the controller. long response codes (such as CID) are not supported in hw or sw.
51 lines
832 B
ArmAsm
51 lines
832 B
ArmAsm
.include "io.inc65"
|
|
|
|
.importzp sp, sreg, ptr1
|
|
|
|
.export _sd_card_command
|
|
.export _sd_card_resp
|
|
|
|
.autoimport on
|
|
|
|
.code
|
|
|
|
; Send sd card command.
|
|
; command is in A register, the args are on the stack
|
|
; I think the order is high byte first?
|
|
_sd_card_command:
|
|
pha
|
|
|
|
jsr popeax
|
|
sta SD_ARG
|
|
stx SD_ARG+1
|
|
lda sreg
|
|
sta SD_ARG+2
|
|
lda sreg+1
|
|
sta SD_ARG+3
|
|
|
|
pla
|
|
sta SD_CMD
|
|
rts
|
|
|
|
; void sd_card_resp(uint32_t* resp);
|
|
_sd_card_resp:
|
|
phy
|
|
sta ptr1 ; store pointer
|
|
stx ptr1+1
|
|
@1: lda SD_CMD ; wait for status flag
|
|
beq @1
|
|
lda SD_ARG
|
|
ldy #$0
|
|
sta (ptr1),y
|
|
lda SD_ARG+1
|
|
iny
|
|
sta (ptr1),y
|
|
lda SD_ARG+2
|
|
iny
|
|
sta (ptr1),y
|
|
lda SD_ARG+3
|
|
iny
|
|
sta (ptr1),y
|
|
ply
|
|
rts
|