diff --git a/emummc/source/FS/FS_offsets.h b/emummc/source/FS/FS_offsets.h index 8a32565..087b522 100644 --- a/emummc/source/FS/FS_offsets.h +++ b/emummc/source/FS/FS_offsets.h @@ -24,6 +24,7 @@ typedef struct { int opcode_reg; uint32_t adrp_offset; + uint32_t add_rel_offset; } fs_offsets_nintendo_path_t; typedef struct { diff --git a/emummc/source/FS/offsets/100.h b/emummc/source/FS/offsets/100.h index e85a609..eb112ea 100644 --- a/emummc/source/FS/offsets/100.h +++ b/emummc/source/FS/offsets/100.h @@ -47,11 +47,11 @@ // Nintendo Paths #define FS_OFFSET_100_NINTENDO_PATHS \ { \ - {.opcode_reg = 9, .adrp_offset = 0x00032C58}, \ - {.opcode_reg = 8, .adrp_offset = 0x00032C60}, \ - {.opcode_reg = 9, .adrp_offset = 0x00032F3C}, \ - {.opcode_reg = 8, .adrp_offset = 0x00032F44}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 9, .adrp_offset = 0x00032C58, .add_rel_offset = 4}, \ + {.opcode_reg = 8, .adrp_offset = 0x00032C60, .add_rel_offset = 4}, \ + {.opcode_reg = 9, .adrp_offset = 0x00032F3C, .add_rel_offset = 4}, \ + {.opcode_reg = 8, .adrp_offset = 0x00032F44, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_100_H__ diff --git a/emummc/source/FS/offsets/200.h b/emummc/source/FS/offsets/200.h index 91673a6..18078c9 100644 --- a/emummc/source/FS/offsets/200.h +++ b/emummc/source/FS/offsets/200.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_200_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x00033F08}, \ - {.opcode_reg = 3, .adrp_offset = 0x00035084}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003537C}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x00033F08, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00035084, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003537C, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_200_H__ diff --git a/emummc/source/FS/offsets/200_exfat.h b/emummc/source/FS/offsets/200_exfat.h index 95ffe4d..db36502 100644 --- a/emummc/source/FS/offsets/200_exfat.h +++ b/emummc/source/FS/offsets/200_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_200_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x00033F08}, \ - {.opcode_reg = 3, .adrp_offset = 0x00035084}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003537C}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x00033F08, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00035084, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003537C, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_200_EXFAT_H__ diff --git a/emummc/source/FS/offsets/210.h b/emummc/source/FS/offsets/210.h index 9d04fdb..0868118 100644 --- a/emummc/source/FS/offsets/210.h +++ b/emummc/source/FS/offsets/210.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_210_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000342E0}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003545C}, \ - {.opcode_reg = 3, .adrp_offset = 0x00035754}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x000342E0, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003545C, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00035754, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_210_H__ diff --git a/emummc/source/FS/offsets/210_exfat.h b/emummc/source/FS/offsets/210_exfat.h index 9a6cf8a..6c276cc 100644 --- a/emummc/source/FS/offsets/210_exfat.h +++ b/emummc/source/FS/offsets/210_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_210_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000342E0}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003545C}, \ - {.opcode_reg = 3, .adrp_offset = 0x00035754}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x000342E0, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003545C, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00035754, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_210_EXFAT_H__ diff --git a/emummc/source/FS/offsets/300.h b/emummc/source/FS/offsets/300.h index 462ac20..b697683 100644 --- a/emummc/source/FS/offsets/300.h +++ b/emummc/source/FS/offsets/300.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_300_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000391F4}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A480}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A778}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x000391F4, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A480, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A778, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_300_H__ diff --git a/emummc/source/FS/offsets/300_exfat.h b/emummc/source/FS/offsets/300_exfat.h index af46699..56a6542 100644 --- a/emummc/source/FS/offsets/300_exfat.h +++ b/emummc/source/FS/offsets/300_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_300_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000391F4}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A480}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A778}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x000391F4, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A480, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A778, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_300_EXFAT_H__ diff --git a/emummc/source/FS/offsets/301.h b/emummc/source/FS/offsets/301.h index 40c62e2..0dacf65 100644 --- a/emummc/source/FS/offsets/301.h +++ b/emummc/source/FS/offsets/301.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_301_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x00039260}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A4EC}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A7E4}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x00039260, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A4EC, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A7E4, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_301_H__ diff --git a/emummc/source/FS/offsets/301_exfat.h b/emummc/source/FS/offsets/301_exfat.h index 64aeb9d..3dfb45c 100644 --- a/emummc/source/FS/offsets/301_exfat.h +++ b/emummc/source/FS/offsets/301_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_301_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x00039260}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A4EC}, \ - {.opcode_reg = 3, .adrp_offset = 0x0003A7E4}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x00039260, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A4EC, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0003A7E4, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_301_EXFAT_H__ diff --git a/emummc/source/FS/offsets/400.h b/emummc/source/FS/offsets/400.h index 22cce3d..edee7cc 100644 --- a/emummc/source/FS/offsets/400.h +++ b/emummc/source/FS/offsets/400.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_400_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x0002023C}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_400_H__ diff --git a/emummc/source/FS/offsets/400_exfat.h b/emummc/source/FS/offsets/400_exfat.h index 0efc730..0afe003 100644 --- a/emummc/source/FS/offsets/400_exfat.h +++ b/emummc/source/FS/offsets/400_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_400_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x0002023C}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_400_EXFAT_H__ diff --git a/emummc/source/FS/offsets/410.h b/emummc/source/FS/offsets/410.h index dcb0c75..7540e8c 100644 --- a/emummc/source/FS/offsets/410.h +++ b/emummc/source/FS/offsets/410.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_410_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x0002023C}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 12}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 12}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_410_H__ diff --git a/emummc/source/FS/offsets/410_exfat.h b/emummc/source/FS/offsets/410_exfat.h index 78268a5..f78846c 100644 --- a/emummc/source/FS/offsets/410_exfat.h +++ b/emummc/source/FS/offsets/410_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_410_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x0002023C}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021BE8}, \ - {.opcode_reg = 3, .adrp_offset = 0x00021EC4}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002023C, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021BE8, .add_rel_offset = 12}, \ + {.opcode_reg = 3, .adrp_offset = 0x00021EC4, .add_rel_offset = 12}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_410_EXFAT_H__ diff --git a/emummc/source/FS/offsets/500.h b/emummc/source/FS/offsets/500.h index 8e10f2a..f3e7113 100644 --- a/emummc/source/FS/offsets/500.h +++ b/emummc/source/FS/offsets/500.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_500_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x00028980}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002ACE4}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002B220}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x00028980, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002ACE4, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002B220, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_500_H__ diff --git a/emummc/source/FS/offsets/500_exfat.h b/emummc/source/FS/offsets/500_exfat.h index 9b6bc40..a3545d8 100644 --- a/emummc/source/FS/offsets/500_exfat.h +++ b/emummc/source/FS/offsets/500_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_500_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x00028980}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002ACE4}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002B220}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x00028980, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002ACE4, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002B220, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_500_EXFAT_H__ diff --git a/emummc/source/FS/offsets/510.h b/emummc/source/FS/offsets/510.h index 2724e4c..815aa9b 100644 --- a/emummc/source/FS/offsets/510.h +++ b/emummc/source/FS/offsets/510.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_510_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000289B0}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002AD14}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002B250}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x000289B0, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002AD14, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002B250, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_510_H__ diff --git a/emummc/source/FS/offsets/510_exfat.h b/emummc/source/FS/offsets/510_exfat.h index 645fd86..399d12a 100644 --- a/emummc/source/FS/offsets/510_exfat.h +++ b/emummc/source/FS/offsets/510_exfat.h @@ -47,10 +47,10 @@ // Nintendo Paths #define FS_OFFSET_510_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000289B0}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002AD14}, \ - {.opcode_reg = 3, .adrp_offset = 0x0002B250}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x000289B0, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002AD14, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0002B250, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_510_EXFAT_H__ diff --git a/emummc/source/FS/offsets/600.h b/emummc/source/FS/offsets/600.h index 6bebc56..be52e6f 100644 --- a/emummc/source/FS/offsets/600.h +++ b/emummc/source/FS/offsets/600.h @@ -47,11 +47,11 @@ // Nintendo Paths #define FS_OFFSET_600_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000790DC}, \ - {.opcode_reg = 3, .adrp_offset = 0x0007A924}, \ - {.opcode_reg = 3, .adrp_offset = 0x0007AB18}, \ - {.opcode_reg = 3, .adrp_offset = 0x0007AEF4}, \ - {.opcode_reg = 0, .adrp_offset = 0} \ + {.opcode_reg = 3, .adrp_offset = 0x000790DC, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007A924, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007AB18, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007AEF4, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \ } #endif // __FS_600_H__ diff --git a/emummc/source/FS/offsets/600_exfat.h b/emummc/source/FS/offsets/600_exfat.h index fb07732..f44a7ed 100644 --- a/emummc/source/FS/offsets/600_exfat.h +++ b/emummc/source/FS/offsets/600_exfat.h @@ -47,11 +47,11 @@ // Nintendo Paths #define FS_OFFSET_600_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x000847DC}, \ - {.opcode_reg = 3, .adrp_offset = 0x00086024}, \ - {.opcode_reg = 3, .adrp_offset = 0x00086218}, \ - {.opcode_reg = 3, .adrp_offset = 0x000865F4}, \ - {.opcode_reg = 0, .adrp_offset = 0} \ + {.opcode_reg = 3, .adrp_offset = 0x000847DC, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00086024, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00086218, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x000865F4, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \ } #endif // __FS_600_EXFAT_H__ diff --git a/emummc/source/FS/offsets/700.h b/emummc/source/FS/offsets/700.h index c0a6243..c70079f 100644 --- a/emummc/source/FS/offsets/700.h +++ b/emummc/source/FS/offsets/700.h @@ -47,12 +47,12 @@ // Nintendo Paths #define FS_OFFSET_700_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x0007DA90}, \ - {.opcode_reg = 3, .adrp_offset = 0x0007F344}, \ - {.opcode_reg = 3, .adrp_offset = 0x0007F538}, \ - {.opcode_reg = 3, .adrp_offset = 0x0007F914}, \ - {.opcode_reg = 4, .adrp_offset = 0x0007FAD8}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007DA90, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007F344, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007F538, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0007F914, .add_rel_offset = 4}, \ + {.opcode_reg = 4, .adrp_offset = 0x0007FAD8, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_700_H__ diff --git a/emummc/source/FS/offsets/700_exfat.h b/emummc/source/FS/offsets/700_exfat.h index 1293a20..ca816cb 100644 --- a/emummc/source/FS/offsets/700_exfat.h +++ b/emummc/source/FS/offsets/700_exfat.h @@ -47,12 +47,12 @@ // Nintendo Paths #define FS_OFFSET_700_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x00089040}, \ - {.opcode_reg = 3, .adrp_offset = 0x0008A8F4}, \ - {.opcode_reg = 3, .adrp_offset = 0x0008AAE8}, \ - {.opcode_reg = 3, .adrp_offset = 0x0008AEC4}, \ - {.opcode_reg = 4, .adrp_offset = 0x0008B088}, \ - {.opcode_reg = 0, .adrp_offset = 0}, \ + {.opcode_reg = 3, .adrp_offset = 0x00089040, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0008A8F4, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0008AAE8, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0008AEC4, .add_rel_offset = 4}, \ + {.opcode_reg = 4, .adrp_offset = 0x0008B088, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \ } #endif // __FS_700_EXFAT_H__ diff --git a/emummc/source/FS/offsets/800.h b/emummc/source/FS/offsets/800.h index f03aa80..db48393 100644 --- a/emummc/source/FS/offsets/800.h +++ b/emummc/source/FS/offsets/800.h @@ -47,12 +47,12 @@ // Nintendo Paths #define FS_OFFSET_800_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x0007F5F0}, \ - {.opcode_reg = 3, .adrp_offset = 0x00081084}, \ - {.opcode_reg = 3, .adrp_offset = 0x00081278}, \ - {.opcode_reg = 3, .adrp_offset = 0x00081654}, \ - {.opcode_reg = 4, .adrp_offset = 0x00081818}, \ - {.opcode_reg = 0, .adrp_offset = 0} \ + {.opcode_reg = 3, .adrp_offset = 0x0007F5F0, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00081084, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00081278, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x00081654, .add_rel_offset = 4}, \ + {.opcode_reg = 4, .adrp_offset = 0x00081818, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \ } #endif // __FS_800_H__ diff --git a/emummc/source/FS/offsets/800_exfat.h b/emummc/source/FS/offsets/800_exfat.h index cfc317c..f4ecc30 100644 --- a/emummc/source/FS/offsets/800_exfat.h +++ b/emummc/source/FS/offsets/800_exfat.h @@ -47,12 +47,12 @@ // Nintendo Paths #define FS_OFFSET_800_EXFAT_NINTENDO_PATHS \ { \ - {.opcode_reg = 3, .adrp_offset = 0x0008ABA0}, \ - {.opcode_reg = 3, .adrp_offset = 0x0008C634}, \ - {.opcode_reg = 3, .adrp_offset = 0x0008C828}, \ - {.opcode_reg = 3, .adrp_offset = 0x0008CC04}, \ - {.opcode_reg = 4, .adrp_offset = 0x0008CDC8}, \ - {.opcode_reg = 0, .adrp_offset = 0} \ + {.opcode_reg = 3, .adrp_offset = 0x0008ABA0, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0008C634, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0008C828, .add_rel_offset = 4}, \ + {.opcode_reg = 3, .adrp_offset = 0x0008CC04, .add_rel_offset = 4}, \ + {.opcode_reg = 4, .adrp_offset = 0x0008CDC8, .add_rel_offset = 4}, \ + {.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0} \ } #endif // __FS_800_EXFAT_H__ diff --git a/emummc/source/main.c b/emummc/source/main.c index 3e5531b..3e35ad2 100644 --- a/emummc/source/main.c +++ b/emummc/source/main.c @@ -154,15 +154,14 @@ smcWriteAddress32((void *)source, GENERATE_NOP()); } -void write_adrp_add(int reg, uintptr_t pc, intptr_t destination) +void write_adrp_add(int reg, uintptr_t pc, uintptr_t add_rel_offset, intptr_t destination) { - uintptr_t add_opcode_location = pc + sizeof(uint32_t); + uintptr_t add_opcode_location = pc + add_rel_offset; intptr_t offset = (destination & 0xFFFFF000) - (pc & 0xFFFFF000); uint32_t opcode_adrp = GENERATE_ADRP(reg, offset); uint32_t opcode_add = GENERATE_ADD(reg, reg, (destination & 0x00000FFF)); - // TODO: use 64 write? smcWriteAddress32((void *)pc, opcode_adrp); smcWriteAddress32((void *)add_opcode_location, opcode_add); } @@ -268,7 +267,7 @@ { intptr_t nintendo_path_location = (intptr_t)&nintendo_path; uintptr_t fs_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[i].adrp_offset); - write_adrp_add(fs_offsets->nintendo_paths[i].opcode_reg, fs_adrp_opcode_location, nintendo_path_location); + write_adrp_add(fs_offsets->nintendo_paths[i].opcode_reg, fs_adrp_opcode_location, fs_offsets->nintendo_paths[i].add_rel_offset, nintendo_path_location); } } else @@ -281,8 +280,8 @@ intptr_t album_path_location = nintendo_album_path_location + path_len - 6; // "/Album" uintptr_t fs_n_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[0].adrp_offset); uintptr_t fs_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[1].adrp_offset); - write_adrp_add(fs_offsets->nintendo_paths[0].opcode_reg, fs_n_adrp_opcode_location, nintendo_album_path_location); - write_adrp_add(fs_offsets->nintendo_paths[1].opcode_reg, fs_adrp_opcode_location, album_path_location); + write_adrp_add(fs_offsets->nintendo_paths[0].opcode_reg, fs_n_adrp_opcode_location, fs_offsets->nintendo_paths[0].add_rel_offset, nintendo_album_path_location); + write_adrp_add(fs_offsets->nintendo_paths[1].opcode_reg, fs_adrp_opcode_location, fs_offsets->nintendo_paths[1].add_rel_offset, album_path_location); } // Do contents path { @@ -291,8 +290,8 @@ intptr_t contents_path_location = nintendo_contents_path_location + path_len - 9; // "/Contents" uintptr_t fs_n_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[2].adrp_offset); uintptr_t fs_adrp_opcode_location = INJECT_OFFSET(uintptr_t, fs_offsets->nintendo_paths[3].adrp_offset); - write_adrp_add(fs_offsets->nintendo_paths[2].opcode_reg, fs_n_adrp_opcode_location, nintendo_contents_path_location); - write_adrp_add(fs_offsets->nintendo_paths[3].opcode_reg, fs_adrp_opcode_location, contents_path_location); + write_adrp_add(fs_offsets->nintendo_paths[2].opcode_reg, fs_n_adrp_opcode_location, fs_offsets->nintendo_paths[2].add_rel_offset, nintendo_contents_path_location); + write_adrp_add(fs_offsets->nintendo_paths[3].opcode_reg, fs_adrp_opcode_location, fs_offsets->nintendo_paths[3].add_rel_offset, contents_path_location); } } }