diff options
author | red031000 <rubenru09@aol.com> | 2021-07-23 01:11:15 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2021-07-23 01:12:27 +0100 |
commit | 5bf13c7f48fe91c7902ce50250bc1a5a2398a2ae (patch) | |
tree | 2e91e60bdb7a9174b16d8ca1b532809d4ae2e5b6 /arm9/lib/NitroSDK/src/GX_vramcnt.c | |
parent | c2d91a2d997afd01fa4f40e1e16d5ee85557c9a8 (diff) |
separate out libs to libc, libnns and NitroSDK
Diffstat (limited to 'arm9/lib/NitroSDK/src/GX_vramcnt.c')
-rw-r--r-- | arm9/lib/NitroSDK/src/GX_vramcnt.c | 578 |
1 files changed, 578 insertions, 0 deletions
diff --git a/arm9/lib/NitroSDK/src/GX_vramcnt.c b/arm9/lib/NitroSDK/src/GX_vramcnt.c new file mode 100644 index 00000000..abfcd77e --- /dev/null +++ b/arm9/lib/NitroSDK/src/GX_vramcnt.c @@ -0,0 +1,578 @@ +#include "global.h" +#include "gx.h" + +extern u16 GXi_VRamLockId; +extern struct GX_State gGXState; + +ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ + if (mask & (0x1 << 0)) + reg_GX_VRAMCNT_A = 0x80; + if (mask & (0x1 << 1)) + reg_GX_VRAMCNT_B = 0x80; + if (mask & (0x1 << 2)) + reg_GX_VRAMCNT_C = 0x80; + if (mask & (0x1 << 3)) + reg_GX_VRAMCNT_D = 0x80; + if (mask & (0x1 << 4)) + reg_GX_VRAMCNT_E = 0x80; + if (mask & (0x1 << 5)) + reg_GX_VRAMCNT_F = 0x80; + if (mask & (0x1 << 6)) + reg_GX_VRAMCNT_G = 0x80; + if (mask & (0x1 << 7)) + reg_GX_VRAMCNT_H = 0x80; + if (mask & (0x1 << 8)) + reg_GX_VRAMCNT_I = 0x80; +} + +ARM_FUNC void GX_SetBankForBG(s32 bg){ + gGXState.lcdc = (u16)(~bg & (gGXState.lcdc | gGXState.bg)); + gGXState.bg = (u16)bg; + switch (bg) + { + case 8: + reg_GX_VRAMCNT_D = 0x81; + break; + case 12: + reg_GX_VRAMCNT_D = 0x89; + case 4: + reg_GX_VRAMCNT_C = 0x81; + break; + case 14: + reg_GX_VRAMCNT_D = 0x91; + case 6: + reg_GX_VRAMCNT_C = 0x89; + case 2: + reg_GX_VRAMCNT_B = 0x81; + break; + case 15: + reg_GX_VRAMCNT_D = 0x99; + case 7: + reg_GX_VRAMCNT_C = 0x91; + case 3: + reg_GX_VRAMCNT_B = 0x89; + case 1: + reg_GX_VRAMCNT_A = 0x81; + break; + case 11: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_B = 0x89; + reg_GX_VRAMCNT_D = 0x91; + break; + case 13: + reg_GX_VRAMCNT_D = 0x91; + case 5: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_C = 0x89; + break; + case 9: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_D = 0x89; + break; + case 10: + reg_GX_VRAMCNT_B = 0x81; + reg_GX_VRAMCNT_D = 0x89; + break; + case 112: + reg_GX_VRAMCNT_G = 0x99; + case 48: + reg_GX_VRAMCNT_F = 0x91; + case 16: + reg_GX_VRAMCNT_E = 0x81; + break; + case 80: + reg_GX_VRAMCNT_G = 0x91; + reg_GX_VRAMCNT_E = 0x81; + break; + case 96: + reg_GX_VRAMCNT_G = 0x89; + case 32: + reg_GX_VRAMCNT_F = 0x81; + break; + case 64: + reg_GX_VRAMCNT_G = 0x81; + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForOBJ(s32 obj){ + gGXState.lcdc = (u16)(~obj & (gGXState.lcdc | gGXState.obj)); + gGXState.obj = (u16)obj; + switch (obj) + { + case 3: + reg_GX_VRAMCNT_B = 0x8A; + case 1: + reg_GX_VRAMCNT_A = 0x82; + case 0: //needed to match + break; + case 2: + reg_GX_VRAMCNT_B = 0x82; + break; + case 112: + reg_GX_VRAMCNT_G = 0x9A; + case 48: + reg_GX_VRAMCNT_F = 0x92; + case 16: + reg_GX_VRAMCNT_E = 0x82; + break; + case 80: + reg_GX_VRAMCNT_G = 0x92; + reg_GX_VRAMCNT_E = 0x82; + break; + case 96: + reg_GX_VRAMCNT_G = 0x8A; + case 32: + reg_GX_VRAMCNT_F = 0x82; + break; + case 64: + reg_GX_VRAMCNT_G = 0x82; + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ + gGXState.lcdc = (u16)(~bgextpltt & (gGXState.lcdc | gGXState.bgExtPltt)); + gGXState.bgExtPltt = (u16)bgextpltt; + switch (bgextpltt) + { + case 0x10: + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_E = 0x84; + break; + case 0x40: + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_G = 0x8C; + break; + case 0x60: + reg_GX_VRAMCNT_G = 0x8C; + case 0x20: + reg_GX_VRAMCNT_F = 0x84; + reg_GX_DISPCNT |= 0x40000000; + break; + case 0: + reg_GX_DISPCNT &= ~0x40000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ + gGXState.lcdc = (u16)(~objextpltt & (gGXState.lcdc | gGXState.objExtPltt)); + gGXState.objExtPltt = (u16)objextpltt; + switch (objextpltt) + { + case 32: + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_F = 0x85; + break; + case 64: + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_G = 0x85; + break; + case 0: + reg_GX_DISPCNT &= ~0x80000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForTex(s32 tex){ + gGXState.lcdc = (u16)(~tex & (gGXState.lcdc | gGXState.tex)); + gGXState.tex = (u16)tex; + if (tex == 0) + { + reg_G3X_DISP3DCNT &= 0x0000CFFE; + } + else + { + reg_G3X_DISP3DCNT = (u16)((reg_G3X_DISP3DCNT & ~0x3000) | 0x1); + switch (tex) + { + case 5: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + break; + case 9: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_D = 0x8B; + break; + case 10: + reg_GX_VRAMCNT_B = 0x83; + reg_GX_VRAMCNT_D = 0x8B; + break; + case 11: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_B = 0x8B; + reg_GX_VRAMCNT_D = 0x93; + break; + case 13: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + reg_GX_VRAMCNT_D = 0x93; + break; + case 8: + reg_GX_VRAMCNT_D = 0x83; + break; + case 12: + reg_GX_VRAMCNT_D = 0x8B; + case 4: + reg_GX_VRAMCNT_C = 0x83; + break; + case 14: + reg_GX_VRAMCNT_D = 0x93; + case 6: + reg_GX_VRAMCNT_C = 0x8B; + case 2: + reg_GX_VRAMCNT_B = 0x83; + break; + case 15: + reg_GX_VRAMCNT_D = 0x9B; + case 7: + reg_GX_VRAMCNT_C = 0x93; + case 3: + reg_GX_VRAMCNT_B = 0x8B; + case 1: + reg_GX_VRAMCNT_A = 0x83; + break; + } + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ + gGXState.lcdc = (u16)(~texpltt & (gGXState.lcdc | gGXState.texPltt)); + gGXState.texPltt = (u16)texpltt; + switch (texpltt) + { + case 0: //needed to match + break; + case 96: + reg_GX_VRAMCNT_G = 0x8B; + case 32: + reg_GX_VRAMCNT_F = 0x83; + break; + case 112: + reg_GX_VRAMCNT_G = 0x9B; + case 48: + reg_GX_VRAMCNT_F = 0x93; + case 16: + reg_GX_VRAMCNT_E = 0x83; + break; + case 64: + reg_GX_VRAMCNT_G = 0x83; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ + gGXState.lcdc = (u16)(~clearimage & (gGXState.lcdc | gGXState.clrImg)); + gGXState.clrImg = (u16)clearimage; + switch (clearimage) + { + case 3: + reg_GX_VRAMCNT_A = 0x93; + case 2: + reg_GX_VRAMCNT_B = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 12: + reg_GX_VRAMCNT_C = 0x93; + case 8: + reg_GX_VRAMCNT_D = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 0: + reg_G3X_DISP3DCNT &= ~0x4000; + break; + case 1: + reg_GX_VRAMCNT_A = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 4: + reg_GX_VRAMCNT_C = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForARM7(s32 arm7){ + gGXState.lcdc = (u16)(~arm7 & (gGXState.lcdc | gGXState.arm7)); + gGXState.arm7 = (u16)arm7; + switch (arm7) + { + case 0: //needed to match + break; + case 12: + reg_GX_VRAMCNT_D = 0x8A; + reg_GX_VRAMCNT_C = 0x82; + break; + case 4: + reg_GX_VRAMCNT_C = 0x82; + break; + case 8: + reg_GX_VRAMCNT_D = 0x82; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ + gGXState.lcdc |= lcdc; + GX_VRAMCNT_SetLCDC_((u32)lcdc); +} + +ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ + gGXState.lcdc = (u16)(~subbg & (gGXState.lcdc | gGXState.sub_bg)); + gGXState.sub_bg = (u16)subbg; + switch (subbg) + { + case 0: //needed to match + break; + case 4: + reg_GX_VRAMCNT_C = 0x84; + break; + case 384: + reg_GX_VRAMCNT_I = 0x81; + case 128: + reg_GX_VRAMCNT_H = 0x81; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + + +ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ + gGXState.lcdc = (u16)(~subobj & (gGXState.lcdc | gGXState.sub_obj)); + gGXState.sub_obj = (u16)subobj; + switch (subobj) + { + case 8: + reg_GX_VRAMCNT_D = 0x84; + break; + case 256: + reg_GX_VRAMCNT_I = 0x82; + break; + case 0: //needed to match + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ + gGXState.lcdc = (u16)(~subbgextpltt & (gGXState.lcdc | gGXState.sub_bgExtPltt)); + gGXState.sub_bgExtPltt = (u16)subbgextpltt; + switch (subbgextpltt) + { + case 128: + reg_GXS_DB_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_H = 0x82; + break; + case 0: + reg_GXS_DB_DISPCNT &= ~0x40000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ + gGXState.lcdc = (u16)(~subobjextpltt & (gGXState.lcdc | gGXState.sub_objExtPltt)); + gGXState.sub_objExtPltt = (u16)subobjextpltt; + switch (subobjextpltt) + { + case 256: + reg_GXS_DB_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_I = 0x83; + break; + case 0: + reg_GXS_DB_DISPCNT &= ~0x80000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC u32 resetBankForX_(u16 *ptr){ + u16 temp = *ptr; + *ptr = 0; + gGXState.lcdc |= temp; + GX_VRAMCNT_SetLCDC_(temp); + return temp; +} + +ARM_FUNC u32 GX_ResetBankForBG(){ + return resetBankForX_(&gGXState.bg); +} + +ARM_FUNC u32 GX_ResetBankForOBJ(){ + return resetBankForX_(&gGXState.obj); +} + +ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ + reg_GX_DISPCNT &= ~0x40000000; + return resetBankForX_(&gGXState.bgExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ + reg_GX_DISPCNT &= ~0x80000000; + return resetBankForX_(&gGXState.objExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForTex(){ + return resetBankForX_(&gGXState.tex); +} + +ARM_FUNC u32 GX_ResetBankForTexPltt(){ + return resetBankForX_(&gGXState.texPltt); +} + +ARM_FUNC u32 GX_ResetBankForClearImage(){ + return resetBankForX_(&gGXState.clrImg); +} + +ARM_FUNC u32 GX_ResetBankForSubBG(){ + return resetBankForX_(&gGXState.sub_bg); +} + +ARM_FUNC u32 GX_ResetBankForSubOBJ(){ + return resetBankForX_(&gGXState.sub_obj); +} + +ARM_FUNC u32 GX_ResetBankForSubBGExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GXS_DB_DISPCNT_BG_MASK; + return resetBankForX_(&gGXState.sub_bgExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForSubOBJExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GXS_DB_DISPCNT_O_MASK; + return resetBankForX_(&gGXState.sub_objExtPltt); +} + +ARM_FUNC u32 disableBankForX_(u16 *ptr){ + u32 temp = *ptr; + *ptr = 0; + if (temp & (0x1 << 0)) + reg_GX_VRAMCNT_A = 0x0; + if (temp & (0x1 << 1)) + reg_GX_VRAMCNT_B = 0x0; + if (temp & (0x1 << 2)) + reg_GX_VRAMCNT_C = 0x0; + if (temp & (0x1 << 3)) + reg_GX_VRAMCNT_D = 0x0; + if (temp & (0x1 << 4)) + reg_GX_VRAMCNT_E = 0x0; + if (temp & (0x1 << 5)) + reg_GX_VRAMCNT_F = 0x0; + if (temp & (0x1 << 6)) + reg_GX_VRAMCNT_G = 0x0; + if (temp & (0x1 << 7)) + reg_GX_VRAMCNT_H = 0x0; + if (temp & (0x1 << 8)) + reg_GX_VRAMCNT_I = 0x0; + OSi_UnlockVram((u16)temp, GXi_VRamLockId); + return temp; +} + +ARM_FUNC u32 GX_DisableBankForBG(){ + return disableBankForX_(&gGXState.bg); +} + +ARM_FUNC u32 GX_DisableBankForOBJ(){ + return disableBankForX_(&gGXState.obj); +} + +ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_BG_MASK; + return disableBankForX_(&gGXState.bgExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_O_MASK; + return disableBankForX_(&gGXState.objExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForTex(){ + return disableBankForX_(&gGXState.tex); +} + +ARM_FUNC u32 GX_DisableBankForTexPltt(){ + return disableBankForX_(&gGXState.texPltt); +} + +ARM_FUNC u32 GX_DisableBankForClearImage(){ + return disableBankForX_(&gGXState.clrImg); +} + +ARM_FUNC u32 GX_DisableBankForARM7(){ + return disableBankForX_(&gGXState.arm7); +} + +ARM_FUNC u32 GX_DisableBankForLCDC(){ + return disableBankForX_(&gGXState.lcdc); +} + +ARM_FUNC u32 GX_DisableBankForSubBG(){ + return disableBankForX_(&gGXState.sub_bg); +} + +ARM_FUNC u32 GX_DisableBankForSubOBJ(){ + return disableBankForX_(&gGXState.sub_obj); +} + +ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_BG_MASK; + return disableBankForX_(&gGXState.sub_bgExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_O_MASK; + return disableBankForX_(&gGXState.sub_objExtPltt); +} + +ARM_FUNC u32 GX_GetBankForBG(){ + return gGXState.bg; +} + +ARM_FUNC u32 GX_GetBankForOBJ(){ + return gGXState.obj; +} + +ARM_FUNC u32 GX_GetBankForBGExtPltt(){ + return gGXState.bgExtPltt; +} + +ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ + return gGXState.objExtPltt; +} + +ARM_FUNC u32 GX_GetBankForTex(){ + return gGXState.tex; +} + +ARM_FUNC u32 GX_GetBankForTexPltt(){ + return gGXState.texPltt; +} + +ARM_FUNC u32 GX_GetBankForLCDC(){ + return gGXState.lcdc; +} + +ARM_FUNC u32 GX_GetBankForSubBG(){ + return gGXState.sub_bg; +} + +ARM_FUNC u32 GX_GetBankForSubOBJ(){ + return gGXState.sub_obj; +} + +ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ + return gGXState.sub_bgExtPltt; +} + +ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ + return gGXState.sub_objExtPltt; +} |