.include "asm/macros.inc" .include "constants/constants.inc" .syntax unified .text thumb_func_start BlitBitmapRect4BitWithoutColorKey BlitBitmapRect4BitWithoutColorKey: @ 8004A60 push {r4-r7,lr} mov r7, r8 push {r7} sub sp, 0x14 ldr r4, [sp, 0x2C] ldr r5, [sp, 0x30] ldr r6, [sp, 0x34] ldr r7, [sp, 0x38] lsls r2, 16 lsrs r2, 16 lsls r3, 16 lsrs r3, 16 lsls r4, 16 lsrs r4, 16 lsls r5, 16 lsrs r5, 16 lsls r6, 16 lsrs r6, 16 lsls r7, 16 lsrs r7, 16 str r4, [sp] str r5, [sp, 0x4] str r6, [sp, 0x8] str r7, [sp, 0xC] movs r4, 0xFF str r4, [sp, 0x10] bl BlitBitmapRect4Bit add sp, 0x14 pop {r3} mov r8, r3 pop {r4-r7} pop {r0} bx r0 thumb_func_end BlitBitmapRect4BitWithoutColorKey thumb_func_start BlitBitmapRect4Bit BlitBitmapRect4Bit: @ 8004AA4 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x2C str r0, [sp] str r1, [sp, 0x4] ldr r0, [sp, 0x4C] ldr r1, [sp, 0x50] ldr r4, [sp, 0x54] ldr r5, [sp, 0x58] ldr r6, [sp, 0x5C] lsls r2, 16 lsrs r2, 16 str r2, [sp, 0x8] lsls r3, 16 lsrs r7, r3, 16 lsls r0, 16 lsrs r0, 16 str r0, [sp, 0xC] lsls r1, 16 lsrs r1, 16 mov r9, r1 lsls r4, 16 lsrs r4, 16 lsls r5, 16 lsrs r5, 16 lsls r6, 24 lsrs r6, 24 str r6, [sp, 0x10] ldr r0, [sp, 0x4] ldrh r3, [r0, 0x4] ldr r1, [sp, 0xC] subs r0, r3, r1 adds r2, r4 mov r8, r2 cmp r0, r4 bge _08004AF8 ldr r2, [sp, 0x8] adds r0, r2 mov r8, r0 _08004AF8: ldr r4, [sp, 0x4] ldrh r0, [r4, 0x6] mov r1, r9 subs r0, r1 adds r2, r5, r7 str r2, [sp, 0x14] cmp r0, r5 bge _08004B0C adds r0, r7 str r0, [sp, 0x14] _08004B0C: ldr r4, [sp] ldrh r1, [r4, 0x4] movs r2, 0x7 adds r0, r1, 0 ands r0, r2 adds r1, r0 asrs r1, 3 str r1, [sp, 0x18] adds r0, r3, 0 ands r0, r2 adds r0, r3, r0 asrs r0, 3 str r0, [sp, 0x1C] ldr r0, [sp, 0x10] cmp r0, 0xFF bne _08004BCA adds r3, r7, 0 mov r1, r9 ldr r2, [sp, 0x14] cmp r3, r2 blt _08004B38 b _08004C72 _08004B38: ldr r5, [sp, 0x8] ldr r6, [sp, 0xC] adds r4, r3, 0x1 str r4, [sp, 0x24] adds r0, r1, 0x1 str r0, [sp, 0x28] cmp r5, r8 bge _08004BBE movs r7, 0x3 asrs r0, r3, 3 ldr r2, [sp, 0x18] muls r0, r2 lsls r0, 5 mov r10, r0 lsls r0, r3, 29 lsrs r0, 27 mov r9, r0 asrs r0, r1, 3 ldr r4, [sp, 0x1C] muls r0, r4 lsls r0, 5 mov r12, r0 lsls r0, r1, 29 lsrs r3, r0, 27 _08004B68: asrs r0, r5, 1 ands r0, r7 ldr r2, [sp] ldr r1, [r2] adds r1, r0 asrs r0, r5, 3 lsls r0, 5 adds r1, r0 add r1, r10 mov r4, r9 adds r2, r1, r4 asrs r0, r6, 1 ands r0, r7 ldr r4, [sp, 0x4] ldr r1, [r4] adds r1, r0 asrs r0, r6, 3 lsls r0, 5 adds r1, r0 add r1, r12 adds r4, r1, r3 ldrb r2, [r2] adds r0, r5, 0 movs r1, 0x1 ands r0, r1 lsls r0, 2 asrs r2, r0 movs r0, 0xF ands r2, r0 adds r0, r6, 0 ands r0, r1 lsls r1, r0, 2 lsls r2, r1 movs r0, 0xF0 asrs r0, r1 ldrb r1, [r4] ands r0, r1 orrs r2, r0 strb r2, [r4] adds r5, 0x1 adds r6, 0x1 cmp r5, r8 blt _08004B68 _08004BBE: ldr r3, [sp, 0x24] ldr r1, [sp, 0x28] ldr r2, [sp, 0x14] cmp r3, r2 blt _08004B38 b _08004C72 _08004BCA: adds r3, r7, 0 mov r1, r9 ldr r4, [sp, 0x14] cmp r3, r4 bge _08004C72 _08004BD4: ldr r5, [sp, 0x8] ldr r6, [sp, 0xC] adds r0, r3, 0x1 str r0, [sp, 0x24] adds r2, r1, 0x1 str r2, [sp, 0x28] cmp r5, r8 bge _08004C68 movs r4, 0x3 mov r9, r4 asrs r0, r3, 3 ldr r2, [sp, 0x18] muls r0, r2 lsls r0, 5 str r0, [sp, 0x20] lsls r0, r3, 29 lsrs r0, 27 mov r10, r0 movs r3, 0x1 asrs r0, r1, 3 ldr r4, [sp, 0x1C] muls r0, r4 lsls r0, 5 mov r12, r0 lsls r0, r1, 29 lsrs r7, r0, 27 _08004C08: asrs r0, r5, 1 mov r1, r9 ands r0, r1 ldr r2, [sp] ldr r1, [r2] adds r1, r0 asrs r0, r5, 3 lsls r0, 5 adds r1, r0 ldr r4, [sp, 0x20] adds r1, r4 mov r0, r10 adds r2, r1, r0 asrs r0, r6, 1 mov r1, r9 ands r0, r1 ldr r4, [sp, 0x4] ldr r1, [r4] adds r1, r0 asrs r0, r6, 3 lsls r0, 5 adds r1, r0 add r1, r12 adds r4, r1, r7 ldrb r2, [r2] adds r0, r5, 0 ands r0, r3 lsls r0, 2 asrs r2, r0 movs r0, 0xF ands r2, r0 ldr r0, [sp, 0x10] cmp r2, r0 beq _08004C60 adds r0, r6, 0 ands r0, r3 lsls r1, r0, 2 lsls r2, r1 movs r0, 0xF0 asrs r0, r1 ldrb r1, [r4] ands r0, r1 orrs r2, r0 strb r2, [r4] _08004C60: adds r5, 0x1 adds r6, 0x1 cmp r5, r8 blt _08004C08 _08004C68: ldr r3, [sp, 0x24] ldr r1, [sp, 0x28] ldr r2, [sp, 0x14] cmp r3, r2 blt _08004BD4 _08004C72: add sp, 0x2C pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r0} bx r0 thumb_func_end BlitBitmapRect4Bit thumb_func_start FillBitmapRect4Bit FillBitmapRect4Bit: @ 8004C84 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x4 mov r9, r0 ldr r0, [sp, 0x24] ldr r4, [sp, 0x28] lsls r1, 16 lsrs r1, 16 mov r10, r1 lsls r2, 16 lsrs r2, 16 adds r5, r2, 0 lsls r3, 16 lsrs r3, 16 lsls r0, 16 lsrs r0, 16 lsls r4, 24 lsrs r7, r4, 24 adds r4, r1, r3 mov r3, r9 ldrh r1, [r3, 0x4] cmp r4, r1 ble _08004CBA adds r4, r1, 0 _08004CBA: adds r2, r0 mov r12, r2 mov r2, r9 ldrh r0, [r2, 0x6] cmp r12, r0 ble _08004CC8 mov r12, r0 _08004CC8: movs r0, 0x7 ands r0, r1 adds r0, r1, r0 asrs r0, 3 str r0, [sp] adds r1, r5, 0 cmp r1, r12 bge _08004D30 _08004CD8: mov r3, r10 adds r0, r1, 0x1 mov r8, r0 cmp r3, r4 bge _08004D2A asrs r0, r1, 3 ldr r2, [sp] muls r0, r2 lsls r6, r0, 5 lsls r0, r1, 29 lsrs r5, r0, 27 _08004CEE: asrs r2, r3, 1 movs r0, 0x3 ands r2, r0 mov r0, r9 ldr r1, [r0] adds r1, r2 asrs r0, r3, 3 lsls r0, 5 adds r1, r0 adds r1, r6 adds r2, r1, r5 movs r0, 0x1 ands r0, r3 cmp r0, 0 beq _08004D1A ldrb r0, [r2] movs r1, 0xF ands r1, r0 lsls r0, r7, 4 orrs r1, r0 strb r1, [r2] b _08004D24 _08004D1A: ldrb r1, [r2] movs r0, 0xF0 ands r0, r1 orrs r0, r7 strb r0, [r2] _08004D24: adds r3, 0x1 cmp r3, r4 blt _08004CEE _08004D2A: mov r1, r8 cmp r1, r12 blt _08004CD8 _08004D30: add sp, 0x4 pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r0} bx r0 thumb_func_end FillBitmapRect4Bit thumb_func_start BlitBitmapRect4BitTo8Bit BlitBitmapRect4BitTo8Bit: @ 8004D40 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x3C str r0, [sp] str r1, [sp, 0x4] ldr r0, [sp, 0x5C] ldr r1, [sp, 0x60] ldr r5, [sp, 0x64] ldr r4, [sp, 0x68] ldr r6, [sp, 0x6C] ldr r7, [sp, 0x70] mov r8, r7 lsls r2, 16 lsrs r2, 16 str r2, [sp, 0x8] lsls r3, 16 lsrs r3, 16 lsls r0, 16 lsrs r0, 16 str r0, [sp, 0xC] lsls r1, 16 lsrs r7, r1, 16 lsls r5, 16 lsrs r5, 16 lsls r4, 16 lsrs r4, 16 lsls r6, 24 lsrs r6, 24 str r6, [sp, 0x10] mov r0, r8 lsls r0, 28 lsrs r0, 24 str r0, [sp, 0x14] lsls r0, r6, 28 lsrs r0, 24 str r0, [sp, 0x28] ldr r1, [sp, 0x4] ldrh r0, [r1, 0x4] ldr r2, [sp, 0xC] subs r0, r2 ldr r1, [sp, 0x8] adds r1, r5, r1 str r1, [sp, 0x18] cmp r0, r5 bge _08004DA6 ldr r2, [sp, 0x8] adds r0, r2 str r0, [sp, 0x18] _08004DA6: ldr r5, [sp, 0x4] ldrh r1, [r5, 0x6] subs r0, r1, r7 cmp r0, r4 bge _08004DB8 adds r0, r3, r1 subs r0, r7 str r0, [sp, 0x1C] b _08004DBC _08004DB8: adds r4, r3, r4 str r4, [sp, 0x1C] _08004DBC: ldr r0, [sp] ldrh r1, [r0, 0x4] movs r2, 0x7 adds r0, r1, 0 ands r0, r2 adds r1, r0 asrs r1, 3 str r1, [sp, 0x20] ldr r5, [sp, 0x4] ldrh r1, [r5, 0x4] adds r0, r1, 0 ands r0, r2 adds r1, r0 asrs r1, 3 str r1, [sp, 0x24] ldr r0, [sp, 0x10] cmp r0, 0xFF bne _08004E9C adds r2, r3, 0 adds r5, r7, 0 ldr r1, [sp, 0x1C] cmp r2, r1 blt _08004DEC b _08004F7E _08004DEC: ldr r3, [sp, 0x8] lsrs r3, 1 str r3, [sp, 0x2C] movs r0, 0x3 ands r3, r0 str r3, [sp, 0x2C] ldr r7, [sp, 0x8] lsrs r0, r7, 3 lsls r0, 5 str r0, [sp, 0x30] _08004E00: ldr r0, [sp] ldr r1, [r0] ldr r3, [sp, 0x2C] adds r1, r3 ldr r7, [sp, 0x30] adds r1, r7 asrs r0, r2, 3 ldr r3, [sp, 0x20] muls r0, r3 lsls r0, 5 mov r8, r0 add r1, r8 lsls r0, r2, 29 lsrs r7, r0, 27 adds r6, r1, r7 ldr r3, [sp, 0x8] ldr r4, [sp, 0xC] adds r2, 0x1 mov r10, r2 adds r0, r5, 0x1 str r0, [sp, 0x38] ldr r1, [sp, 0x18] cmp r3, r1 bge _08004E90 asrs r0, r5, 3 ldr r2, [sp, 0x24] muls r0, r2 lsls r0, 6 mov r12, r0 lsls r0, r5, 29 lsrs r0, 26 mov r9, r0 _08004E40: movs r0, 0x7 ands r0, r4 ldr r5, [sp, 0x4] ldr r1, [r5] adds r1, r0 asrs r0, r4, 3 lsls r0, 6 adds r1, r0 add r1, r12 mov r0, r9 adds r5, r1, r0 movs r0, 0x1 ands r0, r3 cmp r0, 0 beq _08004E64 ldrb r0, [r6] lsrs r0, 4 b _08004E80 _08004E64: asrs r2, r3, 1 movs r0, 0x3 ands r2, r0 ldr r0, [sp] ldr r1, [r0] adds r1, r2 asrs r0, r3, 3 lsls r0, 5 adds r1, r0 add r1, r8 adds r6, r1, r7 ldrb r1, [r6] movs r0, 0xF ands r0, r1 _08004E80: ldr r1, [sp, 0x14] adds r0, r1, r0 strb r0, [r5] adds r3, 0x1 adds r4, 0x1 ldr r2, [sp, 0x18] cmp r3, r2 blt _08004E40 _08004E90: mov r2, r10 ldr r5, [sp, 0x38] ldr r3, [sp, 0x1C] cmp r2, r3 blt _08004E00 b _08004F7E _08004E9C: adds r2, r3, 0 adds r5, r7, 0 ldr r7, [sp, 0x1C] cmp r2, r7 bge _08004F7E ldr r0, [sp, 0x8] lsrs r0, 1 str r0, [sp, 0x34] movs r0, 0x3 ldr r1, [sp, 0x34] ands r1, r0 str r1, [sp, 0x34] _08004EB4: ldr r3, [sp] ldr r1, [r3] ldr r7, [sp, 0x34] adds r1, r7 ldr r3, [sp, 0x8] lsrs r0, r3, 3 lsls r0, 5 adds r1, r0 asrs r0, r2, 3 ldr r7, [sp, 0x20] muls r0, r7 lsls r0, 5 mov r8, r0 add r1, r8 lsls r0, r2, 29 lsrs r7, r0, 27 adds r6, r1, r7 ldr r4, [sp, 0xC] adds r2, 0x1 mov r10, r2 adds r0, r5, 0x1 str r0, [sp, 0x38] ldr r1, [sp, 0x18] cmp r3, r1 bge _08004F74 asrs r0, r5, 3 ldr r2, [sp, 0x24] muls r0, r2 lsls r0, 6 mov r9, r0 lsls r0, r5, 29 lsrs r0, 26 mov r12, r0 _08004EF6: movs r0, 0x1 ands r0, r3 cmp r0, 0 beq _08004F2A ldrb r2, [r6] movs r0, 0xF0 ands r0, r2 ldr r5, [sp, 0x28] cmp r0, r5 beq _08004F6A adds r0, r4, 0 movs r1, 0x7 ands r0, r1 ldr r5, [sp, 0x4] ldr r1, [r5] adds r1, r0 asrs r0, r4, 3 lsls r0, 6 adds r1, r0 add r1, r9 mov r0, r12 adds r5, r1, r0 lsrs r0, r2, 4 ldr r1, [sp, 0x14] adds r0, r1, r0 b _08004F68 _08004F2A: asrs r2, r3, 1 movs r0, 0x3 ands r2, r0 ldr r5, [sp] ldr r1, [r5] adds r1, r2 asrs r0, r3, 3 lsls r0, 5 adds r1, r0 add r1, r8 adds r6, r1, r7 ldrb r0, [r6] movs r2, 0xF ands r2, r0 ldr r0, [sp, 0x10] cmp r2, r0 beq _08004F6A adds r0, r4, 0 movs r1, 0x7 ands r0, r1 ldr r5, [sp, 0x4] ldr r1, [r5] adds r1, r0 asrs r0, r4, 3 lsls r0, 6 adds r1, r0 add r1, r9 mov r0, r12 adds r5, r1, r0 ldr r1, [sp, 0x14] adds r0, r1, r2 _08004F68: strb r0, [r5] _08004F6A: adds r3, 0x1 adds r4, 0x1 ldr r2, [sp, 0x18] cmp r3, r2 blt _08004EF6 _08004F74: mov r2, r10 ldr r5, [sp, 0x38] ldr r3, [sp, 0x1C] cmp r2, r3 blt _08004EB4 _08004F7E: add sp, 0x3C pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r0} bx r0 thumb_func_end BlitBitmapRect4BitTo8Bit thumb_func_start FillBitmapRect8Bit FillBitmapRect8Bit: @ 8004F90 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x8 mov r8, r0 ldr r0, [sp, 0x28] ldr r4, [sp, 0x2C] lsls r1, 16 lsrs r1, 16 mov r10, r1 lsls r2, 16 lsrs r2, 16 adds r6, r2, 0 lsls r3, 16 lsrs r3, 16 lsls r0, 16 lsrs r0, 16 lsls r4, 24 lsrs r4, 24 mov r9, r4 adds r5, r1, r3 mov r3, r8 ldrh r1, [r3, 0x4] cmp r5, r1 ble _08004FC8 adds r5, r1, 0 _08004FC8: adds r7, r2, r0 mov r2, r8 ldrh r0, [r2, 0x6] cmp r7, r0 ble _08004FD4 adds r7, r0, 0 _08004FD4: movs r0, 0x7 ands r0, r1 adds r0, r1, r0 asrs r0, 3 str r0, [sp] adds r1, r6, 0 cmp r1, r7 bge _08005024 _08004FE4: mov r3, r10 adds r6, r1, 0x1 str r6, [sp, 0x4] cmp r3, r5 bge _0800501E movs r0, 0x7 mov r12, r0 asrs r0, r1, 3 ldr r2, [sp] muls r0, r2 lsls r4, r0, 6 lsls r0, r1, 29 lsrs r2, r0, 26 _08004FFE: adds r0, r3, 0 mov r6, r12 ands r0, r6 mov r6, r8 ldr r1, [r6] adds r1, r0 asrs r0, r3, 3 lsls r0, 6 adds r1, r0 adds r1, r4 adds r1, r2 mov r0, r9 strb r0, [r1] adds r3, 0x1 cmp r3, r5 blt _08004FFE _0800501E: ldr r1, [sp, 0x4] cmp r1, r7 blt _08004FE4 _08005024: add sp, 0x8 pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r0} bx r0 thumb_func_end FillBitmapRect8Bit .align 2, 0 @ Don't pad with nop.