diff --git a/sw/io.inc65 b/sw/io.inc65 index 3586e7c..bad732c 100644 --- a/sw/io.inc65 +++ b/sw/io.inc65 @@ -13,5 +13,6 @@ MM_DATA = $7fe0 SD_ARG = $7ff8 SD_CMD = $7ffc +SD_DATA = $7ffd IRQ_STATUS = $7fff diff --git a/sw/main.c b/sw/main.c index c20b850..dc7182b 100644 --- a/sw/main.c +++ b/sw/main.c @@ -87,6 +87,16 @@ int main() { sd_card_resp(&resp); cprintf("CMD17: %lx\n", resp); + + while(sw_read()); + + sd_card_wait_for_data(); + + cprintf("Read data: \n"); + for (i = 0; i < 512; i++){ + cprintf("%c", sd_card_read_byte()); + } + while (1) { sw = sw_read(); diff --git a/sw/sd_card.h b/sw/sd_card.h index df44704..8dbe972 100644 --- a/sw/sd_card.h +++ b/sw/sd_card.h @@ -6,5 +6,7 @@ void sd_card_command(uint32_t arg, uint8_t cmd); void sd_card_resp(uint32_t* resp); +uint8_t sd_card_read_byte(); +void sd_card_wait_for_data(); #endif \ No newline at end of file diff --git a/sw/sd_card.s b/sw/sd_card.s index 13a5e0c..fe4f4e2 100644 --- a/sw/sd_card.s +++ b/sw/sd_card.s @@ -4,6 +4,8 @@ .export _sd_card_command .export _sd_card_resp +.export _sd_card_read_byte +.export _sd_card_wait_for_data .autoimport on @@ -33,6 +35,7 @@ _sd_card_resp: sta ptr1 ; store pointer stx ptr1+1 @1: lda SD_CMD ; wait for status flag + and #$01 beq @1 lda SD_ARG ldy #$0 @@ -48,3 +51,16 @@ _sd_card_resp: sta (ptr1),y ply rts + +_sd_card_read_byte: + lda SD_DATA + ldx #$00 + rts + +_sd_card_wait_for_data: + pha +@1: lda SD_CMD ; wait for status flag + and #$02 + beq @1 + pla + rts \ No newline at end of file