Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.58 KB | None | 0 0
  1. @
  2. @   New Super Mario Bros. 2 - romfs2sdmc
  3. @
  4. @   by RicBent
  5. @   heavily based on SaltySD by shinyquagsire
  6. @
  7.  
  8. @ Functions in NSMB2
  9. @   - 0013FC70 fsTryOpenFile
  10. @   - 001109E4 fsMountArchive
  11. @   - 00117DAC fsRegisterArchive
  12. @   - 001416E0 fsMountSd    (calls fsMountArchive and fsRegisterArchive)
  13.  
  14. .text
  15.  
  16. @ Helper Functions
  17.  
  18. @ MemCopy(void* dest, void* src, uint num)
  19. MemCopy:
  20.     ldrb r3, [r1], #1
  21.     strb r3, [r0], #1
  22.     subs r2, r2, #1
  23.     bge MemCopy
  24.     bx lr
  25.  
  26.  
  27. TryOpenFile_Payload:
  28.     mov r6, r0              @ destination?
  29.     cmp r4, #0xBA           @ magic check
  30.     beq exit
  31.  
  32.     push {r0-r12, lr}
  33.         sub sp, sp, #0x20
  34.         mov r7, r1          @ input file path
  35.         mov r8, r2          @ mode
  36.  
  37.         ldrh r3, [r7, #0x0]
  38.         cmp r3, #0x64       @ Filter out "data:/"
  39.         beq abort
  40.  
  41.         @ Mount SD if necessary
  42.         bl check_mount_sd
  43.  
  44.         @ Modify path so that it points to our sdmc path
  45.         ldr r0, =path_buf
  46.         ldr r1, =sdmount_wchar
  47.         mov r2, #(sdmount_wchar_end-sdmount_wchar-2)
  48.         bl MemCopy
  49.  
  50.         ldr r0, =path_buf
  51.         add r0, #(sdmount_wchar_end-sdmount_wchar-2)
  52.         mov r1, r7
  53.         ldrh r3, [r7, #0x6]
  54.         cmp r3, #0x3A           @ if path[3] == ':'
  55.         addeq r1, #0x8
  56.         addne r1, #0xA
  57.         mov r3, #(sdmount_wchar_end-sdmount_wchar-2)
  58.         mov r2, #0x400
  59.         sub r2, r2, r3
  60.         bl MemCopy
  61.  
  62.         @ Try to load file from sdmc
  63.         mov r0, r6          @ destination?
  64.         ldr r1, =path_buf   @ modified path
  65.         mov r2, r8          @ mode
  66.         mov r4, #0xBA       @ magic check
  67.         bl 0x0013FC70       @ TryOpenFile()
  68.  
  69.         @ If we get a 0 result, we have a good file handle
  70.         @ and can return
  71.         cmp r0, #0x0
  72.         beq success
  73.  
  74. abort:
  75.         add sp, sp, #0x20
  76.     pop {r0-r12, lr}
  77.  
  78. exit:
  79.     b (0x0013FC70+8)
  80.  
  81. success:
  82.     add sp, sp, #0x20
  83.     pop {r0-r12, lr}
  84.     b (0x0013FC70+0x8C)
  85.  
  86.  
  87. check_mount_sd:
  88.     push {r0-r4, lr}
  89.         ldr r0, =sdmounted
  90.         ldrb r0, [r0]
  91.         cmp r0, #0x0
  92.         bne skip_mount
  93.         ldr r0, =sdmount
  94.         mov r1, #0xF0000001
  95.         bl 0x001416E0   @ mount_phtsd
  96.         ldr r0, =sdmounted
  97.         mov r1, #0x1
  98.         strb r1, [r0]
  99. skip_mount:
  100.     pop {r0-r4, pc}
  101.  
  102.  
  103. .data
  104. .align 4
  105.  
  106. sdmount:
  107.     .ascii "sd_:"
  108.     .byte 0
  109.  
  110. sdmounted:
  111.     .byte 0
  112.  
  113. sdmount_wchar:
  114.     @ sd_:/nsmb2/
  115.     .2byte 0x0073, 0x0064, 0x005f, 0x003a, 0x002f, 0x006e, 0x0073, 0x006d, 0x0062, 0x0032, 0x002f
  116. sdmount_wchar_end:
  117.  
  118. .align 4
  119. path_buf:
  120.     .skip 400
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement