This repository has been archived on 2022-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
Luma3DS-3GX/patches/emunand.s

46 lines
1.2 KiB
ArmAsm
Raw Normal View History

.arm.little
2015-08-05 03:57:37 +02:00
.create "build/emunand.bin", 0
2015-08-05 03:57:37 +02:00
.arm
2016-01-13 21:16:03 +01:00
nand_sd:
; Original code that still needs to be executed.
mov r4, r0
mov r5, r1
mov r7, r2
mov r6, r3
; End.
2015-08-05 03:57:37 +02:00
2016-01-13 21:16:03 +01:00
; If we're already trying to access the SD, return.
ldr r2, [r0, #4]
ldr r1, [sdmmc]
2016-01-13 21:16:03 +01:00
cmp r2, r1
beq nand_sd_ret
2015-08-05 03:57:37 +02:00
2016-01-13 21:16:03 +01:00
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, [nand_offset]
2016-01-13 21:16:03 +01:00
add r2, r3 ; Add the offset to the NAND in the SD.
ldreq r3, [ncsd_header_offset]
2016-01-13 21:16:03 +01:00
addeq r2, r3 ; If we're reading the ncsd header, add the offset of that sector.
str r2, [r0, #8] ; Store sector to read
nand_sd_ret:
; 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
2015-08-05 03:57:37 +02:00
.pool
sdmmc: .ascii "SDMC"
2015-08-05 03:57:37 +02:00
nand_offset: .ascii "NAND" ; for rednand this should be 1
ncsd_header_offset: .ascii "NCSD" ; depends on nand manufacturer + emunand type (GW/RED)
2016-08-28 13:49:15 +02:00
.close