diff options
Diffstat (limited to 'arm9/modules')
| -rw-r--r-- | arm9/modules/59/asm/mod59_021D74E0_asm.s | 208 | ||||
| -rw-r--r-- | arm9/modules/59/include/mod59_021D74E0.h | 6 | ||||
| -rw-r--r-- | arm9/modules/59/src/mod59_021D74E0_src.c | 85 | 
3 files changed, 85 insertions, 214 deletions
| diff --git a/arm9/modules/59/asm/mod59_021D74E0_asm.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s index 7cb6272f..d1e39e08 100644 --- a/arm9/modules/59/asm/mod59_021D74E0_asm.s +++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s @@ -5,214 +5,6 @@  	.extern MOD59_021D7730 -	thumb_func_start MOD59_021D778C -MOD59_021D778C: ; 0x021D778C -	push {r3, r4, r5, lr} -	sub sp, #0x78 -	ldr r5, _021D7954 ; =0x021D9F18 -	add r4, r0, #0 -	add r3, sp, #0x50 -	mov r2, #5 -_021D7798: -	ldmia r5!, {r0, r1} -	stmia r3!, {r0, r1} -	sub r2, r2, #1 -	bne _021D7798 -	add r0, sp, #0x50 -	bl GX_SetBanks -	ldr r0, [r4] -	bl BgConfig_Alloc -	add r3, sp, #0x40 -	ldr r5, _021D7958 ; =0x021D9DCC -	str r0, [r4, #0x18] -	add r2, r3, #0 -	ldmia r5!, {r0, r1} -	stmia r3!, {r0, r1} -	ldmia r5!, {r0, r1} -	stmia r3!, {r0, r1} -	add r0, r2, #0 -	bl SetBothScreensModesAndDisable -	ldr r5, _021D795C ; =0x021D9EA0 -	add r3, sp, #0x24 -	ldmia r5!, {r0, r1} -	add r2, r3, #0 -	stmia r3!, {r0, r1} -	ldmia r5!, {r0, r1} -	stmia r3!, {r0, r1} -	ldmia r5!, {r0, r1} -	stmia r3!, {r0, r1} -	ldr r0, [r5] -	mov r1, #0 -	str r0, [r3] -	mov r0, #0xf -	strb r0, [r2, #0x12] -	mov r0, #6 -	strb r0, [r2, #0x13] -	ldr r0, [r4, #0x18] -	add r3, r1, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #0 -	bl BgClearTilemapBufferAndCommit -	mov r0, #0xe -	add r2, sp, #0x24 -	strb r0, [r2, #0x12] -	mov r0, #5 -	strb r0, [r2, #0x13] -	ldr r0, [r4, #0x18] -	mov r1, #1 -	mov r3, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #1 -	bl BgClearTilemapBufferAndCommit -	mov r0, #0xd -	add r2, sp, #0x24 -	strb r0, [r2, #0x12] -	mov r0, #4 -	strb r0, [r2, #0x13] -	ldr r0, [r4, #0x18] -	mov r1, #2 -	mov r3, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #2 -	bl BgClearTilemapBufferAndCommit -	mov r0, #0xc -	add r2, sp, #0x24 -	strb r0, [r2, #0x12] -	mov r1, #3 -	strb r1, [r2, #0x13] -	ldr r0, [r4, #0x18] -	mov r3, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #3 -	bl BgClearTilemapBufferAndCommit -	mov r1, #0 -	str r1, [sp] -	ldr r0, [r4] -	ldr r2, _021D7960 ; =0x000003E2 -	str r0, [sp, #4] -	ldr r0, [r4, #0x18] -	mov r3, #4 -	bl FUN_0200CD68 -	mov r1, #0 -	str r1, [sp] -	ldr r0, [r4] -	ldr r2, _021D7964 ; =0x000003D9 -	str r0, [sp, #4] -	ldr r0, [r4, #0x18] -	mov r3, #3 -	bl FUN_0200CB00 -	ldr r2, [r4] -	mov r0, #0 -	mov r1, #0xa0 -	bl FUN_02002ED0 -	ldr r2, [r4] -	mov r0, #0 -	mov r1, #0xc0 -	bl FUN_02002EEC -	ldr r5, _021D7968 ; =0x021D9EBC -	add r3, sp, #8 -	ldmia r5!, {r0, r1} -	add r2, r3, #0 -	stmia r3!, {r0, r1} -	ldmia r5!, {r0, r1} -	stmia r3!, {r0, r1} -	ldmia r5!, {r0, r1} -	stmia r3!, {r0, r1} -	ldr r0, [r5] -	mov r1, #0xf -	str r0, [r3] -	add r0, sp, #8 -	strb r1, [r0, #0x12] -	mov r1, #6 -	strb r1, [r0, #0x13] -	ldr r0, [r4, #0x18] -	mov r1, #4 -	mov r3, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #4 -	bl BgClearTilemapBufferAndCommit -	mov r1, #0xe -	add r0, sp, #8 -	strb r1, [r0, #0x12] -	mov r1, #5 -	strb r1, [r0, #0x13] -	ldr r0, [r4, #0x18] -	add r2, sp, #8 -	mov r3, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #5 -	bl BgClearTilemapBufferAndCommit -	mov r1, #0xd -	add r0, sp, #8 -	strb r1, [r0, #0x12] -	mov r1, #4 -	strb r1, [r0, #0x13] -	ldr r0, [r4, #0x18] -	mov r1, #6 -	add r2, sp, #8 -	mov r3, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #6 -	bl BgClearTilemapBufferAndCommit -	mov r1, #0xc -	add r0, sp, #8 -	strb r1, [r0, #0x12] -	mov r1, #3 -	strb r1, [r0, #0x13] -	ldr r0, [r4, #0x18] -	mov r1, #7 -	add r2, sp, #8 -	mov r3, #0 -	bl InitBgFromTemplate -	ldr r0, [r4, #0x18] -	mov r1, #7 -	bl BgClearTilemapBufferAndCommit -	mov r0, #0 -	add r1, r0, #0 -	bl ToggleBgLayer -	mov r0, #1 -	mov r1, #0 -	bl ToggleBgLayer -	mov r0, #2 -	mov r1, #0 -	bl ToggleBgLayer -	mov r0, #3 -	mov r1, #0 -	bl ToggleBgLayer -	mov r0, #4 -	mov r1, #0 -	bl ToggleBgLayer -	mov r0, #5 -	mov r1, #0 -	bl ToggleBgLayer -	mov r0, #6 -	mov r1, #0 -	bl ToggleBgLayer -	mov r0, #7 -	mov r1, #0 -	bl ToggleBgLayer -	add r0, r4, #0 -	bl MOD59_021D8058 -	mov r0, #0 -	str r0, [r4, #0x78] -	add sp, #0x78 -	pop {r3, r4, r5, pc} -	.align 2, 0 -_021D7954: .word MOD59_021D9F18 -_021D7958: .word MOD59_021D9DCC -_021D795C: .word MOD59_021D9EA0 -_021D7960: .word 0x000003E2 -_021D7964: .word 0x000003D9 -_021D7968: .word MOD59_021D9EBC -	thumb_func_end MOD59_021D778C -  	thumb_func_start MOD59_021D796C  MOD59_021D796C: ; 0x021D796C  	push {r4, lr} diff --git a/arm9/modules/59/include/mod59_021D74E0.h b/arm9/modules/59/include/mod59_021D74E0.h index d6f52bba..0a594ad3 100644 --- a/arm9/modules/59/include/mod59_021D74E0.h +++ b/arm9/modules/59/include/mod59_021D74E0.h @@ -23,11 +23,12 @@ typedef struct MOD59_OverlayData      u32 Unk0C;      u32 Unk10;      struct UnkStruct_02006234 *Unk14; -    struct BgConfig *Unk18; +    struct BgConfig *bgConfig;      u8 padding[0x54];      struct MOD59_UnkPlayerStruct *playerStruct;      struct MOD59_UnkPlayerStruct *rivalStruct; -    u8 padding2[0x10]; +    u32 Unk78; +    u8 padding2[0xC];      u8 Unk88;      u8 Unk89;      u8 Unk8A; @@ -42,5 +43,6 @@ BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1);  BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0);  void MOD59_021D7724(MOD59_OverlayData *data);  BOOL MOD59_021D7730(void); +void MOD59_SetupBg(MOD59_OverlayData *data);  #endif //POKEDIAMOND_MOD59_021D74E0_H diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c index e104cf4f..7d6be2ca 100644 --- a/arm9/modules/59/src/mod59_021D74E0_src.c +++ b/arm9/modules/59/src/mod59_021D74E0_src.c @@ -7,18 +7,25 @@  #include "GX_layers.h"  #include "unk_02024E64.h"  #include "bg_window.h" +#include "render_window.h"  #include "module_52.h"  extern void *FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options);  extern void FUN_0200E3A0(PMLCDTarget, int); -extern void MOD59_021D778C(MOD59_OverlayData *data); +//todo move with the other rodata +extern struct GraphicsBanks MOD59_021D9F18; +extern struct GraphicsModes MOD59_021D9DCC; +extern struct BgTemplate MOD59_021D9EA0; +extern struct BgTemplate MOD59_021D9EBC; +  extern void MOD59_021D79F8(MOD59_OverlayData *data);  extern void MOD59_021D7A34(MOD59_OverlayData *data);  extern void MOD59_021D796C(MOD59_OverlayData *data);  extern void MOD59_021D7A4C(MOD59_OverlayData *data);  extern void MOD59_021D7A5C(MOD59_OverlayData *data); +extern void MOD59_021D8058(MOD59_OverlayData *data);  extern u32 MOD59_021D8920(MOD59_OverlayData *data);  extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id); @@ -32,7 +39,7 @@ THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0)  {      CreateHeap(3, 0x52, 1 << 18);      MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_CreateAndGetData(param0, sizeof(MOD59_OverlayData), 0x52); -    (void)memset((void *)data, 0, 0xb4); +    (void)memset((void *)data, 0, sizeof(MOD59_OverlayData));      data->heap_id = 0x52;      s32 *field18 = OverlayManager_GetField18(param0); @@ -72,7 +79,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1)              SetKeyRepeatTimers(4, 8); -            MOD59_021D778C(data); +            MOD59_SetupBg(data);              MOD59_021D79F8(data);              MOD59_021D7A4C(data); @@ -177,7 +184,7 @@ THUMB_FUNC BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0)  THUMB_FUNC void MOD59_021D7724(MOD59_OverlayData *data)  { -    DoScheduledBgGpuUpdates(data->Unk18); +    DoScheduledBgGpuUpdates(data->bgConfig);  }  THUMB_FUNC BOOL MOD59_021D7730(void) @@ -200,3 +207,73 @@ THUMB_FUNC BOOL MOD59_021D7730(void)      return ret;  } + +THUMB_FUNC void MOD59_SetupBg(MOD59_OverlayData *data) +{ +    struct GraphicsBanks graphicsBanks = MOD59_021D9F18; +    GX_SetBanks(&graphicsBanks); +    data->bgConfig = BgConfig_Alloc(data->heap_id); + +    struct GraphicsModes graphicsModes = MOD59_021D9DCC; +    SetBothScreensModesAndDisable(&graphicsModes); + +    struct BgTemplate bgTemplateMain = MOD59_021D9EA0; +    bgTemplateMain.screenBase = 15; +    bgTemplateMain.charBase = 6; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_0, &bgTemplateMain, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_0); + +    bgTemplateMain.screenBase = 14; +    bgTemplateMain.charBase = 5; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_1, &bgTemplateMain, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_1); + +    bgTemplateMain.screenBase = 13; +    bgTemplateMain.charBase = 4; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_2, &bgTemplateMain, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_2); + +    bgTemplateMain.screenBase = 12; +    bgTemplateMain.charBase = 3; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_3, &bgTemplateMain, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_3); + +    FUN_0200CD68(data->bgConfig, 0, 994, 4, 0, data->heap_id); +    FUN_0200CB00(data->bgConfig, 0, 985, 3, 0, data->heap_id); +    FUN_02002ED0(GF_BG_LYR_MAIN_0, 160, data->heap_id); +    FUN_02002EEC(GF_BG_LYR_MAIN_0, 192, data->heap_id); + +    struct BgTemplate bgTemplateSub = MOD59_021D9EBC; +    bgTemplateSub.screenBase = 15; +    bgTemplateSub.charBase = 6; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_0, &bgTemplateSub, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_0); + +    bgTemplateSub.screenBase = 14; +    bgTemplateSub.charBase = 5; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_1, &bgTemplateSub, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_1); + +    bgTemplateSub.screenBase = 13; +    bgTemplateSub.charBase = 4; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_2, &bgTemplateSub, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_2); + +    bgTemplateSub.screenBase = 12; +    bgTemplateSub.charBase = 3; +    InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_3, &bgTemplateSub, 0); +    BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_3); + +    ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF); +    ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF); +    ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF); +    ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF); + +    ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF); +    ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF); +    ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF); +    ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF); + +    MOD59_021D8058(data); +    data->Unk78 = 0; +} | 
