m2_drawwindow: // r0: window pointer 080C87D0 (T) push {r4-r7,r14} 080C87D2 (T) mov r7,r10 080C87D4 (T) mov r6,r9 080C87D6 (T) mov r5,r8 080C87D8 (T) push {r5-r7} 080C87DA (T) mov r6,r0 // Compute tilemap pointer 080C87DC (T) ldr r4,=#0x3005270 080C87DE (T) mov r1,#0x24 080C87E0 (T) ldsh r0,[r6,r1] // r0 = window_y 080C87E2 (T) lsl r0,r0,#0x6 080C87E4 (T) ldr r1,[r4] // r1 = tilemap pointer 080C87E6 (T) add r1,r1,r0 080C87E8 (T) mov r2,#0x22 080C87EA (T) ldsh r0,[r6,r2] // r0 = window_x 080C87EC (T) lsl r0,r0,#0x1 080C87EE (T) add r5,r1,r0 // r5 = tilemap + (window_y * 64) + (window_x * 2) // Prepare tile 0x1FF: r0 = r8 = 0xE000 | (0x1FF + 0x100) = 0xE2FF 080C87F0 (T) mov r3,#0x0 080C87F2 (T) mov r12,r3 080C87F4 (T) mov r9,r3 080C87F6 (T) ldr r3,=#0x30051EC 080C87F8 (T) ldr r1,=#0x1FF 080C87FA (T) mov r0,r1 080C87FC (T) ldrh r2,[r3] 080C87FE (T) add r0,r0,r2 080C8800 (T) ldr r2,=#0x3005228 080C8802 (T) ldrh r1,[r2] 080C8804 (T) orr r0,r1 080C8806 (T) lsl r0,r0,#0x10 080C8808 (T) lsr r0,r0,#0x10 080C880A (T) mov r8,r0 int current_x = 0; int current_y = 0; int tilemap = ldr[0x3005270]; u16 *ptr = tilemap + (window_y * 64) + (window_x * 2); for (int current_area = 0; current_area < window_area; current_area++) { if (current_x >= window_width || window_x + current_x > 0x1F) { if (current_y >= window_height || window_y + current_y > 0x1F) break; // 80C884A current_x = 0; current_y++; int y = current_y + window_y; *ptr = tilemap + (y * 64) + (window_x * 2); } *ptr = 0xE2FF; current_x++; ptr += 2; } 080C880C (T) mov r7,#0x0 080C880E (T) mov r1,#0x20 080C8810 (T) ldsh r0,[r6,r1] // window area 080C8812 (T) mov r10,r4 // 0x3005270 080C8814 (T) cmp r7,r0 080C8816 (T) bge #0x80C888C 080C8818 (T) mov r2,r10 080C881A (T) mov r3,r12 // x counter 080C881C (T) lsl r0,r3,#0x10 080C881E (T) asr r1,r0,#0x10 080C8820 (T) mov r4,#0x26 080C8822 (T) ldsh r0,[r6,r4] // window width 080C8824 (T) cmp r1,r0 080C8826 (T) bge #0x80C8832 080C8828 (T) mov r3,#0x22 080C882A (T) ldsh r0,[r6,r3] // window x 080C882C (T) add r0,r0,r1 080C882E (T) cmp r0,#0x1F 080C8830 (T) ble #0x80C8868 080C8832 (T) mov r4,r9 // y counter 080C8834 (T) lsl r0,r4,#0x10 080C8836 (T) asr r1,r0,#0x10 080C8838 (T) mov r5,#0x28 080C883A (T) ldsh r0,[r6,r5] // window height 080C883C (T) cmp r1,r0 080C883E (T) bge #0x80C888C 080C8840 (T) mov r0,#0x24 080C8842 (T) ldsh r5,[r6,r0] // window y 080C8844 (T) add r0,r5,r1 080C8846 (T) cmp r0,#0x1F 080C8848 (T) bgt #0x80C888C 080C884A (T) mov r3,#0x0 080C884C (T) mov r12,r3 080C884E (T) add r0,r1,1 080C8850 (T) lsl r0,r0,#0x10 080C8852 (T) lsr r4,r0,#0x10 080C8854 (T) mov r9,r4 080C8856 (T) asr r0,r0,#0x10 080C8858 (T) add r0,r5,r0 080C885A (T) lsl r0,r0,#0x6 080C885C (T) ldr r1,[r2] // 0x3005270 080C885E (T) add r1,r1,r0 080C8860 (T) mov r5,#0x22 080C8862 (T) ldsh r0,[r6,r5] // window x 080C8864 (T) lsl r0,r0,#0x1 080C8866 (T) add r5,r1,r0 080C8868 (T) mov r0,r8 080C886A (T) strh r0,[r5] 080C886C (T) mov r1,r12 080C886E (T) lsl r0,r1,#0x10 080C8870 (T) mov r3,#0x80 080C8872 (T) lsl r3,r3,#0x9 080C8874 (T) add r0,r0,r3 080C8876 (T) lsr r0,r0,#0x10 080C8878 (T) mov r12,r0 080C887A (T) lsl r1,r7,#0x10 080C887C (T) add r1,r1,r3 080C887E (T) add r5,#0x2 080C8880 (T) lsr r7,r1,#0x10 080C8882 (T) asr r1,r1,#0x10 080C8884 (T) mov r4,#0x20 080C8886 (T) ldsh r0,[r6,r4] 080C8888 (T) cmp r1,r0 080C888A (T) blt #0x80C881A 080C888C (T) mov r0,#0x0 080C888E (T) strh r0,[r6,#0x32] // ? // It seems the remaining code draws the window borders 080C8890 (T) ldr r5,=#0x30051EC 080C8892 (T) ldrh r5,[r5] // tile offset 080C8894 (T) mov r12,r5 080C8896 (T) ldr r0,=#0x1DF 080C8898 (T) add r0,r12 080C889A (T) ldr r1,=#0x3005228 080C889C (T) ldrh r4,[r1] 080C889E (T) orr r0,r4 080C88A0 (T) lsl r0,r0,#0x10 080C88A2 (T) lsr r0,r0,#0x10 080C88A4 (T) mov r8,r0 080C88A6 (T) mov r2,#0x22 080C88A8 (T) ldsh r3,[r6,r2] 080C88AA (T) sub r0,r3,1 080C88AC (T) cmp r0,#0x0 080C88AE (T) blt #0x80C88CE 080C88B0 (T) mov r5,#0x26 080C88B2 (T) ldsh r0,[r6,r5] 080C88B4 (T) add r0,r3,r0 080C88B6 (T) cmp r0,#0x1F 080C88B8 (T) bgt #0x80C88CE 080C88BA (T) mov r0,#0x24 080C88BC (T) ldsh r5,[r6,r0] 080C88BE (T) sub r1,r5,1 080C88C0 (T) cmp r1,#0x0 080C88C2 (T) blt #0x80C88CE 080C88C4 (T) mov r2,#0x28 080C88C6 (T) ldsh r0,[r6,r2] 080C88C8 (T) add r0,r5,r0 080C88CA (T) cmp r0,#0x1F 080C88CC (T) ble #0x80C88E8 080C88CE (T) mov r0,#0x1 080C88D0 (T) neg r0,r0 080C88D2 (T) b #0x80C8B8A 080C88D4 (T) strh r0,[r6,r1] 080C88D6 (T) lsl r0,r0,#0xC 080C88D8 (T) str r4,[r5,r7] 080C88DA (T) lsl r0,r0,#0xC 080C88DC (T) lsl r7,r7,#0x7 080C88DE (T) lsl r0,r0,#0x0 080C88E0 (T) strh r0,[r5,r0] 080C88E2 (T) lsl r0,r0,#0xC 080C88E4 (T) lsl r7,r3,#0x7 080C88E6 (T) lsl r0,r0,#0x0 080C88E8 (T) mov r2,r12 080C88EA (T) add r2,#0x93 080C88EC (T) orr r2,r4 080C88EE (T) mov r5,#0xC0 080C88F0 (T) lsl r5,r5,#0x4 080C88F2 (T) mov r9,r5 080C88F4 (T) mov r0,r9 080C88F6 (T) orr r2,r0 080C88F8 (T) lsl r0,r2,#0x10 080C88FA (T) lsr r7,r0,#0x10 080C88FC (T) lsl r1,r1,#0x6 080C88FE (T) mov r5,r10 080C8900 (T) ldr r0,[r5] 080C8902 (T) add r0,r0,r1 080C8904 (T) lsl r1,r3,#0x1 080C8906 (T) add r0,r0,r1 080C8908 (T) sub r5,r0,2 080C890A (T) ldrh r0,[r5] 080C890C (T) cmp r0,r8 080C890E (T) beq #0x80C8914 080C8910 (T) cmp r0,r7 080C8912 (T) bne #0x80C8918 080C8914 (T) strh r2,[r5] 080C8916 (T) b #0x80C8924 080C8918 (T) mov r0,r12 080C891A (T) add r0,#0x94 080C891C (T) orr r0,r4 080C891E (T) mov r1,r9 080C8920 (T) orr r0,r1 080C8922 (T) strh r0,[r5] 080C8924 (T) ldr r2,=#0x30051EC 080C8926 (T) ldrh r4,[r2] 080C8928 (T) mov r2,r4 080C892A (T) add r2,#0x93 080C892C (T) ldr r5,=#0x3005228 080C892E (T) ldrh r3,[r5] 080C8930 (T) orr r2,r3 080C8932 (T) mov r0,#0x80 080C8934 (T) lsl r0,r0,#0x4 080C8936 (T) mov r9,r0 080C8938 (T) mov r1,r9 080C893A (T) orr r2,r1 080C893C (T) lsl r0,r2,#0x10 080C893E (T) lsr r7,r0,#0x10 080C8940 (T) mov r5,#0x24 080C8942 (T) ldsh r0,[r6,r5] 080C8944 (T) sub r0,#0x1 080C8946 (T) lsl r0,r0,#0x6 080C8948 (T) mov r5,r10 080C894A (T) ldr r1,[r5] 080C894C (T) add r1,r1,r0 080C894E (T) mov r5,#0x22 080C8950 (T) ldsh r0,[r6,r5] 080C8952 (T) lsl r0,r0,#0x1 080C8954 (T) add r1,r1,r0 080C8956 (T) mov r5,#0x26 080C8958 (T) ldsh r0,[r6,r5] 080C895A (T) lsl r0,r0,#0x1 080C895C (T) add r5,r1,r0 080C895E (T) ldrh r0,[r5] 080C8960 (T) cmp r0,r8 080C8962 (T) beq #0x80C8968 080C8964 (T) cmp r0,r7 080C8966 (T) bne #0x80C8974 080C8968 (T) strh r2,[r5] 080C896A (T) b #0x80C8980 080C896C (T) str r4,[r5,r7] 080C896E (T) lsl r0,r0,#0xC 080C8970 (T) strh r0,[r5,r0] 080C8972 (T) lsl r0,r0,#0xC 080C8974 (T) mov r0,r4 080C8976 (T) add r0,#0x94 080C8978 (T) orr r0,r3 080C897A (T) mov r1,r9 080C897C (T) orr r0,r1 080C897E (T) strh r0,[r5] 080C8980 (T) ldr r2,=#0x30051EC 080C8982 (T) ldrh r4,[r2] 080C8984 (T) mov r2,r4 080C8986 (T) add r2,#0x93 080C8988 (T) ldr r5,=#0x3005228 080C898A (T) ldrh r3,[r5] 080C898C (T) orr r2,r3 080C898E (T) mov r0,#0x80 080C8990 (T) lsl r0,r0,#0x3 080C8992 (T) mov r9,r0 080C8994 (T) mov r1,r9 080C8996 (T) orr r2,r1 080C8998 (T) lsl r0,r2,#0x10 080C899A (T) lsr r7,r0,#0x10 080C899C (T) mov r5,#0x24 080C899E (T) ldsh r0,[r6,r5] 080C89A0 (T) mov r5,#0x28 080C89A2 (T) ldsh r1,[r6,r5] 080C89A4 (T) add r0,r0,r1 080C89A6 (T) lsl r0,r0,#0x6 080C89A8 (T) mov r5,r10 080C89AA (T) ldr r1,[r5] 080C89AC (T) add r1,r1,r0 080C89AE (T) mov r5,#0x22 080C89B0 (T) ldsh r0,[r6,r5] 080C89B2 (T) lsl r0,r0,#0x1 080C89B4 (T) add r1,r1,r0 080C89B6 (T) sub r5,r1,2 080C89B8 (T) ldrh r0,[r5] 080C89BA (T) cmp r0,r8 080C89BC (T) beq #0x80C89C2 080C89BE (T) cmp r0,r7 080C89C0 (T) bne #0x80C89D0 080C89C2 (T) strh r2,[r5] 080C89C4 (T) b #0x80C89DC 080C89C6 (T) lsl r0,r0,#0x0 080C89C8 (T) str r4,[r5,r7] 080C89CA (T) lsl r0,r0,#0xC 080C89CC (T) strh r0,[r5,r0] 080C89CE (T) lsl r0,r0,#0xC 080C89D0 (T) mov r0,r4 080C89D2 (T) add r0,#0x94 080C89D4 (T) orr r0,r3 080C89D6 (T) mov r1,r9 080C89D8 (T) orr r0,r1 080C89DA (T) strh r0,[r5] 080C89DC (T) ldr r2,=#0x30051EC 080C89DE (T) ldrh r4,[r2] 080C89E0 (T) mov r2,r4 080C89E2 (T) add r2,#0x93 080C89E4 (T) ldr r5,=#0x3005228 080C89E6 (T) ldrh r3,[r5] 080C89E8 (T) orr r2,r3 080C89EA (T) lsl r0,r2,#0x10 080C89EC (T) lsr r7,r0,#0x10 080C89EE (T) mov r1,#0x24 080C89F0 (T) ldsh r0,[r6,r1] 080C89F2 (T) mov r5,#0x28 080C89F4 (T) ldsh r1,[r6,r5] 080C89F6 (T) add r0,r0,r1 080C89F8 (T) lsl r0,r0,#0x6 080C89FA (T) mov r5,r10 080C89FC (T) ldr r1,[r5] 080C89FE (T) add r1,r1,r0 080C8A00 (T) mov r5,#0x22 080C8A02 (T) ldsh r0,[r6,r5] 080C8A04 (T) lsl r0,r0,#0x1 080C8A06 (T) add r1,r1,r0 080C8A08 (T) mov r5,#0x26 080C8A0A (T) ldsh r0,[r6,r5] 080C8A0C (T) lsl r0,r0,#0x1 080C8A0E (T) add r5,r1,r0 080C8A10 (T) ldrh r0,[r5] 080C8A12 (T) cmp r0,r8 080C8A14 (T) beq #0x80C8A1A 080C8A16 (T) cmp r0,r7 080C8A18 (T) bne #0x80C8A28 080C8A1A (T) strh r2,[r5] 080C8A1C (T) b #0x80C8A30 080C8A1E (T) lsl r0,r0,#0x0 080C8A20 (T) str r4,[r5,r7] 080C8A22 (T) lsl r0,r0,#0xC 080C8A24 (T) strh r0,[r5,r0] 080C8A26 (T) lsl r0,r0,#0xC 080C8A28 (T) mov r0,r4 080C8A2A (T) add r0,#0x94 080C8A2C (T) orr r0,r3 080C8A2E (T) strh r0,[r5] 080C8A30 (T) mov r1,#0x24 080C8A32 (T) ldsh r0,[r6,r1] 080C8A34 (T) sub r0,#0x1 080C8A36 (T) lsl r0,r0,#0x6 080C8A38 (T) mov r2,r10 080C8A3A (T) ldr r1,[r2] 080C8A3C (T) add r1,r1,r0 080C8A3E (T) mov r3,#0x22 080C8A40 (T) ldsh r0,[r6,r3] 080C8A42 (T) lsl r0,r0,#0x1 080C8A44 (T) add r5,r1,r0 080C8A46 (T) mov r7,#0x0 080C8A48 (T) mov r4,#0x26 080C8A4A (T) ldsh r0,[r6,r4] 080C8A4C (T) ldr r2,[r6] 080C8A4E (T) ldr r1,=#0x3000A0E 080C8A50 (T) mov r9,r1 080C8A52 (T) cmp r7,r0 080C8A54 (T) bge #0x80C8A8A 080C8A56 (T) ldr r3,=#0x30051EC 080C8A58 (T) mov r8,r3 080C8A5A (T) ldr r4,=#0x3005228 080C8A5C (T) mov r12,r4 080C8A5E (T) mov r0,#0x80 080C8A60 (T) lsl r0,r0,#0x4 080C8A62 (T) mov r3,r0 080C8A64 (T) mov r1,r8 080C8A66 (T) ldrh r0,[r1] 080C8A68 (T) add r0,#0x96 080C8A6A (T) mov r4,r12 080C8A6C (T) ldrh r1,[r4] 080C8A6E (T) orr r0,r1 080C8A70 (T) orr r0,r3 080C8A72 (T) strh r0,[r5] 080C8A74 (T) lsl r1,r7,#0x10 080C8A76 (T) mov r0,#0x80 080C8A78 (T) lsl r0,r0,#0x9 080C8A7A (T) add r1,r1,r0 080C8A7C (T) add r5,#0x2 080C8A7E (T) lsr r7,r1,#0x10 080C8A80 (T) asr r1,r1,#0x10 080C8A82 (T) mov r4,#0x26 080C8A84 (T) ldsh r0,[r6,r4] 080C8A86 (T) cmp r1,r0 080C8A88 (T) blt #0x80C8A64 080C8A8A (T) mov r5,#0x24 080C8A8C (T) ldsh r0,[r6,r5] 080C8A8E (T) mov r3,#0x28 080C8A90 (T) ldsh r1,[r6,r3] 080C8A92 (T) add r0,r0,r1 080C8A94 (T) lsl r0,r0,#0x6 080C8A96 (T) mov r4,r10 080C8A98 (T) ldr r1,[r4] 080C8A9A (T) add r1,r1,r0 080C8A9C (T) mov r5,#0x22 080C8A9E (T) ldsh r0,[r6,r5] 080C8AA0 (T) lsl r0,r0,#0x1 080C8AA2 (T) add r5,r1,r0 080C8AA4 (T) mov r7,#0x0 080C8AA6 (T) mov r1,#0x26 080C8AA8 (T) ldsh r0,[r6,r1] 080C8AAA (T) cmp r7,r0 080C8AAC (T) bge #0x80C8AD6 080C8AAE (T) ldr r3,=#0x30051EC 080C8AB0 (T) mov r8,r3 080C8AB2 (T) ldr r3,=#0x3005228 080C8AB4 (T) mov r4,r8 080C8AB6 (T) ldrh r0,[r4] 080C8AB8 (T) add r0,#0x96 080C8ABA (T) ldrh r1,[r3] 080C8ABC (T) orr r0,r1 080C8ABE (T) strh r0,[r5] 080C8AC0 (T) lsl r1,r7,#0x10 080C8AC2 (T) mov r0,#0x80 080C8AC4 (T) lsl r0,r0,#0x9 080C8AC6 (T) add r1,r1,r0 080C8AC8 (T) add r5,#0x2 080C8ACA (T) lsr r7,r1,#0x10 080C8ACC (T) asr r1,r1,#0x10 080C8ACE (T) mov r4,#0x26 080C8AD0 (T) ldsh r0,[r6,r4] 080C8AD2 (T) cmp r1,r0 080C8AD4 (T) blt #0x80C8AB4 080C8AD6 (T) mov r5,#0x24 080C8AD8 (T) ldsh r0,[r6,r5] 080C8ADA (T) lsl r0,r0,#0x6 080C8ADC (T) mov r3,r10 080C8ADE (T) ldr r1,[r3] 080C8AE0 (T) add r1,r1,r0 080C8AE2 (T) mov r4,#0x22 080C8AE4 (T) ldsh r0,[r6,r4] 080C8AE6 (T) lsl r0,r0,#0x1 080C8AE8 (T) add r1,r1,r0 080C8AEA (T) sub r5,r1,2 080C8AEC (T) mov r7,#0x0 080C8AEE (T) mov r1,#0x28 080C8AF0 (T) ldsh r0,[r6,r1] 080C8AF2 (T) cmp r7,r0 080C8AF4 (T) bge #0x80C8B2A 080C8AF6 (T) ldr r3,=#0x30051EC 080C8AF8 (T) mov r8,r3 080C8AFA (T) ldr r4,=#0x3005228 080C8AFC (T) mov r12,r4 080C8AFE (T) mov r0,#0x80 080C8B00 (T) lsl r0,r0,#0x3 080C8B02 (T) mov r3,r0 080C8B04 (T) mov r1,r8 080C8B06 (T) ldrh r0,[r1] 080C8B08 (T) add r0,#0x95 080C8B0A (T) mov r4,r12 080C8B0C (T) ldrh r1,[r4] 080C8B0E (T) orr r0,r1 080C8B10 (T) orr r0,r3 080C8B12 (T) strh r0,[r5] 080C8B14 (T) lsl r1,r7,#0x10 080C8B16 (T) mov r0,#0x80 080C8B18 (T) lsl r0,r0,#0x9 080C8B1A (T) add r1,r1,r0 080C8B1C (T) add r5,#0x40 080C8B1E (T) lsr r7,r1,#0x10 080C8B20 (T) asr r1,r1,#0x10 080C8B22 (T) mov r4,#0x28 080C8B24 (T) ldsh r0,[r6,r4] 080C8B26 (T) cmp r1,r0 080C8B28 (T) blt #0x80C8B04 080C8B2A (T) mov r5,#0x24 080C8B2C (T) ldsh r0,[r6,r5] 080C8B2E (T) lsl r0,r0,#0x6 080C8B30 (T) mov r3,r10 080C8B32 (T) ldr r1,[r3] 080C8B34 (T) add r1,r1,r0 080C8B36 (T) mov r4,#0x22 080C8B38 (T) ldsh r0,[r6,r4] 080C8B3A (T) lsl r0,r0,#0x1 080C8B3C (T) add r1,r1,r0 080C8B3E (T) mov r5,#0x26 080C8B40 (T) ldsh r0,[r6,r5] 080C8B42 (T) lsl r0,r0,#0x1 080C8B44 (T) add r5,r1,r0 080C8B46 (T) mov r7,#0x0 080C8B48 (T) mov r1,#0x28 080C8B4A (T) ldsh r0,[r6,r1] 080C8B4C (T) cmp r7,r0 080C8B4E (T) bge #0x80C8B78 080C8B50 (T) ldr r3,=#0x30051EC 080C8B52 (T) mov r8,r3 080C8B54 (T) ldr r3,=#0x3005228 080C8B56 (T) mov r4,r8 080C8B58 (T) ldrh r0,[r4] 080C8B5A (T) add r0,#0x95 080C8B5C (T) ldrh r1,[r3] 080C8B5E (T) orr r0,r1 080C8B60 (T) strh r0,[r5] 080C8B62 (T) lsl r1,r7,#0x10 080C8B64 (T) mov r0,#0x80 080C8B66 (T) lsl r0,r0,#0x9 080C8B68 (T) add r1,r1,r0 080C8B6A (T) add r5,#0x40 080C8B6C (T) lsr r7,r1,#0x10 080C8B6E (T) asr r1,r1,#0x10 080C8B70 (T) mov r4,#0x28 080C8B72 (T) ldsh r0,[r6,r4] 080C8B74 (T) cmp r1,r0 080C8B76 (T) blt #0x80C8B56 080C8B78 (T) mov r0,#0x21 080C8B7A (T) neg r0,r0 080C8B7C (T) and r2,r0 080C8B7E (T) mov r0,#0x1 080C8B80 (T) orr r2,r0 080C8B82 (T) str r2,[r6] 080C8B84 (T) mov r5,r9 080C8B86 (T) strh r0,[r5] 080C8B88 (T) mov r0,#0x0 080C8B8A (T) pop {r3-r5} 080C8B8C (T) mov r8,r3 080C8B8E (T) mov r9,r4 080C8B90 (T) mov r10,r5 080C8B92 (T) pop {r4-r7} 080C8B94 (T) pop {r1} 080C8B96 (T) bx r1