From 469212f7ee42d04e3160d357ed1f088f12edd391 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 4 Jan 2021 13:40:33 -0600 Subject: CPU and GPU Reg Funcs Decomp (#16) * decomp/doc cpu funcs and gpu reg funcs * use Cpu32 macro funcs * address review comments * decomp SetBGOBJEnableFlags --- src/code_800C9CC.c | 172 ++++++++++++++++++++--------------------------------- 1 file changed, 65 insertions(+), 107 deletions(-) (limited to 'src/code_800C9CC.c') diff --git a/src/code_800C9CC.c b/src/code_800C9CC.c index ddc49c6..28ce10a 100644 --- a/src/code_800C9CC.c +++ b/src/code_800C9CC.c @@ -1,23 +1,17 @@ #include "global.h" #include "input.h" - -struct unkStruct_809CC88 -{ - u16 padding; - u16 unk2; - u16 unk4; - u16 unk6; -}; +#include "bg.h" extern u16 gRawKeyInput; extern u8 gUnknown_202D6B8; extern u8 gUnknown_202D6B9; extern u16 gUnknown_202D7FA; +extern u8 gUnknown_202D7FE; -extern struct unkStruct_809CC88 gUnknown_202D698; -extern struct unkStruct_809CC88 gUnknown_202D6A0; -extern struct unkStruct_809CC88 gUnknown_202D6A8; -extern struct unkStruct_809CC88 gUnknown_202D6B0; +extern struct BGControlStruct gUnknown_202D698; +extern struct BGControlStruct gUnknown_202D6A0; +extern struct BGControlStruct gUnknown_202D6A8; +extern struct BGControlStruct gUnknown_202D6B0; void ReadKeyInput(struct Inputs *r0) { @@ -97,122 +91,86 @@ void sub_800CC44(s32 r0, s32 r1) } -void sub_800CC88(u32 r0, u32 r1) +void SetBG0RegOffsets(s32 xoffset, s32 yoffset) { - gUnknown_202D698.unk4 = r0; - gUnknown_202D698.unk6 = r1; + gUnknown_202D698.hofs = xoffset; + gUnknown_202D698.vofs = yoffset; } -void sub_800CC94(u32 r0, u32 r1) +void SetBG1RegOffsets(s32 xoffset, s32 yoffset) { - gUnknown_202D6A0.unk4 = r0; - gUnknown_202D6A0.unk6 = r1; + gUnknown_202D6A0.hofs = xoffset; + gUnknown_202D6A0.vofs = yoffset; } -void sub_800CCA0(u32 r0, u32 r1) +void SetBG2RegOffsets(s32 xoffset, s32 yoffset) { - gUnknown_202D6A8.unk4 = r0; - gUnknown_202D6A8.unk6 = r1; + gUnknown_202D6A8.hofs = xoffset; + gUnknown_202D6A8.vofs = yoffset; } -void sub_800CCAC(u32 r0, u32 r1) +void SetBG3RegOffsets(s32 xoffset, s32 yoffset) { - gUnknown_202D6B0.unk4 = r0; - gUnknown_202D6B0.unk6 = r1; + gUnknown_202D6B0.hofs = xoffset; + gUnknown_202D6B0.vofs = yoffset; } -void sub_800CCB8(s32 r0, u32 r1, u32 r2) +void SetBGRegOffsets(s32 reg, u32 xoffset, s32 yoffset) { - if(r0 == 1) - { - goto _0800CCD4; - } - if(r0 <= 1) - { - goto _0800CCCA; - } - if(r0 == 2) - { - goto _0800CCDE; + switch (reg) { + default: + case 0: return SetBG0RegOffsets(xoffset, yoffset); + case 1: return SetBG1RegOffsets(xoffset, yoffset); + case 2: return SetBG2RegOffsets(xoffset, yoffset); + case 3: return SetBG3RegOffsets(xoffset, yoffset); } - if(r0 == 3) - { - goto _0800CCE8; - } - - _0800CCCA: - sub_800CC88(r1, r2); - return; - _0800CCD4: - sub_800CC94(r1, r2); - return; - _0800CCDE: - sub_800CCA0(r1, r2); - return; - _0800CCE8: - sub_800CCAC(r1, r2); } -void sub_800CCF4(s32 r0, u32 r1) +void SetBGRegXOffset(s32 reg, s32 offset) { - if(r0 == 1) - { - goto _0800CD10; - } - if(r0 <= 1) - { - goto _0800CD06; + switch (reg) { + default: + case 0: + gUnknown_202D698.hofs = offset; + break; + case 1: + gUnknown_202D6A0.hofs = offset; + break; + case 2: + gUnknown_202D6A8.hofs = offset; + break; + case 3: + gUnknown_202D6B0.hofs = offset; + break; } - if(r0 == 2) - { - goto _0800CD18; - } - if(r0 == 3) - { - goto _0800CD20; - } - - _0800CD06: - gUnknown_202D698.unk4 = r1; - return; - _0800CD10: - gUnknown_202D6A0.unk4 = r1; - return; - _0800CD18: - gUnknown_202D6A8.unk4 = r1; - return; - _0800CD20: - gUnknown_202D6B0.unk4 = r1; } -void sub_800CD2C(s32 r0, u32 r1) +void SetBGRegYOffset(s32 reg, s32 offset) { - if(r0 == 1) - { - goto _0800CD48; - } - if(r0 <= 1) - { - goto _0800CD3E; - } - if(r0 == 2) - { - goto _0800CD50; - } - if(r0 == 3) - { - goto _0800CD58; + switch (reg) { + default: + case 0: + gUnknown_202D698.vofs = offset; + break; + case 1: + gUnknown_202D6A0.vofs = offset; + break; + case 2: + gUnknown_202D6A8.vofs = offset; + break; + case 3: + gUnknown_202D6B0.vofs = offset; + break; } +} - _0800CD3E: - gUnknown_202D698.unk6 = r1; - return; - _0800CD48: - gUnknown_202D6A0.unk6 = r1; - return; - _0800CD50: - gUnknown_202D6A8.unk6 = r1; - return; - _0800CD58: - gUnknown_202D6B0.unk6 = r1; +void sub_800CD64(s32 r0, u8 r1) +{ + gUnknown_202D7FE = r1; + gUnknown_202D6A8.unk2 = r0 ? 0x8000 : 0; +} + +void SetBGOBJEnableFlags(u32 mask) +{ + REG_DISPCNT = (REG_DISPCNT & 0xe0ff) | (~(mask << 8) & (DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON)); } -- cgit v1.2.3