diff options
author | YamaArashi <shadow962@live.com> | 2016-06-03 23:27:19 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-06-05 13:43:46 -0700 |
commit | 2998cc719a41e38568468006d41539d1886412df (patch) | |
tree | 8cd0b9e274caf61efd70c6ace731637ad16e3df6 | |
parent | 2405230037bdc7804834eb10aed91bd538dabb4e (diff) |
link.c
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | asm/rom2.s | 4313 | ||||
-rw-r--r-- | asm/rom3.s | 234 | ||||
-rw-r--r-- | asm/rom5.s | 216 | ||||
-rw-r--r-- | charmap.txt | 1 | ||||
-rw-r--r-- | data/data2.s | 16 | ||||
-rw-r--r-- | ewram_syms.txt | 9 | ||||
-rw-r--r-- | generated.mk | 10 | ||||
-rw-r--r-- | graphics/interface/link_test_digits.pal | 19 | ||||
-rw-r--r-- | graphics/interface/link_test_digits.png | bin | 0 -> 269 bytes | |||
-rw-r--r-- | include/gba/io_reg.h | 38 | ||||
-rw-r--r-- | include/gba/types.h | 46 | ||||
-rw-r--r-- | include/global.h | 6 | ||||
-rw-r--r-- | include/link.h | 182 | ||||
-rw-r--r-- | include/link/.gitignore | 2 | ||||
-rw-r--r-- | include/main.h | 6 | ||||
-rw-r--r-- | include/task.h | 4 | ||||
-rw-r--r-- | include/text.h | 1 | ||||
-rw-r--r-- | iwram_syms.txt | 2 | ||||
-rw-r--r-- | ld_script.txt | 14 | ||||
-rw-r--r-- | src/link.c | 1810 | ||||
-rw-r--r-- | src/main.c | 38 | ||||
-rw-r--r-- | src/string_util.c | 15 | ||||
-rw-r--r-- | src/text.c | 4 |
24 files changed, 2385 insertions, 4603 deletions
@@ -35,7 +35,7 @@ PREPROC := tools/preproc/preproc C_SRCS := $(wildcard src/*.c) C_OBJS := $(C_SRCS:%.c=%.o) -ASM_OBJS := asm/crt0.o asm/rom2.o asm/rom3.o asm/rom4.o asm/rom5.o \ +ASM_OBJS := asm/crt0.o asm/rom3.o asm/rom4.o asm/rom5.o \ asm/libgcnmultiboot.o asm/m4a_1.o asm/m4a_3.o asm/libagbsyscall.o asm/libc.o DATA_ASM_OBJS := data/data1.o data/data2.o data/graphics.o data/sound_data.o diff --git a/asm/rom2.s b/asm/rom2.s deleted file mode 100644 index c05ebd17e..000000000 --- a/asm/rom2.s +++ /dev/null @@ -1,4313 +0,0 @@ - .include "asm/macros.s" - - .syntax unified - - .text - - thumb_func_start Task_DestroySelf -Task_DestroySelf: @ 8007080 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - pop {r0} - bx r0 - thumb_func_end Task_DestroySelf - - thumb_func_start sub_8007090 -sub_8007090: @ 8007090 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r1, 24 - lsrs r5, r1, 24 - mov r8, r5 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r3, 24 - lsrs r7, r3, 24 - ldr r0, _080070E0 - lsls r1, r4, 4 - movs r2, 0x20 - bl gpu_pal_apply - ldr r2, _080070E4 - ldr r0, _080070E8 - str r0, [r2] - lsls r0, r7, 14 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _080070EC - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _080070F0 - str r6, [r0] - str r4, [r0, 0x4] - cmp r5, 0x2 - beq _08007104 - cmp r5, 0x2 - bgt _080070F4 - cmp r5, 0x1 - beq _080070FC - b _0800711A - .align 2, 0 -_080070E0: .4byte gUnknown_081E7330 -_080070E4: .4byte 0x040000d4 -_080070E8: .4byte gUnknown_081E7350 -_080070EC: .4byte 0x80000110 -_080070F0: .4byte 0x03002fb0 -_080070F4: - mov r0, r8 - cmp r0, 0x3 - beq _0800710C - b _0800711A -_080070FC: - ldr r2, _08007100 - b _0800710E - .align 2, 0 -_08007100: .4byte 0x0400000a -_08007104: - ldr r2, _08007108 - b _0800710E - .align 2, 0 -_08007108: .4byte 0x0400000c -_0800710C: - ldr r2, _08007124 -_0800710E: - lsls r0, r6, 8 - movs r1, 0x1 - orrs r0, r1 - lsls r1, r7, 2 - orrs r0, r1 - strh r0, [r2] -_0800711A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08007124: .4byte 0x0400000e - thumb_func_end sub_8007090 - - thumb_func_start sub_8007128 -sub_8007128: @ 8007128 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r5, r1, 0 - adds r4, r2, 0 - adds r6, r3, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _0800718C - mov r2, r8 - lsls r1, r2, 4 - movs r2, 0x20 - bl gpu_pal_apply - ldr r2, _08007190 - ldr r0, _08007194 - str r0, [r2] - lsls r0, r6, 14 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _08007198 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _0800719C - str r4, [r0] - mov r1, r8 - str r1, [r0, 0x4] - ldr r0, _080071A0 - lsls r5, 2 - adds r5, r0 - ldr r0, [r5] - lsls r4, 8 - lsls r6, 2 - orrs r4, r6 - strh r4, [r0] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800718C: .4byte gUnknown_081E7330 -_08007190: .4byte 0x040000d4 -_08007194: .4byte gUnknown_081E7350 -_08007198: .4byte 0x80000110 -_0800719C: .4byte 0x03002fb0 -_080071A0: .4byte gBGControlRegs - thumb_func_end sub_8007128 - - thumb_func_start sub_80071A4 -sub_80071A4: @ 80071A4 - push {r4-r6,lr} - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - ldr r0, _08007248 - bl SetVBlankCallback - ldr r4, _0800724C - adds r0, r4, 0 - bl SetUpWindowConfig - adds r0, r4, 0 - bl sub_8071C4C - bl sub_8007CEC - ldr r1, _08007250 - ldr r2, _08007254 - adds r0, r2, 0 - strh r0, [r1] - bl sub_8007378 - ldr r0, _08007258 - ldrh r0, [r0, 0x20] - bl SeedRng - movs r4, 0 - ldr r6, _0800725C - movs r5, 0xFF -_080071E4: - bl Random - adds r1, r4, r6 - lsls r0, 16 - lsrs r0, 16 - ands r0, r5 - strb r0, [r1] - adds r4, 0x1 - cmp r4, 0x3 - ble _080071E4 - movs r0, 0 - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0 - bl sub_8007090 - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xAA - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08007260 - movs r1, 0 - bl CreateTask - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl fade_and_return_progress_probably - ldr r1, _08007264 - movs r0, 0 - str r0, [r1] - bl sub_8007280 - ldr r0, _08007268 - movs r1, 0 - bl CreateTask - ldr r0, _0800726C - bl SetMainCallback2 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08007248: .4byte sub_8007300 -_0800724C: .4byte gWindowConfig_81E6CE4 -_08007250: .4byte 0x03002b74 -_08007254: .4byte 0x00001111 -_08007258: .4byte 0x03001770 -_0800725C: .4byte 0x02024eae -_08007260: .4byte Task_DestroySelf -_08007264: .4byte 0x03000444 -_08007268: .4byte Task_LinkTest -_0800726C: .4byte CB2_80075CC - thumb_func_end sub_80071A4 - - thumb_func_start sub_8007270 -sub_8007270: @ 8007270 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0800727C - strh r0, [r1, 0x18] - bx lr - .align 2, 0 -_0800727C: .4byte 0x03002a00 - thumb_func_end sub_8007270 - - thumb_func_start sub_8007280 -sub_8007280: @ 8007280 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r3, _080072EC - ldr r2, _080072F0 - ldrb r1, [r2, 0xA] - ldrb r0, [r2, 0xB] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0xC] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0xD] - lsls r0, 24 - orrs r1, r0 - str r1, [r3, 0x4] - movs r4, 0 - adds r6, r2, 0 - ldr r7, _080072F4 - ldr r0, _080072F8 - mov r12, r0 - ldr r1, _080072FC - mov r8, r1 - adds r5, r3, 0 - adds r5, 0x8 -_080072B2: - adds r0, r4, r5 - adds r1, r4, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0xA - ble _080072B2 - ldrb r0, [r6, 0x8] - movs r2, 0 - strb r0, [r3, 0x13] - ldrh r0, [r7] - str r0, [r3, 0x14] - mov r4, r12 - ldrb r0, [r4] - strh r0, [r3, 0x1A] - mov r1, r8 - ldrb r0, [r1] - movs r4, 0x80 - lsls r4, 7 - adds r1, r4, 0 - adds r0, r1 - strh r0, [r3] - strh r2, [r3, 0x2] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080072EC: .4byte 0x03002a00 -_080072F0: .4byte 0x02024ea4 -_080072F4: .4byte 0x03002b74 -_080072F8: .4byte gGameLanguage -_080072FC: .4byte gGameVersion - thumb_func_end sub_8007280 - - thumb_func_start sub_8007300 -sub_8007300: @ 8007300 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl copy_pal_bg_faded_to_pal_ram - pop {r0} - bx r0 - thumb_func_end sub_8007300 - - thumb_func_start sub_8007314 -sub_8007314: @ 8007314 - push {lr} - ldr r3, _08007334 - ldr r1, _08007338 - ldr r2, _0800733C - adds r0, r1, 0 - adds r0, 0xE -_08007320: - strh r2, [r0] - subs r0, 0x2 - cmp r0, r1 - bge _08007320 - movs r0, 0x1 - strb r0, [r3] - bl sub_800877C - pop {r0} - bx r0 - .align 2, 0 -_08007334: .4byte 0x020238c0 -_08007338: .4byte 0x03002f90 -_0800733C: .4byte 0x0000efff - thumb_func_end sub_8007314 - - thumb_func_start task02_080097CC -task02_080097CC: @ 8007340 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08007370 - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _0800736A - ldr r1, _08007374 - movs r0, 0x1 - strb r0, [r1] - adds r0, r2, 0 - bl DestroyTask -_0800736A: - pop {r0} - bx r0 - .align 2, 0 -_08007370: .4byte 0x03004b20 -_08007374: .4byte 0x03003040 - thumb_func_end task02_080097CC - - thumb_func_start sub_8007378 -sub_8007378: @ 8007378 - push {r4-r6,lr} - bl sub_8008838 - bl sub_8007314 - ldr r1, _080073D8 - ldr r0, _080073DC - str r0, [r1] - ldr r0, _080073E0 - movs r1, 0 - strb r1, [r0] - ldr r0, _080073E4 - strb r1, [r0] - ldr r0, _080073E8 - strb r1, [r0] - bl sub_8007F18 - ldr r0, _080073EC - movs r1, 0 - str r1, [r0] - ldr r0, _080073F0 - strb r1, [r0] - ldr r0, _080073F4 - strb r1, [r0] - ldr r0, _080073F8 - strb r1, [r0] - ldr r6, _080073FC - movs r2, 0 - movs r5, 0x1 - ldr r4, _08007400 - ldr r3, _08007404 -_080073B6: - adds r0, r1, r6 - strb r5, [r0] - adds r0, r1, r4 - strb r2, [r0] - adds r0, r1, r3 - strb r2, [r0] - adds r1, 0x1 - cmp r1, 0x3 - ble _080073B6 - ldr r0, _08007408 - movs r1, 0x2 - bl CreateTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080073D8: .4byte 0x03002fc0 -_080073DC: .4byte sub_800802C -_080073E0: .4byte 0x03001bf8 -_080073E4: .4byte 0x0300295c -_080073E8: .4byte 0x03002f80 -_080073EC: .4byte 0x0300042c -_080073F0: .4byte 0x03002a68 -_080073F4: .4byte 0x03002a64 -_080073F8: .4byte 0x03002fa4 -_080073FC: .4byte 0x0300296c -_08007400: .4byte 0x03002b78 -_08007404: .4byte 0x03002b70 -_08007408: .4byte task02_080097CC - thumb_func_end sub_8007378 - - thumb_func_start AllocZeroed -AllocZeroed: @ 800740C - push {lr} - ldr r0, _08007420 - movs r1, 0 - strb r1, [r0] - ldr r0, _08007424 - strb r1, [r0] - bl sub_800871C - pop {r0} - bx r0 - .align 2, 0 -_08007420: .4byte 0x03002fa4 -_08007424: .4byte 0x020238c0 - thumb_func_end AllocZeroed - - thumb_func_start sub_8007428 -sub_8007428: @ 8007428 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r5, _080074EC - ldr r4, _080074F0 - ldrb r0, [r5] - ldrh r1, [r4] - cmp r0, r1 - beq _0800744C - ldrh r0, [r4] - movs r1, 0x2 - movs r2, 0x3 - movs r3, 0x2 - bl sub_8007FD8 - ldrh r0, [r4] - strb r0, [r5] -_0800744C: - movs r5, 0 - ldr r7, _080074F4 -_08007450: - ldr r0, _080074F8 - adds r6, r5, r0 - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r4, r0, r7 - ldrb r0, [r6] - ldrh r1, [r4] - cmp r0, r1 - beq _08007478 - ldrh r0, [r4] - adds r2, r5, 0x4 - lsls r2, 24 - lsrs r2, 24 - movs r1, 0x2 - movs r3, 0x2 - bl sub_8007FD8 - ldrh r0, [r4] - strb r0, [r6] -_08007478: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _08007450 - bl sub_8007EE4 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0xF - bne _080074DE - movs r5, 0 - ldr r0, _080074F4 - mov r9, r0 - ldr r1, _080074FC - mov r8, r1 -_08007498: - adds r0, r7, 0 - asrs r0, r5 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080074D4 - lsls r0, r5, 8 - ldr r1, _08007500 - adds r0, r1 - lsls r4, r5, 1 - adds r1, r4, r5 - lsls r1, 2 - add r1, r9 - ldrh r1, [r1, 0x2] - bl sub_8007F74 - ldr r1, _08007504 - adds r4, r1 - movs r6, 0 - strh r0, [r4] - adds r0, r5, 0 - bl sub_8007F30 - ldrh r0, [r4] - cmp r0, r8 - beq _080074D4 - ldr r0, _08007508 - strb r6, [r0] - ldr r0, _0800750C - strb r6, [r0] -_080074D4: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _08007498 -_080074DE: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080074EC: .4byte 0x03000448 -_080074F0: .4byte 0x030003e8 -_080074F4: .4byte 0x030003f8 -_080074F8: .4byte 0x0300044c -_080074FC: .4byte 0x00000342 -_08007500: .4byte 0x03002b80 -_08007504: .4byte 0x03003048 -_08007508: .4byte 0x020238b4 -_0800750C: .4byte 0x020238b5 - thumb_func_end sub_8007428 - - thumb_func_start sub_8007510 -sub_8007510: @ 8007510 - push {r4,r5,lr} - sub sp, 0x4 - ldr r4, _080075B0 - ldrh r1, [r4, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08007526 - ldr r1, _080075B4 - movs r0, 0x1 - strb r0, [r1] -_08007526: - ldrh r1, [r4, 0x2C] - movs r5, 0x2 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0800753A - ldr r0, _080075B8 - ldr r1, _080075BC - bl sub_8007D00 -_0800753A: - ldrh r1, [r4, 0x2E] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _08007556 - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl pal_fade_maybe -_08007556: - ldrh r1, [r4, 0x2E] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08007566 - movs r0, 0x1 - bl sub_8008704 -_08007566: - ldrh r1, [r4, 0x2E] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08007578 - movs r0, 0x1 - bl sub_8125D44 -_08007578: - ldrh r1, [r4, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08007586 - bl sub_800832C -_08007586: - ldr r0, _080075C0 - ldrb r0, [r0] - cmp r0, 0 - beq _080075A6 - ldr r2, [r4, 0x20] - ldr r0, _080075C4 - ldrb r1, [r0] - ldr r0, _080075C8 - ldr r0, [r0] - cmp r0, 0 - bne _080075A0 - movs r0, 0x10 - orrs r1, r0 -_080075A0: - adds r0, r2, 0 - bl sub_8008184 -_080075A6: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080075B0: .4byte 0x03001770 -_080075B4: .4byte 0x03003040 -_080075B8: .4byte 0x02004000 -_080075BC: .4byte 0x00002004 -_080075C0: .4byte 0x020238b4 -_080075C4: .4byte 0x03001bf8 -_080075C8: .4byte 0x03002fc0 - thumb_func_end sub_8007510 - - thumb_func_start CB2_80075CC -CB2_80075CC: @ 80075CC - push {lr} - bl sub_8007510 - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl sub_8007428 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl fade_and_return_progress_probably - pop {r0} - bx r0 - thumb_func_end CB2_80075CC - - thumb_func_start sub_80075F0 -sub_80075F0: @ 80075F0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _08007600 - ldrb r0, [r0] - cmp r0, 0 - bne _08007604 - movs r0, 0 - b _0800764C - .align 2, 0 -_08007600: .4byte 0x020238c0 -_08007604: - movs r1, 0 - ldr r5, _08007654 - ldr r3, _08007658 - movs r2, 0 -_0800760C: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x7 - bls _0800760C - ldrh r0, [r4] - strh r0, [r5] - ldr r0, _0800765C - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08007648 - ldr r0, _08007660 - ldr r0, [r0] - lsls r0, 26 - lsrs r0, 30 - bl sub_80076B0 - ldr r0, _08007664 - ldr r0, [r0] - cmp r0, 0 - beq _08007644 - bl _call_via_r0 -_08007644: - bl sub_800854C -_08007648: - ldr r0, _0800765C - ldrh r0, [r0] -_0800764C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08007654: .4byte 0x030029e8 -_08007658: .4byte 0x03002f90 -_0800765C: .4byte 0x03002a60 -_08007660: .4byte 0x04000128 -_08007664: .4byte 0x03002fc0 - thumb_func_end sub_80075F0 - - thumb_func_start sub_8007668 -sub_8007668: @ 8007668 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - ldr r1, _0800767C - adds r0, r1 - strb r5, [r0] - movs r4, 0 - adds r6, r1, 0 - b _08007688 - .align 2, 0 -_0800767C: .4byte 0x0300296c -_08007680: - adds r0, r4, r6 - ldrb r0, [r0] - adds r5, r0 - adds r4, 0x1 -_08007688: - bl sub_8008300 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - blt _08007680 - cmp r5, 0 - bne _080076A4 - ldr r1, _080076AC - ldrb r0, [r1] - cmp r0, 0 - bne _080076A4 - movs r0, 0x1 - strb r0, [r1] -_080076A4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080076AC: .4byte 0x03002fa4 - thumb_func_end sub_8007668 - - thumb_func_start sub_80076B0 -sub_80076B0: @ 80076B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r7, 0 - ldr r0, _08007708 - mov r8, r0 -_080076C2: - ldr r0, _0800770C - lsls r4, r7, 1 - adds r2, r4, r0 - movs r1, 0 - strh r1, [r2] - mov r3, r8 - adds r1, r4, r3 - ldrh r0, [r1] - mov r9, r4 - adds r5, r7, 0x1 - str r5, [sp] - cmp r0, 0 - bne _080076DE - b _0800798A -_080076DE: - ldrh r1, [r1] - ldr r0, _08007710 - cmp r1, r0 - bne _080076E8 - b _0800792A -_080076E8: - cmp r1, r0 - bgt _08007734 - ldr r0, _08007714 - cmp r1, r0 - bne _080076F4 - b _08007980 -_080076F4: - cmp r1, r0 - bgt _08007720 - ldr r0, _08007718 - cmp r1, r0 - beq _08007788 - ldr r0, _0800771C - cmp r1, r0 - bne _08007706 - b _08007934 -_08007706: - b _0800798A - .align 2, 0 -_08007708: .4byte 0x03002a20 -_0800770C: .4byte 0x03002910 -_08007710: .4byte 0x00005fff -_08007714: .4byte 0x00004444 -_08007718: .4byte 0x00002222 -_0800771C: .4byte 0x00002ffe -_08007720: - ldr r0, _08007730 - cmp r1, r0 - beq _080077D8 - adds r0, 0x11 - cmp r1, r0 - beq _080077D8 - b _0800798A - .align 2, 0 -_08007730: .4byte 0x00005555 -_08007734: - ldr r0, _08007750 - cmp r1, r0 - bne _0800773C - b _0800794A -_0800773C: - cmp r1, r0 - bgt _0800775C - ldr r0, _08007754 - cmp r1, r0 - beq _0800780C - ldr r0, _08007758 - cmp r1, r0 - bne _0800774E - b _08007944 -_0800774E: - b _0800798A - .align 2, 0 -_08007750: .4byte 0x0000aaab -_08007754: .4byte 0x00008888 -_08007758: .4byte 0x0000aaaa -_0800775C: - ldr r0, _08007770 - cmp r1, r0 - bne _08007764 - b _08007980 -_08007764: - cmp r1, r0 - bgt _08007778 - ldr r0, _08007774 - cmp r1, r0 - beq _080077E4 - b _0800798A - .align 2, 0 -_08007770: .4byte 0x0000cafe -_08007774: .4byte 0x0000bbbb -_08007778: - ldr r0, _08007784 - cmp r1, r0 - bne _08007780 - b _0800795C -_08007780: - b _0800798A - .align 2, 0 -_08007784: .4byte 0x0000cccc -_08007788: - bl sub_8007280 - ldr r0, _080077CC - adds r2, r0, 0 - adds r2, 0x10 - ldr r1, _080077D0 - ldm r1!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r1!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldr r1, [r1] - str r1, [r2] - ldr r4, _080077D4 - adds r2, r0, 0 - adds r1, r4, 0 - ldm r1!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldrh r3, [r1] - strh r3, [r2] - ldrb r1, [r1, 0x2] - strb r1, [r2, 0x2] - adds r1, r0, 0 - adds r1, 0x2C - ldm r4!, {r2,r5,r6} - stm r1!, {r2,r5,r6} - ldrh r2, [r4] - strh r2, [r1] - ldrb r2, [r4, 0x2] - strb r2, [r1, 0x2] - movs r1, 0x3C - bl sub_8007D00 - b _0800798A - .align 2, 0 -_080077CC: .4byte 0x03002920 -_080077D0: .4byte 0x03002a00 -_080077D4: .4byte gUnknown_081E75FC -_080077D8: - ldr r1, _080077E0 - movs r0, 0x1 - strb r0, [r1] - b _0800798A - .align 2, 0 -_080077E0: .4byte 0x03002a68 -_080077E4: - adds r1, r4, r7 - lsls r1, 2 - ldr r3, _08007808 - adds r1, r3 - movs r5, 0 - strh r5, [r1] - mov r0, r8 - adds r0, 0x8 - adds r0, r4, r0 - ldrh r0, [r0] - strh r0, [r1, 0x2] - mov r0, r8 - adds r0, 0x10 - adds r0, r4, r0 - ldrh r0, [r0] - strb r0, [r1, 0x9] - b _0800798A - .align 2, 0 -_08007808: .4byte 0x030003f8 -_0800780C: - adds r0, r4, r7 - lsls r0, 2 - ldr r6, _08007848 - adds r3, r0, r6 - ldrh r1, [r3, 0x2] - movs r0, 0x80 - lsls r0, 1 - adds r2, r6, 0 - mov r10, r2 - cmp r1, r0 - bls _08007854 - ldr r6, _0800784C - movs r2, 0 - ldr r5, _08007850 -_08007828: - ldrh r1, [r3] - lsrs r1, 1 - adds r1, r2 - lsls r1, 1 - adds r1, r6 - adds r2, 0x1 - lsls r0, r2, 3 - adds r0, r4, r0 - adds r0, r5 - ldrh r0, [r0] - strh r0, [r1] - lsls r2, 16 - lsrs r2, 16 - cmp r2, 0x6 - bls _08007828 - b _08007882 - .align 2, 0 -_08007848: .4byte 0x030003f8 -_0800784C: .4byte 0x02000000 -_08007850: .4byte 0x03002a20 -_08007854: - movs r2, 0 - ldr r5, _080078E8 - mov r12, r5 - adds r5, r4, 0 - adds r4, r3, 0 - ldr r6, _080078EC - lsls r3, r7, 8 -_08007862: - ldrh r1, [r4] - lsrs r1, 1 - adds r1, r2 - lsls r1, 1 - adds r1, r3 - add r1, r12 - adds r2, 0x1 - lsls r0, r2, 3 - adds r0, r5, r0 - adds r0, r6 - ldrh r0, [r0] - strh r0, [r1] - lsls r2, 16 - lsrs r2, 16 - cmp r2, 0x6 - bls _08007862 -_08007882: - mov r6, r9 - adds r1, r6, r7 - lsls r1, 2 - add r1, r10 - ldrh r0, [r1] - adds r0, 0xE - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1, 0x2] - cmp r0, r1 - bcc _0800798A - ldr r0, _080078F0 - adds r0, r7, r0 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08007920 - lsls r1, r7, 8 - ldr r0, _080078E8 - adds r5, r1, r0 - lsls r4, r7, 3 - subs r1, r4, r7 - lsls r1, 2 - ldr r0, _080078F4 - adds r1, r0 - adds r0, r5, 0 - adds r0, 0x10 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldr r0, [r0] - str r0, [r1] - ldr r6, _080078F8 - adds r0, r5, 0 - adds r1, r6, 0 - bl strcmp - cmp r0, 0 - bne _080078E0 - adds r0, r5, 0 - adds r0, 0x2C - adds r1, r6, 0 - bl strcmp - cmp r0, 0 - beq _08007900 -_080078E0: - ldr r0, _080078FC - bl SetMainCallback2 - b _08007908 - .align 2, 0 -_080078E8: .4byte 0x03002b80 -_080078EC: .4byte 0x03002a20 -_080078F0: .4byte 0x0300296c -_080078F4: .4byte 0x03002970 -_080078F8: .4byte gUnknown_081E75FC -_080078FC: .4byte sub_80085BC -_08007900: - lsls r0, r7, 24 - lsrs r0, 24 - bl sub_8007668 -_08007908: - subs r2, r4, r7 - lsls r2, 2 - ldr r1, _0800791C - adds r0, r2, r1 - adds r1, r2 - ldrb r1, [r1, 0x12] - bl SetStringCharset - b _0800798A - .align 2, 0 -_0800791C: .4byte 0x03002978 -_08007920: - lsls r0, r7, 24 - lsrs r0, 24 - bl schedule_bg_copy_tilemap_to_vram - b _0800798A -_0800792A: - ldr r0, _08007930 - b _08007936 - .align 2, 0 -_08007930: .4byte 0x03002b78 -_08007934: - ldr r0, _08007940 -_08007936: - adds r0, r7, r0 - movs r1, 0x1 - strb r1, [r0] - b _0800798A - .align 2, 0 -_08007940: .4byte 0x03002b70 -_08007944: - bl sub_8007E24 - b _0800798A -_0800794A: - lsls r0, r7, 24 - lsrs r0, 24 - mov r1, r8 - adds r1, 0x8 - adds r1, r4, r1 - ldrh r1, [r1] - bl sub_80516C4 - b _0800798A -_0800795C: - ldr r3, _0800797C - mov r0, r8 - adds r0, 0x8 - adds r0, r4, r0 - ldrh r2, [r0] - lsls r2, 3 - adds r0, r2, r3 - ldr r1, [r0] - adds r3, 0x4 - adds r2, r3 - ldrh r2, [r2] - movs r0, 0 - bl sub_8007E88 - b _0800798A - .align 2, 0 -_0800797C: .4byte gUnknown_081E75CC -_08007980: - mov r0, r8 - adds r0, 0x8 - adds r0, r4, r0 - ldrh r0, [r0] - strh r0, [r2] -_0800798A: - ldr r1, [sp] - lsls r0, r1, 16 - lsrs r7, r0, 16 - cmp r7, 0x3 - bhi _08007996 - b _080076C2 -_08007996: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80076B0 - - thumb_func_start sub_80079A8 -sub_80079A8: @ 80079A8 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _080079CC - cmp r2, r0 - beq _08007A70 - cmp r2, r0 - bgt _08007A00 - ldr r0, _080079D0 - cmp r2, r0 - beq _08007A5C - cmp r2, r0 - bgt _080079DC - ldr r0, _080079D4 - cmp r2, r0 - beq _08007A48 - ldr r0, _080079D8 - b _080079F2 - .align 2, 0 -_080079CC: .4byte 0x00006666 -_080079D0: .4byte 0x00004444 -_080079D4: .4byte 0x00002222 -_080079D8: .4byte 0x00002ffe -_080079DC: - ldr r0, _080079EC - cmp r2, r0 - bne _080079E4 - b _08007AE0 -_080079E4: - cmp r2, r0 - bgt _080079F0 - subs r0, 0x11 - b _080079F2 - .align 2, 0 -_080079EC: .4byte 0x00005566 -_080079F0: - ldr r0, _080079FC -_080079F2: - cmp r2, r0 - bne _080079F8 - b _08007AE0 -_080079F8: - b _08007B02 - .align 2, 0 -_080079FC: .4byte 0x00005fff -_08007A00: - ldr r0, _08007A14 - cmp r2, r0 - beq _08007AB8 - cmp r2, r0 - bgt _08007A20 - ldr r0, _08007A18 - cmp r2, r0 - beq _08007A7C - ldr r0, _08007A1C - b _080079F2 - .align 2, 0 -_08007A14: .4byte 0x0000aaab -_08007A18: .4byte 0x00007777 -_08007A1C: .4byte 0x0000aaaa -_08007A20: - ldr r0, _08007A34 - cmp r2, r0 - beq _08007AEC - cmp r2, r0 - bgt _08007A3C - ldr r0, _08007A38 - cmp r2, r0 - beq _08007A9C - b _08007B02 - .align 2, 0 -_08007A34: .4byte 0x0000cafe -_08007A38: .4byte 0x0000bbbb -_08007A3C: - ldr r0, _08007A44 - cmp r2, r0 - beq _08007ACC - b _08007B02 - .align 2, 0 -_08007A44: .4byte 0x0000cccc -_08007A48: - ldr r0, _08007A54 - strh r2, [r0] - ldr r1, _08007A58 - ldrh r1, [r1] - b _08007B00 - .align 2, 0 -_08007A54: .4byte 0x03002f90 -_08007A58: .4byte 0x03002b74 -_08007A5C: - ldr r0, _08007A68 - strh r2, [r0] - ldr r1, _08007A6C - ldrh r1, [r1, 0x2C] - b _08007B00 - .align 2, 0 -_08007A68: .4byte 0x03002f90 -_08007A6C: .4byte 0x03001770 -_08007A70: - ldr r0, _08007A78 - movs r1, 0 - b _08007AFE - .align 2, 0 -_08007A78: .4byte 0x03002f90 -_08007A7C: - ldr r0, _08007A98 - strh r2, [r0] - movs r1, 0 - adds r3, r0, 0 - movs r2, 0xEE -_08007A86: - adds r1, 0x1 - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x4 - bls _08007A86 - b _08007B02 - .align 2, 0 -_08007A98: .4byte 0x03002f90 -_08007A9C: - ldr r1, _08007AB0 - strh r2, [r1] - ldr r2, _08007AB4 - ldrh r0, [r2, 0x2] - strh r0, [r1, 0x2] - ldrb r0, [r2, 0x9] - adds r0, 0x80 - strh r0, [r1, 0x4] - b _08007B02 - .align 2, 0 -_08007AB0: .4byte 0x03002f90 -_08007AB4: .4byte 0x030003e8 -_08007AB8: - ldr r0, _08007AC4 - strh r2, [r0] - ldr r1, _08007AC8 - ldrh r1, [r1] - b _08007B00 - .align 2, 0 -_08007AC4: .4byte 0x03002f90 -_08007AC8: .4byte 0x0203855e -_08007ACC: - ldr r0, _08007AD8 - strh r2, [r0] - ldr r1, _08007ADC - ldrb r1, [r1] - b _08007B00 - .align 2, 0 -_08007AD8: .4byte 0x03002f90 -_08007ADC: .4byte 0x03003054 -_08007AE0: - ldr r0, _08007AE8 - strh r2, [r0] - b _08007B02 - .align 2, 0 -_08007AE8: .4byte 0x03002f90 -_08007AEC: - ldr r0, _08007B08 - ldrh r1, [r0] - cmp r1, 0 - beq _08007B02 - ldr r0, _08007B0C - ldrb r0, [r0] - cmp r0, 0 - bne _08007B02 - ldr r0, _08007B10 -_08007AFE: - strh r2, [r0] -_08007B00: - strh r1, [r0, 0x2] -_08007B02: - pop {r0} - bx r0 - .align 2, 0 -_08007B08: .4byte 0x03004858 -_08007B0C: .4byte 0x03001764 -_08007B10: .4byte 0x03002f90 - thumb_func_end sub_80079A8 - - thumb_func_start sub_8007B14 -sub_8007B14: @ 8007B14 - ldr r1, _08007B1C - ldr r0, _08007B20 - str r0, [r1] - bx lr - .align 2, 0 -_08007B1C: .4byte 0x03002fc0 -_08007B20: .4byte sub_8007B44 - thumb_func_end sub_8007B14 - - thumb_func_start sub_8007B24 -sub_8007B24: @ 8007B24 - push {lr} - ldr r0, _08007B34 - ldr r1, [r0] - ldr r0, _08007B38 - cmp r1, r0 - beq _08007B3C - movs r0, 0 - b _08007B3E - .align 2, 0 -_08007B34: .4byte 0x03002fc0 -_08007B38: .4byte sub_8007B44 -_08007B3C: - movs r0, 0x1 -_08007B3E: - pop {r1} - bx r1 - thumb_func_end sub_8007B24 - - thumb_func_start sub_8007B44 -sub_8007B44: @ 8007B44 - push {lr} - ldr r0, _08007B58 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08007B54 - ldr r0, _08007B5C - bl sub_80079A8 -_08007B54: - pop {r0} - bx r0 - .align 2, 0 -_08007B58: .4byte 0x03002fa4 -_08007B5C: .4byte 0x0000cafe - thumb_func_end sub_8007B44 - - thumb_func_start sub_8007B60 -sub_8007B60: @ 8007B60 - ldr r1, _08007B68 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_08007B68: .4byte 0x03002fc0 - thumb_func_end sub_8007B60 - - thumb_func_start sub_8007B6C -sub_8007B6C: @ 8007B6C - ldr r1, _08007B74 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_08007B74: .4byte 0x03002fc0 - thumb_func_end sub_8007B6C - - thumb_func_start sub_8007B78 -sub_8007B78: @ 8007B78 - ldr r0, _08007B84 - ldr r0, [r0] - movs r1, 0x1C - ands r0, r1 - lsrs r0, 2 - bx lr - .align 2, 0 -_08007B84: .4byte 0x03002a60 - thumb_func_end sub_8007B78 - - thumb_func_start sub_8007B88 -sub_8007B88: @ 8007B88 - push {lr} - ldr r0, _08007B9C - movs r1, 0 - str r1, [r0] - ldr r0, _08007BA0 - strh r1, [r0] - bl sub_8007378 - pop {r0} - bx r0 - .align 2, 0 -_08007B9C: .4byte 0x03000434 -_08007BA0: .4byte 0x030029ec - thumb_func_end sub_8007B88 - - thumb_func_start sub_8007BA4 -sub_8007BA4: @ 8007BA4 - push {r4-r7,lr} - movs r7, 0 - ldr r0, _08007BCC - ldrb r4, [r0] - cmp r4, 0x1 - bne _08007C20 - bl sub_8007B78 - lsls r0, 24 - cmp r0, 0 - bne _08007BC2 - ldr r0, _08007BD0 - strb r4, [r0] - bl AllocZeroed -_08007BC2: - movs r6, 0 - ldr r4, _08007BD4 - movs r5, 0 - b _08007BEC - .align 2, 0 -_08007BCC: .4byte 0x03002fa4 -_08007BD0: .4byte 0x0300295c -_08007BD4: .4byte 0x03002970 -_08007BD8: - adds r0, r4, 0 - adds r0, 0x14 - adds r0, r5, r0 - ldr r1, [r0] - ldr r0, [r4, 0x14] - cmp r1, r0 - bne _08007BE8 - adds r7, 0x1 -_08007BE8: - adds r5, 0x1C - adds r6, 0x1 -_08007BEC: - bl sub_8007B78 - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - blt _08007BD8 - bl sub_8007B78 - lsls r0, 24 - lsrs r0, 24 - cmp r7, r0 - bne _08007C10 - ldr r1, _08007C0C - movs r0, 0x1 - b _08007C14 - .align 2, 0 -_08007C0C: .4byte 0x03000434 -_08007C10: - ldr r1, _08007C1C - movs r0, 0x3 -_08007C14: - str r0, [r1] - adds r2, r1, 0 - b _08007C38 - .align 2, 0 -_08007C1C: .4byte 0x03000434 -_08007C20: - ldr r0, _08007C40 - ldrh r1, [r0] - adds r1, 0x1 - strh r1, [r0] - lsls r1, 16 - movs r0, 0x96 - lsls r0, 18 - ldr r2, _08007C44 - cmp r1, r0 - bls _08007C38 - movs r0, 0x2 - str r0, [r2] -_08007C38: - ldrb r0, [r2] - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08007C40: .4byte 0x030029ec -_08007C44: .4byte 0x03000434 - thumb_func_end sub_8007BA4 - - thumb_func_start sub_8007C48 -sub_8007C48: @ 8007C48 - push {r4-r6,lr} - movs r6, 0 - movs r4, 0 - ldr r5, _08007C54 - b _08007C78 - .align 2, 0 -_08007C54: .4byte 0x03002970 -_08007C58: - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x14 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r5, 0x14] - cmp r1, r0 - bne _08007C72 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_08007C72: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_08007C78: - bl sub_8007B78 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _08007C58 - bl sub_8007B78 - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - bne _08007C9C - movs r2, 0x1 - ldr r0, _08007C98 - str r2, [r0] - b _08007CA4 - .align 2, 0 -_08007C98: .4byte 0x03000434 -_08007C9C: - movs r2, 0 - ldr r1, _08007CAC - movs r0, 0x3 - str r0, [r1] -_08007CA4: - adds r0, r2, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08007CAC: .4byte 0x03000434 - thumb_func_end sub_8007C48 - - thumb_func_start sub_8007CB0 -sub_8007CB0: @ 8007CB0 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08007CC4 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r2, 0x4 - adds r1, r2 - ldr r0, [r1] - bx lr - .align 2, 0 -_08007CC4: .4byte 0x03002970 - thumb_func_end sub_8007CB0 - - thumb_func_start sub_8007CC8 -sub_8007CC8: @ 8007CC8 - push {r4,r5,lr} - ldr r5, _08007CE8 - movs r4, 0x3 -_08007CCE: - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x1C - bl memset - adds r5, 0x1C - subs r4, 0x1 - cmp r4, 0 - bge _08007CCE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08007CE8: .4byte 0x03002970 - thumb_func_end sub_8007CC8 - - thumb_func_start sub_8007CEC -sub_8007CEC: @ 8007CEC - ldr r1, _08007CFC - movs r0, 0 - strb r0, [r1, 0x8] - strh r0, [r1] - strh r0, [r1, 0x2] - str r0, [r1, 0x4] - bx lr - .align 2, 0 -_08007CFC: .4byte 0x030003e8 - thumb_func_end sub_8007CEC - - thumb_func_start sub_8007D00 -sub_8007D00: @ 8007D00 - push {r4-r7,lr} - adds r7, r0, 0 - adds r6, r1, 0 - ldr r4, _08007D14 - ldrb r5, [r4, 0x8] - cmp r5, 0 - beq _08007D18 - movs r0, 0 - b _08007D56 - .align 2, 0 -_08007D14: .4byte 0x030003e8 -_08007D18: - bl link_get_multiplayer_id - strb r0, [r4, 0x9] - movs r0, 0x1 - strb r0, [r4, 0x8] - strh r6, [r4, 0x2] - strh r5, [r4] - adds r0, 0xFF - cmp r6, r0 - bls _08007D30 - str r7, [r4, 0x4] - b _08007D42 -_08007D30: - ldr r5, _08007D5C - cmp r7, r5 - beq _08007D40 - adds r0, r5, 0 - adds r1, r7, 0 - adds r2, r6, 0 - bl memcpy -_08007D40: - str r5, [r4, 0x4] -_08007D42: - ldr r0, _08007D60 - bl sub_80079A8 - ldr r1, _08007D64 - ldr r0, _08007D68 - str r0, [r1] - ldr r1, _08007D6C - movs r0, 0 - str r0, [r1] - movs r0, 0x1 -_08007D56: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08007D5C: .4byte 0x03002a70 -_08007D60: .4byte 0x0000bbbb -_08007D64: .4byte 0x03002fc0 -_08007D68: .4byte sub_8007D70 -_08007D6C: .4byte 0x03000428 - thumb_func_end sub_8007D00 - - thumb_func_start sub_8007D70 -sub_8007D70: @ 8007D70 - push {lr} - ldr r1, _08007D88 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - cmp r0, 0x2 - bls _08007D84 - ldr r1, _08007D8C - ldr r0, _08007D90 - str r0, [r1] -_08007D84: - pop {r0} - bx r0 - .align 2, 0 -_08007D88: .4byte 0x03000428 -_08007D8C: .4byte 0x03002fc0 -_08007D90: .4byte sub_8007D94 - thumb_func_end sub_8007D70 - - thumb_func_start sub_8007D94 -sub_8007D94: @ 8007D94 - push {r4-r6,lr} - ldr r0, _08007DE4 - ldr r5, [r0, 0x4] - ldr r2, _08007DE8 - ldr r1, _08007DEC - strh r1, [r2] - movs r3, 0 - adds r4, r0, 0 - adds r6, r4, 0 - adds r2, 0x2 -_08007DA8: - lsls r0, r3, 1 - ldrh r1, [r6] - adds r0, r1 - adds r0, r5 - ldrb r1, [r0, 0x1] - lsls r1, 8 - ldrb r0, [r0] - orrs r0, r1 - strh r0, [r2] - adds r2, 0x2 - adds r3, 0x1 - cmp r3, 0x6 - ble _08007DA8 - ldrh r0, [r4] - adds r0, 0xE - strh r0, [r4] - ldrh r1, [r4, 0x2] - lsls r0, 16 - lsrs r0, 16 - cmp r1, r0 - bhi _08007DDC - movs r0, 0 - strb r0, [r4, 0x8] - ldr r1, _08007DF0 - ldr r0, _08007DF4 - str r0, [r1] -_08007DDC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08007DE4: .4byte 0x030003e8 -_08007DE8: .4byte 0x03002f90 -_08007DEC: .4byte 0x00008888 -_08007DF0: .4byte 0x03002fc0 -_08007DF4: .4byte sub_8007DF8 - thumb_func_end sub_8007D94 - - thumb_func_start sub_8007DF8 -sub_8007DF8: @ 8007DF8 - ldr r1, _08007E00 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_08007E00: .4byte 0x03002fc0 - thumb_func_end sub_8007DF8 - - thumb_func_start sub_8007E04 -sub_8007E04: @ 8007E04 - push {lr} - bl link_get_multiplayer_id - ldr r0, _08007E1C - bl sub_80079A8 - ldr r1, _08007E20 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08007E1C: .4byte 0x00004444 -_08007E20: .4byte 0x020238bc - thumb_func_end sub_8007E04 - - thumb_func_start sub_8007E24 -sub_8007E24: @ 8007E24 - ldr r1, _08007E34 - movs r0, 0 - str r0, [r1] - ldr r1, _08007E38 - ldr r0, _08007E3C - str r0, [r1] - bx lr - .align 2, 0 -_08007E34: .4byte 0x020238bc -_08007E38: .4byte 0x03002fc0 -_08007E3C: .4byte sub_8007E04 - thumb_func_end sub_8007E24 - - thumb_func_start sub_8007E40 -sub_8007E40: @ 8007E40 - ldr r0, _08007E48 - ldr r0, [r0] - bx lr - .align 2, 0 -_08007E48: .4byte 0x020238bc - thumb_func_end sub_8007E40 - - thumb_func_start sub_8007E4C -sub_8007E4C: @ 8007E4C - push {lr} - ldr r0, _08007E58 - bl sub_80079A8 - pop {r0} - bx r0 - .align 2, 0 -_08007E58: .4byte 0x0000aaaa - thumb_func_end sub_8007E4C - - thumb_func_start link_get_multiplayer_id -link_get_multiplayer_id: @ 8007E5C - ldr r0, _08007E68 - ldr r0, [r0] - lsls r0, 26 - lsrs r0, 30 - bx lr - .align 2, 0 -_08007E68: .4byte 0x04000128 - thumb_func_end link_get_multiplayer_id - - thumb_func_start bitmask_all_link_players_but_self -bitmask_all_link_players_but_self: @ 8007E6C - push {lr} - bl link_get_multiplayer_id - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x1 - lsls r0, r1 - movs r1, 0xF - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end bitmask_all_link_players_but_self - - thumb_func_start sub_8007E88 -sub_8007E88: @ 8007E88 - push {lr} - adds r0, r1, 0 - lsls r1, r2, 16 - lsrs r1, 16 - bl sub_8007D00 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8007E88 - - thumb_func_start sub_8007E9C -sub_8007E9C: @ 8007E9C - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, _08007EB0 - ldr r0, [r0] - cmp r0, 0 - beq _08007EB4 - movs r0, 0 - b _08007EC0 - .align 2, 0 -_08007EB0: .4byte 0x03002fc0 -_08007EB4: - ldr r0, _08007EC4 - strb r1, [r0] - ldr r0, _08007EC8 - bl sub_80079A8 - movs r0, 0x1 -_08007EC0: - pop {r1} - bx r1 - .align 2, 0 -_08007EC4: .4byte 0x03003054 -_08007EC8: .4byte 0x0000cccc - thumb_func_end sub_8007E9C - - thumb_func_start sub_8007ECC -sub_8007ECC: @ 8007ECC - push {lr} - movs r1, 0 - ldr r0, _08007EE0 - ldr r0, [r0] - cmp r0, 0 - bne _08007EDA - movs r1, 0x1 -_08007EDA: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_08007EE0: .4byte 0x03002fc0 - thumb_func_end sub_8007ECC - - thumb_func_start sub_8007EE4 -sub_8007EE4: @ 8007EE4 - ldr r2, _08007F00 - ldrb r0, [r2, 0x3] - lsls r0, 3 - ldrb r1, [r2, 0x2] - lsls r1, 2 - orrs r0, r1 - ldrb r1, [r2, 0x1] - lsls r1, 1 - orrs r0, r1 - ldrb r1, [r2] - orrs r0, r1 - lsls r0, 24 - lsrs r0, 24 - bx lr - .align 2, 0 -_08007F00: .4byte 0x030029e0 - thumb_func_end sub_8007EE4 - - thumb_func_start schedule_bg_copy_tilemap_to_vram -schedule_bg_copy_tilemap_to_vram: @ 8007F04 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08007F14 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - bx lr - .align 2, 0 -_08007F14: .4byte 0x030029e0 - thumb_func_end schedule_bg_copy_tilemap_to_vram - - thumb_func_start sub_8007F18 -sub_8007F18: @ 8007F18 - push {lr} - ldr r1, _08007F2C - movs r2, 0 - adds r0, r1, 0x3 -_08007F20: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08007F20 - pop {r0} - bx r0 - .align 2, 0 -_08007F2C: .4byte 0x030029e0 - thumb_func_end sub_8007F18 - - thumb_func_start sub_8007F30 -sub_8007F30: @ 8007F30 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08007F48 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - beq _08007F44 - movs r0, 0 - strb r0, [r1] -_08007F44: - pop {r0} - bx r0 - .align 2, 0 -_08007F48: .4byte 0x030029e0 - thumb_func_end sub_8007F30 - - thumb_func_start sub_8007F4C -sub_8007F4C: @ 8007F4C - push {lr} - ldr r0, _08007F6C - ldr r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08007F68 - movs r0, 0x1C - ands r1, r0 - cmp r1, 0x4 - bls _08007F68 - ldr r1, _08007F70 - movs r0, 0x1 - strb r0, [r1] -_08007F68: - pop {r0} - bx r0 - .align 2, 0 -_08007F6C: .4byte 0x03002a60 -_08007F70: .4byte 0x03003040 - thumb_func_end sub_8007F4C - - thumb_func_start sub_8007F74 -sub_8007F74: @ 8007F74 - push {r4,lr} - adds r4, r0, 0 - lsls r1, 16 - movs r3, 0 - movs r2, 0 - lsrs r1, 17 - cmp r3, r1 - bcs _08007F9A -_08007F84: - lsls r0, r2, 1 - adds r0, r4 - ldrh r0, [r0] - adds r0, r3, r0 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r1 - bcc _08007F84 -_08007F9A: - adds r0, r3, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8007F74 - - thumb_func_start sub_8007FA4 -sub_8007FA4: @ 8007FA4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - ldr r4, _08007FD4 - ldr r3, [r4] - lsls r3, 11 - movs r5, 0xC0 - lsls r5, 19 - adds r3, r5 - lsrs r2, 19 - adds r2, r1 - lsls r2, 1 - adds r2, r3 - ldr r1, [r4, 0x4] - lsls r1, 12 - adds r0, 0x1 - orrs r1, r0 - strh r1, [r2] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08007FD4: .4byte 0x03002fb0 - thumb_func_end sub_8007FA4 - - thumb_func_start sub_8007FD8 -sub_8007FD8: @ 8007FD8 - push {r4-r7,lr} - sub sp, 0x10 - adds r5, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r3, 24 - movs r4, 0 - cmp r4, r3 - bge _08008004 - movs r2, 0xF -_08007FF2: - mov r0, sp - adds r1, r0, r4 - adds r0, r5, 0 - ands r0, r2 - strb r0, [r1] - lsrs r5, 4 - adds r4, 0x1 - cmp r4, r3 - blt _08007FF2 -_08008004: - subs r4, r3, 0x1 - cmp r4, 0 - blt _08008024 -_0800800A: - mov r1, sp - adds r0, r1, r4 - ldrb r0, [r0] - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_8007FA4 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - subs r4, 0x1 - cmp r4, 0 - bge _0800800A -_08008024: - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8007FD8 - - thumb_func_start sub_800802C -sub_800802C: @ 800802C - push {lr} - ldr r0, _0800804C - ldr r0, [r0] - movs r1, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08008040 - ldr r0, _08008050 - bl sub_80079A8 -_08008040: - ldr r1, _08008054 - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0800804C: .4byte 0x03002a60 -_08008050: .4byte 0x00002222 -_08008054: .4byte 0x03002fc0 - thumb_func_end sub_800802C - - thumb_func_start Task_LinkTest -Task_LinkTest: @ 8008058 - push {r4-r6,lr} - ldr r0, _08008164 - ldrb r0, [r0] - movs r1, 0x2 - movs r2, 0x1 - movs r3, 0x2 - bl sub_8007FD8 - ldr r4, _08008168 - ldr r0, [r4] - movs r1, 0xF - movs r2, 0x1 - movs r3, 0x8 - bl sub_8007FD8 - ldr r0, _0800816C - ldrb r0, [r0, 0x1] - movs r1, 0x2 - movs r2, 0xA - movs r3, 0x2 - bl sub_8007FD8 - ldr r0, [r4] - movs r1, 0x1C - ands r0, r1 - lsrs r0, 2 - movs r1, 0xF - movs r2, 0xA - movs r3, 0x2 - bl sub_8007FD8 - bl link_get_multiplayer_id - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xF - movs r2, 0xC - movs r3, 0x2 - bl sub_8007FD8 - ldr r0, _08008170 - ldrb r0, [r0] - movs r1, 0x19 - movs r2, 0x1 - movs r3, 0x2 - bl sub_8007FD8 - ldr r0, _08008174 - ldrb r0, [r0] - movs r1, 0x19 - movs r2, 0x2 - movs r3, 0x2 - bl sub_8007FD8 - bl sub_8007EE4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xF - movs r2, 0x5 - movs r3, 0x2 - bl sub_8007FD8 - ldr r0, _08008178 - ldr r0, [r0] - movs r1, 0x2 - movs r2, 0xC - movs r3, 0x8 - bl sub_8007FD8 - ldr r0, _0800817C - ldr r0, [r0] - movs r1, 0x2 - movs r2, 0xD - movs r3, 0x8 - bl sub_8007FD8 - bl sub_80086BC - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0x5 - movs r3, 0x1 - bl sub_8007FD8 - bl sub_80086CC - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0x6 - movs r3, 0x1 - bl sub_8007FD8 - bl sub_80086F4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0x7 - movs r3, 0x1 - bl sub_8007FD8 - bl sub_8008710 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x19 - movs r2, 0x8 - movs r3, 0x1 - bl sub_8007FD8 - movs r6, 0 - movs r5, 0x80 - lsls r5, 19 - ldr r4, _08008180 -_08008142: - ldrh r0, [r4] - lsrs r2, r5, 24 - movs r1, 0xA - movs r3, 0x4 - bl sub_8007FD8 - movs r0, 0x80 - lsls r0, 17 - adds r5, r0 - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _08008142 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008164: .4byte 0x03003040 -_08008168: .4byte 0x03002a60 -_0800816C: .4byte 0x03003070 -_08008170: .4byte 0x03003060 -_08008174: .4byte 0x03004030 -_08008178: .4byte 0x03002918 -_0800817C: .4byte 0x03002964 -_08008180: .4byte 0x03003048 - thumb_func_end Task_LinkTest - - thumb_func_start sub_8008184 -sub_8008184: @ 8008184 - ldr r2, _08008190 - str r0, [r2] - ldr r0, _08008194 - str r1, [r0] - bx lr - .align 2, 0 -_08008190: .4byte 0x03002918 -_08008194: .4byte 0x03002964 - thumb_func_end sub_8008184 - - thumb_func_start sub_8008198 -sub_8008198: @ 8008198 - push {r4,lr} - movs r1, 0 - movs r2, 0 - ldr r0, _080081C4 - ldrb r0, [r0] - cmp r1, r0 - bge _080081BA - movs r4, 0x1 - adds r3, r0, 0 -_080081AA: - adds r0, r4, 0 - lsls r0, r2 - orrs r1, r0 - lsls r0, r1, 24 - lsrs r1, r0, 24 - adds r2, 0x1 - cmp r2, r3 - blt _080081AA -_080081BA: - adds r0, r1, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080081C4: .4byte 0x03002f84 - thumb_func_end sub_8008198 - - thumb_func_start sub_80081C8 -sub_80081C8: @ 80081C8 - push {r4-r7,lr} - ldr r1, _080081FC - strb r0, [r1] - bl link_get_multiplayer_id - ldr r1, _08008200 - strb r0, [r1] - ldr r4, _08008204 - ldr r3, _08008208 - movs r2, 0x3 -_080081DC: - adds r0, r3, 0 - adds r1, r4, 0 - ldm r1!, {r5-r7} - stm r0!, {r5-r7} - ldm r1!, {r5-r7} - stm r0!, {r5-r7} - ldr r1, [r1] - str r1, [r0] - adds r4, 0x1C - adds r3, 0x1C - subs r2, 0x1 - cmp r2, 0 - bge _080081DC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080081FC: .4byte 0x03002f84 -_08008200: .4byte 0x03002fa0 -_08008204: .4byte 0x03002970 -_08008208: .4byte 0x03002fd0 - thumb_func_end sub_80081C8 - - thumb_func_start sub_800820C -sub_800820C: @ 800820C - ldr r0, _08008214 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08008214: .4byte 0x03002f84 - thumb_func_end sub_800820C - - thumb_func_start sub_8008218 -sub_8008218: @ 8008218 - ldr r0, _08008220 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08008220: .4byte 0x03002fa0 - thumb_func_end sub_8008218 - - thumb_func_start sub_8008224 -sub_8008224: @ 8008224 - push {r4-r6,lr} - movs r5, 0 - ldr r0, _08008258 - ldrb r2, [r0] - adds r6, r0, 0 - cmp r5, r2 - bge _0800824E - ldr r1, _0800825C - ldr r0, _08008260 - adds r4, r0, 0x4 - adds r3, r1, 0x4 -_0800823A: - ldr r1, [r3] - ldr r0, [r4] - cmp r1, r0 - bne _08008244 - adds r5, 0x1 -_08008244: - adds r4, 0x1C - adds r3, 0x1C - subs r2, 0x1 - cmp r2, 0 - bne _0800823A -_0800824E: - ldrb r6, [r6] - cmp r5, r6 - beq _08008264 - movs r0, 0 - b _08008266 - .align 2, 0 -_08008258: .4byte 0x03002f84 -_0800825C: .4byte 0x03002970 -_08008260: .4byte 0x03002fd0 -_08008264: - movs r0, 0x1 -_08008266: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8008224 - - thumb_func_start sub_800826C -sub_800826C: @ 800826C - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r4, 0 - ldr r0, _080082D8 - ldrb r0, [r0] - cmp r4, r0 - bcs _080082CC - ldr r6, _080082DC - ldr r5, _080082E0 - movs r0, 0x8 - adds r0, r6 - mov r8, r0 - adds r7, r5, 0 - adds r7, 0x8 -_0800828A: - lsls r0, r4, 3 - subs r0, r4 - lsls r2, r0, 2 - adds r1, r6, 0x4 - adds r1, r2, r1 - adds r0, r5, 0x4 - adds r0, r2, r0 - ldr r1, [r1] - ldr r0, [r0] - cmp r1, r0 - bne _080082AE - mov r1, r8 - adds r0, r2, r1 - adds r1, r2, r7 - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - beq _080082BE -_080082AE: - ldr r1, _080082E4 - movs r0, 0x1 - strb r0, [r1] - bl AllocZeroed - ldr r0, _080082E8 - bl SetMainCallback2 -_080082BE: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080082D8 - ldrb r0, [r0] - cmp r4, r0 - bcc _0800828A -_080082CC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080082D8: .4byte 0x03002f84 -_080082DC: .4byte 0x03002fd0 -_080082E0: .4byte 0x03002970 -_080082E4: .4byte 0x0300295c -_080082E8: .4byte sub_80085BC - thumb_func_end sub_800826C - - thumb_func_start sub_80082EC -sub_80082EC: @ 80082EC - ldr r0, _080082F8 - movs r1, 0 - strb r1, [r0] - ldr r0, _080082FC - strb r1, [r0] - bx lr - .align 2, 0 -_080082F8: .4byte 0x03002f84 -_080082FC: .4byte 0x03002fa0 - thumb_func_end sub_80082EC - - thumb_func_start sub_8008300 -sub_8008300: @ 8008300 - ldr r0, _0800830C - ldr r0, [r0] - movs r1, 0x1C - ands r0, r1 - lsrs r0, 2 - bx lr - .align 2, 0 -_0800830C: .4byte 0x03002a60 - thumb_func_end sub_8008300 - - thumb_func_start sub_8008310 -sub_8008310: @ 8008310 - ldr r0, _0800831C - ldr r0, [r0] - lsrs r0, 5 - movs r1, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_0800831C: .4byte 0x03002a60 - thumb_func_end sub_8008310 - - thumb_func_start sub_8008320 -sub_8008320: @ 8008320 - ldr r0, _08008328 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08008328: .4byte 0x03000430 - thumb_func_end sub_8008320 - - thumb_func_start sub_800832C -sub_800832C: @ 800832C - push {lr} - ldr r2, _08008344 - ldr r1, [r2] - cmp r1, 0 - bne _0800833E - ldr r0, _08008348 - str r0, [r2] - ldr r0, _0800834C - strb r1, [r0] -_0800833E: - pop {r0} - bx r0 - .align 2, 0 -_08008344: .4byte 0x03002fc0 -_08008348: .4byte sub_8008350 -_0800834C: .4byte 0x03002a64 - thumb_func_end sub_800832C - - thumb_func_start sub_8008350 -sub_8008350: @ 8008350 - push {lr} - ldr r0, _0800836C - ldrb r0, [r0] - cmp r0, 0 - bne _08008366 - ldr r0, _08008370 - bl sub_80079A8 - ldr r1, _08008374 - ldr r0, _08008378 - str r0, [r1] -_08008366: - pop {r0} - bx r0 - .align 2, 0 -_0800836C: .4byte 0x03004030 -_08008370: .4byte 0x00005fff -_08008374: .4byte 0x03002fc0 -_08008378: .4byte sub_800837C - thumb_func_end sub_8008350 - - thumb_func_start sub_800837C -sub_800837C: @ 800837C - push {r4,lr} - bl sub_8007B78 - lsls r0, 24 - lsrs r2, r0, 24 - movs r3, 0 - movs r1, 0 - cmp r3, r2 - bge _080083A0 - ldr r4, _080083C8 -_08008390: - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _0800839A - adds r3, 0x1 -_0800839A: - adds r1, 0x1 - cmp r1, r2 - blt _08008390 -_080083A0: - cmp r3, r2 - bne _080083C2 - ldr r2, _080083CC - ldrh r1, [r2] - ldr r0, _080083D0 - ands r0, r1 - strh r0, [r2] - ldr r0, _080083D4 - movs r4, 0x1 - strb r4, [r0] - bl AllocZeroed - ldr r1, _080083D8 - movs r0, 0 - str r0, [r1] - ldr r0, _080083DC - strb r4, [r0] -_080083C2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080083C8: .4byte 0x03002b78 -_080083CC: .4byte 0x020239f8 -_080083D0: .4byte 0x0000ffdf -_080083D4: .4byte 0x03001bf8 -_080083D8: .4byte 0x03002fc0 -_080083DC: .4byte 0x03002a64 - thumb_func_end sub_800837C - - thumb_func_start sub_80083E0 -sub_80083E0: @ 80083E0 - push {r4,r5,lr} - bl sub_8007B78 - lsls r0, 24 - lsrs r3, r0, 24 - movs r1, 0 - movs r2, 0 - cmp r1, r3 - bge _0800840E - ldr r5, _08008438 - ldr r4, _0800843C -_080083F6: - ldrh r0, [r4, 0x1A] - cmp r0, 0x1 - beq _08008404 - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, 0 - beq _08008406 -_08008404: - adds r1, 0x1 -_08008406: - adds r4, 0x1C - adds r2, 0x1 - cmp r2, r3 - blt _080083F6 -_0800840E: - cmp r1, r3 - bne _08008430 - ldr r2, _08008440 - ldrh r1, [r2] - ldr r0, _08008444 - ands r0, r1 - strh r0, [r2] - ldr r0, _08008448 - movs r4, 0x1 - strb r4, [r0] - bl AllocZeroed - ldr r1, _0800844C - movs r0, 0 - str r0, [r1] - ldr r0, _08008450 - strb r4, [r0] -_08008430: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08008438: .4byte 0x03002b78 -_0800843C: .4byte 0x03002970 -_08008440: .4byte 0x020239f8 -_08008444: .4byte 0x0000ffdf -_08008448: .4byte 0x03001bf8 -_0800844C: .4byte 0x03002fc0 -_08008450: .4byte 0x03002a64 - thumb_func_end sub_80083E0 - - thumb_func_start sub_8008454 -sub_8008454: @ 8008454 - push {lr} - ldr r0, _08008470 - ldrb r0, [r0] - cmp r0, 0 - bne _0800846A - ldr r0, _08008474 - bl sub_80079A8 - ldr r1, _08008478 - ldr r0, _0800847C - str r0, [r1] -_0800846A: - pop {r0} - bx r0 - .align 2, 0 -_08008470: .4byte 0x03004030 -_08008474: .4byte 0x00005fff -_08008478: .4byte 0x03002fc0 -_0800847C: .4byte sub_80083E0 - thumb_func_end sub_8008454 - - thumb_func_start sub_8008480 -sub_8008480: @ 8008480 - push {lr} - ldr r2, _08008498 - ldr r1, [r2] - cmp r1, 0 - bne _08008492 - ldr r0, _0800849C - str r0, [r2] - ldr r0, _080084A0 - strb r1, [r0] -_08008492: - pop {r0} - bx r0 - .align 2, 0 -_08008498: .4byte 0x03002fc0 -_0800849C: .4byte sub_8008454 -_080084A0: .4byte 0x03002a64 - thumb_func_end sub_8008480 - - thumb_func_start sub_80084A4 -sub_80084A4: @ 80084A4 - push {lr} - ldr r1, _080084BC - ldr r0, [r1] - cmp r0, 0 - bne _080084B2 - ldr r0, _080084C0 - str r0, [r1] -_080084B2: - ldr r1, _080084C4 - movs r0, 0 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080084BC: .4byte 0x03002fc0 -_080084C0: .4byte sub_80084C8 -_080084C4: .4byte 0x03002a64 - thumb_func_end sub_80084A4 - - thumb_func_start sub_80084C8 -sub_80084C8: @ 80084C8 - push {lr} - ldr r0, _080084E4 - ldrb r0, [r0] - cmp r0, 0 - bne _080084DE - ldr r0, _080084E8 - bl sub_80079A8 - ldr r1, _080084EC - ldr r0, _080084F0 - str r0, [r1] -_080084DE: - pop {r0} - bx r0 - .align 2, 0 -_080084E4: .4byte 0x03004030 -_080084E8: .4byte 0x00002ffe -_080084EC: .4byte 0x03002fc0 -_080084F0: .4byte sub_80084F4 - thumb_func_end sub_80084C8 - - thumb_func_start sub_80084F4 -sub_80084F4: @ 80084F4 - push {r4,lr} - bl sub_8007B78 - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0 - cmp r1, r2 - bcs _0800851E - ldr r3, _08008544 - ldrb r0, [r3] - cmp r0, 0 - beq _0800851E -_0800850C: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r2 - bcs _0800851E - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _0800850C -_0800851E: - cmp r1, r2 - bne _0800853C - movs r1, 0 - ldr r4, _08008548 - ldr r3, _08008544 - movs r2, 0 -_0800852A: - adds r0, r1, r3 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _0800852A - movs r0, 0 - str r0, [r4] -_0800853C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008544: .4byte 0x03002b70 -_08008548: .4byte 0x03002fc0 - thumb_func_end sub_80084F4 - - thumb_func_start sub_800854C -sub_800854C: @ 800854C - push {lr} - ldr r0, _08008594 - ldrb r0, [r0] - cmp r0, 0 - beq _08008590 - ldr r0, _08008598 - ldr r1, [r0] - movs r0, 0xFE - lsls r0, 11 - ands r0, r1 - cmp r0, 0 - beq _08008590 - ldr r0, _0800859C - ldrb r0, [r0] - cmp r0, 0 - bne _08008586 - ldr r0, _080085A0 - str r1, [r0] - ldr r1, _080085A4 - ldr r0, _080085A8 - ldrb r0, [r0] - str r0, [r1] - ldr r1, _080085AC - ldr r0, _080085B0 - ldrb r0, [r0] - str r0, [r1] - ldr r0, _080085B4 - bl SetMainCallback2 -_08008586: - ldr r1, _080085B8 - movs r0, 0x1 - strb r0, [r1] - bl AllocZeroed -_08008590: - pop {r0} - bx r0 - .align 2, 0 -_08008594: .4byte 0x020238c0 -_08008598: .4byte 0x03002a60 -_0800859C: .4byte 0x03002f80 -_080085A0: .4byte 0x03000438 -_080085A4: .4byte 0x0300043c -_080085A8: .4byte 0x03004030 -_080085AC: .4byte 0x03000440 -_080085B0: .4byte 0x03003060 -_080085B4: .4byte sub_80085BC -_080085B8: .4byte 0x0300295c - thumb_func_end sub_800854C - - thumb_func_start sub_80085BC -sub_80085BC: @ 80085BC - push {r4,lr} - bl ResetSpriteData - bl FreeAllSpritePalettes - bl pal_fade_control_reset_maybe - movs r0, 0 - movs r1, 0 - movs r2, 0x2 - bl rboxid_80040B8 - bl ResetTasks - ldr r0, _08008638 - bl SetVBlankCallback - ldr r4, _0800863C - adds r0, r4, 0 - bl SetUpWindowConfig - adds r0, r4, 0 - bl sub_8071C4C - bl sub_8071EF4 - ldr r0, _08008640 - movs r1, 0 - strh r1, [r0] - subs r0, 0x40 - strh r1, [r0] - subs r0, 0x2 - strh r1, [r0] - movs r2, 0x80 - lsls r2, 19 - movs r3, 0xA0 - lsls r3, 1 - adds r0, r3, 0 - strh r0, [r2] - ldr r0, _08008644 - strb r1, [r0] - ldr r0, _08008648 - movs r1, 0 - bl CreateTask - bl sub_8074D08 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl fade_and_return_progress_probably - ldr r0, _0800864C - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008638: .4byte sub_8007300 -_0800863C: .4byte gWindowConfig_81E7198 -_08008640: .4byte 0x04000052 -_08008644: .4byte 0x03001bb4 -_08008648: .4byte Task_DestroySelf -_0800864C: .4byte sub_8008650 - thumb_func_end sub_80085BC - - thumb_func_start sub_8008650 -sub_8008650: @ 8008650 - push {lr} - sub sp, 0x40 - ldr r0, _0800866C - ldr r1, _08008670 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1E - beq _08008690 - cmp r0, 0x1E - bgt _08008674 - cmp r0, 0 - beq _0800867E - b _0800869E - .align 2, 0 -_0800866C: .4byte 0x03001770 -_08008670: .4byte 0x0000043c -_08008674: - cmp r0, 0x3C - beq _08008690 - cmp r0, 0x5A - beq _08008698 - b _0800869E -_0800867E: - ldr r0, _0800868C - movs r1, 0x14 - movs r2, 0x38 - movs r3, 0x1 - bl sub_80729D8 - b _0800869E - .align 2, 0 -_0800868C: .4byte gUnknown_0842C34C -_08008690: - movs r0, 0x16 - bl audio_play - b _0800869E -_08008698: - movs r0, 0x16 - bl audio_play -_0800869E: - ldr r0, _080086B4 - ldr r2, _080086B8 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0xC8 - beq _080086AE - adds r0, 0x1 - strb r0, [r1] -_080086AE: - add sp, 0x40 - pop {r0} - bx r0 - .align 2, 0 -_080086B4: .4byte 0x03001770 -_080086B8: .4byte 0x0000043c - thumb_func_end sub_8008650 - - thumb_func_start sub_80086BC -sub_80086BC: @ 80086BC - ldr r0, _080086C8 - ldrh r0, [r0] - lsrs r0, 2 - movs r1, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_080086C8: .4byte 0x04000128 - thumb_func_end sub_80086BC - - thumb_func_start sub_80086CC -sub_80086CC: @ 80086CC - push {lr} - movs r3, 0 - ldr r2, _080086F0 - ldrh r1, [r2] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080086E8 - ldrh r1, [r2] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _080086E8 - movs r3, 0x1 -_080086E8: - adds r0, r3, 0 - pop {r1} - bx r1 - .align 2, 0 -_080086F0: .4byte 0x04000128 - thumb_func_end sub_80086CC - - thumb_func_start sub_80086F4 -sub_80086F4: @ 80086F4 - ldr r0, _08008700 - ldr r0, [r0] - lsrs r0, 6 - movs r1, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_08008700: .4byte 0x03002a60 - thumb_func_end sub_80086F4 - - thumb_func_start sub_8008704 -sub_8008704: @ 8008704 - ldr r1, _0800870C - strb r0, [r1] - bx lr - .align 2, 0 -_0800870C: .4byte 0x03002f80 - thumb_func_end sub_8008704 - - thumb_func_start sub_8008710 -sub_8008710: @ 8008710 - ldr r0, _08008718 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08008718: .4byte 0x0300295c - thumb_func_end sub_8008710 - - thumb_func_start sub_800871C -sub_800871C: @ 800871C - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _0800875C - ldr r2, _08008760 - ldrh r5, [r2] - strh r5, [r0] - movs r4, 0 - strh r4, [r2] - ldr r3, _08008764 - ldrh r1, [r3] - ldr r0, _08008768 - ands r0, r1 - strh r0, [r3] - strh r5, [r2] - ldr r0, _0800876C - strh r4, [r0] - subs r0, 0x1A - strh r4, [r0] - ldr r1, _08008770 - movs r0, 0xC0 - strh r0, [r1] - movs r0, 0 - str r0, [sp] - ldr r1, _08008774 - ldr r2, _08008778 - mov r0, sp - bl CpuSet - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800875C: .4byte 0x03004034 -_08008760: .4byte 0x04000208 -_08008764: .4byte 0x04000200 -_08008768: .4byte 0x0000ff3f -_0800876C: .4byte 0x04000128 -_08008770: .4byte 0x04000202 -_08008774: .4byte 0x03003070 -_08008778: .4byte 0x050003f0 - thumb_func_end sub_800871C - - thumb_func_start sub_800877C -sub_800877C: @ 800877C - push {r4-r7,lr} - sub sp, 0x4 - ldr r6, _080087F4 - ldr r3, _080087F8 - ldrh r2, [r3] - movs r4, 0 - strh r4, [r3] - ldr r5, _080087FC - ldrh r1, [r5] - ldr r0, _08008800 - ands r0, r1 - strh r0, [r5] - strh r2, [r3] - ldr r0, _08008804 - strh r4, [r0] - ldr r2, _08008808 - movs r1, 0x80 - lsls r1, 6 - adds r0, r1, 0 - strh r0, [r2] - ldrh r0, [r2] - ldr r7, _0800880C - adds r1, r7, 0 - orrs r0, r1 - strh r0, [r2] - ldrh r2, [r3] - strh r2, [r6] - strh r4, [r3] - ldrh r0, [r5] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r5] - strh r2, [r3] - ldr r0, _08008810 - strh r4, [r0] - movs r5, 0 - str r5, [sp] - ldr r1, _08008814 - ldr r2, _08008818 - mov r0, sp - bl CpuSet - ldr r0, _0800881C - strb r4, [r0] - ldr r0, _08008820 - strh r5, [r0] - ldr r0, _08008824 - strh r5, [r0] - ldr r0, _08008828 - strb r4, [r0] - ldr r0, _0800882C - strb r4, [r0] - ldr r0, _08008830 - strb r4, [r0] - ldr r0, _08008834 - strb r4, [r0] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080087F4: .4byte 0x03004034 -_080087F8: .4byte 0x04000208 -_080087FC: .4byte 0x04000200 -_08008800: .4byte 0x0000ff3f -_08008804: .4byte 0x04000134 -_08008808: .4byte 0x04000128 -_0800880C: .4byte 0x00004003 -_08008810: .4byte 0x0400012a -_08008814: .4byte 0x03003070 -_08008818: .4byte 0x050003f0 -_0800881C: .4byte 0x03000450 -_08008820: .4byte 0x03000452 -_08008824: .4byte 0x03000454 -_08008828: .4byte 0x03000456 -_0800882C: .4byte 0x03000457 -_08008830: .4byte 0x03003060 -_08008834: .4byte 0x03004030 - thumb_func_end sub_800877C - - thumb_func_start sub_8008838 -sub_8008838: @ 8008838 - push {lr} - bl sub_800877C - bl sub_800871C - pop {r0} - bx r0 - thumb_func_end sub_8008838 - - thumb_func_start sub_8008848 -sub_8008848: @ 8008848 - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r0, _08008864 - ldrb r0, [r0, 0x1] - cmp r0, 0x4 - bhi _080088FA - lsls r0, 2 - ldr r1, _08008868 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08008864: .4byte 0x03003070 -_08008868: .4byte _0800886C - .align 2, 0 -_0800886C: - .4byte _08008880 - .4byte _08008890 - .4byte _080088A8 - .4byte _080088E4 - .4byte _080088EE -_08008880: - bl sub_800871C - ldr r1, _0800888C - movs r0, 0x1 - strb r0, [r1, 0x1] - b _080088FA - .align 2, 0 -_0800888C: .4byte 0x03003070 -_08008890: - ldrb r0, [r4] - cmp r0, 0x1 - bne _080088FA - bl sub_800877C - ldr r1, _080088A4 - movs r0, 0x2 - strb r0, [r1, 0x1] - b _080088FA - .align 2, 0 -_080088A4: .4byte 0x03003070 -_080088A8: - ldrb r1, [r4] - cmp r1, 0x1 - beq _080088B8 - cmp r1, 0x2 - beq _080088D0 - bl sub_8008974 - b _080088FA -_080088B8: - ldr r2, _080088CC - ldrb r0, [r2] - cmp r0, 0x8 - bne _080088FA - ldrb r0, [r2, 0x3] - cmp r0, 0x1 - bls _080088FA - strb r1, [r2, 0xE] - b _080088FA - .align 2, 0 -_080088CC: .4byte 0x03003070 -_080088D0: - ldr r0, _080088DC - movs r1, 0 - strb r1, [r0, 0x1] - ldr r0, _080088E0 - strh r1, [r0] - b _080088FA - .align 2, 0 -_080088DC: .4byte 0x03003070 -_080088E0: .4byte 0x0400012a -_080088E4: - bl sub_80089A0 - ldr r1, _08008934 - movs r0, 0x4 - strb r0, [r1, 0x1] -_080088EE: - adds r0, r5, 0 - bl sub_80089F0 - adds r0, r6, 0 - bl sub_8008AD8 -_080088FA: - movs r0, 0 - strb r0, [r4] - ldr r1, _08008934 - ldrb r2, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 2 - orrs r2, r0 - ldrb r0, [r1] - cmp r0, 0x8 - bne _08008912 - movs r0, 0x20 - orrs r2, r0 -_08008912: - ldrb r0, [r1, 0xC] - lsls r3, r0, 8 - ldrb r0, [r1, 0xF] - lsls r4, r0, 9 - ldrb r0, [r1, 0x10] - lsls r5, r0, 12 - ldrb r0, [r1, 0x11] - lsls r6, r0, 13 - ldrb r0, [r1, 0x12] - lsls r7, r0, 14 - ldrb r0, [r1, 0x1] - cmp r0, 0x4 - bne _08008938 - movs r0, 0x40 - orrs r0, r3 - orrs r0, r2 - b _0800893C - .align 2, 0 -_08008934: .4byte 0x03003070 -_08008938: - adds r0, r2, 0 - orrs r0, r3 -_0800893C: - orrs r0, r4 - orrs r0, r5 - orrs r0, r6 - orrs r0, r7 - adds r2, r0, 0 - ldrb r3, [r1, 0x13] - cmp r3, 0x1 - bne _08008952 - movs r0, 0x80 - lsls r0, 9 - orrs r2, r0 -_08008952: - ldrb r0, [r1, 0x2] - cmp r0, 0x3 - bls _0800895E - movs r0, 0x80 - lsls r0, 10 - orrs r2, r0 -_0800895E: - adds r1, r2, 0 - cmp r3, 0x2 - bne _0800896A - movs r0, 0x80 - lsls r0, 11 - orrs r1, r0 -_0800896A: - adds r0, r1, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8008848 - - thumb_func_start sub_8008974 -sub_8008974: @ 8008974 - push {lr} - ldr r0, _08008990 - ldr r1, [r0] - movs r0, 0xC - ands r1, r0 - ldr r2, _08008994 - cmp r1, 0x8 - bne _08008998 - ldrb r0, [r2, 0x2] - cmp r0, 0 - bne _08008998 - strb r1, [r2] - b _0800899C - .align 2, 0 -_08008990: .4byte 0x04000128 -_08008994: .4byte 0x03003070 -_08008998: - movs r0, 0 - strb r0, [r2] -_0800899C: - pop {r0} - bx r0 - thumb_func_end sub_8008974 - - thumb_func_start sub_80089A0 -sub_80089A0: @ 80089A0 - push {r4,lr} - ldr r0, _080089D8 - ldrb r0, [r0] - cmp r0, 0 - beq _080089D0 - ldr r1, _080089DC - ldr r2, _080089E0 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x41 - strh r0, [r1] - ldr r0, _080089E4 - ldr r2, _080089E8 - ldrh r4, [r2] - strh r4, [r0] - movs r0, 0 - strh r0, [r2] - ldr r3, _080089EC - ldrh r0, [r3] - movs r1, 0x40 - orrs r0, r1 - strh r0, [r3] - strh r4, [r2] -_080089D0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080089D8: .4byte 0x03003070 -_080089DC: .4byte 0x0400010c -_080089E0: .4byte 0x0000ff3b -_080089E4: .4byte 0x03004034 -_080089E8: .4byte 0x04000208 -_080089EC: .4byte 0x04000200 - thumb_func_end sub_80089A0 - - thumb_func_start sub_80089F0 -sub_80089F0: @ 80089F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r3, r0, 0 - ldr r2, _08008A68 - ldr r1, _08008A6C - ldrh r0, [r1] - strh r0, [r2] - movs r0, 0 - strh r0, [r1] - ldr r1, _08008A70 - ldr r4, _08008A74 - adds r0, r1, r4 - ldrb r4, [r0] - adds r6, r1, 0 - cmp r4, 0x31 - bhi _08008A80 - movs r1, 0xCE - lsls r1, 2 - adds r0, r6, r1 - ldrb r0, [r0] - adds r0, r4, r0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x31 - bls _08008A2E - subs r0, 0x32 - lsls r0, 24 - lsrs r0, 24 -_08008A2E: - movs r2, 0 - ldr r4, _08008A78 - mov r9, r4 - ldr r1, _08008A7C - mov r10, r1 - lsls r5, r0, 1 - movs r0, 0x18 - adds r0, r6 - mov r8, r0 - mov r12, r2 - movs r7, 0x64 -_08008A44: - ldrh r0, [r4] - ldrh r1, [r3] - orrs r0, r1 - strh r0, [r4] - adds r0, r2, 0 - muls r0, r7 - adds r0, r5, r0 - add r0, r8 - strh r1, [r0] - mov r1, r12 - strh r1, [r3] - adds r3, 0x2 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _08008A44 - b _08008A8C - .align 2, 0 -_08008A68: .4byte 0x03004034 -_08008A6C: .4byte 0x04000208 -_08008A70: .4byte 0x03003070 -_08008A74: .4byte 0x00000339 -_08008A78: .4byte 0x03000452 -_08008A7C: .4byte 0x03003060 -_08008A80: - movs r0, 0x1 - strb r0, [r6, 0x12] - ldr r2, _08008AC4 - mov r9, r2 - ldr r4, _08008AC8 - mov r10, r4 -_08008A8C: - mov r1, r9 - ldrh r0, [r1] - cmp r0, 0 - beq _08008AA4 - ldr r2, _08008ACC - adds r0, r6, r2 - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - mov r4, r9 - strh r2, [r4] -_08008AA4: - ldr r1, _08008AD0 - ldr r2, _08008AD4 - ldrh r0, [r2] - strh r0, [r1] - ldr r4, _08008ACC - adds r0, r6, r4 - ldrb r0, [r0] - mov r1, r10 - strb r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008AC4: .4byte 0x03000452 -_08008AC8: .4byte 0x03003060 -_08008ACC: .4byte 0x00000339 -_08008AD0: .4byte 0x04000208 -_08008AD4: .4byte 0x03004034 - thumb_func_end sub_80089F0 - - thumb_func_start sub_8008AD8 -sub_8008AD8: @ 8008AD8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r12, r0 - ldr r2, _08008B38 - ldr r1, _08008B3C - ldrh r0, [r1] - strh r0, [r2] - movs r0, 0 - strh r0, [r1] - ldr r1, _08008B40 - ldr r3, _08008B44 - adds r0, r1, r3 - ldrb r0, [r0] - adds r7, r1, 0 - cmp r0, 0 - bne _08008B48 - movs r3, 0 - mov r8, r7 - ldrb r6, [r7, 0x3] -_08008B04: - movs r2, 0 - adds r5, r3, 0x1 - cmp r2, r6 - bcs _08008B28 - lsls r0, r3, 3 - mov r1, r12 - adds r3, r0, r1 - movs r4, 0 - mov r0, r8 - ldrb r1, [r0, 0x3] -_08008B18: - lsls r0, r2, 1 - adds r0, r3 - strh r4, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r1 - bcc _08008B18 -_08008B28: - lsls r0, r5, 24 - lsrs r3, r0, 24 - cmp r3, 0x7 - bls _08008B04 - movs r0, 0x1 - strb r0, [r7, 0xC] - b _08008BC0 - .align 2, 0 -_08008B38: .4byte 0x03004034 -_08008B3C: .4byte 0x04000208 -_08008B40: .4byte 0x03003070 -_08008B44: .4byte 0x00000fbd -_08008B48: - movs r3, 0 - ldrb r1, [r7, 0x3] - mov r9, r1 - movs r2, 0xCF - lsls r2, 2 - adds r2, r7 - mov r8, r2 - mov r10, r7 -_08008B58: - movs r2, 0 - adds r5, r3, 0x1 - cmp r2, r9 - bcs _08008B94 - lsls r0, r3, 3 - mov r1, r12 - adds r6, r0, r1 - ldr r0, _08008BD8 - ldrb r1, [r0] - lsls r1, 1 - mov r0, r10 - ldrb r4, [r0, 0x3] - movs r0, 0x64 - muls r0, r3 - adds r3, r1, r0 -_08008B76: - lsls r0, r2, 1 - adds r1, r0, r6 - adds r0, r2 - lsls r0, 3 - adds r0, r2 - lsls r0, 5 - adds r0, r3, r0 - add r0, r8 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _08008B76 -_08008B94: - lsls r0, r5, 24 - lsrs r3, r0, 24 - cmp r3, 0x7 - bls _08008B58 - adds r2, r7, 0 - ldr r3, _08008BDC - adds r1, r2, r3 - ldrb r0, [r1] - subs r0, 0x1 - movs r3, 0 - strb r0, [r1] - ldr r0, _08008BE0 - adds r2, r0 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x31 - bls _08008BBE - strb r3, [r2] -_08008BBE: - strb r3, [r7, 0xC] -_08008BC0: - ldr r1, _08008BE4 - ldr r2, _08008BE8 - ldrh r0, [r2] - strh r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008BD8: .4byte 0x0300402c -_08008BDC: .4byte 0x00000fbd -_08008BE0: .4byte 0x00000fbc -_08008BE4: .4byte 0x04000208 -_08008BE8: .4byte 0x03004034 - thumb_func_end sub_8008AD8 - - thumb_func_start sub_8008BEC -sub_8008BEC: @ 8008BEC - push {r4,lr} - ldr r3, _08008C14 - ldrb r4, [r3] - cmp r4, 0 - beq _08008C28 - ldrb r0, [r3, 0x1] - cmp r0, 0x2 - beq _08008C22 - cmp r0, 0x4 - bne _08008C52 - movs r0, 0xD - ldrsb r0, [r3, r0] - cmp r0, 0x8 - bgt _08008C18 - ldrb r0, [r3, 0x10] - cmp r0, 0x1 - beq _08008C22 - movs r0, 0x1 - strb r0, [r3, 0x13] - b _08008C52 - .align 2, 0 -_08008C14: .4byte 0x03003070 -_08008C18: - ldrb r0, [r3, 0x13] - cmp r0, 0x1 - beq _08008C52 - movs r0, 0 - strb r0, [r3, 0xD] -_08008C22: - bl sub_8008CF4 - b _08008C52 -_08008C28: - ldrb r2, [r3, 0x1] - cmp r2, 0x4 - beq _08008C32 - cmp r2, 0x2 - bne _08008C52 -_08008C32: - ldr r1, _08008C58 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xA - bls _08008C52 - cmp r2, 0x4 - bne _08008C4A - movs r0, 0x2 - strb r0, [r3, 0x13] -_08008C4A: - cmp r2, 0x2 - bne _08008C52 - strb r4, [r3, 0x3] - strb r4, [r3, 0xF] -_08008C52: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008C58: .4byte 0x03000450 - thumb_func_end sub_8008BEC - - thumb_func_start Timer3Intr -Timer3Intr: @ 8008C5C - push {lr} - bl sub_8008FCC - bl sub_8008CF4 - pop {r0} - bx r0 - thumb_func_end Timer3Intr - - thumb_func_start sub_8008C6C -sub_8008C6C: @ 8008C6C - push {r4,lr} - ldr r4, _08008C98 - ldr r0, _08008C9C - ldr r1, [r0] - lsls r0, r1, 26 - lsrs r0, 30 - strb r0, [r4, 0x2] - ldrb r0, [r4, 0x1] - cmp r0, 0x2 - beq _08008CA0 - cmp r0, 0x4 - bne _08008CBE - lsls r0, r1, 25 - lsrs r0, 31 - strb r0, [r4, 0x10] - bl sub_8008E00 - bl sub_8008F18 - bl sub_8009000 - b _08008CBE - .align 2, 0 -_08008C98: .4byte 0x03003070 -_08008C9C: .4byte 0x04000128 -_08008CA0: - bl sub_8008D04 - lsls r0, 24 - cmp r0, 0 - beq _08008CBE - ldrb r0, [r4] - cmp r0, 0 - beq _08008CBA - movs r0, 0x3 - strb r0, [r4, 0x1] - movs r0, 0x8 - strb r0, [r4, 0xD] - b _08008CBE -_08008CBA: - movs r0, 0x4 - strb r0, [r4, 0x1] -_08008CBE: - ldr r3, _08008CE4 - ldrb r0, [r3, 0xD] - adds r0, 0x1 - movs r2, 0 - strb r0, [r3, 0xD] - ldr r1, _08008CE8 - strb r2, [r1] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x8 - bne _08008CDE - ldr r0, _08008CEC - ldr r2, _08008CF0 - adds r1, r3, r2 - ldrb r1, [r1] - strb r1, [r0] -_08008CDE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008CE4: .4byte 0x03003070 -_08008CE8: .4byte 0x03000450 -_08008CEC: .4byte 0x03004030 -_08008CF0: .4byte 0x00000fbd - thumb_func_end sub_8008C6C - - thumb_func_start sub_8008CF4 -sub_8008CF4: @ 8008CF4 - ldr r0, _08008D00 - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] - bx lr - .align 2, 0 -_08008D00: .4byte 0x04000128 - thumb_func_end sub_8008CF4 - - thumb_func_start sub_8008D04 -sub_8008D04: @ 8008D04 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r5, 0 - ldr r6, _08008D20 - ldr r0, _08008D24 - ldrb r1, [r0, 0xE] - adds r7, r0, 0 - cmp r1, 0x1 - bne _08008D30 - ldr r1, _08008D28 - ldr r2, _08008D2C - b _08008D34 - .align 2, 0 -_08008D20: .4byte 0x0000ffff -_08008D24: .4byte 0x03003070 -_08008D28: .4byte 0x0400012a -_08008D2C: .4byte 0x00008fff -_08008D30: - ldr r1, _08008D88 - ldr r2, _08008D8C -_08008D34: - adds r0, r2, 0 - strh r0, [r1] - ldr r2, _08008D90 - ldr r3, _08008D94 - ldr r0, [r3] - ldr r1, [r3, 0x4] - str r0, [r2] - str r1, [r2, 0x4] - movs r0, 0 - movs r1, 0 - str r0, [r3] - str r1, [r3, 0x4] - strb r0, [r2, 0xA] - movs r4, 0 - ldr r0, _08008D98 - mov r9, r0 - mov r8, r2 - ldr r2, _08008D9C - ldr r1, _08008DA0 - mov r12, r1 -_08008D5C: - lsls r0, r4, 1 - add r0, r8 - ldrh r3, [r0] - movs r0, 0x4 - negs r0, r0 - ands r0, r3 - ldr r1, _08008D8C - cmp r0, r1 - beq _08008D74 - adds r0, r3, 0 - cmp r0, r2 - bne _08008DA4 -_08008D74: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r3, 0 - cmp r6, r0 - bls _08008DAC - cmp r0, 0 - beq _08008DAC - adds r6, r3, 0 - b _08008DAC - .align 2, 0 -_08008D88: .4byte 0x0400012a -_08008D8C: .4byte 0x0000b9a0 -_08008D90: .4byte 0x03003074 -_08008D94: .4byte 0x04000120 -_08008D98: .4byte 0x03000457 -_08008D9C: .4byte 0x00008fff -_08008DA0: .4byte 0x0000ffff -_08008DA4: - cmp r0, r12 - beq _08008DB6 - movs r5, 0 - b _08008DB6 -_08008DAC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _08008D5C -_08008DB6: - strb r5, [r7, 0x3] - adds r0, r5, 0 - cmp r0, 0x1 - bls _08008DE6 - mov r2, r9 - ldrb r2, [r2] - cmp r0, r2 - bne _08008DD8 - ldrh r1, [r7, 0x4] - ldr r0, _08008DD4 - cmp r1, r0 - bne _08008DD8 - movs r0, 0x1 - b _08008DF2 - .align 2, 0 -_08008DD4: .4byte 0x00008fff -_08008DD8: - ldrb r0, [r7, 0x3] - cmp r0, 0x1 - bls _08008DE6 - movs r0, 0x3 - ands r6, r0 - adds r0, r6, 0x1 - b _08008DE8 -_08008DE6: - movs r0, 0 -_08008DE8: - strb r0, [r7, 0xF] - ldrb r0, [r7, 0x3] - mov r1, r9 - strb r0, [r1] - movs r0, 0 -_08008DF2: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8008D04 - - thumb_func_start sub_8008E00 -sub_8008E00: @ 8008E00 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - ldr r0, _08008E58 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - ldr r0, _08008E5C - ldrb r1, [r0, 0x16] - adds r6, r0, 0 - cmp r1, 0 - bne _08008E64 - movs r4, 0 - ldr r7, _08008E60 - ldrb r0, [r6, 0x3] - cmp r4, r0 - bcs _08008E4E - adds r5, r6, 0 - ldrh r1, [r6, 0x14] - adds r3, r7, 0 - adds r2, r6, 0 -_08008E2E: - lsls r0, r4, 1 - add r0, sp - ldrh r0, [r0] - cmp r1, r0 - beq _08008E42 - ldrb r0, [r3] - cmp r0, 0 - beq _08008E42 - movs r0, 0x1 - strb r0, [r5, 0x11] -_08008E42: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r2, 0x3] - cmp r4, r0 - bcc _08008E2E -_08008E4E: - movs r0, 0 - strh r0, [r6, 0x14] - movs r0, 0x1 - strb r0, [r7] - b _08008F04 - .align 2, 0 -_08008E58: .4byte 0x04000120 -_08008E5C: .4byte 0x03003070 -_08008E60: .4byte 0x03000456 -_08008E64: - ldr r2, _08008ED4 - adds r1, r6, r2 - adds r2, 0x1 - adds r0, r6, r2 - ldrb r2, [r0] - ldrb r1, [r1] - adds r0, r2, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x31 - bls _08008E80 - subs r0, 0x32 - lsls r0, 24 - lsrs r0, 24 -_08008E80: - cmp r2, 0x31 - bhi _08008EDC - movs r4, 0 - ldrb r1, [r6, 0x3] - cmp r4, r1 - bcs _08008EE0 - adds r5, r6, 0 - ldr r7, _08008ED8 - lsls r0, 1 - mov r12, r0 - movs r2, 0xCF - lsls r2, 2 - adds r2, r6 - mov r8, r2 -_08008E9C: - lsls r1, r4, 1 - mov r2, sp - adds r0, r2, r1 - ldrh r3, [r0] - ldrh r2, [r5, 0x14] - adds r0, r3, r2 - strh r0, [r5, 0x14] - ldrh r0, [r7] - orrs r0, r3 - strh r0, [r7] - ldrb r2, [r5, 0x17] - movs r0, 0x64 - muls r0, r2 - add r0, r12 - adds r1, r4 - lsls r1, 3 - adds r1, r4 - lsls r1, 5 - adds r0, r1 - add r0, r8 - strh r3, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r5, 0x3] - cmp r4, r0 - bcc _08008E9C - b _08008EE0 - .align 2, 0 -_08008ED4: .4byte 0x00000fbc -_08008ED8: .4byte 0x03000454 -_08008EDC: - movs r0, 0x2 - strb r0, [r6, 0x12] -_08008EE0: - ldrb r0, [r6, 0x17] - adds r0, 0x1 - strb r0, [r6, 0x17] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bne _08008F04 - ldr r2, _08008F10 - ldrh r0, [r2] - cmp r0, 0 - beq _08008F04 - ldr r1, _08008F14 - adds r0, r6, r1 - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - movs r0, 0 - strh r0, [r2] -_08008F04: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008F10: .4byte 0x03000454 -_08008F14: .4byte 0x00000fbd - thumb_func_end sub_8008E00 - - thumb_func_start sub_8008F18 -sub_8008F18: @ 8008F18 - push {r4,lr} - ldr r0, _08008F54 - ldrb r1, [r0, 0x16] - adds r4, r0, 0 - cmp r1, 0x8 - bne _08008F6A - ldr r1, _08008F58 - ldrh r0, [r4, 0x14] - strh r0, [r1] - ldr r1, _08008F5C - ldrb r2, [r1] - cmp r2, 0 - bne _08008F64 - ldr r0, _08008F60 - adds r1, r4, r0 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - movs r0, 0xCE - lsls r0, 2 - adds r1, r4, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x31 - bls _08008FC0 - strb r2, [r1] - b _08008FC0 - .align 2, 0 -_08008F54: .4byte 0x03003070 -_08008F58: .4byte 0x0400012a -_08008F5C: .4byte 0x03000451 -_08008F60: .4byte 0x00000339 -_08008F64: - movs r0, 0 - strb r0, [r1] - b _08008FC0 -_08008F6A: - ldr r1, _08008F90 - ldrb r0, [r1] - cmp r0, 0 - bne _08008F86 - ldr r2, _08008F94 - adds r0, r4, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _08008F80 - movs r0, 0x1 - strb r0, [r1] -_08008F80: - ldrb r0, [r1] - cmp r0, 0 - beq _08008F9C -_08008F86: - ldr r1, _08008F98 - movs r0, 0 - strh r0, [r1] - b _08008FBA - .align 2, 0 -_08008F90: .4byte 0x03000451 -_08008F94: .4byte 0x00000339 -_08008F98: .4byte 0x0400012a -_08008F9C: - ldr r3, _08008FC8 - movs r1, 0xCE - lsls r1, 2 - adds r0, r4, r1 - ldrb r0, [r0] - lsls r0, 1 - ldrb r2, [r4, 0x16] - movs r1, 0x64 - muls r1, r2 - adds r0, r1 - adds r1, r4, 0 - adds r1, 0x18 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r3] -_08008FBA: - ldrb r0, [r4, 0x16] - adds r0, 0x1 - strb r0, [r4, 0x16] -_08008FC0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008FC8: .4byte 0x0400012a - thumb_func_end sub_8008F18 - - thumb_func_start sub_8008FCC -sub_8008FCC: @ 8008FCC - push {lr} - ldr r0, _08008FEC - ldrb r0, [r0] - cmp r0, 0 - beq _08008FE8 - ldr r2, _08008FF0 - ldrh r1, [r2] - ldr r0, _08008FF4 - ands r0, r1 - strh r0, [r2] - ldr r1, _08008FF8 - ldr r2, _08008FFC - adds r0, r2, 0 - strh r0, [r1] -_08008FE8: - pop {r0} - bx r0 - .align 2, 0 -_08008FEC: .4byte 0x03003070 -_08008FF0: .4byte 0x0400010e -_08008FF4: .4byte 0x0000ff7f -_08008FF8: .4byte 0x0400010c -_08008FFC: .4byte 0x0000ff3b - thumb_func_end sub_8008FCC - - thumb_func_start sub_8009000 -sub_8009000: @ 8009000 - push {lr} - ldr r1, _08009014 - ldrb r0, [r1, 0x17] - cmp r0, 0x8 - bne _08009018 - movs r0, 0 - strb r0, [r1, 0x16] - strb r0, [r1, 0x17] - b _08009028 - .align 2, 0 -_08009014: .4byte 0x03003070 -_08009018: - ldrb r0, [r1] - cmp r0, 0 - beq _08009028 - ldr r0, _0800902C - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] -_08009028: - pop {r0} - bx r0 - .align 2, 0 -_0800902C: .4byte 0x0400010e - thumb_func_end sub_8009000 - - thumb_func_start sub_8009030 -sub_8009030: @ 8009030 - push {r4-r6,lr} - ldr r1, _08009078 - ldr r2, _0800907C - adds r0, r1, r2 - movs r2, 0 - strb r2, [r0] - movs r3, 0xCE - lsls r3, 2 - adds r0, r1, r3 - strb r2, [r0] - movs r0, 0 - movs r6, 0x64 - adds r5, r1, 0 - adds r5, 0x18 - ldr r4, _08009080 -_0800904E: - movs r2, 0 - adds r1, r0, 0x1 - adds r3, r0, 0 - muls r3, r6 -_08009056: - lsls r0, r2, 1 - adds r0, r3 - adds r0, r5 - strh r4, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x31 - bls _08009056 - lsls r0, r1, 24 - lsrs r0, 24 - cmp r0, 0x7 - bls _0800904E - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08009078: .4byte 0x03003070 -_0800907C: .4byte 0x00000339 -_08009080: .4byte 0x0000efff - thumb_func_end sub_8009030 - - thumb_func_start sub_8009084 -sub_8009084: @ 8009084 - push {r4-r7,lr} - ldr r1, _080090E4 - ldr r2, _080090E8 - adds r0, r1, r2 - movs r2, 0 - strb r2, [r0] - ldr r3, _080090EC - adds r0, r1, r3 - strb r2, [r0] - movs r0, 0x64 - mov r12, r0 - movs r3, 0xCF - lsls r3, 2 - adds r7, r1, r3 - ldr r6, _080090F0 -_080090A2: - movs r3, 0 - lsls r0, r2, 1 - adds r5, r2, 0x1 - adds r0, r2 - lsls r0, 3 - adds r0, r2 - lsls r4, r0, 5 -_080090B0: - movs r2, 0 - adds r1, r3, 0x1 - mov r0, r12 - muls r0, r3 - adds r3, r0, 0 -_080090BA: - lsls r0, r2, 1 - adds r0, r3 - adds r0, r4 - adds r0, r7 - strh r6, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x31 - bls _080090BA - lsls r0, r1, 24 - lsrs r3, r0, 24 - cmp r3, 0x7 - bls _080090B0 - lsls r0, r5, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _080090A2 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080090E4: .4byte 0x03003070 -_080090E8: .4byte 0x00000fbd -_080090EC: .4byte 0x00000fbc -_080090F0: .4byte 0x0000efff - thumb_func_end sub_8009084 diff --git a/asm/rom3.s b/asm/rom3.s index 325b2f91b..58ddfa908 100644 --- a/asm/rom3.s +++ b/asm/rom3.s @@ -4249,7 +4249,7 @@ sub_800B858: @ 800B858 ands r0, r1 cmp r0, 0 beq _0800B876 - bl sub_8007378 + bl OpenLink ldr r0, _0800B880 movs r1, 0 bl CreateTask @@ -4619,7 +4619,7 @@ _0800BB84: .4byte 0x02024a72 _0800BB88: .4byte sub_8037510 _0800BB8C: .4byte 0x02024a68 _0800BB90: - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r5, r0, 24 ldrh r1, [r6] @@ -5462,8 +5462,8 @@ _0800C21A: adds r0, 0x1 b _0800C352 _0800C220: - bl sub_8008300 - bl sub_8008310 + bl GetLinkPlayerCount_2 + bl IsLinkMaster lsls r0, 24 cmp r0, 0 beq _0800C248 @@ -5544,7 +5544,7 @@ _0800C28C: adds r5, r2 adds r1, r5 adds r2, r6, 0 - bl sub_8007E88 + bl SendBlock ldrh r0, [r4, 0x1E] adds r0, 0x1 strh r0, [r4, 0x1E] @@ -5649,7 +5649,7 @@ _0800C394: .4byte 0x03002970 _0800C398: .4byte 0x00002211 _0800C39C: .4byte 0x03002b80 _0800C3A0: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 ldr r2, _0800C468 @@ -5662,7 +5662,7 @@ _0800C3A0: cmp r0, 0 beq _0800C446 adds r0, r4, 0 - bl sub_8007F30 + bl ResetBlockReceivedFlag lsls r0, r4, 8 mov r2, r10 adds r3, r0, r2 @@ -5738,7 +5738,7 @@ _0800C446: lsls r0, r1, 24 lsrs r4, r0, 24 _0800C44C: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 @@ -10871,7 +10871,7 @@ sub_800EC9C: @ 800EC9C bl RunTasks bl AnimateSprites bl BuildOamBuffer - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r4, r0, 24 ldr r0, _0800ECD4 @@ -10939,7 +10939,7 @@ _0800ED2E: lsrs r0, 24 adds r1, r4, 0 movs r2, 0x20 - bl sub_8007E88 + bl SendBlock ldr r0, _0800ED60 strb r5, [r0] b _0800F008 @@ -10960,14 +10960,14 @@ _0800ED64: .align 2, 0 _0800ED78: .4byte 0x02024d1e _0800ED7C: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0x3 ands r1, r0 cmp r1, 0x3 beq _0800ED8A b _0800F008 _0800ED8A: - bl sub_8007F18 + bl ResetBlockReceivedFlags movs r3, 0 ldr r0, _0800EDA8 ldrh r1, [r0] @@ -11108,19 +11108,19 @@ _0800EE94: lsrs r0, 24 ldr r1, _0800EEA8 movs r2, 0xC8 - bl sub_8007E88 + bl SendBlock b _0800EF96 .align 2, 0 _0800EEA8: .4byte 0x03004360 _0800EEAC: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0x3 ands r1, r0 cmp r1, 0x3 beq _0800EEBA b _0800F008 _0800EEBA: - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r0, _0800EED0 lsls r1, r5, 8 ldr r2, _0800EED4 @@ -11143,19 +11143,19 @@ _0800EEE4: lsrs r0, 24 ldr r1, _0800EEF8 movs r2, 0xC8 - bl sub_8007E88 + bl SendBlock b _0800EF96 .align 2, 0 _0800EEF8: .4byte 0x03004428 _0800EEFC: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0x3 ands r1, r0 cmp r1, 0x3 beq _0800EF0A b _0800F008 _0800EF0A: - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r0, _0800EF20 lsls r1, r5, 8 ldr r2, _0800EF24 @@ -11176,17 +11176,17 @@ _0800EF28: lsrs r0, 24 ldr r1, _0800EF44 movs r2, 0xC8 - bl sub_8007E88 + bl SendBlock b _0800EF96 .align 2, 0 _0800EF44: .4byte 0x030044f0 _0800EF48: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0x3 ands r1, r0 cmp r1, 0x3 bne _0800F008 - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r4, _0800EFA0 lsls r1, r5, 8 ldr r0, _0800EFA4 @@ -11383,7 +11383,7 @@ sub_800F104: @ 800F104 mov r7, r9 mov r6, r8 push {r6,r7} - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r6, r0, 24 ldr r4, _0800F148 @@ -11441,7 +11441,7 @@ _0800F17E: lsrs r0, 24 adds r1, r4, 0 movs r2, 0x60 - bl sub_8007E88 + bl SendBlock ldrb r0, [r5] adds r0, 0x1 strb r0, [r5] @@ -11449,12 +11449,12 @@ _0800F17E: .align 2, 0 _0800F19C: .4byte 0x03002fa4 _0800F1A0: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0xF ands r1, r0 cmp r1, 0xF bne _0800F27A - bl sub_8007F18 + bl ResetBlockReceivedFlags movs r4, 0 lsls r0, r6, 3 subs r0, r6 @@ -11571,7 +11571,7 @@ sub_800F298: @ 800F298 push {r4-r7,lr} mov r7, r8 push {r7} - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r6, r0, 24 ldr r0, _0800F2D0 @@ -11631,20 +11631,20 @@ _0800F316: lsrs r0, 24 adds r1, r4, 0 movs r2, 0x20 - bl sub_8007E88 + bl SendBlock b _0800F770 .align 2, 0 _0800F338: .4byte 0x03002fa4 _0800F33C: .4byte 0x02000000 _0800F340: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0xF ands r1, r0 cmp r1, 0xF beq _0800F34E b _0800F7E0 _0800F34E: - bl sub_8007F18 + bl ResetBlockReceivedFlags movs r4, 0 ldr r0, _0800F36C ldrh r1, [r0] @@ -11864,20 +11864,20 @@ _0800F4EA: lsrs r0, 24 ldr r1, _0800F500 movs r2, 0xC8 - bl sub_8007E88 + bl SendBlock b _0800F770 .align 2, 0 _0800F4FC: .4byte 0x02024d1e _0800F500: .4byte 0x0201d000 _0800F504: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0xF ands r1, r0 cmp r1, 0xF beq _0800F512 b _0800F7E0 _0800F512: - bl sub_8007F18 + bl ResetBlockReceivedFlags movs r4, 0 lsls r0, r6, 3 subs r0, r6 @@ -12014,19 +12014,19 @@ _0800F604: lsrs r0, 24 ldr r1, _0800F618 movs r2, 0x64 - bl sub_8007E88 + bl SendBlock b _0800F770 .align 2, 0 _0800F618: .4byte 0x0201d0c8 _0800F61C: - bl sub_8007EE4 + bl GetBlockRecievedStatus movs r1, 0xF ands r1, r0 cmp r1, 0xF beq _0800F62A b _0800F7E0 _0800F62A: - bl sub_8007F18 + bl ResetBlockReceivedFlags movs r4, 0 lsls r0, r6, 3 subs r0, r6 @@ -23791,7 +23791,7 @@ _080155C0: str r0, [r5] adds r4, 0x1 _080155CE: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 @@ -68499,7 +68499,7 @@ dp01_tbl1_exec_completed: @ 802BF9C ands r0, r1 cmp r0, 0 beq _0802BFF0 - bl link_get_multiplayer_id + bl GetMultiplayerId mov r1, sp strb r0, [r1] movs r0, 0x2 @@ -92136,7 +92136,7 @@ dp01_tbl4_exec_completed: @ 8038004 ands r0, r1 cmp r0, 0 beq _08038058 - bl link_get_multiplayer_id + bl GetMultiplayerId mov r1, sp strb r0, [r1] movs r0, 0x2 @@ -94857,7 +94857,7 @@ _08039710: .4byte 0x03002970 _08039714: movs r5, 0 ldr r4, _0803986C - bl link_get_multiplayer_id + bl GetMultiplayerId movs r1, 0x1 eors r0, r1 lsls r0, 24 @@ -101911,7 +101911,7 @@ _0803CE42: strb r0, [r1] adds r0, r7, 0 adds r1, r3, 0 - bl SetStringCharset + bl ConvertInternationalString _0803CE50: adds r0, r7, 0 bl StringLength @@ -107816,7 +107816,7 @@ sub_803FBBC: @ 803FBBC push {r4,r5,lr} movs r5, 0 ldr r4, _0803FBE4 - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r0, 24 lsls r1, r0, 3 @@ -110106,7 +110106,7 @@ _08040D04: .4byte 0x0000ffff thumb_func_start sub_8040D08 sub_8040D08: @ 8040D08 push {r4,lr} - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r0, 24 ldr r4, _08040D38 @@ -113036,7 +113036,7 @@ sub_80422C4: @ 80422C4 bl PokemonGetEncryptedField adds r0, r5, 0 adds r1, r4, 0 - bl SetStringCharset + bl ConvertInternationalString _080422FC: adds r4, r6, 0 adds r4, 0x50 @@ -124512,7 +124512,7 @@ sub_8047CE8: @ 8047CE8 adds r0, r6, 0 movs r3, 0xC bl sub_804AFB8 - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 ldr r1, [r5, 0xC] movs r3, 0x80 @@ -124598,7 +124598,7 @@ _08047D86: adds r5, 0x1 cmp r5, 0x2 ble _08047D86 - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 movs r1, 0x80 lsls r1, 17 @@ -124888,7 +124888,7 @@ _08048048: ldr r3, _0804809C adds r0, r3, 0 strh r0, [r1] - bl sub_8007378 + bl OpenLink movs r6, 0 movs r4, 0 _08048058: @@ -124954,7 +124954,7 @@ _080480CE: _080480D8: .4byte 0x03004824 _080480DC: .4byte 0x0000043c _080480E0: - bl sub_8008300 + bl GetLinkPlayerCount_2 adds r4, r0, 0 bl sub_800820C lsls r4, 24 @@ -124963,7 +124963,7 @@ _080480E0: bcs _080480F4 b _080484C6 _080480F4: - bl sub_8008310 + bl IsLinkMaster lsls r0, 24 cmp r0, 0 beq _08048120 @@ -124998,7 +124998,7 @@ _08048130: beq _0804813A b _080484C6 _0804813A: - bl sub_8007C48 + bl IsLinkPlayerDataExchangeComplete lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -126420,7 +126420,7 @@ _08048D3E: sub_8048D44: @ 8048D44 push {r4-r7,lr} sub sp, 0xC - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r7, r0, 24 ldr r6, _08048D90 @@ -126440,7 +126440,7 @@ sub_8048D44: @ 8048D44 lsls r1, 24 lsrs r1, 24 adds r0, r4, 0 - bl sub_8008184 + bl SetLinkDebugValues ldr r0, [r6] adds r0, 0x75 ldrb r0, [r0] @@ -126494,7 +126494,7 @@ _08048DF8: bne _08048E04 b _0804907C _08048E04: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 cmp r0, 0 bne _08048E18 @@ -126504,7 +126504,7 @@ _08048E04: .align 2, 0 _08048E14: .4byte 0x03004824 _08048E18: - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r0, _08048E24 ldr r1, [r0] b _08049006 @@ -126522,7 +126522,7 @@ _08048E32: .align 2, 0 _08048E38: .4byte 0x03004824 _08048E3C: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -126538,7 +126538,7 @@ _08048E4A: adds r1, r2 movs r2, 0xC8 bl sub_8048D24 - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r0, _08048E70 ldr r1, [r0] b _08049006 @@ -126570,7 +126570,7 @@ _08048E9A: .align 2, 0 _08048EA0: .4byte 0x03004824 _08048EA4: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -126586,7 +126586,7 @@ _08048EB2: adds r1, r2 movs r2, 0xC8 bl sub_8048D24 - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r0, _08048ED8 ldr r1, [r0] b _08049006 @@ -126618,7 +126618,7 @@ _08048F02: .align 2, 0 _08048F08: .4byte 0x03004824 _08048F0C: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -126634,7 +126634,7 @@ _08048F1A: adds r1, r2 movs r2, 0xC8 bl sub_8048D24 - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r0, _08048F40 ldr r1, [r0] b _08049006 @@ -126666,7 +126666,7 @@ _08048F6A: .align 2, 0 _08048F70: .4byte 0x03004824 _08048F74: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -126682,7 +126682,7 @@ _08048F82: adds r1, r2 movs r2, 0xD8 bl sub_8048D24 - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r0, _08048FA8 ldr r1, [r0] b _08049006 @@ -126714,7 +126714,7 @@ _08048FD2: .align 2, 0 _08048FD8: .4byte 0x03004824 _08048FDC: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -126730,7 +126730,7 @@ _08048FDC: adds r1, r2 movs r2, 0xB bl sub_8048D24 - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r1, [r4] _08049006: adds r1, 0x75 @@ -126889,7 +126889,7 @@ _0804913E: strb r1, [r0] _08049142: movs r0, 0 - bl sub_8007F30 + bl ResetBlockReceivedFlag _08049148: movs r2, 0x2 adds r0, r4, 0 @@ -126963,7 +126963,7 @@ _080491D2: strb r2, [r0] _080491D4: movs r0, 0x1 - bl sub_8007F30 + bl ResetBlockReceivedFlag _080491DA: pop {r4} pop {r0} @@ -127079,14 +127079,14 @@ _080492B6: strb r1, [r0] _080492B8: movs r0, 0 - bl sub_8007F30 + bl ResetBlockReceivedFlag _080492BE: movs r0, 0x2 ands r0, r5 cmp r0, 0 beq _080492CC movs r0, 0x1 - bl sub_8007F30 + bl ResetBlockReceivedFlag _080492CC: add sp, 0x4 pop {r4,r5} @@ -127350,10 +127350,10 @@ _080494D4: .4byte 0x0000ddee thumb_func_start sub_80494D8 sub_80494D8: @ 80494D8 push {r4,lr} - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r4, r0, 24 - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0 @@ -127367,7 +127367,7 @@ _080494FA: adds r0, r4, 0 bl sub_80491E4 _08049500: - bl sub_8007F18 + bl ResetBlockReceivedFlags _08049504: cmp r4, 0 bne _0804950C @@ -127528,7 +127528,7 @@ sub_8049620: @ 8049620 adds r0, 0x7B movs r1, 0x5 strb r1, [r0] - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -127549,7 +127549,7 @@ sub_8049620: @ 8049620 ldr r1, [r4] adds r1, 0x8C movs r2, 0x14 - bl sub_8007E88 + bl SendBlock b _08049678 .align 2, 0 _08049668: .4byte 0x03004824 @@ -127735,7 +127735,7 @@ _080497C8: ldr r1, [r1] adds r1, 0x8C movs r2, 0x14 - bl sub_8007E88 + bl SendBlock _080497EC: add sp, 0x8 pop {r4} @@ -128092,7 +128092,7 @@ _08049A88: ldr r1, [r5] adds r1, 0x8C movs r2, 0x14 - bl sub_8007E88 + bl SendBlock _08049AB4: add sp, 0xC pop {r4,r5} @@ -128169,7 +128169,7 @@ _08049B28: ldr r1, [r4] adds r1, 0x8C movs r2, 0x14 - bl sub_8007E88 + bl SendBlock _08049B56: ldr r0, _08049B5C ldr r0, [r0] @@ -128207,7 +128207,7 @@ _08049B8C: ldr r1, [r4] adds r1, 0x8C movs r2, 0x14 - bl sub_8007E88 + bl SendBlock ldr r0, [r4] _08049BAA: adds r0, 0x7B @@ -128322,7 +128322,7 @@ _08049C84: thumb_func_start sub_8049C8C sub_8049C8C: @ 8049C8C push {r4,lr} - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 bne _08049CAE @@ -130249,7 +130249,7 @@ _0804AB98: ldr r1, [r1] adds r1, 0x8C movs r2, 0x14 - bl sub_8007E88 + bl SendBlock b _0804ABD2 .align 2, 0 _0804ABB0: .4byte 0x03004824 @@ -131201,7 +131201,7 @@ sub_804B2B0: @ 804B2B0 .align 2, 0 _0804B2C0: .4byte 0x03002fa4 _0804B2C4: - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r0, 24 _0804B2CC: @@ -131408,7 +131408,7 @@ _0804B47C: movs r0, 0 strh r0, [r1] bl ResetTasks - bl AllocZeroed + bl CloseLink ldr r6, _0804B570 ldr r5, _0804B574 str r5, [r6] @@ -131527,7 +131527,7 @@ _0804B5A0: .4byte 0x040000d4 _0804B5A4: .4byte 0x80000280 _0804B5A8: .4byte gUnknown_08D004E0 _0804B5AC: - bl sub_8007378 + bl OpenLink ldr r1, _0804B5C8 ldr r2, _0804B5CC adds r1, r2 @@ -131565,13 +131565,13 @@ _0804B5E8: _0804B5F4: .4byte 0x03004828 _0804B5F8: .4byte 0x0000043c _0804B5FC: - bl sub_8008310 + bl IsLinkMaster lsls r0, 24 cmp r0, 0 bne _0804B608 b _0804B746 _0804B608: - bl sub_8008300 + bl GetLinkPlayerCount_2 adds r4, r0, 0 bl sub_800820C lsls r4, 24 @@ -131607,7 +131607,7 @@ _0804B648: beq _0804B656 b _0804B76E _0804B656: - bl sub_8007C48 + bl IsLinkPlayerDataExchangeComplete lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -132060,7 +132060,7 @@ _0804BA60: .4byte 0x03004360 thumb_func_start sub_804BA64 sub_804BA64: @ 804BA64 push {lr} - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 ldr r2, _0804BA90 movs r1, 0x80 @@ -132214,7 +132214,7 @@ _0804BB90: ldr r1, [r4] adds r1, 0x9E movs r2, 0x14 - bl sub_8007E88 + bl SendBlock ldr r1, [r4] adds r1, 0xBD ldrb r0, [r1] @@ -132929,7 +132929,7 @@ sub_804C1A8: @ 804C1A8 ldrb r0, [r0] cmp r0, 0 beq _0804C23C - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 ldr r3, _0804C220 movs r2, 0x80 @@ -135210,7 +135210,7 @@ _0804D60E: _0804D612: strb r0, [r1] _0804D614: - bl sub_8008710 + bl HasLinkErrorOccurred lsls r0, 24 cmp r0, 0 bne _0804D622 @@ -135232,7 +135232,7 @@ _0804D638: .4byte 0x020297d8 sub_804D63C: @ 804D63C push {r4-r6,lr} bl sub_804B2B0 - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r5, r0, 24 movs r6, 0x1 @@ -135258,7 +135258,7 @@ _0804D664: strb r6, [r0] _0804D674: movs r0, 0 - bl sub_8007F30 + bl ResetBlockReceivedFlag _0804D67A: movs r0, 0x2 ands r0, r5 @@ -135279,7 +135279,7 @@ _0804D67A: strb r1, [r0] _0804D69C: movs r0, 0x1 - bl sub_8007F30 + bl ResetBlockReceivedFlag _0804D6A2: pop {r4-r6} pop {r0} @@ -135979,7 +135979,7 @@ sub_804DC18: @ 804DC18 ldr r1, [r4] adds r1, 0x9E movs r2, 0x14 - bl sub_8007E88 + bl SendBlock ldr r0, [r4] adds r0, 0x9C movs r1, 0x2 @@ -136460,7 +136460,7 @@ _0804E10C: ldr r0, _0804E140 bl SetMainCallback2 _0804E11A: - bl sub_8008710 + bl HasLinkErrorOccurred lsls r0, 24 cmp r0, 0 bne _0804E128 @@ -137883,8 +137883,8 @@ _0804ED94: bne _0804EDA0 b _0804F0CE _0804EDA0: - bl sub_8007F18 - bl link_get_multiplayer_id + bl ResetBlockReceivedFlags + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 beq _0804EDB0 @@ -137907,7 +137907,7 @@ _0804EDB8: b _0804F0CE _0804EDCE: bl sub_8071EF4 - bl sub_8007EE4 + bl GetBlockRecievedStatus adds r4, r0, 0 bl sub_8008198 lsls r4, 24 @@ -137942,12 +137942,12 @@ _0804EDF0: strh r0, [r1] adds r5, 0x1 _0804EE18: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r5, r0 blt _0804EDF0 - bl sub_8007F18 + bl ResetBlockReceivedFlags b _0804F0AA .align 2, 0 _0804EE2C: .4byte 0x03002b80 @@ -137963,7 +137963,7 @@ _0804EE30: bl sub_804E7C0 b _0804EE7A _0804EE46: - bl sub_8007B78 + bl GetLinkPlayerCount ldr r2, _0804EE98 ldr r1, [r2] adds r1, 0x88 @@ -138576,7 +138576,7 @@ _0804F2B6: lsls r1, r6, 24 lsrs r1, 24 bl StartSpriteAnim - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 ldr r1, [r7] adds r1, 0x9A @@ -140271,7 +140271,7 @@ sub_80500A8: @ 80500A8 movs r6, 0 ldr r5, _080500EC ldr r4, [r5] - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r0, 23 adds r4, 0xA2 @@ -140337,7 +140337,7 @@ _0805010A: ldr r0, [r4] adds r0, 0x54 ldrh r4, [r0] - bl link_get_multiplayer_id + bl GetMultiplayerId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -140453,7 +140453,7 @@ _08050218: lsls r5, 1 adds r1, r5 ldrh r1, [r1] - bl sub_8008184 + bl SetLinkDebugValues bl sub_804FE70 ldr r0, [r4] adds r0, r5 @@ -141437,7 +141437,7 @@ _08050950: .4byte gUnknown_0842D2C5 sub_8050954: @ 8050954 push {r4-r7,lr} bl sub_8051474 - bl link_get_multiplayer_id + bl GetMultiplayerId ldr r0, _08050978 ldr r0, [r0] adds r0, 0x6F @@ -141471,7 +141471,7 @@ _08050980: .4byte _08050C64 .4byte _08050C98 _080509B4: - bl sub_8007B60 + bl ClearLinkCallback ldr r0, _080509C8 movs r1, 0x80 lsls r1, 1 @@ -141544,7 +141544,7 @@ _08050A40: .align 2, 0 _08050A48: .4byte 0x03007400 _08050A4C: - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 beq _08050A58 @@ -141574,13 +141574,13 @@ _08050A64: strh r2, [r0] movs r0, 0 movs r2, 0x28 - bl sub_8007E88 + bl SendBlock ldr r1, [r4] b _08050C86 .align 2, 0 _08050A90: .4byte 0x03004854 _08050A94: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 cmp r0, 0 bne _08050AA0 @@ -141603,7 +141603,7 @@ _08050AA0: ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] - bl sub_8007F18 + bl ResetBlockReceivedFlags b _08050CB6 .align 2, 0 _08050AC8: .4byte 0x03002b80 @@ -142582,7 +142582,7 @@ _080512B8: _080512C4: strh r1, [r0] _080512C6: - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 beq _080512D2 @@ -142651,7 +142651,7 @@ _08051348: lsls r0, 24 lsrs r4, r0, 24 _0805134E: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 @@ -142666,7 +142666,7 @@ _08051368: lsls r0, 24 lsrs r4, r0, 24 _0805136E: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 @@ -142680,7 +142680,7 @@ _0805136E: cmp r0, 0 bne _08051368 _0805138A: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 @@ -142696,7 +142696,7 @@ _080513A4: lsls r0, 24 lsrs r4, r0, 24 _080513AA: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 @@ -142714,7 +142714,7 @@ _080513C6: movs r6, 0 ldr r0, _080513E8 strh r0, [r5] - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 @@ -143154,7 +143154,7 @@ sub_80516F8: @ 80516F8 ldrb r0, [r6] cmp r0, 0 beq _0805180C - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0 @@ -144021,7 +144021,7 @@ _08051D56: adds r0, r4, r1 ldrb r1, [r0, 0x1A] adds r0, r7, 0 - bl SetStringCharset + bl ConvertInternationalString adds r0, r7, 0 ldr r1, _08051F20 bl StringAppend diff --git a/asm/rom5.s b/asm/rom5.s index 74f58fab3..8b06e032a 100644 --- a/asm/rom5.s +++ b/asm/rom5.s @@ -12738,7 +12738,7 @@ _08081078: beq _080810B4 b _080810CC _0808107E: - bl sub_8007B6C + bl ClearLinkCallback_2 movs r0, 0x1 movs r1, 0 bl fade_screen @@ -16562,7 +16562,7 @@ sub_8082D9C: @ 8082D9C lsrs r4, r0, 24 lsls r1, 24 lsrs r5, r1, 24 - bl sub_8007BA4 + bl GetLinkPlayerDataExchangeStatusTimed lsls r0, 24 lsrs r0, 24 cmp r0, 0x2 @@ -16577,7 +16577,7 @@ _08082DBC: beq _08082DE8 b _08082DEC _08082DC2: - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r1, r0, 24 cmp r4, r1 @@ -16611,7 +16611,7 @@ sub_8082DF4: @ 8082DF4 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8008710 + bl HasLinkErrorOccurred lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -16647,7 +16647,7 @@ sub_8082E28: @ 8082E28 ands r0, r1 cmp r0, 0 beq _08082E64 - bl sub_80086F4 + bl IsLinkConnectionEstablished lsls r0, 24 cmp r0, 0 bne _08082E64 @@ -16677,12 +16677,12 @@ sub_8082E6C: @ 8082E6C push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_80086F4 + bl IsLinkConnectionEstablished lsls r0, 24 cmp r0, 0 beq _08082E82 movs r0, 0x1 - bl sub_8008704 + bl SetSuppressLinkErrorMessage _08082E82: ldr r0, _08082E94 ldrh r1, [r0, 0x2E] @@ -16717,7 +16717,7 @@ sub_8082EB8: @ 8082EB8 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_80086BC + bl GetSioMultiSI lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -16785,9 +16785,9 @@ sub_8082F20: @ 8082F20 ldrsh r2, [r4, r3] cmp r2, 0 bne _08082F4C - bl sub_8007B88 + bl OpenLinkTimed bl sub_80082EC - bl sub_8007CC8 + bl ResetLinkPlayers b _08082F58 .align 2, 0 _08082F48: .4byte 0x03004b28 @@ -16814,7 +16814,7 @@ sub_8082F68: @ 8082F68 push {r4,r5,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r5, r0, 24 adds r0, r4, 0 @@ -16828,7 +16828,7 @@ sub_8082F68: @ 8082F68 cmp r5, 0x1 bls _08082FDC movs r0, 0x1 - bl sub_8008704 + bl SetSuppressLinkErrorMessage ldr r1, _08082FC0 lsls r0, r4, 2 adds r0, r4 @@ -16836,7 +16836,7 @@ sub_8082F68: @ 8082F68 adds r4, r0, r1 movs r0, 0 strh r0, [r4, 0xE] - bl sub_8008310 + bl IsLinkMaster lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -16923,7 +16923,7 @@ sub_808303C: @ 808303C mov r9, r0 mov r7, r8 add r7, r9 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r5, r0, 24 adds r0, r4, 0 @@ -17006,7 +17006,7 @@ sub_80830E4: @ 80830E4 bne _08083178 bl sub_800820C adds r4, r0, 0 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r4, 24 lsls r0, 24 cmp r4, r0 @@ -17079,7 +17079,7 @@ sub_8083188: @ 8083188 lsrs r0, 24 cmp r0, 0x1 beq _080831EA - bl sub_8008300 + bl GetLinkPlayerCount_2 adds r4, r0, 0 bl sub_800820C lsls r4, 24 @@ -17152,10 +17152,10 @@ _08083244: .4byte 0x03004b20 _08083248: .4byte 0x0202e8dc _0808324C: .4byte sub_80833C4 _08083250: - bl sub_8008300 + bl GetLinkPlayerCount_2 ldr r4, _08083278 strb r0, [r4] - bl link_get_multiplayer_id + bl GetMultiplayerId ldr r1, _0808327C strb r0, [r1] ldrb r0, [r4] @@ -17205,10 +17205,10 @@ _080832BC: .4byte 0x0202e8dc _080832C0: .4byte 0x03004b20 _080832C4: .4byte sub_80833C4 _080832C8: - bl sub_8008300 + bl GetLinkPlayerCount_2 ldr r4, _08083300 strb r0, [r4] - bl link_get_multiplayer_id + bl GetMultiplayerId ldr r1, _08083304 strb r0, [r1] ldrb r0, [r4] @@ -17245,7 +17245,7 @@ sub_8083314: @ 8083314 bl sub_8082DF4 cmp r0, 0x1 beq _080833B6 - bl sub_8007EE4 + bl GetBlockRecievedStatus adds r4, r0, 0 bl sub_8008198 lsls r4, 24 @@ -17271,14 +17271,14 @@ _08083340: lsls r0, 24 lsrs r4, r0, 24 _0808335A: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r4, r0 bcc _08083340 movs r0, 0 - bl sub_8008704 - bl sub_8007F18 + bl SetSuppressLinkErrorMessage + bl ResetBlockReceivedFlags bl textbox_close ldr r0, _08083398 ldrh r0, [r0] @@ -17536,7 +17536,7 @@ _08083560: ldrh r0, [r0] cmp r0, 0x1 bne _08083586 - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 movs r1, 0 @@ -17759,8 +17759,8 @@ sub_8083710: @ 8083710 ldrsh r2, [r4, r3] cmp r2, 0 bne _08083744 - bl sub_8007378 - bl sub_8007CC8 + bl OpenLink + bl ResetLinkPlayers ldr r0, _08083740 movs r1, 0x50 bl CreateTask @@ -17792,12 +17792,12 @@ sub_8083760: @ 8083760 lsls r0, 24 lsrs r4, r0, 24 adds r5, r4, 0 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 bls _080837A6 - bl sub_8008310 + bl IsLinkMaster lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -17837,7 +17837,7 @@ sub_80837B4: @ 80837B4 lsrs r5, r0, 24 bl sub_800820C adds r4, r0, 0 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r4, 24 lsls r0, 24 cmp r4, r0 @@ -17868,7 +17868,7 @@ sub_80837EC: @ 80837EC ldrb r0, [r0] cmp r0, 0x1 bne _08083814 - bl sub_8007C48 + bl IsLinkPlayerDataExchangeComplete lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -17933,7 +17933,7 @@ _08083870: ldr r2, _0808388C adds r0, r2, 0 strh r0, [r1] - bl sub_8007B6C + bl ClearLinkCallback_2 b _080838BE .align 2, 0 _08083888: .4byte 0x03002b74 @@ -18240,7 +18240,7 @@ _08083ADE: movs r0, 0x1 movs r1, 0 bl fade_screen - bl sub_8007B6C + bl ClearLinkCallback_2 b _08083B14 _08083AF0: ldr r0, _08083B00 @@ -18445,7 +18445,7 @@ sub_8083C50: @ 8083C50 lsls r0, 17 cmp r1, r0 ble _08083C82 - bl AllocZeroed + bl CloseLink ldr r0, _08083C9C bl SetMainCallback2 adds r0, r4, 0 @@ -18463,7 +18463,7 @@ _08083C90: bx r0 .align 2, 0 _08083C98: .4byte 0x03004b20 -_08083C9C: .4byte sub_80085BC +_08083C9C: .4byte CB2_LinkError _08083CA0: .4byte 0x03002fa4 thumb_func_end sub_8083C50 @@ -51607,7 +51607,7 @@ sub_8094140: @ 8094140 bl StringCopy ldrb r1, [r5, 0x8] adds r0, r4, 0 - bl SetStringCharset + bl ConvertInternationalString adds r0, r4, 0 movs r1, 0x7 movs r2, 0x5 @@ -51812,7 +51812,7 @@ sub_80942F8: @ 80942F8 bl StringCopy ldrb r1, [r5, 0x8] adds r0, r4, 0 - bl SetStringCharset + bl ConvertInternationalString ldr r1, _08094330 adds r0, r4, 0 bl StringAppend @@ -75411,7 +75411,7 @@ _0809FD1C: lsls r1, 24 lsrs r1, 24 adds r0, r4, 0 - bl SetStringCharset + bl ConvertInternationalString ldr r5, _0809FD68 adds r0, r5, 0 movs r1, 0xD @@ -76528,7 +76528,7 @@ sub_80A0664: @ 80A0664 ldr r0, _080A06A4 cmp r1, r0 bne _080A06B0 - bl link_get_multiplayer_id + bl GetMultiplayerId movs r1, 0x1 eors r0, r1 lsls r0, 24 @@ -96228,7 +96228,7 @@ sub_80A9E3C: @ 80A9E3C push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8007378 + bl OpenLink movs r1, 0 ldr r3, _080A9E74 movs r2, 0xFF @@ -96280,14 +96280,14 @@ sub_80A9E80: @ 80A9E80 .align 2, 0 _080A9EA0: .4byte 0x03004b20 _080A9EA4: - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 bls _080A9ECC movs r0, 0 strh r0, [r4, 0x8] - bl sub_8008310 + bl IsLinkMaster lsls r0, 24 cmp r0, 0 beq _080A9EC8 @@ -96347,10 +96347,10 @@ sub_80A9F10: @ 80A9F10 ldrb r0, [r0] cmp r0, 0 beq _080A9F3E - bl link_get_multiplayer_id + bl GetMultiplayerId ldr r1, _080A9F48 strb r0, [r1] - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r0, 0x4 @@ -99307,7 +99307,7 @@ sub_80AB6B4: @ 80AB6B4 lsls r1, 16 cmp r1, 0 bgt _080AB6F2 - bl link_get_multiplayer_id + bl GetMultiplayerId adds r0, r4, 0 bl DestroyTask ldr r0, _080AB6FC @@ -127938,7 +127938,7 @@ sub_80B92AC: @ 80B92AC ldr r1, [r1] movs r2, 0xA4 bl memcpy - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 bne _080B935C @@ -128300,7 +128300,7 @@ _080B9650: movs r0, 0xC8 lsls r0, 1 strh r0, [r5, 0x8] - bl sub_8007B6C + bl ClearLinkCallback_2 b _080B97D6 .align 2, 0 _080B9674: .4byte gUnknown_0842C89A @@ -128319,10 +128319,10 @@ _080B9688: movs r0, 0x65 b _080B97D4 _080B9690: - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r4, r0, 24 - bl sub_8008310 + bl IsLinkMaster lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -128351,7 +128351,7 @@ _080B96CC: .4byte 0x0000012d _080B96D0: bl sub_800820C adds r4, r0, 0 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r4, 24 lsls r0, 24 cmp r4, r0 @@ -128361,7 +128361,7 @@ _080B96D0: strh r4, [r5, 0x20] lsls r4, 16 asrs r4, 16 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r0, 24 lsls r1, r0, 4 @@ -128375,7 +128375,7 @@ _080B96D0: _080B9706: bl sub_800820C adds r4, r0, 0 - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r4, 24 lsls r0, 24 cmp r4, r0 @@ -128415,7 +128415,7 @@ _080B9734: _080B9758: .4byte 0x03002fa4 _080B975C: .4byte 0x020231cc _080B9760: - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r0, 24 movs r1, 0 @@ -128521,7 +128521,7 @@ _080B981C: .align 2, 0 _080B983C: .4byte 0x03002a70 _080B9840: - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 bne _080B9860 @@ -128583,7 +128583,7 @@ sub_80B9890: @ 80B9890 ldr r1, _080B98D0 adds r0, r1 mov r10, r0 - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x4] @@ -128651,7 +128651,7 @@ _080B9934: bl memcpy _080B993C: mov r0, r9 - bl sub_8007F30 + bl ResetBlockReceivedFlag mov r2, r8 lsls r1, r2, 1 adds r1, r5, r1 @@ -128673,7 +128673,7 @@ _080B9960: lsrs r0, 24 _080B9966: mov r9, r0 - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r9, r0 @@ -128690,7 +128690,7 @@ _080B9966: adds r1, 0x1 strh r1, [r0, 0x8] _080B998A: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 ldr r1, [sp, 0x8] @@ -128810,7 +128810,7 @@ sub_80B9A50: @ 80B9A50 thumb_func_start sub_80B9A58 sub_80B9A58: @ 80B9A58 push {lr} - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r0, 24 pop {r1} @@ -128843,7 +128843,7 @@ _080B9A84: .4byte 0x00001230 sub_80B9A88: @ 80B9A88 push {r4,lr} adds r4, r0, 0 - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -128873,7 +128873,7 @@ _080B9AAC: _080B9ABC: .4byte gUnknown_083D0288 _080B9AC0: movs r0, 0 - bl sub_8007CB0 + bl GetLinkPlayerTrainerId adds r3, r0, 0 movs r0, 0x1 ands r3, r0 @@ -128895,7 +128895,7 @@ _080B9AD6: _080B9AE8: .4byte gUnknown_083D028A _080B9AEC: movs r0, 0 - bl sub_8007CB0 + bl GetLinkPlayerTrainerId movs r1, 0x9 bl __umodsi3 adds r3, r0, 0 @@ -129117,7 +129117,7 @@ sub_80B9C6C: @ 80B9C6C ldr r0, _080B9DA8 ldrh r0, [r0, 0x4] bl SeedRng - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 mov r8, r0 @@ -136497,7 +136497,7 @@ sub_80BD674: @ 80BD674 bne _080BD68C b _080BD790 _080BD68C: - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r0, 0x2 @@ -141675,7 +141675,7 @@ sub_80BFE24: @ 80BFE24 str r0, [sp, 0x8] add r0, sp, 0x1C str r0, [sp, 0xC] - bl sub_8007B78 + bl GetLinkPlayerCount ldr r1, _080BFEA0 strb r0, [r1] _080BFE50: @@ -141943,7 +141943,7 @@ sub_80C004C: @ 80C004C adds r4, r1, 0 lsls r0, r2, 24 lsrs r0, 24 - bl sub_8007CB0 + bl GetLinkPlayerTrainerId adds r5, r0, 0 movs r2, 0xFF ands r0, r2 @@ -141999,7 +141999,7 @@ sub_80C00B4: @ 80C00B4 adds r4, r1, 0 lsls r0, r2, 24 lsrs r0, 24 - bl sub_8007CB0 + bl GetLinkPlayerTrainerId adds r2, r0, 0 movs r3, 0xFF ands r0, r3 @@ -142069,7 +142069,7 @@ sub_80C0134: @ 80C0134 adds r4, r1, 0 lsls r0, r2, 24 lsrs r0, 24 - bl sub_8007CB0 + bl GetLinkPlayerTrainerId adds r5, r0, 0 movs r2, 0xFF ands r0, r2 @@ -142666,7 +142666,7 @@ sub_80C05C4: @ 80C05C4 str r0, [sp, 0x8] add r0, sp, 0x1C str r0, [sp, 0xC] - bl sub_8007B78 + bl GetLinkPlayerCount ldr r1, _080C0600 strb r0, [r1] movs r0, 0 @@ -143054,7 +143054,7 @@ sub_80C08FC: @ 80C08FC bhi _080C0914 adds r0, r5, 0 movs r1, 0x1 - bl SetStringCharset + bl ConvertInternationalString _080C0914: pop {r4,r5} pop {r0} @@ -146216,7 +146216,7 @@ sub_80C255C: @ 80C255C ldrb r0, [r0] cmp r0, 0 beq _080C258C - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r0, 0x4 @@ -150457,7 +150457,7 @@ sub_80C4674: @ 80C4674 bne _080C4690 adds r0, r4, 0 movs r1, 0x1 - bl SetStringCharset + bl ConvertInternationalString _080C4690: pop {r4} pop {r0} @@ -150495,7 +150495,7 @@ sub_80C4698: @ 80C4698 lsls r1, 24 lsrs r1, 24 adds r0, r5, 0 - bl SetStringCharset + bl ConvertInternationalString _080C46DA: pop {r4,r5} pop {r0} @@ -152003,7 +152003,7 @@ sub_80C5228: @ 80C5228 cmp r0, 0 beq _080C524C ldr r4, _080C5248 - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r0, 24 strh r0, [r4] @@ -158659,7 +158659,7 @@ sub_80C857C: @ 80C857C lsrs r0, 24 adds r1, r5, 0 adds r2, r4, 0 - bl sub_8007E88 + bl SendBlock pop {r4,r5} pop {r0} bx r0 @@ -158676,13 +158676,13 @@ sub_80C85AC: @ 80C85AC lsls r1, 17 lsls r1, r0 lsrs r4, r1, 24 - bl sub_8007EE4 + bl GetBlockRecievedStatus adds r1, r4, 0 ands r1, r0 cmp r1, 0 beq _080C85D0 adds r0, r4, 0 - bl sub_8007F30 + bl ResetBlockReceivedFlag movs r0, 0x1 b _080C85D2 _080C85D0: @@ -158698,7 +158698,7 @@ sub_80C85D8: @ 80C85D8 push {r4,lr} movs r4, 0 _080C85DC: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 lsrs r0, 24 asrs r0, r4 @@ -158712,7 +158712,7 @@ _080C85F2: adds r4, 0x1 cmp r4, 0x3 ble _080C85DC - bl sub_8007F18 + bl ResetBlockReceivedFlags movs r0, 0x1 _080C85FE: pop {r4} @@ -158781,10 +158781,10 @@ sub_80C8660: @ 80C8660 ldrb r0, [r0] cmp r0, 0 beq _080C868E - bl link_get_multiplayer_id + bl GetMultiplayerId ldr r1, _080C8698 strb r0, [r1] - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 cmp r0, 0x4 @@ -158916,7 +158916,7 @@ sub_80C8734: @ 80C8734 .align 2, 0 _080C8768: .4byte 0x03004b20 _080C876C: - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 bne _080C87A8 @@ -158990,7 +158990,7 @@ _080C87EA: lsls r1, 24 lsrs r1, 24 adds r0, r4, 0 - bl SetStringCharset + bl ConvertInternationalString b _080C883E .align 2, 0 _080C8818: .4byte 0x02038570 @@ -159003,7 +159003,7 @@ _080C8828: bne _080C8838 adds r0, r4, 0 movs r1, 0x1 - bl SetStringCharset + bl ConvertInternationalString b _080C883E _080C8838: strb r0, [r4, 0x5] @@ -159092,7 +159092,7 @@ sub_80C88AC: @ 80C88AC .align 2, 0 _080C88D4: .4byte 0x03004b20 _080C88D8: - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 bne _080C891E @@ -159166,7 +159166,7 @@ _080C896C: ldr r1, _080C8994 ldrh r0, [r4, 0x1A] strb r0, [r1] - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 bne _080C898C @@ -159765,7 +159765,7 @@ _080C8E50: ldr r1, _080C8E78 movs r0, 0x64 strb r0, [r1] - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 cmp r0, 0 bne _080C8E70 @@ -261633,7 +261633,7 @@ sub_80FA4E4: @ 80FA4E4 sub sp, 0x4 adds r6, r0, 0 adds r5, r1, 0 - bl sub_8007B78 + bl GetLinkPlayerCount lsls r0, 24 lsrs r0, 24 mov r8, r0 @@ -306954,7 +306954,7 @@ _0810FED0: bne _0810FEF2 adds r0, r4, 0 movs r1, 0x1 - bl SetStringCharset + bl ConvertInternationalString _0810FEF2: pop {r4} pop {r0} @@ -335630,7 +335630,7 @@ dp01_tbl3_exec_completed: @ 811E314 ands r0, r1 cmp r0, 0 beq _0811E368 - bl link_get_multiplayer_id + bl GetMultiplayerId mov r1, sp strb r0, [r1] movs r0, 0x2 @@ -338474,7 +338474,7 @@ _0811FB20: .4byte 0x03002970 _0811FB24: movs r5, 0 ldr r4, _0811FC08 - bl link_get_multiplayer_id + bl GetMultiplayerId movs r1, 0x1 eors r0, r1 lsls r0, 24 @@ -341124,7 +341124,7 @@ sub_8120FFC: @ 8120FFC mov r8, r1 movs r6, 0 movs r4, 0 - bl link_get_multiplayer_id + bl GetMultiplayerId lsls r0, 24 lsrs r7, r0, 24 mov r0, r9 @@ -363132,7 +363132,7 @@ dp01_tbl6_exec_completed: @ 812B7C0 ands r0, r1 cmp r0, 0 beq _0812B814 - bl link_get_multiplayer_id + bl GetMultiplayerId mov r1, sp strb r0, [r1] movs r0, 0x2 @@ -387949,7 +387949,7 @@ dp01_tbl5_exec_completed: @ 813796C ands r0, r1 cmp r0, 0 beq _081379C0 - bl link_get_multiplayer_id + bl GetMultiplayerId mov r1, sp strb r0, [r1] movs r0, 0x2 @@ -395915,7 +395915,7 @@ _0813BA2E: movs r0, 0 b _0813BA3A .align 2, 0 -_0813BA34: .4byte sub_8008C6C +_0813BA34: .4byte SerialCB _0813BA38: movs r0, 0x1 _0813BA3A: @@ -396208,7 +396208,7 @@ task_intro_2: @ 813BC8C movs r0, 0xCF lsls r0, 1 bl m4aSongNumStart - bl sub_8008838 + bl ResetSerial add sp, 0x4 pop {r4,r5} pop {r0} @@ -418178,7 +418178,7 @@ _08146AA8: ldr r2, _08146AD0 adds r0, r2, 0 strh r0, [r1] - bl sub_8007378 + bl OpenLink b _08146DA4 .align 2, 0 _08146AC4: .4byte 0x03001770 @@ -418225,7 +418225,7 @@ _08146B18: _08146B24: b _08146D7C _08146B26: - bl sub_8008300 + bl GetLinkPlayerCount_2 lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0x2 @@ -418264,14 +418264,14 @@ _08146B70: _08146B7A: movs r0, 0x5 bl audio_play - bl AllocZeroed + bl CloseLink ldr r0, _08146B8C adds r1, r4, r0 b _08146C54 .align 2, 0 _08146B8C: .4byte 0x0000043c _08146B90: - bl sub_80086F4 + bl IsLinkConnectionEstablished lsls r0, 24 cmp r0, 0 beq _08146C38 @@ -418281,7 +418281,7 @@ _08146B90: bne _08146BA4 b _08146DA4 _08146BA4: - bl sub_8007BA4 + bl GetLinkPlayerDataExchangeStatusTimed lsls r0, 24 lsrs r0, 24 cmp r0, 0x3 @@ -418318,7 +418318,7 @@ _08146BE8: .align 2, 0 _08146BFC: .4byte gUnknown_0842C535 _08146C00: - bl AllocZeroed + bl CloseLink movs r0, 0x6 movs r1, 0x5 movs r2, 0x17 @@ -418353,7 +418353,7 @@ _08146C38: _08146C46: movs r0, 0x5 bl audio_play - bl AllocZeroed + bl CloseLink ldr r2, _08146C60 adds r1, r4, r2 _08146C54: @@ -418372,13 +418372,13 @@ _08146C64: _08146C70: b _08146D7C _08146C72: - bl sub_8007EE4 + bl GetBlockRecievedStatus lsls r0, 24 cmp r0, 0 bne _08146C7E b _08146DA4 _08146C7E: - bl sub_8007F18 + bl ResetBlockReceivedFlags ldr r1, _08146C8C ldr r2, _08146C90 adds r1, r2 @@ -418515,11 +418515,11 @@ _08146DA4: ands r0, r1 cmp r0, 0 beq _08146DE4 - bl sub_8008310 + bl IsLinkMaster lsls r0, 24 cmp r0, 0 bne _08146DE4 - bl AllocZeroed + bl CloseLink movs r0, 0x6 movs r1, 0x5 movs r2, 0x17 @@ -425426,7 +425426,7 @@ sub_814A568: @ 814A568 bhi _0814A582 adds r0, r4, 0 movs r1, 0x1 - bl SetStringCharset + bl ConvertInternationalString b _0814A588 _0814A582: adds r0, r4, 0 diff --git a/charmap.txt b/charmap.txt index f8708e10a..4993f8d9d 100644 --- a/charmap.txt +++ b/charmap.txt @@ -313,6 +313,7 @@ TALL_PLUS = FC 0C FB 'ッ' = A0 @ Japanese punctuation +' ' = 00 'ー' = AE '·' = AF '‥' = B0 diff --git a/data/data2.s b/data/data2.s index ec59eb6ee..1b6f49224 100644 --- a/data/data2.s +++ b/data/data2.s @@ -5,22 +5,6 @@ .section .rodata - .global gUnknown_081E7330 -gUnknown_081E7330: @ 81E7330 - .incbin "baserom.gba", 0x001e7330, 0x20 - - .global gUnknown_081E7350 -gUnknown_081E7350: @ 81E7350 - .incbin "baserom.gba", 0x001e7350, 0x27c - - .global gUnknown_081E75CC -gUnknown_081E75CC: @ 81E75CC - .incbin "baserom.gba", 0x001e75cc, 0x30 - - .global gUnknown_081E75FC -gUnknown_081E75FC: @ 81E75FC - .incbin "baserom.gba", 0x001e75fc, 0x14 - @ 81E7610 .include "data/rtc.s" diff --git a/ewram_syms.txt b/ewram_syms.txt index 148eade7b..ef93c424c 100644 --- a/ewram_syms.txt +++ b/ewram_syms.txt @@ -1,7 +1,12 @@ +unk_2000000 = 0x2000000; +unk_2004000 = 0x2004000; + gUnknown_020239F8 = 0x20239F8; +gSaveBlock2 = 0x2024EA4; + +word_203855E = 0x203855E; + gUnknown_0203869A = 0x203869A; gTileBuffer = 0x2039360; - -gSaveBlock2 = 0x2024EA4; diff --git a/generated.mk b/generated.mk index c72daf2ac..70d50e8f8 100644 --- a/generated.mk +++ b/generated.mk @@ -10,7 +10,9 @@ include/fonts/down_arrow_tiles.h \ include/fonts/unknown_palette_81E6692.h \ include/fonts/default_palette.h -generated: $(GEN_FONT_HEADERS) +LINK_HEADERS := include/link/digit_tiles.h include/link/digit_palette.h + +generated: $(GEN_FONT_HEADERS) $(LINK_HEADERS) include/fonts/font0_lat_glyphs.h: graphics/fonts/font0_lat.1bpp $(BIN2C) $< sFont0LatinGlyphs >$@ -static -col 8 -pad 4 @@ -35,3 +37,9 @@ include/fonts/unknown_palette_81E6692.h: graphics/fonts/unknown_81E6692.gbapal include/fonts/default_palette.h: graphics/fonts/default.gbapal $(BIN2C) $< gFontDefaultPalette >$@ -size 2 -pad 6 + +include/link/digit_tiles.h: graphics/interface/link_test_digits.4bpp + $(BIN2C) $< sLinkTestDigitTiles >$@ -static -size 4 -pad 10 + +include/link/digit_palette.h: graphics/interface/link_test_digits.gbapal + $(BIN2C) $< sLinkTestDigitPalette >$@ -static -size 2 -pad 6 diff --git a/graphics/interface/link_test_digits.pal b/graphics/interface/link_test_digits.pal new file mode 100644 index 000000000..5362e8d6d --- /dev/null +++ b/graphics/interface/link_test_digits.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 255 diff --git a/graphics/interface/link_test_digits.png b/graphics/interface/link_test_digits.png Binary files differnew file mode 100644 index 000000000..fe71d3387 --- /dev/null +++ b/graphics/interface/link_test_digits.png diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 87c167ab6..3c30c494e 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -350,6 +350,7 @@ #define REG_BG2VOFS (*(vu16 *)REG_ADDR_BG2VOFS) #define REG_BG3HOFS (*(vu16 *)REG_ADDR_BG3HOFS) #define REG_BG3VOFS (*(vu16 *)REG_ADDR_BG3VOFS) +#define REG_BLDALPHA (*(vu16 *)REG_ADDR_BLDALPHA) #define REG_SOUND1CNT_L (*(vu16 *)REG_ADDR_SOUND1CNT_L) #define REG_NR10 (*(vu8 *)REG_ADDR_NR10) @@ -433,9 +434,21 @@ #define REG_TM3CNT_L (*(vu16 *)REG_ADDR_TM3CNT_L) #define REG_TM3CNT_H (*(vu16 *)REG_ADDR_TM3CNT_H) +#define REG_SIOCNT (*(vu16 *)REG_ADDR_SIOCNT) +#define REG_SIODATA8 (*(vu16 *)REG_ADDR_SIODATA8) +#define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32) +#define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND) +#define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV) +#define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0) +#define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1) +#define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2) +#define REG_SIOMULTI3 (*(vu16 *)REG_ADDR_SIOMULTI3) + #define REG_KEYINPUT (*(vu16 *)REG_ADDR_KEYINPUT) #define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT) +#define REG_RCNT (*(vu16 *)REG_ADDR_RCNT) + #define REG_IME (*(vu16 *)REG_ADDR_IME) #define REG_IE (*(vu16 *)REG_ADDR_IE) #define REG_IF (*(vu16 *)REG_ADDR_IF) @@ -526,6 +539,31 @@ #define TIMER_INTR_ENABLE 0x40 #define TIMER_ENABLE 0x80 +// serial +#define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode +#define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode +#define SIO_MULTI_MODE 0x2000 // Multi-player communication mode +#define SIO_UART_MODE 0x3000 // UART communication mode + +#define SIO_9600_BPS 0x0000 // baud rate 9600 bps +#define SIO_38400_BPS 0x0001 // 38400 bps +#define SIO_57600_BPS 0x0002 // 57600 bps +#define SIO_115200_BPS 0x0003 // 115200 bps + +#define SIO_MULTI_SI 0x0004 // Multi-player communication SI terminal +#define SIO_MULTI_SD 0x0008 // SD terminal + +#define SIO_ERROR 0x0040 // Detect error +#define SIO_START 0x0080 // Start transfer +#define SIO_ENABLE 0x0080 // Enable SIO + +#define SIO_INTR_ENABLE 0x4000 + +#define SIO_MULTI_SI_SHIFT 2 +#define SIO_MULTI_SI_MASK 0x1 +#define SIO_MULTI_DI_SHIFT 3 +#define SIO_MULTI_DI_MASK 0x1 + // keys #define A_BUTTON 0x0001 #define B_BUTTON 0x0002 diff --git a/include/gba/types.h b/include/gba/types.h index 4e1ab3003..1274d4f0d 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -1,19 +1,23 @@ #ifndef GUARD_GBA_TYPES_H #define GUARD_GBA_TYPES_H -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; -typedef signed char s8; -typedef signed short s16; -typedef signed int s32; - -typedef volatile u8 vu8; +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +typedef unsigned long long u64; +typedef signed char s8; +typedef signed short s16; +typedef signed int s32; +typedef signed long long s64; + +typedef volatile u8 vu8; typedef volatile u16 vu16; typedef volatile u32 vu32; -typedef volatile s8 vs8; +typedef volatile u64 vu64; +typedef volatile s8 vs8; typedef volatile s16 vs16; typedef volatile s32 vs32; +typedef volatile s64 vs64; typedef float f32; typedef double f64; @@ -67,4 +71,28 @@ struct ObjAffineSrcData u16 rotation; }; +// Multi-player SIO Control Structure +struct SioMultiCnt +{ + u16 baudRate:2; // baud rate + u16 si:1; // SI terminal + u16 sd:1; // SD terminal + u16 id:2; // ID + u16 error:1; // error flag + u16 enable:1; // SIO enable + u16 unused_11_8:4; + u16 mode:2; // communication mode (should equal 2) + u16 intrEnable:1; // IRQ enable + u16 unused_15:1; + u16 data; // data +}; + +#define ST_SIO_MULTI_MODE 2 // Multi-player communication mode + +// baud rate +#define ST_SIO_9600_BPS 0 // 9600 bps +#define ST_SIO_38400_BPS 1 // 38400 bps +#define ST_SIO_57600_BPS 2 // 57600 bps +#define ST_SIO_115200_BPS 3 // 115200 bps + #endif // GUARD_GBA_TYPES_H diff --git a/include/global.h b/include/global.h index 21b1e41af..5e6bd5bd4 100644 --- a/include/global.h +++ b/include/global.h @@ -10,6 +10,8 @@ // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); +#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) + extern u8 gStringVar1[]; extern u8 gStringVar2[]; extern u8 gStringVar3[]; @@ -38,8 +40,8 @@ struct SaveBlock2 { u8 playerName[8]; u8 playerGender; - u16 playerTrainerId; - u16 playerSecretId; + u8 sb2_field_9; + u8 playerTrainerId[4]; u16 playTimeHours; u8 playTimeMinutes; u8 playTimeSeconds; diff --git a/include/link.h b/include/link.h new file mode 100644 index 000000000..ba6bcd6f9 --- /dev/null +++ b/include/link.h @@ -0,0 +1,182 @@ +#ifndef GUARD_LINK_H +#define GUARD_LINK_H + +#include "global.h" + +#define MAX_LINK_PLAYERS 4 +#define CMD_LENGTH 8 +#define QUEUE_CAPACITY 50 +#define BLOCK_BUFFER_SIZE 0x100 + +#define LINK_STAT_LOCAL_ID 0x00000003 +#define LINK_STAT_PLAYER_COUNT 0x0000001C +#define LINK_STAT_PLAYER_COUNT_SHIFT 2 +#define LINK_STAT_MASTER 0x00000020 +#define LINK_STAT_MASTER_SHIFT 5 +#define LINK_STAT_CONN_ESTABLISHED 0x00000040 +#define LINK_STAT_CONN_ESTABLISHED_SHIFT 6 +#define LINK_STAT_RECEIVED_NOTHING 0x00000100 +#define LINK_STAT_RECEIVED_NOTHING_SHIFT 8 +#define LINK_STAT_ERRORS 0x0007F000 + +#define EXTRACT_PLAYER_COUNT(status) \ +(((status) & LINK_STAT_PLAYER_COUNT) >> LINK_STAT_PLAYER_COUNT_SHIFT) +#define EXTRACT_MASTER(status) \ +(((status) >> LINK_STAT_MASTER_SHIFT) & 1) +#define EXTRACT_CONN_ESTABLISHED(status) \ +(((status) >> LINK_STAT_CONN_ESTABLISHED_SHIFT) & 1) +#define EXTRACT_RECEIVED_NOTHING(status) \ +(((status) >> LINK_STAT_RECEIVED_NOTHING_SHIFT) & 1) + +#define MASTER_HANDSHAKE 0x8FFF +#define SLAVE_HANDSHAKE 0xB9A0 + +enum +{ + LINK_STATE_START0, + LINK_STATE_START1, + LINK_STATE_HANDSHAKE, + LINK_STATE_INIT_TIMER, + LINK_STATE_CONN_ESTABLISHED, +}; + +enum +{ + EXCHANGE_NOT_STARTED, + EXCHANGE_COMPLETE, + EXCHANGE_TIMED_OUT, + EXCHANGE_IN_PROGRESS, +}; + +enum +{ + QUEUE_FULL_NONE, + QUEUE_FULL_SEND, + QUEUE_FULL_RECV, +}; + +enum +{ + LAG_NONE, + LAG_MASTER, + LAG_SLAVE, +}; + +struct LinkPlayer +{ + u16 version; + u16 lp_field_2; + u32 trainerId; + u8 name[11]; + u8 gender; + u32 linkType; + u16 lp_field_18; + u16 language; +}; + +struct LinkPlayerBlock +{ + u8 magic1[16]; + struct LinkPlayer linkPlayer; + u8 magic2[16]; +}; + +// circular queues + +struct SendQueue +{ + u16 data[CMD_LENGTH][QUEUE_CAPACITY]; + u8 pos; + u8 count; +}; + +struct RecvQueue +{ + u16 data[MAX_LINK_PLAYERS][CMD_LENGTH][QUEUE_CAPACITY]; + u8 pos; + u8 count; +}; + +struct Link +{ + u8 isMaster; // 0: slave, 8: master + u8 state; + u8 localId; // local multi-player ID + u8 playerCount; + u16 tempRecvBuffer[4]; + bool8 receivedNothing; + s8 serialIntrCounter; + bool8 handshakeAsMaster; + u8 link_field_F; + + // error conditions + bool8 hardwareError; // hardware reported an error + bool8 badChecksum; // checksum didn't match between devices + u8 queueFull; // send or recv queue out of space + u8 lag; // connection is lagging + + u16 checksum; + + u8 sendCmdIndex; + u8 recvCmdIndex; + + struct SendQueue sendQueue; + struct RecvQueue recvQueue; +}; + +extern struct Link gLink; +extern u16 gRecvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]; +extern u32 gLinkStatus; +extern u16 gSendCmd[CMD_LENGTH]; +extern u8 gShouldAdvanceLinkState; + +void Task_DestroySelf(u8); +void sub_8007270(u8); +void OpenLink(void); +void CloseLink(void); +u16 LinkMain2(u16 *); +void sub_8007B14(void); +bool32 sub_8007B24(void); +void ClearLinkCallback(void); +void ClearLinkCallback_2(void); +u8 GetLinkPlayerCount(void); +void OpenLinkTimed(void); +u8 GetLinkPlayerDataExchangeStatusTimed(void); +bool8 IsLinkPlayerDataExchangeComplete(void); +u32 GetLinkPlayerTrainerId(u8); +void ResetLinkPlayers(void); +void sub_8007E24(void); +void sub_8007E4C(void); +u8 GetMultiplayerId(void); +u8 bitmask_all_link_players_but_self(void); +bool8 SendBlock(u8, void *, u16); +bool8 sub_8007E9C(u8); +bool8 sub_8007ECC(void); +u8 GetBlockRecievedStatus(void); +void ResetBlockReceivedFlags(void); +void ResetBlockReceivedFlag(u8); +void sub_8007F4C(void); +void SetLinkDebugValues(u32, u32); +u8 sub_8008198(void); +void sub_80081C8(u8); +u8 sub_800820C(void); +u8 sub_8008218(void); +void sub_800826C(void); +void sub_80082EC(void); +u8 GetLinkPlayerCount_2(void); +bool8 IsLinkMaster(void); +void sub_800832C(void); +void sub_8008480(void); +void sub_80084A4(void); +void CB2_LinkError(void); +u8 GetSioMultiSI(void); +bool8 IsLinkConnectionEstablished(void); +void SetSuppressLinkErrorMessage(bool8); +bool8 HasLinkErrorOccurred(void); +void ResetSerial(void); +u32 LinkMain1(u8 *, u16 *, u16[CMD_LENGTH][MAX_LINK_PLAYERS]); +void LinkVSync(void); +void Timer3Intr(void); +void SerialCB(void); + +#endif // GUARD_LINK_H diff --git a/include/link/.gitignore b/include/link/.gitignore new file mode 100644 index 000000000..266afbe6e --- /dev/null +++ b/include/link/.gitignore @@ -0,0 +1,2 @@ +digit_tiles.h +digit_palette.h diff --git a/include/main.h b/include/main.h index 2f6671967..dda18889a 100644 --- a/include/main.h +++ b/include/main.h @@ -42,6 +42,12 @@ struct Main u8 oamLoadDisabled:1; }; +extern u8 gUnknown_3001764; extern struct Main gMain; +extern u8 gUnknown_3001BB4; +extern bool8 gLinkVSyncDisabled; + +extern const u8 gGameVersion; +extern const u8 gGameLanguage; #endif // GUARD_MAIN_H diff --git a/include/task.h b/include/task.h index cb01efbef..a536bcab5 100644 --- a/include/task.h +++ b/include/task.h @@ -10,9 +10,11 @@ struct Task u8 prev; u8 next; u8 priority; - u16 data[16]; + s16 data[16]; }; +extern struct Task gTasks[]; + void ResetTasks(); u8 CreateTask(TaskFunc func, u8 priority); void DestroyTask(u8 taskId); diff --git a/include/text.h b/include/text.h index a1de98166..030d51188 100644 --- a/include/text.h +++ b/include/text.h @@ -76,5 +76,6 @@ extern const struct WindowConfig gWindowConfig_81E7278; extern const struct WindowConfig gWindowConfig_81E7294; u8 GetExtCtrlCodeLength(u8 code); +void ConvertInternationalString(u8 *s, u8 language); #endif // GUARD_TEXT_H diff --git a/iwram_syms.txt b/iwram_syms.txt index ffca22f9c..1d2b918c7 100644 --- a/iwram_syms.txt +++ b/iwram_syms.txt @@ -23,6 +23,8 @@ gLocalTime = 0x3004038; gUnknown_3004820 = 0x3004820; +word_3004858 = 0x3004858; + gTasks = 0x3004B20; gMPlayMemAccArea = 0x3007440; diff --git a/ld_script.txt b/ld_script.txt index a414567a0..21b1e9a2f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -12,6 +12,9 @@ SECTIONS { src/main.o(ewram_data); src/sprite.o(ewram_data); src/text.o(ewram_data); + src/string_util.o(ewram_data); + . += 0x2E8; /* big gap */ + src/link.o(ewram_data); } . = 0x3000000; @@ -19,18 +22,26 @@ SECTIONS { iwram (NOLOAD) : ALIGN(4) { + src/main.o(.bss); src/sprite.o(.bss); src/text.o(.bss); + src/string_util.o(.bss); + src/link.o(.bss); . = 0xF28; src/agb_flash.o(.bss); . = 0xF36; src/siirtc.o(.bss); tools/agbcc/lib/libgcc.a:dp-bit.o(.bss); tools/agbcc/lib/libgcc.a:fp-bit.o(.bss); + src/m4a_2.o(.bss.code); + src/main.o(iwram_data); src/sprite.o(iwram_data); src/text.o(iwram_data); + src/string_util.o(iwram_data); + src/link.o(iwram_data); + . = 0x5FD0; src/m4a_2.o(iwram_data); } @@ -45,7 +56,7 @@ SECTIONS { src/sprite.o(.text); src/text.o(.text); src/string_util.o(.text); - asm/rom2.o(.text); + src/link.o(.text); src/rtc.o(.text); asm/rom3.o(.text); src/play_time.o(.text); @@ -98,6 +109,7 @@ SECTIONS { . += 0x8; /* Why the gap? */ src/text.o(.rodata); src/string_util.o(.rodata); + src/link.o(.rodata); data/data2.o(.rodata); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); diff --git a/src/link.c b/src/link.c new file mode 100644 index 000000000..64e33fdfc --- /dev/null +++ b/src/link.c @@ -0,0 +1,1810 @@ +#include "global.h" +#include "main.h" +#include "task.h" +#include "text.h" +#include "sprite.h" +#include "songs.h" +#include "link.h" + +#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) + +struct BlockTransfer +{ + u16 pos; + u16 size; + void *src; + bool8 active; + u8 multiplayerId; +}; + +struct LinkTestBGInfo +{ + u32 screenBaseBlock; + u32 paletteNum; + u32 dummy_8; + u32 dummy_C; +}; + +extern void gpu_pal_apply(const u16 *, u16, u32); +extern void sub_8071C4C(const struct WindowConfig *); +extern u16 Random(void); +extern void SeedRng(u16); +extern s32 fade_and_return_progress_probably(void); +extern void copy_pal_bg_faded_to_pal_ram(void); +extern void sub_80516C4(u8, u16); + +extern u8 unk_2000000[]; +extern u8 unk_2004000[]; +extern u16 gUnknown_020239F8; +extern u16 word_203855E; + +extern u16 word_3004858; + +extern u8 gUnknown_0842C34C[]; + +static void InitLinkTestBG(u8, u8, u8, u8); +static void InitLinkTestBG_Unused(u8, u8, u8, u8); +static void LinkTestScreen(); +static void InitLocalLinkPlayer(void); +static void VBlankCB_LinkTest(void); +static void InitLink(void); +static void Task_TriggerHandshake(u8); +static void TestBlockTransfer(u32, u32, u32); +static void LinkTestProcessKeyInput(void); +static void CB2_LinkTest(void); +static void HandleReceiveRemoteLinkPlayer(u8); +static void ProcessRecvCmds(u8); +static void BuildSendCmd(u16); +static void sub_8007B44(void); +static void ResetBlockSend(void); +static bool8 InitBlockSend(void *, u32); +static void LinkCB_BlockSendBegin(void); +static void LinkCB_BlockSend(void); +static void LinkCB_BlockSendEnd(void); +static void sub_8007E04(void); +static u32 sub_8007E40(void); +static void SetBlockReceivedFlag(u8); +static u16 LinkTestCalcBlockChecksum(void *, u16); +static void PrintHexDigit(u8, u8, u8); +static void PrintHex(u32, u8, u8, u8); +static void LinkCB_RequestPlayerDataExchange(void); +static void Task_PrintTestData(u8); +static bool8 sub_8008224(void); +static u8 GetDummy2(void); +static void sub_8008350(void); +static void sub_800837C(void); +static void sub_80083E0(void); +static void sub_8008454(void); +static void sub_80084C8(void); +static void sub_80084F4(void); +static void CheckErrorStatus(void); +static void CB2_PrintErrorMessage(void); +static u8 IsSioMultiMaster(void); +static void DisableSerial(void); +static void EnableSerial(void); +static void CheckMasterOrSlave(void); +static void InitTimer(void); +static void EnqueueSendCmd(u16 *); +static void DequeueRecvCmds(u16[CMD_LENGTH][MAX_LINK_PLAYERS]); +static void StartTransfer(void); +static bool8 DoHandshake(void); +static void DoRecv(void); +static void DoSend(void); +static void StopTimer(void); +static void SendRecvDone(void); +static void ResetSendBuffer(void); +static void ResetRecvBuffer(void); + +static struct BlockTransfer sBlockSend; +static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; +static u32 sBlockSendDelayCounter; +static u32 sDummy1; +static u8 sDummy2; +static u32 sPlayerDataExchangeStatus; +static u32 sErrorLinkStatus; +static u32 sErrorLastRecvQueueCount; +static u32 sErrorLastSendQueueCount; +static u32 sDummy3; +static u8 sLinkTestLastBlockSendPos; +static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; +static u8 sNumVBlanksWithoutSerialIntr; +static bool8 sSendBufferEmpty; +static u16 sSendNonzeroCheck; +static u16 sRecvNonzeroCheck; +static u8 sChecksumAvailable; +static u8 sHandshakePlayerCount; + +COMM_3(u16 word_3002910[MAX_LINK_PLAYERS]) +COMM_2(u32 gLinkDebugValue1) +COMM_4(struct LinkPlayerBlock localLinkPlayerBlock) +COMM_2(bool8 gLinkErrorOccurred) +COMM_2(u32 gFiller_3002960) +COMM_2(u32 gLinkDebugValue2) +COMM_2(u32 gFiller_3002968) +COMM_2(bool8 gLinkPlayerPending[MAX_LINK_PLAYERS]) +COMM_4(struct LinkPlayer gLinkPlayers[MAX_LINK_PLAYERS]) +COMM_2(bool8 gBlockReceived[MAX_LINK_PLAYERS]) +COMM_2(u32 gFiller_30029E4) +COMM_2(u16 gLinkHeldKeys) +COMM_2(u16 gLinkTimeOutCounter) +COMM_2(u32 gFiller_30029F0) +COMM_4(struct LinkPlayer localLinkPlayer) +COMM_4(u16 gRecvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]) +COMM_2(u32 gLinkStatus) +COMM_2(bool8 gLinkDummyBool) +COMM_2(u8 byte_3002A68) +COMM_4(u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]) +COMM_2(bool8 u8_array_3002B70[MAX_LINK_PLAYERS]) +COMM_2(u16 gLinkType) +COMM_2(bool8 u8_array_3002B78[MAX_LINK_PLAYERS]) +COMM_4(u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]) +COMM_2(bool8 gSuppressLinkErrorMessage) +COMM_2(u8 gSavedLinkPlayerCount) +COMM_4(u16 gSendCmd[CMD_LENGTH]) +COMM_2(u8 gSavedMultiplayerId) +COMM_2(bool8 gReceivedRemoteLinkPlayers) +COMM_4(struct LinkTestBGInfo gLinkTestBGInfo) +COMM_2(void (*gLinkCallback)(void)) +COMM_4(struct LinkPlayer gSavedLinkPlayers[MAX_LINK_PLAYERS]) +COMM_2(u8 gShouldAdvanceLinkState) +COMM_3(u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]) +COMM_2(u32 gFiller_3003050) +COMM_2(u8 gBlockRequestType) +COMM_2(u32 gFiller_3003058) +COMM_2(u32 gFiller_300305C) +COMM_2(u8 gLastSendQueueCount) +COMM_4(struct Link gLink) +COMM_2(u8 gLastRecvQueueCount) +COMM_2(u16 gLinkSavedIme) + +EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = {0}; +EWRAM_DATA bool8 gLinkTestDummyBool = {0}; +EWRAM_DATA u32 gFiller_20238B8 = {0}; +EWRAM_DATA u32 dword_20238BC = {0}; +EWRAM_DATA bool8 gLinkOpen = {0}; + +#include "link/digit_palette.h" +#include "link/digit_tiles.h" + +static const u8 sDebugMessages[7][12] = +{ + _"せつぞく ちゅうです", + _"せつぞく できません", + _"かくにん ちゅうです", + _"かくにん できました", + _"かくにん できません", + _"かくにん を かくにん", + _"かくにん は しっぱい", +}; + +static const u8 sColorCodes[] = _"{HIGHLIGHT TRANSPARENT}{COLOR WHITE2}"; + +static const u32 sBlockRequestLookupTable[5 * 2] = +{ + (u32)gBlockSendBuffer, 200, + (u32)gBlockSendBuffer, 200, + (u32)gBlockSendBuffer, 100, + (u32)gBlockSendBuffer, 220, + (u32)gBlockSendBuffer, 40, +}; + +static const u8 sTestString[] = _"テストな"; + +ALIGNED(4) static const u8 sMagic[] = "GameFreak inc."; + +ALIGNED(4) static const u8 sEmptyString[] = _""; + +void Task_DestroySelf(u8 taskId) +{ + DestroyTask(taskId); +} + +static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +{ + gpu_pal_apply(sLinkTestDigitPalette, 16 * paletteNum, 32); + DmaCopy16(3, sLinkTestDigitTiles, BG_CHAR_ADDR(charBaseBlock), 0x220); + + gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; + gLinkTestBGInfo.paletteNum = paletteNum; + + switch (bgNum) + { + case 1: + REG_BG1CNT = 1 | (screenBaseBlock << 8) | (charBaseBlock << 2); + break; + case 2: + REG_BG2CNT = 1 | (screenBaseBlock << 8) | (charBaseBlock << 2); + break; + case 3: + REG_BG3CNT = 1 | (screenBaseBlock << 8) | (charBaseBlock << 2); + break; + } +} + +static void InitLinkTestBG_Unused(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +{ + gpu_pal_apply(sLinkTestDigitPalette, 16 * paletteNum, 32); + DmaCopy16(3, sLinkTestDigitTiles, BG_CHAR_ADDR(charBaseBlock), 0x220); + + gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; + gLinkTestBGInfo.paletteNum = paletteNum; + + *gBGControlRegs[bgNum] = (screenBaseBlock << 8) | (charBaseBlock << 2); +} + +static void LinkTestScreen(void) +{ + s32 i; + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(VBlankCB_LinkTest); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + sub_8071C4C(&gWindowConfig_81E6CE4); + ResetBlockSend(); + gLinkType = 0x1111; + OpenLink(); + SeedRng(gMain.vblankCounter1); + + for (i = 0; i < 4; i++) + { + // Very weird code, but nothing else seems to match. + // The following would have the same effect: + // gSaveBlock2.playerTrainerId[i] = Random(); + u8 *trainerId = gSaveBlock2.playerTrainerId; + s32 r; + s32 mask = 0xFF; + trainerId[i] = (r = Random()) & mask; + } + + InitLinkTestBG(0, 2, 4, 0); + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP; + CreateTask(Task_DestroySelf, 0); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + fade_and_return_progress_probably(); + sDummy3 = 0; + InitLocalLinkPlayer(); + CreateTask(Task_PrintTestData, 0); + SetMainCallback2(CB2_LinkTest); +} + +void sub_8007270(u8 a1) +{ + localLinkPlayer.lp_field_18 = a1; +} + +static void InitLocalLinkPlayer(void) +{ + s32 i; + + localLinkPlayer.trainerId = gSaveBlock2.playerTrainerId[0] + | (gSaveBlock2.playerTrainerId[1] << 8) + | (gSaveBlock2.playerTrainerId[2] << 16) + | (gSaveBlock2.playerTrainerId[3] << 24); + + for (i = 0; i < (s32)sizeof(localLinkPlayer.name); i++) + localLinkPlayer.name[i] = gSaveBlock2.playerName[i]; // UB: reads past the end of "playerName" array + + localLinkPlayer.gender = gSaveBlock2.playerGender; + localLinkPlayer.linkType = gLinkType; + localLinkPlayer.language = gGameLanguage; + localLinkPlayer.version = gGameVersion + 0x4000; + localLinkPlayer.lp_field_2 = 0; +} + +static void VBlankCB_LinkTest(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + copy_pal_bg_faded_to_pal_ram(); +} + +static void InitLink(void) +{ + s32 i; + + for (i = 0; i < CMD_LENGTH; i++) + gSendCmd[i] = 0xEFFF; + + gLinkOpen = TRUE; + EnableSerial(); +} + +static void Task_TriggerHandshake(u8 taskId) +{ + gTasks[taskId].data[0]++; + + if (gTasks[taskId].data[0] == 5) + { + gShouldAdvanceLinkState = 1; + DestroyTask(taskId); + } +} + +void OpenLink(void) +{ + s32 i; + + ResetSerial(); + InitLink(); + + gLinkCallback = LinkCB_RequestPlayerDataExchange; + gLinkVSyncDisabled = FALSE; + gLinkErrorOccurred = FALSE; + gSuppressLinkErrorMessage = FALSE; + + ResetBlockReceivedFlags(); + + sDummy1 = 0; + byte_3002A68 = 0; + gLinkDummyBool = FALSE; + gReceivedRemoteLinkPlayers = FALSE; + + for (i = 0; i < 4; i++) + { + gLinkPlayerPending[i] = TRUE; + u8_array_3002B78[i] = 0; + u8_array_3002B70[i] = 0; + } + + CreateTask(Task_TriggerHandshake, 2); +} + +void CloseLink(void) +{ + gReceivedRemoteLinkPlayers = FALSE; + gLinkOpen = FALSE; + DisableSerial(); +} + +static void TestBlockTransfer(u32 a1, u32 a2, u32 a3) +{ + u8 i; + u8 val; + + if (sLinkTestLastBlockSendPos != sBlockSend.pos) + { + PrintHex(sBlockSend.pos, 2, 3, 2); + sLinkTestLastBlockSendPos = sBlockSend.pos; + } + + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if (sLinkTestLastBlockRecvPos[i] != sBlockRecv[i].pos) + { + PrintHex(sBlockRecv[i].pos, 2, i + 4, 2); + sLinkTestLastBlockRecvPos[i] = sBlockRecv[i].pos; + } + } + + val = GetBlockRecievedStatus(); + + if (val == 0xF) + { + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if ((val >> i) & 1) + { + gLinkTestBlockChecksums[i] = LinkTestCalcBlockChecksum(&gBlockRecvBuffer[i], sBlockRecv[i].size); + ResetBlockReceivedFlag(i); + if (gLinkTestBlockChecksums[i] != 834) + { + gLinkTestDebugValuesEnabled = FALSE; + gLinkTestDummyBool = FALSE; + } + } + } + } +} + +static void LinkTestProcessKeyInput(void) +{ + if (gMain.newKeys & A_BUTTON) + gShouldAdvanceLinkState = 1; + if (gMain.heldKeys & B_BUTTON) + InitBlockSend(unk_2004000, 0x2004); + if (gMain.newKeys & L_BUTTON) + pal_fade_maybe(-1, 0, 0x10, 0, 2); + if (gMain.newKeys & START_BUTTON) + SetSuppressLinkErrorMessage(TRUE); + if (gMain.newKeys & R_BUTTON) + sub_8125D44(1); + if (gMain.newKeys & SELECT_BUTTON) + sub_800832C(); + if (gLinkTestDebugValuesEnabled) + { + u32 vblankCounter1 = gMain.vblankCounter1; + u8 val = gLinkVSyncDisabled; + if (!gLinkCallback) + val = gLinkVSyncDisabled | 0x10; + SetLinkDebugValues(vblankCounter1, val); + } +} + +static void CB2_LinkTest(void) +{ + LinkTestProcessKeyInput(); + TestBlockTransfer(1, 1, 0); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + fade_and_return_progress_probably(); +} + +u16 LinkMain2(u16 *heldKeys) +{ + u8 i; + + if (!gLinkOpen) + return 0; + + for (i = 0; i < CMD_LENGTH; i++) + gSendCmd[i] = 0; + + gLinkHeldKeys = *heldKeys; + + if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED) + { + ProcessRecvCmds(SIO_MULTI_CNT->id); + if (gLinkCallback) + gLinkCallback(); + CheckErrorStatus(); + } + + return gLinkStatus; +} + +static void HandleReceiveRemoteLinkPlayer(u8 multiplayerId) +{ + u32 pendingLinkPlayerCount = 0; + s32 i; + + gLinkPlayerPending[multiplayerId] = FALSE; + + for (i = 0; i < GetLinkPlayerCount_2(); i++) + pendingLinkPlayerCount += gLinkPlayerPending[i]; + + if (pendingLinkPlayerCount == 0 && !gReceivedRemoteLinkPlayers) + gReceivedRemoteLinkPlayers = TRUE; +} + +static void ProcessRecvCmds(u8 a1) +{ + u16 i; + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + word_3002910[i] = 0; + if (!gRecvCmds[0][i]) + continue; + switch (gRecvCmds[0][i]) + { + case 0x2222: + InitLocalLinkPlayer(); + localLinkPlayerBlock.linkPlayer = localLinkPlayer; + memcpy(localLinkPlayerBlock.magic1, sMagic, 15); + memcpy(localLinkPlayerBlock.magic2, sMagic, 15); + InitBlockSend(&localLinkPlayerBlock, sizeof(localLinkPlayerBlock)); + break; + case 0x5555: + byte_3002A68 = 1; + break; + case 0x5566: + byte_3002A68 = 1; + break; + case 0xBBBB: + { + struct BlockTransfer *blockRecv = &sBlockRecv[i]; + blockRecv->pos = 0; + blockRecv->size = gRecvCmds[1][i]; + blockRecv->multiplayerId = gRecvCmds[2][i]; + break; + } + case 0x8888: + if (sBlockRecv[i].size > BLOCK_BUFFER_SIZE) + { + u16 *buffer = (u16 *)unk_2000000; + u16 j; + for (j = 0; j < CMD_LENGTH - 1; j++) + buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; + } + else + { + u16 j; + for (j = 0; j < CMD_LENGTH - 1; j++) + gBlockRecvBuffer[i][(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; + } + + sBlockRecv[i].pos += (CMD_LENGTH - 1) * 2; + + if (sBlockRecv[i].pos >= sBlockRecv[i].size) + { + if (gLinkPlayerPending[i] == TRUE) + { + struct LinkPlayerBlock *block = (struct LinkPlayerBlock *)&gBlockRecvBuffer[i]; + struct LinkPlayer *linkPlayer = &gLinkPlayers[i]; + *linkPlayer = block->linkPlayer; + + if (strcmp(block->magic1, sMagic) + || strcmp(block->magic2, sMagic)) + { + SetMainCallback2(CB2_LinkError); + } + else + { + HandleReceiveRemoteLinkPlayer(i); + } + + ConvertInternationalString(gLinkPlayers[i].name, gLinkPlayers[i].language); + } + else + { + SetBlockReceivedFlag(i); + } + } + break; + case 0x5FFF: + u8_array_3002B78[i] = 1; + break; + case 0x2FFE: + u8_array_3002B70[i] = 1; + break; + case 0xAAAA: + sub_8007E24(); + break; + case 0xAAAB: + sub_80516C4(i, gRecvCmds[1][i]); + break; + case 0xCCCC: + { + const u32 *addresses; + const u32 *sizes; + void *data; + u16 size; + + addresses = sBlockRequestLookupTable; + data = (void *)addresses[gRecvCmds[1][i] * 2]; + + sizes = addresses + 1; + size = sizes[gRecvCmds[1][i] * 2]; + + SendBlock(0, data, size); + break; + } + case 0x4444: + word_3002910[i] = gRecvCmds[1][i]; + break; + case 0xCAFE: + word_3002910[i] = gRecvCmds[1][i]; + break; + } + } +} + +static void BuildSendCmd(u16 code) +{ + switch (code) + { + case 0x2222: + gSendCmd[0] = 0x2222; + gSendCmd[1] = gLinkType; + break; + case 0x2FFE: + gSendCmd[0] = 0x2FFE; + break; + case 0x4444: + gSendCmd[0] = 0x4444; + gSendCmd[1] = gMain.heldKeys; + break; + case 0x5555: + gSendCmd[0] = 0x5555; + break; + case 0x5566: + gSendCmd[0] = 0x5566; + break; + case 0x6666: + gSendCmd[0] = 0x6666; + gSendCmd[1] = 0; + break; + case 0x7777: + { + u8 i; + + gSendCmd[0] = 0x7777; + + for (i = 0; i < 5; i++) + gSendCmd[i + 1] = 0xEE; + + break; + } + case 0xBBBB: + gSendCmd[0] = 0xBBBB; + gSendCmd[1] = sBlockSend.size; + gSendCmd[2] = sBlockSend.multiplayerId + 128; + break; + case 0xAAAA: + gSendCmd[0] = 0xAAAA; + break; + case 0xAAAB: + gSendCmd[0] = 0xAAAB; + gSendCmd[1] = word_203855E; + break; + case 0xCCCC: + gSendCmd[0] = 0xCCCC; + gSendCmd[1] = gBlockRequestType; + break; + case 0x5FFF: + gSendCmd[0] = 0x5FFF; + break; + case 0xCAFE: + if (!word_3004858 || gUnknown_3001764) + break; + gSendCmd[0] = 0xCAFE; + gSendCmd[1] = word_3004858; + break; + } +} + +void sub_8007B14(void) +{ + gLinkCallback = sub_8007B44; +} + +bool32 sub_8007B24(void) +{ + if (gLinkCallback == sub_8007B44) + return TRUE; + else + return FALSE; +} + +static void sub_8007B44(void) +{ + if (gReceivedRemoteLinkPlayers == TRUE) + BuildSendCmd(0xCAFE); +} + +void ClearLinkCallback(void) +{ + gLinkCallback = NULL; +} + +void ClearLinkCallback_2(void) +{ + gLinkCallback = NULL; +} + +u8 GetLinkPlayerCount(void) +{ + return EXTRACT_PLAYER_COUNT(gLinkStatus); +} + +void OpenLinkTimed(void) +{ + sPlayerDataExchangeStatus = EXCHANGE_NOT_STARTED; + gLinkTimeOutCounter = 0; + OpenLink(); +} + +u8 GetLinkPlayerDataExchangeStatusTimed(void) +{ + s32 i; + s32 count = 0; + u32 index; + + if (gReceivedRemoteLinkPlayers == TRUE) + { + if (GetLinkPlayerCount() == 0) + { + gLinkErrorOccurred = TRUE; + CloseLink(); + } + + i = 0; + index = 0; + + while (i < GetLinkPlayerCount()) + { + if (gLinkPlayers[index].linkType == gLinkPlayers[0].linkType) + ++count; + ++index; + ++i; + } + + if (count == GetLinkPlayerCount()) + sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; + else + sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; + } + else + { + gLinkTimeOutCounter++; + if (gLinkTimeOutCounter > 600) + sPlayerDataExchangeStatus = EXCHANGE_TIMED_OUT; + } + + return sPlayerDataExchangeStatus; +} + +bool8 IsLinkPlayerDataExchangeComplete(void) +{ + u8 i; + u8 count = 0; + u8 isComplete; + + for (i = 0; i < GetLinkPlayerCount(); i++) + if (gLinkPlayers[i].linkType == gLinkPlayers[0].linkType) + count++; + + if (count == GetLinkPlayerCount()) + { + isComplete = TRUE; + sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; + } + else + { + isComplete = FALSE; + sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; + } + + return isComplete; +} + +u32 GetLinkPlayerTrainerId(u8 multiplayerId) +{ + return gLinkPlayers[multiplayerId].trainerId; +} + +void ResetLinkPlayers(void) +{ + s32 i; + for (i = 0; i < 4; i++) + memset(&gLinkPlayers[i], 0, sizeof(struct LinkPlayer)); +} + +static void ResetBlockSend(void) +{ + sBlockSend.active = FALSE; + sBlockSend.pos = 0; + sBlockSend.size = 0; + sBlockSend.src = NULL; +} + +static bool8 InitBlockSend(void *data, u32 size) +{ + if (sBlockSend.active) + { + return FALSE; + } + else + { + sBlockSend.multiplayerId = GetMultiplayerId(); + sBlockSend.active = TRUE; + sBlockSend.size = size; + sBlockSend.pos = 0; + + if (size > BLOCK_BUFFER_SIZE) + { + sBlockSend.src = data; + } + else + { + if (data != gBlockSendBuffer) + memcpy(gBlockSendBuffer, data, size); + sBlockSend.src = gBlockSendBuffer; + } + + BuildSendCmd(0xBBBB); + gLinkCallback = LinkCB_BlockSendBegin; + sBlockSendDelayCounter = 0; + return TRUE; + } +} + +static void LinkCB_BlockSendBegin(void) +{ + sBlockSendDelayCounter++; + if (sBlockSendDelayCounter > 2) + gLinkCallback = LinkCB_BlockSend; +} + +static void LinkCB_BlockSend(void) +{ + s32 i; + u8 *buffer = sBlockSend.src; + + gSendCmd[0] = 0x8888; + + for (i = 0; i < CMD_LENGTH - 1; i++) + { + s32 offset = sBlockSend.pos + 2 * i; + gSendCmd[i + 1] = (buffer[offset + 1] << 8) | buffer[offset]; + } + + sBlockSend.pos += (CMD_LENGTH - 1) * 2; + + if (sBlockSend.size <= sBlockSend.pos) + { + sBlockSend.active = FALSE; + gLinkCallback = LinkCB_BlockSendEnd; + } +} + +static void LinkCB_BlockSendEnd(void) +{ + gLinkCallback = NULL; +} + +static void sub_8007E04(void) +{ + GetMultiplayerId(); + BuildSendCmd(0x4444); + dword_20238BC++; +} + +void sub_8007E24(void) +{ + dword_20238BC = 0; + gLinkCallback = sub_8007E04; +} + +static u32 sub_8007E40(void) +{ + return dword_20238BC; +} + +void sub_8007E4C(void) +{ + BuildSendCmd(0xAAAA); +} + +u8 GetMultiplayerId(void) +{ + return SIO_MULTI_CNT->id; +} + +u8 bitmask_all_link_players_but_self(void) +{ + return ((1 << GetMultiplayerId()) ^ 0xF); +} + +bool8 SendBlock(u8 a1, void *a2, u16 a3) +{ + return InitBlockSend(a2, a3); +} + +bool8 sub_8007E9C(u8 a1) +{ + if (!gLinkCallback) + { + gBlockRequestType = a1; + BuildSendCmd(0xCCCC); + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 sub_8007ECC(void) +{ + u8 retVal = FALSE; + + if (!gLinkCallback) + retVal = TRUE; + + return retVal; +} + +u8 GetBlockRecievedStatus(void) +{ + return (gBlockReceived[3] << 3) + | (gBlockReceived[2] << 2) + | (gBlockReceived[1] << 1) + | gBlockReceived[0]; +} + +static void SetBlockReceivedFlag(u8 multiplayerId) +{ + gBlockReceived[multiplayerId] = TRUE; +} + +void ResetBlockReceivedFlags(void) +{ + s32 i; + for (i = 0; i < 4; i++) + gBlockReceived[i] = FALSE; +} + +void ResetBlockReceivedFlag(u8 multiplayerId) +{ + if (gBlockReceived[multiplayerId]) + gBlockReceived[multiplayerId] = FALSE; +} + +void sub_8007F4C(void) +{ + if ((gLinkStatus & LINK_STAT_MASTER) && EXTRACT_PLAYER_COUNT(gLinkStatus) > 1) + gShouldAdvanceLinkState = 1; +} + +static u16 LinkTestCalcBlockChecksum(void *data, u16 size) +{ + u16 sum = 0; + u16 i; + + for (i = 0; i < size / 2; i++) + sum += ((u16 *)data)[i]; + + return sum; +} + +static void PrintHexDigit(u8 tileNum, u8 x, u8 y) +{ + u16 *tilemap = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock); + tilemap[(32 * y) + x] = (gLinkTestBGInfo.paletteNum << 12) | (tileNum + 1); +} + +static void PrintHex(u32 num, u8 x, u8 y, u8 maxDigits) +{ + u8 buffer[16]; + s32 i; + + for (i = 0; i < maxDigits; i++) + { + buffer[i] = num & 0xF; + num >>= 4; + } + + for (i = maxDigits - 1; i >= 0; i--) + { + PrintHexDigit(buffer[i], x, y); + x++; + } +} + +static void LinkCB_RequestPlayerDataExchange(void) +{ + // Only one request needs to be sent, so only the master sends it. + if (gLinkStatus & LINK_STAT_MASTER) + BuildSendCmd(0x2222); + gLinkCallback = NULL; +} + +void Task_PrintTestData(u8 taskId) +{ + s32 i; + + PrintHex(gShouldAdvanceLinkState, 2, 1, 2); + PrintHex(gLinkStatus, 15, 1, 8); + PrintHex(gLink.state, 2, 10, 2); + PrintHex(EXTRACT_PLAYER_COUNT(gLinkStatus), 15, 10, 2); + PrintHex(GetMultiplayerId(), 15, 12, 2); + PrintHex(gLastSendQueueCount, 25, 1, 2); + PrintHex(gLastRecvQueueCount, 25, 2, 2); + PrintHex(GetBlockRecievedStatus(), 15, 5, 2); + PrintHex(gLinkDebugValue1, 2, 12, 8); + PrintHex(gLinkDebugValue2, 2, 13, 8); + PrintHex(GetSioMultiSI(), 25, 5, 1); + PrintHex(IsSioMultiMaster(), 25, 6, 1); + PrintHex(IsLinkConnectionEstablished(), 25, 7, 1); + PrintHex(HasLinkErrorOccurred(), 25, 8, 1); + + for (i = 0; i < MAX_LINK_PLAYERS; i++) + PrintHex(gLinkTestBlockChecksums[i], 10, 4 + i, 4); +} + +void SetLinkDebugValues(u32 value1, u32 value2) +{ + gLinkDebugValue1 = value1; + gLinkDebugValue2 = value2; +} + +u8 sub_8008198(void) +{ + u8 result = 0; + s32 i; + + for (i = 0; i < gSavedLinkPlayerCount; i++) + result |= (1 << i); + + return result; +} + +void sub_80081C8(u8 playerCount) +{ + s32 i; + + gSavedLinkPlayerCount = playerCount; + gSavedMultiplayerId = GetMultiplayerId(); + + for (i = 0; i < 4; i++) + gSavedLinkPlayers[i] = gLinkPlayers[i]; +} + +u8 sub_800820C(void) +{ + return gSavedLinkPlayerCount; +} + +u8 sub_8008218(void) +{ + return gSavedMultiplayerId; +} + +static bool8 sub_8008224(void) +{ + s32 count = 0; + s32 i; + + for (i = 0; i < gSavedLinkPlayerCount; i++) + if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) + count++; + + if (count == gSavedLinkPlayerCount) + return TRUE; + else + return FALSE; +} + +void sub_800826C(void) +{ + u8 i; + + for (i = 0; i < gSavedLinkPlayerCount; i++) + { + if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId + || StringCompareWithoutExtCtrlCodes(gSavedLinkPlayers[i].name, gLinkPlayers[i].name)) + { + gLinkErrorOccurred = TRUE; + CloseLink(); + SetMainCallback2(CB2_LinkError); + } + } +} + +void sub_80082EC(void) +{ + gSavedLinkPlayerCount = 0; + gSavedMultiplayerId = 0; +} + +u8 GetLinkPlayerCount_2(void) +{ + return EXTRACT_PLAYER_COUNT(gLinkStatus); +} + +bool8 IsLinkMaster(void) +{ + return EXTRACT_MASTER(gLinkStatus); +} + +static u8 GetDummy2(void) +{ + return sDummy2; +} + +void sub_800832C(void) +{ + if (!gLinkCallback) + { + gLinkCallback = sub_8008350; + gLinkDummyBool = FALSE; + } +} + +static void sub_8008350(void) +{ + if (gLastRecvQueueCount == 0) + { + BuildSendCmd(0x5FFF); + gLinkCallback = sub_800837C; + } +} + +static void sub_800837C(void) +{ + s32 i; + s32 totalCount = GetLinkPlayerCount(); + s32 count = 0; + + for (i = 0; i < totalCount; i++) + if (u8_array_3002B78[i]) + count++; + + if (count == totalCount) + { + gUnknown_020239F8 &= 0xFFDF; + gLinkVSyncDisabled = TRUE; + CloseLink(); + gLinkCallback = NULL; + gLinkDummyBool = TRUE; + } +} + +static void sub_80083E0(void) +{ + s32 i; + s32 totalCount = GetLinkPlayerCount(); + s32 count = 0; + + for (i = 0; i < totalCount; i++) + { + if (gLinkPlayers[i].language == 1) + count++; + else if (u8_array_3002B78[i]) + count++; + } + + if (count == totalCount) + { + gUnknown_020239F8 &= 0xFFDF; + gLinkVSyncDisabled = TRUE; + CloseLink(); + gLinkCallback = 0; + gLinkDummyBool = TRUE; + } +} + +static void sub_8008454(void) +{ + if (gLastRecvQueueCount == 0) + { + BuildSendCmd(0x5FFF); + gLinkCallback = sub_80083E0; + } +} + +void sub_8008480(void) +{ + if (!gLinkCallback) + { + gLinkCallback = sub_8008454; + gLinkDummyBool = FALSE; + } +} + +void sub_80084A4(void) +{ + if (!gLinkCallback) + gLinkCallback = sub_80084C8; + gLinkDummyBool = FALSE; +} + +static void sub_80084C8(void) +{ + if (gLastRecvQueueCount == 0) + { + BuildSendCmd(0x2FFE); + gLinkCallback = sub_80084F4; + } +} + +static void sub_80084F4(void) +{ + u8 totalCount = GetLinkPlayerCount(); + u8 count = 0; + + while (count < totalCount && u8_array_3002B70[count]) + count++; + + if (count == totalCount) + { + u8 i; + for (i = 0; i < 4; i++) + u8_array_3002B70[i] = 0; + gLinkCallback = NULL; + } +} + +static void CheckErrorStatus(void) +{ + if (gLinkOpen) + { + if (gLinkStatus & LINK_STAT_ERRORS) + { + if (!gSuppressLinkErrorMessage) + { + sErrorLinkStatus = gLinkStatus; + sErrorLastRecvQueueCount = gLastRecvQueueCount; + sErrorLastSendQueueCount = gLastSendQueueCount; + SetMainCallback2(CB2_LinkError); + } + gLinkErrorOccurred = TRUE; + CloseLink(); + } + } +} + +void CB2_LinkError(void) +{ + ResetSpriteData(); + FreeAllSpritePalettes(); + pal_fade_control_reset_maybe(); + rboxid_80040B8(0, 0, 2); + ResetTasks(); + SetVBlankCallback(VBlankCB_LinkTest); + SetUpWindowConfig(&gWindowConfig_81E7198); + sub_8071C4C(&gWindowConfig_81E7198); + sub_8071EF4(); + REG_BLDALPHA = 0; + REG_BG0VOFS = 0; + REG_BG0HOFS = 0; + REG_DISPCNT = 320; + gUnknown_3001BB4 = 0; + CreateTask(Task_DestroySelf, 0); + sub_8074D08(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + fade_and_return_progress_probably(); + SetMainCallback2(CB2_PrintErrorMessage); +} + +static void CB2_PrintErrorMessage(void) +{ + u8 array[64]; // unused + + switch (gMain.state) + { + case 0: + sub_80729D8(gUnknown_0842C34C, 20, 56, 1); + break; + case 30: + case 60: + audio_play(SE_BOO); + break; + case 90: + audio_play(SE_BOO); + break; + } + + if (gMain.state != 200) + gMain.state++; +} + +u8 GetSioMultiSI(void) +{ + return (REG_SIOCNT >> SIO_MULTI_SI_SHIFT) & SIO_MULTI_SI_MASK; +} + +static bool8 IsSioMultiMaster(void) +{ + bool8 isMaster = FALSE; + + if ((REG_SIOCNT & SIO_MULTI_SD) && !(REG_SIOCNT & SIO_MULTI_SI)) + isMaster = TRUE; + + return isMaster; +} + +bool8 IsLinkConnectionEstablished(void) +{ + return EXTRACT_CONN_ESTABLISHED(gLinkStatus); +} + +void SetSuppressLinkErrorMessage(bool8 value) +{ + gSuppressLinkErrorMessage = value; +} + +bool8 HasLinkErrorOccurred(void) +{ + return gLinkErrorOccurred; +} + +static void DisableSerial(void) +{ + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + REG_IME = gLinkSavedIme; + + REG_SIOCNT = 0; + REG_TM3CNT_H = 0; + REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL; + + CpuFill32(&gLink, 0, sizeof(gLink)); +} + +static void EnableSerial(void) +{ + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + REG_IME = gLinkSavedIme; + + REG_RCNT = 0; + + REG_SIOCNT = SIO_MULTI_MODE; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_115200_BPS; + + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = gLinkSavedIme; + + REG_SIOMLT_SEND = 0; + + CpuFill32(&gLink, 0, sizeof(gLink)); + + sNumVBlanksWithoutSerialIntr = 0; + sSendNonzeroCheck = 0; + sRecvNonzeroCheck = 0; + sChecksumAvailable = FALSE; + sHandshakePlayerCount = 0; + gLastSendQueueCount = 0; + gLastRecvQueueCount = 0; +} + +void ResetSerial(void) +{ + EnableSerial(); + DisableSerial(); +} + +u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 recvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]) +{ + u32 retVal; + u32 retVal2; + + switch (gLink.state) + { + case LINK_STATE_START0: + DisableSerial(); + gLink.state = LINK_STATE_START1; + break; + case LINK_STATE_START1: + if (*shouldAdvanceLinkState == 1) + { + EnableSerial(); + gLink.state = LINK_STATE_HANDSHAKE; + } + break; + case LINK_STATE_HANDSHAKE: + switch (*shouldAdvanceLinkState) + { + case 1: + if (gLink.isMaster == 8 && gLink.playerCount > 1) + gLink.handshakeAsMaster = TRUE; + break; + case 2: + gLink.state = LINK_STATE_START0; + REG_SIOMLT_SEND = 0; + break; + default: + CheckMasterOrSlave(); + break; + } + break; + case LINK_STATE_INIT_TIMER: + InitTimer(); + gLink.state = LINK_STATE_CONN_ESTABLISHED; + case LINK_STATE_CONN_ESTABLISHED: + EnqueueSendCmd(sendCmd); + DequeueRecvCmds(recvCmds); + break; + } + + *shouldAdvanceLinkState = 0; + + retVal = gLink.localId; + retVal |= (gLink.playerCount << 2); + + if (gLink.isMaster == 8) + retVal |= 0x20; + + { + u32 receivedNothing = gLink.receivedNothing << 8; + u32 link_field_F = gLink.link_field_F << 9; + u32 hardwareError = gLink.hardwareError << 12; + u32 badChecksum = gLink.badChecksum << 13; + u32 queueFull = gLink.queueFull << 14; + u32 val; + + if (gLink.state == LINK_STATE_CONN_ESTABLISHED) + { + val = 0x40; + val |= receivedNothing; + val |= retVal; + val |= link_field_F; + val |= hardwareError; + val |= badChecksum; + val |= queueFull; + } + else + { + val = retVal; + val |= receivedNothing; + val |= link_field_F; + val |= hardwareError; + val |= badChecksum; + val |= queueFull; + } + + retVal = val; + } + + if (gLink.lag == LAG_MASTER) + retVal |= 0x10000; + + if (gLink.localId > 3) + retVal |= 0x20000; + + retVal2 = retVal; + if (gLink.lag == LAG_SLAVE) + retVal2 |= 0x40000; + + return retVal2; +} + +static void CheckMasterOrSlave(void) +{ + u32 terminals = *(u32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SD | SIO_MULTI_SI); + + if (terminals == SIO_MULTI_SD && !gLink.localId) + gLink.isMaster = 8; + else + gLink.isMaster = 0; +} + +static void InitTimer(void) +{ + if (gLink.isMaster) + { + REG_TM3CNT_L = 65339; + REG_TM3CNT_H = TIMER_INTR_ENABLE | TIMER_64CLK; + + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_TIMER3; + REG_IME = gLinkSavedIme; + } +} + +static void EnqueueSendCmd(u16 *sendCmd) +{ + gLinkSavedIme = REG_IME; + REG_IME = 0; + + if (gLink.sendQueue.count < QUEUE_CAPACITY) + { + u8 i; + u8 offset = gLink.sendQueue.pos + gLink.sendQueue.count; + + if (offset >= QUEUE_CAPACITY) + offset -= QUEUE_CAPACITY; + + for (i = 0; i < CMD_LENGTH; i++) + { + sSendNonzeroCheck |= *sendCmd; + gLink.sendQueue.data[i][offset] = *sendCmd; + *sendCmd = 0; + sendCmd++; + } + } + else + { + gLink.queueFull = QUEUE_FULL_SEND; + } + + if (sSendNonzeroCheck) + { + gLink.sendQueue.count++; + sSendNonzeroCheck = 0; + } + + REG_IME = gLinkSavedIme; + gLastSendQueueCount = gLink.sendQueue.count; +} + +void DequeueRecvCmds(u16 recvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]) +{ + u8 i; + u8 j; + + gLinkSavedIme = REG_IME; + REG_IME = 0; + + if (gLink.recvQueue.count == 0) + { + for (i = 0; i < CMD_LENGTH; i++) + for (j = 0; j < gLink.playerCount; j++) + recvCmds[i][j] = 0; + + gLink.receivedNothing = TRUE; + } + else + { + for (i = 0; i < CMD_LENGTH; i++) + for (j = 0; j < gLink.playerCount; j++) + recvCmds[i][j] = gLink.recvQueue.data[j][i][gLink.recvQueue.pos]; + + gLink.recvQueue.count--; + gLink.recvQueue.pos++; + + if (gLink.recvQueue.pos >= QUEUE_CAPACITY) + gLink.recvQueue.pos = 0; + + gLink.receivedNothing = FALSE; + } + + REG_IME = gLinkSavedIme; +} + +void LinkVSync(void) +{ + if (gLink.isMaster) + { + switch (gLink.state) + { + case LINK_STATE_HANDSHAKE: + StartTransfer(); + break; + case LINK_STATE_CONN_ESTABLISHED: + if (gLink.serialIntrCounter > 8) + { + if (gLink.lag == LAG_MASTER) + return; + gLink.serialIntrCounter = 0; + } + else if (gLink.hardwareError != TRUE) + { + gLink.lag = LAG_MASTER; + return; + } + StartTransfer(); + break; + } + } + else if (gLink.state == LINK_STATE_CONN_ESTABLISHED + || gLink.state == LINK_STATE_HANDSHAKE) + { + sNumVBlanksWithoutSerialIntr++; + + if (sNumVBlanksWithoutSerialIntr > 10) + { + if (gLink.state == LINK_STATE_CONN_ESTABLISHED) + gLink.lag = LAG_SLAVE; + + if (gLink.state == LINK_STATE_HANDSHAKE) + { + gLink.playerCount = 0; + gLink.link_field_F = 0; + } + } + } +} + +void Timer3Intr(void) +{ + StopTimer(); + StartTransfer(); +} + +void SerialCB(void) +{ + gLink.localId = SIO_MULTI_CNT->id; + + switch (gLink.state) + { + case LINK_STATE_CONN_ESTABLISHED: + gLink.hardwareError = SIO_MULTI_CNT->error; + DoRecv(); + DoSend(); + SendRecvDone(); + break; + case LINK_STATE_HANDSHAKE: + if (DoHandshake()) + { + if (gLink.isMaster) + { + gLink.state = LINK_STATE_INIT_TIMER; + gLink.serialIntrCounter = 8; + } + else + { + gLink.state = LINK_STATE_CONN_ESTABLISHED; + } + } + break; + } + + gLink.serialIntrCounter++; + sNumVBlanksWithoutSerialIntr = 0; + + if (gLink.serialIntrCounter == 8) + gLastRecvQueueCount = gLink.recvQueue.count; +} + +static void StartTransfer(void) +{ + REG_SIOCNT |= SIO_START; +} + +static bool8 DoHandshake(void) +{ + u8 i; + u8 playerCount = 0; + u16 minRecv = 0xFFFF; + + if (gLink.handshakeAsMaster == TRUE) + REG_SIOMLT_SEND = MASTER_HANDSHAKE; + else + REG_SIOMLT_SEND = SLAVE_HANDSHAKE; + + *(u64 *)&gLink.tempRecvBuffer[0] = REG_SIOMLT_RECV; + REG_SIOMLT_RECV = 0; + + gLink.handshakeAsMaster = FALSE; + + for (i = 0; i < 4; i++) + { + if ((gLink.tempRecvBuffer[i] & ~0x3) == SLAVE_HANDSHAKE + || gLink.tempRecvBuffer[i] == MASTER_HANDSHAKE) + { + playerCount++; + + if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0) + minRecv = gLink.tempRecvBuffer[i]; + } + else + { + if (gLink.tempRecvBuffer[i] != 0xFFFF) + playerCount = 0; + break; + } + } + + gLink.playerCount = playerCount; + + // The handshake is successful when: + // 1. There are multiple players. + // 2. The number of players agrees with the last attempt. + // 3. Player no. 0 is identifying as the master. + if (gLink.playerCount > 1 + && gLink.playerCount == sHandshakePlayerCount + && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE) + return TRUE; + + if (gLink.playerCount > 1) + gLink.link_field_F = (minRecv & 3) + 1; + else + gLink.link_field_F = 0; + + sHandshakePlayerCount = gLink.playerCount; + + return FALSE; +} + +static void DoRecv(void) +{ + u16 recvBuffer[4]; + u8 i; + + *(u64 *)&recvBuffer[0] = REG_SIOMLT_RECV; + + if (gLink.sendCmdIndex == 0) + { + for (i = 0; i < gLink.playerCount; i++) + if (gLink.checksum != recvBuffer[i] && sChecksumAvailable) + gLink.badChecksum = TRUE; + + gLink.checksum = 0; + sChecksumAvailable = TRUE; + } + else + { + u8 index = gLink.recvQueue.pos + gLink.recvQueue.count; + + if (index >= QUEUE_CAPACITY) + index -= QUEUE_CAPACITY; + + if (gLink.recvQueue.count < QUEUE_CAPACITY) + { + for (i = 0; i < gLink.playerCount; i++) + { + gLink.checksum += recvBuffer[i]; + sRecvNonzeroCheck |= recvBuffer[i]; + gLink.recvQueue.data[i][gLink.recvCmdIndex][index] = recvBuffer[i]; + } + } + else + { + gLink.queueFull = QUEUE_FULL_RECV; + } + + gLink.recvCmdIndex++; + + if (gLink.recvCmdIndex == CMD_LENGTH && sRecvNonzeroCheck) + { + gLink.recvQueue.count++; + sRecvNonzeroCheck = 0; + } + } +} + +static void DoSend(void) +{ + if (gLink.sendCmdIndex == CMD_LENGTH) + { + REG_SIOMLT_SEND = gLink.checksum; + + if (!sSendBufferEmpty) + { + gLink.sendQueue.count--; + gLink.sendQueue.pos++; + + if (gLink.sendQueue.pos >= QUEUE_CAPACITY) + gLink.sendQueue.pos = 0; + } + else + { + sSendBufferEmpty = FALSE; + } + } + else + { + if (!sSendBufferEmpty && gLink.sendQueue.count == 0) + sSendBufferEmpty = TRUE; + + if (sSendBufferEmpty) + REG_SIOMLT_SEND = 0; + else + REG_SIOMLT_SEND = gLink.sendQueue.data[gLink.sendCmdIndex][gLink.sendQueue.pos]; + + gLink.sendCmdIndex++; + } +} + +static void StopTimer(void) +{ + if (gLink.isMaster) + { + REG_TM3CNT_H &= ~TIMER_ENABLE; + REG_TM3CNT_L = 65339; + } +} + +static void SendRecvDone(void) +{ + if (gLink.recvCmdIndex == CMD_LENGTH) + { + gLink.sendCmdIndex = 0; + gLink.recvCmdIndex = 0; + } + else if (gLink.isMaster) + { + REG_TM3CNT_H |= TIMER_ENABLE; + } +} + +static void ResetSendBuffer(void) +{ + u8 i; + u8 j; + + gLink.sendQueue.count = 0; + gLink.sendQueue.pos = 0; + + for (i = 0; i < CMD_LENGTH; i++) + for (j = 0; j < QUEUE_CAPACITY; j++) + gLink.sendQueue.data[i][j] = 0xEFFF; +} + +static void ResetRecvBuffer(void) +{ + u8 i; + u8 j; + u8 k; + + gLink.recvQueue.count = 0; + gLink.recvQueue.pos = 0; + + for (i = 0; i < 4; i++) + for (j = 0; j < CMD_LENGTH; j++) + for (k = 0; k < QUEUE_CAPACITY; k++) + gLink.recvQueue.data[i][j][k] = 0xEFFF; +} diff --git a/src/main.c b/src/main.c index 0c5055e60..ca04f14c5 100644 --- a/src/main.c +++ b/src/main.c @@ -2,15 +2,11 @@ #include "gba/m4a_internal.h" #include "gba/flash_internal.h" #include "siirtc.h" -#include "rtc.h" #include "main.h" +#include "rtc.h" +#include "link.h" extern struct SoundInfo gSoundInfo; -extern u16 gUnknown_3002A20; -extern u32 gUnknown_3002A60; -extern u16 gUnknown_3002F90; -extern u8 gUnknown_3003040; -extern u8 gUnknown_30033A9[]; extern u32 gUnknown_3004820; extern u32 IntrMain[]; @@ -53,20 +49,17 @@ COMM_4(struct Main gMain) COMM_2(u16 gKeyRepeatContinueDelay) COMM_2(u8 gUnknown_3001BB4) COMM_4(IntrFunc gIntrTable[INTR_COUNT]) -COMM_2(u8 gUnknown_3001BF8) +COMM_2(bool8 gLinkVSyncDisabled) COMM_4(u32 IntrMain_Buffer[0x200]) COMM_2(u8 gPcmDmaCounter) EWRAM_DATA void (*gFlashTimerIntrFunc)(void) = NULL; -extern void sub_8008BEC(void); extern void sub_800C35C(void); extern u16 Random(void); extern void SeedRng(u16); extern void remove_some_task(void); extern void c2_copyright_1(); -extern u32 sub_8008848(u8 *, u16 *, u16 *); -extern void sub_80075F0(u16 *); extern u32 sub_80558AC(void); extern u32 sub_8055910(void); extern u32 sub_8055940(void); @@ -74,7 +67,7 @@ extern void sound_something(void); extern void CheckForFlashMemory(void); extern void sound_sources_off(void); -void CallCallbacksWrapper(void); +void UpdateLinkAndCallCallbacks(void); void InitMainCallbacks(void); void CallCallbacks(void); void SetMainCallback2(MainCallback callback); @@ -120,24 +113,24 @@ void AgbMain() && (gMain.heldKeysRaw & B_START_SELECT) == B_START_SELECT) DoSoftReset(); - if (gUnknown_30033A9[0] > 1 && sub_8055910() == 1) + if (gLink.sendQueue.count > 1 && sub_8055910() == 1) { gUnknown_3001764 = 1; - CallCallbacksWrapper(); + UpdateLinkAndCallCallbacks(); gUnknown_3001764 = 0; } else { gUnknown_3001764 = 0; - CallCallbacksWrapper(); + UpdateLinkAndCallCallbacks(); - if (gUnknown_30033A9[0xC84] > 1) + if (gLink.recvQueue.count > 1) { if (sub_80558AC() == 1) { gMain.newKeys = 0; gUnknown_3001764 = 1; - CallCallbacksWrapper(); + UpdateLinkAndCallCallbacks(); gUnknown_3001764 = 0; } } @@ -149,12 +142,11 @@ void AgbMain() } } -// The conditions seem to be related to serial communication. -void CallCallbacksWrapper(void) +void UpdateLinkAndCallCallbacks(void) { - gUnknown_3002A60 = sub_8008848(&gUnknown_3003040, &gUnknown_3002F90, &gUnknown_3002A20); - sub_80075F0(&gMain.heldKeys); - if (!(gUnknown_3002A60 & 0x100) || sub_8055940() != 1) + gLinkStatus = LinkMain1(&gShouldAdvanceLinkState, gSendCmd, gRecvCmds); + LinkMain2(&gMain.heldKeys); + if (!(gLinkStatus & LINK_STAT_RECEIVED_NOTHING) || sub_8055940() != 1) CallCallbacks(); } @@ -289,8 +281,8 @@ void VBlankIntr(void) { u16 savedIme; - if (gUnknown_3001BF8 == 0) - sub_8008BEC(); + if (!gLinkVSyncDisabled) + LinkVSync(); savedIme = REG_IME; REG_IME = 0; diff --git a/src/string_util.c b/src/string_util.c index 43195a219..514e7031f 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -19,11 +19,14 @@ static u8 *ExpandPlaceholder_GoodLeader(void); static u8 *ExpandPlaceholder_EvilLegendary(void); static u8 *ExpandPlaceholder_GoodLegendary(void); +COMM_4(u8 gUnknownStringVar[16]) + const u8 gEmptyString_81E72B0[] = _""; const u8 gRightPointingTriangleString[] = _"▶"; -const u8 sDigits[] = @"0123456789ABCDEF"; -const s32 sPowersOfTen[] = +static const u8 sDigits[] = @"0123456789ABCDEF"; + +static const s32 sPowersOfTen[] = { 1, 10, @@ -37,12 +40,12 @@ const s32 sPowersOfTen[] = 1000000000, }; -const u8 sSetBrailleFont[] = { 0xFC, 0x06, 0x06, 0xFF }; -const u8 sGotoLine2[] = { 0xFE, 0xFC, 0x0E, 0x02, 0xFF }; +static const u8 sSetBrailleFont[] = { 0xFC, 0x06, 0x06, 0xFF }; +static const u8 sGotoLine2[] = { 0xFE, 0xFC, 0x0E, 0x02, 0xFF }; typedef u8 *(*ExpandPlaceholderFunc)(void); -const ExpandPlaceholderFunc sExpandPlaceholderFuncs[] = +static const ExpandPlaceholderFunc sExpandPlaceholderFuncs[] = { ExpandPlaceholder_UnknownStringVar, ExpandPlaceholder_PlayerName, @@ -74,8 +77,6 @@ extern u8 gExpandedPlaceholder_Groudon[]; extern u8 gExpandedPlaceholder_Brendan[]; extern u8 gExpandedPlaceholder_May[]; -extern u8 gUnknownStringVar[]; - u8 *StringCopy10(u8 *dest, u8 *src) { u8 i; diff --git a/src/text.c b/src/text.c index 497f50dbb..c6455f1f0 100644 --- a/src/text.c +++ b/src/text.c @@ -3720,9 +3720,9 @@ u8 GetStringWidthGivenWindowConfig(struct WindowConfig *winConfig, u8 *s) return GetStringWidth(&sTempWindow, s); } -void SetStringCharset(u8 *s, u8 charset) +void ConvertInternationalString(u8 *s, u8 language) { - if (charset == CHARSET_JAPANESE) + if (language == CHARSET_JAPANESE) { u8 i; u8 length; |