summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-09-09 18:13:46 +0100
committerred031000 <rubenru09@aol.com>2020-09-09 18:13:46 +0100
commit85cf49ed0d9d8837e6e5dc9537b0c77a2f966f13 (patch)
tree60650bf82207f63ff387e3855f88bae86e715325
parent670e4127be3144b6d2bc57c1c882a0c1aa3137dd (diff)
arm9 MI_dma_hblank
-rw-r--r--arm9/asm/MI_dma_hblank.s70
-rw-r--r--arm9/lib/include/MI_dma.h3
-rw-r--r--arm9/lib/include/MI_dma_hblank.h9
-rw-r--r--arm9/lib/src/MI_dma.c4
-rw-r--r--arm9/lib/src/MI_dma_hblank.c31
-rw-r--r--arm9/lib/src/MI_init.c1
6 files changed, 46 insertions, 72 deletions
diff --git a/arm9/asm/MI_dma_hblank.s b/arm9/asm/MI_dma_hblank.s
deleted file mode 100644
index 7c149ef3..00000000
--- a/arm9/asm/MI_dma_hblank.s
+++ /dev/null
@@ -1,70 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- arm_func_start MI_HBlankDmaCopy16
-MI_HBlankDmaCopy16: ; 0x020CDD90
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r1
- mov r7, r0
- mov r4, r3
- mov r1, #0x10000000
- mov r5, r2
- bl MIi_CheckAnotherAutoDMA
- mov r0, r7
- mov r1, r6
- mov r2, r4
- mov r3, #0x0
- bl MIi_CheckDma0SourceAddress
-_020CDDC4:
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7, lr}
- bxeq lr
- mov r0, r7
- bl MI_WaitDma
- ldr r3, _020CDE00
- mov r0, r7
- mov r1, r6
- mov r2, r5
- orr r3, r3, r4, lsr #0x1
- bl MIi_DmaSetParams
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CDE00: .word 0x92600000
-
- arm_func_start MI_HBlankDmaCopy32
-MI_HBlankDmaCopy32: ; 0x020CDE04
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r1
- mov r7, r0
- mov r4, r3
- mov r1, #0x10000000
- mov r5, r2
- bl MIi_CheckAnotherAutoDMA
- mov r0, r7
- mov r1, r6
- mov r2, r4
- mov r3, #0x0
- bl MIi_CheckDma0SourceAddress
-_020CDE38:
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r0, r7
- bl MI_WaitDma
- ldr r3, _020CDE74
- mov r0, r7
- mov r1, r6
- mov r2, r5
- orr r3, r3, r4, lsr #0x2
- bl MIi_DmaSetParams
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CDE74: .word 0x96600000
diff --git a/arm9/lib/include/MI_dma.h b/arm9/lib/include/MI_dma.h
index bf07129a..aafc798b 100644
--- a/arm9/lib/include/MI_dma.h
+++ b/arm9/lib/include/MI_dma.h
@@ -17,7 +17,10 @@ typedef void (*MIDmaCallback)(void *);
#define MI_CNT_COPY16(size) (0x80000000 | ((size)/2))
#define MI_DMA_SRC_FIX (2UL << 23)
+#define MI_DMA_SRC_INC (0UL << 23)
+
#define MIi_DMA_TIMING_ANY (u32)(~0)
+#define MI_DMA_TIMING_H_BLANK (2UL << 27)
typedef union
{
diff --git a/arm9/lib/include/MI_dma_hblank.h b/arm9/lib/include/MI_dma_hblank.h
new file mode 100644
index 00000000..1c83ef3e
--- /dev/null
+++ b/arm9/lib/include/MI_dma_hblank.h
@@ -0,0 +1,9 @@
+#ifndef POKEDIAMOND_MI_DMA_HBLANK_H
+#define POKEDIAMOND_MI_DMA_HBLANK_H
+
+#include "nitro/types.h"
+
+void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size);
+void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size);
+
+#endif //POKEDIAMOND_MI_DMA_HBLANK_H
diff --git a/arm9/lib/src/MI_dma.c b/arm9/lib/src/MI_dma.c
index 565b1ef6..f322f87f 100644
--- a/arm9/lib/src/MI_dma.c
+++ b/arm9/lib/src/MI_dma.c
@@ -258,8 +258,8 @@ ARM_FUNC void MIi_CheckAnotherAutoDMA(u32 dmaNo, u32 dmaType)
timing = dmaCnt & 0x38000000;
if (timing == dmaType
- || (timing == 0x8000000 && dmaType == 0x10000000)
- || (timing == 0x10000000 && dmaType == 0x8000000))
+ || (timing == 0x8000000 && dmaType == MI_DMA_TIMING_H_BLANK)
+ || (timing == MI_DMA_TIMING_H_BLANK && dmaType == 0x8000000))
{
continue;
}
diff --git a/arm9/lib/src/MI_dma_hblank.c b/arm9/lib/src/MI_dma_hblank.c
new file mode 100644
index 00000000..67e579fe
--- /dev/null
+++ b/arm9/lib/src/MI_dma_hblank.c
@@ -0,0 +1,31 @@
+#include "MI_dma_hblank.h"
+#include "MI_dma.h"
+#include "function_target.h"
+
+ARM_FUNC void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size)
+{
+ MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
+ MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
+
+ if (size == 0)
+ {
+ return;
+ }
+
+ MI_WaitDma(dmaNo);
+ MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0x96600000 | (size / 4)));
+}
+
+ARM_FUNC void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size)
+{
+ MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
+ MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
+
+ if (size == 0)
+ {
+ return;
+ }
+
+ MI_WaitDma(dmaNo);
+ MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, (u32)(0x92600000 | (size / 2)));
+}
diff --git a/arm9/lib/src/MI_init.c b/arm9/lib/src/MI_init.c
index 4556e95a..4c861286 100644
--- a/arm9/lib/src/MI_init.c
+++ b/arm9/lib/src/MI_init.c
@@ -1,3 +1,4 @@
+#include "MI_init.h"
#include "nitro/types.h"
#include "function_target.h"
#include "MI_dma.h"