diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-20 14:59:56 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-20 14:59:56 -0400 |
commit | d1d3fce4b6be10ed7186a6c36bc27fe575b593db (patch) | |
tree | 4f31107f4446b69106acb0673a383dfdaf88473e /arm9/lib/src/GX_load2d.c | |
parent | 6103ab0ca0962682095e58779079cb4c8c054b14 (diff) | |
parent | de389305733545e2b6fac6c8dcb33d76a7446481 (diff) |
Merge branch 'master' of github.com:martmists/pokediamond into pikalax_work
Diffstat (limited to 'arm9/lib/src/GX_load2d.c')
-rw-r--r-- | arm9/lib/src/GX_load2d.c | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c new file mode 100644 index 00000000..d4def461 --- /dev/null +++ b/arm9/lib/src/GX_load2d.c @@ -0,0 +1,223 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern u32 GXi_DmaId; + +extern s32 sSubOBJExtPltt; +extern s32 sBGExtPltt; +extern u32 sBGExtPlttLCDCBlk; +extern u32 sBGExtPlttLCDCOffset; +extern s32 sOBJExtPltt; +extern u32 sOBJExtPlttLCDCBlk; +extern s32 sSubBGExtPltt; + + +static inline void *_GX_OBJ_PTR(){ + return (void *)0x6400000; +} +static inline void *_GXS_OBJ_PTR(){ + return (void *)0x6600000; +} + +ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000000 + offset), size); +} + +ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000400 + offset), size); +} + +ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000200 + offset), size); +} + +ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000600 + offset), size); +} + +ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ + GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000000 + offset), size); +} + +ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ + GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000400 + offset), size); +} + +ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GX_OBJ_PTR(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GXS_OBJ_PTR(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3ScrPtr(); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3CharPtr(); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_BeginLoadBGExtPltt(){ + sBGExtPltt = GX_ResetBankForBGExtPltt(); + switch (sBGExtPltt) + { + case 0: //needed to match + break; + case 0x10: + sBGExtPlttLCDCBlk = 0x06880000; + sBGExtPlttLCDCOffset = 0x0; + break; + case 0x40: + sBGExtPlttLCDCBlk = 0x06894000; + sBGExtPlttLCDCOffset = 0x4000; + break; + case 0x20: + case 0x60: + sBGExtPlttLCDCBlk = 0x06890000; + sBGExtPlttLCDCOffset = 0x0; + break; + } +} + +ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sBGExtPlttLCDCBlk + offset - sBGExtPlttLCDCOffset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadBGExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForBGExtPltt(sBGExtPltt); + sBGExtPltt = 0x0; + sBGExtPlttLCDCBlk = 0x0; + sBGExtPlttLCDCOffset = 0x0; +} + +ARM_FUNC void GX_BeginLoadOBJExtPltt(){ + sOBJExtPltt = GX_ResetBankForOBJExtPltt(); + switch (sOBJExtPltt) + { + case 0: //needed to match + break; + case 0x40: + sOBJExtPlttLCDCBlk = 0x06894000; + break; + case 0x20: + sOBJExtPlttLCDCBlk = 0x06890000; + break; + } +} + +ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sOBJExtPlttLCDCBlk + offset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadOBJExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForOBJExtPltt(sOBJExtPltt); + sOBJExtPltt = 0x0; + sOBJExtPlttLCDCBlk = 0x0; +} + +ARM_FUNC void GXS_BeginLoadBGExtPltt(){ + sSubBGExtPltt = FUN_020C6034(); +} + +ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x06898000 + offset), size, NULL, NULL); +} + +ARM_FUNC void GXS_EndLoadBGExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForSubBGExtPltt(sSubBGExtPltt); + sSubBGExtPltt = 0x0; +} + +ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ + sSubOBJExtPltt = GX_ResetBankForSubOBJ(); +} + +ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x068A0000 + offset), size, NULL, NULL); +} + +ARM_FUNC void GXS_EndLoadOBJExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForSubOBJExtPltt(sSubOBJExtPltt); + sSubOBJExtPltt = 0x0; +} |