summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira Akashi <rubenru09@aol.com>2021-07-22 19:00:30 +0100
committerGitHub <noreply@github.com>2021-07-22 19:00:30 +0100
commita440969d306d06d28a76712ecee3ed40cdeef24a (patch)
tree47febe26cb21da5fe67a21e6669a5af3106873f3
parent9f3dc591c8d481d61e70afb5389e1d790d129803 (diff)
parenta90be187f047da58dd05fbd4322719856b94fc13 (diff)
Merge branch 'master' into master
-rw-r--r--arm9/arm9.lsf136
-rw-r--r--arm9/asm/unk_02022450.s94
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/83/asm/module_83.s2
-rw-r--r--arm9/src/game_init.c3
-rw-r--r--arm9/src/unk_02022450.c45
-rw-r--r--include/unk_02022450.h18
7 files changed, 134 insertions, 166 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index d7310855..2f0ec1af 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -361,74 +361,74 @@ Static arm9
Object NNS_FND_frameheap.o
Object NNS_FND_allocator.o
Object NNS_GFD_gfd_texvramman.o
- Object NNS_GFD_gfd_plttvramman.o
- Object NNS_GFD_gfd_frametexvra.o
- Object NNS_GFD_gfd_frameplttvr.o
- Object NNS_GFD_gfd_vramtransfe.o
- Object NNS_GFD_gfdi_linkedlist.o
- Object NNS_GFD_gfd_linkedlistt.o
- Object NNS_GFD_gfd_linkedlistp.o
- Object NNS_G2D_g2d_nan_load.o
- Object NNS_G2D_g2d_nob_load.o
- Object NNS_G2D_g2d_nmc_load.o
- Object NNS_G2D_g2d_ncg_load.o
- Object NNS_G2D_g2d_ncl_load.o
- Object NNS_G2D_g2d_nsc_load.o
- Object NNS_G2D_g2d_load.o
- Object NNS_G2D_g2d_softsprite.o
- Object NNS_G2D_g2d_animation.o
- Object NNS_G2D_g2d_oam.o
- Object NNS_G2D_g2d_palettetabl.o
- Object NNS_G2D_g2d_image.o
- Object NNS_G2D_g2d_srtcontrol.o
- Object NNS_G2D_g2d_node.o
- Object NNS_G2D_g2d_cellanimati.o
- Object NNS_G2D_g2d_multicellan.o
- Object NNS_G2D_g2d_renderer.o
- Object NNS_G2D_g2di_mtx32.o
- Object NNS_G2D_g2d_celltransfe.o
- Object NNS_G2D_g2d_oamsoftware.o
- Object NNS_G2D_g2d_renderercor.o
- Object NNS_G2D_g2d_font.o
- Object NNS_G2D_g2d_charcanvas.o
- Object NNS_G2D_g2d_textcanvas.o
- Object NNS_G2D_g2d_nft_load.o
- Object NNS_G2D_g2di_bitreader.o
- Object NNS_G2D_g2di_splitchar.o
- Object NNS_G3D_kernel.o
- Object NNS_G3D_glbstate.o
- Object NNS_G3D_anm.o
- Object NNS_G3D_cgtool.o
- Object NNS_G3D_sbc.o
- Object NNS_G3D_1mat1shp.o
- Object NNS_G3D_gecom.o
- Object NNS_G3D_util.o
- Object NNS_G3D_mem.o
- Object NNS_G3D_model.o
- Object NNS_G3D_res_struct_acce.o
- Object NNS_G3D_nsbca.o
- Object NNS_G3D_nsbma.o
- Object NNS_G3D_nsbta.o
- Object NNS_G3D_nsbtp.o
- Object NNS_G3D_nsbva.o
- Object NNS_G3D_basic.o
- Object NNS_G3D_maya.o
- Object NNS_G3D_si3d.o
- Object NNS_G3D_3dsmax.o
- Object NNS_G3D_xsi.o
- Object NNS_SND_main.o
- Object NNS_SND_resource_mgr.o
- Object NNS_SND_waveout.o
- Object NNS_SND_player.o
- Object NNS_SND_stream.o
- Object NNS_SND_capture.o
- Object NNS_SND_sndarc.o
- Object NNS_SND_heap.o
- Object NNS_SND_sndarc_loader.o
- Object NNS_SND_sndarc_player.o
- Object NNS_SND_sndarc_stream.o
- Object NNS_SND_seqdata.o
- Object NNS_SND_fader.o
+ Object NNS_GFD_gfd_plttvramman.o
+ Object NNS_GFD_gfd_frametexvra.o
+ Object NNS_GFD_gfd_frameplttvr.o
+ Object NNS_GFD_gfd_vramtransfe.o
+ Object NNS_GFD_gfdi_linkedlist.o
+ Object NNS_GFD_gfd_linkedlistt.o
+ Object NNS_GFD_gfd_linkedlistp.o
+ Object NNS_G2D_g2d_nan_load.o
+ Object NNS_G2D_g2d_nob_load.o
+ Object NNS_G2D_g2d_nmc_load.o
+ Object NNS_G2D_g2d_ncg_load.o
+ Object NNS_G2D_g2d_ncl_load.o
+ Object NNS_G2D_g2d_nsc_load.o
+ Object NNS_G2D_g2d_load.o
+ Object NNS_G2D_g2d_softsprite.o
+ Object NNS_G2D_g2d_animation.o
+ Object NNS_G2D_g2d_oam.o
+ Object NNS_G2D_g2d_palettetabl.o
+ Object NNS_G2D_g2d_image.o
+ Object NNS_G2D_g2d_srtcontrol.o
+ Object NNS_G2D_g2d_node.o
+ Object NNS_G2D_g2d_cellanimati.o
+ Object NNS_G2D_g2d_multicellan.o
+ Object NNS_G2D_g2d_renderer.o
+ Object NNS_G2D_g2di_mtx32.o
+ Object NNS_G2D_g2d_celltransfe.o
+ Object NNS_G2D_g2d_oamsoftware.o
+ Object NNS_G2D_g2d_renderercor.o
+ Object NNS_G2D_g2d_font.o
+ Object NNS_G2D_g2d_charcanvas.o
+ Object NNS_G2D_g2d_textcanvas.o
+ Object NNS_G2D_g2d_nft_load.o
+ Object NNS_G2D_g2di_bitreader.o
+ Object NNS_G2D_g2di_splitchar.o
+ Object NNS_G3D_kernel.o
+ Object NNS_G3D_glbstate.o
+ Object NNS_G3D_anm.o
+ Object NNS_G3D_cgtool.o
+ Object NNS_G3D_sbc.o
+ Object NNS_G3D_1mat1shp.o
+ Object NNS_G3D_gecom.o
+ Object NNS_G3D_util.o
+ Object NNS_G3D_mem.o
+ Object NNS_G3D_model.o
+ Object NNS_G3D_res_struct_acce.o
+ Object NNS_G3D_nsbca.o
+ Object NNS_G3D_nsbma.o
+ Object NNS_G3D_nsbta.o
+ Object NNS_G3D_nsbtp.o
+ Object NNS_G3D_nsbva.o
+ Object NNS_G3D_basic.o
+ Object NNS_G3D_maya.o
+ Object NNS_G3D_si3d.o
+ Object NNS_G3D_3dsmax.o
+ Object NNS_G3D_xsi.o
+ Object NNS_SND_main.o
+ Object NNS_SND_resource_mgr.o
+ Object NNS_SND_waveout.o
+ Object NNS_SND_player.o
+ Object NNS_SND_stream.o
+ Object NNS_SND_capture.o
+ Object NNS_SND_sndarc.o
+ Object NNS_SND_heap.o
+ Object NNS_SND_sndarc_loader.o
+ Object NNS_SND_sndarc_player.o
+ Object NNS_SND_sndarc_stream.o
+ Object NNS_SND_seqdata.o
+ Object NNS_SND_fader.o
### Nitro SDK ###
Object FX_mtx22.o
Object FX_mtx33.o
diff --git a/arm9/asm/unk_02022450.s b/arm9/asm/unk_02022450.s
deleted file mode 100644
index fd6aacb5..00000000
--- a/arm9/asm/unk_02022450.s
+++ /dev/null
@@ -1,94 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .rodata
-
- .global UNK_020EE6D4
-UNK_020EE6D4: ; 0x020EE6D4
- .asciz "rom"
-
- .text
-
- thumb_func_start FUN_02022450
-FUN_02022450: ; 0x02022450
- push {r3, lr}
- bl FS_IsAvailable
- cmp r0, #0x0
- bne _02022460
- bl OS_Terminate
- pop {r3, pc}
-_02022460:
- ldr r0, _020224BC ; =0x027FF00C
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _0202248A
- bl CARD_Init
- mov r2, #0x16
- ldr r0, _020224C0 ; =0x027FFE00
- ldr r1, _020224C4 ; =0x027FF000
- lsl r2, r2, #0x4
- bl MI_CpuCopy8
- mov r2, #0x16
- ldr r0, _020224C0 ; =0x027FFE00
- ldr r1, _020224C8 ; =0x027FFA80
- lsl r2, r2, #0x4
- bl MI_CpuCopy8
- ldr r1, _020224CC ; =0x4A414441
- ldr r0, _020224BC ; =0x027FF00C
- str r1, [r0, #0x0]
-_0202248A:
- ldr r0, _020224D0 ; =UNK_020EE6D4
- mov r1, #0x3
- bl FS_FindArchive
- ldr r1, _020224C4 ; =0x027FF000
- ldr r2, [r1, #0x48]
- str r2, [r0, #0x2c]
- ldr r2, [r1, #0x4c]
- str r2, [r0, #0x30]
- ldr r2, [r1, #0x40]
- str r2, [r0, #0x34]
- ldr r2, [r1, #0x44]
- str r2, [r0, #0x38]
- ldr r2, [r1, #0xc]
- ldr r0, _020224CC ; =0x4A414441
- cmp r2, r0
- bne _020224B4
- ldrh r1, [r1, #0x10]
- ldr r0, _020224D4 ; =0x00003130
- cmp r1, r0
- beq _020224B8
-_020224B4:
- bl OS_Terminate
-_020224B8:
- pop {r3, pc}
- nop
-_020224BC: .word 0x027FF00C
-_020224C0: .word 0x027FFE00
-_020224C4: .word 0x027FF000
-_020224C8: .word 0x027FFA80
-_020224CC: .word 0x4A414441
-_020224D0: .word UNK_020EE6D4
-_020224D4: .word 0x00003130
-
- thumb_func_start FUN_020224D8
-FUN_020224D8: ; 0x020224D8
- push {r4, lr}
- sub sp, #0x48
- add r4, r0, #0x0
- add r0, sp, #0x0
- bl FS_InitFile
- add r0, sp, #0x0
- add r1, r4, #0x0
- bl FS_OpenFile
- cmp r0, #0x0
- beq _020224FC
- ldr r1, [sp, #0x24]
- ldr r0, _02022500 ; =0x027FFC2C
- str r1, [r0, #0x0]
- mov r0, #0x0
- bl OS_ResetSystem
-_020224FC:
- add sp, #0x48
- pop {r4, pc}
- .balign 4
-_02022500: .word 0x027FFC2C
diff --git a/arm9/global.inc b/arm9/global.inc
index fcb4126e..e5ea8659 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -1425,7 +1425,7 @@
.extern FUN_02022318
.extern FUN_020223BC
.extern FUN_02022450
-.extern FUN_020224D8
+.extern Reset_To_File
.extern FUN_02022504
.extern GetStoragePCPointer
.extern FUN_0202251C
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index d58de0be..06fa49b6 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -2334,7 +2334,7 @@ _0222E7F8:
pop {r3, pc}
_0222E802:
ldr r0, _0222E840 ; =MOD83_0223A8C4
- bl FUN_020224D8
+ bl Reset_To_File
pop {r3, pc}
_0222E80A:
bl FUN_0200541C
diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c
index 9cc12ad2..44dcc111 100644
--- a/arm9/src/game_init.c
+++ b/arm9/src/game_init.c
@@ -7,6 +7,7 @@
#include "MWC_string.h"
#include "tp.h"
#include "unk_0201B4E8.h"
+#include "unk_02022450.h"
#include "game_init.h"
#include "registers.h"
#include "heap.h"
@@ -14,8 +15,6 @@
#pragma thumb on
-extern void FUN_02022450(void);
-
static struct {
void * contents;
u32 name_hash;
diff --git a/arm9/src/unk_02022450.c b/arm9/src/unk_02022450.c
new file mode 100644
index 00000000..7984fcc2
--- /dev/null
+++ b/arm9/src/unk_02022450.c
@@ -0,0 +1,45 @@
+#include "global.h"
+#include "FS_file.h"
+#include "OS_terminate_proc.h"
+#include "CARD_rom.h"
+#include "MI_memory.h"
+
+#include "unk_02022450.h"
+
+static const char string_saying_rom[] = "rom";
+
+/*Replacing (HW_MAIN_MEM_SHARED + 0xC) or (HW_MAIN_MEM_SHARED + 0x10) or defining ADAJ or 01 constants causes match failure*/
+THUMB_FUNC void FUN_02022450 () {
+ if (!FS_IsAvailable()) {
+ OS_Terminate();
+ }
+ else {
+ struct CARD_Header* card_header_buffer = (struct CARD_Header*)HW_MAIN_MEM_SHARED;
+
+ if (!*(u32*)(HW_MAIN_MEM_SHARED + 0xC)) {
+ CARD_Init();
+ MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)card_header_buffer, HW_CARD_ROM_HEADER_SIZE);
+ MI_CpuCopy8((u8*)HW_ROM_HEADER_BUF, (u8*)HW_CARD_ROM_HEADER, HW_CARD_ROM_HEADER_SIZE);
+ *(u32*)(HW_MAIN_MEM_SHARED + 0xC) = 0x4A414441 /*"ADAJ" LE*/;
+ }
+ FSArchive * const r0 = FS_FindArchive(string_saying_rom, 3);
+ r0->fat = card_header_buffer->header_48;
+ r0->fat_size = card_header_buffer->header_4C;
+ r0->fnt = card_header_buffer->header_40;
+ r0->fnt_size = card_header_buffer->header_44;
+ if (*(u32*)(HW_MAIN_MEM_SHARED + 0xC) != 0x4A414441 /*"ADAJ" LE*/ || *(u16*)(HW_MAIN_MEM_SHARED + 0x10) != 0x3130 /*"01" LE*/) {
+ OS_Terminate();
+ }
+ }
+ return;
+}
+
+THUMB_FUNC void Reset_To_File (const char* path) {
+ FSFile file;
+ FS_InitFile(&file);
+ if (FS_OpenFile(&file, path)) {
+ *(u32*)HW_ROM_BASE_OFFSET_BUF = file.prop.file.top;
+ OS_ResetSystem(0);
+ }
+ return;
+}
diff --git a/include/unk_02022450.h b/include/unk_02022450.h
new file mode 100644
index 00000000..1224107a
--- /dev/null
+++ b/include/unk_02022450.h
@@ -0,0 +1,18 @@
+#ifndef POKEDIAMOND_UNK_02022450_H
+#define POKEDIAMOND_UNK_02022450_H
+
+struct CARD_Header {
+ u8 title[12];
+ u32 tid;
+ u16 maker_code;
+ u8 filler[44];
+ u32 header_40;
+ u32 header_44;
+ u32 header_48;
+ u32 header_4C;
+};
+
+void FUN_02022450();
+void Reset_To_File(const char* path);
+
+#endif //POKEDIAMOND_UNK_02022450_H