Add new sd wrapper

Wrapper is neccesary for the address offset and also because the
controller will trigger on reads/writes to registers, but we need access
to each byte of the 32 bit registers.

The wrapper will need to somehow chose when to actually trigger the
controller, maybe by having shadow registers?
This commit is contained in:
Byron Lathi
2024-07-17 21:18:07 -07:00
parent db630f2030
commit bdb3fc96d6
7 changed files with 261 additions and 243 deletions

View File

@@ -7,9 +7,11 @@
.addr _irq_int ; IRQ/BRK vector
SD_CONTROLLER = $e000
SD_CMD = SD_CONTROLLER
SD_ARG = SD_CONTROLLER + $4
SD_RESP = SD_CONTROLLER + $10
CLK_DIV = $20
SD_FIFO_0 = SD_CONTROLLER + $8
SD_FIFO_2 = SD_CONTROLLER + $C
SD_PHY = SD_CONTROLLER + $10
SD_DMA_BASE = SD_CONTROLLER + $28
SD_DMA_STAT_CTRL = SD_CONTROLLER + $2C
@@ -26,114 +28,4 @@ _init:
ldx #$ff
txs
lda #$00
sta SD_CONTROLLER
lda #$aa
sta SD_ARG
lda #$01
sta SD_ARG+1
lda #$00
sta SD_ARG+2
sta SD_ARG+3
lda #$08
sta SD_CONTROLLER
jsr delay
lda #55
sta SD_CONTROLLER
jsr delay
lda #41
sta SD_CONTROLLER
jsr delay
@acmd41:
lda #55
sta SD_CONTROLLER
jsr delay
lda #$80
sta SD_ARG+1
lda #$ff
sta SD_ARG+2
lda #$40
sta SD_ARG+3
lda #41
sta SD_CONTROLLER
jsr delay
lda SD_RESP+3
bmi card_ready
ldx #$10
@loop: dex
bne @loop
bra @acmd41
card_ready:
lda #2
sta SD_CONTROLLER
jsr delay
lda #3
sta SD_CONTROLLER
jsr delay
lda SD_RESP
sta rca
lda SD_RESP+1
sta rca+1
lda SD_RESP+2
sta rca+2
lda SD_RESP+3
sta rca+3
lda rca
sta SD_ARG
lda rca+1
sta SD_ARG+1
lda rca+2
sta SD_ARG+2
lda rca+3
sta SD_ARG+3
lda #7
sta SD_CONTROLLER
jsr delay
lda #17
sta SD_CONTROLLER
lda #$10
sta SD_DMA_BASE + 1
lda #1
sta SD_DMA_STAT_CTRL
@poll: lda SD_DMA_STAT_CTRL+2
cmp #$1
bne @poll
stz SD_DMA_STAT_CTRL
lda $1000
lda $1001
lda $1002
lda $1003
@end: bra @end
delay:
nop
nop
nop
nop
nop
nop
nop
rts