diff options
Diffstat (limited to 'arm9/lib/src/GX.c')
-rw-r--r-- | arm9/lib/src/GX.c | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c new file mode 100644 index 00000000..28c3cc01 --- /dev/null +++ b/arm9/lib/src/GX.c @@ -0,0 +1,121 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern u16 GXi_VRamLockId; +extern u16 sDispMode; +extern u32 GXi_DmaId; +extern u16 sIsDispOn; + +ARM_FUNC void GX_Init(){ + reg_GX_POWCNT |= 0x8000; + reg_GX_POWCNT = (reg_GX_POWCNT & ~0x20E) | 0x20E; + reg_GX_POWCNT = reg_GX_POWCNT | 0x1; + GX_InitGXState(); + u32 temp; + while (GXi_VRamLockId == 0) + { + temp = OS_GetLockID(); + if (temp == -3) + { + OS_Terminate(); + } + GXi_VRamLockId = temp; + } + reg_GX_DISPSTAT = 0x0; + reg_GX_DISPCNT = 0x0; + if (GXi_DmaId != -1) + { + MI_DmaFill32(GXi_DmaId, (void *)®_G2_BG0CNT, 0x0, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MI_DmaFill32(GXi_DmaId, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); + } + else + { + MIi_CpuClear32(0x0, (void *)®_G2_BG0CNT, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MIi_CpuClear32(0x0, (void *)®_GXS_DB_DISPCNT, 0x70); + } + reg_G2_BG2PA = 0x100; + reg_G2_BG2PD = 0x100; + reg_G2_BG3PA = 0x100; + reg_G2_BG3PD = 0x100; + reg_G2S_DB_BG2PA = 0x100; + reg_G2S_DB_BG2PD = 0x100; + reg_G2S_DB_BG3PA = 0x100; + reg_G2S_DB_BG3PD = 0x100; +} + +ARM_FUNC u32 GX_HBlankIntr(u32 enable){ + u32 temp = reg_GX_DISPSTAT & 0x10; + if (enable) + { + reg_GX_DISPSTAT |= 0x10; + } + else + { + reg_GX_DISPSTAT &= ~0x10; + } + return temp; +} + +ARM_FUNC u32 GX_VBlankIntr(u32 enable){ + u32 temp = reg_GX_DISPSTAT & 0x8; + if (enable) + { + reg_GX_DISPSTAT |= 0x8; + } + else + { + reg_GX_DISPSTAT &= ~0x8; + } + return temp; +} + +ARM_FUNC void GX_DispOff(){ + u32 temp = reg_GX_DISPCNT; + sIsDispOn = 0x0; + sDispMode = (temp & 0x30000) >> 0x10; + reg_GX_DISPCNT = temp & ~0x30000; +} + +ARM_FUNC void GX_DispOn(){ + sIsDispOn = 0x1; + if (sDispMode) + { + reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (sDispMode << 0x10); + } + else + { + reg_GX_DISPCNT = reg_GX_DISPCNT | 0x10000; + } +} + +ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ + u32 temp2 = reg_GX_DISPCNT; + sDispMode = mode1; + if (!sIsDispOn) + mode1 = 0; + reg_GX_DISPCNT = (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3); + if (!sDispMode) + sIsDispOn = 0x0; +} + +ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ + reg_GXS_DB_DISPCNT = reg_GXS_DB_DISPCNT & ~0x7 | mode; +} + +ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ + if (!brightness) + { + *dst = 0x0; + } + else if (brightness > 0) + { + *dst = 0x4000 | brightness; + } + else + { + *dst = 0x8000 | -brightness; + } +} |