diff --git a/asm/code_800D090.s b/asm/code_800D090.s deleted file mode 100644 index a6f1c4b42..000000000 --- a/asm/code_800D090.s +++ /dev/null @@ -1,1088 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_800D224 -sub_800D224: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - movs r6, 0 - ldr r0, _0800D280 - mov r12, r0 - ldr r1, _0800D284 - mov r10, r1 - movs r2, 0x2 - mov r9, r2 -_0800D240: - ldr r1, [sp] - asrs r1, r6 - movs r0, 0x1 - ands r1, r0 - adds r3, r6, 0x1 - mov r8, r3 - cmp r1, 0 - beq _0800D2CE - lsls r0, r6, 2 - ldr r1, _0800D288 - adds r2, r0, r1 - ldr r1, [r2] - adds r5, r0, 0 - cmp r1, 0x1 - bne _0800D2CE - lsls r0, r6, 5 - adds r0, r6 - lsls r0, 3 - ldr r1, _0800D28C - adds r7, r0, r1 - movs r4, 0 - mov r3, r12 - adds r0, r5, r3 - ldr r1, [r0] - mov r3, r10 - ldr r0, [r3] - lsrs r0, 1 - cmp r1, r0 - bcc _0800D290 - mov r0, r9 - str r0, [r2] - b _0800D2C4 - .align 2, 0 -_0800D280: .4byte gUnknown_202DB58 -_0800D284: .4byte gUnknown_202DB74 -_0800D288: .4byte gUnknown_202DB60 -_0800D28C: .4byte gUnknown_202D910 -_0800D290: - mov r1, r12 - adds r0, r5, r1 - ldr r3, [r0] - adds r2, r3, r4 - lsls r2, 1 - adds r2, r7 - lsls r0, r4, 1 - lsls r1, r6, 4 - adds r0, r1 - ldr r1, _0800D2E4 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - adds r4, 0x1 - cmp r4, 0x7 - bhi _0800D2C4 - adds r1, r3, r4 - mov r2, r10 - ldr r0, [r2] - lsrs r0, 1 - cmp r1, r0 - bcc _0800D290 - ldr r3, _0800D2E8 - adds r0, r5, r3 - mov r1, r9 - str r1, [r0] -_0800D2C4: - mov r2, r12 - adds r1, r5, r2 - ldr r0, [r1] - adds r0, 0x8 - str r0, [r1] -_0800D2CE: - mov r6, r8 - cmp r6, 0x1 - ble _0800D240 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800D2E4: .4byte gUnknown_202DB30 -_0800D2E8: .4byte gUnknown_202DB60 - thumb_func_end sub_800D224 - - thumb_func_start sub_800D2EC -sub_800D2EC: - push {r4-r7,lr} - ldr r0, _0800D318 - mov r12, r0 - ldr r3, _0800D31C - adds r7, r3, 0 - ldr r6, _0800D320 - ldr r2, _0800D324 - adds r5, r2, 0 - adds r5, 0xE - ldr r4, _0800D328 -_0800D300: - ldr r0, [r4] - lsrs r0, 1 - ldr r1, [r7] - cmp r1, r0 - bcs _0800D32C - lsls r0, r1, 1 - add r0, r12 - ldrh r0, [r0] - strh r0, [r2] - adds r0, r1, 0x1 - str r0, [r3] - b _0800D32E - .align 2, 0 -_0800D318: .4byte gUnknown_202D808 -_0800D31C: .4byte gUnknown_202DB50 -_0800D320: .4byte 0x0000fcfc -_0800D324: .4byte gUnknown_202DB20 -_0800D328: .4byte gUnknown_202DB74 -_0800D32C: - strh r6, [r2] -_0800D32E: - adds r2, 0x2 - cmp r2, r5 - bls _0800D300 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_800D2EC - - thumb_func_start sub_800D33C -sub_800D33C: - push {r4,r5,lr} - movs r5, 0 - ldr r1, _0800D370 - ldr r4, _0800D374 - ldr r0, [r4] - str r0, [r1] - ldr r0, _0800D378 - ldr r1, _0800D37C - bl sub_800D820 - adds r2, r0, 0 - str r2, [r4] - ldr r1, _0800D380 - ldrb r0, [r1] - cmp r0, 0 - bne _0800D384 - movs r0, 0x80 - lsls r0, 1 - ands r0, r2 - cmp r0, 0 - beq _0800D36A - movs r0, 0x1 - strb r0, [r1] -_0800D36A: - movs r0, 0 - b _0800D40E - .align 2, 0 -_0800D370: .4byte gUnknown_202DB6C -_0800D374: .4byte gUnknown_202DB68 -_0800D378: .4byte gUnknown_202DB20 -_0800D37C: .4byte gUnknown_202DB30 -_0800D380: .4byte gUnknown_202DB70 -_0800D384: - movs r0, 0x80 - lsls r0, 5 - ands r0, r2 - cmp r0, 0 - beq _0800D392 - movs r0, 0x3 - b _0800D40E -_0800D392: - movs r0, 0x80 - lsls r0, 6 - ands r0, r2 - cmp r0, 0 - beq _0800D3A0 - movs r0, 0x4 - b _0800D40E -_0800D3A0: - movs r0, 0x80 - lsls r0, 8 - ands r0, r2 - cmp r0, 0 - beq _0800D3BA - lsls r1, r2, 28 - lsrs r1, 28 - lsls r0, r2, 20 - lsrs r0, 28 - cmp r1, r0 - beq _0800D3BA - movs r0, 0x5 - b _0800D40E -_0800D3BA: - ldr r4, _0800D3F8 - ldr r0, _0800D3FC - ldr r2, [r4] - ldr r0, [r0] - orrs r0, r2 - movs r1, 0xE - ands r0, r1 - cmp r0, 0 - beq _0800D40C - ldr r0, _0800D400 - ldr r1, [r0] - lsls r1, 26 - lsrs r1, 30 - movs r0, 0x1 - lsls r0, r1 - ands r2, r0 - cmp r2, 0 - beq _0800D40C - bl sub_800D1E0 - ldr r0, [r4] - bl sub_800D224 - ldr r0, [r4] - bl sub_800D1C0 - lsls r0, 24 - cmp r0, 0 - beq _0800D404 - movs r0, 0x2 - b _0800D40E - .align 2, 0 -_0800D3F8: .4byte gUnknown_202DB68 -_0800D3FC: .4byte gUnknown_202DB6C -_0800D400: .4byte 0x04000128 -_0800D404: - ldr r0, [r4] - bl sub_800D2EC - movs r5, 0x1 -_0800D40C: - adds r0, r5, 0 -_0800D40E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_800D33C - - thumb_func_start sub_800D414 -sub_800D414: - push {r4,lr} - ldr r0, _0800D468 - movs r4, 0 - str r4, [r0] - ldr r0, _0800D46C - str r4, [r0] - ldr r0, _0800D470 - strb r4, [r0] - ldr r0, _0800D474 - str r4, [r0] - ldr r0, _0800D478 - str r4, [r0] - str r4, [r0, 0x4] - ldr r0, _0800D47C - movs r1, 0x10 - bl MemoryClear16 - ldr r0, _0800D480 - movs r1, 0x20 - bl MemoryClear16 - ldr r0, _0800D484 - str r4, [r0] - ldr r0, _0800D488 - str r4, [r0] - str r4, [r0, 0x4] - ldr r0, _0800D48C - movs r1, 0x84 - lsls r1, 1 - bl MemoryClear16 - ldr r0, _0800D490 - movs r1, 0x84 - lsls r1, 2 - bl MemoryClear16 - bl sub_800D6AC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800D468: .4byte gUnknown_202DB68 -_0800D46C: .4byte gUnknown_202DB6C -_0800D470: .4byte gUnknown_202DB70 -_0800D474: .4byte gUnknown_202DB74 -_0800D478: .4byte gUnknown_202DB60 -_0800D47C: .4byte gUnknown_202DB20 -_0800D480: .4byte gUnknown_202DB30 -_0800D484: .4byte gUnknown_202DB50 -_0800D488: .4byte gUnknown_202DB58 -_0800D48C: .4byte gUnknown_202D808 -_0800D490: .4byte gUnknown_202D910 - thumb_func_end sub_800D414 - - thumb_func_start sub_800D494 -sub_800D494: - push {r4,lr} - ldr r0, _0800D4E4 - movs r4, 0 - str r4, [r0] - ldr r0, _0800D4E8 - str r4, [r0] - ldr r0, _0800D4EC - strb r4, [r0] - ldr r0, _0800D4F0 - str r4, [r0] - ldr r0, _0800D4F4 - str r4, [r0] - str r4, [r0, 0x4] - ldr r0, _0800D4F8 - movs r1, 0x10 - bl MemoryClear16 - ldr r0, _0800D4FC - movs r1, 0x20 - bl MemoryClear16 - ldr r0, _0800D500 - str r4, [r0] - ldr r0, _0800D504 - str r4, [r0] - str r4, [r0, 0x4] - ldr r0, _0800D508 - movs r1, 0x84 - lsls r1, 1 - bl MemoryClear16 - ldr r0, _0800D50C - movs r1, 0x84 - lsls r1, 2 - bl MemoryClear16 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800D4E4: .4byte gUnknown_202DB68 -_0800D4E8: .4byte gUnknown_202DB6C -_0800D4EC: .4byte gUnknown_202DB70 -_0800D4F0: .4byte gUnknown_202DB74 -_0800D4F4: .4byte gUnknown_202DB60 -_0800D4F8: .4byte gUnknown_202DB20 -_0800D4FC: .4byte gUnknown_202DB30 -_0800D500: .4byte gUnknown_202DB50 -_0800D504: .4byte gUnknown_202DB58 -_0800D508: .4byte gUnknown_202D808 -_0800D50C: .4byte gUnknown_202D910 - thumb_func_end sub_800D494 - - thumb_func_start sub_800D510 -sub_800D510: - ldr r1, _0800D51C - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] - bx lr - .align 2, 0 -_0800D51C: .4byte 0x04000134 - thumb_func_end sub_800D510 - - thumb_func_start sub_800D520 -sub_800D520: - push {r4,r5,lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0x1 - strh r0, [r1] - ldr r0, _0800D568 - ldrb r1, [r0] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - bne _0800D55C - mov r1, sp - mov r0, sp - ldrh r0, [r0] - subs r0, 0x1 - strh r0, [r1] - ldrh r0, [r1] - ldr r1, _0800D56C - cmp r0, r1 - beq _0800D55C - mov r4, sp - adds r5, r1, 0 -_0800D54C: - bl VBlankIntrWait - ldrh r0, [r4] - subs r0, 0x1 - strh r0, [r4] - ldrh r0, [r4] - cmp r0, r5 - bne _0800D54C -_0800D55C: - bl sub_800D7D0 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800D568: .4byte 0x04000128 -_0800D56C: .4byte 0x0000ffff - thumb_func_end sub_800D520 - - thumb_func_start sub_800D570 -sub_800D570: - push {lr} - bl sub_800D7B8 - pop {r0} - bx r0 - thumb_func_end sub_800D570 - - thumb_func_start sub_800D57C -sub_800D57C: - ldr r0, _0800D584 - ldrb r0, [r0] - bx lr - .align 2, 0 -_0800D584: .4byte gUnknown_202DB70 - thumb_func_end sub_800D57C - - thumb_func_start sub_800D588 -sub_800D588: - ldr r0, _0800D598 - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - bx lr - .align 2, 0 -_0800D598: .4byte gUnknown_202DB68 - thumb_func_end sub_800D588 - - thumb_func_start sub_800D59C -sub_800D59C: - push {r4-r6,lr} - adds r3, r0, 0 - adds r2, r1, 0 - movs r5, 0 - ldr r6, _0800D5F4 - ldr r4, _0800D5F8 - adds r0, r2, 0x1 - movs r1, 0x2 - negs r1, r1 - ands r0, r1 - adds r0, 0x8 - str r0, [r4] - adds r0, r6, 0x4 - adds r1, r3, 0 - bl CpuCopy - ldr r0, _0800D5FC - strh r0, [r6] - strh r5, [r6, 0x2] - movs r2, 0 - ldr r0, [r4] - lsrs r0, 1 - subs r0, 0x2 - cmp r5, r0 - bcs _0800D5DE - adds r3, r0, 0 - adds r1, r6, 0 -_0800D5D2: - ldrh r0, [r1] - adds r5, r0 - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r3 - bcc _0800D5D2 -_0800D5DE: - ldr r2, _0800D5F4 - mvns r1, r5 - ldr r0, _0800D5F8 - ldr r0, [r0] - lsrs r0, 1 - subs r1, r0 - strh r1, [r2, 0x2] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800D5F4: .4byte gUnknown_202D808 -_0800D5F8: .4byte gUnknown_202DB74 -_0800D5FC: .4byte 0x0000fdfd - thumb_func_end sub_800D59C - - thumb_func_start sub_800D600 -sub_800D600: - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - ldr r0, _0800D64C - mov r8, r0 - ldr r7, _0800D650 - ldr r0, [r7] - lsrs r0, 1 - subs r0, 0x2 - mov r12, r0 - movs r5, 0 -_0800D618: - movs r4, 0 - mov r2, r8 - adds r1, r5, r2 - movs r3, 0 - cmp r4, r12 - bcs _0800D636 - ldr r0, [r7] - lsrs r0, 1 - subs r2, r0, 0x2 -_0800D62A: - ldrh r0, [r1] - adds r4, r0 - adds r1, 0x2 - adds r3, 0x1 - cmp r3, r2 - bcc _0800D62A -_0800D636: - ldr r0, [r7] - lsrs r0, 1 - ldr r2, _0800D654 - adds r1, r2, 0 - subs r1, r0 - lsls r0, r4, 16 - lsls r1, 16 - cmp r0, r1 - beq _0800D658 - movs r0, 0 - b _0800D666 - .align 2, 0 -_0800D64C: .4byte gUnknown_202D910 -_0800D650: .4byte gUnknown_202DB74 -_0800D654: .4byte 0x0000ffff -_0800D658: - movs r0, 0x84 - lsls r0, 1 - adds r5, r0 - adds r6, 0x1 - cmp r6, 0x1 - bls _0800D618 - movs r0, 0x1 -_0800D666: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_800D600 - - thumb_func_start sub_800D670 -sub_800D670: - push {lr} - adds r3, r1, 0 - lsls r1, r0, 5 - adds r1, r0 - lsls r1, 3 - ldr r0, _0800D688 - adds r1, r0 - adds r0, r3, 0 - bl CpuCopy - pop {r0} - bx r0 - .align 2, 0 -_0800D688: .4byte gUnknown_202D914 - thumb_func_end sub_800D670 - - thumb_func_start sub_800D68C -sub_800D68C: - push {lr} - adds r1, r0, 0 - lsls r0, r1, 5 - adds r0, r1 - lsls r0, 3 - ldr r1, _0800D6A8 - adds r0, r1 - movs r2, 0x84 - lsls r2, 1 - movs r1, 0 - bl MemoryFill8 - pop {r0} - bx r0 - .align 2, 0 -_0800D6A8: .4byte gUnknown_202D910 - thumb_func_end sub_800D68C - - thumb_func_start sub_800D6AC -sub_800D6AC: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - ldr r3, _0800D784 - movs r4, 0 - strh r4, [r3] - ldr r2, _0800D788 - ldrh r1, [r2] - ldr r0, _0800D78C - ands r0, r1 - strh r0, [r2] - movs r0, 0x1 - strh r0, [r3] - ldr r0, _0800D790 - strh r4, [r0] - subs r2, 0xD8 - movs r0, 0x80 - lsls r0, 6 - str r0, [r2] - ldrh r0, [r2] - ldr r3, _0800D794 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r2] - movs r0, 0 - str r0, [sp] - ldr r4, _0800D798 - ldr r2, _0800D79C - mov r0, sp - adds r1, r4, 0 - bl CpuSet - ldr r0, _0800D7A0 - ldr r1, _0800D7A4 - ldr r2, _0800D7A8 - bl CpuSet - ldr r0, _0800D7AC - ldr r1, _0800D7B0 - ldr r2, _0800D7B4 - bl CpuSet - movs r0, 0x1 - negs r0, r0 - str r0, [r4, 0x14] - adds r0, r4, 0 - adds r0, 0x60 - str r0, [r4, 0x28] - adds r0, 0x18 - str r0, [r4, 0x2C] - movs r3, 0 - adds r5, r4, 0 - adds r5, 0xC0 - movs r2, 0 - movs r7, 0x30 - adds r7, r4 - mov r8, r7 - movs r0, 0x90 - adds r0, r4 - mov r12, r0 - adds r6, r4, 0 - adds r6, 0xA8 - movs r7, 0x40 - adds r7, r4 - mov r9, r7 -_0800D732: - lsls r1, r3, 2 - mov r7, r12 - adds r0, r2, r7 - mov r7, r8 - adds r7, 0x4 - mov r8, r7 - subs r7, 0x4 - stm r7!, {r0} - adds r0, r2, r6 - mov r7, r9 - adds r7, 0x4 - mov r9, r7 - subs r7, 0x4 - stm r7!, {r0} - adds r0, r4, 0 - adds r0, 0x50 - adds r1, r0 - str r5, [r1] - adds r5, 0x48 - adds r2, 0x48 - adds r3, 0x1 - cmp r3, 0x1 - ble _0800D732 - movs r0, 0 - ldr r3, _0800D784 - strh r0, [r3] - ldr r2, _0800D788 - ldrh r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r2] - movs r0, 0x1 - strh r0, [r3] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800D784: .4byte 0x04000208 -_0800D788: .4byte 0x04000200 -_0800D78C: .4byte 0x0000ff3f -_0800D790: .4byte 0x04000134 -_0800D794: .4byte 0x00004003 -_0800D798: .4byte gUnknown_202DCF8 -_0800D79C: .4byte 0x05000048 -_0800D7A0: .4byte sub_80001E8 -_0800D7A4: .4byte gUnknown_202DB78 -_0800D7A8: .4byte 0x04000010 -_0800D7AC: .4byte sub_8000228 -_0800D7B0: .4byte gUnknown_202DBB8 -_0800D7B4: .4byte 0x04000050 - thumb_func_end sub_800D6AC - - thumb_func_start sub_800D7B8 -sub_800D7B8: - push {lr} - ldr r1, _0800D7CC - ldrb r0, [r1] - cmp r0, 0 - beq _0800D7C6 - movs r0, 0x1 - strb r0, [r1, 0x8] -_0800D7C6: - pop {r0} - bx r0 - .align 2, 0 -_0800D7CC: .4byte gUnknown_202DCF8 - thumb_func_end sub_800D7B8 - - thumb_func_start sub_800D7D0 -sub_800D7D0: - push {r4,lr} - ldr r3, _0800D804 - movs r4, 0 - strh r4, [r3] - ldr r2, _0800D808 - ldrh r1, [r2] - ldr r0, _0800D80C - ands r0, r1 - strh r0, [r2] - movs r0, 0x1 - strh r0, [r3] - ldr r1, _0800D810 - ldr r2, _0800D814 - adds r0, r2, 0 - strh r0, [r1] - subs r1, 0x1C - ldr r0, _0800D818 - str r0, [r1] - adds r1, 0xF6 - movs r0, 0xC0 - strh r0, [r1] - ldr r0, _0800D81C - strb r4, [r0, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800D804: .4byte 0x04000208 -_0800D808: .4byte 0x04000200 -_0800D80C: .4byte 0x0000ff3f -_0800D810: .4byte 0x04000128 -_0800D814: .4byte 0x00002003 -_0800D818: .4byte 0x0000b1fc -_0800D81C: .4byte gUnknown_202DCF8 - thumb_func_end sub_800D7D0 - - thumb_func_start sub_800D820 -sub_800D820: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - mov r12, r1 - ldr r5, _0800D844 - ldr r6, [r5] - ldr r0, _0800D848 - ldrb r2, [r0, 0x1] - adds r7, r0, 0 - cmp r2, 0x1 - beq _0800D8AA - cmp r2, 0x1 - bgt _0800D84C - cmp r2, 0 - beq _0800D852 - b _0800D8E8 - .align 2, 0 -_0800D844: .4byte 0x04000128 -_0800D848: .4byte gUnknown_202DCF8 -_0800D84C: - cmp r2, 0x2 - beq _0800D8DC - b _0800D8E8 -_0800D852: - ldr r1, [r7, 0x14] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _0800D8A6 - movs r0, 0x88 - adds r4, r6, 0 - ands r4, r0 - cmp r4, 0x8 - bne _0800D8E8 - movs r1, 0x4 - adds r0, r6, 0 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0800D8A6 - ldr r3, _0800D8C0 - strh r0, [r3] - ldr r2, _0800D8C4 - ldrh r1, [r2] - ldr r0, _0800D8C8 - ands r0, r1 - strh r0, [r2] - ldrh r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strh r0, [r2] - movs r0, 0x1 - strh r0, [r3] - ldrb r1, [r5, 0x1] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - ldr r1, _0800D8CC - movs r0, 0xC0 - strh r0, [r1] - subs r1, 0xF6 - ldr r0, _0800D8D0 - str r0, [r1] - strb r4, [r7] -_0800D8A6: - movs r0, 0x1 - strb r0, [r7, 0x1] -_0800D8AA: - ldr r1, _0800D8D4 - ldrb r0, [r1, 0x2] - cmp r0, 0 - beq _0800D8DC - ldrb r0, [r1, 0xA] - cmp r0, 0x7 - bhi _0800D8D8 - adds r0, 0x1 - strb r0, [r1, 0xA] - b _0800D8DC - .align 2, 0 -_0800D8C0: .4byte 0x04000208 -_0800D8C4: .4byte 0x04000200 -_0800D8C8: .4byte 0x0000ff7f -_0800D8CC: .4byte 0x04000202 -_0800D8D0: .4byte 0x0000b1fc -_0800D8D4: .4byte gUnknown_202DCF8 -_0800D8D8: - movs r0, 0x2 - strb r0, [r1, 0x1] -_0800D8DC: - mov r0, r12 - bl sub_800D9B8 - mov r0, r8 - bl sub_800D944 -_0800D8E8: - ldr r1, _0800D908 - ldrb r0, [r1, 0xB] - adds r0, 0x1 - strb r0, [r1, 0xB] - ldrb r3, [r1, 0x3] - ldrb r0, [r1, 0x2] - lsls r2, r0, 8 - ldrb r0, [r1] - adds r7, r1, 0 - cmp r0, 0x8 - bne _0800D90C - movs r0, 0x80 - orrs r0, r2 - orrs r0, r3 - b _0800D910 - .align 2, 0 -_0800D908: .4byte gUnknown_202DCF8 -_0800D90C: - adds r0, r3, 0 - orrs r0, r2 -_0800D910: - adds r2, r0, 0 - ldrb r0, [r7, 0x9] - cmp r0, 0 - beq _0800D91E - movs r0, 0x80 - lsls r0, 5 - orrs r2, r0 -_0800D91E: - ldrb r0, [r7, 0xA] - lsrs r0, 3 - lsls r1, r0, 15 - lsls r0, r6, 26 - lsrs r0, 30 - cmp r0, 0x1 - bls _0800D936 - movs r0, 0x80 - lsls r0, 6 - orrs r0, r1 - orrs r0, r2 - b _0800D93A -_0800D936: - adds r0, r2, 0 - orrs r0, r1 -_0800D93A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_800D820 - - thumb_func_start sub_800D944 -sub_800D944: - push {r4,r5,lr} - movs r5, 0 - ldr r4, _0800D9AC - ldr r2, [r4, 0x28] - ldrb r1, [r4, 0xB] - strb r1, [r2] - ldr r3, [r4, 0x28] - ldrb r1, [r4, 0x2] - ldrb r2, [r4, 0x3] - eors r1, r2 - strb r1, [r3, 0x1] - ldr r1, [r4, 0x28] - strh r5, [r1, 0x2] - ldr r1, [r4, 0x28] - adds r1, 0x4 - ldr r2, _0800D9B0 - bl CpuSet - movs r2, 0 - ldr r1, [r4, 0x28] -_0800D96C: - ldrh r0, [r1] - adds r5, r0 - adds r1, 0x2 - adds r2, 0x1 - cmp r2, 0x9 - bls _0800D96C - adds r2, r4, 0 - ldr r1, [r2, 0x28] - mvns r0, r5 - subs r0, 0xC - strh r0, [r1, 0x2] - ldrb r0, [r2] - cmp r0, 0 - beq _0800D98E - ldr r1, _0800D9B4 - movs r0, 0 - strh r0, [r1] -_0800D98E: - movs r0, 0x1 - negs r0, r0 - str r0, [r4, 0x14] - ldrb r0, [r4] - cmp r0, 0 - beq _0800D9A6 - ldrb r0, [r4, 0x8] - cmp r0, 0 - beq _0800D9A6 - ldr r1, _0800D9B4 - movs r0, 0xC0 - strh r0, [r1] -_0800D9A6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800D9AC: .4byte gUnknown_202DCF8 -_0800D9B0: .4byte 0x04000004 -_0800D9B4: .4byte 0x0400010e - thumb_func_end sub_800D944 - - thumb_func_start sub_800D9B8 -sub_800D9B8: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - str r0, [sp, 0x8] - ldr r0, _0800DA68 - bl _call_via_r0 - str r0, [sp] - ldr r1, _0800DA6C - movs r0, 0 - strb r0, [r1, 0x3] - movs r6, 0 - add r0, sp, 0x4 - mov r10, r0 - mov r9, r1 - movs r1, 0x50 - add r1, r9 - mov r8, r1 -_0800D9E2: - movs r3, 0 - movs r2, 0 - lsls r5, r6, 2 - mov r0, sp - adds r4, r0, r6 - adds r7, r6, 0x1 - mov r1, r8 - adds r0, r5, r1 - ldr r1, [r0] -_0800D9F4: - ldrh r0, [r1] - adds r3, r0 - adds r1, 0x2 - adds r2, 0x1 - cmp r2, 0x9 - bls _0800D9F4 - ldrb r0, [r4] - cmp r0, 0 - beq _0800DA32 - lsls r0, r3, 16 - asrs r0, 16 - movs r2, 0xD - negs r2, r2 - cmp r0, r2 - bne _0800DA32 - mov r1, r8 - adds r0, r5, r1 - ldr r0, [r0] - adds r0, 0x4 - lsls r1, r6, 4 - ldr r2, [sp, 0x8] - adds r1, r2, r1 - ldr r2, _0800DA70 - bl CpuSet - movs r0, 0x1 - lsls r0, r6 - mov r2, r9 - ldrb r1, [r2, 0x3] - orrs r0, r1 - strb r0, [r2, 0x3] -_0800DA32: - movs r0, 0 - str r0, [sp, 0x4] - mov r1, r8 - adds r0, r5, r1 - ldr r1, [r0] - adds r1, 0x4 - mov r0, r10 - ldr r2, _0800DA74 - bl CpuSet - adds r6, r7, 0 - cmp r6, 0x1 - ble _0800D9E2 - ldr r1, _0800DA6C - ldrb r0, [r1, 0x2] - ldrb r2, [r1, 0x3] - orrs r0, r2 - strb r0, [r1, 0x2] - ldrb r0, [r1, 0x3] - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0800DA68: .4byte gUnknown_202DB78 -_0800DA6C: .4byte gUnknown_202DCF8 -_0800DA70: .4byte 0x04000004 -_0800DA74: .4byte 0x05000004 - thumb_func_end sub_800D9B8 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.ld b/ld_script.ld index 91d6b46ad..73fcce55e 100755 --- a/ld_script.ld +++ b/ld_script.ld @@ -48,7 +48,7 @@ SECTIONS { { asm/crt0.o(.text); src/code_80001DC.o(.text); - asm/arm_func.o(.text); + src/arm_funcs.o(.text); src/main_loops.o(.text); src/event_flag.o(.text); src/code_8002774.o(.text); @@ -80,7 +80,6 @@ SECTIONS { src/cpu.o(.text); src/flash.o(.text); src/code_800D090.o(.text); - asm/code_800D090.o(.text); src/code_800D090_1.o(.text); src/code_800DAC0.o(.text); asm/code_800DAC0.o(.text); diff --git a/asm/arm_func.s b/src/arm_funcs.s similarity index 98% rename from asm/arm_func.s rename to src/arm_funcs.s index f10e34275..2dbdc27ee 100644 --- a/asm/arm_func.s +++ b/src/arm_funcs.s @@ -1,11 +1,11 @@ #include "asm/constants/gba_constants.inc" #include "asm/macros.inc" - + .syntax unified .text - arm_func_start sub_80001E8 + arm_func_start sub_80001E8 sub_80001E8: stmdb sp!, {r4-r11} mov r12, 0x4000000 @ REG_BASE diff --git a/src/code_800D090.c b/src/code_800D090.c index b81f9c73e..202150e77 100644 --- a/src/code_800D090.c +++ b/src/code_800D090.c @@ -1,8 +1,7 @@ #include "global.h" #include "music.h" - -extern u32 gUnknown_202DB60[2]; -extern u16 gUnknown_202DB30[2][8]; +#include "memory.h" +#include "cpu.h" void Hang(void) { @@ -113,16 +112,75 @@ void nullsub_187(void) { } -u32 sub_800D1C0(void) +// New file? +union PtrU16U8 +{ + u16 *asU16; + u8 *asU8; +}; + +// Important note: This struct is used in arm_funcs.s, which means the offsets of this struct's memebers CANNOT be changed, unless sub_80001E8 and sub_8000228 are accordingly changed. +struct UnkStruct_202DCF8 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + s32 unk4; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u8 fillC[0x14-0xC]; + s32 unk14; + s32 unk18[4]; + union PtrU16U8 unk28; + u16 *unk2C; + u16 *unk30[4]; + u16 *unk40[4]; + u16 *unk50[4]; + u16 unk60[12]; + u16 unk78[12]; + u16 unk90[2][3][12]; +}; + +EWRAM_DATA static u16 gUnknown_202D808[132] = {0}; +EWRAM_DATA static u16 gUnknown_202D910[2][132] = {0}; +EWRAM_DATA static u16 gUnknown_202DB20[8] = {0}; +EWRAM_DATA static u16 gUnknown_202DB30[2][8] = {0}; +EWRAM_DATA static u32 gUnknown_202DB50[2] = {0}; // Only first index used +EWRAM_DATA static u32 gUnknown_202DB58[2] = {0}; +EWRAM_DATA static u32 gUnknown_202DB60[2] = {0}; +EWRAM_DATA static u32 gUnknown_202DB68 = 0; +EWRAM_DATA static s32 gUnknown_202DB6C = 0; +EWRAM_DATA static u8 gUnknown_202DB70 = 0; +EWRAM_DATA static u32 gUnknown_202DB74 = 0; +// These should not be in EWRAM, but in IWRAM... +EWRAM_DATA static u32 gUnknown_202DB78[16] = {0}; +EWRAM_DATA u32 gUnknown_202DBB8[80] = {0}; + +EWRAM_DATA struct UnkStruct_202DCF8 gUnknown_202DCF8 = {0}; + +extern u32 sub_80001E8(void); +extern void sub_8000228(void); + +void sub_800D6AC(void); +void sub_800D7D0(void); +static u32 sub_800D820(u16 *a0, u16 a1[2][8]); +static void sub_800D7B8(void); +static void sub_800D944(u16 *a0); +static u32 sub_800D9B8(u16 dst[2][8]); + +bool8 sub_800D1C0(u32 unused) { if(gUnknown_202DB60[0] != 2) - return 0; + return FALSE; if(gUnknown_202DB60[1] != 2) - return 0; - return 1; + return FALSE; + return TRUE; } -void sub_800D1E0(void) +static void sub_800D1E0(void) { s32 iVar1; u32 iVar2; @@ -137,3 +195,362 @@ void sub_800D1E0(void) } } } + +static void sub_800D224(s32 a0) +{ + s32 i; + + for (i = 0; i < 2; i++) { + if (((a0 >> i) & 1) && gUnknown_202DB60[i] == 1) { + u32 j; + u16 *ptr = gUnknown_202D910[i]; + + for (j = 0; j < 8; j++) { + if (gUnknown_202DB58[i] + j >= gUnknown_202DB74 / 2) { + gUnknown_202DB60[i] = 2; + break; + } + ptr[gUnknown_202DB58[i] + j] = gUnknown_202DB30[i][j]; + } + + gUnknown_202DB58[i] += 8; + } + } +} + +static void sub_800D2EC(u32 unused) +{ + u32 i; + u16 *ptr = gUnknown_202D808; + + for (i = 0; i < 8; i++) { + if (gUnknown_202DB50[0] < (gUnknown_202DB74 / 2)) { + gUnknown_202DB20[i] = ptr[gUnknown_202DB50[0]++]; + } + else { + gUnknown_202DB20[i] = 0xFCFC; + } + } +} + +s32 sub_800D33C(void) +{ + s32 ret = 0; + + gUnknown_202DB6C = gUnknown_202DB68; + gUnknown_202DB68 = sub_800D820(gUnknown_202DB20, gUnknown_202DB30); + if (gUnknown_202DB70 == 0) { + if (gUnknown_202DB68 & 0x100) { + gUnknown_202DB70 = 1; + } + return 0; + } + else if (gUnknown_202DB68 & 0x1000) { + return 3; + } + else if (gUnknown_202DB68 & 0x2000) { + return 4; + } + else if (gUnknown_202DB68 & 0x8000) { + u32 bits1, bits2; + + bits1 = gUnknown_202DB68 << 28; + bits1 >>= 28; + + bits2 = gUnknown_202DB68 << 20; + bits2 >>= 28; + if (bits1 != bits2) + return 5; + } + + if (((gUnknown_202DB68 | gUnknown_202DB6C) & 0xE)) { + u32 si0Cnt = (*(vu32 *)REG_ADDR_SIOCNT); + si0Cnt <<= 26; + si0Cnt >>= 30; + if ((gUnknown_202DB68 & (1 << si0Cnt))) { + sub_800D1E0(); + sub_800D224(gUnknown_202DB68); + if (sub_800D1C0(gUnknown_202DB68)) { + return 2; + } + sub_800D2EC(gUnknown_202DB68); + ret = 1; + } + } + + return ret; +} + +static inline void ClearUnkMemory(void) +{ + gUnknown_202DB68 = 0; + gUnknown_202DB6C = 0; + gUnknown_202DB70 = 0; + gUnknown_202DB74 = 0; + gUnknown_202DB60[0] = 0; + gUnknown_202DB60[1] = 0; + MemoryClear16(gUnknown_202DB20, sizeof(gUnknown_202DB20)); + MemoryClear16(gUnknown_202DB30[0], sizeof(gUnknown_202DB30)); + gUnknown_202DB50[0] = 0; + gUnknown_202DB58[0] = 0; + gUnknown_202DB58[1] = 0; + MemoryClear16(gUnknown_202D808, sizeof(gUnknown_202D808)); + MemoryClear16(gUnknown_202D910[0], sizeof(gUnknown_202D910)); +} + +// These two are the same, except sub_800D414 calls an additional func +void sub_800D414(void) +{ + ClearUnkMemory(); + sub_800D6AC(); +} + +void sub_800D494(void) +{ + ClearUnkMemory(); +} + +void sub_800D510(void) +{ + REG_RCNT = 0x8000; +} + +void sub_800D520(void) +{ + vu16 var = 1; // Has to be u16, not s16 + u8 si0Cnt = (*(vu8 *)REG_ADDR_SIOCNT); // First 8 bits + + if (!(si0Cnt & 0x30)) { + while (--var != (u16) -1) { + VBlankIntrWait(); + } + } + sub_800D7D0(); +} + +void sub_800D570(void) +{ + sub_800D7B8(); +} + +UNUSED static u8 sub_800D57C(void) +{ + return gUnknown_202DB70; +} + +u8 sub_800D588(void) +{ + return (gUnknown_202DB68 & 0x80); +} + +void sub_800D59C(u16 *src, u32 size) +{ + u32 i; + u16 bits; + s32 count = 0; + u16 *dst = gUnknown_202D808; + + gUnknown_202DB74 = ((size + 1) & ~(1)) + 8; + CpuCopy(&dst[2], src, size); + bits = 0xFDFD; + dst[0] = bits; + dst[1] = 0; + for (i = 0; i < (gUnknown_202DB74 / 2) - 2; i++) { + count += dst[i]; + } + + gUnknown_202D808[1] = ~count - (gUnknown_202DB74 / 2); +} + +bool8 sub_800D600(void) +{ + u32 i, j; + + for (i = 0; i < 2; i++) { + s32 count = 0; + u16 *ptr = gUnknown_202D910[i]; + + for (j = 0; j < (gUnknown_202DB74 / 2) - 2; j++) { + count += ptr[j]; + } + + // Interesting casts and arithmetics here. + if ((s16) count != (s16) (-1 - (gUnknown_202DB74 / 2))) + return FALSE; + } + + return TRUE; +} + +void sub_800D670(u32 id, void *dst, u32 size) +{ + CpuCopy(dst, &gUnknown_202D910[id][2], size); +} + +void sub_800D68C(u32 id) +{ + MemoryFill8(gUnknown_202D910[id], 0, sizeof(gUnknown_202D910[0])); +} + +void sub_800D6AC(void) +{ + s32 i; + + REG_IME = 0; + REG_IE &= 0xFF3F; + REG_IME = 1; + REG_RCNT = 0; + (*(vu32 *)REG_ADDR_SIOCNT) = 0x2000; + REG_SIOCNT |= 0x4003; + CpuFill32(0, &gUnknown_202DCF8, 0x120); + CpuCopy32(sub_80001E8, gUnknown_202DB78, sizeof(gUnknown_202DB78)); + CpuCopy32(sub_8000228, gUnknown_202DBB8, sizeof(gUnknown_202DBB8)); + gUnknown_202DCF8.unk14 = -1; + gUnknown_202DCF8.unk28.asU16 = gUnknown_202DCF8.unk60; + gUnknown_202DCF8.unk2C = gUnknown_202DCF8.unk78; + + for (i = 0; i < 2; i++) { + gUnknown_202DCF8.unk30[i] = gUnknown_202DCF8.unk90[i][0]; + gUnknown_202DCF8.unk40[i] = gUnknown_202DCF8.unk90[i][1]; + gUnknown_202DCF8.unk50[i] = gUnknown_202DCF8.unk90[i][2]; + } + + REG_IME = 0; + REG_IE |= 0x80; + REG_IME = 1; +} + +static void sub_800D7B8(void) +{ + if (gUnknown_202DCF8.unk0 != 0) { + gUnknown_202DCF8.unk8 = 1; + } +} + +void sub_800D7D0(void) +{ + REG_IME = 0; + REG_IE &= 0xFF3F; + REG_IME = 1; + REG_SIOCNT = 0x2003; + REG_TM3CNT = 0xB1FC; + REG_IF = 0xC0; + gUnknown_202DCF8.unk8 = 0; +} + +static u32 sub_800D820(u16 *a0, u16 a1[2][8]) +{ + u32 ret, var; + u32 bits1, bits2, b; + u32 r3, r2; + u32 si0cnt = (*(vu32 *)REG_ADDR_SIOCNT); + + switch (gUnknown_202DCF8.unk1) { + case 0: + if (gUnknown_202DCF8.unk14 == -1) { + u16 bits = si0cnt & 0x88; + if (bits != 8) + break; + if (!((u8)(si0cnt & 0x4))) { + vu8 *sioPtru8; + u32 sioBits; + + REG_IME = 0; + REG_IE &= 0xFF7F; + REG_IE |= 0x40; + REG_IME = 1; + sioPtru8 = ((vu8 *)REG_ADDR_SIOCNT); + sioBits = sioPtru8[1] & ~0x40; + sioPtru8[1] = sioBits; + REG_IF = 0xC0; + REG_TM3CNT = 0xB1FC; + gUnknown_202DCF8.unk0 = 8; + } + } + gUnknown_202DCF8.unk1 = 1; + // fallthrough + case 1: + if (gUnknown_202DCF8.unk2 != 0) { + if (gUnknown_202DCF8.unkA < 8) { + gUnknown_202DCF8.unkA++; + } + else { + gUnknown_202DCF8.unk1 = 2; + } + } + // fallthrough + case 2: + sub_800D9B8(a1); + sub_800D944(a0); + break; + } + + gUnknown_202DCF8.unkB++; + r3 = gUnknown_202DCF8.unk3; + r2 = gUnknown_202DCF8.unk2 << 8; + b = ((gUnknown_202DCF8.unk0 == 8) ? 0x80 : 0) | r3 | r2; + var = b; + if (gUnknown_202DCF8.unk9 != 0) { + var |= 0x1000; + } + + bits1 = (gUnknown_202DCF8.unkA >> 3) << 15; + bits2 = (si0cnt << 26) >> 30; + if (bits2 >= 2) { + ret = 0x2000 | var | bits1; + } + else { + ret = var | bits1; + } + return ret; +} + +static void sub_800D944(u16 *src) +{ + u32 i; + s32 count = 0; + + gUnknown_202DCF8.unk28.asU8[0] = gUnknown_202DCF8.unkB; + gUnknown_202DCF8.unk28.asU8[1] = gUnknown_202DCF8.unk2 ^ gUnknown_202DCF8.unk3; + gUnknown_202DCF8.unk28.asU16[1] = 0; + CpuCopy32(src, &gUnknown_202DCF8.unk28.asU16[2], 0x10); + for (i = 0; i < 10; i++) { + count += gUnknown_202DCF8.unk28.asU16[i]; + } + + gUnknown_202DCF8.unk28.asU16[1] = ~count - 12; + if (gUnknown_202DCF8.unk0 != 0) { + REG_TM3CNT_H = 0; + } + gUnknown_202DCF8.unk14 = -1; + if (gUnknown_202DCF8.unk0 != 0 && gUnknown_202DCF8.unk8 != 0) { + REG_TM3CNT_H = 0xC0; + } +} + +static u32 sub_800D9B8(u16 dst[2][8]) +{ + s32 i; + u8 sp0[4]; + u32 (*func)(void) = (void *)gUnknown_202DB78; + u32 *spAsU32 = (u32 *)sp0; + + *spAsU32 = func(); + gUnknown_202DCF8.unk3 = 0; + for (i = 0; i < 2; i++) { + u32 j; + s32 count = 0; + + for (j = 0; j < 10; j++) { + count += gUnknown_202DCF8.unk50[i][j]; + } + + if (sp0[i] != 0 && (s16)(count) == (s16)(-13)) { + CpuCopy32(&gUnknown_202DCF8.unk50[i][2], dst[i], 0x10); + gUnknown_202DCF8.unk3 |= (1 << i); + } + CpuFill32(0, &gUnknown_202DCF8.unk50[i][2], 0x10); + } + gUnknown_202DCF8.unk2 |= gUnknown_202DCF8.unk3; + return gUnknown_202DCF8.unk3; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 36534ad61..1d7909447 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -19,40 +19,7 @@ .include "src/bg_control.o" .include "src/cpu.o" .space 0x4 - -gUnknown_202D808: /* 202D808 (sub_800D2EC - sub_800D59C) */ - .space 0x108 -gUnknown_202D910: /* 202D910 (sub_800D224 - sub_800D68C) */ - .space 0x4 -gUnknown_202D914: /* 202D914 (sub_800D670) */ - .space 0x20C -gUnknown_202DB20: /* 202DB20 (sub_800D2EC - sub_800D494) */ - .space 0x10 -gUnknown_202DB30: /* 202DB30 (sub_800D1E0 - sub_800D494) */ - .space 0x20 -gUnknown_202DB50: /* 202DB50 (sub_800D2EC - sub_800D494) */ - .space 0x8 -gUnknown_202DB58: /* 202DB58 (sub_800D224 - sub_800D494) */ - .space 0x8 -gUnknown_202DB60: /* 202DB60 (sub_800D1C0 - sub_800D494) */ - .space 0x8 -gUnknown_202DB68: /* 202DB68 (sub_800D33C - sub_800D588) */ - .space 0x4 -gUnknown_202DB6C: /* 202DB6C (sub_800D33C - sub_800D494) */ - .space 0x4 -gUnknown_202DB70: /* 202DB70 (sub_800D33C - sub_800D57C) */ - .space 0x4 -gUnknown_202DB74: /* 202DB74 (sub_800D224 - sub_800D600) */ - .space 0x4 - -gUnknown_202DB78: /* 202DB78 (sub_800D6AC - sub_800D9B8) */ - .space 0x40 -gUnknown_202DBB8: /* 202DBB8 (sub_800D6AC / data_80B9BB8) */ - .space 0x140 - -gUnknown_202DCF8: /* 202DCF8 (sub_80001E8 - sub_800D9B8) */ - .space 0x120 - + .include "src/code_800D090.o" .include "src/friend_areas_map.o" .include "src/code_80118A4.o" .include "src/save.o"