summaryrefslogtreecommitdiff
path: root/arm9
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-06-12 13:32:50 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-06-12 13:32:50 -0400
commit4b1053c21cf22b9eca6f556139f52414b91f523b (patch)
tree15b33c4b5bb0b4bf2ae3822643222c3e56513088 /arm9
parent643dedac9ca72af14b2d3c74a18022e216e3f7c3 (diff)
Decompile overlay 19
Diffstat (limited to 'arm9')
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/lib/include/gx.h5
-rw-r--r--arm9/modules/19/asm/module_19.s111
-rw-r--r--arm9/modules/19/src/module_19.c47
-rw-r--r--arm9/src/gf_gfx_loader.c42
5 files changed, 74 insertions, 133 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 8dd9759c..6b0a49a7 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -794,7 +794,7 @@ Overlay MODULE_18
Overlay MODULE_19
{
- ##Overworld (models?)##
+ ##Bottom screen before Pokétch##
After MODULE_06
Object module_19.o
}
diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h
index cce14e57..7e6606fa 100644
--- a/arm9/lib/include/gx.h
+++ b/arm9/lib/include/gx.h
@@ -226,4 +226,9 @@ static inline void GXS_SetVisibleWnd(int window)
reg_GXS_DB_DISPCNT = (u32)((reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_W0_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_OW_MASK)) | (window << REG_GXS_DB_DISPCNT_W0_SHIFT));
}
+static inline void GXS_SetOBJVRamModeChar(GXOBJVRamModeChar mode)
+{
+ reg_GXS_DB_DISPCNT = (u32)(reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK) | mode);
+}
+
#endif //GUARD_GX_H
diff --git a/arm9/modules/19/asm/module_19.s b/arm9/modules/19/asm/module_19.s
deleted file mode 100644
index cfdf20fa..00000000
--- a/arm9/modules/19/asm/module_19.s
+++ /dev/null
@@ -1,111 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .section .text
- .balign 4, 0
-
- thumb_func_start MOD19_02252440
-MOD19_02252440: ; 0x02252440
- push {r4, lr}
- sub sp, #0x10
- add r4, r0, #0
- mov r0, #3
- mov r1, #8
- lsl r2, r0, #0xf
- bl CreateHeap
- mov r0, #0
- bl GXS_SetGraphicsMode
- mov r0, #0x80
- bl GX_SetBankForSubBG
- mov r0, #1
- lsl r0, r0, #8
- bl GX_SetBankForSubOBJ
- ldr r2, _022524E0 ; =0x04001000
- ldr r0, _022524E4 ; =0xFFCFFFEF
- ldr r1, [r2]
- mov r3, #0
- and r1, r0
- mov r0, #0x10
- orr r0, r1
- str r0, [r2]
- ldr r2, _022524E8 ; =0x02252508
- add r0, r4, #0
- mov r1, #4
- bl InitBgFromTemplate
- mov r0, #0
- str r0, [sp]
- str r0, [sp, #4]
- mov r0, #1
- str r0, [sp, #8]
- mov r0, #8
- str r0, [sp, #0xc]
- mov r0, #0xc
- mov r1, #0xa
- add r2, r4, #0
- mov r3, #4
- bl GfGfxLoader_LoadCharData
- mov r0, #0
- str r0, [sp]
- str r0, [sp, #4]
- mov r0, #1
- str r0, [sp, #8]
- mov r0, #8
- str r0, [sp, #0xc]
- mov r0, #0xc
- mov r1, #0xb
- add r2, r4, #0
- mov r3, #4
- bl GfGfxLoader_LoadScrnData
- mov r0, #0x20
- str r0, [sp]
- mov r0, #8
- str r0, [sp, #4]
- mov r0, #0xc
- add r1, r0, #0
- mov r2, #4
- mov r3, #0
- bl GfGfxLoader_GXLoadPal
- ldr r2, _022524E0 ; =0x04001000
- ldr r0, _022524EC ; =0xFFFF1FFF
- ldr r1, [r2]
- and r0, r1
- str r0, [r2]
- ldr r1, [r2]
- ldr r0, _022524F0 ; =0xFFFFE0FF
- and r1, r0
- lsr r0, r2, #0x12
- orr r0, r1
- str r0, [r2]
- add sp, #0x10
- pop {r4, pc}
- .align 2, 0
-_022524E0: .word 0x04001000
-_022524E4: .word 0xFFCFFFEF
-_022524E8: .word MOD19_02252508
-_022524EC: .word 0xFFFF1FFF
-_022524F0: .word 0xFFFFE0FF
- thumb_func_end MOD19_02252440
-
- thumb_func_start MOD19_022524F4
-MOD19_022524F4: ; 0x022524F4
- push {r3, lr}
- mov r1, #4
- bl FreeBgTilemapBuffer
- mov r0, #8
- bl DestroyHeap
- pop {r3, pc}
- thumb_func_end MOD19_022524F4
-
- thumb_func_start MOD19_02252504
-MOD19_02252504: ; 0x02252504
- mov r0, #1
- bx lr
- thumb_func_end MOD19_02252504
-
- .rodata
- .global MOD19_02252508
-MOD19_02252508: ; 0x02252508
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .data
- .bss
diff --git a/arm9/modules/19/src/module_19.c b/arm9/modules/19/src/module_19.c
new file mode 100644
index 00000000..1fc6197e
--- /dev/null
+++ b/arm9/modules/19/src/module_19.c
@@ -0,0 +1,47 @@
+#include "global.h"
+#include "heap.h"
+#include "gx.h"
+#include "gf_gfx_loader.h"
+#include "bg_window.h"
+#include "graphic/poketch.naix"
+
+const struct BgTemplate MOD19_02252508 = {
+ .x = 0,
+ .y = 0,
+ .bufferSize = 0x800,
+ .baseTile = 0x000,
+ .size = GF_BG_SCR_SIZE_256x256,
+ .colorMode = GF_BG_CLR_4BPP,
+ .screenBase = 12,
+ .charBase = 0,
+ .priority = 0,
+ .areaOver = 0,
+ .mosaic = 0
+};
+
+THUMB_FUNC void MOD19_02252440(struct BgConfig * bgConfig)
+{
+ CreateHeap(3, 8, 0x18000);
+ GXS_SetGraphicsMode(GX_BGMODE_0);
+ GX_SetBankForSubBG(0x80);
+ GX_SetBankForSubOBJ(0x100);
+ GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K);
+ InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_0, &MOD19_02252508, GF_BG_TYPE_TEXT);
+ GfGfxLoader_LoadCharData(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0010_NCGR_lz, bgConfig, GF_BG_LYR_SUB_0, 0, 0, TRUE, 8);
+ GfGfxLoader_LoadScrnData(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0011_NSCR_lz, bgConfig, GF_BG_LYR_SUB_0, 0, 0, TRUE, 8);
+ GfGfxLoader_GXLoadPal(NARC_GRAPHIC_POKETCH, NARC_poketch_narc_0012_NCLR, GF_BG_LYR_SUB_0, 0x00, 0x20, 8);
+ GXS_SetVisibleWnd(GX_WNDMASK_NONE);
+ GXS_SetVisiblePlane(GX_PLANEMASK_BG0);
+}
+
+THUMB_FUNC void MOD19_022524F4(struct BgConfig * bgConfig)
+{
+ FreeBgTilemapBuffer(bgConfig, GF_BG_LYR_SUB_0);
+ DestroyHeap(8);
+}
+
+THUMB_FUNC BOOL MOD19_02252504(struct BgConfig * bgConfig)
+{
+#pragma unused(bgConfig)
+ return TRUE;
+}
diff --git a/arm9/src/gf_gfx_loader.c b/arm9/src/gf_gfx_loader.c
index 1dc7f50e..0c6d593e 100644
--- a/arm9/src/gf_gfx_loader.c
+++ b/arm9/src/gf_gfx_loader.c
@@ -3,7 +3,7 @@
#include "NNS_g2d.h"
#include "gf_gfx_loader.h"
-THUMB_FUNC u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 a3, u32 a4, u32 szByte, BOOL isCompressed, u32 heap_id)
+THUMB_FUNC u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id)
{
NNSG2dCharacterData * pCharData;
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, FALSE);
@@ -13,14 +13,14 @@ THUMB_FUNC u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgCo
{
if (szByte == 0)
szByte = pCharData->szByte;
- BG_LoadCharTilesData(unkStruct02016B94_2, (u8)a3, pCharData->pRawData, szByte, a4);
+ BG_LoadCharTilesData(unkStruct02016B94_2, (u8)layer, pCharData->pRawData, szByte, numTiles);
}
FreeToHeap(pFile);
}
return szByte;
}
-THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 a3, u32 a4, u32 szByte, BOOL isCompressed, u32 heap_id)
+THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id)
{
NNSG2dScreenData * pScreenData;
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, TRUE);
@@ -30,20 +30,20 @@ THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgC
{
if (szByte == 0)
szByte = pScreenData->szByte;
- if (GetBgTilemapBuffer(unkStruct02016B94_2, (u8) a3) != NULL)
- BG_LoadScreenTilemapData(unkStruct02016B94_2, (u8) a3, pScreenData->rawData, szByte);
- BgCopyOrUncompressTilemapBufferRangeToVram(unkStruct02016B94_2, (u8) a3, pScreenData->rawData, szByte, a4);
+ if (GetBgTilemapBuffer(unkStruct02016B94_2, (u8) layer) != NULL)
+ BG_LoadScreenTilemapData(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte);
+ BgCopyOrUncompressTilemapBufferRangeToVram(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte, tileOffset);
}
FreeToHeap(pFile);
}
}
-THUMB_FUNC void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, u32 whichRoutine, u32 baseAddr, u32 szByte, u32 heap_id)
+THUMB_FUNC void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, u32 layer, u32 baseAddr, u32 szByte, u32 heap_id)
{
- GfGfxLoader_GXLoadPalWithSrcOffset(narcId, memberNo, whichRoutine, 0, baseAddr, szByte, heap_id);
+ GfGfxLoader_GXLoadPalWithSrcOffset(narcId, memberNo, layer, 0, baseAddr, szByte, heap_id);
}
-THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, u32 whichRoutine, u32 srcOffset, u32 baseAddr, u32 szByte, u32 heap_id)
+THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, u32 layer, u32 srcOffset, u32 baseAddr, u32 szByte, u32 heap_id)
{
static void (*const load_funcs[])(void *, u32, u32) = {
GX_LoadBGPltt,
@@ -65,30 +65,30 @@ THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo,
if (szByte == 0)
szByte = pPltData->szByte - srcOffset;
DC_FlushRange(pPltData->pRawData, szByte);
- switch (whichRoutine)
+ switch (layer)
{
case 2:
GX_BeginLoadBGExtPltt();
- load_funcs[whichRoutine](pPltData->pRawData, baseAddr, szByte);
+ load_funcs[layer](pPltData->pRawData, baseAddr, szByte);
GX_EndLoadBGExtPltt();
break;
case 6:
GXS_BeginLoadBGExtPltt();
- load_funcs[whichRoutine](pPltData->pRawData, baseAddr, szByte);
+ load_funcs[layer](pPltData->pRawData, baseAddr, szByte);
GXS_EndLoadBGExtPltt();
break;
case 3:
GX_BeginLoadOBJExtPltt();
- load_funcs[whichRoutine](pPltData->pRawData, baseAddr, szByte);
+ load_funcs[layer](pPltData->pRawData, baseAddr, szByte);
GX_EndLoadOBJExtPltt();
break;
case 7:
GXS_BeginLoadOBJExtPltt();
- load_funcs[whichRoutine](pPltData->pRawData, baseAddr, szByte);
+ load_funcs[layer](pPltData->pRawData, baseAddr, szByte);
GXS_EndLoadOBJExtPltt();
break;
default:
- load_funcs[whichRoutine](pPltData->pRawData, baseAddr, szByte);
+ load_funcs[layer](pPltData->pRawData, baseAddr, szByte);
break;
}
}
@@ -96,7 +96,7 @@ THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo,
}
}
-THUMB_FUNC u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 whichRoutine, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id)
+THUMB_FUNC u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id)
{
static void (*const load_funcs[])(void *, u32, u32) = {
GX_LoadOBJ,
@@ -112,7 +112,7 @@ THUMB_FUNC u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 whi
if (szByte == 0)
szByte = pCharData->szByte;
DC_FlushRange(pCharData->pRawData, szByte);
- load_funcs[whichRoutine](pCharData->pRawData, baseAddr, szByte);
+ load_funcs[layer](pCharData->pRawData, baseAddr, szByte);
}
FreeToHeap(pFile);
}
@@ -142,7 +142,7 @@ THUMB_FUNC void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NN
}
}
-THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 whichRoutine, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy)
+THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy)
{
static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = {
NNS_G2dLoadImage1DMapping,
@@ -158,7 +158,7 @@ THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL is
{
if (szByte != 0)
pSrcData->szByte = szByte;
- load_funcs[whichRoutine](pSrcData, baseAddr, type, pImgProxy);
+ load_funcs[layer](pSrcData, baseAddr, type, pImgProxy);
retSize = pSrcData->szByte;
}
FreeToHeap(pFile);
@@ -166,7 +166,7 @@ THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL is
return retSize;
}
-THUMB_FUNC void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 whichRoutine, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy)
+THUMB_FUNC void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy)
{
static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = {
NNS_G2dLoadImage1DMapping,
@@ -191,7 +191,7 @@ THUMB_FUNC void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32
default:
;
}
- load_funcs[whichRoutine](pCharacterData, baseAddr, type, pImageProxy);
+ load_funcs[layer](pCharacterData, baseAddr, type, pImageProxy);
}
FreeToHeap(pFile);
}