diff options
Diffstat (limited to 'asm/blit.s')
-rw-r--r-- | asm/blit.s | 813 |
1 files changed, 813 insertions, 0 deletions
diff --git a/asm/blit.s b/asm/blit.s new file mode 100644 index 000000000..e8b8ff81e --- /dev/null +++ b/asm/blit.s @@ -0,0 +1,813 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_8004A60 +sub_8004A60: @ 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 sub_8004AA4 + add sp, 0x14 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_8004A60 + + thumb_func_start sub_8004AA4 +sub_8004AA4: @ 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 sub_8004AA4 + + thumb_func_start sub_8004C84 +sub_8004C84: @ 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 sub_8004C84 + + thumb_func_start sub_8004D40 +sub_8004D40: @ 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 sub_8004D40 + + thumb_func_start sub_8004F90 +sub_8004F90: @ 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 sub_8004F90 + + .align 2, 0 @ Don't pad with nop. |