From 4b2d99a399d97342e753d53c656df6aa120cf62b Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 28 Oct 2020 21:50:36 +0100 Subject: [PATCH] more work on SD card support on MEGA65 --- src/dos_m65/,aliases_dos.s | 4 +-- src/dos_m65/sdcard/sdcard_init.s | 13 +++++--- src/dos_m65/sdcard/sdcard_writesector.s | 42 ++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 954435dd..9a00472e 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -31,8 +31,8 @@ !addr CARD_TMP_STEP = $12 ; 4 bytes !addr CARD_TMP_RETRIES = $16 ; 1 byte - !addr CARD_BUFPNT = $FC ; 4 bytes - pointer to hardware sector buffer XXX replace copy routines with DMAgic - + !addr CARD_BUFPNT1 = $17 ; 4 bytes - pointer to hardware sector buffer XXX replace copy routines with DMAgic + !addr CARD_BUFPNT2 = $1B ; 4 bytes - as above, but points to the 2nd page of the hardware buffer ; diff --git a/src/dos_m65/sdcard/sdcard_init.s b/src/dos_m65/sdcard/sdcard_init.s index 9ed9878d..37cb383b 100644 --- a/src/dos_m65/sdcard/sdcard_init.s +++ b/src/dos_m65/sdcard/sdcard_init.s @@ -18,13 +18,18 @@ sdcard_init: sta CARD_IS_SDHC lda #SD_SECBUF_0 - sta CARD_BUFPNT+0 + sta CARD_BUFPNT1+0 + sta CARD_BUFPNT2+0 lda #SD_SECBUF_1 - sta CARD_BUFPNT+1 + sta CARD_BUFPNT1+1 + inc + sta CARD_BUFPNT2+1 lda #SD_SECBUF_2 - sta CARD_BUFPNT+2 + sta CARD_BUFPNT1+2 + sta CARD_BUFPNT2+2 lda #SD_SECBUF_3 - sta CARD_BUFPNT+3 + sta CARD_BUFPNT1+3 + sta CARD_BUFPNT2+3 ; Reset the card diff --git a/src/dos_m65/sdcard/sdcard_writesector.s b/src/dos_m65/sdcard/sdcard_writesector.s index 833719fe..e4e1ac25 100644 --- a/src/dos_m65/sdcard/sdcard_writesector.s +++ b/src/dos_m65/sdcard/sdcard_writesector.s @@ -99,13 +99,47 @@ sdcard_writesector_verify: and #$03 bne @3 - ; XXX verify - compare buffer + ; FALLTROUGH +sdcard_writesector_verify_loop: + ; Compare buffers + phx + phz + ldx #$00 + ldz #$00 + lda [CARD_BUFPNT1],z + cmp CARD_BUF, x + bne sdcard_writesector_verify_fail + + lda [CARD_BUFPNT2],z + cmp CARD_BUF+$100, x + bne sdcard_writesector_verify_fail + inz + inx + bne sdcard_writesector_verify_loop + + ; FALLTROUGH + +sdcard_writesector_verify_success: + + plz + plx + + clc + rts + +sdcard_writesector_verify_fail: + + plz + plx + + sec + rts ; @@ -124,11 +158,9 @@ sdcard_writesector_copy_data: @1: lda CARD_BUF,x - sta [CARD_BUFPNT],z - inc CARD_BUFPNT+1 + sta [CARD_BUFPNT1],z lda CARD_BUF+$100,x - sta [CARD_BUFPNT],z - dec CARD_BUFPNT+1 + sta [CARD_BUFPNT2],z inz inx