diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-10-21 17:03:33 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-10-21 17:03:33 -0500 |
commit | d943da35b4907748b89e281571dda91fd8dedb8f (patch) | |
tree | 4aaded84005c3a7d71cf80952c963f64f9fece81 /src/main.c | |
parent | ba5df32ca23fe022a0e5db530e0f4d87d15508bf (diff) |
Decompile some more functions up to AgbMain
Diffstat (limited to 'src/main.c')
-rwxr-xr-x | src/main.c | 311 |
1 files changed, 19 insertions, 292 deletions
@@ -1,299 +1,26 @@ #include "global.h" #include "main.h" -extern const struct OamData gEmptyOamData[128]; -extern int sub_55A24(u8*); // Rumble Pak? - -static u8 *sub_734(u32, u8*, u32); -static int sub_780(int, int); - -void SetMainGameState(u16 mainState) -{ - gMain.mainState = mainState; - gMain.subState = 0; -} - -void sub_24C(void) -{ - u16 i; - - REG_BLDCNT = 0; - REG_BLDY = 0x10; - REG_BLDCNT = ((REG_DISPCNT & (DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON)) >> 8) - | BLDCNT_EFFECT_LIGHTEN - | BLDCNT_TGT1_BD; - REG_DISPCNT &= ~DISPCNT_FORCED_BLANK; - gMain.unk16 = REG_DISPCNT; - - for (i = 0; i < 32; i++) - { - REG_BLDY = 15 - i / 2; - sub_D74(); - } - - REG_BLDCNT = 0; -} - -void sub_2B4(void) -{ - u16 i; - - REG_BLDCNT = 0; - REG_BLDY = 0; - REG_BLDCNT = ((REG_DISPCNT & (DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON)) >> 8) - | BLDCNT_EFFECT_LIGHTEN - | BLDCNT_TGT1_BD; - - for (i = 0; i < 16; i++) - { - REG_BLDY = i + 1; - sub_D74(); - } - - gMain.unk16 |= DISPCNT_FORCED_BLANK; - REG_DISPCNT |= DISPCNT_FORCED_BLANK; - DmaFill16(3, 0, (void *)BG_VRAM, 0x18000); - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BLDCNT = 0; - REG_BLDY = 0; -} - -s16 LoadSpriteSets(const struct SpriteSet **spriteSets, u16 numSpriteSets, struct SpriteGroup *spriteGroups) -{ - u16 i, j; - struct SpriteGroup *spriteGroup; - struct OamDataSimple *oamSimple; - u16 *oamData = (u16 *)(&gOamBuffer[0]); - u16 loadedCount = 0; - - DmaCopy16(3, gEmptyOamData, oamData, sizeof(gEmptyOamData)); - for (i = 0; i < numSpriteSets; i++) - { - spriteGroup = &spriteGroups[i]; - if (spriteGroup->available) - { - u16 curSpriteSetCount = spriteSets[i]->count; - DmaCopy16(3, spriteSets[i]->oamData, &gOamBuffer[loadedCount], curSpriteSetCount * sizeof(struct OamData)); - for (j = 0; j < curSpriteSetCount; j++) - { - oamData = (u16 *)(&gOamBuffer[loadedCount]); - oamSimple = &spriteGroup->oam[j]; - oamSimple->oamId = loadedCount++; - oamSimple->xOffset = oamData[1] & 0x1FF; - oamSimple->yOffset = oamData[0] & 0xFF; - } - } - } - - return loadedCount; -} - -void sub_438(void) -{ - gMain.unk16 |= DISPCNT_FORCED_BLANK; - REG_DISPCNT |= DISPCNT_FORCED_BLANK; - sub_490(); - sub_518(); - sub_578(); - gMain.unkF = 0; - gMain.unk10 = 0; - gMain.unk50 = 0; - gMain.unk11 = 0; - gMain.unk12 = 0; - gMain.unk14 = 0; - gMain.unk26 = 0x90; - gMain.unk28 = 0; - gMain.unk2A = 0; - gMain.unk36 = 0; - gMain.unk38 = 0; - gMain.unk3A = 0; - gMain.unk3C = 0; - gMain.unk2C = 0; -} - -void sub_490(void) -{ - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)PLTT, BG_PLTT_SIZE + OBJ_PLTT_SIZE); - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BLDCNT = 0; - REG_BLDY = 0; - REG_DISPSTAT = 0; - REG_BLDALPHA = 0; -} - -void sub_518(void) -{ - s16 i; - - DmaFill16(3, 0, gUnknown_03005C00, sizeof(gUnknown_03005C00)); - for (i = 0; i < 4; i++) - { - gMain.unk2E8[i].unk0 = 0; - gMain.unk2E8[i].unk2 = 0; - } -} - -void sub_578(void) -{ - u16 i, j; - - for (i = 0; i < NUM_SPRITE_GROUPS; i++) - { - gMain.spriteGroups[i].available = 0; - gMain.spriteGroups[i].baseX = 0; - gMain.spriteGroups[i].baseY = 0; - for (j = 0; j < MAX_SPRITES_IN_GROUP; j++) - { - gMain.spriteGroups[i].oam[j].oamId = 0; - gMain.spriteGroups[i].oam[j].xOffset = 0; - gMain.spriteGroups[i].oam[j].yOffset = 0; - } - } - - for (i = 0; i < 128; i++) - { - gOamBuffer[i].y = 244; - gOamBuffer[i].affineMode = 0; - gOamBuffer[i].objMode = 0; - gOamBuffer[i].mosaic = 0; - gOamBuffer[i].bpp = 0; - gOamBuffer[i].shape = 0; - gOamBuffer[i].x = 500; - gOamBuffer[i].matrixNum = 0; - gOamBuffer[i].hFlip = 0; - gOamBuffer[i].vFlip = 0; - gOamBuffer[i].size = 0; - gOamBuffer[i].tileNum = 0; - gOamBuffer[i].priority = 0; - gOamBuffer[i].paletteNum = 0; - gOamBuffer[i].affineParam = 0; - } -} - -void sub_678(u8 *arg0, s16 arg1, s16 arg2) -{ - // Rumble Pak related? - s16 var0 = sub_55A24(arg0) - 1; - u16 *dest = &gUnknown_03005C00[arg1 * 32 + arg2]; - do - { - *dest = (*arg0) - 32; - arg0++; - dest++; - } while (var0-- > 0); -} - -u8 *sub_6CC(int arg0, u8 *arg1, int arg2, s16 arg3) -{ - if (arg0 < 0) - { - *arg1 = 0x2D; - arg1++; - arg0 = -arg0; - } - +extern void sub_B54(void); +extern void sub_BBC(void); +extern void sub_D74(void); +extern void sub_FE8(void); +extern void ReadKeys(void); +extern u32 IntrMain_Buffer[0x200]; +extern u32 IntrMain[]; + +void AgbMain(void) +{ + RegisterRamReset(0xFF); + sub_BBC(); + DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer)); + INTR_VECTOR = IntrMain_Buffer; + sub_B54(); + sub_FE8(); while (1) { - if (arg2 < 2) - break; - - arg2--; - if (arg0 < sub_780(10, arg2)) - { - *arg1 = 0x30; - arg1++; - } - else - { - break; - } - } - - if (arg3) - { - sub_734(arg0, arg1, 10); - } - else - { - u8 *ptr = sub_734(arg0, arg1, 10); - *ptr = 0; - } - - return arg1; -} - -static u8 *sub_734(u32 arg0, u8 *arg1, u32 arg2) -{ - u8 mod = arg0 % arg2; - int div = arg0 / arg2; - if (div != 0) - arg1 = sub_734(div, arg1, arg2); - - if (mod < 10) - *arg1 = mod + 48; - else - *arg1 = mod + 87; - - return arg1 + 1; -} - -static int sub_780(int arg0, int arg1) -{ - int var0; - int var1 = arg1; - - if (arg1 < 0) - var1 = -var1; - - var0 = 1; - while (var1) - { - if (var1 & 1) - var0 *= arg0; - - arg0 *= arg0; - var1 >>= 1; + ReadKeys(); + gMainFuncs[gMain.mainState](); + sub_D74(); } - - if (arg1 >= 0) - return var0; - else - return 1 / var0; -} - -void SetMatrixScale(s16 xScale, s16 yScale, s16 matrixNum) -{ - vu16 a2, b2, c2, d2; - u16 a = 0x10000 / xScale; - u32 d = 0x10000 / yScale; - a2 = a; - b2 = 0; - c2 = 0; - // There is a delayed u16 shift here that is tricky to produce. -#ifndef NONMATCHING - asm_unified("lsls r0, r0, #0x10\n\ - lsrs r0, r0, #0x10"); -#endif - d2 = d; - - gOamBuffer[matrixNum * 4 ].affineParam = a2; - gOamBuffer[matrixNum * 4 + 1].affineParam = b2; - gOamBuffer[matrixNum * 4 + 2].affineParam = c2; - gOamBuffer[matrixNum * 4 + 3].affineParam = d; } |