summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2020-08-05 17:47:00 -0500
committerMarcus Huderle <huderlem@gmail.com>2020-08-05 17:47:00 -0500
commitacdc85a61dce2edcfcf19face76b3376976db42d (patch)
tree876090bd7f7b1298d273aec4f206d859f0a3e491
parent1cbdcf5a36f09f569e2a0925e050d1a065ff58a9 (diff)
Match MainLoop()
-rw-r--r--asm/non_matching/mainLoop.inc115
-rw-r--r--include/main.h43
-rw-r--r--include/structures.h8
-rw-r--r--src/introSetTransition.c16
-rw-r--r--src/mainLoop.c109
5 files changed, 69 insertions, 222 deletions
diff --git a/asm/non_matching/mainLoop.inc b/asm/non_matching/mainLoop.inc
deleted file mode 100644
index 24e3f299..00000000
--- a/asm/non_matching/mainLoop.inc
+++ /dev/null
@@ -1,115 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- push {r4, r5, r6, lr}
- bl sub_08055F70
- bl sub_080A3204
- bl sub_0805616C
- bl sub_0807CE90
- bl sub_080560B8
- bl sub_08056208
- ldr r1, _08055EEC @ =gUnk_02000010
- movs r0, #0xc1
- strb r0, [r1, #4]
- bl sub_0804FFE4
- ldr r1, _08055EF0 @ =0x040000D4
- movs r0, #0xa0
- lsls r0, r0, #0x13
- str r0, [r1]
- ldr r0, _08055EF4 @ =gUnk_020176A0
- str r0, [r1, #4]
- ldr r0, _08055EF8 @ =0x84000080
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- movs r0, #1
- bl sub_0804FF84
- bl sub_08056418
- bl sub_080ADD30
- ldr r1, _08055EFC @ =gRand
- ldr r0, _08055F00 @ =0x01234567
- str r0, [r1]
- ldr r4, _08055F04 @ =gUnk_03001000
- adds r0, r4, #0
- movs r1, #0x10
- bl _DmaZero
- movs r0, #0
- bl sub_08056010
- adds r6, r4, #0
-_08055EC8:
- bl ReadKeyInput
- bl sub_08055FF4
- cmp r0, #0
- beq _08055ED8
- bl sub_080560A8
-_08055ED8:
- ldrb r0, [r6, #1]
- ldr r1, _08055F04 @ =gUnk_03001000
- cmp r0, #0
- beq _08055F08
- cmp r0, #1
- bne _08055F08
- bl sub_08056260
- b _08055F64
- .align 2, 0
-_08055EEC: .4byte gUnk_02000010
-_08055EF0: .4byte 0x040000D4
-_08055EF4: .4byte gUnk_020176A0
-_08055EF8: .4byte 0x84000080
-_08055EFC: .4byte gRand
-_08055F00: .4byte 0x01234567
-_08055F04: .4byte gUnk_03001000
-_08055F08:
- ldrb r0, [r1, #8]
- cmp r0, #0
- beq _08055F22
- ldr r4, _08055F34 @ =gUnk_03001000
- movs r5, #0xff
-_08055F12:
- bl VBlankIntrWait
- ldrb r0, [r4, #8]
- subs r0, #1
- strb r0, [r4, #8]
- ands r0, r5
- cmp r0, #0
- bne _08055F12
-_08055F22:
- ldr r1, _08055F34 @ =gUnk_03001000
- ldrb r0, [r1, #9]
- cmp r0, #0
- beq _08055F44
- subs r0, #1
- strb r0, [r1, #9]
- ldrb r4, [r1, #0xa]
- b _08055F3C
- .align 2, 0
-_08055F34: .4byte gUnk_03001000
-_08055F38:
- bl VBlankIntrWait
-_08055F3C:
- adds r0, r4, #0
- subs r4, #1
- cmp r0, #0
- bgt _08055F38
-_08055F44:
- ldrh r0, [r6, #0xc]
- adds r0, #1
- strh r0, [r6, #0xc]
- ldr r1, _08055F6C @ =gUnk_08100CBC
- ldrb r0, [r6, #2]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- bl sub_08056458
- bl sub_08050154
- bl sub_080A3480
-_08055F64:
- bl sub_08016E78
- b _08055EC8
- .align 2, 0
-_08055F6C: .4byte gUnk_08100CBC
- .syntax divided \ No newline at end of file
diff --git a/include/main.h b/include/main.h
index 4cceb41e..c98a1e9a 100644
--- a/include/main.h
+++ b/include/main.h
@@ -17,13 +17,16 @@ typedef struct { // 0x03001000
typedef struct {
u8 interruptFlag;
u8 field_0x1;
+ u8 loadType;
u8 funcIndex;
- u8 field_0x3;
u8 transition;
u8 field_0x5;
u8 muteAudio;
- u8 field_0x8;
+ u8 field_0x7;
u8 countdown;
+ u8 field_0x9;
+ u8 field_0xa;
+ u16 ticks;
} Main;
typedef struct {
@@ -43,27 +46,25 @@ extern UI gUnk_02032EC0;
-extern s32 sub_08055F70();
-extern s32 sub_080A3204(s32);
-extern s32 sub_0807CE90(s32);
-extern s32 sub_080560B8(s32);
-extern void sub_08056208(s32);
-extern void sub_0804FFE4();
-extern s32 sub_08056418();
-extern void sub_080ADD30(s32);
+extern void sub_08055F70(void);
+extern void sub_080A3204(void);
+extern void sub_0807CE90(void);
+extern void sub_080560B8(void);
+extern void sub_08056208(void);
+extern void sub_0804FFE4(void);
+extern void sub_08056418(void);
+extern void sub_080ADD30(void);
-extern s32 sub_08056010(s32);
-extern s32 sub_08016E78(s32);
-extern s32 ReadKeyInput();
-extern s32 sub_08055FF4(u8);
-extern void sub_080560A8();
-extern s32 sub_08056260();
+extern void sub_08056010(u32);
+extern void sub_08016E78(void);
+extern void ReadKeyInput(void);
+extern u32 sub_08055FF4(void);
+extern void sub_080560A8(void);
+extern void sub_08056260(void);
extern void VBlankIntrWait();
extern s32 _call_via_r0(s32);
-extern s32 sub_08056458(s32);
-extern s32 sub_08050154(s32);
-extern s32 sub_080A3480(s32);
+extern void sub_08056458(void);
+extern void sub_08050154(void);
+extern void sub_080A3480(void);
-extern s32 gRand;
-extern s32 gUnk_08100CBC;
#endif \ No newline at end of file
diff --git a/include/structures.h b/include/structures.h
index 69e6e65a..f3ca87d5 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -26,6 +26,14 @@ typedef struct {
//extern struct_02000000 gUnk_02000000;
typedef struct {
+ u8 filler0[0x4];
+ u8 field_0x4;
+ u8 field_0x5;
+} struct_02000010;
+
+extern struct_02000010 gUnk_02000010;
+
+typedef struct {
/*0x000*/ u8 filler0[0x6];
/*0x006*/ u8 unk6;
/*0x007*/ u8 unk7;
diff --git a/src/introSetTransition.c b/src/introSetTransition.c
index 33f0e62c..ea42ecd9 100644
--- a/src/introSetTransition.c
+++ b/src/introSetTransition.c
@@ -18,17 +18,10 @@ typedef struct {
extern struct_03000FD0 gUnk_03000FD0;
-typedef struct {
- u8 filler[5];
- u8 field_0x5;
-} struct_02000010;
-
-extern struct_02000010 gUnk_02000010;
-
u32 IntroSetTransition(u32 transition)
{
gUnk_02032EC0.transitionType = transition;
- gUnk_03001000.field_0x3 = 2;
+ gUnk_03001000.funcIndex = 2;
_DmaZero((u32 *)&gMenu, 48);
DoFade(7, 8);
}
@@ -36,7 +29,7 @@ u32 IntroSetTransition(u32 transition)
void sub_080AD380()
{
sub_080AD90C();
- switch (gUnk_03001000.field_0x3) {
+ switch (gUnk_03001000.funcIndex) {
case 0:
sub_08056418();
_DmaZero(&gUnk_02032EC0, 0x3b4);
@@ -50,7 +43,7 @@ void sub_080AD380()
return;
}
sub_0801DA90(1);
- gUnk_03001000.field_0x3 = 1;
+ gUnk_03001000.funcIndex = 1;
break;
}
sub_080AD918();
@@ -112,7 +105,8 @@ void sub_080AD474(void)
gMenu.transitionTimer = 0x1e;
gMenu.field_0x4 = 7;
EraseAllEntities();
- sub_080ADD30(sub_0801CFA8(0));
+ sub_0801CFA8(0);
+ sub_080ADD30();
gUnk_02024490 = 1;
sub_0801D7EC(2);
if (((struct_02000000*)0x2000000)->gameLanguage == 0) {
diff --git a/src/mainLoop.c b/src/mainLoop.c
index 4e07b882..0d04e5a8 100644
--- a/src/mainLoop.c
+++ b/src/mainLoop.c
@@ -1,58 +1,17 @@
#include "global.h"
+#include "functions.h"
#include "main.h"
+#include "random.h"
-#if 0
-
-typedef struct {
- u8 interruptFlag;
- u8 field_0x1;
- u8 loadType;
- u8 funcIndex;
- u8 transition;
- u16 field_0x5;
- u8 muteAudio;
- u8 field_0x8;
- u8 countdown;
- u8 field_0xa;
- u8 field_0xb;
- u16 ticks;
- u8 field_0xe;
- u8 field_0xf;
-} MainStruct;
-
-extern void sub_08055F70(void);
-extern void sub_080A3204(void);
-extern void sub_0805616C(void);
-extern void sub_0807CE90(void);
-extern void sub_080560B8(void);
-extern void sub_08056208(void);
-extern void sub_0804FFE4(void);
extern void sub_0804FF84(u32);
-extern void sub_08056418(void);
-extern void sub_080ADD30(void);
extern void _DmaZero(void*, u32);
-extern void sub_08056010(u32);
-extern void ReadKeyInput();
-extern u32 sub_08055FF4();
-extern void sub_080560A8(void);
-extern void sub_08056458(void);
-extern void sub_08050154(void);
-extern void sub_080A3480(void);
-extern void sub_08016E78(void);
-extern void sub_08056260(void);
-extern u8 gUnk_02000014;
extern u32 gUnk_020176A0;
-extern u32 gRand;
-extern MainStruct gUnk_03001000;
-extern void (*gUnk_08100CBC[])();
+extern const void (*gUnk_08100CBC[])();
extern void VBlankInterruptWait(void);
void MainLoop(void) {
- bool32 codeInputted;
- u8 cVar1;
- u32 uVar2;
- MainStruct *s;
+ int var0;
sub_08055F70();
sub_080A3204();
@@ -60,49 +19,49 @@ void MainLoop(void) {
sub_0807CE90();
sub_080560B8();
sub_08056208();
- gUnk_02000014 = 193;
+ gUnk_02000010.field_0x4 = 193;
sub_0804FFE4();
DmaSet(3, 0x5000000U, &gUnk_020176A0, 0x84000080U);
sub_0804FF84(1);
sub_08056418();
sub_080ADD30();
gRand = 0x1234567;
- s = &gUnk_03001000;
- _DmaZero(s, 16);
+ _DmaZero(&gUnk_03001000, 16);
sub_08056010(0);
while (1) {
ReadKeyInput();
- codeInputted = sub_08055FF4();
- if (codeInputted) {
+ if (sub_08055FF4()) {
sub_080560A8();
}
- if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) {
- sub_08056260();
- } else if (s->field_0x8 != 0) {
- while (--s->field_0x8) {
- VBlankInterruptWait();
+
+ switch (gUnk_03001000.field_0x1) {
+ case 1:
+ sub_08056260();
+ break;
+ case 0:
+ default:
+ if (gUnk_03001000.countdown != 0) {
+ do {
+ VBlankIntrWait();
+ } while (--gUnk_03001000.countdown);
}
- }
- if (s->countdown != 0) {
- s->countdown--;
- uVar2 = s->field_0xa;
- while (uVar2 > 0) {
- VBlankIntrWait();
- uVar2--;
+
+ if (gUnk_03001000.field_0x9 != 0) {
+ gUnk_03001000.field_0x9--;
+ var0 = gUnk_03001000.field_0xa;
+ while (var0-- > 0) {
+ VBlankIntrWait();
+ }
}
- }
- s->ticks++;
- gUnk_08100CBC[s->loadType]();
- sub_08056458();
- sub_08050154();
- sub_080A3480();
- }
- sub_08016E78();
-}
-#endif
+ gUnk_03001000.ticks++;
+ gUnk_08100CBC[gUnk_03001000.loadType]();
+ sub_08056458();
+ sub_08050154();
+ sub_080A3480();
+ break;
+ }
-NAKED
-void MainLoop(void) {
- asm(".include \"asm/non_matching/mainLoop.inc\"");
+ sub_08016E78();
+ }
}