mirror of
https://github.com/LNH-team/pico-loader.git
synced 2026-06-02 17:26:48 +02:00
- Supercard CF (SUPERCARDCF) - GBA Media Player CF (MPCF) - M3 Adapter CF (M3CF) - Max Media Dock CF (MMCF)
78 lines
1.7 KiB
ArmAsm
78 lines
1.7 KiB
ArmAsm
.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
|