SUPER BIG CRAZY EVIL SUBROUTINE OF HATE Question: What does this whole thing do, why, and why is it called from different places? Why is it called per glyph? How does this affect the print flags? Answer: eat gunpowder 0807068C B510 push r4,r14 ;7 344 0807068E 1C04 mov r4,r0 ;3 347 08070690 F7F9FD70 bl 806A174h ;14 361 0806A174 4801 ldr r0,=2001CC8h ;12 241 0806A176 6800 ldr r0,[r0] ;5 246 ; r0 gets 0x2016330 here (in this example) 0806A178 4770 bx r14 ;11 257 08070694 1C21 mov r1,r4 ;3 364 ;r4 and r1 now have 1 in this case 08070696 F7F9FDAF bl 806A1F8h ;14 378 0806A1F8 B5F0 push r4-r7,r14 ;37 505 0806A1FA 464F mov r7,r9 ;3 508 0806A1FC 4646 mov r6,r8 ;3 511 0806A1FE B4C0 push r6,r7 ;19 530 0806A200 B089 add sp,-24h ;3 533 Allocate 24h bytes on the stack 0806A202 1C07 mov r7,r0 ;3 536 0806A204 4688 mov r8,r1 ;3 539 0806A206 2900 cmp r1,0h ;3 542 if r1 > 0, goto 6A20C, else goto 6A36A 0806A208 DC00 bgt 806A20Ch ;11 553 0806A20A E0AE b 806A36Ah ;11 564 0806A20C 485A ldr r0,=09F44FF0h ;12 576 0806A20E 4681 mov r9,r0 ;3 579 0806A210 1C38 mov r0,r7 ;3 582 0806A212 F000F8BF bl 806A394h ;14 596 0806A394 6A00 ldr r0,[r0,20h] ;10 194 In this case, r0 is loaded with 2D1 0806A396 4770 bx r14 ;11 205 0806A216 2800 cmp r0,0h ;3 599 0806A218 DD67 ble 806A2EAh ;11 610 if r0 <= 0 goto 6A2EA 0806A21A 69FC ldr r4,[r7,1Ch] ;5 615 r4 gets loaded with 9F7EBA0 0806A21C 3450 add r4,50h ;3 618 r4 = 9F7EBF0 0806A21E 2000 mov r0,0h ;3 621 0806A220 5E25 ldsh r5,[r4,r0] ;7 628 r5 = 0 0806A222 197D add r5,r7,r5 ;3 631 r7 has 2016330 right now, so r5 thus becomes 2016330 0806A224 1C38 mov r0,r7 ;3 634 0806A226 F000F8B5 bl 806A394h ;14 648 0806A394 6A00 ldr r0,[r0,20h] ;10 194 In this case, r0 is loaded with 2D1 again 0806A396 4770 bx r14 0806A22A 1C06 mov r6,r0 ;3 651 0806A22C 4668 mov r0,r13 ;3 654 Give r0 the current SP, which points to the current struct 0806A22E F7FEFBC1 bl 80689B4h ;14 668 080689B4 4906 ldr r1,=09F7EAA8h ;12 387 080689B6 61C1 str r1,[r0,1Ch] ;6 393 store that address somewhere in the stack, possibly in a struct? 080689B8 1D02 add r2,r0,4 ;3 396 080689BA 2100 mov r1,0h ;3 399 080689BC 6041 str r1,[r0,4h] ;6 405 080689BE 6051 str r1,[r2,4h] ;6 411 080689C0 6091 str r1,[r2,8h] ;6 417 clear out the words at 0x04, 0x08, and 0xC 080689C2 320C add r2,0Ch ;3 420 080689C4 6101 str r1,[r0,10h] ;6 426 clear out the word at 0x10 080689C6 6051 str r1,[r2,4h] ;6 432 clear out the word at 0x14 080689C8 6091 str r1,[r2,8h] ;6 438 clear out the word at 0x18 080689CA 8001 strh r1,[r0] ;6 444 clear out the halfword at 0x0 080689CC 8041 strh r1,[r0,2h] ;6 450 clear out the halfword at 0x2 080689CE 4770 bx r14 ;11 461 so basically, we've cleared these entries in the struct: 00 (halfword) 02 (halfword) 04 (word) 08 (word) 0C (word) 10 (word) 18 (word) and set the word at 1C to what appears to be a default ROM address 1C (word) = 0x9F7EAA8 0806A232 4852 ldr r0,=09F7EDA0h ;12 680 0806A234 9007 str r0,[sp,1Ch] ;6 686 Store 9F7EDA0 in the struct starting at SP (which we just reset above already actually) 0806A236 9608 str r6,[sp,20h] ;6 692 Store that earlier 2D1 value at 0x20 in the struct at SP 0806A238 6862 ldr r2,[r4,4h] ;5 697 Load from [r4 + 4], in this case, [9F7EBF4] r2 winds up with 8068EA1 This is important and also makes following this code INSANE 0806A23A 1C28 mov r0,r5 ;3 700 r0 gets 2016330 0806A23C 4669 mov r1,r13 ;3 703 r1 gets the SP, which currently points to the current struct 0806A23E F027FB7D bl 809193Ch ;14 717 0809193C 4710 bx r2 ;11 392 Branch to the address in r2 WHYYYYYYYYYYYYYYY this makes things so sucky lame to figure out :( 08068EA0 B5F0 push r4-r7,r14 ;37 372 08068EA2 4657 mov r7,r10 ;3 375 08068EA4 464E mov r6,r9 ;3 378 08068EA6 4645 mov r5,r8 ;3 381 08068EA8 B4E0 push r5-r7 ;25 406 08068EAA B083 add sp,-0Ch ;3 409 Allocate 0xC bytes on the stack 08068EAC 4681 mov r9,r0 ;3 412 08068EAE 468A mov r10,r1 ;3 415 r10 now contains the current struct's address 08068EB0 69C9 ldr r1,[r1,1Ch] ;5 420 Load r1 with the value in 1C of the current struct r1 now equals 9F7EDA0, which we set in this struct not too long ago 08068EB2 2210 mov r2,10h ;3 423 08068EB4 5E88 ldsh r0,[r1,r2] ;9 432 load from [r1 + 0x10], in this case from [9F7EDB0] r0 now equals 00 08068EB6 4450 add r0,r10 ;3 435 r0 += r10 (the current struct address) In this case, r0 now equals 3006BCC 08068EB8 6949 ldr r1,[r1,14h] ;5 440 Load from [r1 + 0x14], in this case from [9F7EDB4] r1 now equals 806A0F5 08068EBA F028FD3D bl 8091938h ;14 454 08091938 4708 bx r1 ;11 400 Jump to the value in r1 AAAAAAAAAAAARGH 0806A0F4 B500 push r14 ;13 529 0806A0F6 F7FFFFF9 bl 806A0ECh ;14 543 0806A0EC 4800 ldr r0,=2001CA0h ;12 506 0806A0EE 4770 bx r14 ;11 517 this whole function is meant to load r0 with 2001CA0 bleh, how smelly 0806A0FA BC02 pop r1 ;12 555 0806A0FC 4708 bx r1 ;11 566 08068EBE 1C03 mov r3,r0 ;3 457 r3 = r0 r3 now has 2001CA0 08068EC0 9300 str r3,[sp] ;6 463 store that address on the stack 08068EC2 4648 mov r0,r9 ;3 466 r0 = r9 r0 now has 2016330 08068EC4 3004 add r0,4h ;3 469 r0 += 4 08068EC6 2200 mov r2,0h ;3 472 r2 = 0 08068EC8 6841 ldr r1,[r0,4h] ;10 482 load r1 with the word at [r0 + 4], which is [2016338] r1 now has 5 08068ECA 428A cmp r2,r1 ;3 485 08068ECC DA0C bge 8068EE8h ;11 496 if r2 >= r1, goto 68EE8, else: 08068ECE 1C1C mov r4,r3 ;3 499 08068ED0 1C0B mov r3,r1 ;3 502 r4 gets 2001CA0 r3 gets 5 08068ED2 6881 ldr r1,[r0,8h] ;10 512 load r1 with the word at [r0 + 8], which is [201633C] r1 now has 201D128 08068ED4 6808 ldr r0,[r1] ;5 517 load r0 with the value at r1, at r1 there seems to be a table of RAM addresses r0 now has 2001CAC 08068ED6 42A0 cmp r0,r4 ;3 520 08068ED8 D102 bne 8068EE0h ;11 531 if r0 != r4 goto 68EE0, in this case, they're not equal, so we do our jump (else:) 08068EDA 3104 add r1,4h ;3 534 r1 += 4 this stuff gets executed if we finally made a match with [r1] and r4 08068EDC 4688 mov r8,r1 ;3 537 r8 = the new r1 08068EDE E005 b 8068EECh ;11 548 goto 68EEC, which skips two instructions we'd do if we didn't make a match 08068EE0 3110 add r1,10h ;3 551 08068EE2 3201 add r2,1h ;3 554 r1 += 0x10 r2++ 08068EE4 429A cmp r2,r3 ;3 557 08068EE6 DBF5 blt 8068ED4h ;11 568 if r2 < r3, loop back to 68ED4 basically, it looks like we cycle through a couple times to see if the value in [r1] is equal to r4, then increment stuff for the next iteration 08068EE8 2300 mov r3,0h ;3 571 08068EEA 4698 mov r8,r3 ;3 574 r3 and r8 now equal 0, this executes if we couldn't find a match in the RAM address table 08068EEC 4640 mov r0,r8 ;3 577 r0 = r8 08068EEE 2800 cmp r0,0h ;3 580 08068EF0 D060 beq 8068FB4h ;11 591 if r0 = 0, goto 68FB4 and end this function this means we didn't find a match in the RAM address table else: 08068EF2 6847 ldr r7,[r0,4h] ;10 601 load r7 with the value at [address we found + 4] r7 now has 6 Not sure what this value means, but oh well 08068EF4 4649 mov r1,r9 ;3 604 r1 = r9 r1 now has 2016330 08068EF6 8808 ldrh r0,[r1] ;5 609 08068EF8 3001 add r0,1h ;3 612 08068EFA 8008 strh r0,[r1] ;6 618 load the value there, increment it, and store it back 08068EFC 2500 mov r5,0h ;3 621 initialize r5 with 0 08068EFE 42BD cmp r5,r7 ;3 624 08068F00 DA44 bge 8068F8Ch ;11 635 if r5 >= r7, goto 68F8C else: 08068F02 00A9 lsl r1,r5,2h ;3 638 r1 = r5 * 4 r5 is some kind of index, and now we're going to use it to get into a table? 08068F04 4642 mov r2,r8 ;3 641 r2 = r8 r2 gets loaded with 201D16C 08068F06 6890 ldr r0,[r2,8h] ;12 653 load r0 with [r2 + 8], [201D174] r0 now has 201EE28 08068F08 1842 add r2,r0,r1 ;3 656 r2 = r0 + r1 r2 now has 201EE28 08068F0A 6813 ldr r3,[r2] ;12 668 load r3 with the value at this table entry r3 == 201d108 08068F0C 2B00 cmp r3,0h ;3 671 08068F0E D023 beq 8068F58h ;11 682 if r3 == 0, then goto 68F58 else there was an address to be found here, so do this: 08068F10 200E mov r0,0Eh ;3 685 08068F12 5E1C ldsh r4,[r3,r0] ;5 690 load r4 with [r3 + 0E], or [201d116] r4 gets loaded with FFFFFFFF 08068F14 2C00 cmp r4,0h ;3 693 08068F16 DD0E ble 8068F36h ;11 704 if r4 <= 0, goto 68F36 since r4 is -1 in this case, do the jump 08068F18 2110 mov r1,10h ;3 707 ***** do this code later? 08068F1A 5E58 ldsh r0,[r3,r1] ;5 712 08068F1C 689A ldr r2,[r3,8h] ;5 717 08068F1E 1810 add r0,r2,r0 ;3 720 08068F20 6801 ldr r1,[r0] ;10 730 08068F22 00E0 lsl r0,r4,3h ;3 733 08068F24 1840 add r0,r0,r1 ;3 736 08068F26 1C06 mov r6,r0 ;3 739 08068F28 3E08 sub r6,8h ;3 742 08068F2A 6830 ldr r0,[r6] ;5 747 08068F2C 6871 ldr r1,[r6,4h] ;5 752 08068F2E 9001 str r0,[sp,4h] ;6 758 08068F30 9102 str r1,[sp,8h] ;6 764 08068F32 9E02 ldr r6,[sp,8h] ;5 769 08068F34 E001 b 8068F3Ah ;11 780 this gets jumped to after a comparison at 08068F16 r4 was -1, so we came here 08068F36 691E ldr r6,[r3,10h] ;5 785 load r6 with [r3 + 0x10], [201D118], r6 now has 80710B1 08068F38 689A ldr r2,[r3,8h] ;5 790 load r2 with [r3 + 8], [201D110] r2 now has 201D0C4 if that comparison wasn't true, we jump here instead 08068F3A 200C mov r0,0Ch ;3 793 08068F3C 5E19 ldsh r1,[r3,r0] ;5 798 load r1 with the value at [r3 + 0C] r1 now has 00 08068F3E 2C00 cmp r4,0h ;3 801 08068F40 DD04 ble 8068F4Ch ;11 812 again, we check if r4 is a negative number if it is, goto 68F4C 08068F42 9B01 ldr r3,[sp,4h] ;5 817 ***** Do this code later? 08068F44 0418 lsl r0,r3,10h ;3 820 08068F46 1400 asr r0,r0,10h ;3 823 08068F48 1840 add r0,r0,r1 ;3 826 08068F4A E000 b 8068F4Eh ;11 837 we jumped here if r4 was a negative number 08068F4C 1C08 mov r0,r1 ;3 840 r0 = r1 in this case, r0 now = 00 we jumped here if r4 wasn't a negative number 08068F4E 1810 add r0,r2,r0 ;3 843 r0 = r2 + r0 r0 now has 201D0C4 08068F50 4651 mov r1,r10 ;3 846 r1 now has 3006BCC, the address of our current struct 08068F52 F028FCFB bl 809194Ch ;14 860 0809194C 4730 bx r6 ;11 280 jump to the address at r6, BLARGH 080710B0 B500 push r14 ;6 287 080710B2 1C01 mov r1,r0 ;3 290 r1 now has 201D0C4 080710B4 F000F802 bl 80710BCh ;14 304 080710BC B530 push r4,r5,r14 ;8 212 080710BE 1C05 mov r5,r0 ;3 215 080710C0 1C0C mov r4,r1 ;3 218 store these values in registers temporarily 080710C2 69E1 ldr r1,[r4,1Ch] ;5 223 load the word at [r4 + 1C], [201D0E0] r1 now has 9F80960 080710C4 3168 add r1,68h ;3 226 r1 += 0x68 080710C6 2200 mov r2,0h ;3 229 080710C8 5E88 ldsh r0,[r1,r2] ;5 234 load the halfowrd at [r1] r0 now equals 00 080710CA 1820 add r0,r4,r0 ;3 237 r0 = r4 + r0 r0 now equals 201D0C4 080710CC 6849 ldr r1,[r1,4h] ;10 247 load r1 with the value at [r1 + 4], [09F809CC] r1 now equals 8070FE5 080710CE F020FC33 bl 8091938h ;14 261 08091938 4708 bx r1 ;11 302 goto the address in r1 and destroy brain cells in massive quantities 08070FE4 4770 bx r14 ;11 313 jump to what's in the LR, in this case 80710D3 hurray, that puts us back on track barely 080710D2 69E0 ldr r0,[r4,1Ch] ;5 266 load r0 with the address stored at [r4 + 1C], [201D0E0] r0 = 9F80960 080710D4 3090 add r0,90h ;3 269 r0 += 0x90 080710D6 2200 mov r2,0h ;3 272 080710D8 5E81 ldsh r1,[r0,r2] ;5 277 load r1 with the value stored at [r0] r1 = 00 080710DA 1864 add r4,r4,r1 ;3 280 r4 = r4 + r1 seems to be some table at r4 080710DC 6841 ldr r1,[r0,4h] ;10 290 load r1 with the word at [r0 + 4], [9F809F4] r1 = 80709B1 080710DE 1C20 mov r0,r4 ;3 293 r0 = r4 r0 = 201D0C4, which seems to be the start of our weird RAM table 080710E0 E009 b 80710F6h ;11 304 jump down to 710F6, we're about to start a loop it looks like 080710E2 1C28 mov r0,r5 ;3 307 **** save this for later? 080710E4 1C21 mov r1,r4 ;3 310 080710E6 F7FFFFE9 bl 80710BCh ;14 324 080710EA 69E1 ldr r1,[r4,1Ch] ;5 329 080710EC 3188 add r1,88h ;3 332 080710EE 2200 mov r2,0h ;3 335 080710F0 5E88 ldsh r0,[r1,r2] ;5 340 080710F2 1820 add r0,r4,r0 ;3 343 080710F4 6849 ldr r1,[r1,4h] ;10 353 080710F6 F020FC1F bl 8091938h ;14 367 08091938 4708 bx r1 ;11 302 goto the address in r1 and destroy brain cells in massive quantities again 080709B0 6AC0 ldr r0,[r0,2Ch] ;10 275 load r0 with the value at [r0 + 2C] not sure, this might be current character # r0 = 0 080709B2 4770 bx r14 ;11 286 return to the address in the LR and get back on track 080710FA 1C04 mov r4,r0 ;3 370 r4 now has the value we got from that function we just called r4 = 0 080710FC 2C00 cmp r4,0h ;3 373 080710FE D1F0 bne 80710E2h ;11 384 if r4 != 0, go back to 710E2 08071100 BC30 pop r4,r5 ;18 402 08071102 BC01 pop r0 ;12 414 08071104 4700 bx r0 ;11 425 080710B8 BC01 pop r0 ;12 316 080710BA 4700 bx r0 ;11 327 08068F56 E016 b 8068F86h ;11 871 this gets jumped to from 08068F0E during a comparison 08068F58 4640 mov r0,r8 ;3 874 08068F5A 6843 ldr r3,[r0,4h] ;10 884 08068F5C 1E69 sub r1,r5,1 ;3 887 08068F5E 468C mov r12,r1 ;3 890 08068F60 1E7E sub r6,r7,1 ;3 893 08068F62 429D cmp r5,r3 ;3 896 08068F64 DA0D bge 8068F82h ;11 907 08068F66 1C68 add r0,r5,1 ;3 910 08068F68 1A18 sub r0,r3,r0 ;3 913 08068F6A 1D14 add r4,r2,4 ;3 916 08068F6C 2800 cmp r0,0h ;3 919 08068F6E DD05 ble 8068F7Ch ;11 930 08068F70 1C01 mov r1,r0 ;3 933 08068F72 CC01 ldmia [r4]!,r0 ;12 945 08068F74 C201 stmia [r2]!,r0 ;13 958 08068F76 3901 sub r1,1h ;3 961 08068F78 2900 cmp r1,0h ;3 964 08068F7A D1FA bne 8068F72h ;11 975 08068F7C 1E58 sub r0,r3,1 ;3 978 08068F7E 4642 mov r2,r8 ;3 981 08068F80 6050 str r0,[r2,4h] ;13 994 08068F82 4665 mov r5,r12 ;3 997 08068F84 1C37 mov r7,r6 ;3 1000 we jumped here from earlier if we found an address in that RAM block 08068F86 3501 add r5,1h ;3 1003 r5++ 08068F88 42BD cmp r5,r7 ;3 1006 08068F8A DBBA blt 8068F02h ;11 1017 if r5 < r7, loop back to 68F02 not sure what r7 is, but it has 6 though r5 is less than r7 in this case, so we loop back a few more times 08068F8C 464B mov r3,r9 ;3 1020 r3 = r9 r3 = 2016330 08068F8E 8818 ldrh r0,[r3] ;5 1025 08068F90 3801 sub r0,1h ;3 1028 08068F92 8018 strh r0,[r3] ;6 1034 load the value there, subtract one, then store it back the value there was 1, it's now 0 08068F94 0400 lsl r0,r0,10h ;3 1037 shift r0 over 16 places (or multiply it by 65536) 08068F96 2800 cmp r0,0h ;3 1040 08068F98 DC0C bgt 8068FB4h ;11 1051 if r0 > 0, goto 68FB4 in this case, it's false 08068F9A 8859 ldrh r1,[r3,2h] ;5 1056 load the value in [r3 + 2], [2016332] r1 = 0 08068F9C 2001 mov r0,1h ;3 1059 08068F9E 4008 and r0,r1 ;3 1062 r0 = r1 & 1 this is basically doing a check with the first bit of this number 08068FA0 2800 cmp r0,0h ;3 1065 08068FA2 D007 beq 8068FB4h ;11 1076 if the first bit is off, then goto 68FB4 else: 08068FA4 69D9 ldr r1,[r3,1Ch] ;5 1081 *** CHECK THIS LATER! load an address stored at [r3 + 1C] 08068FA6 2208 mov r2,8h ;3 1084 08068FA8 5E88 ldsh r0,[r1,r2] ;9 1093 08068FAA 4448 add r0,r9 ;3 1096 08068FAC 68CA ldr r2,[r1,0Ch] ;5 1101 08068FAE 2103 mov r1,3h ;3 1104 08068FB0 F028FCC4 bl 809193Ch ;14 1118 yikes, it's calling itself here, please don't let this ever happen we jumped here from a comparison not too far back 08068FB4 B003 add sp,0Ch ;3 1121 undo our stack heightening that we did at the start of this function 08068FB6 BC38 pop r3-r5 ;24 1145 08068FB8 4698 mov r8,r3 ;3 1148 08068FBA 46A1 mov r9,r4 ;3 1151 08068FBC 46AA mov r10,r5 ;3 1154 08068FBE BCF0 pop r4-r7 ;30 1184 08068FC0 BC01 pop r0 ;12 1196 08068FC2 4700 bx r0 ;11 1207 0806A242 4648 mov r0,r9 ;3 720 r0 = r9 r0 = 9F44FF0 0806A244 9007 str r0,[sp,1Ch] ;6 726 store this at SP + 1C, which appears to be in our current struct 0806A246 4668 mov r0,r13 ;3 729 0806A248 2102 mov r1,2h ;3 732 r0 = SP and address of current struct? r1 = 2 0806A24A F7FEFBC3 bl 80689D4h ;14 746 080689D4 B5F0 push r4-r7,r14 ;37 511 080689D6 1C06 mov r6,r0 ;3 514 r6 now has the address of the current struct 080689D8 1C0F mov r7,r1 ;3 517 r7 now has 2 080689DA 4818 ldr r0,=09F7EAA8h ;12 529 080689DC 61F0 str r0,[r6,1Ch] ;6 535 store 9F7EAA8 in struct spot 1C 080689DE 1C30 mov r0,r6 ;3 538 r0 = struct address 080689E0 F000FB50 bl 8069084h ;14 552 08069084 B5F0 push r4-r7,r14 ;37 325 08069086 464F mov r7,r9 ;3 328 08069088 4646 mov r6,r8 ;3 331 0806908A B4C0 push r6,r7 ;19 350 0806908C B081 add sp,-4h ;3 353 allocate 4 bytes on the stack 0806908E 4681 mov r9,r0 ;3 356 08069090 2400 mov r4,0h ;3 359 08069092 4649 mov r1,r9 ;3 362 r9 = struct address r4 = 0 r1 = struct address 08069094 3110 add r1,10h ;3 365 r1 = struct address + 0x10 08069096 6848 ldr r0,[r1,4h] ;5 370 load r0 with [struct address + 0x14] the purpose of this value is currently unknown 08069098 4284 cmp r4,r0 ;3 373 0806909A DA38 bge 806910Eh ;11 384 compare 0 >= r0, goto 6910E in essence, if this is a negative number, do the following stuff this isn't a negative number in this case, so we jump to 6910E 0806909C 4688 mov r8,r1 ;3 387 *** DO THE REST OF THIS LATER r8 = struct address + 0x10 0806909E 00A0 lsl r0,r4,2h ;3 390 r0 = r4 * 4 080690A0 4642 mov r2,r8 ;3 393 r2 = struct address 080690A2 6891 ldr r1,[r2,8h] ;5 398 load r1 with [struct address + 8], purpose unknown, probably some address 080690A4 1809 add r1,r1,r0 ;3 401 080690A6 6809 ldr r1,[r1] ;5 406 080690A8 9100 str r1,[sp] ;6 412 080690AA 6808 ldr r0,[r1] ;5 417 080690AC 3004 add r0,4h ;3 420 080690AE 2300 mov r3,0h ;3 423 080690B0 6842 ldr r2,[r0,4h] ;5 428 080690B2 1C67 add r7,r4,1 ;3 431 080690B4 4293 cmp r3,r2 ;3 434 080690B6 DA0B bge 80690D0h ;11 445 080690B8 684C ldr r4,[r1,4h] ;5 450 080690BA 1C11 mov r1,r2 ;3 453 080690BC 6882 ldr r2,[r0,8h] ;5 458 080690BE 6810 ldr r0,[r2] ;5 463 080690C0 42A0 cmp r0,r4 ;3 466 080690C2 D101 bne 80690C8h ;11 477 080690C4 1D10 add r0,r2,4 ;3 480 080690C6 E004 b 80690D2h ;11 491 080690C8 3210 add r2,10h ;3 494 080690CA 3301 add r3,1h ;3 497 080690CC 428B cmp r3,r1 ;3 500 080690CE DBF6 blt 80690BEh ;11 511 080690D0 2000 mov r0,0h ;3 514 080690D2 2200 mov r2,0h ;3 517 080690D4 6843 ldr r3,[r0,4h] ;5 522 080690D6 6886 ldr r6,[r0,8h] ;5 527 080690D8 429A cmp r2,r3 ;3 530 080690DA DA0B bge 80690F4h ;11 541 080690DC 9D00 ldr r5,[sp] ;5 546 080690DE 1C1C mov r4,r3 ;3 549 080690E0 1C31 mov r1,r6 ;3 552 080690E2 6808 ldr r0,[r1] ;5 557 080690E4 42A8 cmp r0,r5 ;3 560 080690E6 D101 bne 80690ECh ;11 571 080690E8 1C10 mov r0,r2 ;3 574 080690EA E004 b 80690F6h ;11 585 080690EC 3104 add r1,4h ;3 588 080690EE 3201 add r2,1h ;3 591 080690F0 42A2 cmp r2,r4 ;3 594 080690F2 DBF6 blt 80690E2h ;11 605 080690F4 1C18 mov r0,r3 ;3 608 080690F6 0080 lsl r0,r0,2h ;3 611 080690F8 1830 add r0,r6,r0 ;3 614 080690FA 2100 mov r1,0h ;3 617 080690FC 6001 str r1,[r0] ;6 623 080690FE 9800 ldr r0,[sp] ;5 628 08069100 F7F4F96E bl 805D3E0h ;14 642 08069104 1C3C mov r4,r7 ;3 645 08069106 4641 mov r1,r8 ;3 648 08069108 6848 ldr r0,[r1,4h] ;5 653 0806910A 4284 cmp r4,r0 ;3 656 0806910C DBC7 blt 806909Eh ;11 667 loop back to 6909E if need be? we jumped here from near the start of this routine since [struct + 0x14] wasn't negative 0806910E 2000 mov r0,0h ;3 670 08069110 464A mov r2,r9 ;3 673 r0 = 0 r2 = r9, r2 = struct address 08069112 6150 str r0,[r2,14h] ;6 679 store 00 in [struct + 0x14], this might be helpful next time this routine's called? 08069114 B001 add sp,4h ;3 682 take those 4 bytes we allocated off the stack 08069116 BC18 pop r3,r4 ;6 688 08069118 4698 mov r8,r3 ;3 691 0806911A 46A1 mov r9,r4 ;3 694 0806911C BCF0 pop r4-r7 ;8 702 0806911E BC01 pop r0 ;5 707 08069120 4700 bx r0 ;11 718 080689E4 1C30 mov r0,r6 ;3 555 r0 = address of current struct 080689E6 F000FAED bl 8068FC4h ;14 569 08068FC4 B5F0 push r4-r7,r14 ;37 380 08068FC6 4657 mov r7,r10 ;3 383 08068FC8 464E mov r6,r9 ;3 386 08068FCA 4645 mov r5,r8 ;3 389 08068FCC B4E0 push r5-r7 ;25 414 08068FCE B083 add sp,-0Ch ;3 417 allocate 0C bytes on the stack 08068FD0 9001 str r0,[sp,4h] ;6 423 store the struct address on the new stack area 08068FD2 2300 mov r3,0h ;3 426 r3 = 0 08068FD4 1C01 mov r1,r0 ;3 429 08068FD6 3104 add r1,4h ;3 432 r1 = struct address + 4 08068FD8 6848 ldr r0,[r1,4h] ;5 437 load r0 with [struct address + 8] r0 = 00 08068FDA 4283 cmp r3,r0 ;3 440 08068FDC DA47 bge 806906Eh ;11 451 if 0 >= r0, goto 6906E in other words, if this is a negative number, goto 6906E 08068FDE 468A mov r10,r1 ;3 454 08068FE0 0118 lsl r0,r3,4h ;3 457 08068FE2 4652 mov r2,r10 ;3 460 08068FE4 6891 ldr r1,[r2,8h] ;5 465 08068FE6 1809 add r1,r1,r0 ;3 468 08068FE8 3104 add r1,4h ;3 471 08068FEA 4688 mov r8,r1 ;3 474 08068FEC 2200 mov r2,0h ;3 477 08068FEE 6848 ldr r0,[r1,4h] ;5 482 08068FF0 3301 add r3,1h ;3 485 08068FF2 9302 str r3,[sp,8h] ;6 491 08068FF4 4282 cmp r2,r0 ;3 494 08068FF6 DA35 bge 8069064h ;11 505 08068FF8 0091 lsl r1,r2,2h ;3 508 08068FFA 4643 mov r3,r8 ;3 511 08068FFC 6898 ldr r0,[r3,8h] ;5 516 08068FFE 1840 add r0,r0,r1 ;3 519 08069000 6800 ldr r0,[r0] ;5 524 08069002 9000 str r0,[sp] ;6 530 08069004 3201 add r2,1h ;3 533 08069006 4691 mov r9,r2 ;3 536 08069008 2800 cmp r0,0h ;3 539 0806900A D026 beq 806905Ah ;11 550 0806900C 6880 ldr r0,[r0,8h] ;5 555 0806900E 1C06 mov r6,r0 ;3 558 08069010 3610 add r6,10h ;3 561 08069012 466F mov r7,r13 ;3 564 08069014 2500 mov r5,0h ;3 567 08069016 6872 ldr r2,[r6,4h] ;5 572 08069018 4295 cmp r5,r2 ;3 575 0806901A DA1B bge 8069054h ;11 586 0806901C 68B0 ldr r0,[r6,8h] ;5 591 0806901E 1D04 add r4,r0,4 ;3 594 08069020 1C03 mov r3,r0 ;3 597 08069022 6819 ldr r1,[r3] ;5 602 08069024 6838 ldr r0,[r7] ;5 607 08069026 4281 cmp r1,r0 ;3 610 08069028 D10E bne 8069048h ;11 621 0806902A 1C68 add r0,r5,1 ;3 624 0806902C 1A10 sub r0,r2,r0 ;3 627 0806902E 1C19 mov r1,r3 ;3 630 08069030 6873 ldr r3,[r6,4h] ;5 635 08069032 2800 cmp r0,0h ;3 638 08069034 DD05 ble 8069042h ;11 649 08069036 1C02 mov r2,r0 ;3 652 08069038 CC01 ldmia [r4]!,r0 ;12 664 0806903A C101 stmia [r1]!,r0 ;6 670 0806903C 3A01 sub r2,1h ;3 673 0806903E 2A00 cmp r2,0h ;3 676 08069040 D1FA bne 8069038h ;11 687 08069042 1E58 sub r0,r3,1 ;3 690 08069044 6070 str r0,[r6,4h] ;6 696 08069046 E005 b 8069054h ;11 707 08069048 3404 add r4,4h ;3 710 0806904A 3304 add r3,4h ;3 713 0806904C 3501 add r5,1h ;3 716 0806904E 6872 ldr r2,[r6,4h] ;5 721 08069050 4295 cmp r5,r2 ;3 724 08069052 DBE6 blt 8069022h ;11 735 08069054 9800 ldr r0,[sp] ;5 740 08069056 F7F4F9C3 bl 805D3E0h ;14 754 0806905A 464A mov r2,r9 ;3 757 0806905C 4641 mov r1,r8 ;3 760 0806905E 6848 ldr r0,[r1,4h] ;5 765 08069060 4282 cmp r2,r0 ;3 768 08069062 DBC9 blt 8068FF8h ;11 779 08069064 9B02 ldr r3,[sp,8h] ;5 784 08069066 4652 mov r2,r10 ;3 787 08069068 6850 ldr r0,[r2,4h] ;5 792 0806906A 4283 cmp r3,r0 ;3 795 0806906C DBB8 blt 8068FE0h ;11 806 we jumped here from way up at the start of the routine if [struct + 8] wasn't negative 0806906E 2000 mov r0,0h ;3 809 r0 = 0 08069070 9B01 ldr r3,[sp,4h] ;5 814 load r3 with the struct address, which we put on the stack earlier 08069072 6098 str r0,[r3,8h] ;6 820 store 00000000 at [struct + 8], whose purpose is still unknown 08069074 B003 add sp,0Ch ;3 823 move the SP back to its previous position 08069076 BC38 pop r3-r5 ;7 830 08069078 4698 mov r8,r3 ;3 833 0806907A 46A1 mov r9,r4 ;3 836 0806907C 46AA mov r10,r5 ;3 839 0806907E BCF0 pop r4-r7 ;8 847 08069080 BC01 pop r0 ;5 852 08069082 4700 bx r0 ;11 863 080689EA 69B0 ldr r0,[r6,18h] ;5 574 load r0 with [struct + 0x18], which has an EWRAM pointer r0 = 00000000 in this case 080689EC 2800 cmp r0,0h ;3 577 080689EE D001 beq 80689F4h ;11 588 if r0 == 0, goto 689F4 else do this subroutine: 080689F0 F7F4FD00 bl 805D3F4h ;14 602 we jumped here if [struct + 0x18] was 00 080689F4 1D35 add r5,r6,4 ;3 605 r5 = struct address + 4 080689F6 2000 mov r0,0h ;3 608 080689F8 6068 str r0,[r5,4h] ;11 619 store 00000000 in [struct + 8], [3006BD4] 080689FA 68A9 ldr r1,[r5,8h] ;10 629 load r1 with [struct + 0xC], purpose unknown r1 = 00 080689FC 2900 cmp r1,0h ;3 632 080689FE D012 beq 8068A26h ;11 643 if r1 == 0, goto 68A26 in this case, it IS 0, so we make the jump else: 08068A00 1F08 sub r0,r1,4 ;3 646 08068A02 6800 ldr r0,[r0] ;5 651 08068A04 0100 lsl r0,r0,4h ;3 654 08068A06 180C add r4,r1,r0 ;3 657 08068A08 42A1 cmp r1,r4 ;3 660 08068A0A D008 beq 8068A1Eh ;11 671 08068A0C 3C10 sub r4,10h ;3 674 08068A0E 68E0 ldr r0,[r4,0Ch] ;12 686 08068A10 2800 cmp r0,0h ;3 689 08068A12 D001 beq 8068A18h ;11 700 08068A14 F7F4FCEE bl 805D3F4h ;14 714 08068A18 68A8 ldr r0,[r5,8h] ;10 724 08068A1A 42A0 cmp r0,r4 ;3 727 08068A1C D1F6 bne 8068A0Ch ;11 738 08068A1E 68A8 ldr r0,[r5,8h] ;10 748 08068A20 3804 sub r0,4h ;3 751 08068A22 F7F4FCE7 bl 805D3F4h ;14 765 we jumped here from a comparison not too long ago, if [struct + 0xC] == 0 08068A26 2001 mov r0,1h ;3 768 08068A28 4038 and r0,r7 ;3 771 r0 = r7 & 1 in this case, r7 is 2 thus r0 = 00 08068A2A 2800 cmp r0,0h ;3 774 08068A2C D002 beq 8068A34h ;11 785 if r0 = 0, goto 68AE34 and exit the routine else do this subroutine: 08068A2E 1C30 mov r0,r6 ;3 788 08068A30 F7F4FCD6 bl 805D3E0h ;14 802 08068A34 BCF0 pop r4-r7 ;30 832 08068A36 BC01 pop r0 ;12 844 08068A38 4700 bx r0 ;11 855 0806A24E 69FC ldr r4,[r7,1Ch] ;5 751 load r4 with [r7 + 0x1C], [2016330 + 1C] r4 = 9F7EBA0 0806A250 3450 add r4,50h ;3 754 r4 += 0x50 r4 = 9F7EBF0 0806A252 2000 mov r0,0h ;3 757 0806A254 5E25 ldsh r5,[r4,r0] ;7 764 load r5 with the halfword at [r4] r5 = 00 0806A256 197D add r5,r7,r5 ;3 767 r5 = r7 + r5 r5 = 2016330 + 00 r5 = 2016330 0806A258 1C38 mov r0,r7 ;3 770 r0 = 2016330, some important RAM address 0806A25A F000F89B bl 806A394h ;14 784 0806A394 6A00 ldr r0,[r0,20h] ;10 627 0806A396 4770 bx r14 ;11 638 This function seems to be a function attached to a struct of some sort, or maybe just an actual class if they used C++? anyways, load r0 with [r0 + 0x20] and return in this case, r0 gets returned with 2D1, which sounds familiar. Who knows WTF this is for though 0806A25E 1C06 mov r6,r0 ;3 787 r6 = r0, which has the return value of the function we just called 0806A260 4668 mov r0,r13 ;3 790 r0 = SP, which is also the current struct's address 0806A262 F7FEFBA7 bl 80689B4h ;14 804 080689B4 4906 ldr r1,=09F7EAA8h ;12 387 080689B6 61C1 str r1,[r0,1Ch] ;6 393 store 9F7EAA8 at [struct + 1C] 080689B8 1D02 add r2,r0,4 ;3 396 r2 = current struct address + 4 080689BA 2100 mov r1,0h ;3 399 080689BC 6041 str r1,[r0,4h] ;6 405 080689BE 6051 str r1,[r2,4h] ;6 411 080689C0 6091 str r1,[r2,8h] ;6 417 080689C2 320C add r2,0Ch ;3 420 080689C4 6101 str r1,[r0,10h] ;6 426 080689C6 6051 str r1,[r2,4h] ;6 432 080689C8 6091 str r1,[r2,8h] ;6 438 080689CA 8001 strh r1,[r0] ;6 444 080689CC 8041 strh r1,[r0,2h] ;6 450 these entries in the current struct get set to 0 now struct.0 halfword struct.2 halfword struct.04 word struct.08 word struct.0C word struct.10 word struct.14 word struct.18 word too bad their importance/use is unknown :( 080689CE 4770 bx r14 ;11 461 so basically, this resets a bunch of data in this struct 0806A266 4846 ldr r0,=09F7ED20h ;12 816 0806A268 9007 str r0,[sp,1Ch] ;6 822 store 9F7ED20 in [struct + 1C], even though we already just set it to something? 0806A26A 9608 str r6,[sp,20h] ;6 828 load r6, which has 2D1 here, in [struct + 0x20] 0806A26C 6862 ldr r2,[r4,4h] ;5 833 load r2 with [r4 + 4], [9F7EBF4] r2 = 8068EA1 Oh god not again 0806A26E 1C28 mov r0,r5 ;3 836 r0 = r5, r0 = 2016330 0806A270 4669 mov r1,r13 ;3 839 r1 = SP and current struct address 0806A272 F027FB63 bl 809193Ch ;14 853 0809193C 4710 bx r2 ;11 392 BARF, going to that giant 68EA0 routine again :( 08068EA0 B5F0 push r4-r7,r14 ;37 372 **** STOPPED HERE FOR NOW ARGH 08068EA2 4657 mov r7,r10 ;3 375 08068EA4 464E mov r6,r9 ;3 378 08068EA6 4645 mov r5,r8 ;3 381 08068EA8 B4E0 push r5-r7 ;25 406 08068EAA B083 add sp,-0Ch ;3 409 08068EAC 4681 mov r9,r0 ;3 412 08068EAE 468A mov r10,r1 ;3 415 08068EB0 69C9 ldr r1,[r1,1Ch] ;5 420 08068EB2 2210 mov r2,10h ;3 423 08068EB4 5E88 ldsh r0,[r1,r2] ;9 432 08068EB6 4450 add r0,r10 ;3 435 08068EB8 6949 ldr r1,[r1,14h] ;5 440 08068EBA F028FD3D bl 8091938h ;14 454 08091938 4708 bx r1 ;11 400 Jump to the value in r1 AAAAAAAAAAAARGH **** follow later 08068EBE 1C03 mov r3,r0 ;3 457 08068EC0 9300 str r3,[sp] ;6 463 08068EC2 4648 mov r0,r9 ;3 466 08068EC4 3004 add r0,4h ;3 469 08068EC6 2200 mov r2,0h ;3 472 08068EC8 6841 ldr r1,[r0,4h] ;10 482 08068ECA 428A cmp r2,r1 ;3 485 08068ECC DA0C bge 8068EE8h ;11 496 08068ECE 1C1C mov r4,r3 ;3 499 08068ED0 1C0B mov r3,r1 ;3 502 08068ED2 6881 ldr r1,[r0,8h] ;10 512 08068ED4 6808 ldr r0,[r1] ;5 517 08068ED6 42A0 cmp r0,r4 ;3 520 08068ED8 D102 bne 8068EE0h ;11 531 08068EDA 3104 add r1,4h ;3 534 08068EDC 4688 mov r8,r1 ;3 537 08068EDE E005 b 8068EECh ;11 548 08068EE0 3110 add r1,10h ;3 551 08068EE2 3201 add r2,1h ;3 554 08068EE4 429A cmp r2,r3 ;3 557 08068EE6 DBF5 blt 8068ED4h ;11 568 08068EE8 2300 mov r3,0h ;3 571 08068EEA 4698 mov r8,r3 ;3 574 08068EEC 4640 mov r0,r8 ;3 577 08068EEE 2800 cmp r0,0h ;3 580 08068EF0 D060 beq 8068FB4h ;11 591 08068EF2 6847 ldr r7,[r0,4h] ;10 601 08068EF4 4649 mov r1,r9 ;3 604 08068EF6 8808 ldrh r0,[r1] ;5 609 08068EF8 3001 add r0,1h ;3 612 08068EFA 8008 strh r0,[r1] ;6 618 08068EFC 2500 mov r5,0h ;3 621 08068EFE 42BD cmp r5,r7 ;3 624 08068F00 DA44 bge 8068F8Ch ;11 635 08068F02 00A9 lsl r1,r5,2h ;3 638 08068F04 4642 mov r2,r8 ;3 641 08068F06 6890 ldr r0,[r2,8h] ;12 653 08068F08 1842 add r2,r0,r1 ;3 656 08068F0A 6813 ldr r3,[r2] ;12 668 08068F0C 2B00 cmp r3,0h ;3 671 08068F0E D023 beq 8068F58h ;11 682 08068F10 200E mov r0,0Eh ;3 685 08068F12 5E1C ldsh r4,[r3,r0] ;5 690 08068F14 2C00 cmp r4,0h ;3 693 08068F16 DD0E ble 8068F36h ;11 704 08068F18 2110 mov r1,10h ;3 707 08068F1A 5E58 ldsh r0,[r3,r1] ;5 712 08068F1C 689A ldr r2,[r3,8h] ;5 717 08068F1E 1810 add r0,r2,r0 ;3 720 08068F20 6801 ldr r1,[r0] ;10 730 08068F22 00E0 lsl r0,r4,3h ;3 733 08068F24 1840 add r0,r0,r1 ;3 736 08068F26 1C06 mov r6,r0 ;3 739 08068F28 3E08 sub r6,8h ;3 742 08068F2A 6830 ldr r0,[r6] ;5 747 08068F2C 6871 ldr r1,[r6,4h] ;5 752 08068F2E 9001 str r0,[sp,4h] ;6 758 08068F30 9102 str r1,[sp,8h] ;6 764 08068F32 9E02 ldr r6,[sp,8h] ;5 769 08068F34 E001 b 8068F3Ah ;11 780 08068F36 691E ldr r6,[r3,10h] ;5 785 08068F38 689A ldr r2,[r3,8h] ;5 790 08068F3A 200C mov r0,0Ch ;3 793 08068F3C 5E19 ldsh r1,[r3,r0] ;5 798 08068F3E 2C00 cmp r4,0h ;3 801 08068F40 DD04 ble 8068F4Ch ;11 812 08068F42 9B01 ldr r3,[sp,4h] ;5 817 08068F44 0418 lsl r0,r3,10h ;3 820 08068F46 1400 asr r0,r0,10h ;3 823 08068F48 1840 add r0,r0,r1 ;3 826 08068F4A E000 b 8068F4Eh ;11 837 08068F4C 1C08 mov r0,r1 ;3 840 08068F4E 1810 add r0,r2,r0 ;3 843 08068F50 4651 mov r1,r10 ;3 846 08068F52 F028FCFB bl 809194Ch ;14 860 0809194C 4730 bx r6 ;11 280 jump to the address at r6, BLARGH *** FOLLOW LATER 08068F56 E016 b 8068F86h ;11 871 08068F58 4640 mov r0,r8 ;3 874 08068F5A 6843 ldr r3,[r0,4h] ;10 884 08068F5C 1E69 sub r1,r5,1 ;3 887 08068F5E 468C mov r12,r1 ;3 890 08068F60 1E7E sub r6,r7,1 ;3 893 08068F62 429D cmp r5,r3 ;3 896 08068F64 DA0D bge 8068F82h ;11 907 08068F66 1C68 add r0,r5,1 ;3 910 08068F68 1A18 sub r0,r3,r0 ;3 913 08068F6A 1D14 add r4,r2,4 ;3 916 08068F6C 2800 cmp r0,0h ;3 919 08068F6E DD05 ble 8068F7Ch ;11 930 08068F70 1C01 mov r1,r0 ;3 933 08068F72 CC01 ldmia [r4]!,r0 ;12 945 08068F74 C201 stmia [r2]!,r0 ;13 958 08068F76 3901 sub r1,1h ;3 961 08068F78 2900 cmp r1,0h ;3 964 08068F7A D1FA bne 8068F72h ;11 975 08068F7C 1E58 sub r0,r3,1 ;3 978 08068F7E 4642 mov r2,r8 ;3 981 08068F80 6050 str r0,[r2,4h] ;13 994 08068F82 4665 mov r5,r12 ;3 997 08068F84 1C37 mov r7,r6 ;3 1000 08068F86 3501 add r5,1h ;3 1003 08068F88 42BD cmp r5,r7 ;3 1006 08068F8A DBBA blt 8068F02h ;11 1017 08068F8C 464B mov r3,r9 ;3 1020 08068F8E 8818 ldrh r0,[r3] ;5 1025 08068F90 3801 sub r0,1h ;3 1028 08068F92 8018 strh r0,[r3] ;6 1034 08068F94 0400 lsl r0,r0,10h ;3 1037 08068F96 2800 cmp r0,0h ;3 1040 08068F98 DC0C bgt 8068FB4h ;11 1051 08068F9A 8859 ldrh r1,[r3,2h] ;5 1056 08068F9C 2001 mov r0,1h ;3 1059 08068F9E 4008 and r0,r1 ;3 1062 08068FA0 2800 cmp r0,0h ;3 1065 08068FA2 D007 beq 8068FB4h ;11 1076 08068FA4 69D9 ldr r1,[r3,1Ch] ;5 1081 08068FA6 2208 mov r2,8h ;3 1084 08068FA8 5E88 ldsh r0,[r1,r2] ;9 1093 08068FAA 4448 add r0,r9 ;3 1096 08068FAC 68CA ldr r2,[r1,0Ch] ;5 1101 08068FAE 2103 mov r1,3h ;3 1104 08068FB0 F028FCC4 bl 809193Ch ;14 1118 0809193C 4710 bx r2 ;11 392 Branch to the address in r2 bleh *** FOLLOW LATER 08068FB4 B003 add sp,0Ch ;3 1121 08068FB6 BC38 pop r3-r5 ;24 1145 08068FB8 4698 mov r8,r3 ;3 1148 08068FBA 46A1 mov r9,r4 ;3 1151 08068FBC 46AA mov r10,r5 ;3 1154 08068FBE BCF0 pop r4-r7 ;30 1184 08068FC0 BC01 pop r0 ;12 1196 08068FC2 4700 bx r0 ;11 1207 0806A276 4648 mov r0,r9 ;3 856 0806A278 9007 str r0,[sp,1Ch] ;6 862 0806A27A 4668 mov r0,r13 ;3 865 0806A27C 2102 mov r1,2h ;3 868 0806A27E F7FEFBA9 bl 80689D4h ;14 882 NOTE: We've gone through this routine before, too 080689D4 B5F0 push r4-r7,r14 ;37 511 080689D6 1C06 mov r6,r0 ;3 514 080689D8 1C0F mov r7,r1 ;3 517 080689DA 4818 ldr r0,=09F7EAA8h ;12 529 080689DC 61F0 str r0,[r6,1Ch] ;6 535 080689DE 1C30 mov r0,r6 ;3 538 080689E0 F000FB50 bl 8069084h ;14 552 080689E4 1C30 mov r0,r6 ;3 555 080689E6 F000FAED bl 8068FC4h ;14 569 080689EA 69B0 ldr r0,[r6,18h] ;5 574 080689EC 2800 cmp r0,0h ;3 577 080689EE D001 beq 80689F4h ;11 588 080689F0 F7F4FD00 bl 805D3F4h ;14 602 080689F4 1D35 add r5,r6,4 ;3 605 080689F6 2000 mov r0,0h ;3 608 080689F8 6068 str r0,[r5,4h] ;11 619 080689FA 68A9 ldr r1,[r5,8h] ;10 629 080689FC 2900 cmp r1,0h ;3 632 080689FE D012 beq 8068A26h ;11 643 08068A00 1F08 sub r0,r1,4 ;3 646 08068A02 6800 ldr r0,[r0] ;5 651 08068A04 0100 lsl r0,r0,4h ;3 654 08068A06 180C add r4,r1,r0 ;3 657 08068A08 42A1 cmp r1,r4 ;3 660 08068A0A D008 beq 8068A1Eh ;11 671 08068A0C 3C10 sub r4,10h ;3 674 08068A0E 68E0 ldr r0,[r4,0Ch] ;12 686 08068A10 2800 cmp r0,0h ;3 689 08068A12 D001 beq 8068A18h ;11 700 08068A14 F7F4FCEE bl 805D3F4h ;14 714 08068A18 68A8 ldr r0,[r5,8h] ;10 724 08068A1A 42A0 cmp r0,r4 ;3 727 08068A1C D1F6 bne 8068A0Ch ;11 738 08068A1E 68A8 ldr r0,[r5,8h] ;10 748 08068A20 3804 sub r0,4h ;3 751 08068A22 F7F4FCE7 bl 805D3F4h ;14 765 08068A26 2001 mov r0,1h ;3 768 08068A28 4038 and r0,r7 ;3 771 08068A2A 2800 cmp r0,0h ;3 774 08068A2C D002 beq 8068A34h ;11 785 08068A2E 1C30 mov r0,r6 ;3 788 08068A30 F7F4FCD6 bl 805D3E0h ;14 802 08068A34 BCF0 pop r4-r7 ;30 832 08068A36 BC01 pop r0 ;12 844 08068A38 4700 bx r0 ;11 855 0806A282 69FC ldr r4,[r7,1Ch] ;5 887 0806A284 3450 add r4,50h ;3 890 0806A286 2000 mov r0,0h ;3 893 0806A288 5E25 ldsh r5,[r4,r0] ;7 900 0806A28A 197D add r5,r7,r5 ;3 903 0806A28C 1C38 mov r0,r7 ;3 906 0806A28E F000F881 bl 806A394h ;14 920 0806A292 1C06 mov r6,r0 ;3 923 0806A294 4668 mov r0,r13 ;3 926 0806A296 F7FEFB8D bl 80689B4h ;14 940 0806A29A 483A ldr r0,=09F7ECA0h ;12 952 0806A29C 9007 str r0,[sp,1Ch] ;6 958 0806A29E 9608 str r6,[sp,20h] ;6 964 0806A2A0 6862 ldr r2,[r4,4h] ;5 969 0806A2A2 1C28 mov r0,r5 ;3 972 0806A2A4 4669 mov r1,r13 ;3 975 0806A2A6 F027FB49 bl 809193Ch ;14 989 08068EA0 B5F0 push r4-r7,r14 ;37 372 08068EA2 4657 mov r7,r10 ;3 375 08068EA4 464E mov r6,r9 ;3 378 08068EA6 4645 mov r5,r8 ;3 381 08068EA8 B4E0 push r5-r7 ;25 406 08068EAA B083 add sp,-0Ch ;3 409 08068EAC 4681 mov r9,r0 ;3 412 08068EAE 468A mov r10,r1 ;3 415 08068EB0 69C9 ldr r1,[r1,1Ch] ;5 420 08068EB2 2210 mov r2,10h ;3 423 08068EB4 5E88 ldsh r0,[r1,r2] ;9 432 08068EB6 4450 add r0,r10 ;3 435 08068EB8 6949 ldr r1,[r1,14h] ;5 440 08068EBA F028FD3D bl 8091938h ;14 454 08068EBE 1C03 mov r3,r0 ;3 457 08068EC0 9300 str r3,[sp] ;6 463 08068EC2 4648 mov r0,r9 ;3 466 08068EC4 3004 add r0,4h ;3 469 08068EC6 2200 mov r2,0h ;3 472 08068EC8 6841 ldr r1,[r0,4h] ;10 482 08068ECA 428A cmp r2,r1 ;3 485 08068ECC DA0C bge 8068EE8h ;11 496 08068ECE 1C1C mov r4,r3 ;3 499 08068ED0 1C0B mov r3,r1 ;3 502 08068ED2 6881 ldr r1,[r0,8h] ;10 512 08068ED4 6808 ldr r0,[r1] ;5 517 08068ED6 42A0 cmp r0,r4 ;3 520 08068ED8 D102 bne 8068EE0h ;11 531 08068EDA 3104 add r1,4h ;3 534 08068EDC 4688 mov r8,r1 ;3 537 08068EDE E005 b 8068EECh ;11 548 08068EE0 3110 add r1,10h ;3 551 08068EE2 3201 add r2,1h ;3 554 08068EE4 429A cmp r2,r3 ;3 557 08068EE6 DBF5 blt 8068ED4h ;11 568 08068EE8 2300 mov r3,0h ;3 571 08068EEA 4698 mov r8,r3 ;3 574 08068EEC 4640 mov r0,r8 ;3 577 08068EEE 2800 cmp r0,0h ;3 580 08068EF0 D060 beq 8068FB4h ;11 591 08068EF2 6847 ldr r7,[r0,4h] ;10 601 08068EF4 4649 mov r1,r9 ;3 604 08068EF6 8808 ldrh r0,[r1] ;5 609 08068EF8 3001 add r0,1h ;3 612 08068EFA 8008 strh r0,[r1] ;6 618 08068EFC 2500 mov r5,0h ;3 621 08068EFE 42BD cmp r5,r7 ;3 624 08068F00 DA44 bge 8068F8Ch ;11 635 08068F02 00A9 lsl r1,r5,2h ;3 638 08068F04 4642 mov r2,r8 ;3 641 08068F06 6890 ldr r0,[r2,8h] ;12 653 08068F08 1842 add r2,r0,r1 ;3 656 08068F0A 6813 ldr r3,[r2] ;12 668 08068F0C 2B00 cmp r3,0h ;3 671 08068F0E D023 beq 8068F58h ;11 682 08068F10 200E mov r0,0Eh ;3 685 08068F12 5E1C ldsh r4,[r3,r0] ;5 690 08068F14 2C00 cmp r4,0h ;3 693 08068F16 DD0E ble 8068F36h ;11 704 08068F18 2110 mov r1,10h ;3 707 08068F1A 5E58 ldsh r0,[r3,r1] ;5 712 08068F1C 689A ldr r2,[r3,8h] ;5 717 08068F1E 1810 add r0,r2,r0 ;3 720 08068F20 6801 ldr r1,[r0] ;10 730 08068F22 00E0 lsl r0,r4,3h ;3 733 08068F24 1840 add r0,r0,r1 ;3 736 08068F26 1C06 mov r6,r0 ;3 739 08068F28 3E08 sub r6,8h ;3 742 08068F2A 6830 ldr r0,[r6] ;5 747 08068F2C 6871 ldr r1,[r6,4h] ;5 752 08068F2E 9001 str r0,[sp,4h] ;6 758 08068F30 9102 str r1,[sp,8h] ;6 764 08068F32 9E02 ldr r6,[sp,8h] ;5 769 08068F34 E001 b 8068F3Ah ;11 780 08068F36 691E ldr r6,[r3,10h] ;5 785 08068F38 689A ldr r2,[r3,8h] ;5 790 08068F3A 200C mov r0,0Ch ;3 793 08068F3C 5E19 ldsh r1,[r3,r0] ;5 798 08068F3E 2C00 cmp r4,0h ;3 801 08068F40 DD04 ble 8068F4Ch ;11 812 08068F42 9B01 ldr r3,[sp,4h] ;5 817 08068F44 0418 lsl r0,r3,10h ;3 820 08068F46 1400 asr r0,r0,10h ;3 823 08068F48 1840 add r0,r0,r1 ;3 826 08068F4A E000 b 8068F4Eh ;11 837 08068F4C 1C08 mov r0,r1 ;3 840 08068F4E 1810 add r0,r2,r0 ;3 843 08068F50 4651 mov r1,r10 ;3 846 08068F52 F028FCFB bl 809194Ch ;14 860 08068F56 E016 b 8068F86h ;11 871 08068F58 4640 mov r0,r8 ;3 874 08068F5A 6843 ldr r3,[r0,4h] ;10 884 08068F5C 1E69 sub r1,r5,1 ;3 887 08068F5E 468C mov r12,r1 ;3 890 08068F60 1E7E sub r6,r7,1 ;3 893 08068F62 429D cmp r5,r3 ;3 896 08068F64 DA0D bge 8068F82h ;11 907 08068F66 1C68 add r0,r5,1 ;3 910 08068F68 1A18 sub r0,r3,r0 ;3 913 08068F6A 1D14 add r4,r2,4 ;3 916 08068F6C 2800 cmp r0,0h ;3 919 08068F6E DD05 ble 8068F7Ch ;11 930 08068F70 1C01 mov r1,r0 ;3 933 08068F72 CC01 ldmia [r4]!,r0 ;12 945 08068F74 C201 stmia [r2]!,r0 ;13 958 08068F76 3901 sub r1,1h ;3 961 08068F78 2900 cmp r1,0h ;3 964 08068F7A D1FA bne 8068F72h ;11 975 08068F7C 1E58 sub r0,r3,1 ;3 978 08068F7E 4642 mov r2,r8 ;3 981 08068F80 6050 str r0,[r2,4h] ;13 994 08068F82 4665 mov r5,r12 ;3 997 08068F84 1C37 mov r7,r6 ;3 1000 08068F86 3501 add r5,1h ;3 1003 08068F88 42BD cmp r5,r7 ;3 1006 08068F8A DBBA blt 8068F02h ;11 1017 08068F8C 464B mov r3,r9 ;3 1020 08068F8E 8818 ldrh r0,[r3] ;5 1025 08068F90 3801 sub r0,1h ;3 1028 08068F92 8018 strh r0,[r3] ;6 1034 08068F94 0400 lsl r0,r0,10h ;3 1037 08068F96 2800 cmp r0,0h ;3 1040 08068F98 DC0C bgt 8068FB4h ;11 1051 08068F9A 8859 ldrh r1,[r3,2h] ;5 1056 08068F9C 2001 mov r0,1h ;3 1059 08068F9E 4008 and r0,r1 ;3 1062 08068FA0 2800 cmp r0,0h ;3 1065 08068FA2 D007 beq 8068FB4h ;11 1076 08068FA4 69D9 ldr r1,[r3,1Ch] ;5 1081 08068FA6 2208 mov r2,8h ;3 1084 08068FA8 5E88 ldsh r0,[r1,r2] ;9 1093 08068FAA 4448 add r0,r9 ;3 1096 08068FAC 68CA ldr r2,[r1,0Ch] ;5 1101 08068FAE 2103 mov r1,3h ;3 1104 08068FB0 F028FCC4 bl 809193Ch ;14 1118 08068FB4 B003 add sp,0Ch ;3 1121 08068FB6 BC38 pop r3-r5 ;24 1145 08068FB8 4698 mov r8,r3 ;3 1148 08068FBA 46A1 mov r9,r4 ;3 1151 08068FBC 46AA mov r10,r5 ;3 1154 08068FBE BCF0 pop r4-r7 ;30 1184 08068FC0 BC01 pop r0 ;12 1196 08068FC2 4700 bx r0 ;11 1207 0806A2AA 4648 mov r0,r9 ;3 992 0806A2AC 9007 str r0,[sp,1Ch] ;6 998 0806A2AE 4668 mov r0,r13 ;3 1001 0806A2B0 2102 mov r1,2h ;3 1004 0806A2B2 F7FEFB8F bl 80689D4h ;14 1018 NOTE: We've gone through this routine before a few times 080689D4 B5F0 push r4-r7,r14 ;37 511 080689D6 1C06 mov r6,r0 ;3 514 080689D8 1C0F mov r7,r1 ;3 517 080689DA 4818 ldr r0,=09F7EAA8h ;12 529 080689DC 61F0 str r0,[r6,1Ch] ;6 535 080689DE 1C30 mov r0,r6 ;3 538 080689E0 F000FB50 bl 8069084h ;14 552 080689E4 1C30 mov r0,r6 ;3 555 080689E6 F000FAED bl 8068FC4h ;14 569 080689EA 69B0 ldr r0,[r6,18h] ;5 574 080689EC 2800 cmp r0,0h ;3 577 080689EE D001 beq 80689F4h ;11 588 080689F0 F7F4FD00 bl 805D3F4h ;14 602 080689F4 1D35 add r5,r6,4 ;3 605 080689F6 2000 mov r0,0h ;3 608 080689F8 6068 str r0,[r5,4h] ;11 619 080689FA 68A9 ldr r1,[r5,8h] ;10 629 080689FC 2900 cmp r1,0h ;3 632 080689FE D012 beq 8068A26h ;11 643 08068A00 1F08 sub r0,r1,4 ;3 646 08068A02 6800 ldr r0,[r0] ;5 651 08068A04 0100 lsl r0,r0,4h ;3 654 08068A06 180C add r4,r1,r0 ;3 657 08068A08 42A1 cmp r1,r4 ;3 660 08068A0A D008 beq 8068A1Eh ;11 671 08068A0C 3C10 sub r4,10h ;3 674 08068A0E 68E0 ldr r0,[r4,0Ch] ;12 686 08068A10 2800 cmp r0,0h ;3 689 08068A12 D001 beq 8068A18h ;11 700 08068A14 F7F4FCEE bl 805D3F4h ;14 714 08068A18 68A8 ldr r0,[r5,8h] ;10 724 08068A1A 42A0 cmp r0,r4 ;3 727 08068A1C D1F6 bne 8068A0Ch ;11 738 08068A1E 68A8 ldr r0,[r5,8h] ;10 748 08068A20 3804 sub r0,4h ;3 751 08068A22 F7F4FCE7 bl 805D3F4h ;14 765 08068A26 2001 mov r0,1h ;3 768 08068A28 4038 and r0,r7 ;3 771 08068A2A 2800 cmp r0,0h ;3 774 08068A2C D002 beq 8068A34h ;11 785 08068A2E 1C30 mov r0,r6 ;3 788 08068A30 F7F4FCD6 bl 805D3E0h ;14 802 08068A34 BCF0 pop r4-r7 ;30 832 08068A36 BC01 pop r0 ;12 844 08068A38 4700 bx r0 ;11 855 0806A2B6 69FC ldr r4,[r7,1Ch] ;5 1023 0806A2B8 3450 add r4,50h ;3 1026 0806A2BA 2000 mov r0,0h ;3 1029 0806A2BC 5E25 ldsh r5,[r4,r0] ;7 1036 0806A2BE 197D add r5,r7,r5 ;3 1039 0806A2C0 1C38 mov r0,r7 ;3 1042 0806A2C2 F000F867 bl 806A394h ;14 1056 0806A2C6 1C06 mov r6,r0 ;3 1059 0806A2C8 4668 mov r0,r13 ;3 1062 0806A2CA F7FEFB73 bl 80689B4h ;14 1076 0806A2CE 482E ldr r0,=09F7EC20h ;12 1088 0806A2D0 9007 str r0,[sp,1Ch] ;6 1094 0806A2D2 9608 str r6,[sp,20h] ;6 1100 0806A2D4 6862 ldr r2,[r4,4h] ;5 1105 0806A2D6 1C28 mov r0,r5 ;3 1108 0806A2D8 4669 mov r1,r13 ;3 1111 0806A2DA F027FB2F bl 809193Ch ;14 1125 08068EA0 B5F0 push r4-r7,r14 ;37 372 08068EA2 4657 mov r7,r10 ;3 375 08068EA4 464E mov r6,r9 ;3 378 08068EA6 4645 mov r5,r8 ;3 381 08068EA8 B4E0 push r5-r7 ;25 406 08068EAA B083 add sp,-0Ch ;3 409 08068EAC 4681 mov r9,r0 ;3 412 08068EAE 468A mov r10,r1 ;3 415 08068EB0 69C9 ldr r1,[r1,1Ch] ;5 420 08068EB2 2210 mov r2,10h ;3 423 08068EB4 5E88 ldsh r0,[r1,r2] ;9 432 08068EB6 4450 add r0,r10 ;3 435 08068EB8 6949 ldr r1,[r1,14h] ;5 440 08068EBA F028FD3D bl 8091938h ;14 454 08068EBE 1C03 mov r3,r0 ;3 457 08068EC0 9300 str r3,[sp] ;6 463 08068EC2 4648 mov r0,r9 ;3 466 08068EC4 3004 add r0,4h ;3 469 08068EC6 2200 mov r2,0h ;3 472 08068EC8 6841 ldr r1,[r0,4h] ;10 482 08068ECA 428A cmp r2,r1 ;3 485 08068ECC DA0C bge 8068EE8h ;11 496 08068ECE 1C1C mov r4,r3 ;3 499 08068ED0 1C0B mov r3,r1 ;3 502 08068ED2 6881 ldr r1,[r0,8h] ;10 512 08068ED4 6808 ldr r0,[r1] ;5 517 08068ED6 42A0 cmp r0,r4 ;3 520 08068ED8 D102 bne 8068EE0h ;11 531 08068EDA 3104 add r1,4h ;3 534 08068EDC 4688 mov r8,r1 ;3 537 08068EDE E005 b 8068EECh ;11 548 08068EE0 3110 add r1,10h ;3 551 08068EE2 3201 add r2,1h ;3 554 08068EE4 429A cmp r2,r3 ;3 557 08068EE6 DBF5 blt 8068ED4h ;11 568 08068EE8 2300 mov r3,0h ;3 571 08068EEA 4698 mov r8,r3 ;3 574 08068EEC 4640 mov r0,r8 ;3 577 08068EEE 2800 cmp r0,0h ;3 580 08068EF0 D060 beq 8068FB4h ;11 591 08068EF2 6847 ldr r7,[r0,4h] ;10 601 08068EF4 4649 mov r1,r9 ;3 604 08068EF6 8808 ldrh r0,[r1] ;5 609 08068EF8 3001 add r0,1h ;3 612 08068EFA 8008 strh r0,[r1] ;6 618 08068EFC 2500 mov r5,0h ;3 621 08068EFE 42BD cmp r5,r7 ;3 624 08068F00 DA44 bge 8068F8Ch ;11 635 08068F02 00A9 lsl r1,r5,2h ;3 638 08068F04 4642 mov r2,r8 ;3 641 08068F06 6890 ldr r0,[r2,8h] ;12 653 08068F08 1842 add r2,r0,r1 ;3 656 08068F0A 6813 ldr r3,[r2] ;12 668 08068F0C 2B00 cmp r3,0h ;3 671 08068F0E D023 beq 8068F58h ;11 682 08068F10 200E mov r0,0Eh ;3 685 08068F12 5E1C ldsh r4,[r3,r0] ;5 690 08068F14 2C00 cmp r4,0h ;3 693 08068F16 DD0E ble 8068F36h ;11 704 08068F18 2110 mov r1,10h ;3 707 08068F1A 5E58 ldsh r0,[r3,r1] ;5 712 08068F1C 689A ldr r2,[r3,8h] ;5 717 08068F1E 1810 add r0,r2,r0 ;3 720 08068F20 6801 ldr r1,[r0] ;10 730 08068F22 00E0 lsl r0,r4,3h ;3 733 08068F24 1840 add r0,r0,r1 ;3 736 08068F26 1C06 mov r6,r0 ;3 739 08068F28 3E08 sub r6,8h ;3 742 08068F2A 6830 ldr r0,[r6] ;5 747 08068F2C 6871 ldr r1,[r6,4h] ;5 752 08068F2E 9001 str r0,[sp,4h] ;6 758 08068F30 9102 str r1,[sp,8h] ;6 764 08068F32 9E02 ldr r6,[sp,8h] ;5 769 08068F34 E001 b 8068F3Ah ;11 780 08068F36 691E ldr r6,[r3,10h] ;5 785 08068F38 689A ldr r2,[r3,8h] ;5 790 08068F3A 200C mov r0,0Ch ;3 793 08068F3C 5E19 ldsh r1,[r3,r0] ;5 798 08068F3E 2C00 cmp r4,0h ;3 801 08068F40 DD04 ble 8068F4Ch ;11 812 08068F42 9B01 ldr r3,[sp,4h] ;5 817 08068F44 0418 lsl r0,r3,10h ;3 820 08068F46 1400 asr r0,r0,10h ;3 823 08068F48 1840 add r0,r0,r1 ;3 826 08068F4A E000 b 8068F4Eh ;11 837 08068F4C 1C08 mov r0,r1 ;3 840 08068F4E 1810 add r0,r2,r0 ;3 843 08068F50 4651 mov r1,r10 ;3 846 08068F52 F028FCFB bl 809194Ch ;14 860 08068F56 E016 b 8068F86h ;11 871 08068F58 4640 mov r0,r8 ;3 874 08068F5A 6843 ldr r3,[r0,4h] ;10 884 08068F5C 1E69 sub r1,r5,1 ;3 887 08068F5E 468C mov r12,r1 ;3 890 08068F60 1E7E sub r6,r7,1 ;3 893 08068F62 429D cmp r5,r3 ;3 896 08068F64 DA0D bge 8068F82h ;11 907 08068F66 1C68 add r0,r5,1 ;3 910 08068F68 1A18 sub r0,r3,r0 ;3 913 08068F6A 1D14 add r4,r2,4 ;3 916 08068F6C 2800 cmp r0,0h ;3 919 08068F6E DD05 ble 8068F7Ch ;11 930 08068F70 1C01 mov r1,r0 ;3 933 08068F72 CC01 ldmia [r4]!,r0 ;12 945 08068F74 C201 stmia [r2]!,r0 ;13 958 08068F76 3901 sub r1,1h ;3 961 08068F78 2900 cmp r1,0h ;3 964 08068F7A D1FA bne 8068F72h ;11 975 08068F7C 1E58 sub r0,r3,1 ;3 978 08068F7E 4642 mov r2,r8 ;3 981 08068F80 6050 str r0,[r2,4h] ;13 994 08068F82 4665 mov r5,r12 ;3 997 08068F84 1C37 mov r7,r6 ;3 1000 08068F86 3501 add r5,1h ;3 1003 08068F88 42BD cmp r5,r7 ;3 1006 08068F8A DBBA blt 8068F02h ;11 1017 08068F8C 464B mov r3,r9 ;3 1020 08068F8E 8818 ldrh r0,[r3] ;5 1025 08068F90 3801 sub r0,1h ;3 1028 08068F92 8018 strh r0,[r3] ;6 1034 08068F94 0400 lsl r0,r0,10h ;3 1037 08068F96 2800 cmp r0,0h ;3 1040 08068F98 DC0C bgt 8068FB4h ;11 1051 08068F9A 8859 ldrh r1,[r3,2h] ;5 1056 08068F9C 2001 mov r0,1h ;3 1059 08068F9E 4008 and r0,r1 ;3 1062 08068FA0 2800 cmp r0,0h ;3 1065 08068FA2 D007 beq 8068FB4h ;11 1076 08068FA4 69D9 ldr r1,[r3,1Ch] ;5 1081 08068FA6 2208 mov r2,8h ;3 1084 08068FA8 5E88 ldsh r0,[r1,r2] ;9 1093 08068FAA 4448 add r0,r9 ;3 1096 08068FAC 68CA ldr r2,[r1,0Ch] ;5 1101 08068FAE 2103 mov r1,3h ;3 1104 08068FB0 F028FCC4 bl 809193Ch ;14 1118 08068FB4 B003 add sp,0Ch ;3 1121 08068FB6 BC38 pop r3-r5 ;24 1145 08068FB8 4698 mov r8,r3 ;3 1148 08068FBA 46A1 mov r9,r4 ;3 1151 08068FBC 46AA mov r10,r5 ;3 1154 08068FBE BCF0 pop r4-r7 ;30 1184 08068FC0 BC01 pop r0 ;12 1196 08068FC2 4700 bx r0 ;11 1207 0806A2DE 4648 mov r0,r9 ;3 1128 0806A2E0 9007 str r0,[sp,1Ch] ;6 1134 0806A2E2 4668 mov r0,r13 ;3 1137 0806A2E4 2102 mov r1,2h ;3 1140 0806A2E6 F7FEFB75 bl 80689D4h ;14 1154 NOTE: We've gone through this routine before a few times 080689D4 B5F0 push r4-r7,r14 ;37 511 080689D6 1C06 mov r6,r0 ;3 514 080689D8 1C0F mov r7,r1 ;3 517 080689DA 4818 ldr r0,=09F7EAA8h ;12 529 080689DC 61F0 str r0,[r6,1Ch] ;6 535 080689DE 1C30 mov r0,r6 ;3 538 080689E0 F000FB50 bl 8069084h ;14 552 080689E4 1C30 mov r0,r6 ;3 555 080689E6 F000FAED bl 8068FC4h ;14 569 080689EA 69B0 ldr r0,[r6,18h] ;5 574 080689EC 2800 cmp r0,0h ;3 577 080689EE D001 beq 80689F4h ;11 588 080689F0 F7F4FD00 bl 805D3F4h ;14 602 080689F4 1D35 add r5,r6,4 ;3 605 080689F6 2000 mov r0,0h ;3 608 080689F8 6068 str r0,[r5,4h] ;11 619 080689FA 68A9 ldr r1,[r5,8h] ;10 629 080689FC 2900 cmp r1,0h ;3 632 080689FE D012 beq 8068A26h ;11 643 08068A00 1F08 sub r0,r1,4 ;3 646 08068A02 6800 ldr r0,[r0] ;5 651 08068A04 0100 lsl r0,r0,4h ;3 654 08068A06 180C add r4,r1,r0 ;3 657 08068A08 42A1 cmp r1,r4 ;3 660 08068A0A D008 beq 8068A1Eh ;11 671 08068A0C 3C10 sub r4,10h ;3 674 08068A0E 68E0 ldr r0,[r4,0Ch] ;12 686 08068A10 2800 cmp r0,0h ;3 689 08068A12 D001 beq 8068A18h ;11 700 08068A14 F7F4FCEE bl 805D3F4h ;14 714 08068A18 68A8 ldr r0,[r5,8h] ;10 724 08068A1A 42A0 cmp r0,r4 ;3 727 08068A1C D1F6 bne 8068A0Ch ;11 738 08068A1E 68A8 ldr r0,[r5,8h] ;10 748 08068A20 3804 sub r0,4h ;3 751 08068A22 F7F4FCE7 bl 805D3F4h ;14 765 08068A26 2001 mov r0,1h ;3 768 08068A28 4038 and r0,r7 ;3 771 08068A2A 2800 cmp r0,0h ;3 774 08068A2C D002 beq 8068A34h ;11 785 08068A2E 1C30 mov r0,r6 ;3 788 08068A30 F7F4FCD6 bl 805D3E0h ;14 802 08068A34 BCF0 pop r4-r7 ;30 832 08068A36 BC01 pop r0 ;12 844 08068A38 4700 bx r0 ;11 855 0806A2EA F026FE67 bl 8090FBCh ;14 1168 0806A2EE 6A38 ldr r0,[r7,20h] ;5 1173 0806A2F0 3001 add r0,1h ;3 1176 0806A2F2 6238 str r0,[r7,20h] ;6 1182 0806A2F4 69FC ldr r4,[r7,1Ch] ;5 1187 0806A2F6 3450 add r4,50h ;3 1190 0806A2F8 2000 mov r0,0h ;3 1193 0806A2FA 5E25 ldsh r5,[r4,r0] ;7 1200 0806A2FC 197D add r5,r7,r5 ;3 1203 0806A2FE 1C38 mov r0,r7 ;3 1206 0806A300 F000F848 bl 806A394h ;14 1220 0806A304 1C06 mov r6,r0 ;3 1223 0806A306 4668 mov r0,r13 ;3 1226 0806A308 F7FEFB54 bl 80689B4h ;14 1240 0806A30C 481F ldr r0,=09F7EEA0h ;12 1252 0806A30E 9007 str r0,[sp,1Ch] ;6 1258 0806A310 9608 str r6,[sp,20h] ;6 1264 0806A312 6862 ldr r2,[r4,4h] ;5 1269 0806A314 1C28 mov r0,r5 ;3 1272 0806A316 4669 mov r1,r13 ;3 1275 0806A318 F027FB10 bl 809193Ch ;14 1289 08068EA0 B5F0 push r4-r7,r14 ;37 372 08068EA2 4657 mov r7,r10 ;3 375 08068EA4 464E mov r6,r9 ;3 378 08068EA6 4645 mov r5,r8 ;3 381 08068EA8 B4E0 push r5-r7 ;25 406 08068EAA B083 add sp,-0Ch ;3 409 08068EAC 4681 mov r9,r0 ;3 412 08068EAE 468A mov r10,r1 ;3 415 08068EB0 69C9 ldr r1,[r1,1Ch] ;5 420 08068EB2 2210 mov r2,10h ;3 423 08068EB4 5E88 ldsh r0,[r1,r2] ;9 432 08068EB6 4450 add r0,r10 ;3 435 08068EB8 6949 ldr r1,[r1,14h] ;5 440 08068EBA F028FD3D bl 8091938h ;14 454 08068EBE 1C03 mov r3,r0 ;3 457 08068EC0 9300 str r3,[sp] ;6 463 08068EC2 4648 mov r0,r9 ;3 466 08068EC4 3004 add r0,4h ;3 469 08068EC6 2200 mov r2,0h ;3 472 08068EC8 6841 ldr r1,[r0,4h] ;10 482 08068ECA 428A cmp r2,r1 ;3 485 08068ECC DA0C bge 8068EE8h ;11 496 08068ECE 1C1C mov r4,r3 ;3 499 08068ED0 1C0B mov r3,r1 ;3 502 08068ED2 6881 ldr r1,[r0,8h] ;10 512 08068ED4 6808 ldr r0,[r1] ;5 517 08068ED6 42A0 cmp r0,r4 ;3 520 08068ED8 D102 bne 8068EE0h ;11 531 08068EDA 3104 add r1,4h ;3 534 08068EDC 4688 mov r8,r1 ;3 537 08068EDE E005 b 8068EECh ;11 548 08068EE0 3110 add r1,10h ;3 551 08068EE2 3201 add r2,1h ;3 554 08068EE4 429A cmp r2,r3 ;3 557 08068EE6 DBF5 blt 8068ED4h ;11 568 08068EE8 2300 mov r3,0h ;3 571 08068EEA 4698 mov r8,r3 ;3 574 08068EEC 4640 mov r0,r8 ;3 577 08068EEE 2800 cmp r0,0h ;3 580 08068EF0 D060 beq 8068FB4h ;11 591 08068EF2 6847 ldr r7,[r0,4h] ;10 601 08068EF4 4649 mov r1,r9 ;3 604 08068EF6 8808 ldrh r0,[r1] ;5 609 08068EF8 3001 add r0,1h ;3 612 08068EFA 8008 strh r0,[r1] ;6 618 08068EFC 2500 mov r5,0h ;3 621 08068EFE 42BD cmp r5,r7 ;3 624 08068F00 DA44 bge 8068F8Ch ;11 635 08068F02 00A9 lsl r1,r5,2h ;3 638 08068F04 4642 mov r2,r8 ;3 641 08068F06 6890 ldr r0,[r2,8h] ;12 653 08068F08 1842 add r2,r0,r1 ;3 656 08068F0A 6813 ldr r3,[r2] ;12 668 08068F0C 2B00 cmp r3,0h ;3 671 08068F0E D023 beq 8068F58h ;11 682 08068F10 200E mov r0,0Eh ;3 685 08068F12 5E1C ldsh r4,[r3,r0] ;5 690 08068F14 2C00 cmp r4,0h ;3 693 08068F16 DD0E ble 8068F36h ;11 704 08068F18 2110 mov r1,10h ;3 707 08068F1A 5E58 ldsh r0,[r3,r1] ;5 712 08068F1C 689A ldr r2,[r3,8h] ;5 717 08068F1E 1810 add r0,r2,r0 ;3 720 08068F20 6801 ldr r1,[r0] ;10 730 08068F22 00E0 lsl r0,r4,3h ;3 733 08068F24 1840 add r0,r0,r1 ;3 736 08068F26 1C06 mov r6,r0 ;3 739 08068F28 3E08 sub r6,8h ;3 742 08068F2A 6830 ldr r0,[r6] ;5 747 08068F2C 6871 ldr r1,[r6,4h] ;5 752 08068F2E 9001 str r0,[sp,4h] ;6 758 08068F30 9102 str r1,[sp,8h] ;6 764 08068F32 9E02 ldr r6,[sp,8h] ;5 769 08068F34 E001 b 8068F3Ah ;11 780 08068F36 691E ldr r6,[r3,10h] ;5 785 08068F38 689A ldr r2,[r3,8h] ;5 790 08068F3A 200C mov r0,0Ch ;3 793 08068F3C 5E19 ldsh r1,[r3,r0] ;5 798 08068F3E 2C00 cmp r4,0h ;3 801 08068F40 DD04 ble 8068F4Ch ;11 812 08068F42 9B01 ldr r3,[sp,4h] ;5 817 08068F44 0418 lsl r0,r3,10h ;3 820 08068F46 1400 asr r0,r0,10h ;3 823 08068F48 1840 add r0,r0,r1 ;3 826 08068F4A E000 b 8068F4Eh ;11 837 08068F4C 1C08 mov r0,r1 ;3 840 08068F4E 1810 add r0,r2,r0 ;3 843 08068F50 4651 mov r1,r10 ;3 846 08068F52 F028FCFB bl 809194Ch ;14 860 08068F56 E016 b 8068F86h ;11 871 08068F58 4640 mov r0,r8 ;3 874 08068F5A 6843 ldr r3,[r0,4h] ;10 884 08068F5C 1E69 sub r1,r5,1 ;3 887 08068F5E 468C mov r12,r1 ;3 890 08068F60 1E7E sub r6,r7,1 ;3 893 08068F62 429D cmp r5,r3 ;3 896 08068F64 DA0D bge 8068F82h ;11 907 08068F66 1C68 add r0,r5,1 ;3 910 08068F68 1A18 sub r0,r3,r0 ;3 913 08068F6A 1D14 add r4,r2,4 ;3 916 08068F6C 2800 cmp r0,0h ;3 919 08068F6E DD05 ble 8068F7Ch ;11 930 08068F70 1C01 mov r1,r0 ;3 933 08068F72 CC01 ldmia [r4]!,r0 ;12 945 08068F74 C201 stmia [r2]!,r0 ;13 958 08068F76 3901 sub r1,1h ;3 961 08068F78 2900 cmp r1,0h ;3 964 08068F7A D1FA bne 8068F72h ;11 975 08068F7C 1E58 sub r0,r3,1 ;3 978 08068F7E 4642 mov r2,r8 ;3 981 08068F80 6050 str r0,[r2,4h] ;13 994 08068F82 4665 mov r5,r12 ;3 997 08068F84 1C37 mov r7,r6 ;3 1000 08068F86 3501 add r5,1h ;3 1003 08068F88 42BD cmp r5,r7 ;3 1006 08068F8A DBBA blt 8068F02h ;11 1017 08068F8C 464B mov r3,r9 ;3 1020 08068F8E 8818 ldrh r0,[r3] ;5 1025 08068F90 3801 sub r0,1h ;3 1028 08068F92 8018 strh r0,[r3] ;6 1034 08068F94 0400 lsl r0,r0,10h ;3 1037 08068F96 2800 cmp r0,0h ;3 1040 08068F98 DC0C bgt 8068FB4h ;11 1051 08068F9A 8859 ldrh r1,[r3,2h] ;5 1056 08068F9C 2001 mov r0,1h ;3 1059 08068F9E 4008 and r0,r1 ;3 1062 08068FA0 2800 cmp r0,0h ;3 1065 08068FA2 D007 beq 8068FB4h ;11 1076 08068FA4 69D9 ldr r1,[r3,1Ch] ;5 1081 08068FA6 2208 mov r2,8h ;3 1084 08068FA8 5E88 ldsh r0,[r1,r2] ;9 1093 08068FAA 4448 add r0,r9 ;3 1096 08068FAC 68CA ldr r2,[r1,0Ch] ;5 1101 08068FAE 2103 mov r1,3h ;3 1104 08068FB0 F028FCC4 bl 809193Ch ;14 1118 08068FB4 B003 add sp,0Ch ;3 1121 08068FB6 BC38 pop r3-r5 ;24 1145 08068FB8 4698 mov r8,r3 ;3 1148 08068FBA 46A1 mov r9,r4 ;3 1151 08068FBC 46AA mov r10,r5 ;3 1154 08068FBE BCF0 pop r4-r7 ;30 1184 08068FC0 BC01 pop r0 ;12 1196 08068FC2 4700 bx r0 ;11 1207 0806A31C 4648 mov r0,r9 ;3 1292 0806A31E 9007 str r0,[sp,1Ch] ;6 1298 0806A320 4668 mov r0,r13 ;3 1301 0806A322 2102 mov r1,2h ;3 1304 0806A324 F7FEFB56 bl 80689D4h ;14 1318 NOTE: We've gone through this routine before many times 080689D4 B5F0 push r4-r7,r14 ;37 511 080689D6 1C06 mov r6,r0 ;3 514 080689D8 1C0F mov r7,r1 ;3 517 080689DA 4818 ldr r0,=09F7EAA8h ;12 529 080689DC 61F0 str r0,[r6,1Ch] ;6 535 080689DE 1C30 mov r0,r6 ;3 538 080689E0 F000FB50 bl 8069084h ;14 552 080689E4 1C30 mov r0,r6 ;3 555 080689E6 F000FAED bl 8068FC4h ;14 569 080689EA 69B0 ldr r0,[r6,18h] ;5 574 080689EC 2800 cmp r0,0h ;3 577 080689EE D001 beq 80689F4h ;11 588 080689F0 F7F4FD00 bl 805D3F4h ;14 602 080689F4 1D35 add r5,r6,4 ;3 605 080689F6 2000 mov r0,0h ;3 608 080689F8 6068 str r0,[r5,4h] ;11 619 080689FA 68A9 ldr r1,[r5,8h] ;10 629 080689FC 2900 cmp r1,0h ;3 632 080689FE D012 beq 8068A26h ;11 643 08068A00 1F08 sub r0,r1,4 ;3 646 08068A02 6800 ldr r0,[r0] ;5 651 08068A04 0100 lsl r0,r0,4h ;3 654 08068A06 180C add r4,r1,r0 ;3 657 08068A08 42A1 cmp r1,r4 ;3 660 08068A0A D008 beq 8068A1Eh ;11 671 08068A0C 3C10 sub r4,10h ;3 674 08068A0E 68E0 ldr r0,[r4,0Ch] ;12 686 08068A10 2800 cmp r0,0h ;3 689 08068A12 D001 beq 8068A18h ;11 700 08068A14 F7F4FCEE bl 805D3F4h ;14 714 08068A18 68A8 ldr r0,[r5,8h] ;10 724 08068A1A 42A0 cmp r0,r4 ;3 727 08068A1C D1F6 bne 8068A0Ch ;11 738 08068A1E 68A8 ldr r0,[r5,8h] ;10 748 08068A20 3804 sub r0,4h ;3 751 08068A22 F7F4FCE7 bl 805D3F4h ;14 765 08068A26 2001 mov r0,1h ;3 768 08068A28 4038 and r0,r7 ;3 771 08068A2A 2800 cmp r0,0h ;3 774 08068A2C D002 beq 8068A34h ;11 785 08068A2E 1C30 mov r0,r6 ;3 788 08068A30 F7F4FCD6 bl 805D3E0h ;14 802 08068A34 BCF0 pop r4-r7 ;30 832 08068A36 BC01 pop r0 ;12 844 08068A38 4700 bx r0 ;11 855 0806A328 69FC ldr r4,[r7,1Ch] ;5 1323 0806A32A 3450 add r4,50h ;3 1326 0806A32C 2000 mov r0,0h ;3 1329 0806A32E 5E25 ldsh r5,[r4,r0] ;7 1336 0806A330 197D add r5,r7,r5 ;3 1339 0806A332 1C38 mov r0,r7 ;3 1342 0806A334 F000F82E bl 806A394h ;14 1356 0806A338 1C06 mov r6,r0 ;3 1359 0806A33A 4668 mov r0,r13 ;3 1362 0806A33C F7FEFB3A bl 80689B4h ;14 1376 0806A340 4813 ldr r0,=09F7EE20h ;12 1388 0806A342 9007 str r0,[sp,1Ch] ;6 1394 0806A344 9608 str r6,[sp,20h] ;6 1400 0806A346 6862 ldr r2,[r4,4h] ;5 1405 0806A348 1C28 mov r0,r5 ;3 1408 0806A34A 4669 mov r1,r13 ;3 1411 0806A34C F027FAF6 bl 809193Ch ;14 1425 08068EA0 B5F0 push r4-r7,r14 ;37 372 08068EA2 4657 mov r7,r10 ;3 375 08068EA4 464E mov r6,r9 ;3 378 08068EA6 4645 mov r5,r8 ;3 381 08068EA8 B4E0 push r5-r7 ;25 406 08068EAA B083 add sp,-0Ch ;3 409 08068EAC 4681 mov r9,r0 ;3 412 08068EAE 468A mov r10,r1 ;3 415 08068EB0 69C9 ldr r1,[r1,1Ch] ;5 420 08068EB2 2210 mov r2,10h ;3 423 08068EB4 5E88 ldsh r0,[r1,r2] ;9 432 08068EB6 4450 add r0,r10 ;3 435 08068EB8 6949 ldr r1,[r1,14h] ;5 440 08068EBA F028FD3D bl 8091938h ;14 454 08068EBE 1C03 mov r3,r0 ;3 457 08068EC0 9300 str r3,[sp] ;6 463 08068EC2 4648 mov r0,r9 ;3 466 08068EC4 3004 add r0,4h ;3 469 08068EC6 2200 mov r2,0h ;3 472 08068EC8 6841 ldr r1,[r0,4h] ;10 482 08068ECA 428A cmp r2,r1 ;3 485 08068ECC DA0C bge 8068EE8h ;11 496 08068ECE 1C1C mov r4,r3 ;3 499 08068ED0 1C0B mov r3,r1 ;3 502 08068ED2 6881 ldr r1,[r0,8h] ;10 512 08068ED4 6808 ldr r0,[r1] ;5 517 08068ED6 42A0 cmp r0,r4 ;3 520 08068ED8 D102 bne 8068EE0h ;11 531 08068EDA 3104 add r1,4h ;3 534 08068EDC 4688 mov r8,r1 ;3 537 08068EDE E005 b 8068EECh ;11 548 08068EE0 3110 add r1,10h ;3 551 08068EE2 3201 add r2,1h ;3 554 08068EE4 429A cmp r2,r3 ;3 557 08068EE6 DBF5 blt 8068ED4h ;11 568 08068EE8 2300 mov r3,0h ;3 571 08068EEA 4698 mov r8,r3 ;3 574 08068EEC 4640 mov r0,r8 ;3 577 08068EEE 2800 cmp r0,0h ;3 580 08068EF0 D060 beq 8068FB4h ;11 591 08068EF2 6847 ldr r7,[r0,4h] ;10 601 08068EF4 4649 mov r1,r9 ;3 604 08068EF6 8808 ldrh r0,[r1] ;5 609 08068EF8 3001 add r0,1h ;3 612 08068EFA 8008 strh r0,[r1] ;6 618 08068EFC 2500 mov r5,0h ;3 621 08068EFE 42BD cmp r5,r7 ;3 624 08068F00 DA44 bge 8068F8Ch ;11 635 08068F02 00A9 lsl r1,r5,2h ;3 638 08068F04 4642 mov r2,r8 ;3 641 08068F06 6890 ldr r0,[r2,8h] ;12 653 08068F08 1842 add r2,r0,r1 ;3 656 08068F0A 6813 ldr r3,[r2] ;12 668 08068F0C 2B00 cmp r3,0h ;3 671 08068F0E D023 beq 8068F58h ;11 682 08068F10 200E mov r0,0Eh ;3 685 08068F12 5E1C ldsh r4,[r3,r0] ;5 690 08068F14 2C00 cmp r4,0h ;3 693 08068F16 DD0E ble 8068F36h ;11 704 08068F18 2110 mov r1,10h ;3 707 08068F1A 5E58 ldsh r0,[r3,r1] ;5 712 08068F1C 689A ldr r2,[r3,8h] ;5 717 08068F1E 1810 add r0,r2,r0 ;3 720 08068F20 6801 ldr r1,[r0] ;10 730 08068F22 00E0 lsl r0,r4,3h ;3 733 08068F24 1840 add r0,r0,r1 ;3 736 08068F26 1C06 mov r6,r0 ;3 739 08068F28 3E08 sub r6,8h ;3 742 08068F2A 6830 ldr r0,[r6] ;5 747 08068F2C 6871 ldr r1,[r6,4h] ;5 752 08068F2E 9001 str r0,[sp,4h] ;6 758 08068F30 9102 str r1,[sp,8h] ;6 764 08068F32 9E02 ldr r6,[sp,8h] ;5 769 08068F34 E001 b 8068F3Ah ;11 780 08068F36 691E ldr r6,[r3,10h] ;5 785 08068F38 689A ldr r2,[r3,8h] ;5 790 08068F3A 200C mov r0,0Ch ;3 793 08068F3C 5E19 ldsh r1,[r3,r0] ;5 798 08068F3E 2C00 cmp r4,0h ;3 801 08068F40 DD04 ble 8068F4Ch ;11 812 08068F42 9B01 ldr r3,[sp,4h] ;5 817 08068F44 0418 lsl r0,r3,10h ;3 820 08068F46 1400 asr r0,r0,10h ;3 823 08068F48 1840 add r0,r0,r1 ;3 826 08068F4A E000 b 8068F4Eh ;11 837 08068F4C 1C08 mov r0,r1 ;3 840 08068F4E 1810 add r0,r2,r0 ;3 843 08068F50 4651 mov r1,r10 ;3 846 08068F52 F028FCFB bl 809194Ch ;14 860 08068F56 E016 b 8068F86h ;11 871 08068F58 4640 mov r0,r8 ;3 874 08068F5A 6843 ldr r3,[r0,4h] ;10 884 08068F5C 1E69 sub r1,r5,1 ;3 887 08068F5E 468C mov r12,r1 ;3 890 08068F60 1E7E sub r6,r7,1 ;3 893 08068F62 429D cmp r5,r3 ;3 896 08068F64 DA0D bge 8068F82h ;11 907 08068F66 1C68 add r0,r5,1 ;3 910 08068F68 1A18 sub r0,r3,r0 ;3 913 08068F6A 1D14 add r4,r2,4 ;3 916 08068F6C 2800 cmp r0,0h ;3 919 08068F6E DD05 ble 8068F7Ch ;11 930 08068F70 1C01 mov r1,r0 ;3 933 08068F72 CC01 ldmia [r4]!,r0 ;12 945 08068F74 C201 stmia [r2]!,r0 ;13 958 08068F76 3901 sub r1,1h ;3 961 08068F78 2900 cmp r1,0h ;3 964 08068F7A D1FA bne 8068F72h ;11 975 08068F7C 1E58 sub r0,r3,1 ;3 978 08068F7E 4642 mov r2,r8 ;3 981 08068F80 6050 str r0,[r2,4h] ;13 994 08068F82 4665 mov r5,r12 ;3 997 08068F84 1C37 mov r7,r6 ;3 1000 08068F86 3501 add r5,1h ;3 1003 08068F88 42BD cmp r5,r7 ;3 1006 08068F8A DBBA blt 8068F02h ;11 1017 08068F8C 464B mov r3,r9 ;3 1020 08068F8E 8818 ldrh r0,[r3] ;5 1025 08068F90 3801 sub r0,1h ;3 1028 08068F92 8018 strh r0,[r3] ;6 1034 08068F94 0400 lsl r0,r0,10h ;3 1037 08068F96 2800 cmp r0,0h ;3 1040 08068F98 DC0C bgt 8068FB4h ;11 1051 08068F9A 8859 ldrh r1,[r3,2h] ;5 1056 08068F9C 2001 mov r0,1h ;3 1059 08068F9E 4008 and r0,r1 ;3 1062 08068FA0 2800 cmp r0,0h ;3 1065 08068FA2 D007 beq 8068FB4h ;11 1076 08068FA4 69D9 ldr r1,[r3,1Ch] ;5 1081 08068FA6 2208 mov r2,8h ;3 1084 08068FA8 5E88 ldsh r0,[r1,r2] ;9 1093 08068FAA 4448 add r0,r9 ;3 1096 08068FAC 68CA ldr r2,[r1,0Ch] ;5 1101 08068FAE 2103 mov r1,3h ;3 1104 08068FB0 F028FCC4 bl 809193Ch ;14 1118 08068FB4 B003 add sp,0Ch ;3 1121 08068FB6 BC38 pop r3-r5 ;24 1145 08068FB8 4698 mov r8,r3 ;3 1148 08068FBA 46A1 mov r9,r4 ;3 1151 08068FBC 46AA mov r10,r5 ;3 1154 08068FBE BCF0 pop r4-r7 ;30 1184 08068FC0 BC01 pop r0 ;12 1196 08068FC2 4700 bx r0 ;11 1207 0806A350 4648 mov r0,r9 ;3 1428 0806A352 9007 str r0,[sp,1Ch] ;6 1434 0806A354 4668 mov r0,r13 ;3 1437 0806A356 2102 mov r1,2h ;3 1440 0806A358 F7FEFB3C bl 80689D4h ;14 1454 NOTE: We've gone through this routine many times, argh 080689D4 B5F0 push r4-r7,r14 ;37 511 080689D6 1C06 mov r6,r0 ;3 514 080689D8 1C0F mov r7,r1 ;3 517 080689DA 4818 ldr r0,=09F7EAA8h ;12 529 080689DC 61F0 str r0,[r6,1Ch] ;6 535 080689DE 1C30 mov r0,r6 ;3 538 080689E0 F000FB50 bl 8069084h ;14 552 080689E4 1C30 mov r0,r6 ;3 555 080689E6 F000FAED bl 8068FC4h ;14 569 080689EA 69B0 ldr r0,[r6,18h] ;5 574 080689EC 2800 cmp r0,0h ;3 577 080689EE D001 beq 80689F4h ;11 588 080689F0 F7F4FD00 bl 805D3F4h ;14 602 080689F4 1D35 add r5,r6,4 ;3 605 080689F6 2000 mov r0,0h ;3 608 080689F8 6068 str r0,[r5,4h] ;11 619 080689FA 68A9 ldr r1,[r5,8h] ;10 629 080689FC 2900 cmp r1,0h ;3 632 080689FE D012 beq 8068A26h ;11 643 08068A00 1F08 sub r0,r1,4 ;3 646 08068A02 6800 ldr r0,[r0] ;5 651 08068A04 0100 lsl r0,r0,4h ;3 654 08068A06 180C add r4,r1,r0 ;3 657 08068A08 42A1 cmp r1,r4 ;3 660 08068A0A D008 beq 8068A1Eh ;11 671 08068A0C 3C10 sub r4,10h ;3 674 08068A0E 68E0 ldr r0,[r4,0Ch] ;12 686 08068A10 2800 cmp r0,0h ;3 689 08068A12 D001 beq 8068A18h ;11 700 08068A14 F7F4FCEE bl 805D3F4h ;14 714 08068A18 68A8 ldr r0,[r5,8h] ;10 724 08068A1A 42A0 cmp r0,r4 ;3 727 08068A1C D1F6 bne 8068A0Ch ;11 738 08068A1E 68A8 ldr r0,[r5,8h] ;10 748 08068A20 3804 sub r0,4h ;3 751 08068A22 F7F4FCE7 bl 805D3F4h ;14 765 08068A26 2001 mov r0,1h ;3 768 08068A28 4038 and r0,r7 ;3 771 08068A2A 2800 cmp r0,0h ;3 774 08068A2C D002 beq 8068A34h ;11 785 08068A2E 1C30 mov r0,r6 ;3 788 08068A30 F7F4FCD6 bl 805D3E0h ;14 802 08068A34 BCF0 pop r4-r7 ;30 832 08068A36 BC01 pop r0 ;12 844 08068A38 4700 bx r0 ;11 855 0806A35C 2001 mov r0,1h ;3 1457 0806A35E 4240 neg r0,r0 ;3 1460 0806A360 4480 add r8,r0 ;3 1463 0806A362 4640 mov r0,r8 ;3 1466 0806A364 2800 cmp r0,0h ;3 1469 0806A366 DD00 ble 806A36Ah ;11 1480 0806A368 E752 b 806A210h ;11 1491 0806A36A B009 add sp,24h ;3 1494 0806A36C BC18 pop r3,r4 ;18 1512 0806A36E 4698 mov r8,r3 ;3 1515 0806A370 46A1 mov r9,r4 ;3 1518 0806A372 BCF0 pop r4-r7 ;30 1548 0806A374 BC01 pop r0 ;12 1560 0806A376 4700 bx r0 ;11 1571 0807069A BC10 pop r4 ;12 390 0807069C BC01 pop r0 ;12 402 0807069E 4700 bx r0 ;11 413