// r0: window // r1: goods pointer // Returns 0 if no action, -1 if cancelled with B/select, or item index + 1 if accepted with A/L 080BEB6C (T) push r4-r7,r14 ;9 144 080BEB6E (T) mov r7,r10 ;2 146 080BEB70 (T) mov r6,r9 ;2 148 080BEB72 (T) mov r5,r8 ;2 150 080BEB74 (T) push r5-r7 ;7 157 080BEB76 (T) add sp,-20h ;2 159 080BEB78 (T) mov r7,r0 ;2 161 080BEB7A (T) str r1,[sp] ;5 166 // Get weird signed value 080BEB7C (T) mov r1,28h ;2 168 080BEB7E (T) ldsh r0,[r7,r1] ;4 172 window height 080BEB80 (T) lsr r1,r0,1Fh ;2 174 080BEB82 (T) add r0,r0,r1 ;2 176 080BEB84 (T) lsl r0,r0,0Fh ;2 178 080BEB86 (T) lsr r0,r0,10h ;2 180 080BEB88 (T) str r0,[sp,8h] ;5 185 // Divide cursor X by cursor delta to get the column index 080BEB8A (T) mov r2,34h ;2 187 080BEB8C (T) ldsh r0,[r7,r2] ;4 191 // cursor x 080BEB8E (T) mov r1,r7 ;2 193 080BEB90 (T) add r1,42h ;2 195 080BEB92 (T) ldrb r1,[r1] ;4 199 080BEB94 (T) bl 80F49D8h ;10 209 // Get signed parity of column index 080BEB98 (T) lsr r1,r0,1Fh ;2 211 080BEB9A (T) add r1,r0,r1 ;2 213 080BEB9C (T) asr r1,r1,1h ;2 215 080BEB9E (T) lsl r1,r1,1h ;2 217 080BEBA0 (T) sub r0,r0,r1 ;2 219 080BEBA2 (T) lsl r0,r0,10h ;2 221 080BEBA4 (T) lsr r0,r0,10h ;2 223 080BEBA6 (T) mov r10,r0 ;2 225 // Get cursor_y * 2 080BEBA8 (T) mov r3,36h ;2 227 080BEBAA (T) ldsh r0,[r7,r3] ;4 231 cursor y 080BEBAC (T) lsl r0,r0,11h ;2 233 080BEBAE (T) lsr r0,r0,10h ;2 235 080BEBB0 (T) str r0,[sp,4h] ;5 240 = cursor_y * 2 // Count number of items in each column 080BEBB2 (T) mov r4,0h ;2 242 080BEBB4 (T) mov r8,r4 ;2 244 080BEBB6 (T) mov r3,0h ;2 246 080BEBB8 (T) mov r5,r8 ;2 248 080BEBBA (T) lsl r0,r5,10h ;2 250 080BEBBC (T) asr r1,r0,10h ;2 252 080BEBBE (T) lsl r0,r1,2h ;2 254 080BEBC0 (T) ldr r6,[sp] ;4 258 080BEBC2 (T) add r2,r0,r6 ;2 260 080BEBC4 (T) ldrh r0,[r2] ;4 264 080BEBC6 (T) cmp r0,0h ;2 266 080BEBC8 (T) beq 80BEBD4h ;8 274 080BEBCA (T) lsl r0,r4,10h ;2 276 080BEBCC (T) mov r4,80h ;2 278 080BEBCE (T) lsl r4,r4,9h ;2 280 080BEBD0 (T) add r0,r0,r4 ;2 282 080BEBD2 (T) lsr r4,r0,10h ;2 284 080BEBD4 (T) ldrh r0,[r2,2h] ;4 288 080BEBD6 (T) cmp r0,0h ;2 290 080BEBD8 (T) beq 80BEBE4h ;8 298 080BEBDA (T) lsl r0,r3,10h ;2 300 080BEBDC (T) mov r5,80h ;2 302 080BEBDE (T) lsl r5,r5,9h ;2 304 080BEBE0 (T) add r0,r0,r5 ;2 306 080BEBE2 (T) lsr r3,r0,10h ;2 308 080BEBE4 (T) add r0,r1,1 ;2 310 080BEBE6 (T) lsl r0,r0,10h ;2 312 080BEBE8 (T) lsr r6,r0,10h ;2 314 080BEBEA (T) mov r8,r6 ;2 316 080BEBEC (T) asr r0,r0,10h ;2 318 080BEBEE (T) cmp r0,6h ;2 320 080BEBF0 (T) ble 80BEBB8h ;8 328 080BEBF2 (T) mov r2,r3 ;2 330 080BEBF4 (T) lsl r1,r3,10h ;2 332 080BEBF6 (T) asr r0,r1,10h ;2 334 080BEBF8 (T) str r0,[sp,14h] ;5 339 num in second column 080BEBFA (T) lsl r0,r4,10h ;2 341 080BEBFC (T) asr r3,r0,10h ;2 343 080BEBFE (T) mov r12,r3 ;2 345 num in first column 080BEC00 (T) mov r9,r0 ;2 347 num in first column << 16 080BEC02 (T) str r1,[sp,18h] ;5 352 num in second column << 16 // r2 = max(first col, second col) := biggest col 080BEC04 (T) ldr r5,[sp,14h] ;4 356 080BEC06 (T) cmp r5,r12 ;2 358 080BEC08 (T) bge 80BEC0Ch ;8 366 080BEC0A (T) mov r2,r4 ;2 368 // Check if biggest col == 0 080BEC0C (T) lsl r0,r2,10h ;2 370 080BEC0E (T) asr r2,r0,10h ;2 372 080BEC10 (T) cmp r2,0h ;2 374 080BEC12 (T) bne 80BEC2Ch ;8 382 // If true: check for B/select 080BEC14 (T) ldr r6,=3002500h ;9 391 080BEC16 (T) ldrh r1,[r6] ;4 395 080BEC18 (T) mov r0,6h ;2 397 080BEC1A (T) and r0,r1 ;2 399 080BEC1C (T) cmp r0,0h ;2 401 080BEC1E (T) bne 80BEC22h ;8 409 // If false, return 0 080BEC20 (T) b 80BF2EEh ;8 417 // If true, then go to BF204 (call a few functions and then return -1) 080BEC22 (T) strh r2,[r7,32h] ;5 422 080BEC24 (T) b 80BF204h ;8 430 080BEC26 (T) lsl r0,r0,0h ;2 432 080BEC28 (T) mov r5,0h ;2 434 080BEC2A (T) lsl r0,r0,0Ch ;2 436 // Clear cursor tiles 080BEC2C (T) ldr r5,=3005270h ;9 445 080BEC2E (T) mov r0,24h ;2 447 080BEC30 (T) ldsh r1,[r7,r0] ;4 451 080BEC32 (T) mov r2,36h ;2 453 080BEC34 (T) ldsh r0,[r7,r2] ;4 457 080BEC36 (T) lsl r0,r0,1h ;2 459 080BEC38 (T) add r1,r1,r0 ;2 461 080BEC3A (T) lsl r1,r1,6h ;2 463 080BEC3C (T) ldr r2,[r5] ;4 467 080BEC3E (T) add r2,r2,r1 ;2 469 080BEC40 (T) mov r3,22h ;2 471 080BEC42 (T) ldsh r0,[r7,r3] ;4 475 080BEC44 (T) mov r4,34h ;2 477 080BEC46 (T) ldsh r1,[r7,r4] ;4 481 080BEC48 (T) add r0,r0,r1 ;2 483 080BEC4A (T) lsl r0,r0,1h ;2 485 080BEC4C (T) add r6,r2,r0 ;2 487 = tilemap address of (x + cursor_x) + ((y + cursor_y) * 32) 080BEC4E (T) ldr r4,=30051ECh ;9 496 080BEC50 (T) ldr r0,=1FFh ;9 505 080BEC52 (T) mov r2,r0 ;2 507 080BEC54 (T) ldrh r1,[r4] ;4 511 080BEC56 (T) add r0,r2,r1 ;2 513 080BEC58 (T) ldr r3,=3005228h ;9 522 080BEC5A (T) ldrh r1,[r3] ;4 526 080BEC5C (T) orr r0,r1 ;2 528 080BEC5E (T) nop ;2 530 080BEC60 (T) add r6,40h ;2 532 080BEC62 (T) ldrh r0,[r4] ;4 536 080BEC64 (T) add r2,r2,r0 ;2 538 080BEC66 (T) ldrh r0,[r3] ;4 542 080BEC68 (T) orr r2,r0 ;2 544 080BEC6A (T) nop ;2 546 080BEC6C (T) ldrh r1,[r7,34h] ;4 550 080BEC6E (T) str r1,[sp,0Ch] ;5 555 // cursor x 080BEC70 (T) ldrh r2,[r7,36h] ;4 559 080BEC72 (T) str r2,[sp,10h] ;5 564 // cursor y // Start checking for buttons 080BEC74 (T) ldr r6,=3002500h ;9 573 080BEC76 (T) ldrh r1,[r6] ;4 577 080BEC78 (T) mov r0,40h ;2 579 080BEC7A (T) and r0,r1 ;2 581 080BEC7C (T) ldr r1,[r7] ;4 585 080BEC7E (T) mov r8,r1 ;2 587 r8 = window flags 080BEC80 (T) cmp r0,0h ;2 589 080BEC82 (T) beq 80BED06h ;8 597 // We pressed up: decrement cursor y 080BEC84 (T) mov r0,r2 ;2 599 080BEC86 (T) sub r0,1h ;2 601 080BEC88 (T) strh r0,[r7,36h] ;5 606 080BEC8A (T) lsl r0,r0,10h ;2 608 080BEC8C (T) cmp r0,0h ;2 610 080BEC8E (T) bge 80BECD8h ;8 618 // Check for window flag 0x10 080BEC90 (T) mov r0,10h ;2 620 080BEC92 (T) and r0,r1 ;2 622 080BEC94 (T) cmp r0,0h ;2 624 080BEC96 (T) beq 80BECB4h ;8 632 // If it's set: clamp cursor y to 0 080BEC98 (T) mov r2,0h ;2 634 080BEC9A (T) str r2,[sp,4h] ;5 639 this is the cursor_y*2 value we saved from earlier 080BEC9C (T) strh r2,[r7,36h] ;5 644 080BEC9E (T) b 80BED06h ;8 652 080BECA0 (T) strh r0,[r6,r1] ;5 657 080BECA2 (T) lsl r0,r0,0Ch ;2 659 080BECA4 (T) str r4,[r5,r7] ;6 665 080BECA6 (T) lsl r0,r0,0Ch ;2 667 080BECA8 (T) lsl r7,r7,7h ;2 669 080BECAA (T) lsl r0,r0,0h ;2 671 080BECAC (T) strh r0,[r5,r0] ;5 676 080BECAE (T) lsl r0,r0,0Ch ;2 678 080BECB0 (T) mov r5,0h ;2 680 080BECB2 (T) lsl r0,r0,0Ch ;2 682 // If it's not set: 080BECB4 (T) mov r4,r10 ;2 684 signed parity of column index 080BECB6 (T) cmp r4,0h ;2 686 080BECB8 (T) bne 80BECC6h ;8 694 // Even column index 080BECBA (T) mov r0,r12 ;2 696 // first column item count 080BECBC (T) sub r0,1h ;2 698 080BECBE (T) strh r0,[r7,36h] ;5 703 // cursor y = end of column 080BECC0 (T) mov r5,36h ;2 705 080BECC2 (T) ldsh r0,[r7,r5] ;4 709 080BECC4 (T) b 80BECD0h ;8 717 // Odd column index 080BECC6 (T) ldr r0,[sp,14h] ;4 721 // second column item count 080BECC8 (T) sub r0,1h ;2 723 080BECCA (T) strh r0,[r7,36h] ;5 728 // cursor y = end of column 080BECCC (T) mov r6,36h ;2 730 080BECCE (T) ldsh r0,[r7,r6] ;4 734 // r0 = new cursor y 080BECD0 (T) lsl r0,r0,11h ;2 736 080BECD2 (T) lsr r0,r0,10h ;2 738 080BECD4 (T) str r0,[sp,4h] ;5 743 080BECD6 (T) b 80BED06h ;8 751 // If new cursor y >= 0: 080BECD8 (T) mov r0,36h ;2 753 080BECDA (T) ldsh r1,[r7,r0] ;4 757 r1 = cursor_y 080BECDC (T) lsl r1,r1,11h ;2 759 r1 = cursor_y << 11 080BECDE (T) mov r2,r10 ;2 761 r2 = col_parity 080BECE0 (T) lsl r0,r2,10h ;2 763 080BECE2 (T) asr r0,r0,10h ;2 765 r0 = signed col_parity 080BECE4 (T) lsr r3,r1,10h ;2 767 r3 = cursor_y * 2 080BECE6 (T) str r3,[sp,4h] ;5 772 080BECE8 (T) asr r1,r1,10h ;2 774 r1 = signed cursor_y * 2 080BECEA (T) add r0,r0,r1 ;2 776 r0 = signed cursor_y * 2 + col_parity 080BECEC (T) lsl r0,r0,1h ;2 778 r0 = signed cursor_y * 4 + col_parity * 2 080BECEE (T) ldr r4,[sp] ;4 782 r4 = goods pointer 080BECF0 (T) add r0,r0,r4 ;2 784 r0 = pointer to selected item 080BECF2 (T) ldrh r1,[r0] ;6 790 080BECF4 (T) cmp r1,0h ;2 792 080BECF6 (T) bne 80BED06h ;8 800 080BECF8 (T) ldr r0,[sp,10h] ;4 804 current item is null; r0 = previous y 080BECFA (T) sub r0,2h ;2 806 080BECFC (T) strh r0,[r7,36h] ;5 811 skip over the null item 080BECFE (T) lsl r0,r0,10h ;2 813 080BED00 (T) cmp r0,0h ;2 815 080BED02 (T) bge 80BED06h ;8 823 080BED04 (T) strh r1,[r7,36h] ;5 828 clamp to 0 // Check for down 080BED06 (T) ldr r5,=3002500h ;9 837 080BED08 (T) ldrh r1,[r5] ;4 841 080BED0A (T) mov r0,80h ;2 843 080BED0C (T) and r0,r1 ;2 845 080BED0E (T) cmp r0,0h ;2 847 080BED10 (T) beq 80BEDA0h ;8 855 // We pressed down 080BED12 (T) ldrh r0,[r7,36h] ;4 859 080BED14 (T) add r1,r0,1 ;2 861 080BED16 (T) mov r2,0h ;2 863 080BED18 (T) strh r1,[r7,36h] ;5 868 increment cursor_y 080BED1A (T) mov r6,34h ;2 870 080BED1C (T) ldsh r0,[r7,r6] ;4 874 r0 = cursor_x 080BED1E (T) cmp r0,0h ;2 876 080BED20 (T) bgt 80BED4Ch ;8 884 // If cursor_x <= 0: 080BED22 (T) lsl r0,r1,10h ;2 886 r0 = cursor_y << 16 080BED24 (T) mov r3,r9 ;2 888 r3 = left col item count << 16 080BED26 (T) asr r1,r3,10h ;2 890 080BED28 (T) cmp r0,r9 ;2 892 080BED2A (T) blt 80BED46h ;8 900 // If cursor_y >= left col count: 080BED2C (T) mov r0,10h ;2 902 080BED2E (T) mov r4,r8 ;2 904 080BED30 (T) and r0,r4 ;2 906 080BED32 (T) cmp r0,0h ;2 908 080BED34 (T) beq 80BED40h ;8 916 // If window flag is set: 080BED36 (T) sub r0,r1,1 ;2 918 080BED38 (T) strh r0,[r7,36h] ;5 923 r0 = cursor_y 080BED3A (T) b 80BED46h ;8 931 080BED3C (T) mov r5,0h ;2 933 080BED3E (T) lsl r0,r0,0Ch ;2 935 // Else: 080BED40 (T) strh r2,[r7,36h] ;5 940 cursor_y = 0 080BED42 (T) mov r5,0h ;2 942 080BED44 (T) strh r5,[r7,3Ch] ;5 947 unknown7 = 0, r0 = 0 // Else: 080BED46 (T) mov r1,36h ;2 949 080BED48 (T) ldsh r0,[r7,r1] ;4 953 r0 = cursor_y 080BED4A (T) b 80BED9Ah ;8 961 // Else if cursor_x > 0: 080BED4C (T) lsl r0,r1,10h ;2 963 080BED4E (T) ldr r3,[sp,18h] ;4 967 r3 = right col << 16 080BED50 (T) asr r1,r3,10h ;2 969 080BED52 (T) cmp r0,r3 ;2 971 080BED54 (T) blt 80BED96h ;8 979 // If cursor_y >= right_col: 080BED56 (T) mov r4,r9 ;2 981 r4 = left col item count << 16 080BED58 (T) asr r0,r4,10h ;2 983 080BED5A (T) cmp r0,r1 ;2 985 080BED5C (T) ble 80BED88h ;8 993 // If left col > right col: 080BED5E (T) mov r1,r7 ;2 995 080BED60 (T) add r1,40h ;2 997 080BED62 (T) strh r2,[r7,34h] ;5 1002 r2==0 080BED64 (T) mov r2,r7 ;2 1004 080BED66 (T) add r2,42h ;2 1006 080BED68 (T) ldrb r0,[r2] ;4 1010 080BED6A (T) cmp r0,0h ;2 1012 080BED6C (T) beq 80BED96h ;8 1020 // If cursor_delta > 0: 080BED6E (T) mov r5,22h ;2 1022 080BED70 (T) ldsh r0,[r7,r5] ;4 1026 080BED72 (T) neg r0,r0 ;2 1028 r0 = -window_x 080BED74 (T) mov r6,0h ;2 1030 080BED76 (T) ldsh r1,[r1,r6] ;4 1034 r1 = base 080BED78 (T) sub r0,r0,r1 ;2 1036 r0 = -window_x - base 080BED7A (T) ldrb r1,[r2] ;4 1040 r1 = cursor_delta 080BED7C (T) bl 80F49D8h ;10 1050 r0 = -(window_x + base) / delta 080BED80 (T) lsl r0,r0,10h ;2 1052 080BED82 (T) lsr r0,r0,10h ;2 1054 080BED84 (T) mov r10,r0 ;2 1056 r10 = r0 080BED86 (T) b 80BED96h ;8 1064 // Else: 080BED88 (T) mov r0,10h ;2 1066 080BED8A (T) mov r2,r8 ;2 1068 080BED8C (T) and r0,r2 ;2 1070 080BED8E (T) cmp r0,0h ;2 1072 080BED90 (T) beq 80BED94h ;8 1080 080BED92 (T) sub r0,r1,1 ;2 1082 080BED94 (T) strh r0,[r7,36h] ;5 1087 080BED96 (T) mov r3,36h ;2 1089 080BED98 (T) ldsh r0,[r7,r3] ;4 1093 r0 = cursor_y 080BED9A (T) lsl r0,r0,11h ;2 1095 080BED9C (T) lsr r0,r0,10h ;2 1097 080BED9E (T) str r0,[sp,4h] ;5 1102 cursor_y * 2 // Check for right 080BEDA0 (T) ldr r4,=3002500h ;9 1111 080BEDA2 (T) ldrh r1,[r4] ;4 1115 080BEDA4 (T) mov r3,10h ;2 1117 080BEDA6 (T) mov r0,r3 ;2 1119 080BEDA8 (T) and r0,r1 ;2 1121 080BEDAA (T) cmp r0,0h ;2 1123 080BEDAC (T) beq 80BEE9Ah ;8 1131 // We pressed right 080BEDAE (T) mov r4,r7 ;2 1133 080BEDB0 (T) add r4,42h ;2 1135 080BEDB2 (T) ldrb r1,[r4] ;4 1139 r1 = cursor_delta 080BEDB4 (T) ldrh r0,[r7,34h] ;4 1143 r0 = cursor_x 080BEDB6 (T) add r1,r1,r0 ;2 1145 080BEDB8 (T) mov r9,r1 ;2 1147 r1 = r5 = r9 = cursor_x + cursor_delta 080BEDBA (T) mov r5,r9 ;2 1149 080BEDBC (T) strh r5,[r7,34h] ;5 1154 cursor_x += cursor_delta 080BEDBE (T) mov r6,34h ;2 1156 080BEDC0 (T) ldsh r1,[r7,r6] ;4 1160 r1 = cursor_x 080BEDC2 (T) mov r0,22h ;2 1162 080BEDC4 (T) ldsh r2,[r7,r0] ;4 1166 080BEDC6 (T) add r1,r1,r2 ;2 1168 r1 = cursor_x + window_x 080BEDC8 (T) mov r5,r7 ;2 1170 080BEDCA (T) add r5,40h ;2 1172 080BEDCC (T) mov r6,0h ;2 1174 080BEDCE (T) ldsh r0,[r5,r6] ;4 1178 r0 = base 080BEDD0 (T) sub r0,r1,r0 ;2 1180 r0 = cursor_x - base 080BEDD2 (T) ldrb r6,[r4] ;4 1184 cursor_delta 080BEDD4 (T) add r2,r2,r6 ;2 1186 r2 = window_x + cursor_delta 080BEDD6 (T) cmp r0,r2 ;2 1188 080BEDD8 (T) ble 80BEE06h ;8 1196 // If cursor_x-base > window_x+delta: 080BEDDA (T) mov r0,r8 ;2 1198 080BEDDC (T) and r0,r3 ;2 1200 080BEDDE (T) cmp r0,0h ;2 1202 080BEDE0 (T) beq 80BEDF0h ;8 1210 // If window flag set: 080BEDE2 (T) strh r6,[r7,34h] ;5 1215 080BEDE4 (T) mov r1,34h ;2 1217 080BEDE6 (T) ldsh r0,[r7,r1] ;4 1221 080BEDE8 (T) b 80BEDF8h ;8 1229 080BEDEA (T) lsl r0,r0,0h ;2 1231 080BEDEC (T) mov r5,0h ;2 1233 080BEDEE (T) lsl r0,r0,0Ch ;2 1235 // Else: 080BEDF0 (T) ldrh r0,[r5] ;4 1239 080BEDF2 (T) strh r0,[r7,34h] ;5 1244 080BEDF4 (T) mov r2,34h ;2 1246 080BEDF6 (T) ldsh r0,[r7,r2] ;4 1250 080BEDF8 (T) ldrb r1,[r4] ;4 1254 080BEDFA (T) bl 80F49D8h ;10 1264 080BEDFE (T) lsl r0,r0,10h ;2 1266 080BEE00 (T) lsr r0,r0,10h ;2 1268 080BEE02 (T) mov r10,r0 ;2 1270 col parity thing = cursor_x / cursor_delta 080BEE04 (T) b 80BEE9Ah ;8 1278 // Else: 080BEE06 (T) cmp r6,0h ;2 1280 080BEE08 (T) beq 80BEE16h ;8 1288 // If cursor_delta != 0, then col parity thing = (cursor_x - base) / cursor_delta 080BEE0A (T) mov r1,r6 ;2 1290 080BEE0C (T) bl 80F49D8h ;10 1300 r0 = (cursor_x - base) / cursor_delta 080BEE10 (T) lsl r0,r0,10h ;2 1302 080BEE12 (T) lsr r0,r0,10h ;2 1304 080BEE14 (T) mov r10,r0 ;2 1306 080BEE16 (T) mov r3,r10 ;2 1308 col parity 080BEE18 (T) lsl r0,r3,10h ;2 1310 080BEE1A (T) asr r0,r0,10h ;2 1312 080BEE1C (T) ldr r2,[sp,4h] ;4 1316 cursor_y * 2 080BEE1E (T) lsl r1,r2,10h ;2 1318 080BEE20 (T) asr r1,r1,10h ;2 1320 080BEE22 (T) add r0,r0,r1 ;2 1322 r0 = cursor_y * 2 + col 080BEE24 (T) lsl r0,r0,1h ;2 1324 080BEE26 (T) ldr r3,[sp] ;4 1328 080BEE28 (T) add r0,r0,r3 ;2 1330 080BEE2A (T) ldrh r0,[r0] ;6 1336 item at cursor location 080BEE2C (T) cmp r0,0h ;2 1338 080BEE2E (T) bne 80BEE9Ah ;8 1346 // If current item is null: 080BEE30 (T) ldr r0,=3002504h ;9 1355 080BEE32 (T) ldrh r1,[r0] ;6 1361 080BEE34 (T) mov r0,80h ;2 1363 080BEE36 (T) and r0,r1 ;2 1365 080BEE38 (T) cmp r0,0h ;2 1367 080BEE3A (T) beq 80BEE60h ;8 1375 // If shadow state down is pressed: 080BEE3C (T) mov r1,r9 ;2 1377 080BEE3E (T) sub r0,r1,r6 ;2 1379 080BEE40 (T) strh r0,[r7,34h] ;5 1384 cursor_x = prev cursor_x 080BEE42 (T) ldrb r0,[r4] ;4 1388 cursor_delta 080BEE44 (T) cmp r0,0h ;2 1390 080BEE46 (T) beq 80BEE90h ;8 1398 // If cursor_delta != 0: 080BEE48 (T) mov r2,34h ;2 1400 080BEE4A (T) ldsh r0,[r7,r2] ;4 1404 r0 = cursor_x 080BEE4C (T) mov r3,22h ;2 1406 080BEE4E (T) ldsh r1,[r7,r3] ;4 1410 r1 = window_x 080BEE50 (T) add r0,r0,r1 ;2 1412 r0 = cursor_x + window_x 080BEE52 (T) mov r6,0h ;2 1414 080BEE54 (T) ldsh r1,[r5,r6] ;4 1418 r1 = base 080BEE56 (T) sub r0,r0,r1 ;2 1420 r0 = cursor_x + window_x - base 080BEE58 (T) b 80BEE7Eh ;8 1428 080BEE5A (T) lsl r0,r0,0h ;2 1430 080BEE5C (T) mov r5,4h ;2 1432 080BEE5E (T) lsl r0,r0,0Ch ;2 1434 // Else: 080BEE60 (T) ldrh r1,[r7,36h] ;4 1438 080BEE62 (T) mov r2,36h ;2 1440 080BEE64 (T) ldsh r0,[r7,r2] ;4 1444 080BEE66 (T) cmp r0,0h ;2 1446 080BEE68 (T) ble 80BEE70h ;8 1454 // If cursor_y > 0: 080BEE6A (T) sub r0,r1,1 ;2 1456 080BEE6C (T) strh r0,[r7,36h] ;5 1461 080BEE6E (T) b 80BEE90h ;8 1469 // Else: 080BEE70 (T) ldrh r0,[r5] ;4 1473 080BEE72 (T) strh r0,[r7,34h] ;5 1478 080BEE74 (T) ldrb r0,[r4] ;4 1482 080BEE76 (T) cmp r0,0h ;2 1484 080BEE78 (T) beq 80BEE8Ch ;8 1492 // If cursor_delta != 0: 080BEE7A (T) mov r3,34h ;2 1494 080BEE7C (T) ldsh r0,[r7,r3] ;4 1498 080BEE7E (T) ldrb r1,[r4] ;4 1502 080BEE80 (T) bl 80F49D8h ;10 1512 080BEE84 (T) lsl r0,r0,10h ;2 1514 080BEE86 (T) lsr r0,r0,10h ;2 1516 080BEE88 (T) mov r10,r0 ;2 1518 080BEE8A (T) b 80BEE90h ;8 1526 080BEE8C (T) mov r4,0h ;2 1528 080BEE8E (T) mov r10,r4 ;2 1530 080BEE90 (T) mov r5,36h ;2 1532 080BEE92 (T) ldsh r0,[r7,r5] ;4 1536 080BEE94 (T) lsl r0,r0,11h ;2 1538 080BEE96 (T) lsr r0,r0,10h ;2 1540 080BEE98 (T) str r0,[sp,4h] ;5 1545 // Check for left 080BEE9A (T) ldr r6,=3002500h ;9 1554 080BEE9C (T) ldrh r1,[r6] ;4 1558 080BEE9E (T) mov r0,20h ;2 1560 080BEEA0 (T) and r0,r1 ;2 1562 080BEEA2 (T) cmp r0,0h ;2 1564 080BEEA4 (T) beq 80BEF6Ch ;8 1572 // We pressed left 080BEEA6 (T) mov r2,r7 ;2 1574 080BEEA8 (T) add r2,42h ;2 1576 080BEEAA (T) ldrb r0,[r2] ;4 1580 cursor_delta 080BEEAC (T) ldrh r1,[r7,34h] ;4 1584 cursor_x 080BEEAE (T) sub r1,r1,r0 ;2 1586 r1 = cursor_x - cursor_delta 080BEEB0 (T) strh r1,[r7,34h] ;5 1591 cursor_x -= cursor_delta 080BEEB2 (T) mov r0,34h ;2 1593 080BEEB4 (T) ldsh r6,[r7,r0] ;4 1597 cursor_x 080BEEB6 (T) mov r3,22h ;2 1599 080BEEB8 (T) ldsh r1,[r7,r3] ;4 1603 window_x 080BEEBA (T) add r0,r6,r1 ;2 1605 r0 = window_x + cursor_x 080BEEBC (T) mov r4,r7 ;2 1607 080BEEBE (T) add r4,40h ;2 1609 r4 = &base 080BEEC0 (T) mov r5,0h ;2 1611 080BEEC2 (T) ldsh r3,[r4,r5] ;4 1615 r3 = base 080BEEC4 (T) sub r0,r0,r3 ;2 1617 r0 = window_x + cursor_x - base 080BEEC6 (T) cmp r0,r1 ;2 1619 080BEEC8 (T) bge 80BEF2Ch ;8 1627 // If cursor_x < base: 080BEECA (T) mov r0,10h ;2 1629 080BEECC (T) mov r6,r8 ;2 1631 080BEECE (T) and r0,r6 ;2 1633 080BEED0 (T) cmp r0,0h ;2 1635 080BEED2 (T) beq 80BEEE4h ;8 1643 // If window flag set: 080BEED4 (T) ldrh r0,[r4] ;4 1647 080BEED6 (T) strh r0,[r7,34h] ;5 1652 cursor_x = base 080BEED8 (T) mov r0,0h ;2 1654 080BEEDA (T) mov r10,r0 ;2 1656 col = 0 080BEEDC (T) b 80BEF6Ch ;8 1664 080BEEDE (T) lsl r0,r0,0h ;2 1666 080BEEE0 (T) mov r5,0h ;2 1668 080BEEE2 (T) lsl r0,r0,0Ch ;2 1670 // Else: 080BEEE4 (T) ldrh r0,[r4] ;4 1674 080BEEE6 (T) ldrb r1,[r2] ;4 1678 080BEEE8 (T) add r0,r0,r1 ;2 1680 080BEEEA (T) strh r0,[r7,34h] ;5 1685 080BEEEC (T) ldrb r0,[r2] ;4 1689 080BEEEE (T) cmp r0,0h ;2 1691 080BEEF0 (T) beq 80BEF08h ;8 1699 // If cursor_delta != 0: 080BEEF2 (T) mov r3,34h ;2 1701 080BEEF4 (T) ldsh r0,[r7,r3] ;4 1705 080BEEF6 (T) mov r5,22h ;2 1707 080BEEF8 (T) ldsh r1,[r7,r5] ;4 1711 080BEEFA (T) add r0,r0,r1 ;2 1713 080BEEFC (T) ldrb r1,[r2] ;4 1717 080BEEFE (T) bl 80F49D8h ;10 1727 080BEF02 (T) lsl r0,r0,10h ;2 1729 080BEF04 (T) lsr r0,r0,10h ;2 1731 080BEF06 (T) mov r10,r0 ;2 1733 080BEF08 (T) mov r6,r10 ;2 1735 080BEF0A (T) lsl r0,r6,10h ;2 1737 080BEF0C (T) asr r0,r0,10h ;2 1739 080BEF0E (T) ldr r2,[sp,4h] ;4 1743 080BEF10 (T) lsl r1,r2,10h ;2 1745 080BEF12 (T) asr r1,r1,10h ;2 1747 080BEF14 (T) add r0,r0,r1 ;2 1749 080BEF16 (T) lsl r0,r0,1h ;2 1751 080BEF18 (T) ldr r3,[sp] ;4 1755 080BEF1A (T) add r0,r0,r3 ;2 1757 080BEF1C (T) ldrh r0,[r0] ;6 1763 080BEF1E (T) cmp r0,0h ;2 1765 080BEF20 (T) bne 80BEF6Ch ;8 1773 // If item is null: 080BEF22 (T) ldrh r0,[r4] ;4 1777 080BEF24 (T) strh r0,[r7,34h] ;5 1782 080BEF26 (T) mov r4,0h ;2 1784 080BEF28 (T) mov r10,r4 ;2 1786 080BEF2A (T) b 80BEF6Ch ;8 1794 // Else: 080BEF2C (T) ldrb r0,[r2] ;4 1798 080BEF2E (T) cmp r0,0h ;2 1800 080BEF30 (T) beq 80BEF42h ;8 1808 // If cursor_delta != 0: 080BEF32 (T) sub r0,r6,r1 ;2 1810 080BEF34 (T) sub r0,r0,r3 ;2 1812 080BEF36 (T) ldrb r1,[r2] ;4 1816 080BEF38 (T) bl 80F49D8h ;10 1826 080BEF3C (T) lsl r0,r0,10h ;2 1828 080BEF3E (T) lsr r0,r0,10h ;2 1830 080BEF40 (T) mov r10,r0 ;2 1832 col = (cursor_x - window_x - cursor_x_base) / cursor_x_delta 080BEF42 (T) mov r5,r10 ;2 1834 080BEF44 (T) lsl r0,r5,10h ;2 1836 080BEF46 (T) asr r0,r0,10h ;2 1838 080BEF48 (T) ldr r6,[sp,4h] ;4 1842 080BEF4A (T) lsl r1,r6,10h ;2 1844 080BEF4C (T) asr r1,r1,10h ;2 1846 080BEF4E (T) add r0,r0,r1 ;2 1848 080BEF50 (T) lsl r0,r0,1h ;2 1850 080BEF52 (T) ldr r1,[sp] ;4 1854 080BEF54 (T) add r0,r0,r1 ;2 1856 080BEF56 (T) ldrh r0,[r0] ;6 1862 080BEF58 (T) cmp r0,0h ;2 1864 080BEF5A (T) bne 80BEF6Ch ;8 1872 // If item is null: 080BEF5C (T) ldrh r0,[r7,36h] ;4 1876 080BEF5E (T) sub r0,1h ;2 1878 080BEF60 (T) strh r0,[r7,36h] ;5 1883 080BEF62 (T) mov r2,36h ;2 1885 080BEF64 (T) ldsh r0,[r7,r2] ;4 1889 080BEF66 (T) lsl r0,r0,11h ;2 1891 080BEF68 (T) lsr r0,r0,10h ;2 1893 080BEF6A (T) str r0,[sp,4h] ;5 1898 080BEF6C (T) mov r0,80h ;2 1900 080BEF6E (T) lsl r0,r0,4h ;2 1902 080BEF70 (T) mov r3,r8 ;2 1904 080BEF72 (T) and r0,r3 ;2 1906 080BEF74 (T) cmp r0,0h ;2 1908 080BEF76 (T) bne 80BEF7Ah ;8 1916 080BEF78 (T) b 80BF174h ;8 1924 // If window flag 0x800 is set: 080BEF7A (T) ldr r0,=0FFFFF7FFh ;9 1933 080BEF7C (T) and r3,r0 ;2 1935 080BEF7E (T) str r3,[r7] ;5 1940 unset first flag 080BEF80 (T) mov r4,24h ;2 1942 080BEF82 (T) ldsh r0,[r7,r4] ;4 1946 080BEF84 (T) sub r0,1h ;2 1948 window_y - 1 080BEF86 (T) lsl r0,r0,6h ;2 1950 080BEF88 (T) ldr r5,=3005270h ;9 1959 080BEF8A (T) ldr r1,[r5] ;4 1963 080BEF8C (T) add r1,r1,r0 ;2 1965 080BEF8E (T) mov r6,22h ;2 1967 080BEF90 (T) ldsh r0,[r7,r6] ;4 1971 080BEF92 (T) lsl r0,r0,1h ;2 1973 080BEF94 (T) add r6,r1,r0 ;2 1975 tilemap index = (window_y - 1) * 32 + window_x 080BEF96 (T) ldr r1,=30051ECh ;9 1984 080BEF98 (T) ldrh r0,[r1] ;4 1988 080BEF9A (T) add r0,0B3h ;2 1990 080BEF9C (T) ldr r2,=3005228h ;9 1999 080BEF9E (T) ldrh r1,[r2] ;4 2003 080BEFA0 (T) orr r0,r1 ;2 2005 080BEFA2 (T) strh r0,[r6] ;5 2010 draw partial border tile before name // Draw character name 080BEFA4 (T) add r6,2h ;2 2012 080BEFA6 (T) ldr r2,=8B1B8B0h ;9 2021 080BEFA8 (T) ldr r4,=m2_active_window_pc ;9 2030 080BEFAA (T) mov r5,0h ;2 2032 080BEFAC (T) ldsh r3,[r4,r5] ;4 2036 080BEFAE (T) lsl r1,r3,1h ;2 2038 080BEFB0 (T) add r2,r1,r2 ;2 2040 080BEFB2 (T) ldr r5,=30051ECh ;9 2049 080BEFB4 (T) ldrh r0,[r5] ;4 2053 080BEFB6 (T) ldrh r2,[r2] ;4 2057 080BEFB8 (T) add r0,r0,r2 ;2 2059 080BEFBA (T) ldr r5,=3005228h ;9 2068 080BEFBC (T) ldrh r2,[r5] ;4 2072 080BEFBE (T) orr r0,r2 ;2 2074 080BEFC0 (T) lsl r0,r0,10h ;2 2076 080BEFC2 (T) lsr r5,r0,10h ;2 2078 080BEFC4 (T) mov r0,0h ;2 2080 080BEFC6 (T) mov r8,r0 ;2 2082 080BEFC8 (T) ldr r0,=3001D40h ;9 2091 080BEFCA (T) add r1,r1,r3 ;2 2093 080BEFCC (T) lsl r1,r1,1h ;2 2095 080BEFCE (T) add r1,1h ;2 2097 080BEFD0 (T) mov r3,0E8h ;2 2099 080BEFD2 (T) lsl r3,r3,1h ;2 2101 080BEFD4 (T) add r2,r0,r3 ;2 2103 080BEFD6 (T) add r1,r1,r2 ;2 2105 080BEFD8 (T) ldrb r0,[r1] ;4 2109 080BEFDA (T) ldr r1,[sp,8h] ;4 2113 weird value 080BEFDC (T) lsl r1,r1,10h ;2 2115 080BEFDE (T) str r1,[sp,1Ch] ;5 2120 080BEFE0 (T) cmp r0,0FFh ;2 2122 080BEFE2 (T) beq 80BF01Ah ;8 2130 080BEFE4 (T) mov r3,r2 ;2 2132 080BEFE6 (T) strh r5,[r6] ;5 2137 080BEFE8 (T) add r6,2h ;2 2139 080BEFEA (T) add r0,r5,1 ;2 2141 080BEFEC (T) lsl r0,r0,10h ;2 2143 080BEFEE (T) lsr r5,r0,10h ;2 2145 080BEFF0 (T) mov r2,r8 ;2 2147 080BEFF2 (T) lsl r0,r2,10h ;2 2149 080BEFF4 (T) mov r1,80h ;2 2151 080BEFF6 (T) lsl r1,r1,9h ;2 2153 080BEFF8 (T) add r0,r0,r1 ;2 2155 080BEFFA (T) lsr r2,r0,10h ;2 2157 080BEFFC (T) mov r8,r2 ;2 2159 080BEFFE (T) asr r2,r0,10h ;2 2161 080BF000 (T) cmp r2,3h ;2 2163 080BF002 (T) bgt 80BF01Ah ;8 2171 080BF004 (T) mov r1,0h ;2 2173 080BF006 (T) ldsh r0,[r4,r1] ;4 2177 080BF008 (T) lsl r1,r0,1h ;2 2179 080BF00A (T) add r1,r1,r0 ;2 2181 080BF00C (T) lsl r1,r1,1h ;2 2183 080BF00E (T) add r1,1h ;2 2185 080BF010 (T) add r1,r2,r1 ;2 2187 080BF012 (T) add r1,r1,r3 ;2 2189 080BF014 (T) ldrb r0,[r1] ;4 2193 080BF016 (T) cmp r0,0FFh ;2 2195 080BF018 (T) bne 80BEFE6h ;8 2203 080BF01A (T) ldr r2,=30051ECh ;9 2212 080BF01C (T) ldrh r0,[r2] ;4 2216 080BF01E (T) add r0,0B3h ;2 2218 080BF020 (T) ldr r3,=3005228h ;9 2227 080BF022 (T) ldrh r1,[r3] ;4 2231 080BF024 (T) orr r0,r1 ;2 2233 080BF026 (T) mov r4,80h ;2 2235 080BF028 (T) lsl r4,r4,3h ;2 2237 080BF02A (T) mov r1,r4 ;2 2239 080BF02C (T) orr r0,r1 ;2 2241 080BF02E (T) strh r0,[r6] ;5 2246 080BF030 (T) add r6,2h ;2 2248 080BF032 (T) ldrh r0,[r2] ;4 2252 080BF034 (T) add r0,96h ;2 2254 080BF036 (T) ldrh r1,[r3] ;4 2258 080BF038 (T) orr r0,r1 ;2 2260 080BF03A (T) mov r5,80h ;2 2262 080BF03C (T) lsl r5,r5,4h ;2 2264 080BF03E (T) mov r1,r5 ;2 2266 080BF040 (T) orr r0,r1 ;2 2268 080BF042 (T) lsl r0,r0,10h ;2 2270 080BF044 (T) lsr r5,r0,10h ;2 2272 080BF046 (T) strh r5,[r6] ;5 2277 080BF048 (T) add r6,2h ;2 2279 080BF04A (T) strh r5,[r6] ;5 2284 080BF04C (T) strh r5,[r6,2h] ;5 2289 // Clear window 080BF04E (T) mov r0,r7 ;2 2291 080BF050 (T) bl m2_clearwindowtiles 080BF054 (T) mov r6,0h ;2 2297 080BF056 (T) mov r8,r6 ;2 2299 080BF058 (T) ldr r0,[sp,1Ch] ;4 2303 weird value << 16 080BF05A (T) cmp r0,0h ;2 2305 080BF05C (T) bgt 80BF060h ;8 2313 080BF05E (T) b 80BF174h ;8 2321 // If weird value > 0: print item names? This looks like a disaster but I think that's all it's doing 080BF060 (T) ldr r1,=3005228h ;9 2330 080BF062 (T) mov r9,r1 ;2 2332 r9 = palette pointer 080BF064 (T) mov r3,24h ;2 2334 080BF066 (T) ldsh r2,[r7,r3] ;4 2338 r2 = window_y 080BF068 (T) mov r4,r8 ;2 2340 080BF06A (T) lsl r5,r4,10h ;2 2342 080BF06C (T) asr r4,r5,10h ;2 2344 080BF06E (T) lsr r1,r5,1Fh ;2 2346 080BF070 (T) add r1,r4,r1 ;2 2348 080BF072 (T) asr r1,r1,1h ;2 2350 080BF074 (T) lsl r0,r1,1h ;2 2352 080BF076 (T) add r2,r2,r0 ;2 2354 080BF078 (T) lsl r2,r2,6h ;2 2356 080BF07A (T) ldr r6,=3005270h ;9 2365 080BF07C (T) ldr r3,[r6] ;4 2369 080BF07E (T) add r3,r3,r2 ;2 2371 080BF080 (T) mov r2,22h ;2 2373 080BF082 (T) ldsh r0,[r7,r2] ;4 2377 080BF084 (T) lsl r0,r0,1h ;2 2379 080BF086 (T) add r3,r3,r0 ;2 2381 080BF088 (T) lsl r1,r1,1h ;2 2383 080BF08A (T) sub r1,r4,r1 ;2 2385 080BF08C (T) lsl r1,r1,10h ;2 2387 080BF08E (T) asr r1,r1,10h ;2 2389 080BF090 (T) mov r0,16h ;2 2391 080BF092 (T) mul r0,r1 ;6 2397 080BF094 (T) add r0,2h ;2 2399 080BF096 (T) add r6,r3,r0 ;2 2401 080BF098 (T) mov r3,3Ch ;2 2403 080BF09A (T) ldsh r0,[r7,r3] ;4 2407 080BF09C (T) lsl r4,r4,1h ;2 2409 080BF09E (T) lsl r0,r0,1h ;2 2411 080BF0A0 (T) ldr r1,[sp] ;4 2415 080BF0A2 (T) add r0,r0,r1 ;2 2417 080BF0A4 (T) add r4,r4,r0 ;2 2419 080BF0A6 (T) mov r3,0h ;2 2421 080BF0A8 (T) ldsh r2,[r4,r3] ;4 2425 080BF0AA (T) ldr r0,=8B1AF94h ;9 2434 080BF0AC (T) ldr r1,=8B1A694h ;9 2443 080BF0AE (T) bl m2_strlookup ;10 2453 080BF0B2 (T) mov r3,r0 ;2 2455 080BF0B4 (T) ldrb r0,[r3,1h] ;4 2459 080BF0B6 (T) mov r4,r5 ;2 2461 080BF0B8 (T) b 80BF116h ;8 2469 080BF0BA (T) lsl r0,r0,0h ;2 2471 080BF0BC (T) bl 80BF0BEh ;10 2481 080BF0C0 (T) strh r0,[r6,r1] ;5 2486 080BF0C2 (T) lsl r0,r0,0Ch ;2 2488 080BF0C4 (T) str r4,[r5,r7] ;6 2494 080BF0C6 (T) lsl r0,r0,0Ch ;2 2496 080BF0C8 (T) strh r0,[r5,r0] ;5 2501 080BF0CA (T) lsl r0,r0,0Ch ;2 2503 080BF0CC (T) ???? ;0 2503 080BF0CE (T) lsr r1,r6,2h ;2 2505 080BF0D0 (T) strh r4,[r4,r1] ;5 2510 080BF0D2 (T) lsl r0,r0,0Ch ;2 2512 080BF0D4 (T) add r0,r0,5 ;2 2514 080BF0D6 (T) lsl r0,r0,0Ch ;2 2516 080BF0D8 (T) add r7,sp,250h ;2 2518 080BF0DA (T) lsr r1,r6,2h ;2 2520 080BF0DC (T) add r6,=80BF330h ;2 2522 080BF0DE (T) lsr r1,r6,2h ;2 2524 080BF0E0 (T) add r3,1h ;2 2526 080BF0E2 (T) ldr r0,=8B1B4B0h ;9 2535 080BF0E4 (T) ldrb r1,[r3] ;4 2539 080BF0E6 (T) lsl r1,r1,1h ;2 2541 080BF0E8 (T) add r1,r1,r0 ;2 2543 080BF0EA (T) ldr r0,=30051ECh ;9 2552 080BF0EC (T) ldrh r0,[r0] ;6 2558 080BF0EE (T) ldrh r1,[r1] ;4 2562 080BF0F0 (T) add r0,r0,r1 ;2 2564 080BF0F2 (T) lsl r0,r0,10h ;2 2566 080BF0F4 (T) lsr r5,r0,10h ;2 2568 080BF0F6 (T) mov r0,r9 ;2 2570 080BF0F8 (T) ldrh r1,[r0] ;6 2576 080BF0FA (T) mov r0,r5 ;2 2578 080BF0FC (T) orr r0,r1 ;2 2580 080BF0FE (T) nop ;2 2582 080BF100 (T) mov r2,r6 ;2 2584 080BF102 (T) add r2,40h ;2 2586 080BF104 (T) mov r0,r5 ;2 2588 080BF106 (T) add r0,20h ;2 2590 080BF108 (T) mov r5,r9 ;2 2592 080BF10A (T) ldrh r1,[r5] ;4 2596 080BF10C (T) orr r0,r1 ;2 2598 080BF10E (T) nop ;2 2600 080BF110 (T) add r6,2h ;2 2602 080BF112 (T) add r3,1h ;2 2604 080BF114 (T) ldrb r0,[r3,1h] ;4 2608 080BF116 (T) cmp r0,0FFh ;2 2610 080BF118 (T) bne 80BF0E2h ;8 2618 080BF11A (T) ldrb r0,[r3] ;4 2622 080BF11C (T) cmp r0,0h ;2 2624 080BF11E (T) bne 80BF0E0h ;8 2632 080BF120 (T) ldrh r0,[r7,3Ch] ;4 2636 080BF122 (T) add r0,r8 ;2 2638 080BF124 (T) add r0,1h ;2 2640 080BF126 (T) lsl r0,r0,18h ;2 2642 080BF128 (T) lsr r0,r0,18h ;2 2644 080BF12A (T) bl m2_isequipped ;10 2654 080BF12E (T) lsl r0,r0,18h ;2 2656 080BF130 (T) lsr r0,r0,18h ;2 2658 080BF132 (T) cmp r0,1h ;2 2660 080BF134 (T) bne 80BF15Eh ;8 2668 080BF136 (T) ldr r0,=30051ECh ;9 2677 080BF138 (T) ldrh r0,[r0] ;6 2683 080BF13A (T) mov r1,0EFh ;2 2685 080BF13C (T) lsl r1,r1,1h ;2 2687 080BF13E (T) add r0,r0,r1 ;2 2689 080BF140 (T) lsl r0,r0,10h ;2 2691 080BF142 (T) lsr r5,r0,10h ;2 2693 080BF144 (T) mov r2,r9 ;2 2695 080BF146 (T) ldrh r1,[r2] ;4 2699 080BF148 (T) mov r0,r5 ;2 2701 080BF14A (T) orr r0,r1 ;2 2703 080BF14C (T) nop ;2 2705 080BF14E (T) mov r2,r6 ;2 2707 080BF150 (T) add r2,40h ;2 2709 080BF152 (T) mov r0,r5 ;2 2711 080BF154 (T) add r0,20h ;2 2713 080BF156 (T) mov r3,r9 ;2 2715 080BF158 (T) ldrh r1,[r3] ;4 2719 080BF15A (T) orr r0,r1 ;2 2721 080BF15C (T) nop ;2 2723 080BF15E (T) mov r5,80h ;2 2725 080BF160 (T) lsl r5,r5,9h ;2 2727 080BF162 (T) add r1,r4,r5 ;2 2729 080BF164 (T) lsr r6,r1,10h ;2 2731 080BF166 (T) mov r8,r6 ;2 2733 080BF168 (T) asr r1,r1,10h ;2 2735 080BF16A (T) ldr r2,[sp,1Ch] ;4 2739 080BF16C (T) asr r0,r2,0Fh ;2 2741 080BF16E (T) cmp r1,r0 ;2 2743 080BF170 (T) bge 80BF174h ;8 2751 080BF172 (T) b 80BF064h ;8 2759 // Check shadow state 080BF174 (T) ldr r0,=3002504h ;9 2768 080BF176 (T) ldrh r1,[r0] ;6 2774 080BF178 (T) mov r0,0F0h ;2 2776 080BF17A (T) and r0,r1 ;2 2778 080BF17C (T) cmp r0,0h ;2 2780 080BF17E (T) beq 80BF1E2h ;8 2788 // If any directions were pressed: 080BF180 (T) mov r0,0h ;2 2790 080BF182 (T) strh r0,[r7,32h] ;5 2795 reset counter 080BF184 (T) ldr r0,=3002500h ;9 2804 080BF186 (T) ldrh r1,[r0] ;6 2810 080BF188 (T) mov r0,0C0h ;2 2812 080BF18A (T) and r0,r1 ;2 2814 080BF18C (T) cmp r0,0h ;2 2816 080BF18E (T) beq 80BF1BCh ;8 2824 // If up or down pressed: 080BF190 (T) ldr r3,[sp,10h] ;4 2828 080BF192 (T) lsl r0,r3,10h ;2 2830 080BF194 (T) asr r0,r0,10h ;2 2832 080BF196 (T) mov r4,36h ;2 2834 080BF198 (T) ldsh r1,[r7,r4] ;4 2838 080BF19A (T) cmp r0,r1 ;2 2840 080BF19C (T) beq 80BF1DAh ;8 2848 080BF19E (T) ldr r0,=12Fh ;9 2857 080BF1A0 (T) bl m2_soundeffect ;10 2867 080BF1A4 (T) b 80BF1DAh ;8 2875 080BF1A6 (T) lsl r0,r0,0h ;2 2877 080BF1A8 (T) push r4,r5,r7 ;18 2895 080BF1AA (T) lsr r1,r6,2h ;2 2897 080BF1AC (T) str r4,[r5,r7] ;6 2903 080BF1AE (T) lsl r0,r0,0Ch ;2 2905 080BF1B0 (T) mov r5,4h ;2 2907 080BF1B2 (T) lsl r0,r0,0Ch ;2 2909 080BF1B4 (T) mov r5,0h ;2 2911 080BF1B6 (T) lsl r0,r0,0Ch ;2 2913 080BF1B8 (T) lsl r7,r5,4h ;2 2915 080BF1BA (T) lsl r0,r0,0h ;2 2917 // If not up or down pressed: 080BF1BC (T) mov r0,30h ;2 2919 080BF1BE (T) and r0,r1 ;2 2921 080BF1C0 (T) cmp r0,0h ;2 2923 080BF1C2 (T) beq 80BF1DAh ;8 2931 080BF1C4 (T) ldr r5,[sp,0Ch] ;4 2935 080BF1C6 (T) lsl r0,r5,10h ;2 2937 080BF1C8 (T) asr r0,r0,10h ;2 2939 080BF1CA (T) mov r6,34h ;2 2941 080BF1CC (T) ldsh r1,[r7,r6] ;4 2945 080BF1CE (T) cmp r0,r1 ;2 2947 080BF1D0 (T) beq 80BF1DAh ;8 2955 080BF1D2 (T) mov r0,97h ;2 2957 080BF1D4 (T) lsl r0,r0,1h ;2 2959 080BF1D6 (T) bl m2_soundeffect ;10 2969 // Shadow directions pressed: 080BF1DA (T) ldr r0,[r7] ;4 2973 080BF1DC (T) mov r1,10h ;2 2975 080BF1DE (T) orr r0,r1 ;2 2977 080BF1E0 (T) b 80BF1EAh ;8 2985 set flag 0x10 // No shadow directions pressed: 080BF1E2 (T) ldr r0,[r7] ;4 2989 080BF1E4 (T) mov r1,11h ;2 2991 080BF1E6 (T) neg r1,r1 ;2 2993 080BF1E8 (T) and r0,r1 ;2 2995 unsert flag 0x10 080BF1EA (T) str r0,[r7] ;5 3000 // Check for B/select 080BF1EC (T) ldr r0,=3002500h ;9 3009 080BF1EE (T) ldrh r1,[r0] ;6 3015 080BF1F0 (T) mov r0,6h ;2 3017 080BF1F2 (T) and r0,r1 ;2 3019 080BF1F4 (T) cmp r0,0h ;2 3021 080BF1F6 (T) beq 80BF21Ch ;8 3029 // B/select pressed 080BF1F8 (T) mov r0,0h ;2 3031 080BF1FA (T) strh r0,[r7,32h] ;5 3036 080BF1FC (T) mov r0,97h ;2 3038 080BF1FE (T) lsl r0,r0,1h ;2 3040 080BF200 (T) bl m2_soundeffect ;10 3050 080BF204 (T) mov r0,0h ;2 3052 080BF206 (T) bl 80A334Ch ;10 3062 080BF20A (T) mov r0,0h ;2 3064 080BF20C (T) bl 80A3384h ;10 3074 080BF210 (T) mov r0,1h ;2 3076 080BF212 (T) neg r0,r0 ;2 3078 080BF214 (T) b 80BF2F0h ;8 3086 080BF216 (T) lsl r0,r0,0h ;2 3088 080BF218 (T) mov r5,0h ;2 3090 080BF21A (T) lsl r0,r0,0Ch ;2 3092 // Check for A/L 080BF21C (T) ldr r0,=201h ;9 3101 080BF21E (T) and r0,r1 ;2 3103 080BF220 (T) cmp r0,0h ;2 3105 080BF222 (T) beq 80BF268h ;8 3113 // A/L pressed 080BF224 (T) ldr r0,=0FFFFh ;9 3122 080BF226 (T) strh r0,[r7,32h] ;5 3127 080BF228 (T) ldr r0,=12Dh ;9 3136 080BF22A (T) bl m2_soundeffect ;10 3146 080BF22E (T) ldr r0,=m2_active_window_pc ;9 3155 080BF230 (T) mov r1,0h ;2 3157 080BF232 (T) ldsh r0,[r0,r1] ;4 3161 080BF234 (T) add r0,1h ;2 3163 080BF236 (T) bl 80A334Ch ;10 3173 080BF23A (T) mov r2,r10 ;2 3175 cursor_col 080BF23C (T) lsl r4,r2,10h ;2 3177 080BF23E (T) asr r4,r4,10h ;2 3179 080BF240 (T) ldr r3,[sp,4h] ;4 3183 cursor_y * 2 080BF242 (T) lsl r0,r3,10h ;2 3185 080BF244 (T) asr r0,r0,10h ;2 3187 080BF246 (T) add r4,r4,r0 ;2 3189 cursor_col + cursor_y * 2 080BF248 (T) add r4,1h ;2 3191 080BF24A (T) mov r0,r4 ;2 3193 080BF24C (T) bl 80A3384h ;10 3203 080BF250 (T) lsl r4,r4,10h ;2 3205 080BF252 (T) asr r4,r4,10h ;2 3207 080BF254 (T) mov r0,r4 ;2 3209 080BF256 (T) b 80BF2F0h ;8 3217 080BF258 (T) lsl r1,r0,8h ;2 3219 080BF25A (T) lsl r0,r0,0h ;2 3221 080BF25C (T) bl lr+0FFEh ;10 3231 080BF25E (T) lsl r0,r0,0h ;2 3233 080BF260 (T) lsl r5,r5,4h ;2 3235 080BF262 (T) lsl r0,r0,0h ;2 3237 080BF264 (T) strh r4,[r4,r1] ;5 3242 080BF266 (T) lsl r0,r0,0Ch ;2 3244 080BF268 (T) ldrh r3,[r7,32h] ;4 3248 080BF26A (T) mov r4,32h ;2 3250 080BF26C (T) ldsh r1,[r7,r4] ;4 3254 080BF26E (T) mov r0,1h ;2 3256 080BF270 (T) neg r0,r0 ;2 3258 080BF272 (T) cmp r1,r0 ;2 3260 080BF274 (T) beq 80BF2EEh ;8 3268 // If counter != 0xFFFF: 080BF276 (T) add r3,1h ;2 3270 r3 is the unsigned counter 080BF278 (T) strh r3,[r7,32h] ;5 3275 increment counter 080BF27A (T) ldr r2,=3005270h ;9 3284 080BF27C (T) mov r5,24h ;2 3286 080BF27E (T) ldsh r1,[r7,r5] ;4 3290 080BF280 (T) mov r6,36h ;2 3292 080BF282 (T) ldsh r0,[r7,r6] ;4 3296 080BF284 (T) lsl r0,r0,1h ;2 3298 080BF286 (T) add r1,r1,r0 ;2 3300 080BF288 (T) lsl r1,r1,6h ;2 3302 080BF28A (T) ldr r2,[r2] ;4 3306 080BF28C (T) add r2,r2,r1 ;2 3308 080BF28E (T) mov r1,22h ;2 3310 080BF290 (T) ldsh r0,[r7,r1] ;4 3314 080BF292 (T) mov r4,34h ;2 3316 080BF294 (T) ldsh r1,[r7,r4] ;4 3320 080BF296 (T) add r0,r0,r1 ;2 3322 080BF298 (T) lsl r0,r0,1h ;2 3324 080BF29A (T) add r6,r2,r0 ;2 3326 tilemap pointer to cursor location 080BF29C (T) lsl r3,r3,10h ;2 3328 080BF29E (T) asr r3,r3,10h ;2 3330 080BF2A0 (T) cmp r3,7h ;2 3332 080BF2A2 (T) bgt 80BF2C8h ;8 3340 // If counter <= 7: draw larger cursor (tile 0x99) 080BF2A4 (T) ldr r3,=30051ECh ;9 3349 080BF2A6 (T) ldrh r0,[r3] ;4 3353 080BF2A8 (T) add r0,99h ;2 3355 080BF2AA (T) ldr r2,=3005228h ;9 3364 080BF2AC (T) ldrh r1,[r2] ;4 3368 080BF2AE (T) orr r0,r1 ;2 3370 080BF2B0 (T) strh r0,[r6] ;5 3375 080BF2B2 (T) add r6,40h ;2 3377 080BF2B4 (T) ldrh r0,[r3] ;4 3381 080BF2B6 (T) add r0,0B9h ;2 3383 080BF2B8 (T) b 80BF2DCh ;8 3391 080BF2BA (T) lsl r0,r0,0h ;2 3393 080BF2BC (T) strh r0,[r6,r1] ;5 3398 080BF2BE (T) lsl r0,r0,0Ch ;2 3400 080BF2C0 (T) str r4,[r5,r7] ;6 3406 080BF2C2 (T) lsl r0,r0,0Ch ;2 3408 080BF2C4 (T) strh r0,[r5,r0] ;5 3413 080BF2C6 (T) lsl r0,r0,0Ch ;2 3415 // Else: draw smaller cursor (tile 0x9A) 080BF2C8 (T) ldr r3,=30051ECh ;9 3424 080BF2CA (T) ldrh r0,[r3] ;4 3428 080BF2CC (T) add r0,9Ah ;2 3430 080BF2CE (T) ldr r2,=3005228h ;9 3439 080BF2D0 (T) ldrh r1,[r2] ;4 3443 080BF2D2 (T) orr r0,r1 ;2 3445 080BF2D4 (T) strh r0,[r6] ;5 3450 080BF2D6 (T) add r6,40h ;2 3452 080BF2D8 (T) ldrh r0,[r3] ;4 3456 080BF2DA (T) add r0,0BAh ;2 3458 080BF2DC (T) ldrh r1,[r2] ;4 3462 080BF2DE (T) orr r0,r1 ;2 3464 080BF2E0 (T) strh r0,[r6] ;5 3469 draw bottom half of cursor // If counter > 0x10, set to 0 080BF2E2 (T) mov r5,32h ;2 3471 080BF2E4 (T) ldsh r0,[r7,r5] ;4 3475 080BF2E6 (T) cmp r0,10h ;2 3477 080BF2E8 (T) ble 80BF2EEh ;8 3485 080BF2EA (T) mov r0,0h ;2 3487 080BF2EC (T) strh r0,[r7,32h] ;5 3492 // Return 0 080BF2EE (T) mov r0,0h ;2 3494 080BF2F0 (T) add sp,20h ;2 3496 080BF2F2 (T) pop r3-r5 ;6 3502 080BF2F4 (T) mov r8,r3 ;2 3504 080BF2F6 (T) mov r9,r4 ;2 3506 080BF2F8 (T) mov r10,r5 ;2 3508 080BF2FA (T) pop r4-r7 ;7 3515 080BF2FC (T) pop r1 ;4 3519 080BF2FE (T) bx r1 ;8 3527