diff options
author | Akira Akashi <rubenru09@aol.com> | 2021-07-22 19:00:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-22 19:00:30 +0100 |
commit | a440969d306d06d28a76712ecee3ed40cdeef24a (patch) | |
tree | 47febe26cb21da5fe67a21e6669a5af3106873f3 | |
parent | 9f3dc591c8d481d61e70afb5389e1d790d129803 (diff) | |
parent | a90be187f047da58dd05fbd4322719856b94fc13 (diff) |
Merge branch 'master' into master
-rw-r--r-- | arm9/arm9.lsf | 136 | ||||
-rw-r--r-- | arm9/asm/unk_02022450.s | 94 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-rw-r--r-- | arm9/modules/83/asm/module_83.s | 2 | ||||
-rw-r--r-- | arm9/src/game_init.c | 3 | ||||
-rw-r--r-- | arm9/src/unk_02022450.c | 45 | ||||
-rw-r--r-- | include/unk_02022450.h | 18 |
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 |