mirror of
https://github.com/LumaTeam/Luma3DS.git
synced 2026-02-22 09:54:38 +00:00
64 lines
1.5 KiB
ArmAsm
64 lines
1.5 KiB
ArmAsm
|
|
.section .emunand_patch, "aw", %progbits
|
||
|
|
.arm
|
||
|
|
.align 4
|
||
|
|
|
||
|
|
@ Code originally by Normmatt
|
||
|
|
|
||
|
|
.global emunandPatch
|
||
|
|
emunandPatch:
|
||
|
|
@ Original code that still needs to be executed
|
||
|
|
mov r4, r0
|
||
|
|
mov r5, r1
|
||
|
|
mov r7, r2
|
||
|
|
mov r6, r3
|
||
|
|
@ End
|
||
|
|
|
||
|
|
@ If we're already trying to access the SD, return
|
||
|
|
ldr r2, [r0, #4]
|
||
|
|
ldr r1, emunandPatchSdmmcStructPtr
|
||
|
|
cmp r2, r1
|
||
|
|
beq out
|
||
|
|
|
||
|
|
str r1, [r0, #4] @ Set object to be SD
|
||
|
|
ldr r2, [r0, #8] @ Get sector to read
|
||
|
|
cmp r2, #0 @ For GW compatibility, see if we're trying to read the ncsd header (sector 0)
|
||
|
|
|
||
|
|
ldr r3, emunandPatchNandOffset
|
||
|
|
add r2, r3 @ Add the offset to the NAND in the SD
|
||
|
|
|
||
|
|
ldreq r3, emunandPatchNcsdHeaderOffset
|
||
|
|
addeq r2, r3 @ If we're reading the ncsd header, add the offset of that sector
|
||
|
|
|
||
|
|
str r2, [r0, #8] @ Store sector to read
|
||
|
|
|
||
|
|
out:
|
||
|
|
@ Restore registers.
|
||
|
|
mov r1, r5
|
||
|
|
mov r2, r7
|
||
|
|
mov r3, r6
|
||
|
|
|
||
|
|
@ Return 4 bytes behind where we got called,
|
||
|
|
@ due to the offset of this function being stored there
|
||
|
|
mov r0, lr
|
||
|
|
add r0, #4
|
||
|
|
bx r0
|
||
|
|
|
||
|
|
.pool
|
||
|
|
|
||
|
|
.global emunandPatchSdmmcStructPtr
|
||
|
|
.global emunandPatchNandOffset
|
||
|
|
.global emunandPatchNcsdHeaderOffset
|
||
|
|
|
||
|
|
emunandPatchSdmmcStructPtr: .word 0 @ Pointer to sdmmc struct
|
||
|
|
emunandPatchNandOffset: .word 0 @ For rednand this should be 1
|
||
|
|
emunandPatchNcsdHeaderOffset: .word 0 @ Depends on nand manufacturer + emunand type (GW/RED)
|
||
|
|
|
||
|
|
.pool
|
||
|
|
.balign 4
|
||
|
|
|
||
|
|
_emunandPatchEnd:
|
||
|
|
|
||
|
|
.global emunandPatchSize
|
||
|
|
emunandPatchSize:
|
||
|
|
.word _emunandPatchEnd - emunandPatch
|