summaryrefslogtreecommitdiff
path: root/asm/dma3_manager.s
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2015-10-06 05:46:30 -0700
committerYamaArashi <shadow962@live.com>2015-10-06 05:46:30 -0700
commit25342bcf33e2662a916b93e47e405df6024e30bd (patch)
tree0426703bc9a2873f2ff112022730eea61952bd70 /asm/dma3_manager.s
parentb05c4231a9692eed9640b6503917592ebbfea797 (diff)
split out some code
Diffstat (limited to 'asm/dma3_manager.s')
-rw-r--r--asm/dma3_manager.s553
1 files changed, 553 insertions, 0 deletions
diff --git a/asm/dma3_manager.s b/asm/dma3_manager.s
new file mode 100644
index 000000000..edd7e2cf1
--- /dev/null
+++ b/asm/dma3_manager.s
@@ -0,0 +1,553 @@
+ thumb_func_start dma3_transfer_queue_clear
+dma3_transfer_queue_clear: @ 8000BB8
+ push {lr}
+ ldr r2, =0x03000810
+ movs r0, 0x1
+ strb r0, [r2]
+ ldr r1, =0x03000811
+ movs r0, 0
+ strb r0, [r1]
+ movs r3, 0
+ ldr r0, =0x03000010
+ movs r1, 0x7F
+_08000BCC:
+ strh r3, [r0, 0x8]
+ str r3, [r0]
+ str r3, [r0, 0x4]
+ adds r0, 0x10
+ subs r1, 0x1
+ cmp r1, 0
+ bge _08000BCC
+ movs r0, 0
+ strb r0, [r2]
+ pop {r0}
+ bx r0
+ .align 2, 0
+ .pool
+ thumb_func_end dma3_transfer_queue_clear
+
+ thumb_func_start dma_transfer_queue_process
+dma_transfer_queue_process: @ 8000BF0
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0xC
+ ldr r0, =0x03000810
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _08000C06
+ b _08000E46
+_08000C06:
+ movs r0, 0
+ str r0, [sp, 0x8]
+ ldr r1, =0x03000010
+ ldr r2, =0x03000811
+ ldrb r0, [r2]
+ lsls r0, 4
+ adds r0, r1
+ ldrh r0, [r0, 0x8]
+ mov r12, r2
+ cmp r0, 0
+ bne _08000C1E
+ b _08000E46
+_08000C1E:
+ mov r8, r1
+ adds r1, 0x4
+ mov r10, r1
+ movs r6, 0x80
+ lsls r6, 5
+ ldr r7, =0x040000d4
+ movs r2, 0
+ mov r9, r2
+_08000C2E:
+ mov r3, r12
+ ldrb r0, [r3]
+ lsls r5, r0, 4
+ mov r0, r8
+ adds r1, r5, r0
+ ldrh r0, [r1, 0x8]
+ ldr r2, [sp, 0x8]
+ adds r0, r2, r0
+ lsls r0, 16
+ lsrs r0, 16
+ str r0, [sp, 0x8]
+ movs r0, 0xA0
+ lsls r0, 8
+ ldr r3, [sp, 0x8]
+ cmp r3, r0
+ bls _08000C50
+ b _08000E46
+_08000C50:
+ ldr r0, =0x04000006
+ ldrb r0, [r0]
+ cmp r0, 0xE0
+ bls _08000C5A
+ b _08000E46
+_08000C5A:
+ ldrh r0, [r1, 0xA]
+ cmp r0, 0x2
+ beq _08000CD0
+ cmp r0, 0x2
+ bgt _08000C80
+ cmp r0, 0x1
+ beq _08000C8C
+ b _08000DF0
+ .align 2, 0
+ .pool
+_08000C80:
+ cmp r0, 0x3
+ beq _08000D3C
+ cmp r0, 0x4
+ bne _08000C8A
+ b _08000D88
+_08000C8A:
+ b _08000DF0
+_08000C8C:
+ ldr r3, [r1]
+ mov r2, r10
+ adds r0, r5, r2
+ ldr r2, [r0]
+ ldrh r1, [r1, 0x8]
+ cmp r1, r6
+ bhi _08000CA6
+ str r3, [r7]
+ str r2, [r7, 0x4]
+ lsrs r0, r1, 2
+ movs r1, 0x84
+ lsls r1, 24
+ b _08000DAA
+_08000CA6:
+ ldr r4, =0x040000d4
+ str r3, [r4]
+ str r2, [r4, 0x4]
+ ldr r0, =0x84000400
+ str r0, [r4, 0x8]
+ ldr r0, [r4, 0x8]
+ adds r3, r6
+ adds r2, r6
+ subs r1, r6
+ cmp r1, r6
+ bhi _08000CA6
+ str r3, [r4]
+ str r2, [r4, 0x4]
+ lsrs r0, r1, 2
+ movs r1, 0x84
+ lsls r1, 24
+ b _08000D76
+ .align 2, 0
+ .pool
+_08000CD0:
+ mov r3, r10
+ adds r0, r5, r3
+ ldr r4, [r0]
+ ldrh r1, [r1, 0x8]
+ cmp r1, r6
+ bhi _08000CF4
+ mov r0, r8
+ adds r0, 0xC
+ adds r0, r5, r0
+ ldr r0, [r0]
+ str r0, [sp]
+ mov r5, sp
+ str r5, [r7]
+ str r4, [r7, 0x4]
+ lsrs r0, r1, 2
+ movs r1, 0x85
+ lsls r1, 24
+ b _08000DAA
+_08000CF4:
+ mov r2, r12
+ ldrb r0, [r2]
+ lsls r0, 4
+ mov r5, r8
+ adds r5, 0xC
+ adds r0, r5
+ ldr r0, [r0]
+ str r0, [sp]
+ ldr r3, =0x040000d4
+ mov r0, sp
+ str r0, [r3]
+ str r4, [r3, 0x4]
+ ldr r0, =0x85000400
+ str r0, [r3, 0x8]
+ ldr r0, [r3, 0x8]
+ adds r4, r6
+ subs r1, r6
+ cmp r1, r6
+ bhi _08000CF4
+ ldrb r0, [r2]
+ lsls r0, 4
+ adds r0, r5
+ ldr r0, [r0]
+ str r0, [sp]
+ mov r2, sp
+ str r2, [r3]
+ str r4, [r3, 0x4]
+ lsrs r0, r1, 2
+ movs r1, 0x85
+ lsls r1, 24
+ b _08000DEA
+ .align 2, 0
+ .pool
+_08000D3C:
+ ldr r3, [r1]
+ mov r2, r10
+ adds r0, r5, r2
+ ldr r2, [r0]
+ ldrh r1, [r1, 0x8]
+ cmp r1, r6
+ bhi _08000D56
+ str r3, [r7]
+ str r2, [r7, 0x4]
+ lsrs r0, r1, 1
+ movs r1, 0x80
+ lsls r1, 24
+ b _08000DAA
+_08000D56:
+ ldr r4, =0x040000d4
+ str r3, [r4]
+ str r2, [r4, 0x4]
+ ldr r0, =0x80000800
+ str r0, [r4, 0x8]
+ ldr r0, [r4, 0x8]
+ adds r3, r6
+ adds r2, r6
+ subs r1, r6
+ cmp r1, r6
+ bhi _08000D56
+ str r3, [r4]
+ str r2, [r4, 0x4]
+ lsrs r0, r1, 1
+ movs r1, 0x80
+ lsls r1, 24
+_08000D76:
+ orrs r0, r1
+ str r0, [r4, 0x8]
+ ldr r0, [r4, 0x8]
+ b _08000DF0
+ .align 2, 0
+ .pool
+_08000D88:
+ mov r3, r10
+ adds r0, r5, r3
+ ldr r2, [r0]
+ ldrh r4, [r1, 0x8]
+ add r1, sp, 0x4
+ cmp r4, r6
+ bhi _08000DB2
+ mov r0, r8
+ adds r0, 0xC
+ adds r0, r5, r0
+ ldr r0, [r0]
+ strh r0, [r1]
+ str r1, [r7]
+ str r2, [r7, 0x4]
+ lsrs r0, r4, 1
+ movs r1, 0x81
+ lsls r1, 24
+_08000DAA:
+ orrs r0, r1
+ str r0, [r7, 0x8]
+ ldr r0, [r7, 0x8]
+ b _08000DF0
+_08000DB2:
+ mov r5, r12
+ ldrb r0, [r5]
+ lsls r0, 4
+ ldr r3, =0x0300001c
+ adds r0, r3
+ ldr r0, [r0]
+ strh r0, [r1]
+ ldr r3, =0x040000d4
+ str r1, [r3]
+ str r2, [r3, 0x4]
+ ldr r0, =0x81000800
+ str r0, [r3, 0x8]
+ ldr r0, [r3, 0x8]
+ adds r2, r6
+ subs r4, r6
+ cmp r4, r6
+ bhi _08000DB2
+ ldrb r0, [r5]
+ lsls r0, 4
+ ldr r5, =0x0300001c
+ adds r0, r5
+ ldr r0, [r0]
+ strh r0, [r1]
+ str r1, [r3]
+ str r2, [r3, 0x4]
+ lsrs r0, r4, 1
+ movs r1, 0x81
+ lsls r1, 24
+_08000DEA:
+ orrs r0, r1
+ str r0, [r3, 0x8]
+ ldr r0, [r3, 0x8]
+_08000DF0:
+ ldr r1, =0x03000010
+ mov r3, r12
+ ldrb r0, [r3]
+ lsls r0, 4
+ adds r0, r1
+ mov r2, r9
+ str r2, [r0]
+ ldrb r0, [r3]
+ lsls r0, 4
+ add r0, r10
+ str r2, [r0]
+ ldrb r0, [r3]
+ lsls r0, 4
+ adds r0, r1
+ movs r4, 0
+ strh r2, [r0, 0x8]
+ ldrb r0, [r3]
+ lsls r0, 4
+ adds r0, r1
+ mov r5, r9
+ strh r5, [r0, 0xA]
+ ldrb r0, [r3]
+ lsls r0, 4
+ adds r1, 0xC
+ adds r0, r1
+ mov r1, r9
+ str r1, [r0]
+ ldrb r0, [r3]
+ adds r0, 0x1
+ strb r0, [r3]
+ lsls r0, 24
+ cmp r0, 0
+ bge _08000E34
+ strb r4, [r3]
+_08000E34:
+ mov r2, r12
+ ldrb r0, [r2]
+ lsls r0, 4
+ ldr r3, =0x03000010
+ adds r0, r3
+ ldrh r0, [r0, 0x8]
+ cmp r0, 0
+ beq _08000E46
+ b _08000C2E
+_08000E46:
+ add sp, 0xC
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+ .pool
+ thumb_func_end dma_transfer_queue_process
+
+ thumb_func_start dma3_transfer_queue_add_copy
+dma3_transfer_queue_add_copy: @ 8000E68
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ mov r12, r0
+ mov r8, r1
+ lsls r2, 16
+ lsrs r7, r2, 16
+ lsls r3, 24
+ lsrs r4, r3, 24
+ movs r5, 0
+ ldr r1, =0x03000810
+ movs r0, 0x1
+ strb r0, [r1]
+ ldr r0, =0x03000811
+ ldrb r2, [r0]
+ mov r10, r1
+ ldr r6, =0x03000010
+ mov r9, r6
+ lsls r0, r2, 4
+ adds r1, r0, r6
+_08000E94:
+ lsls r3, r2, 4
+ ldrh r0, [r1, 0x8]
+ cmp r0, 0
+ bne _08000ED4
+ mov r0, r12
+ str r0, [r1]
+ mov r0, r9
+ adds r0, 0x4
+ adds r0, r3, r0
+ mov r3, r8
+ str r3, [r0]
+ strh r7, [r1, 0x8]
+ cmp r4, 0x1
+ bne _08000EC0
+ strh r4, [r1, 0xA]
+ b _08000EC4
+ .align 2, 0
+ .pool
+_08000EC0:
+ movs r0, 0x3
+ strh r0, [r1, 0xA]
+_08000EC4:
+ movs r0, 0
+ ldr r1, =0x03000810
+ strb r0, [r1]
+ lsls r0, r2, 16
+ asrs r0, 16
+ b _08000EF0
+ .align 2, 0
+ .pool
+_08000ED4:
+ adds r1, 0x10
+ adds r2, 0x1
+ cmp r2, 0x7F
+ ble _08000EE0
+ adds r1, r6, 0
+ movs r2, 0
+_08000EE0:
+ adds r5, 0x1
+ cmp r5, 0x7F
+ ble _08000E94
+ movs r0, 0
+ mov r3, r10
+ strb r0, [r3]
+ movs r0, 0x1
+ negs r0, r0
+_08000EF0:
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end dma3_transfer_queue_add_copy
+
+ thumb_func_start dma3_transfer_queue_add_fill
+dma3_transfer_queue_add_fill: @ 8000F00
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ mov r9, r0
+ mov r8, r1
+ lsls r2, 16
+ lsrs r7, r2, 16
+ lsls r3, 24
+ lsrs r5, r3, 24
+ movs r6, 0
+ ldr r0, =0x03000811
+ ldrb r2, [r0]
+ ldr r1, =0x03000810
+ movs r0, 0x1
+ strb r0, [r1]
+ mov r10, r1
+ ldr r0, =0x03000010
+ mov r12, r0
+ mov r4, r12
+ lsls r0, r2, 4
+ adds r0, 0x8
+ adds r1, r0, r4
+_08000F30:
+ lsls r3, r2, 4
+ ldrh r0, [r1]
+ cmp r0, 0
+ bne _08000F78
+ adds r0, r4, 0x4
+ adds r0, r3, r0
+ mov r6, r8
+ str r6, [r0]
+ strh r7, [r1]
+ strh r5, [r1, 0x2]
+ adds r0, r4, 0
+ adds r0, 0xC
+ adds r0, r3, r0
+ mov r3, r9
+ str r3, [r0]
+ cmp r5, 0x1
+ bne _08000F64
+ movs r0, 0x2
+ b _08000F66
+ .align 2, 0
+ .pool
+_08000F64:
+ movs r0, 0x4
+_08000F66:
+ strh r0, [r1, 0x2]
+ movs r0, 0
+ ldr r6, =0x03000810
+ strb r0, [r6]
+ lsls r0, r2, 16
+ asrs r0, 16
+ b _08000F96
+ .align 2, 0
+ .pool
+_08000F78:
+ adds r1, 0x10
+ adds r2, 0x1
+ cmp r2, 0x7F
+ ble _08000F86
+ mov r1, r12
+ adds r1, 0x8
+ movs r2, 0
+_08000F86:
+ adds r6, 0x1
+ cmp r6, 0x7F
+ ble _08000F30
+ movs r0, 0
+ mov r1, r10
+ strb r0, [r1]
+ movs r0, 0x1
+ negs r0, r0
+_08000F96:
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end dma3_transfer_queue_add_fill
+
+ thumb_func_start dma3_transfer_queue_check_for_space
+dma3_transfer_queue_check_for_space: @ 8000FA4
+ push {lr}
+ movs r2, 0
+ lsls r0, 16
+ asrs r1, r0, 16
+ movs r3, 0x1
+ negs r3, r3
+ cmp r1, r3
+ bne _08000FCC
+ ldr r1, =0x03000010
+_08000FB6:
+ ldrh r0, [r1, 0x8]
+ cmp r0, 0
+ bne _08000FD8
+ adds r1, 0x10
+ adds r2, 0x1
+ cmp r2, 0x7F
+ ble _08000FB6
+_08000FC4:
+ movs r0, 0
+ b _08000FDC
+ .align 2, 0
+ .pool
+_08000FCC:
+ ldr r0, =0x03000010
+ lsls r1, 4
+ adds r1, r0
+ ldrh r0, [r1, 0x8]
+ cmp r0, 0
+ beq _08000FC4
+_08000FD8:
+ movs r0, 0x1
+ negs r0, r0
+_08000FDC:
+ pop {r1}
+ bx r1
+ .align 2, 0
+ .pool
+ thumb_func_end dma3_transfer_queue_check_for_space