
- Move emuNAND hook to ITCM, fixing previously untested emuNAND support for 5.0 (and possibly more versions). This was a very long-standing bug - Fix booting on versions 4.x to 8.x, and restore full support for 5.x to 8.x. All Arm11 custom sysmodules and k11ext have been disabled on 4.x because the Luma3DS v13.0 changes couldn't be ported (this means no Rosalina and no region-free and such, and while I could restore some of the functionality, you should just update *after* installing Luma, like you've been instructed to)
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
|