summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-10-22 18:51:13 -0500
committerMarcus Huderle <huderlem@gmail.com>2018-10-22 18:51:13 -0500
commit0d8c76cf7a6d3e44d128e17c800c4e97d8b73ee0 (patch)
tree1f70dbd05708a8ce2506b8a784dd1a00b6c0f5c3
parentd943da35b4907748b89e281571dda91fd8dedb8f (diff)
Decompile sub_A20
-rwxr-xr-xasm/rom_9BC.s192
-rwxr-xr-xinclude/main.h12
-rwxr-xr-xsrc/main.c87
-rwxr-xr-xsrc/util.c6
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];
diff --git a/src/main.c b/src/main.c
index 230f9ff..e178233 100755
--- a/src/main.c
+++ b/src/main.c
@@ -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;
+ }
+ }
+}
diff --git a/src/util.c b/src/util.c
index e426a43..fa72a93 100755
--- a/src/util.c
+++ b/src/util.c
@@ -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;
}