#include "global.h" #include "pokenav.h" /* TODO // emerald: sub_81D2278 void sub_80F5688(u16 * r6, u16 * r5, u16 * sp0, u8 r9, u16 * r7) { u16 sp04; u16 r0; u16 r4; u16 r10; if (r5[1] < sp0[1]) { sp04 = r5[1]; r4 = r5[0] << 10; r0 = sp0[1]; r10 = sp0[0]; } } */ NAKED void sub_80F5688(u16 r6[66][2], struct UnkPokenav11 * r5, struct UnkPokenav11 * sp0, u8 r9, u16 r7[66][2]) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" "\tmov r6, r9\n" "\tmov r5, r8\n" "\tpush {r5-r7}\n" "\tsub sp, 0x14\n" "\tadds r6, r0, 0\n" "\tadds r5, r1, 0\n" "\tstr r2, [sp]\n" "\tldr r7, [sp, 0x34]\n" "\tlsls r3, 24\n" "\tlsrs r3, 24\n" "\tmov r9, r3\n" "\tmovs r0, 0\n" "\tstr r0, [sp, 0x8]\n" "\tldrh r0, [r5, 0x2]\n" "\tldrh r1, [r2, 0x2]\n" "\tcmp r0, r1\n" "\tbcs _080F56D0\n" "\tadds r2, r0, 0\n" "\tstr r2, [sp, 0x4]\n" "\tldr r3, [sp]\n" "\tldrh r0, [r3, 0x2]\n" "\tldrh r1, [r5]\n" "\tlsls r4, r1, 10\n" "\tldrh r2, [r3]\n" "\tmov r10, r2\n" "\tldr r3, [sp, 0x4]\n" "\tsubs r0, r3\n" "\tlsls r0, 16\n" "\tlsrs r0, 16\n" "\tmov r8, r0\n" "\tcmp r0, 0\n" "\tbeq _080F56FC\n" "\tsubs r0, r2, r1\n" "\tb _080F56F2\n" "_080F56D0:\n" "\tldrh r0, [r5, 0x2]\n" "\tldr r1, [sp]\n" "\tldrh r1, [r1, 0x2]\n" "\tstr r1, [sp, 0x4]\n" "\tldr r2, [sp]\n" "\tldrh r1, [r2]\n" "\tlsls r4, r1, 10\n" "\tldrh r3, [r5]\n" "\tmov r10, r3\n" "\tldr r2, [sp, 0x4]\n" "\tsubs r0, r2\n" "\tlsls r0, 16\n" "\tlsrs r0, 16\n" "\tmov r8, r0\n" "\tcmp r0, 0\n" "\tbeq _080F56FC\n" "\tsubs r0, r3, r1\n" "_080F56F2:\n" "\tlsls r0, 10\n" "\tmov r1, r8\n" "\tbl __divsi3\n" "\tstr r0, [sp, 0x8]\n" "_080F56FC:\n" "\tmov r0, r8\n" "\tadds r0, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r0, 16\n" "\tmov r8, r0\n" "\tcmp r7, 0\n" "\tbne _080F5746\n" "\tldr r0, [sp, 0x4]\n" "\tsubs r0, 0x38\n" "\tlsls r0, 2\n" "\tadds r6, r0\n" "\tmovs r5, 0\n" "\tmov r3, r9\n" "\tlsls r3, 1\n" "\tmov r12, r3\n" "\tmov r0, r10\n" "\tadd r0, r9\n" "\tstr r0, [sp, 0xC]\n" "\tcmp r7, r8\n" "\tbcs _080F57D4\n" "\tmovs r7, 0x1\n" "_080F5726:\n" "\tadds r2, r3, r6\n" "\tasrs r1, r4, 10\n" "\tasrs r0, r4, 9\n" "\tands r0, r7\n" "\tadds r1, r0\n" "\tadd r1, r9\n" "\tstrh r1, [r2]\n" "\tldr r1, [sp, 0x8]\n" "\tadds r4, r1\n" "\tadds r6, 0x4\n" "\tadds r0, r5, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r5, r0, 16\n" "\tcmp r5, r8\n" "\tbcc _080F5726\n" "\tb _080F57D4\n" "_080F5746:\n" "\tldr r2, [sp, 0x8]\n" "\tcmp r2, 0\n" "\tble _080F57E4\n" "\tldr r0, [sp, 0x4]\n" "\tsubs r0, 0x38\n" "\tlsls r0, 2\n" "\tadds r7, r0\n" "\tmovs r5, 0\n" "\tmov r3, r9\n" "\tlsls r3, 1\n" "\tmov r12, r3\n" "\tmov r0, r10\n" "\tadd r0, r9\n" "\tstr r0, [sp, 0xC]\n" "\tcmp r5, r8\n" "\tbcs _080F5798\n" "\tldr r0, _080F57D8 @ =0x00026bff\n" "\tcmp r4, r0\n" "\tbgt _080F5798\n" "\tmov r1, r12\n" "\tstr r1, [sp, 0x10]\n" "\tmov r10, r0\n" "_080F5772:\n" "\tldr r3, [sp, 0x10]\n" "\tadds r2, r3, r7\n" "\tasrs r1, r4, 10\n" "\tasrs r0, r4, 9\n" "\tmovs r3, 0x1\n" "\tands r0, r3\n" "\tadds r1, r0\n" "\tadd r1, r9\n" "\tstrh r1, [r2]\n" "\tldr r0, [sp, 0x8]\n" "\tadds r4, r0\n" "\tadds r7, 0x4\n" "\tadds r0, r5, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r5, r0, 16\n" "\tcmp r5, r8\n" "\tbcs _080F5798\n" "\tcmp r4, r10\n" "\tble _080F5772\n" "_080F5798:\n" "\tldr r1, _080F57DC @ =gPokenavStructPtr\n" "\tldr r0, [r1]\n" "\tldr r2, [sp, 0x4]\n" "\tadds r1, r2, r5\n" "\tldr r3, _080F57E0 @ =0x00009340\n" "\tadds r0, r3\n" "\tstrh r1, [r0]\n" "\tldrh r0, [r0]\n" "\tsubs r0, 0x38\n" "\tlsls r0, 2\n" "\tadds r6, r0\n" "\tcmp r5, r8\n" "\tbcs _080F57D4\n" "\tmov r3, r12\n" "\tmovs r7, 0x1\n" "_080F57B6:\n" "\tadds r2, r3, r6\n" "\tasrs r1, r4, 10\n" "\tasrs r0, r4, 9\n" "\tands r0, r7\n" "\tadds r1, r0\n" "\tadd r1, r9\n" "\tstrh r1, [r2]\n" "\tldr r0, [sp, 0x8]\n" "\tadds r4, r0\n" "\tadds r6, 0x4\n" "\tadds r0, r5, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r5, r0, 16\n" "\tcmp r5, r8\n" "\tbcc _080F57B6\n" "_080F57D4:\n" "\tsubs r0, r6, 0x4\n" "\tb _080F58C4\n" "\t.align 2, 0\n" "_080F57D8: .4byte 0x00026bff\n" "_080F57DC: .4byte gPokenavStructPtr\n" "_080F57E0: .4byte 0x00009340\n" "_080F57E4:\n" "\tldr r1, [sp, 0x8]\n" "\tcmp r1, 0\n" "\tbge _080F5890\n" "\tldr r0, [sp, 0x4]\n" "\tsubs r0, 0x38\n" "\tlsls r0, 2\n" "\tadds r6, r0\n" "\tmovs r5, 0\n" "\tmov r2, r9\n" "\tlsls r2, 1\n" "\tmov r12, r2\n" "\tmov r3, r10\n" "\tadd r3, r9\n" "\tstr r3, [sp, 0xC]\n" "\tcmp r5, r8\n" "\tbcs _080F5842\n" "\tadds r3, r2, r6\n" "\tasrs r1, r4, 10\n" "\tasrs r0, r4, 9\n" "\tmovs r2, 0x1\n" "\tands r0, r2\n" "\tadds r1, r0\n" "\tadd r1, r9\n" "\tstrh r1, [r3]\n" "\tb _080F5838\n" "_080F5816:\n" "\tldr r0, [sp, 0x8]\n" "\tadds r4, r0\n" "\tadds r6, 0x4\n" "\tadds r0, r5, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r5, r0, 16\n" "\tcmp r5, r8\n" "\tbcs _080F5842\n" "\tmov r1, r12\n" "\tadds r3, r1, r6\n" "\tasrs r2, r4, 10\n" "\tasrs r0, r4, 9\n" "\tmovs r1, 0x1\n" "\tands r0, r1\n" "\tadds r2, r0\n" "\tadd r2, r9\n" "\tstrh r2, [r3]\n" "_080F5838:\n" "\tldr r0, _080F5884 @ =0x00026bff\n" "\tcmp r4, r0\n" "\tbgt _080F5816\n" "\tmovs r0, 0x9B\n" "\tstrh r0, [r3]\n" "_080F5842:\n" "\tldr r2, _080F5888 @ =gPokenavStructPtr\n" "\tldr r0, [r2]\n" "\tldr r3, [sp, 0x4]\n" "\tadds r1, r3, r5\n" "\tldr r2, _080F588C @ =0x00009340\n" "\tadds r0, r2\n" "\tstrh r1, [r0]\n" "\tldrh r0, [r0]\n" "\tsubs r0, 0x38\n" "\tlsls r0, 2\n" "\tadds r7, r0\n" "\tcmp r5, r8\n" "\tbcs _080F587E\n" "\tmov r3, r12\n" "\tmovs r6, 0x1\n" "_080F5860:\n" "\tadds r2, r3, r7\n" "\tasrs r1, r4, 10\n" "\tasrs r0, r4, 9\n" "\tands r0, r6\n" "\tadds r1, r0\n" "\tadd r1, r9\n" "\tstrh r1, [r2]\n" "\tldr r0, [sp, 0x8]\n" "\tadds r4, r0\n" "\tadds r7, 0x4\n" "\tadds r0, r5, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r5, r0, 16\n" "\tcmp r5, r8\n" "\tbcc _080F5860\n" "_080F587E:\n" "\tsubs r0, r7, 0x4\n" "\tb _080F58C4\n" "\t.align 2, 0\n" "_080F5884: .4byte 0x00026bff\n" "_080F5888: .4byte gPokenavStructPtr\n" "_080F588C: .4byte 0x00009340\n" "_080F5890:\n" "\tldr r0, _080F58BC @ =gPokenavStructPtr\n" "\tldr r0, [r0]\n" "\tldr r1, _080F58C0 @ =0x00009340\n" "\tadds r0, r1\n" "\tmov r2, sp\n" "\tldrh r2, [r2, 0x4]\n" "\tstrh r2, [r0]\n" "\tldr r0, [sp, 0x4]\n" "\tsubs r0, 0x38\n" "\tlsls r0, 2\n" "\tadds r6, r0\n" "\tadds r7, r0\n" "\tldrh r0, [r5]\n" "\tadds r0, 0x1\n" "\tstrh r0, [r6, 0x2]\n" "\tldr r3, [sp]\n" "\tldrh r0, [r3]\n" "\tstrh r0, [r7]\n" "\tmovs r0, 0x9B\n" "\tstrh r0, [r7, 0x2]\n" "\tb _080F58CC\n" "\t.align 2, 0\n" "_080F58BC: .4byte gPokenavStructPtr\n" "_080F58C0: .4byte 0x00009340\n" "_080F58C4:\n" "\tadd r0, r12\n" "\tmov r1, sp\n" "\tldrh r1, [r1, 0xC]\n" "\tstrh r1, [r0]\n" "_080F58CC:\n" "\tadd sp, 0x14\n" "\tpop {r3-r5}\n" "\tmov r8, r3\n" "\tmov r9, r4\n" "\tmov r10, r5\n" "\tpop {r4-r7}\n" "\tpop {r0}\n" "\tbx r0"); } void sub_80F58DC(struct UnkPokenav11 * a0) { u16 i, r6, varMax; if (a0[0].unk2 < a0[1].unk2) { r6 = a0[0].unk2; sub_80F5688(gPokenavStructPtr->unk9130, &a0[0], &a0[1], 1, NULL); } else { r6 = a0[1].unk2; sub_80F5688(gPokenavStructPtr->unk9130, &a0[1], &a0[0], 0, NULL); } sub_80F5688(gPokenavStructPtr->unk9130, &a0[1], &a0[2], 1, NULL); i = a0[2].unk2 <= a0[3].unk2; sub_80F5688(gPokenavStructPtr->unk9130, &a0[2], &a0[3], i, gPokenavStructPtr->unk9238); for (i = 56; i < r6; i++) { gPokenavStructPtr->unk9130[i - 56][0] = 0; gPokenavStructPtr->unk9130[i - 56][1] = 0; } for (i = a0[0].unk2; i <= gPokenavStructPtr->unk9340; i++) gPokenavStructPtr->unk9130[i - 56][0] = 155; varMax = max(gPokenavStructPtr->unk9340, a0[2].unk2); for (i = varMax + 1; i < 122; i++) { gPokenavStructPtr->unk9130[i - 56][0] = 0; gPokenavStructPtr->unk9130[i - 56][1] = 0; } // // for (i = 56; i < 122; i++) // { // if (gPokenavStructPtr->unk9130[i - 56][0] == 0 && gPokenavStructPtr->unk9130[i - 56][1] != 0) // gPokenavStructPtr->unk9130[i - 56][0] = 155; // } }