diff options
-rw-r--r-- | asm/link_rfu.s | 95 | ||||
-rw-r--r-- | include/link_rfu.h | 3 | ||||
-rw-r--r-- | src/link_rfu.c | 40 |
3 files changed, 42 insertions, 96 deletions
diff --git a/asm/link_rfu.s b/asm/link_rfu.s index 46d134786..d1cba6e7a 100644 --- a/asm/link_rfu.s +++ b/asm/link_rfu.s @@ -7,101 +7,6 @@ @ file boundary? - thumb_func_start sub_800D7D8 -sub_800D7D8: @ 800D7D8 - push {r4-r7,lr} - adds r3, r0, 0 - adds r4, r1, 0 - ldr r1, =0x000008c2 - adds r0, r3, r1 - ldrb r0, [r0] - cmp r0, 0x1F - bhi _0800D874 - ldr r0, =0x04000208 - ldrh r1, [r0] - adds r7, r1, 0 - movs r1, 0 - strh r1, [r0] - movs r5, 0 - movs r2, 0 -_0800D7F6: - adds r1, r4, r2 - ldrb r0, [r1] - cmp r0, 0 - bne _0800D80A - ldrb r0, [r1, 0x1] - cmp r0, 0 - bne _0800D80A - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_0800D80A: - adds r2, 0xE - cmp r2, 0x45 - ble _0800D7F6 - cmp r5, 0x5 - beq _0800D866 - movs r2, 0 - movs r0, 0x8C - lsls r0, 4 - adds r5, r3, r0 - movs r6, 0x46 -_0800D81E: - ldrb r0, [r5] - adds r1, r0, 0 - muls r1, r6 - adds r1, r2, r1 - adds r1, r3, r1 - adds r0, r4, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0x45 - ble _0800D81E - movs r0, 0x8C - lsls r0, 4 - adds r1, r3, r0 - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - ldrb r2, [r1] - movs r0, 0x1F - ands r0, r2 - ldrb r2, [r1] - strb r0, [r1] - ldr r0, =0x000008c2 - adds r1, r3, r0 - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r1, 0 - adds r0, r4, 0 - adds r0, 0x45 -_0800D85E: - strb r1, [r0] - subs r0, 0x1 - cmp r0, r4 - bge _0800D85E -_0800D866: - ldr r0, =0x04000208 - strh r7, [r0] - b _0800D87E - .pool -_0800D874: - ldr r1, =0x000008c3 - adds r0, r3, r1 - ldrb r1, [r0] - movs r1, 0x1 - strb r1, [r0] -_0800D87E: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_800D7D8 - thumb_func_start sub_800D888 sub_800D888: @ 800D888 push {r4-r7,lr} diff --git a/include/link_rfu.h b/include/link_rfu.h index 51ebab9cf..ad313d5da 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -109,7 +109,8 @@ struct UnkRfuStruct_2 { /* 0x06c */ u8 filler_6c[0xb8]; /* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124; /* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8; - /* 0xc1c */ u8 filler_c1c[0xdc]; + /* 0xc1c */ u8 filler_c1c[0x23]; + /* 0xc3f */ u8 filler_c3f[0xb9]; }; // size = 0xcf8 // Exported RAM declarations diff --git a/src/link_rfu.c b/src/link_rfu.c index 4f2dbd186..7145c602d 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -1469,3 +1469,43 @@ void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr) ptr->unk_202 = 0; ptr->unk_203 = 0; } + +void sub_800D7D8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2) +{ + int i; + u16 imeBak; + u8 count; + + if (q1->unk_8c2 < 32) + { + imeBak = REG_IME; + REG_IME = 0; + count = 0; + for (i = 0; i < 70; i += 14) + { + if (q2[i] == 0 && q2[i + 1] == 0) + { + count++; + } + } + if (count != 5) + { + for (i = 0; i < 70; i++) + { + q1->unk_00[q1->unk_8c0][i] = q2[i]; + } + q1->unk_8c0++; + q1->unk_8c0 %= 32; + q1->unk_8c2++; + for (i = 0; i < 70; i++) + { + q2[i] = 0; + } + } + REG_IME = imeBak; + } + else + { + q1->unk_8c3 = 1; + } +} |