diff --git a/Makefile b/Makefile index 6ffb4b4a..233f3c7d 100644 --- a/Makefile +++ b/Makefile @@ -83,6 +83,7 @@ NODEP := 1 endif #$(C_BUILDDIR)/need_interworking_file_name.o: CFLAGS += -mthumb-interwork +$(C_BUILDDIR)/code_080B1520.o: CFLAGS += -mthumb-interwork C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) diff --git a/asm/code_080B1520.s b/asm/code_080B1520.s index 9ecbe88a..6a90c190 100644 --- a/asm/code_080B1520.s +++ b/asm/code_080B1520.s @@ -5,44 +5,6 @@ .text - thumb_func_start sub_080B1520 -sub_080B1520: @ 0x080B1520 - push {lr} - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r2, #0 - cmp r0, #4 - bne _080B153C - ldr r1, _080B1534 @ =gUnk_02036A50 - ldr r0, _080B1538 @ =gUnk_08DE7D40 - str r0, [r1] - b _080B1558 - .align 2, 0 -_080B1534: .4byte gUnk_02036A50 -_080B1538: .4byte gUnk_08DE7D40 -_080B153C: - cmp r0, #0x40 - bne _080B1550 - ldr r1, _080B1548 @ =gUnk_02036A50 - ldr r0, _080B154C @ =gUnk_08DE7D4C - str r0, [r1] - b _080B1558 - .align 2, 0 -_080B1548: .4byte gUnk_02036A50 -_080B154C: .4byte gUnk_08DE7D4C -_080B1550: - ldr r1, _080B1560 @ =gUnk_02036A50 - ldr r0, _080B1564 @ =gUnk_08DE7D40 - str r0, [r1] - movs r2, #1 -_080B1558: - adds r0, r2, #0 - pop {r1} - bx r1 - .align 2, 0 -_080B1560: .4byte gUnk_02036A50 -_080B1564: .4byte gUnk_08DE7D40 - thumb_func_start sub_080B1568 sub_080B1568: @ 0x080B1568 push {r4, r5, r6, lr} diff --git a/asm/non_matching/code_080B1520/sub_080B1568.inc b/asm/non_matching/code_080B1520/sub_080B1568.inc new file mode 100644 index 00000000..2c79cd29 --- /dev/null +++ b/asm/non_matching/code_080B1520/sub_080B1568.inc @@ -0,0 +1,62 @@ + .syntax unified + .text + push {r4, r5, r6, lr} + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + ldr r4, _080B15C8 @ =0x04000208 + ldrh r3, [r4] + adds r6, r3, #0 + movs r3, #0 + strh r3, [r4] + ldr r5, _080B15CC @ =0x04000204 + ldrh r4, [r5] + ldr r3, _080B15D0 @ =0x0000F8FF + ands r4, r3 + ldr r3, _080B15D4 @ =gUnk_02036A50 + ldr r3, [r3] + ldrh r3, [r3, #6] + orrs r4, r3 + strh r4, [r5] + ldr r3, _080B15D8 @ =0x040000D4 + str r0, [r3] + ldr r0, _080B15DC @ =0x040000D8 + str r1, [r0] + ldr r1, _080B15E0 @ =0x040000DC + movs r0, #0x80 + lsls r0, r0, #0x18 + orrs r2, r0 + str r2, [r1] + adds r1, #2 + movs r2, #0x80 + lsls r2, r2, #8 + adds r0, r2, #0 + ldrh r1, [r1] + ands r0, r1 + cmp r0, #0 + beq _080B15BC + ldr r2, _080B15E4 @ =0x040000DE + movs r0, #0x80 + lsls r0, r0, #8 + adds r1, r0, #0 +_080B15B4: + ldrh r0, [r2] + ands r0, r1 + cmp r0, #0 + bne _080B15B4 +_080B15BC: + ldr r0, _080B15C8 @ =0x04000208 + strh r6, [r0] + pop {r4, r5, r6} + pop {r0} + bx r0 + .align 2, 0 +_080B15C8: .4byte 0x04000208 +_080B15CC: .4byte 0x04000204 +_080B15D0: .4byte 0x0000F8FF +_080B15D4: .4byte gUnk_02036A50 +_080B15D8: .4byte 0x040000D4 +_080B15DC: .4byte 0x040000D8 +_080B15E0: .4byte 0x040000DC +_080B15E4: .4byte 0x040000DE + + .syntax divided \ No newline at end of file diff --git a/linker.ld b/linker.ld index 0267d7cd..4cfa3dfc 100644 --- a/linker.ld +++ b/linker.ld @@ -899,6 +899,7 @@ SECTIONS { asm/m4a_asm.o(.text); asm/m4a.o(.text); asm/libagbsyscall.o(.text); + src/code_080B1520.o(.text); asm/code_080B1520.o(.text); *libc.a:memcpy.o(.text); diff --git a/src/code_080B1520.c b/src/code_080B1520.c new file mode 100644 index 00000000..8f461ced --- /dev/null +++ b/src/code_080B1520.c @@ -0,0 +1,23 @@ +#include "global.h" + +extern u16 (*gUnk_02036A50)[]; +extern u16 gUnk_08DE7D40[]; +extern u16 gUnk_08DE7D4C[]; + +u32 sub_080B1520(u16 unk_1) { + u32 ret; + + ret = 0; + if (unk_1 == 4) { + gUnk_02036A50 = &gUnk_08DE7D40; + } else { + if (unk_1 == 0x40) { + gUnk_02036A50 = &gUnk_08DE7D4C; + } else { + gUnk_02036A50 = &gUnk_08DE7D40; + ret = 1; + } + } + return ret; +} +