Match MainLoop()

This commit is contained in:
Marcus Huderle 2020-08-05 17:47:00 -05:00
parent 1cbdcf5a36
commit acdc85a61d
5 changed files with 69 additions and 222 deletions

View File

@ -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

View File

@ -17,13 +17,16 @@ typedef struct { // 0x03001000
typedef struct { typedef struct {
u8 interruptFlag; u8 interruptFlag;
u8 field_0x1; u8 field_0x1;
u8 loadType;
u8 funcIndex; u8 funcIndex;
u8 field_0x3;
u8 transition; u8 transition;
u8 field_0x5; u8 field_0x5;
u8 muteAudio; u8 muteAudio;
u8 field_0x8; u8 field_0x7;
u8 countdown; u8 countdown;
u8 field_0x9;
u8 field_0xa;
u16 ticks;
} Main; } Main;
typedef struct { typedef struct {
@ -43,27 +46,25 @@ extern UI gUnk_02032EC0;
extern s32 sub_08055F70(); extern void sub_08055F70(void);
extern s32 sub_080A3204(s32); extern void sub_080A3204(void);
extern s32 sub_0807CE90(s32); extern void sub_0807CE90(void);
extern s32 sub_080560B8(s32); extern void sub_080560B8(void);
extern void sub_08056208(s32); extern void sub_08056208(void);
extern void sub_0804FFE4(); extern void sub_0804FFE4(void);
extern s32 sub_08056418(); extern void sub_08056418(void);
extern void sub_080ADD30(s32); extern void sub_080ADD30(void);
extern s32 sub_08056010(s32); extern void sub_08056010(u32);
extern s32 sub_08016E78(s32); extern void sub_08016E78(void);
extern s32 ReadKeyInput(); extern void ReadKeyInput(void);
extern s32 sub_08055FF4(u8); extern u32 sub_08055FF4(void);
extern void sub_080560A8(); extern void sub_080560A8(void);
extern s32 sub_08056260(); extern void sub_08056260(void);
extern void VBlankIntrWait(); extern void VBlankIntrWait();
extern s32 _call_via_r0(s32); extern s32 _call_via_r0(s32);
extern s32 sub_08056458(s32); extern void sub_08056458(void);
extern s32 sub_08050154(s32); extern void sub_08050154(void);
extern s32 sub_080A3480(s32); extern void sub_080A3480(void);
extern s32 gRand;
extern s32 gUnk_08100CBC;
#endif #endif

View File

@ -25,6 +25,14 @@ typedef struct {
#define gUnk_02000000 ((struct_02000000*)(0x2000000)) #define gUnk_02000000 ((struct_02000000*)(0x2000000))
//extern struct_02000000 gUnk_02000000; //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 { typedef struct {
/*0x000*/ u8 filler0[0x6]; /*0x000*/ u8 filler0[0x6];
/*0x006*/ u8 unk6; /*0x006*/ u8 unk6;

View File

@ -18,17 +18,10 @@ typedef struct {
extern struct_03000FD0 gUnk_03000FD0; extern struct_03000FD0 gUnk_03000FD0;
typedef struct {
u8 filler[5];
u8 field_0x5;
} struct_02000010;
extern struct_02000010 gUnk_02000010;
u32 IntroSetTransition(u32 transition) u32 IntroSetTransition(u32 transition)
{ {
gUnk_02032EC0.transitionType = transition; gUnk_02032EC0.transitionType = transition;
gUnk_03001000.field_0x3 = 2; gUnk_03001000.funcIndex = 2;
_DmaZero((u32 *)&gMenu, 48); _DmaZero((u32 *)&gMenu, 48);
DoFade(7, 8); DoFade(7, 8);
} }
@ -36,7 +29,7 @@ u32 IntroSetTransition(u32 transition)
void sub_080AD380() void sub_080AD380()
{ {
sub_080AD90C(); sub_080AD90C();
switch (gUnk_03001000.field_0x3) { switch (gUnk_03001000.funcIndex) {
case 0: case 0:
sub_08056418(); sub_08056418();
_DmaZero(&gUnk_02032EC0, 0x3b4); _DmaZero(&gUnk_02032EC0, 0x3b4);
@ -50,7 +43,7 @@ void sub_080AD380()
return; return;
} }
sub_0801DA90(1); sub_0801DA90(1);
gUnk_03001000.field_0x3 = 1; gUnk_03001000.funcIndex = 1;
break; break;
} }
sub_080AD918(); sub_080AD918();
@ -112,7 +105,8 @@ void sub_080AD474(void)
gMenu.transitionTimer = 0x1e; gMenu.transitionTimer = 0x1e;
gMenu.field_0x4 = 7; gMenu.field_0x4 = 7;
EraseAllEntities(); EraseAllEntities();
sub_080ADD30(sub_0801CFA8(0)); sub_0801CFA8(0);
sub_080ADD30();
gUnk_02024490 = 1; gUnk_02024490 = 1;
sub_0801D7EC(2); sub_0801D7EC(2);
if (((struct_02000000*)0x2000000)->gameLanguage == 0) { if (((struct_02000000*)0x2000000)->gameLanguage == 0) {

View File

@ -1,58 +1,17 @@
#include "global.h" #include "global.h"
#include "functions.h"
#include "main.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_0804FF84(u32);
extern void sub_08056418(void);
extern void sub_080ADD30(void);
extern void _DmaZero(void*, u32); 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 gUnk_020176A0;
extern u32 gRand; extern const void (*gUnk_08100CBC[])();
extern MainStruct gUnk_03001000;
extern void (*gUnk_08100CBC[])();
extern void VBlankInterruptWait(void); extern void VBlankInterruptWait(void);
void MainLoop(void) { void MainLoop(void) {
bool32 codeInputted; int var0;
u8 cVar1;
u32 uVar2;
MainStruct *s;
sub_08055F70(); sub_08055F70();
sub_080A3204(); sub_080A3204();
@ -60,49 +19,49 @@ void MainLoop(void) {
sub_0807CE90(); sub_0807CE90();
sub_080560B8(); sub_080560B8();
sub_08056208(); sub_08056208();
gUnk_02000014 = 193; gUnk_02000010.field_0x4 = 193;
sub_0804FFE4(); sub_0804FFE4();
DmaSet(3, 0x5000000U, &gUnk_020176A0, 0x84000080U); DmaSet(3, 0x5000000U, &gUnk_020176A0, 0x84000080U);
sub_0804FF84(1); sub_0804FF84(1);
sub_08056418(); sub_08056418();
sub_080ADD30(); sub_080ADD30();
gRand = 0x1234567; gRand = 0x1234567;
s = &gUnk_03001000; _DmaZero(&gUnk_03001000, 16);
_DmaZero(s, 16);
sub_08056010(0); sub_08056010(0);
while (1) { while (1) {
ReadKeyInput(); ReadKeyInput();
codeInputted = sub_08055FF4(); if (sub_08055FF4()) {
if (codeInputted) {
sub_080560A8(); sub_080560A8();
} }
if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) {
switch (gUnk_03001000.field_0x1) {
case 1:
sub_08056260(); sub_08056260();
} else if (s->field_0x8 != 0) { break;
while (--s->field_0x8) { case 0:
VBlankInterruptWait(); default:
} if (gUnk_03001000.countdown != 0) {
} do {
if (s->countdown != 0) { VBlankIntrWait();
s->countdown--; } while (--gUnk_03001000.countdown);
uVar2 = s->field_0xa; }
while (uVar2 > 0) {
if (gUnk_03001000.field_0x9 != 0) {
gUnk_03001000.field_0x9--;
var0 = gUnk_03001000.field_0xa;
while (var0-- > 0) {
VBlankIntrWait(); VBlankIntrWait();
uVar2--;
} }
} }
s->ticks++;
gUnk_08100CBC[s->loadType](); gUnk_03001000.ticks++;
gUnk_08100CBC[gUnk_03001000.loadType]();
sub_08056458(); sub_08056458();
sub_08050154(); sub_08050154();
sub_080A3480(); sub_080A3480();
break;
} }
sub_08016E78(); sub_08016E78();
} }
#endif
NAKED
void MainLoop(void) {
asm(".include \"asm/non_matching/mainLoop.inc\"");
} }