diff --git a/asm/include/main_02008BF4.inc b/asm/include/main_02008BF4.inc index aa0727dd..d3260654 100644 --- a/asm/include/main_02008BF4.inc +++ b/asm/include/main_02008BF4.inc @@ -44,10 +44,6 @@ .public _022A37A0 .public _022A37A4 .public _022A37AC -.public _022A37AD -.public _022A37AE -.public _022A37AF -.public _022A37B0 .public _022A37B6 .public _022A37B7 .public _022A37B8 @@ -89,5 +85,8 @@ .public sub_0200846C .public sub_02008980 .public sub_02008A84 +.public sub_02009D48 +.public sub_02009DCC +.public sub_02009E70 .public sub_02009F9C .public sub_02082420 diff --git a/asm/include/main_02009DCC.inc b/asm/include/main_02009DCC.inc new file mode 100644 index 00000000..caf56643 --- /dev/null +++ b/asm/include/main_02009DCC.inc @@ -0,0 +1,14 @@ +#pragma once +.public G2x_SetBlendAlpha_ +.public _022A37AC +.public _022A37AD +.public _022A37AE +.public _022A37AF +.public _022A37B0 +.public _022A37B6 +.public _022A37B7 +.public _022A37B8 +.public _022A37B9 +.public _022A37BA +.public _022A37BC +.public _022A37BE diff --git a/asm/main_02008BF4.s b/asm/main_02008BF4.s index 6eb2a2f2..044b7ab5 100644 --- a/asm/main_02008BF4.s +++ b/asm/main_02008BF4.s @@ -1370,174 +1370,3 @@ sub_02009D20: ; 0x02009D20 .align 2, 0 _02009D44: .word 0x0400104A arm_func_end sub_02009D20 - - arm_func_start sub_02009D48 -sub_02009D48: ; 0x02009D48 - stmdb sp!, {r4, lr} - movs r4, r0 - bne _02009D88 - ldr r0, _02009DBC ; =_022A37CC - ldr r0, [r0, r4, lsl #4] - bl sub_02009C54 - ldr r0, _02009DC0 ; =_022A37D0 - ldr r0, [r0, r4, lsl #4] - bl sub_02009C38 - ldr r0, _02009DC4 ; =_022A37D4 - ldr r0, [r0, r4, lsl #4] - bl sub_02009C70 - ldr r0, _02009DC8 ; =_022A37D8 - ldr r0, [r0, r4, lsl #4] - bl sub_02009C8C - ldmia sp!, {r4, pc} -_02009D88: - ldr r0, _02009DBC ; =_022A37CC - ldr r0, [r0, r4, lsl #4] - bl sub_020095AC - ldr r0, _02009DC0 ; =_022A37D0 - ldr r0, [r0, r4, lsl #4] - bl sub_020095C8 - ldr r0, _02009DC4 ; =_022A37D4 - ldr r0, [r0, r4, lsl #4] - bl sub_020095E4 - ldr r0, _02009DC8 ; =_022A37D8 - ldr r0, [r0, r4, lsl #4] - bl sub_02009600 - ldmia sp!, {r4, pc} - .align 2, 0 -_02009DBC: .word _022A37CC -_02009DC0: .word _022A37D0 -_02009DC4: .word _022A37D4 -_02009DC8: .word _022A37D8 - arm_func_end sub_02009D48 - - arm_func_start sub_02009DCC -sub_02009DCC: ; 0x02009DCC - ldr r1, _02009E58 ; =_022A37AC - add r3, r0, r0, lsl #2 - ldrb r2, [r1, r3] - mov r1, #0x1f - cmp r2, #0 - ldr r2, _02009E5C ; =_022A37AD - bicne r1, r1, #1 - ldrb r2, [r2, r3] - cmp r2, #0 - ldr r2, _02009E60 ; =_022A37AE - bicne r1, r1, #2 - ldrb r2, [r2, r3] - cmp r2, #0 - ldr r2, _02009E64 ; =_022A37AF - bicne r1, r1, #4 - ldrb r2, [r2, r3] - cmp r2, #0 - ldr r2, _02009E68 ; =_022A37B0 - bicne r1, r1, #8 - ldrb r2, [r2, r3] - cmp r2, #0 - bicne r1, r1, #0x10 - cmp r0, #0 - ldrne r2, _02009E6C ; =0x04001000 - ldrne r0, [r2] - bicne r0, r0, #0x1f00 - orrne r0, r0, r1, lsl #8 - strne r0, [r2] - bxne lr - mov r2, #0x4000000 - ldr r0, [r2] - bic r0, r0, #0x1f00 - orr r0, r0, r1, lsl #8 - str r0, [r2] - bx lr - .align 2, 0 -_02009E58: .word _022A37AC -_02009E5C: .word _022A37AD -_02009E60: .word _022A37AE -_02009E64: .word _022A37AF -_02009E68: .word _022A37B0 -_02009E6C: .word 0x04001000 - arm_func_end sub_02009DCC - - arm_func_start sub_02009E70 -sub_02009E70: ; 0x02009E70 - stmdb sp!, {r3, lr} - mov r1, #0xa - mul r3, r0, r1 - ldr r2, _02009F78 ; =_022A37B6 - mov r1, #0 - ldrb ip, [r2, r3] - mov r2, #0x20 - cmp ip, #1 - orreq r1, r1, #1 - beq _02009EA0 - cmp ip, #2 - orreq r2, r2, #1 -_02009EA0: - ldr ip, _02009F7C ; =_022A37B7 - ldrb ip, [ip, r3] - cmp ip, #1 - orreq r1, r1, #2 - beq _02009EBC - cmp ip, #2 - orreq r2, r2, #2 -_02009EBC: - ldr ip, _02009F80 ; =_022A37B8 - ldrb ip, [ip, r3] - cmp ip, #1 - orreq r1, r1, #4 - beq _02009ED8 - cmp ip, #2 - orreq r2, r2, #4 -_02009ED8: - ldr ip, _02009F84 ; =_022A37B9 - ldrb ip, [ip, r3] - cmp ip, #1 - orreq r1, r1, #8 - beq _02009EF4 - cmp ip, #2 - orreq r2, r2, #8 -_02009EF4: - ldr ip, _02009F88 ; =_022A37BA - ldrb ip, [ip, r3] - cmp ip, #1 - orreq r1, r1, #0x10 - beq _02009F10 - cmp ip, #2 - orreq r2, r2, #0x10 -_02009F10: - cmp r0, #0 - bne _02009F48 - ldr r0, _02009F8C ; =_022A37BE - ldr ip, _02009F90 ; =_022A37BC - ldrh lr, [r0, r3] - ldr r0, _02009F94 ; =0x04000050 - and lr, lr, #0xf8 - mov lr, lr, asr #3 - str lr, [sp] - ldrh r3, [ip, r3] - and r3, r3, #0xf8 - mov r3, r3, asr #3 - bl G2x_SetBlendAlpha_ - ldmia sp!, {r3, pc} -_02009F48: - ldr r0, _02009F8C ; =_022A37BE - ldr ip, _02009F90 ; =_022A37BC - ldrh lr, [r0, r3] - ldr r0, _02009F98 ; =0x04001050 - and lr, lr, #0xf8 - mov lr, lr, asr #3 - str lr, [sp] - ldrh r3, [ip, r3] - and r3, r3, #0xf8 - mov r3, r3, asr #3 - bl G2x_SetBlendAlpha_ - ldmia sp!, {r3, pc} - .align 2, 0 -_02009F78: .word _022A37B6 -_02009F7C: .word _022A37B7 -_02009F80: .word _022A37B8 -_02009F84: .word _022A37B9 -_02009F88: .word _022A37BA -_02009F8C: .word _022A37BE -_02009F90: .word _022A37BC -_02009F94: .word 0x04000050 -_02009F98: .word 0x04001050 - arm_func_end sub_02009E70 diff --git a/asm/main_02009DCC.s b/asm/main_02009DCC.s new file mode 100644 index 00000000..984bcc70 --- /dev/null +++ b/asm/main_02009DCC.s @@ -0,0 +1,136 @@ + .include "asm/macros.inc" + .include "main_02009DCC.inc" + + .text + + arm_func_start sub_02009DCC +sub_02009DCC: ; 0x02009DCC + ldr r1, _02009E58 ; =_022A37AC + add r3, r0, r0, lsl #2 + ldrb r2, [r1, r3] + mov r1, #0x1f + cmp r2, #0 + ldr r2, _02009E5C ; =_022A37AD + bicne r1, r1, #1 + ldrb r2, [r2, r3] + cmp r2, #0 + ldr r2, _02009E60 ; =_022A37AE + bicne r1, r1, #2 + ldrb r2, [r2, r3] + cmp r2, #0 + ldr r2, _02009E64 ; =_022A37AF + bicne r1, r1, #4 + ldrb r2, [r2, r3] + cmp r2, #0 + ldr r2, _02009E68 ; =_022A37B0 + bicne r1, r1, #8 + ldrb r2, [r2, r3] + cmp r2, #0 + bicne r1, r1, #0x10 + cmp r0, #0 + ldrne r2, _02009E6C ; =0x04001000 + ldrne r0, [r2] + bicne r0, r0, #0x1f00 + orrne r0, r0, r1, lsl #8 + strne r0, [r2] + bxne lr + mov r2, #0x4000000 + ldr r0, [r2] + bic r0, r0, #0x1f00 + orr r0, r0, r1, lsl #8 + str r0, [r2] + bx lr + .align 2, 0 +_02009E58: .word _022A37AC +_02009E5C: .word _022A37AD +_02009E60: .word _022A37AE +_02009E64: .word _022A37AF +_02009E68: .word _022A37B0 +_02009E6C: .word 0x04001000 + arm_func_end sub_02009DCC + + arm_func_start sub_02009E70 +sub_02009E70: ; 0x02009E70 + stmdb sp!, {r3, lr} + mov r1, #0xa + mul r3, r0, r1 + ldr r2, _02009F78 ; =_022A37B6 + mov r1, #0 + ldrb ip, [r2, r3] + mov r2, #0x20 + cmp ip, #1 + orreq r1, r1, #1 + beq _02009EA0 + cmp ip, #2 + orreq r2, r2, #1 +_02009EA0: + ldr ip, _02009F7C ; =_022A37B7 + ldrb ip, [ip, r3] + cmp ip, #1 + orreq r1, r1, #2 + beq _02009EBC + cmp ip, #2 + orreq r2, r2, #2 +_02009EBC: + ldr ip, _02009F80 ; =_022A37B8 + ldrb ip, [ip, r3] + cmp ip, #1 + orreq r1, r1, #4 + beq _02009ED8 + cmp ip, #2 + orreq r2, r2, #4 +_02009ED8: + ldr ip, _02009F84 ; =_022A37B9 + ldrb ip, [ip, r3] + cmp ip, #1 + orreq r1, r1, #8 + beq _02009EF4 + cmp ip, #2 + orreq r2, r2, #8 +_02009EF4: + ldr ip, _02009F88 ; =_022A37BA + ldrb ip, [ip, r3] + cmp ip, #1 + orreq r1, r1, #0x10 + beq _02009F10 + cmp ip, #2 + orreq r2, r2, #0x10 +_02009F10: + cmp r0, #0 + bne _02009F48 + ldr r0, _02009F8C ; =_022A37BE + ldr ip, _02009F90 ; =_022A37BC + ldrh lr, [r0, r3] + ldr r0, _02009F94 ; =0x04000050 + and lr, lr, #0xf8 + mov lr, lr, asr #3 + str lr, [sp] + ldrh r3, [ip, r3] + and r3, r3, #0xf8 + mov r3, r3, asr #3 + bl G2x_SetBlendAlpha_ + ldmia sp!, {r3, pc} +_02009F48: + ldr r0, _02009F8C ; =_022A37BE + ldr ip, _02009F90 ; =_022A37BC + ldrh lr, [r0, r3] + ldr r0, _02009F98 ; =0x04001050 + and lr, lr, #0xf8 + mov lr, lr, asr #3 + str lr, [sp] + ldrh r3, [ip, r3] + and r3, r3, #0xf8 + mov r3, r3, asr #3 + bl G2x_SetBlendAlpha_ + ldmia sp!, {r3, pc} + .align 2, 0 +_02009F78: .word _022A37B6 +_02009F7C: .word _022A37B7 +_02009F80: .word _022A37B8 +_02009F84: .word _022A37B9 +_02009F88: .word _022A37BA +_02009F8C: .word _022A37BE +_02009F90: .word _022A37BC +_02009F94: .word 0x04000050 +_02009F98: .word 0x04001050 + arm_func_end sub_02009E70 diff --git a/include/main_02009D48.h b/include/main_02009D48.h new file mode 100644 index 00000000..23ae13b2 --- /dev/null +++ b/include/main_02009D48.h @@ -0,0 +1,12 @@ +#ifndef PMDSKY_MAIN_02009D48_H +#define PMDSKY_MAIN_02009D48_H + +typedef struct +{ + s32 val; + s32 _pad[3]; +} unkStruct_02009D48; + +void sub_02009D48(s32 arg0); + +#endif //PMDSKY_MAIN_02009D48_H diff --git a/main.lsf b/main.lsf index 8c83f41c..77beb4bc 100644 --- a/main.lsf +++ b/main.lsf @@ -32,6 +32,8 @@ Static main Object asm/main_020082C4.o Object src/main_02008BD4.o Object asm/main_02008BF4.o + Object src/main_02009D48.o + Object asm/main_02009DCC.o Object src/main_02009F9C.o Object asm/main_0200A124.o Object src/main_0200BC54.o diff --git a/src/main_02009D48.c b/src/main_02009D48.c new file mode 100644 index 00000000..0b743414 --- /dev/null +++ b/src/main_02009D48.c @@ -0,0 +1,30 @@ +#include "main_02009D48.h" + +void sub_02009C54(s32); +void sub_02009C38(s32); +void sub_02009C70(s32); +void sub_02009C8C(s32); +void sub_020095AC(s32); +void sub_020095C8(s32); +void sub_020095E4(s32); +void sub_02009600(s32); + +extern unkStruct_02009D48 _022A37CC[]; +extern unkStruct_02009D48 _022A37D0[]; +extern unkStruct_02009D48 _022A37D4[]; +extern unkStruct_02009D48 _022A37D8[]; + +void sub_02009D48(s32 arg0) +{ + if (arg0 == 0) { + sub_02009C54(_022A37CC[arg0].val); + sub_02009C38(_022A37D0[arg0].val); + sub_02009C70(_022A37D4[arg0].val); + sub_02009C8C(_022A37D8[arg0].val); + return; + } + sub_020095AC(_022A37CC[arg0].val); + sub_020095C8(_022A37D0[arg0].val); + sub_020095E4(_022A37D4[arg0].val); + sub_02009600(_022A37D8[arg0].val); +}