mirror of
https://github.com/LNH-team/pico-loader.git
synced 2026-06-02 09:16:49 +02:00
Add support for Slot 2 flashcarts using Compact Flash (#84)
- Supercard CF (SUPERCARDCF) - GBA Media Player CF (MPCF) - M3 Adapter CF (M3CF) - Max Media Dock CF (MMCF)
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
.cpu arm7tdmi
|
||||
.syntax unified
|
||||
.thumb
|
||||
|
||||
.section "cf_wait_functions", "ax"
|
||||
|
||||
.equ CF_STS_DRQ, 0x08
|
||||
.equ CF_STS_DSC, 0x10
|
||||
.equ CF_STS_READY, 0x40
|
||||
.equ CF_STS_INSERTED, 0x50
|
||||
.equ CF_STS_BUSY, 0x80
|
||||
|
||||
.equ CF_CARD_TIMEOUT, 10000000
|
||||
|
||||
@ Waits until the card is ready to receive commands
|
||||
@ this function doesn't alter r0, but sets the zero flag on failure and clears it on success
|
||||
@ bool cf_waitCardAvailableForCommands()
|
||||
.global cf_waitCardAvailableForCommands
|
||||
.type cf_waitCardAvailableForCommands, %function
|
||||
cf_waitCardAvailableForCommands:
|
||||
push {r0-r4, lr}
|
||||
@ wait for card to finish previous commands
|
||||
ldr r1, =CF_CARD_TIMEOUT
|
||||
ldr r2, cf_waitFunctions_reg_cmd
|
||||
movs r4, r1
|
||||
still_busy:
|
||||
ldrh r0, [r2]
|
||||
@ r0 & CF_STS_BUSY == 0
|
||||
lsls r0, #25
|
||||
bcc no_longer_busy
|
||||
subs r1, #1
|
||||
bne still_busy
|
||||
|
||||
no_longer_busy:
|
||||
@ wait for card to be ready for commands
|
||||
movs r3, (CF_STS_READY | CF_STS_DSC)
|
||||
1:
|
||||
ldrh r1, [r2]
|
||||
tst r1, r3
|
||||
@ timeout expired
|
||||
bne ready
|
||||
subs r4, #1
|
||||
@ not ready
|
||||
bne 1b
|
||||
|
||||
@ timeout expired, return 0
|
||||
pop {r0-r4, pc}
|
||||
|
||||
@ Waits until the card is ready to write/return the next block
|
||||
@ this function doesn't alter r0, but sets the zero flag on failure and clears it on success
|
||||
@ bool cf_waitNextBlockReady()
|
||||
.global cf_waitNextBlockReady
|
||||
.type cf_waitNextBlockReady, %function
|
||||
cf_waitNextBlockReady:
|
||||
push {r0-r4, lr}
|
||||
ldr r0, =CF_CARD_TIMEOUT
|
||||
ldr r1, cf_waitFunctions_reg_cmd
|
||||
1:
|
||||
ldrb r2, [r1]
|
||||
cmp r2, (CF_STS_READY | CF_STS_DSC | CF_STS_DRQ)
|
||||
@ timeout expired
|
||||
beq ready
|
||||
subs r0, #1
|
||||
@ not ready
|
||||
bne 1b
|
||||
|
||||
@ timeout expired, return 0
|
||||
pop {r0-r4, pc}
|
||||
|
||||
ready:
|
||||
movs r0, #1
|
||||
pop {r0-r4, pc}
|
||||
|
||||
.balign 4
|
||||
.global cf_waitFunctions_reg_cmd
|
||||
cf_waitFunctions_reg_cmd:
|
||||
.word 0
|
||||
Reference in New Issue
Block a user