diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-28 22:15:11 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-28 22:15:11 -0500 |
commit | 21a301b77d01851a9d019b594ff11c547cc6514f (patch) | |
tree | 76a752076e0330309e9c9d7f5346ddd19dafc377 | |
parent | 18303c4596f96eaa68bbf8ccbc4ba19f9a8fed88 (diff) |
through sub_81436EC
-rw-r--r-- | asm/mevent.s | 187 | ||||
-rw-r--r-- | include/link.h | 5 | ||||
-rw-r--r-- | include/main.h | 3 | ||||
-rw-r--r-- | include/unk_815c27c.h | 11 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/mevent.c | 75 |
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; +} |