diff options
-rw-r--r-- | arm7/lib/include/MI_memory.h | 6 | ||||
-rw-r--r-- | arm9/asm/MI_memory.s | 287 | ||||
-rw-r--r-- | arm9/lib/include/MI_memory.h | 31 | ||||
-rw-r--r-- | arm9/lib/include/gx.h | 3 | ||||
-rw-r--r-- | arm9/lib/src/GX_g3imm.c | 2 | ||||
-rw-r--r-- | arm9/lib/src/GX_g3x.c | 4 | ||||
-rw-r--r-- | arm9/lib/src/MI_memory.c | 339 |
7 files changed, 361 insertions, 311 deletions
diff --git a/arm7/lib/include/MI_memory.h b/arm7/lib/include/MI_memory.h index 53398ec5..1e0de0b9 100644 --- a/arm7/lib/include/MI_memory.h +++ b/arm7/lib/include/MI_memory.h @@ -1,5 +1,5 @@ -#ifndef GUARD_MI_MEMORY_H -#define GUARD_MI_MEMORY_H +#ifndef POKEDIAMOND_ARM7_MI_MEMORY_H +#define POKEDIAMOND_ARM7_MI_MEMORY_H #include "nitro/types.h" @@ -22,4 +22,4 @@ static inline void MI_CpuClear32(void *dest, u32 size) MI_CpuFill32(dest, 0, size); } -#endif +#endif //POKEDIAMOND_ARM7_MI_MEMORY_H diff --git a/arm9/asm/MI_memory.s b/arm9/asm/MI_memory.s deleted file mode 100644 index ca664393..00000000 --- a/arm9/asm/MI_memory.s +++ /dev/null @@ -1,287 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start MIi_CpuClear16 -MIi_CpuClear16: ; 0x020CE1C8 - mov r3, #0x0 -_020CE1CC: - cmp r3, r2 - strlth r0, [r1, r3] - addlt r3, r3, #0x2 - blt _020CE1CC - bx lr - - arm_func_start MIi_CpuCopy16 -MIi_CpuCopy16: ; 0x020CE1E0 - mov r12, #0x0 -_020CE1E4: - cmp r12, r2 - ldrlth r3, [r0, r12] - strlth r3, [r1, r12] - addlt r12, r12, #0x2 - blt _020CE1E4 - bx lr - - arm_func_start MIi_CpuClear32 -MIi_CpuClear32: ; 0x020CE1FC - add r12, r1, r2 -_020CE200: - cmp r1, r12 - stmltia r1!, {r0} - blt _020CE200 - bx lr - - arm_func_start MIi_CpuCopy32 -MIi_CpuCopy32: ; 0x020CE210 - add r12, r1, r2 -_020CE214: - cmp r1, r12 - ldmltia r0!, {r2} - stmltia r1!, {r2} - blt _020CE214 - bx lr - - arm_func_start MIi_CpuSend32 -MIi_CpuSend32: ; 0x020CE228 - add r12, r0, r2 -_020CE22C: - cmp r0, r12 - ldmltia r0!, {r2} - strlt r2, [r1, #0x0] - blt _020CE22C - bx lr - - arm_func_start MIi_CpuClearFast -MIi_CpuClearFast: ; 0x020CE240 - stmdb sp!, {r4-r9} - add r9, r1, r2 - mov r12, r2, lsr #0x5 - add r12, r1, r12, lsl #0x5 - mov r2, r0 - mov r3, r2 - mov r4, r2 - mov r5, r2 - mov r6, r2 - mov r7, r2 - mov r8, r2 -_020CE26C: - cmp r1, r12 - stmltia r1!, {r0,r2-r8} - blt _020CE26C -_020CE278: - cmp r1, r9 - stmltia r1!, {r0} - blt _020CE278 - ldmia sp!, {r4-r9} - bx lr - - arm_func_start MIi_CpuCopyFast -MIi_CpuCopyFast: ; 0x020CE28C - stmdb sp!, {r4-r10} - add r10, r1, r2 - mov r12, r2, lsr #0x5 - add r12, r1, r12, lsl #0x5 -_020CE29C: - cmp r1, r12 - ldmltia r0!, {r2-r9} - stmltia r1!, {r2-r9} - blt _020CE29C -_020CE2AC: - cmp r1, r10 - ldmltia r0!, {r2} - stmltia r1!, {r2} - blt _020CE2AC - ldmia sp!, {r4-r10} - bx lr - - arm_func_start MI_Copy16B -MI_Copy16B: - ldmia r0!, {r2, r3, ip} - stmia r1!, {r2, r3, ip} - ldmia r0!, {r2, r3, ip} - stmia r1!, {r2, r3, ip} - ldmia r0!, {r2, r3} - stmia r1!, {r2, r3} - bx lr - - arm_func_start MI_Copy36B -MI_Copy36B: ; 0x020CE2E0 - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - bx lr - - arm_func_start MI_Copy48B -MI_Copy48B: ; 0x020CE2FC - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - bx lr - - arm_func_start MI_Copy64B -MI_Copy64B: ; 0x020CE320 - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1!, {r2-r3,r12} - ldmia r0, {r0,r2-r3,r12} - stmia r1!, {r0,r2-r3,r12} - bx lr - - arm_func_start MI_CpuFill8 -MI_CpuFill8: ; 0x020CE34C - cmp r2, #0x0 - bxeq lr - tst r0, #0x1 - beq _020CE378 - ldrh r12, [r0, #-0x1] - and r12, r12, #0xff - orr r3, r12, r1, lsl #0x8 - strh r3, [r0, #-0x1] - add r0, r0, #0x1 - subs r2, r2, #0x1 - bxeq lr -_020CE378: - cmp r2, #0x2 - blo _020CE3C0 - orr r1, r1, r1, lsl #0x8 - tst r0, #0x2 - beq _020CE398 - strh r1, [r0], #0x2 - subs r2, r2, #0x2 - bxeq lr -_020CE398: - orr r1, r1, r1, lsl #0x10 - bics r3, r2, #0x3 - beq _020CE3B8 - sub r2, r2, r3 - add r12, r3, r0 -_020CE3AC: - str r1, [r0], #0x4 - cmp r0, r12 - blo _020CE3AC -_020CE3B8: - tst r2, #0x2 - strneh r1, [r0], #0x2 -_020CE3C0: - tst r2, #0x1 - bxeq lr - ldrh r3, [r0, #0x0] - and r3, r3, #0xff00 - and r1, r1, #0xff - orr r1, r1, r3 - strh r1, [r0, #0x0] - bx lr - - arm_func_start MI_CpuCopy8 -MI_CpuCopy8: - cmp r2, #0x0 - bxeq lr - tst r1, #0x1 - beq _020CE420 - ldrh r12, [r1, #-0x1] - and r12, r12, #0xff - tst r0, #0x1 - ldrneh r3, [r0, #-0x1] - movne r3, r3, lsr #0x8 - ldreqh r3, [r0, #0x0] - orr r3, r12, r3, lsl #0x8 - strh r3, [r1, #-0x1] - add r0, r0, #0x1 - add r1, r1, #0x1 - subs r2, r2, #0x1 - bxeq lr -_020CE420: - eor r12, r1, r0 - tst r12, #0x1 - beq _020CE474 - bic r0, r0, #0x1 - ldrh r12, [r0], #0x2 - mov r3, r12, lsr #0x8 - subs r2, r2, #0x2 - blo _020CE458 -_020CE440: - ldrh r12, [r0], #0x2 - orr r12, r3, r12, lsl #0x8 - strh r12, [r1], #0x2 - mov r3, r12, lsr #0x10 - subs r2, r2, #0x2 - bhs _020CE440 -_020CE458: - tst r2, #0x1 - bxeq lr - ldrh r12, [r1, #0x0] - and r12, r12, #0xff00 - orr r12, r12, r3 - strh r12, [r1, #0x0] - bx lr -_020CE474: - tst r12, #0x2 - beq _020CE4A0 - bics r3, r2, #0x1 - beq _020CE4EC - sub r2, r2, r3 - add r12, r3, r1 -_020CE48C: - ldrh r3, [r0], #0x2 - strh r3, [r1], #0x2 - cmp r1, r12 - blo _020CE48C - b _020CE4EC -_020CE4A0: - cmp r2, #0x2 - blo _020CE4EC - tst r1, #0x2 - beq _020CE4C0 - ldrh r3, [r0], #0x2 - strh r3, [r1], #0x2 - subs r2, r2, #0x2 - bxeq lr -_020CE4C0: - bics r3, r2, #0x3 - beq _020CE4E0 - sub r2, r2, r3 - add r12, r3, r1 -_020CE4D0: - ldr r3, [r0], #0x4 - str r3, [r1], #0x4 - cmp r1, r12 - blo _020CE4D0 -_020CE4E0: - tst r2, #0x2 - ldrneh r3, [r0], #0x2 - strneh r3, [r1], #0x2 -_020CE4EC: - tst r2, #0x1 - bxeq lr - ldrh r2, [r1, #0x0] - ldrh r0, [r0, #0x0] - and r2, r2, #0xff00 - and r0, r0, #0xff - orr r0, r2, r0 - strh r0, [r1, #0x0] - bx lr - - thumb_func_start MI_Zero36B -MI_Zero36B: ; 0x020CE510 - mov r1, #0x0 - mov r2, #0x0 - mov r3, #0x0 - stmia r0!, {r1-r3} - stmia r0!, {r1-r3} - stmia r0!, {r1-r3} - bx lr diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h index 981fdc81..01c12f86 100644 --- a/arm9/lib/include/MI_memory.h +++ b/arm9/lib/include/MI_memory.h @@ -1,22 +1,29 @@ -#ifndef NITRO_MI_MEMORY_H_ -#define NITRO_MI_MEMORY_H_ +#ifndef POKEDIAMOND_ARM9_MI_MEMORY_H +#define POKEDIAMOND_ARM9_MI_MEMORY_H #include "nitro/types.h" -void MI_CpuFill8(void *dest, u8 data, u32 size); -void MI_CpuCopy8(void const *src, void *dest, u32 size); -void MIi_CpuClearFast(u32 data, void *destp, u32 size); +void MIi_CpuClear16(register u16 data, register void *destp, register u32 size); +void MIi_CpuCopy16(register const void *srcp, register void *destp, register u32 size); +void MIi_CpuClear32(register u32 data, register void *destp, register u32 size); +void MIi_CpuCopy32(register const void *srcp, register void *destp, register u32 size); +void MIi_CpuSend32(register const void *srcp, volatile void *destp, u32 size); +void MIi_CpuClearFast(register u32 data, register void *destp, register u32 size); +void MIi_CpuCopyFast(register const void *srcp, register void *destp, register u32 size); +void MI_Copy32B(register const void *pSrc, register void *pDest); +void MI_Copy36B(register const void *pSrc, register void *pDest); +void MI_Copy48B(register const void *pSrc, register void *pDest); +void MI_Copy64B(register const void *pSrc, register void *pDest); +void MI_CpuFill8(register void *dstp, register u8 data, register u32 size); +void MI_CpuCopy8(register const void *srcp, register void *dstp, register u32 size); +void MI_Zero36B(register void *pDest); + static inline void MI_CpuClearFast(void *destp, u32 size) { MIi_CpuClearFast(0, destp, size); } static inline void MI_CpuClear8(void *dest, u32 size) { MI_CpuFill8(dest, 0, size); } -void MIi_CpuCopy16(const void *src, void *dst, u32 size); - -void MIi_CpuClear32(u32 data, void *destp, u32 size); - -void MIi_CpuClear16(u16 data, void *destp, u32 size); static inline void MI_CpuClear16(void * destp, u32 size) { @@ -38,6 +45,4 @@ static inline void MI_CpuCopy16(const void *src, void *dest, u32 size) MIi_CpuCopy16(src, dest, size); } -void MIi_CpuClearFast(u32 data, void *destp, u32 size); - -#endif //NITRO_MI_MEMORY_H_ +#endif //POKEDIAMOND_ARM9_MI_MEMORY_H diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index f9478851..26f6cfaf 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -9,9 +9,6 @@ //temporary while other files aren't decompiled void GXi_NopClearFifo128_(void *); -void MI_Copy16B(const void *, void *); -void MI_Copy64B(void *src, void *dst); -void MIi_CpuCopy32(const void *src, void *dst, u32 size); #include "GXcommon.h" #include "GX_struct_2d.h" diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c index f2129c48..1798338e 100644 --- a/arm9/lib/src/GX_g3imm.c +++ b/arm9/lib/src/GX_g3imm.c @@ -1,8 +1,6 @@ #include "global.h" #include "gx.h" -void MI_Copy36B(void *src, void *dst); - ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ reg_G3X_GXFIFO = 0x17; GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index 41070a9b..9954c4cb 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -4,8 +4,6 @@ extern u32 GXi_DmaId; -void MI_Copy36B(void *src, void *dst); - ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ mov r1, #0x0 mov r2, #0x0 @@ -168,7 +166,7 @@ ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ } ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ - MI_Copy16B(tbl_ptr, (void *)®_G3X_FOG_TABLE_0); + MI_Copy32B(tbl_ptr, (void *)®_G3X_FOG_TABLE_0); } ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ diff --git a/arm9/lib/src/MI_memory.c b/arm9/lib/src/MI_memory.c new file mode 100644 index 00000000..a97ff167 --- /dev/null +++ b/arm9/lib/src/MI_memory.c @@ -0,0 +1,339 @@ +#include "MI_memory.h" +#include "function_target.h" + +ARM_FUNC asm void MIi_CpuClear16(register u16 data, register void *destp, register u32 size) +{ + mov r3, #0 + +_020CE1CC: + cmp r3, r2 + strlth r0, [r1, r3] + addlt r3, r3, #2 + blt _020CE1CC + + bx lr +} + +ARM_FUNC asm void MIi_CpuCopy16(register const void *srcp, register void *destp, register u32 size) +{ + mov r12, #0 + +_020CE1CC: + cmp r12, r2 + ldrlth r3, [r0, r12] + strlth r3, [r1, r12] + addlt r12, r12, #2 + blt _020CE1CC + + bx lr +} + +ARM_FUNC asm void MIi_CpuClear32(register u32 data, register void *destp, register u32 size) +{ + add r12, r1, r2 + +_020CE200: + cmp r1, r12 + stmltia r1!, {r0} + blt _020CE200 + bx lr +} + +ARM_FUNC asm void MIi_CpuCopy32(register const void *srcp, register void *destp, register u32 size) +{ + add r12, r1, r2 + +_020CE214: + cmp r1, r12 + ldmltia r0!, {r2} + stmltia r1!, {r2} + blt _020CE214 + bx lr +} + +ARM_FUNC asm void MIi_CpuSend32(register const void *srcp, volatile void *destp, u32 size) +{ + add r12, r0, r2 + +_020CE22C: + cmp r0, r12 + ldmltia r0!, {r2} + strlt r2, [r1] + blt _020CE22C + + bx lr +} + +ARM_FUNC asm void MIi_CpuClearFast(register u32 data, register void *destp, register u32 size) +{ + stmfd sp!, {r4-r9} + + add r9, r1, r2 + mov r12, r2, lsr #5 + add r12, r1, r12, lsl #5 + + mov r2, r0 + mov r3, r2 + mov r4, r2 + mov r5, r2 + mov r6, r2 + mov r7, r2 + mov r8, r2 + +_020CE26C: + cmp r1, r12 + stmltia r1!, {r0, r2-r8} + blt _020CE26C +_020CE278: + cmp r1, r9 + stmltia r1!, {r0} + blt _020CE278 + + ldmfd sp!, {r4-r9} + bx lr +} + +ARM_FUNC asm void MIi_CpuCopyFast(register const void *srcp, register void *destp, register u32 size) +{ + stmfd sp!, {r4-r10} + + add r10, r1, r2 + mov r12, r2, lsr #5 + add r12, r1, r12, lsl #5 + +_020CE29C: + cmp r1, r12 + ldmltia r0!, {r2-r9} + stmltia r1!, {r2-r9} + blt _020CE29C +_020CE2AC: + cmp r1, r10 + ldmltia r0!, {r2} + stmltia r1!, {r2} + blt _020CE2AC + + ldmfd sp!, {r4-r10} + bx lr +} + +ARM_FUNC asm void MI_Copy32B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3} + stmia r1!, {r2, r3} + + bx lr +} + +ARM_FUNC asm void MI_Copy36B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + + bx lr +} + +ARM_FUNC asm void MI_Copy48B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + + bx lr +} + +ARM_FUNC asm void MI_Copy64B(register const void *pSrc, register void *pDest) +{ + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0!, {r2, r3, r12} + stmia r1!, {r2, r3, r12} + ldmia r0, {r0, r2, r3, r12} + stmia r1!, {r0, r2, r3, r12} + + bx lr +} + +ARM_FUNC asm void MI_CpuFill8(register void *dstp, register u8 data, register u32 size) +{ + cmp r2, #0 + bxeq lr + + tst r0, #1 + beq _020CE378 + ldrh r12, [r0, #-1] + and r12, r12, #0x00ff + orr r3, r12, r1, lsl #8 + strh r3, [r0, #-1] + add r0, r0, #1 + subs r2, r2, #1 + bxeq lr + +_020CE378: + cmp r2, #2 + bcc _020CE3C0 + orr r1, r1, r1, lsl #8 + tst r0, #2 + beq _020CE398 + strh r1, [r0], #2 + subs r2, r2, #2 + bxeq lr + +_020CE398: + orr r1, r1, r1, lsl #16 + bics r3, r2, #3 + beq _020CE3B8 + sub r2, r2, r3 + add r12, r3, r0 + +_020CE3AC: + str r1, [r0], #4 + cmp r0, r12 + bcc _020CE3AC + +_020CE3B8: + tst r2, #2 + strneh r1, [r0], #2 + +_020CE3C0: + tst r2, #1 + bxeq lr + ldrh r3, [r0] + and r3, r3, #0xff00 + and r1, r1, #0x00ff + orr r1, r1, r3 + strh r1, [r0] + bx lr +} + +ARM_FUNC asm void MI_CpuCopy8(register const void *srcp, register void *dstp, register u32 size) +{ + cmp r2, #0 + bxeq lr + + tst r1, #1 + beq _020CE420 + ldrh r12, [r1, #-1] + and r12, r12, #0x00ff + tst r0, #1 + ldrneh r3, [r0, #-1] + movne r3, r3, lsr #8 + ldreqh r3, [r0] + orr r3, r12, r3, lsl #8 + strh r3, [r1, #-1] + add r0, r0, #1 + add r1, r1, #1 + subs r2, r2, #1 + bxeq lr + +_020CE420: + eor r12, r1, r0 + tst r12, #1 + beq _020CE474 + + bic r0, r0, #1 + ldrh r12, [r0], #2 + mov r3, r12, lsr #8 + subs r2, r2, #2 + bcc _020CE458 + +_020CE440: + ldrh r12, [r0], #2 + orr r12, r3, r12, lsl #8 + strh r12, [r1], #2 + mov r3, r12, lsr #16 + subs r2, r2, #2 + bcs _020CE440 + +_020CE458: + tst r2, #1 + bxeq lr + ldrh r12, [r1] + and r12, r12, #0xff00 + orr r12, r12, r3 + strh r12, [r1] + bx lr + +_020CE474: + tst r12, #2 + beq _020CE4A0 + + bics r3, r2, #1 + beq _020CE4EC + sub r2, r2, r3 + add r12, r3, r1 + +_020CE48C: + ldrh r3, [r0], #2 + strh r3, [r1], #2 + cmp r1, r12 + bcc _020CE48C + b _020CE4EC + +_020CE4A0: + cmp r2, #2 + bcc _020CE4EC + tst r1, #2 + beq _020CE4C0 + ldrh r3, [r0], #2 + strh r3, [r1], #2 + subs r2, r2, #2 + bxeq lr + +_020CE4C0: + bics r3, r2, #3 + beq _020CE4E0 + sub r2, r2, r3 + add r12, r3, r1 + +_020CE4D0: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r1, r12 + bcc _020CE4D0 + +_020CE4E0: + tst r2, #2 + ldrneh r3, [r0], #2 + strneh r3, [r1], #2 + +_020CE4EC: + tst r2, #1 + bxeq lr + ldrh r2, [r1] + ldrh r0, [r0] + and r2, r2, #0xff00 + and r0, r0, #0x00ff + orr r0, r2, r0 + strh r0, [r1] + + bx lr +} + +THUMB_FUNC asm void MI_Zero36B(register void *pDest) +{ + mov r1, #0 + mov r2, #0 + mov r3, #0 + stmia r0!, {r1, r2, r3} + stmia r0!, {r1, r2, r3} + stmia r0!, {r1, r2, r3} + + bx lr +} |