diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-05-31 12:14:52 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-05-31 12:14:52 -0400 |
commit | d612c41066844fc82edaaea6bc946adbcc71a3d9 (patch) | |
tree | f2888ecbde6de01f1190d90a92f6cc7aa47ff049 | |
parent | 0b4d803fd24881aafc9626c843ae8bb49b9c6535 (diff) |
Better docs of gx, error_message_reset, etc
-rw-r--r-- | arm9/lib/include/GX_ioreg.h | 67 | ||||
-rw-r--r-- | arm9/lib/include/OS_irqHandler.h | 2 | ||||
-rw-r--r-- | arm9/lib/include/gx.h | 23 | ||||
-rw-r--r-- | arm9/lib/src/GX.c | 53 | ||||
-rw-r--r-- | arm9/src/error_message_reset.c | 37 | ||||
-rw-r--r-- | arm9/src/game_init.c | 6 | ||||
-rw-r--r-- | arm9/src/unk_02016B94.c | 14 | ||||
-rw-r--r-- | include/GX_layers.h | 9 | ||||
-rw-r--r-- | include/game_init.h | 2 | ||||
-rw-r--r-- | include/unk_02016B94.h | 2 |
10 files changed, 145 insertions, 70 deletions
diff --git a/arm9/lib/include/GX_ioreg.h b/arm9/lib/include/GX_ioreg.h index 81055b0a..bfdc370a 100644 --- a/arm9/lib/include/GX_ioreg.h +++ b/arm9/lib/include/GX_ioreg.h @@ -81,4 +81,71 @@ #define REG_GX_DISPCNT_EXOBJ_BM_SIZE 1
#define REG_GX_DISPCNT_EXOBJ_BM_MASK 0x00400000
+// DISPSTAT
+#define REG_GX_DISPSTAT_VCOUNTER_SHIFT 7
+#define REG_GX_DISPSTAT_VCOUNTER_SIZE 9
+#define REG_GX_DISPSTAT_VCOUNTER_MASK 0xff80
+
+#define REG_GX_DISPSTAT_VQI_SHIFT 5
+#define REG_GX_DISPSTAT_VQI_SIZE 1
+#define REG_GX_DISPSTAT_VQI_MASK 0x0020
+
+#define REG_GX_DISPSTAT_HBI_SHIFT 4
+#define REG_GX_DISPSTAT_HBI_SIZE 1
+#define REG_GX_DISPSTAT_HBI_MASK 0x0010
+
+#define REG_GX_DISPSTAT_VBI_SHIFT 3
+#define REG_GX_DISPSTAT_VBI_SIZE 1
+#define REG_GX_DISPSTAT_VBI_MASK 0x0008
+
+#define REG_GX_DISPSTAT_LYC_SHIFT 2
+#define REG_GX_DISPSTAT_LYC_SIZE 1
+#define REG_GX_DISPSTAT_LYC_MASK 0x0004
+
+#define REG_GX_DISPSTAT_HBLK_SHIFT 1
+#define REG_GX_DISPSTAT_HBLK_SIZE 1
+#define REG_GX_DISPSTAT_HBLK_MASK 0x0002
+
+#define REG_GX_DISPSTAT_VBLK_SHIFT 0
+#define REG_GX_DISPSTAT_VBLK_SIZE 1
+#define REG_GX_DISPSTAT_VBLK_MASK 0x0001
+
+// POWCNT
+#define REG_GX_POWCNT_GE_SHIFT 3
+#define REG_GX_POWCNT_GE_SIZE 1
+#define REG_GX_POWCNT_GE_MASK 0x0008
+
+#define REG_GX_POWCNT_RE_SHIFT 2
+#define REG_GX_POWCNT_RE_SIZE 1
+#define REG_GX_POWCNT_RE_MASK 0x0004
+
+#define REG_GX_POWCNT_E2DG_SHIFT 1
+#define REG_GX_POWCNT_E2DG_SIZE 1
+#define REG_GX_POWCNT_E2DG_MASK 0x0002
+
+#define REG_GX_POWCNT_LCD_SHIFT 0
+#define REG_GX_POWCNT_LCD_SIZE 1
+#define REG_GX_POWCNT_LCD_MASK 0x0001
+
+#define REG_GX_POWCNT_LCDB_SHIFT 8
+#define REG_GX_POWCNT_LCDB_SIZE 1
+#define REG_GX_POWCNT_LCDB_MASK 0x0100
+
+#define REG_GX_POWCNT_E2DGB_SHIFT 9
+#define REG_GX_POWCNT_E2DGB_SIZE 1
+#define REG_GX_POWCNT_E2DGB_MASK 0x0200
+
+#define REG_GX_POWCNT_DSEL_SHIFT 15
+#define REG_GX_POWCNT_DSEL_SIZE 1
+#define REG_GX_POWCNT_DSEL_MASK 0x8000
+
+// MASTER BRIGHT
+#define REG_GX_MASTER_BRIGHT_E_MOD_SHIFT 14
+#define REG_GX_MASTER_BRIGHT_E_MOD_SIZE 2
+#define REG_GX_MASTER_BRIGHT_E_MOD_MASK 0xc000
+
+#define REG_GX_MASTER_BRIGHT_E_VALUE_SHIFT 0
+#define REG_GX_MASTER_BRIGHT_E_VALUE_SIZE 5
+#define REG_GX_MASTER_BRIGHT_E_VALUE_MASK 0x001f
+
#endif //NITRO_GX_IOREG_H
diff --git a/arm9/lib/include/OS_irqHandler.h b/arm9/lib/include/OS_irqHandler.h index f052016d..ea12a0ad 100644 --- a/arm9/lib/include/OS_irqHandler.h +++ b/arm9/lib/include/OS_irqHandler.h @@ -16,6 +16,6 @@ static inline OSIrqMask OS_GetIrqCheckFlag(void) void OS_IrqHandler(void); void OS_IrqHandler_ThreadSwitch(void); -void OS_WaitIrq(BOOL param1, u32 param2); +void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags); #endif //POKEDIAMOND_OS_IRQHANDLER_H diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 210d61f4..d73b4f53 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -27,15 +27,6 @@ void GXi_NopClearFifo128_(void *); #include "GX_g3imm.h" #include "GX_dma.h" -void GX_Init(); -u32 GX_HBlankIntr(u32 enable); -u32 GX_VBlankIntr(u32 enable); -void GX_DispOff(); -void GX_DispOn(); -void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); -void GXS_SetGraphicsMode(u32 mode); -void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); - typedef union { u32 raw; @@ -181,4 +172,18 @@ typedef enum } GXOBJVRamModeChar; +void GX_Init(); +u32 GX_HBlankIntr(u32 enable); +u32 GX_VBlankIntr(u32 enable); +void GX_DispOff(); +void GX_DispOn(); +void GX_SetGraphicsMode(GXDispMode dispMode, GXBGMode bgMode, GXBG0As bg0_2d3d); +void GXS_SetGraphicsMode(GXBGMode mode); +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); + +static inline void GX_SetMasterBrightness(int brightness) +{ + GXx_SetMasterBrightness_(®_GX_MASTER_BRIGHT, brightness); +} + #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 69ad8718..57233492 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -1,5 +1,6 @@ #include "global.h" #include "gx.h" +#include "GXS_ioreg.h" u32 GXi_DmaId = 3; vu16 GXi_VRamLockId = 0; @@ -7,16 +8,18 @@ vu16 GXi_VRamLockId = 0; static u16 sDispMode = 0; static u16 sIsDispOn = TRUE; +#define _powcnt_init_mask (REG_GX_POWCNT_E2DGB_MASK | REG_GX_POWCNT_E2DG_MASK | REG_GX_POWCNT_RE_MASK | REG_GX_POWCNT_GE_MASK) + ARM_FUNC void GX_Init(){ - reg_GX_POWCNT |= 0x8000; - reg_GX_POWCNT = (u16)((reg_GX_POWCNT & ~0x20E) | 0x20E); - reg_GX_POWCNT = (u16)(reg_GX_POWCNT | 0x1); + reg_GX_POWCNT |= REG_GX_POWCNT_DSEL_MASK; + reg_GX_POWCNT = (u16)((reg_GX_POWCNT & ~_powcnt_init_mask) | _powcnt_init_mask); + reg_GX_POWCNT = (u16)(reg_GX_POWCNT | REG_GX_POWCNT_LCD_MASK); GX_InitGXState(); s32 temp; while (GXi_VRamLockId == 0) { temp = OS_GetLockID(); - if (temp == -3) + if (temp == OS_LOCK_ID_ERROR) { OS_Terminate(); } @@ -47,62 +50,62 @@ ARM_FUNC void GX_Init(){ } ARM_FUNC u32 GX_HBlankIntr(u32 enable){ - u32 temp = (u32)(reg_GX_DISPSTAT & 0x10); + u32 temp = (u32)(reg_GX_DISPSTAT & REG_GX_DISPSTAT_HBI_MASK); if (enable) { - reg_GX_DISPSTAT |= 0x10; + reg_GX_DISPSTAT |= REG_GX_DISPSTAT_HBI_MASK; } else { - reg_GX_DISPSTAT &= ~0x10; + reg_GX_DISPSTAT &= ~REG_GX_DISPSTAT_HBI_MASK; } return temp; } ARM_FUNC u32 GX_VBlankIntr(u32 enable){ - u32 temp = (u32)(reg_GX_DISPSTAT & 0x8); + u32 temp = (u32)(reg_GX_DISPSTAT & REG_GX_DISPSTAT_VBI_MASK); if (enable) { - reg_GX_DISPSTAT |= 0x8; + reg_GX_DISPSTAT |= REG_GX_DISPSTAT_VBI_MASK; } else { - reg_GX_DISPSTAT &= ~0x8; + reg_GX_DISPSTAT &= ~REG_GX_DISPSTAT_VBI_MASK; } return temp; } ARM_FUNC void GX_DispOff(){ u32 temp = reg_GX_DISPCNT; - sIsDispOn = 0x0; - sDispMode = (u16)((temp & 0x30000) >> 0x10); - reg_GX_DISPCNT = temp & ~0x30000; + sIsDispOn = FALSE; + sDispMode = (u16)((temp & REG_GX_DISPCNT_MODE_MASK) >> REG_GX_DISPCNT_MODE_SHIFT); + reg_GX_DISPCNT = temp & ~REG_GX_DISPCNT_MODE_MASK; } ARM_FUNC void GX_DispOn(){ - sIsDispOn = 0x1; + sIsDispOn = TRUE; if (sDispMode) { - reg_GX_DISPCNT = (reg_GX_DISPCNT & ~0x30000) | (sDispMode << 0x10); + reg_GX_DISPCNT = (reg_GX_DISPCNT & ~REG_GX_DISPCNT_MODE_MASK) | (sDispMode << REG_GX_DISPCNT_MODE_SHIFT); } else { - reg_GX_DISPCNT = reg_GX_DISPCNT | 0x10000; + reg_GX_DISPCNT = reg_GX_DISPCNT | (GX_DISPMODE_GRAPHICS << REG_GX_DISPCNT_MODE_SHIFT); } } -ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ +ARM_FUNC void GX_SetGraphicsMode(GXDispMode dispMode, GXBGMode bgMode, GXBG0As bg0_2d3d){ u32 temp2 = reg_GX_DISPCNT; - sDispMode = (u16)mode1; + sDispMode = (u16)dispMode; if (!sIsDispOn) - mode1 = 0; - reg_GX_DISPCNT = (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3); + dispMode = 0; + reg_GX_DISPCNT = ((bgMode << REG_GX_DISPCNT_BGMODE_SHIFT) | ((temp2 & ~(REG_GX_DISPCNT_BGMODE_MASK | REG_GX_DISPCNT_MODE_MASK | REG_GX_DISPCNT_BG02D3D_MASK | REG_GX_DISPCNT_VRAM_MASK)) | (dispMode << REG_GX_DISPCNT_MODE_SHIFT))) | (bg0_2d3d << REG_GX_DISPCNT_BG02D3D_SHIFT); if (!sDispMode) - sIsDispOn = 0x0; + sIsDispOn = FALSE; } -ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ - reg_GXS_DB_DISPCNT = (reg_GXS_DB_DISPCNT & ~0x7) | mode; +ARM_FUNC void GXS_SetGraphicsMode(GXBGMode mode){ + reg_GXS_DB_DISPCNT = (reg_GXS_DB_DISPCNT & ~REG_GXS_DB_DISPCNT_BGMODE_MASK) | mode; } ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ @@ -112,10 +115,10 @@ ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ } else if (brightness > 0) { - *dst = (u16)(0x4000 | brightness); + *dst = (u16)((1 << REG_GX_MASTER_BRIGHT_E_MOD_SHIFT) | brightness); } else { - *dst = (u16)(0x8000 | -brightness); + *dst = (u16)((2 << REG_GX_MASTER_BRIGHT_E_MOD_SHIFT) | -brightness); } } diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c index de039375..2a23d08b 100644 --- a/arm9/src/error_message_reset.c +++ b/arm9/src/error_message_reset.c @@ -1,9 +1,10 @@ #include "error_message_reset.h" #include "GX_layers.h" +#include "GXS_ioreg.h" #include "unk_02031734.h" #include "unk_0202F150.h" #include "unk_02016B94.h" - +#include "PAD_pad.h" const struct UnkStruct_02016B94_4 UNK_020FF49C = { 0, 3, 3, 0x1a, 0x12, 1, 0x23 }; @@ -12,7 +13,7 @@ const struct HeapParam UNK_020FF4A4[] = { {0x00020000, OS_ARENA_MAIN} }; -const struct GraphicsModes UNK_020FF4AC = { mode1 : 1 }; +const struct GraphicsModes UNK_020FF4AC = { dispMode : GX_DISPMODE_GRAPHICS }; const struct UnkStruct_02016B94_1 UNK_020FF4BC = { 0, 0, 0x800, 0, 1, 0, 0, 6, 0, 1, 0, 0, 0 }; @@ -60,8 +61,8 @@ THUMB_FUNC void PrintErrorMessageAndReset() GX_DisableEngineALayers(); GX_DisableEngineBLayers(); - reg_GX_DISPCNT &= 0xFFFFE0FF; - reg_GXS_DB_DISPCNT &= 0xFFFFE0FF; + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + reg_GXS_DB_DISPCNT &= ~REG_GXS_DB_DISPCNT_DISPLAY_MASK; SetKeyRepeatTimers(4, 8); @@ -70,8 +71,8 @@ THUMB_FUNC void PrintErrorMessageAndReset() reg_G2_BLDCNT = 0; reg_G2S_DB_BLDCNT = 0; - reg_GX_DISPCNT &= 0xFFFF1FFF; - reg_GXS_DB_DISPCNT &= 0xFFFF1FFF; + reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); + reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); GX_SetBanks(&UNK_020FF4D8); ptr = FUN_02016B94(0); @@ -106,24 +107,22 @@ THUMB_FUNC void PrintErrorMessageAndReset() FUN_0200A274(0, 0x3f, 3); FUN_02032DAC(); - lid: - HandleDSLidAction(); - FUN_0202FB80(); - if (!FUN_02033678()) + while (1) { - OS_WaitIrq(1, 1); - goto lid; + HandleDSLidAction(); + FUN_0202FB80(); + if (FUN_02033678()) + break; + OS_WaitIrq(TRUE, OS_IE_V_BLANK); } - - lid2: - HandleDSLidAction(); - if (!((u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ 0x2FFF) & 0x2FFF) & 1)) + while (1) { - OS_WaitIrq(1, 1); - goto lid2; + HandleDSLidAction(); + if ((PAD_Read() & PAD_BUTTON_A)) + break; + OS_WaitIrq(TRUE, OS_IE_V_BLANK); } - FUN_0200E3A0(PM_LCD_TOP, 0x7FFF); FUN_0200E3A0(PM_LCD_BOTTOM, 0x7FFF); diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c index 840b17a4..1c6098ea 100644 --- a/arm9/src/game_init.c +++ b/arm9/src/game_init.c @@ -536,10 +536,10 @@ void ApplyButtonModeToInput(void) } } -void SetKeyRepeatTimers(int x, int y) +void SetKeyRepeatTimers(int continueDelay, int startDelay) { - gMain.keyRepeatContinueDelay = x; - gMain.keyRepeatStartDelay = y; + gMain.keyRepeatContinueDelay = continueDelay; + gMain.keyRepeatStartDelay = startDelay; } void SetSoftResetDisableMask(u8 a0) diff --git a/arm9/src/unk_02016B94.c b/arm9/src/unk_02016B94.c index 8ad78373..c03fbd75 100644 --- a/arm9/src/unk_02016B94.c +++ b/arm9/src/unk_02016B94.c @@ -73,25 +73,25 @@ THUMB_FUNC u32 FUN_02016BB8(u32 *param0) THUMB_FUNC void FUN_02016BBC(const struct GraphicsModes *modes) { - GX_SetGraphicsMode(modes->mode1, modes->mode2, modes->mode4); - GXS_SetGraphicsMode(modes->mode3); - reg_GX_DISPCNT &= 0xC7FFFFFF; - reg_GX_DISPCNT &= 0xF8FFFFFF; + GX_SetGraphicsMode(modes->dispMode, modes->bgMode, modes->_2d3dMode); + GXS_SetGraphicsMode(modes->subMode); + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_BGSCREENOFFSET_MASK; + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_BGCHAROFFSET_MASK; GX_DisableEngineALayers(); GX_DisableEngineBLayers(); } -THUMB_FUNC void FUN_02016BF4(u32 *param0, u32 param1) +THUMB_FUNC void FUN_02016BF4(const struct GraphicsModes *param0, u32 param1) { if (param1 == 0) { - GX_SetGraphicsMode(param0[0], param0[1], param0[3]); + GX_SetGraphicsMode(param0->dispMode, param0->bgMode, param0->_2d3dMode); GX_DisableEngineALayers(); } else { - GXS_SetGraphicsMode(param0[2]); + GXS_SetGraphicsMode(param0->subMode); GX_DisableEngineBLayers(); } } diff --git a/include/GX_layers.h b/include/GX_layers.h index 3943d582..aca0154b 100644 --- a/include/GX_layers.h +++ b/include/GX_layers.h @@ -3,6 +3,7 @@ #include "global.h" +#include "gx.h" struct GX_LayerData { @@ -33,10 +34,10 @@ struct GraphicsBanks struct GraphicsModes { - u32 mode1; - u32 mode2; - u32 mode3; - u32 mode4; + GXDispMode dispMode; + GXBGMode bgMode; + GXBGMode subMode; + GXBG0As _2d3dMode; }; diff --git a/include/game_init.h b/include/game_init.h index 77484689..bf6569c4 100644 --- a/include/game_init.h +++ b/include/game_init.h @@ -27,7 +27,7 @@ void FUN_02016444(u8 a0); void FUN_02016454(u8 a0); void ReadKeypadAndTocuhpad(void); void ApplyButtonModeToInput(void); -void SetKeyRepeatTimers(int x, int y); +void SetKeyRepeatTimers(int continueDelay, int startDelay); void SetSoftResetDisableMask(u8 a0); void ClearSoftResetDisableMask(u8 a0); diff --git a/include/unk_02016B94.h b/include/unk_02016B94.h index 7757b208..d3648560 100644 --- a/include/unk_02016B94.h +++ b/include/unk_02016B94.h @@ -94,7 +94,7 @@ struct Window struct UnkStruct_02016B94_2 *FUN_02016B94(u32 heap_id); u32 FUN_02016BB8(u32 *param0); void FUN_02016BBC(const struct GraphicsModes *modes); -void FUN_02016BF4(u32 *param0, u32 param1); +void FUN_02016BF4(const struct GraphicsModes *param0, u32 param1); void FUN_02016C18( struct UnkStruct_02016B94_2 *param0, u8 param1, const struct UnkStruct_02016B94_1 *param2, u8 param3); void FUN_020170F4(struct UnkStruct_02016B94_2 *param0, u8 param1, u32 param2, u8 param3); |