diff options
-rw-r--r-- | arm9/arm9.lsf | 1 | ||||
-rw-r--r-- | arm9/asm/unk_02009EAC.s | 664 | ||||
-rw-r--r-- | arm9/lib/libnns/include/NNS_g2d.h | 12 | ||||
-rw-r--r-- | arm9/src/unk_02009EAC.c | 170 | ||||
-rw-r--r-- | arm9/src/unk_0200A104.c | 178 | ||||
-rw-r--r-- | include/unk_02009EAC.h | 37 | ||||
-rw-r--r-- | include/unk_0200A104.h | 28 |
7 files changed, 426 insertions, 664 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 64944997..68f2037d 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -25,6 +25,7 @@ Static arm9 Object unk_02008AA4.o Object unk_02008DEC.o Object unk_02009EAC.o + Object unk_0200A104.o Object msgdata.o Object script_buffers.o Object unk_0200BA78.o diff --git a/arm9/asm/unk_02009EAC.s b/arm9/asm/unk_02009EAC.s deleted file mode 100644 index b08b52fd..00000000 --- a/arm9/asm/unk_02009EAC.s +++ /dev/null @@ -1,664 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global UNK_021C4670 -UNK_021C4670: ; 0x021C4670 - .space 0x4 - - .global UNK_021C4674 -UNK_021C4674: ; 0x021C4674 - .space 0x20 - - .global UNK_021C4694 -UNK_021C4694: ; 0x021C4694 - .space 0x20 - - .text - - thumb_func_start FUN_02009EAC -FUN_02009EAC: ; 0x02009EAC - push {r3-r4, lr} - sub sp, #0x14 - add r4, r0, #0x0 - cmp r4, #0x4 - bge _02009EC0 - mov r0, #0x4 - cmp r1, #0x7c - ble _02009EC0 - sub r4, r0, r4 - sub r1, r1, r4 -_02009EC0: - cmp r2, #0x1 - bge _02009ED0 - mov r4, #0x1 - cmp r3, #0x1e - ble _02009ED2 - sub r2, r4, r2 - sub r3, r3, r2 - b _02009ED2 -_02009ED0: - add r4, r2, #0x0 -_02009ED2: - ldr r2, [sp, #0x20] - str r2, [sp, #0x0] - ldr r2, [sp, #0x24] - str r2, [sp, #0x4] - ldr r2, [sp, #0x28] - str r2, [sp, #0x8] - ldr r2, [sp, #0x2c] - str r2, [sp, #0xc] - ldr r2, [sp, #0x30] - str r2, [sp, #0x10] - add r2, r4, #0x0 - bl FUN_02009EF0 - add sp, #0x14 - pop {r3-r4, pc} - - thumb_func_start FUN_02009EF0 -FUN_02009EF0: ; 0x02009EF0 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - ldr r0, _02009F7C ; =UNK_021C4670 - add r4, r1, #0x0 - ldr r0, [r0, #0x0] - add r6, r2, #0x0 - add r7, r3, #0x0 - cmp r0, #0x0 - beq _02009F08 - bl GF_AssertFail -_02009F08: - ldr r0, [sp, #0x30] - mov r1, #0x3c - bl AllocFromHeap - ldr r1, _02009F7C ; =UNK_021C4670 - cmp r0, #0x0 - str r0, [r1, #0x0] - bne _02009F1C - bl GF_AssertFail -_02009F1C: - ldr r1, _02009F7C ; =UNK_021C4670 - lsl r3, r6, #0x10 - ldr r2, [sp, #0x30] - ldr r0, [r1, #0x0] - lsr r3, r3, #0x10 - str r2, [r0, #0x38] - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - ldr r0, [r1, #0x0] - lsl r1, r5, #0x10 - lsl r2, r4, #0x10 - lsr r1, r1, #0x10 - lsr r2, r2, #0x10 - bl NNS_G2dGetNewOamManagerInstance - cmp r0, #0x0 - bne _02009F48 - bl GF_AssertFail -_02009F48: - ldr r0, [sp, #0x2c] - ldr r1, [sp, #0x20] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x0] - mov r0, #0x1 - str r0, [sp, #0x4] - ldr r0, _02009F7C ; =UNK_021C4670 - ldr r2, [sp, #0x24] - ldr r3, [sp, #0x28] - ldr r0, [r0, #0x0] - lsl r1, r1, #0x10 - lsl r2, r2, #0x10 - lsl r3, r3, #0x10 - add r0, #0x1c - lsr r1, r1, #0x10 - lsr r2, r2, #0x10 - lsr r3, r3, #0x10 - bl NNS_G2dGetNewOamManagerInstance - cmp r0, #0x0 - bne _02009F78 - bl GF_AssertFail -_02009F78: - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 -_02009F7C: .word UNK_021C4670 - - thumb_func_start FUN_02009F80 -FUN_02009F80: ; 0x02009F80 - push {r3, lr} - ldr r0, _02009F9C ; =UNK_021C4670 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _02009F98 - bl NNS_G2dApplyAndResetOamManagerBuffer - ldr r0, _02009F9C ; =UNK_021C4670 - ldr r0, [r0, #0x0] - add r0, #0x1c - bl NNS_G2dApplyAndResetOamManagerBuffer -_02009F98: - pop {r3, pc} - nop -_02009F9C: .word UNK_021C4670 - - thumb_func_start FUN_02009FA0 -FUN_02009FA0: ; 0x02009FA0 - push {r3, lr} - ldr r0, _02009FD4 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _02009FAE - bl GF_AssertFail -_02009FAE: - ldr r0, _02009FD4 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x38] - bl FUN_0200A064 - ldr r0, _02009FD4 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x38] - bl FUN_0200A06C - ldr r0, _02009FD4 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - bl FreeToHeap - ldr r0, _02009FD4 ; =UNK_021C4670 - mov r1, #0x0 - str r1, [r0, #0x0] - pop {r3, pc} - nop -_02009FD4: .word UNK_021C4670 - - thumb_func_start FUN_02009FD8 -FUN_02009FD8: ; 0x02009FD8 - push {r4-r7, lr} - sub sp, #0xc - add r6, r0, #0x0 - ldr r0, _0200A024 ; =UNK_021C4670 - add r7, r1, #0x0 - ldr r0, [r0, #0x0] - add r5, r2, #0x0 - add r4, r3, #0x0 - cmp r0, #0x0 - bne _02009FF0 - bl GF_AssertFail -_02009FF0: - cmp r5, #0x1 - bne _0200A00C - ldr r0, _0200A028 ; =FUN_020213A0 - ldr r2, _0200A02C ; =FUN_0200A074 - str r0, [sp, #0x0] - str r5, [sp, #0x4] - ldr r3, _0200A030 ; =FUN_0200A0B8 - add r0, r6, #0x0 - add r1, r7, #0x0 - str r4, [sp, #0x8] - bl FUN_0202135C - add sp, #0xc - pop {r4-r7, pc} -_0200A00C: - ldr r0, _0200A028 ; =FUN_020213A0 - ldr r2, _0200A034 ; =FUN_0200A094 - str r0, [sp, #0x0] - str r5, [sp, #0x4] - ldr r3, _0200A038 ; =FUN_0200A0DC - add r0, r6, #0x0 - add r1, r7, #0x0 - str r4, [sp, #0x8] - bl FUN_0202135C - add sp, #0xc - pop {r4-r7, pc} - .balign 4 -_0200A024: .word UNK_021C4670 -_0200A028: .word FUN_020213A0 -_0200A02C: .word FUN_0200A074 -_0200A030: .word FUN_0200A0B8 -_0200A034: .word FUN_0200A094 -_0200A038: .word FUN_0200A0DC - - thumb_func_start FUN_0200A03C -FUN_0200A03C: ; 0x0200A03C - push {r4, lr} - add r4, r0, #0x0 - ldr r0, _0200A060 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _0200A04C - bl GF_AssertFail -_0200A04C: - cmp r4, #0x0 - bne _0200A056 - ldr r0, _0200A060 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - pop {r4, pc} -_0200A056: - ldr r0, _0200A060 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - add r0, #0x1c - pop {r4, pc} - nop -_0200A060: .word UNK_021C4670 - - thumb_func_start FUN_0200A064 -FUN_0200A064: ; 0x0200A064 - ldr r3, _0200A068 ; =FUN_020203CC - bx r3 - .balign 4 -_0200A068: .word FUN_020203CC - - thumb_func_start FUN_0200A06C -FUN_0200A06C: ; 0x0200A06C - ldr r3, _0200A070 ; =FUN_02020404 - bx r3 - .balign 4 -_0200A070: .word FUN_02020404 - - thumb_func_start FUN_0200A074 -FUN_0200A074: ; 0x0200A074 - push {r4, lr} - add r3, r0, #0x0 - ldr r0, _0200A090 ; =UNK_021C4670 - add r2, r1, #0x0 - ldr r0, [r0, #0x0] - add r1, r3, #0x0 - bl NNS_G2dEntryOamManagerOamWithAffineIdx - add r4, r0, #0x0 - bne _0200A08C - bl GF_AssertFail -_0200A08C: - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 -_0200A090: .word UNK_021C4670 - - thumb_func_start FUN_0200A094 -FUN_0200A094: ; 0x0200A094 - push {r4, lr} - add r3, r0, #0x0 - ldr r0, _0200A0B4 ; =UNK_021C4670 - add r2, r1, #0x0 - ldr r0, [r0, #0x0] - add r1, r3, #0x0 - add r0, #0x1c - bl NNS_G2dEntryOamManagerOamWithAffineIdx - add r4, r0, #0x0 - bne _0200A0AE - bl GF_AssertFail -_0200A0AE: - add r0, r4, #0x0 - pop {r4, pc} - nop -_0200A0B4: .word UNK_021C4670 - - thumb_func_start FUN_0200A0B8 -FUN_0200A0B8: ; 0x0200A0B8 - push {r4, lr} - add r1, r0, #0x0 - ldr r0, _0200A0D4 ; =UNK_021C4670 - ldr r0, [r0, #0x0] - bl NNS_G2dEntryOamManagerAffine - add r4, r0, #0x0 - ldr r0, _0200A0D8 ; =0x0000FFFE - cmp r4, r0 - bne _0200A0D0 - bl GF_AssertFail -_0200A0D0: - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 -_0200A0D4: .word UNK_021C4670 -_0200A0D8: .word 0x0000FFFE - - thumb_func_start FUN_0200A0DC -FUN_0200A0DC: ; 0x0200A0DC - push {r4, lr} - add r1, r0, #0x0 - ldr r0, _0200A0FC ; =UNK_021C4670 - ldr r0, [r0, #0x0] - add r0, #0x1c - bl NNS_G2dEntryOamManagerAffine - add r4, r0, #0x0 - ldr r0, _0200A100 ; =0x0000FFFE - cmp r4, r0 - bne _0200A0F6 - bl GF_AssertFail -_0200A0F6: - add r0, r4, #0x0 - pop {r4, pc} - nop -_0200A0FC: .word UNK_021C4670 -_0200A100: .word 0x0000FFFE - - thumb_func_start FUN_0200A104 -FUN_0200A104: ; 0x0200A104 - push {r3-r7, lr} - add r5, r0, #0x0 - mov r0, #0x10 - ldrsb r2, [r5, r0] - mov r0, #0x14 - ldrsh r0, [r5, r0] - add r1, r2, #0x0 - mov r7, #0x1a - ldrsh r2, [r5, r7] - mul r1, r0 - mov r6, #0xa - ldrsh r0, [r5, r6] - add r1, r2, r1 - mov r4, #0x0 - cmp r0, r1 - beq _0200A162 - cmp r2, r0 - beq _0200A162 - strh r1, [r5, #0x1a] - ldrh r3, [r5, #0x18] - ldrh r0, [r5, #0x16] - add r2, r5, #0x0 - add r1, r5, #0x0 - add r0, r3, r0 - strh r0, [r5, #0x18] - ldrh r3, [r5, #0x18] - ldrh r0, [r5, #0x8] - add r2, #0x1a - add r1, #0x18 - cmp r3, r0 - blo _0200A166 - mov r3, #0x10 - ldrsh r0, [r2, r4] - ldrsb r3, [r5, r3] - add r0, r0, r3 - strh r0, [r2, #0x0] - ldrsh r2, [r5, r7] - ldrsh r0, [r5, r6] - cmp r2, r0 - beq _0200A15E - ldrh r2, [r1, #0x0] - ldrh r0, [r5, #0x8] - sub r0, r2, r0 - strh r0, [r1, #0x0] - b _0200A166 -_0200A15E: - mov r4, #0x1 - b _0200A166 -_0200A162: - strh r0, [r5, #0x1a] - mov r4, #0x1 -_0200A166: - ldr r1, [r5, #0x4] - mov r0, #0x1 - tst r0, r1 - beq _0200A17C - mov r2, #0x1a - ldrsh r2, [r5, r2] - ldr r0, _0200A198 ; =0x04000050 - ldr r1, [r5, #0x0] - bl G2x_SetBlendBrightness_ - b _0200A18E -_0200A17C: - mov r0, #0x2 - tst r0, r1 - beq _0200A18E - mov r2, #0x1a - ldrsh r2, [r5, r2] - ldr r0, _0200A19C ; =0x04001050 - ldr r1, [r5, #0x0] - bl G2x_SetBlendBrightness_ -_0200A18E: - cmp r4, #0x1 - bne _0200A196 - mov r0, #0x0 - str r0, [r5, #0x1c] -_0200A196: - pop {r3-r7, pc} - .balign 4 -_0200A198: .word 0x04000050 -_0200A19C: .word 0x04001050 - - thumb_func_start FUN_0200A1A0 -FUN_0200A1A0: ; 0x0200A1A0 - push {r3-r7, lr} - add r5, r0, #0x0 - ldr r0, [r5, #0x1c] - add r4, r1, #0x0 - add r6, r2, #0x0 - add r7, r3, #0x0 - cmp r0, #0x0 - beq _0200A1B4 - bl GF_AssertFail -_0200A1B4: - ldr r1, [sp, #0x18] - mov r0, #0x1 - lsl r1, r1, #0x18 - str r0, [r5, #0x1c] - lsr r1, r1, #0x18 - str r1, [r5, #0x0] - ldr r1, [sp, #0x1c] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - str r1, [r5, #0x4] - strh r4, [r5, #0x8] - strh r6, [r5, #0xa] - strh r7, [r5, #0x1a] - sub r1, r7, r6 - strh r1, [r5, #0x12] - mov r1, #0x12 - ldrsh r2, [r5, r1] - cmp r2, #0x0 - ble _0200A1E0 - sub r1, #0x13 - strb r1, [r5, #0x10] - b _0200A1EA -_0200A1E0: - strb r0, [r5, #0x10] - ldrsh r0, [r5, r1] - sub r1, #0x13 - mul r1, r0 - strh r1, [r5, #0x12] -_0200A1EA: - mov r0, #0x12 - ldrsh r0, [r5, r0] - add r1, r4, #0x0 - bl _s32_div_f - strh r0, [r5, #0x14] - mov r0, #0x12 - ldrsh r0, [r5, r0] - add r1, r4, #0x0 - bl _s32_div_f - strh r1, [r5, #0x16] - mov r0, #0x0 - strh r0, [r5, #0x18] - pop {r3-r7, pc} - - thumb_func_start FUN_0200A208 -FUN_0200A208: ; 0x0200A208 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r7, r1, #0x0 - add r6, r2, #0x0 - add r4, r3, #0x0 - cmp r5, #0x0 - beq _0200A25E - ldr r1, [sp, #0x20] - mov r0, #0x1 - tst r0, r1 - beq _0200A23A - ldr r0, _0200A264 ; =0x04000050 - add r1, r4, #0x0 - bl G2x_SetBlendBrightness_ - str r4, [sp, #0x0] - mov r0, #0x1 - str r0, [sp, #0x4] - ldr r0, _0200A268 ; =UNK_021C4694 - add r1, r5, #0x0 - add r2, r7, #0x0 - add r3, r6, #0x0 - bl FUN_0200A1A0 -_0200A23A: - ldr r1, [sp, #0x20] - mov r0, #0x2 - tst r0, r1 - beq _0200A25E - ldr r0, _0200A26C ; =0x04001050 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl G2x_SetBlendBrightness_ - str r4, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - ldr r0, _0200A270 ; =UNK_021C4674 - add r1, r5, #0x0 - add r2, r7, #0x0 - add r3, r6, #0x0 - bl FUN_0200A1A0 -_0200A25E: - add sp, #0x8 - pop {r3-r7, pc} - nop -_0200A264: .word 0x04000050 -_0200A268: .word UNK_021C4694 -_0200A26C: .word 0x04001050 -_0200A270: .word UNK_021C4674 - - thumb_func_start FUN_0200A274 -FUN_0200A274: ; 0x0200A274 - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r2, #0x0 - mov r0, #0x1 - add r6, r1, #0x0 - tst r0, r4 - beq _0200A28A - ldr r0, _0200A2A4 ; =0x04000050 - add r2, r5, #0x0 - bl G2x_SetBlendBrightness_ -_0200A28A: - mov r0, #0x2 - tst r0, r4 - beq _0200A29A - ldr r0, _0200A2A8 ; =0x04001050 - add r1, r6, #0x0 - add r2, r5, #0x0 - bl G2x_SetBlendBrightness_ -_0200A29A: - add r0, r4, #0x0 - bl FUN_0200A2D8 - pop {r4-r6, pc} - nop -_0200A2A4: .word 0x04000050 -_0200A2A8: .word 0x04001050 - - thumb_func_start FUN_0200A2AC -FUN_0200A2AC: ; 0x0200A2AC - push {r3, lr} - ldr r0, _0200A2CC ; =UNK_021C4694 - mov r1, #0x0 - mov r2, #0x20 - bl MI_CpuFill8 - ldr r0, _0200A2D0 ; =UNK_021C4674 - mov r1, #0x0 - mov r2, #0x20 - bl MI_CpuFill8 - ldr r0, _0200A2D4 ; =UNK_021C4674 - mov r1, #0x0 - str r1, [r0, #0x3c] - str r1, [r0, #0x1c] - pop {r3, pc} - .balign 4 -_0200A2CC: .word UNK_021C4694 -_0200A2D0: .word UNK_021C4674 -_0200A2D4: .word UNK_021C4674 - - thumb_func_start FUN_0200A2D8 -FUN_0200A2D8: ; 0x0200A2D8 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x1 - tst r0, r4 - beq _0200A2F2 - ldr r0, _0200A30C ; =UNK_021C4694 - mov r1, #0x0 - mov r2, #0x20 - bl MI_CpuFill8 - ldr r0, _0200A310 ; =UNK_021C4674 - mov r1, #0x0 - str r1, [r0, #0x3c] -_0200A2F2: - mov r0, #0x2 - tst r0, r4 - beq _0200A308 - ldr r0, _0200A314 ; =UNK_021C4674 - mov r1, #0x0 - mov r2, #0x20 - bl MI_CpuFill8 - ldr r0, _0200A310 ; =UNK_021C4674 - mov r1, #0x0 - str r1, [r0, #0x1c] -_0200A308: - pop {r4, pc} - nop -_0200A30C: .word UNK_021C4694 -_0200A310: .word UNK_021C4674 -_0200A314: .word UNK_021C4674 - - thumb_func_start FUN_0200A318 -FUN_0200A318: ; 0x0200A318 - push {r3, lr} - ldr r0, _0200A338 ; =UNK_021C4674 - ldr r0, [r0, #0x3c] - cmp r0, #0x0 - beq _0200A328 - ldr r0, _0200A33C ; =UNK_021C4694 - bl FUN_0200A104 -_0200A328: - ldr r0, _0200A338 ; =UNK_021C4674 - ldr r0, [r0, #0x1c] - cmp r0, #0x0 - beq _0200A336 - ldr r0, _0200A340 ; =UNK_021C4674 - bl FUN_0200A104 -_0200A336: - pop {r3, pc} - .balign 4 -_0200A338: .word UNK_021C4674 -_0200A33C: .word UNK_021C4694 -_0200A340: .word UNK_021C4674 - - thumb_func_start FUN_0200A344 -FUN_0200A344: ; 0x0200A344 - cmp r0, #0x3 - bne _0200A35A - ldr r0, _0200A380 ; =UNK_021C4674 - ldr r1, [r0, #0x3c] - cmp r1, #0x0 - bne _0200A37A - ldr r0, [r0, #0x1c] - cmp r0, #0x0 - bne _0200A37A - mov r0, #0x1 - bx lr -_0200A35A: - cmp r0, #0x1 - bne _0200A36A - ldr r0, _0200A380 ; =UNK_021C4674 - ldr r0, [r0, #0x3c] - cmp r0, #0x0 - bne _0200A37A - mov r0, #0x1 - bx lr -_0200A36A: - cmp r0, #0x2 - bne _0200A37A - ldr r0, _0200A380 ; =UNK_021C4674 - ldr r0, [r0, #0x1c] - cmp r0, #0x0 - bne _0200A37A - mov r0, #0x1 - bx lr -_0200A37A: - mov r0, #0x0 - bx lr - nop -_0200A380: .word UNK_021C4674 diff --git a/arm9/lib/libnns/include/NNS_g2d.h b/arm9/lib/libnns/include/NNS_g2d.h index f7eed210..d65f0430 100644 --- a/arm9/lib/libnns/include/NNS_g2d.h +++ b/arm9/lib/libnns/include/NNS_g2d.h @@ -200,6 +200,11 @@ typedef struct NNSG2dAnimBankData } NNSG2dAnimBankData; +typedef struct NNSG2dOamManager +{ + u8 unk00[0x1c]; +} NNSG2dOamManager; + BOOL NNS_G2dGetUnpackedBGCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData); BOOL NNS_G2dGetUnpackedCharacterData(void * pNcgrFile, NNSG2dCharacterData ** ppCharData); BOOL NNS_G2dGetUnpackedScreenData(void * pNscrFile, NNSG2dScreenData ** ppScrData); @@ -209,4 +214,11 @@ BOOL NNS_G2dGetUnpackedPaletteCompressInfo(void * pNclrFile, NNSG2dPaletteCompre BOOL NNS_G2dGetUnpackedCellBank(void * pNcerFile, NNSG2dCellDataBank ** ppCellBank); BOOL NNS_G2dGetUnpackedAnimBank(void * pNanrFile, NNSG2dAnimBankData ** ppAnimBank); +BOOL NNS_G2dGetNewOamManagerInstance( + NNSG2dOamManager *oamManager, u16 param1, u16 param2, u16 param3, u16 param4, u32 param5); +void NNS_G2dApplyAndResetOamManagerBuffer(NNSG2dOamManager *oamManager); +u32 NNS_G2dEntryOamManagerOamWithAffineIdx( + NNSG2dOamManager *oamManager, u32 param1, u32 param2); +u32 NNS_G2dEntryOamManagerAffine(NNSG2dOamManager *oamManager, u32 param1); + #endif //NNSYS_NNS_G2D_H diff --git a/arm9/src/unk_02009EAC.c b/arm9/src/unk_02009EAC.c new file mode 100644 index 00000000..df21ed80 --- /dev/null +++ b/arm9/src/unk_02009EAC.c @@ -0,0 +1,170 @@ +#include "global.h" +#include "unk_02009EAC.h" +#include "GX_g2.h" +#include "MI_memory.h" +#include "heap.h" + + +extern void FUN_020213A0(void); +extern void FUN_0202135C(void *param0, + u32 *param1, + u32 (*param2)(u32, u32), + u32 (*param3)(u32), + void (*param4)(void), + u32 param5, + u32 param6); +extern void FUN_020203CC(u32 heap_id); +extern void FUN_02020404(u32 heap_id); + +struct UnkStruct_02009EAC *UNK_021C4670; + +THUMB_FUNC void FUN_02009EAC(s32 param0, + s32 param1, + s32 param2, + s32 param3, + u32 param4, + u32 param5, + u32 param6, + u32 param7, + u32 param8) +{ + s32 r0; + if (param0 < 4) + { + r0 = 4; + if (param1 > 0x7c) + { + param1 = param1 - (4 - param0); + } + } + else + { + r0 = param0; + } + + s32 r2; + if (param2 < 1) + { + r2 = 1; + if (param3 > 0x1e) + { + param3 = param3 - (1 - param2); + } + } + else + { + r2 = param2; + } + + FUN_02009EF0(r0, param1, r2, param3, param4, param5, param6, param7, param8); +} + +THUMB_FUNC void FUN_02009EF0(u32 param0, + u32 param1, + u32 param2, + u32 param3, + u32 param4, + u32 param5, + u32 param6, + u32 param7, + u32 param8) +{ + GF_ASSERT(UNK_021C4670 == NULL); + UNK_021C4670 = AllocFromHeap(param8, sizeof(struct UnkStruct_02009EAC)); + GF_ASSERT(UNK_021C4670); + + UNK_021C4670->heap_id = param8; + + GF_ASSERT(NNS_G2dGetNewOamManagerInstance( + &UNK_021C4670->oamManagers[0], param0, param1, param2, param3, 0)); + GF_ASSERT(NNS_G2dGetNewOamManagerInstance( + &UNK_021C4670->oamManagers[1], param4, param5, param6, param7, 1)); +} + +THUMB_FUNC void FUN_02009F80(void) +{ + if (UNK_021C4670 != NULL) + { + NNS_G2dApplyAndResetOamManagerBuffer(&UNK_021C4670->oamManagers[0]); + NNS_G2dApplyAndResetOamManagerBuffer(&UNK_021C4670->oamManagers[1]); + } +} + +THUMB_FUNC void FUN_02009FA0(void) +{ + GF_ASSERT(UNK_021C4670); + + FUN_0200A064(UNK_021C4670->heap_id); + FUN_0200A06C(UNK_021C4670->heap_id); + + FreeToHeap(UNK_021C4670); + UNK_021C4670 = NULL; +} + +THUMB_FUNC void FUN_02009FD8(void *param0, u32 *param1, u32 param2, u32 param3) +{ + GF_ASSERT(UNK_021C4670); + + if (param2 == 1) + { + FUN_0202135C(param0, param1, FUN_0200A074, FUN_0200A0B8, FUN_020213A0, param2, param3); + return; + } + + FUN_0202135C(param0, param1, FUN_0200A094, FUN_0200A0DC, FUN_020213A0, param2, param3); +} + +THUMB_FUNC NNSG2dOamManager *FUN_0200A03C(u32 param0) +{ + GF_ASSERT(UNK_021C4670); + if (param0 == 0) + { + return &UNK_021C4670->oamManagers[0]; + } + else + { + return &UNK_021C4670->oamManagers[1]; + } +} + +THUMB_FUNC void FUN_0200A064(u32 heap_id) +{ + FUN_020203CC(heap_id); +} + +THUMB_FUNC void FUN_0200A06C(u32 heap_id) +{ + FUN_02020404(heap_id); +} + +THUMB_FUNC u32 FUN_0200A074(u32 param0, u32 param1) +{ + u32 res = NNS_G2dEntryOamManagerOamWithAffineIdx(&UNK_021C4670->oamManagers[0], param0, param1); + GF_ASSERT(res); + + return res; +} + +THUMB_FUNC u32 FUN_0200A094(u32 param0, u32 param1) +{ + u32 res = NNS_G2dEntryOamManagerOamWithAffineIdx(&UNK_021C4670->oamManagers[1], param0, param1); + GF_ASSERT(res); + + return res; +} + +THUMB_FUNC u32 FUN_0200A0B8(u32 param0) +{ + u32 res = NNS_G2dEntryOamManagerAffine(&UNK_021C4670->oamManagers[0], param0); + GF_ASSERT(res != 0xFFFE); + + return res; +} + +THUMB_FUNC u32 FUN_0200A0DC(u32 param0) +{ + u32 res = NNS_G2dEntryOamManagerAffine(&UNK_021C4670->oamManagers[1], param0); + GF_ASSERT(res != 0xFFFE); + + return res; +} diff --git a/arm9/src/unk_0200A104.c b/arm9/src/unk_0200A104.c new file mode 100644 index 00000000..a0190301 --- /dev/null +++ b/arm9/src/unk_0200A104.c @@ -0,0 +1,178 @@ +#include "global.h" +#include "unk_0200A104.h" +#include "GX_g2.h" +#include "MI_memory.h" + +struct UnkStruct_0200A104 UNK_021C4694; + +struct UnkStruct_0200A104 UNK_021C4674; + +THUMB_FUNC void FUN_0200A104(struct UnkStruct_0200A104 *param0) +{ + u32 r4 = 0; + + if (param0->unk0a != param0->unk1a + param0->unk10 * param0->unk14 && + param0->unk1a != param0->unk0a) + { + param0->unk1a += param0->unk10 * param0->unk14; + param0->unk18 += param0->unk16; + + if (param0->unk18 >= param0->unk08) + { + param0->unk1a += param0->unk10; + if (param0->unk1a != param0->unk0a) + { + param0->unk18 -= param0->unk08; + } + else + { + r4 = 1; + } + } + } + else + { + param0->unk1a = param0->unk0a; + r4 = 1; + } + + if ((param0->unk04 & 1) != 0) + { + G2x_SetBlendBrightness_(0x04000050, param0->unk00, param0->unk1a); + } + else if ((param0->unk04 & 2) != 0) + { + G2x_SetBlendBrightness_(0x04001050, param0->unk00, param0->unk1a); + } + + if (r4 == 1) + { + param0->unk1c = 0; + } +} + +THUMB_FUNC void FUN_0200A1A0( + struct UnkStruct_0200A104 *param0, u16 param1, s16 param2, s16 param3, u32 param4, u32 param5) +{ + GF_ASSERT(param0->unk1c == 0); + + param0->unk1c = 1; + param0->unk00 = (u8)param4; + param0->unk04 = (u8)param5; + param0->unk08 = param1; + param0->unk0a = param2; + param0->unk1a = param3; + param0->unk12 = param3 - param2; + + if (param0->unk12 > 0) + { + param0->unk10 = -1; + } + else + { + param0->unk10 = 1; + param0->unk12 *= -1; + } + + param0->unk14 = param0->unk12 / param1; + param0->unk16 = param0->unk12 % param1; + param0->unk18 = 0; +} + +THUMB_FUNC void FUN_0200A208(u16 param0, s16 param1, s16 param2, u32 param3, u32 param4) +{ + if (param0 != 0) + { + if ((param4 & 1) != 0) + { + G2x_SetBlendBrightness_(0x04000050, param3, param2); + FUN_0200A1A0(&UNK_021C4694, param0, param1, param2, param3, 1); + } + + if ((param4 & 2) != 0) + { + G2x_SetBlendBrightness_(0x04001050, param3, param2); + FUN_0200A1A0(&UNK_021C4674, param0, param1, param2, param3, 2); + } + } +} + +THUMB_FUNC void FUN_0200A274(fx32 brightness, fx32 param1, u32 param2) +{ + + if ((param2 & 1) != 0) + { + G2x_SetBlendBrightness_(0x04000050, param1, brightness); + } + + if ((param2 & 2) != 0) + { + G2x_SetBlendBrightness_(0x04001050, param1, brightness); + } + + FUN_0200A2D8(param2); +} + +THUMB_FUNC void FUN_0200A2AC(void) +{ + MI_CpuFill8(&UNK_021C4694, 0, sizeof(struct UnkStruct_0200A104)); + MI_CpuFill8(&UNK_021C4674, 0, sizeof(struct UnkStruct_0200A104)); + + UNK_021C4694.unk1c = 0; + UNK_021C4674.unk1c = 0; +} + +THUMB_FUNC void FUN_0200A2D8(u32 param0) +{ + if (param0 & 1) + { + MI_CpuFill8(&UNK_021C4694, 0, sizeof(struct UnkStruct_0200A104)); + UNK_021C4694.unk1c = 0; + } + + if (param0 & 2) + { + MI_CpuFill8(&UNK_021C4674, 0, sizeof(struct UnkStruct_0200A104)); + UNK_021C4674.unk1c = 0; + } +} + +THUMB_FUNC void FUN_0200A318(void) +{ + if (UNK_021C4694.unk1c) + { + FUN_0200A104(&UNK_021C4694); + } + + if (UNK_021C4674.unk1c) + { + FUN_0200A104(&UNK_021C4674); + } +} + +THUMB_FUNC u32 FUN_0200A344(u32 param0) +{ + if (param0 == 3) + { + if (UNK_021C4694.unk1c == 0 && UNK_021C4674.unk1c == 0) + { + return 1; + } + } + else if (param0 == 1) + { + if (UNK_021C4694.unk1c == 0) + { + return 1; + } + } + else if (param0 == 2) + { + if (UNK_021C4674.unk1c == 0) + { + return 1; + } + } + + return 0; +} diff --git a/include/unk_02009EAC.h b/include/unk_02009EAC.h new file mode 100644 index 00000000..4b0d2b7e --- /dev/null +++ b/include/unk_02009EAC.h @@ -0,0 +1,37 @@ +#include "global.h" +#include "NNS_g2d.h" + +struct UnkStruct_02009EAC +{ + NNSG2dOamManager oamManagers[2]; + u32 heap_id; +}; + +void FUN_02009EAC(s32 param0, + s32 param1, + s32 param2, + s32 param3, + u32 param4, + u32 param5, + u32 param6, + u32 param7, + u32 param8); +void FUN_02009EF0(u32 param0, + u32 param1, + u32 param2, + u32 param3, + u32 param4, + u32 param5, + u32 param6, + u32 param7, + u32 param8); +void FUN_02009F80(void); +void FUN_02009FA0(void); +void FUN_02009FD8(void *param0, u32 *param1, u32 param2, u32 param3); +NNSG2dOamManager *FUN_0200A03C(u32 param0); +void FUN_0200A064(u32 heap_id); +void FUN_0200A06C(u32 heap_id); +u32 FUN_0200A074(u32 param0, u32 param1); +u32 FUN_0200A094(u32 param0, u32 param1); +u32 FUN_0200A0B8(u32 param0); +u32 FUN_0200A0DC(u32 param0); diff --git a/include/unk_0200A104.h b/include/unk_0200A104.h new file mode 100644 index 00000000..6e3bb1f0 --- /dev/null +++ b/include/unk_0200A104.h @@ -0,0 +1,28 @@ +#include "global.h" +#include "nitro/FX_types.h" + +struct UnkStruct_0200A104 +{ + u32 unk00; + u32 unk04; + u16 unk08; + s16 unk0a; + u32 unk0c; + s8 unk10; + s16 unk12; + s16 unk14; + u16 unk16; + u16 unk18; + s16 unk1a; + u32 unk1c; +}; + +void FUN_0200A104(struct UnkStruct_0200A104 *param0); +void FUN_0200A1A0( + struct UnkStruct_0200A104 *param0, u16 param1, s16 param2, s16 param3, u32 param4, u32 param5); +void FUN_0200A208(u16 param0, s16 param1, s16 param2, u32 param3, u32 param4); +void FUN_0200A274(fx32 brightness, fx32 param1, u32 param2); +void FUN_0200A2AC(void); +void FUN_0200A2D8(u32 param0); +void FUN_0200A318(void); +u32 FUN_0200A344(u32 param0); |