diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-10-22 18:51:13 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-10-22 18:51:13 -0500 |
commit | 0d8c76cf7a6d3e44d128e17c800c4e97d8b73ee0 (patch) | |
tree | 1f70dbd05708a8ce2506b8a784dd1a00b6c0f5c3 | |
parent | d943da35b4907748b89e281571dda91fd8dedb8f (diff) |
Decompile sub_A20
-rwxr-xr-x | asm/rom_9BC.s | 192 | ||||
-rwxr-xr-x | include/main.h | 12 | ||||
-rwxr-xr-x | src/main.c | 87 | ||||
-rwxr-xr-x | src/util.c | 6 |
4 files changed, 96 insertions, 201 deletions
diff --git a/asm/rom_9BC.s b/asm/rom_9BC.s index 0249356..60f2560 100755 --- a/asm/rom_9BC.s +++ b/asm/rom_9BC.s @@ -4,198 +4,6 @@ .text - thumb_func_start sub_9BC_Main -sub_9BC_Main: @ 0x080009BC - push {r4, lr} - ldr r4, _080009DC @ =gMain - ldrb r0, [r4, #3] - cmp r0, #0 - beq _080009E0 - cmp r0, #1 - beq _080009EE - bl sub_2B4 - bl sub_D10 - movs r0, #1 - bl SetMainGameState - b _080009FC - .align 2, 0 -_080009DC: .4byte gMain -_080009E0: - bl sub_CBC - bl sub_24C - ldrb r0, [r4, #3] - adds r0, #1 - b _080009FA -_080009EE: - ldrh r1, [r4, #0x18] - ldr r0, _08000A04 @ =0x000003FF - ands r0, r1 - cmp r0, #0 - beq _080009FC - movs r0, #2 -_080009FA: - strb r0, [r4, #3] -_080009FC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08000A04: .4byte 0x000003FF - - thumb_func_start sub_A08 -sub_A08: @ 0x08000A08 - push {lr} - bl m4aSoundVSync - ldr r0, _08000A1C @ =0x03007FF8 - ldrh r1, [r0] - movs r2, #1 - orrs r1, r2 - strh r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_08000A1C: .4byte 0x03007FF8 - - thumb_func_start sub_A20 -sub_A20: @ 0x08000A20 - push {r4, r5, lr} - ldr r2, _08000A78 @ =0x03007FF8 - ldrh r0, [r2] - movs r1, #4 - orrs r0, r1 - strh r0, [r2] - ldr r2, _08000A7C @ =0x04000004 - ldrh r1, [r2] - movs r0, #2 - ands r0, r1 - ldr r3, _08000A80 @ =gMain - cmp r0, #0 - bne _08000A46 - movs r4, #2 -_08000A3C: - ldrh r1, [r2] - adds r0, r4, #0 - ands r0, r1 - cmp r0, #0 - beq _08000A3C -_08000A46: - adds r2, r3, #0 - ldrb r0, [r2, #2] - cmp r0, #2 - bne _08000B2E - ldr r0, _08000A84 @ =0x04000010 - movs r4, #0 - strh r4, [r0] - movs r0, #0x28 - ldrsh r1, [r2, r0] - cmp r1, #0 - beq _08000AA0 - movs r1, #0x26 - ldrsh r0, [r2, r1] - cmp r0, #0x48 - bne _08000A8C - ldr r1, _08000A88 @ =0x04000012 - movs r3, #0x2a - ldrsh r0, [r2, r3] - lsls r0, r0, #2 - adds r0, #0x58 - strh r0, [r1] - movs r1, #0x90 - strh r1, [r2, #0x26] - b _08000B00 - .align 2, 0 -_08000A78: .4byte 0x03007FF8 -_08000A7C: .4byte 0x04000004 -_08000A80: .4byte gMain -_08000A84: .4byte 0x04000010 -_08000A88: .4byte 0x04000012 -_08000A8C: - ldr r1, _08000A9C @ =0x04000012 - movs r5, #0xb0 - lsls r5, r5, #1 - adds r0, r5, #0 - strh r0, [r1] - movs r1, #0x48 - strh r1, [r2, #0x26] - b _08000B00 - .align 2, 0 -_08000A9C: .4byte 0x04000012 -_08000AA0: - movs r5, #0x2c - ldrsh r0, [r2, r5] - cmp r0, #0 - beq _08000B24 - movs r5, #0x26 - ldrsh r0, [r2, r5] - cmp r0, #0x28 - bne _08000ADC - ldrh r0, [r2, #0x38] - ldr r0, _08000AD0 @ =0x00001E41 - strh r0, [r2, #0x38] - ldrh r0, [r2, #0x3a] - ldr r0, _08000AD4 @ =0x00000A06 - strh r0, [r2, #0x3a] - ldr r1, _08000AD8 @ =0x04000050 - ldrh r0, [r2, #0x38] - strh r0, [r1] - adds r1, #2 - ldrh r0, [r2, #0x3a] - strh r0, [r1] - movs r1, #0x90 - strh r1, [r2, #0x26] - b _08000B00 - .align 2, 0 -_08000AD0: .4byte 0x00001E41 -_08000AD4: .4byte 0x00000A06 -_08000AD8: .4byte 0x04000050 -_08000ADC: - ldrh r0, [r3, #0x38] - ldr r0, _08000B18 @ =0x00001E01 - strh r0, [r3, #0x38] - ldrh r0, [r3, #0x3a] - strh r1, [r3, #0x3a] - ldr r1, _08000B1C @ =0x04000050 - ldrh r0, [r3, #0x38] - strh r0, [r1] - adds r1, #2 - ldrh r0, [r3, #0x3a] - strh r0, [r1] - subs r1, #0x40 - movs r2, #0xb0 - lsls r2, r2, #1 - adds r0, r2, #0 - strh r0, [r1] - movs r1, #0x28 - strh r1, [r3, #0x26] -_08000B00: - ldr r2, _08000B20 @ =0x04000004 - ldrh r3, [r2] - movs r0, #0xff - ands r0, r3 - strh r0, [r2] - lsls r1, r1, #8 - adds r1, #0x20 - ldrh r0, [r2] - orrs r1, r0 - strh r1, [r2] - b _08000B2E - .align 2, 0 -_08000B18: .4byte 0x00001E01 -_08000B1C: .4byte 0x04000050 -_08000B20: .4byte 0x04000004 -_08000B24: - ldr r1, _08000B34 @ =0x04000012 - movs r3, #0xb0 - lsls r3, r3, #1 - adds r0, r3, #0 - strh r0, [r1] -_08000B2E: - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_08000B34: .4byte 0x04000012 - thumb_func_start sub_B38 sub_B38: @ 0x08000B38 push {lr} diff --git a/include/main.h b/include/main.h index 403641a..a25afdb 100755 --- a/include/main.h +++ b/include/main.h @@ -54,14 +54,14 @@ struct Main /*0x1A*/ u16 releasedKeys; /*0x1C*/ u16 heldKeys; /*0x1E*/ u8 filler1E[0x8]; - /*0x26*/ u16 unk26; - /*0x28*/ u16 unk28; - /*0x2A*/ u16 unk2A; - /*0x2C*/ u16 unk2C; + /*0x26*/ s16 vCount; + /*0x28*/ s16 unk28; + /*0x2A*/ s16 unk2A; + /*0x2C*/ s16 unk2C; /*0x2E*/ u8 filler2E[0x8]; /*0x36*/ u8 unk36; - /*0x38*/ volatile u16 unk38; - /*0x3A*/ volatile u16 unk3A; + /*0x38*/ volatile u16 blendControl; + /*0x3A*/ volatile u16 blendAlpha; /*0x3C*/ volatile u16 unk3C; /*0x40*/ int unk40; /*0x44*/ u8 filler44[0xC]; @@ -1,8 +1,11 @@ #include "global.h" +#include "m4a.h" #include "main.h" extern void sub_B54(void); extern void sub_BBC(void); +extern void sub_CBC(void); +extern void sub_D10(void); extern void sub_D74(void); extern void sub_FE8(void); extern void ReadKeys(void); @@ -24,3 +27,87 @@ void AgbMain(void) sub_D74(); } } + +void sub_9BC_Main(void) +{ + switch (gMain.subState) + { + case 0: + sub_CBC(); + sub_24C(); + gMain.subState++; + break; + case 1: + if (gMain.newKeys & KEYS_MASK) + gMain.subState = 2; + break; + default: + sub_2B4(); + sub_D10(); + SetMainGameState(1); + break; + } +} + +void sub_A08(void) +{ + m4aSoundVSync(); + INTR_CHECK |= INTR_FLAG_VBLANK; +} + +void sub_A20(void) +{ + INTR_CHECK |= INTR_FLAG_VCOUNT; + while (!(REG_DISPSTAT & DISPSTAT_HBLANK)); + if (gMain.mainState == 2) + { + REG_BG0HOFS = 0; + if (gMain.unk28) + { + if (gMain.vCount == 72) + { + REG_BG0VOFS = gMain.unk2A * 4 + 88; + gMain.vCount = 144; + REG_DISPSTAT &= 0xFF; + REG_DISPSTAT |= (gMain.vCount << 8) + DISPSTAT_VCOUNT_INTR; + } + else + { + REG_BG0VOFS = 352; + gMain.vCount = 72; + REG_DISPSTAT &= 0xFF; + REG_DISPSTAT |= (gMain.vCount << 8) + DISPSTAT_VCOUNT_INTR; + } + } + else if (gMain.unk2C) + { + if (gMain.vCount == 40) + { + gMain.blendControl = BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 + | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG0; + gMain.blendAlpha = 0xA06; + REG_BLDCNT = gMain.blendControl; + REG_BLDALPHA = gMain.blendAlpha; + gMain.vCount = 144; + REG_DISPSTAT &= 0xFF; + REG_DISPSTAT |= (gMain.vCount << 8) + DISPSTAT_VCOUNT_INTR; + } + else + { + gMain.blendControl = BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 + | BLDCNT_EFFECT_NONE | BLDCNT_TGT1_BG0; + gMain.blendAlpha = 0; + REG_BLDCNT = gMain.blendControl; + REG_BLDALPHA = gMain.blendAlpha; + REG_BG0VOFS = 352; + gMain.vCount = 40; + REG_DISPSTAT &= 0xFF; + REG_DISPSTAT |= (gMain.vCount << 8) + DISPSTAT_VCOUNT_INTR; + } + } + else + { + REG_BG0VOFS = 352; + } + } +} @@ -108,12 +108,12 @@ void sub_438(void) gMain.unk11 = 0; gMain.unk12 = 0; gMain.unk14 = 0; - gMain.unk26 = 0x90; + gMain.vCount = 144; gMain.unk28 = 0; gMain.unk2A = 0; gMain.unk36 = 0; - gMain.unk38 = 0; - gMain.unk3A = 0; + gMain.blendControl = 0; + gMain.blendAlpha = 0; gMain.unk3C = 0; gMain.unk2C = 0; } |