summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-11-28 22:15:11 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2018-11-28 22:15:11 -0500
commit21a301b77d01851a9d019b594ff11c547cc6514f (patch)
tree76a752076e0330309e9c9d7f5346ddd19dafc377
parent18303c4596f96eaa68bbf8ccbc4ba19f9a8fed88 (diff)
through sub_81436EC
-rw-r--r--asm/mevent.s187
-rw-r--r--include/link.h5
-rw-r--r--include/main.h3
-rw-r--r--include/unk_815c27c.h11
-rw-r--r--ld_script.txt1
-rw-r--r--src/mevent.c75
6 files changed, 95 insertions, 187 deletions
diff --git a/asm/mevent.s b/asm/mevent.s
index 697266a39..2d1f06d88 100644
--- a/asm/mevent.s
+++ b/asm/mevent.s
@@ -5,193 +5,6 @@
.text
- thumb_func_start sub_81435DC
-sub_81435DC: @ 81435DC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- mov r1, sp
- ldr r4, _08143630 @ =0x04000208
- ldrh r0, [r4]
- strh r0, [r1]
- movs r0, 0
- strh r0, [r4]
- ldr r1, _08143634 @ =gIntrTable
- ldr r0, _08143638 @ =sub_815C6D4
- str r0, [r1, 0x4]
- ldr r0, _0814363C @ =sub_815C6C4
- str r0, [r1, 0x8]
- bl sub_815C8C8
- bl sub_815C960
- ldr r2, _08143640 @ =0x04000200
- ldrh r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strh r0, [r2]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4]
- movs r0, 0
- strh r0, [r5]
- str r6, [r5, 0x4]
- mov r0, r8
- str r0, [r5, 0x8]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08143630: .4byte 0x04000208
-_08143634: .4byte gIntrTable
-_08143638: .4byte sub_815C6D4
-_0814363C: .4byte sub_815C6C4
-_08143640: .4byte 0x04000200
- thumb_func_end sub_81435DC
-
- thumb_func_start sub_8143644
-sub_8143644: @ 8143644
- push {r4,lr}
- sub sp, 0x4
- mov r1, sp
- ldr r4, _08143670 @ =0x04000208
- ldrh r0, [r4]
- strh r0, [r1]
- movs r0, 0
- strh r0, [r4]
- bl sub_815C960
- bl sub_815C91C
- bl RestoreSerialTimer3IntrHandlers
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08143670: .4byte 0x04000208
- thumb_func_end sub_8143644
-
- thumb_func_start sub_8143674
-sub_8143674: @ 8143674
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0
- ldr r1, [r4, 0x4]
- ldr r2, [r4, 0x8]
- movs r0, 0x1
- movs r3, 0
- bl sub_815C498
- adds r1, r0, 0
- strh r1, [r4]
- movs r0, 0x13
- ands r0, r1
- cmp r0, 0x10
- bne _08143694
- movs r5, 0x1
-_08143694:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0814369E
- movs r5, 0x2
-_0814369E:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081436A8
- movs r5, 0x3
-_081436A8:
- ldr r1, _081436B8 @ =gUnknown_3003F84
- movs r0, 0
- strb r0, [r1]
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_081436B8: .4byte gUnknown_3003F84
- thumb_func_end sub_8143674
-
- thumb_func_start sub_81436BC
-sub_81436BC: @ 81436BC
- push {lr}
- ldr r0, _081436E0 @ =gDecompressionBuffer
- movs r2, 0x80
- lsls r2, 6
- movs r1, 0
- bl memset
- ldr r1, _081436E4 @ =gUnknown_202271A
- ldr r2, _081436E8 @ =0x00005502
- adds r0, r2, 0
- strh r0, [r1]
- bl sub_8009804
- movs r0, 0x1
- bl SetSuppressLinkErrorMessage
- pop {r0}
- bx r0
- .align 2, 0
-_081436E0: .4byte gDecompressionBuffer
-_081436E4: .4byte gUnknown_202271A
-_081436E8: .4byte 0x00005502
- thumb_func_end sub_81436BC
-
- thumb_func_start sub_81436EC
-sub_81436EC: @ 81436EC
- push {lr}
- sub sp, 0xC
- mov r1, sp
- ldr r2, _08143730 @ =0x04000208
- ldrh r0, [r2]
- strh r0, [r1]
- movs r0, 0
- strh r0, [r2]
- ldr r0, _08143734 @ =gUnknown_3003FB4
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r2]
- add r2, sp, 0x4
- ldrh r1, [r2]
- ldr r0, _08143738 @ =0x0000b9a0
- cmp r1, r0
- bne _08143744
- ldrh r1, [r2, 0x2]
- ldr r0, _0814373C @ =0x0000ccd0
- cmp r1, r0
- bne _08143744
- ldrh r1, [r2, 0x4]
- ldr r0, _08143740 @ =0x0000ffff
- cmp r1, r0
- bne _08143744
- ldrh r0, [r2, 0x6]
- cmp r0, r1
- bne _08143744
- movs r0, 0x1
- b _08143746
- .align 2, 0
-_08143730: .4byte 0x04000208
-_08143734: .4byte gUnknown_3003FB4
-_08143738: .4byte 0x0000b9a0
-_0814373C: .4byte 0x0000ccd0
-_08143740: .4byte 0x0000ffff
-_08143744:
- movs r0, 0
-_08143746:
- add sp, 0xC
- pop {r1}
- bx r1
- thumb_func_end sub_81436EC
-
thumb_func_start sub_814374C
sub_814374C: @ 814374C
push {lr}
diff --git a/include/link.h b/include/link.h
index 239a59b71..d015708b1 100644
--- a/include/link.h
+++ b/include/link.h
@@ -146,6 +146,10 @@ extern u16 word_3002910[];
extern bool8 gReceivedRemoteLinkPlayers;
extern bool8 gLinkVSyncDisabled;
+extern u8 gUnknown_3003F84;
+extern u64 gUnknown_3003FB4;
+extern u16 gUnknown_202271A;
+
void Task_DestroySelf(u8);
void OpenLink(void);
void CloseLink(void);
@@ -196,5 +200,6 @@ void sub_8011BD0(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
void sub_800AC34(void);
+void sub_8009804(void);
#endif // GUARD_LINK_H
diff --git a/include/main.h b/include/main.h
index 84d356692..0fe138d1f 100644
--- a/include/main.h
+++ b/include/main.h
@@ -9,6 +9,8 @@ typedef void (*MainCallback)(void);
typedef void (*IntrCallback)(void);
typedef void (*IntrFunc)(void);
+extern IntrFunc gIntrTable[];
+
struct Main
{
/*0x000*/ MainCallback callback1;
@@ -62,5 +64,6 @@ void SetSerialCallback(IntrCallback callback);
void InitFlashTimer(void);
void DoSoftReset(void);
void ClearPokemonCrySongs(void);
+void RestoreSerialTimer3IntrHandlers(void);
#endif // GUARD_MAIN_H
diff --git a/include/unk_815c27c.h b/include/unk_815c27c.h
new file mode 100644
index 000000000..d5ddc7bdc
--- /dev/null
+++ b/include/unk_815c27c.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_UNK_815C27C_H
+#define GUARD_UNK_815C27C_H
+
+void sub_815C6D4(void);
+void sub_815C6C4(void);
+void sub_815C8C8(void);
+void sub_815C960(void);
+void sub_815C91C(void);
+u16 sub_815C498(u8, u32, u32, u8);
+
+#endif //GUARD_UNK_815C27C_H
diff --git a/ld_script.txt b/ld_script.txt
index 2a42825c9..bef37772a 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -243,6 +243,7 @@ SECTIONS {
asm/roamer.o(.text);
asm/mystery_gift_menu.o(.text);
asm/link_rfu_4.o(.text);
+ src/mevent.o(.text);
asm/mevent.o(.text);
asm/mevent_server.o(.text);
asm/mevent_8145654.o(.text);
diff --git a/src/mevent.c b/src/mevent.c
new file mode 100644
index 000000000..8b710e3f3
--- /dev/null
+++ b/src/mevent.c
@@ -0,0 +1,75 @@
+#include "global.h"
+#include "main.h"
+#include "decompress.h"
+#include "link.h"
+#include "unk_815c27c.h"
+
+struct MEvent_Str_1
+{
+ u16 unk_000;
+ u32 unk_004;
+ u32 unk_008;
+};
+
+void sub_81435DC(struct MEvent_Str_1 *a0, u32 a1, u32 a2)
+{
+ vu16 imeBak = REG_IME;
+ REG_IME = 0;
+ gIntrTable[1] = sub_815C6D4;
+ gIntrTable[2] = sub_815C6C4;
+ sub_815C8C8();
+ sub_815C960();
+ REG_IE |= INTR_FLAG_VCOUNT;
+ REG_IME = imeBak;
+ a0->unk_000 = 0;
+ a0->unk_004 = a1;
+ a0->unk_008 = a2;
+}
+
+void sub_8143644(void)
+{
+ vu16 imeBak = REG_IME;
+ REG_IME = 0;
+ sub_815C960();
+ sub_815C91C();
+ RestoreSerialTimer3IntrHandlers();
+ REG_IME = imeBak;
+}
+
+u8 sub_8143674(struct MEvent_Str_1 *a0)
+{
+ u8 resp = 0;
+ a0->unk_000 = sub_815C498(1, a0->unk_004, a0->unk_008, 0);
+ if ((a0->unk_000 & 0x13) == 0x10)
+ resp = 1;
+ if (a0->unk_000 & 8)
+ resp = 2;
+ if (a0->unk_000 & 4)
+ resp = 3;
+ gUnknown_3003F84 = 0;
+ return resp;
+}
+
+void sub_81436BC(void)
+{
+ memset(gDecompressionBuffer, 0, 0x2000);
+ gUnknown_202271A = 0x5502;
+ sub_8009804();
+ SetSuppressLinkErrorMessage(TRUE);
+}
+
+bool8 sub_81436EC(void)
+{
+ vu16 imeBak = REG_IME;
+ u16 data[4];
+ REG_IME = 0;
+ *(u64 *)data = gUnknown_3003FB4;
+ REG_IME = imeBak;
+ if ( data[0] == 0xB9A0
+ && data[1] == 0xCCD0
+ && data[2] == 0xFFFF
+ && data[3] == 0xFFFF
+ )
+ return TRUE;
+ return FALSE;
+}