Match unk_0202C858.c

This commit is contained in:
Nomura
2022-12-26 10:15:29 +01:00
parent 772d6f2b8b
commit fe56ebfcbe
4 changed files with 123 additions and 262 deletions

View File

@@ -1,7 +0,0 @@
.public GF_AssertFail
.public sub_020245BC
.public sub_02025C48
.public sub_02025C84
.public sub_0202C918
.public sub_0202C994
.public MIi_CpuClear32

View File

@@ -1,254 +0,0 @@
.include "macros/function.inc"
.include "include/unk_0202C858.inc"
.text
thumb_func_start sub_0202C858
sub_0202C858: ; 0x0202C858
ldr r0, _0202C85C ; =0x00000FF8
bx lr
; .align 2, 0
_0202C85C: .word 0x00000FF8
thumb_func_end sub_0202C858
thumb_func_start sub_0202C860
sub_0202C860: ; 0x0202C860
push {r3, lr}
ldr r2, _0202C874 ; =0x00000FF8
add r1, r0, #0
mov r0, #0
bl MIi_CpuClear32
mov r0, #0x1e
bl sub_02025C84
pop {r3, pc}
; .align 2, 0
_0202C874: .word 0x00000FF8
thumb_func_end sub_0202C860
thumb_func_start sub_0202C878
sub_0202C878: ; 0x0202C878
push {r4, lr}
add r4, r0, #0
mov r0, #0x1e
bl sub_02025C48
add r0, r4, #0
mov r1, #0x1e
bl sub_020245BC
pop {r4, pc}
thumb_func_end sub_0202C878
thumb_func_start sub_0202C88C
sub_0202C88C: ; 0x0202C88C
push {r4, r5, r6, lr}
add r6, r0, #0
mov r0, #1
add r5, r1, #0
lsl r0, r0, #8
add r4, r2, #0
cmp r5, r0
blt _0202C8A0
bl GF_AssertFail
_0202C8A0:
cmp r4, #0x40
blt _0202C8A8
bl GF_AssertFail
_0202C8A8:
strb r5, [r6, #5]
add r0, r6, #0
add r1, r5, #0
add r2, r4, #0
mov r3, #3
strb r4, [r6, #6]
bl sub_0202C918
mov r0, #0x1e
bl sub_02025C84
pop {r4, r5, r6, pc}
thumb_func_end sub_0202C88C
thumb_func_start sub_0202C8C0
sub_0202C8C0: ; 0x0202C8C0
ldrb r0, [r0, #5]
bx lr
thumb_func_end sub_0202C8C0
thumb_func_start sub_0202C8C4
sub_0202C8C4: ; 0x0202C8C4
ldrb r0, [r0, #6]
bx lr
thumb_func_end sub_0202C8C4
thumb_func_start sub_0202C8C8
sub_0202C8C8: ; 0x0202C8C8
push {r4, r5, r6, lr}
add r6, r0, #0
mov r0, #1
add r5, r1, #0
lsl r0, r0, #8
add r4, r2, #0
cmp r5, r0
blt _0202C8DC
bl GF_AssertFail
_0202C8DC:
cmp r4, #0x40
blt _0202C8E4
bl GF_AssertFail
_0202C8E4:
cmp r5, #0
bne _0202C8EC
mov r0, #0
pop {r4, r5, r6, pc}
_0202C8EC:
asr r0, r4, #1
lsr r0, r0, #0x1e
add r0, r4, r0
asr r1, r0, #2
sub r0, r5, #1
lsl r0, r0, #4
add r0, r1, r0
add r0, r6, r0
ldrb r3, [r0, #7]
lsr r2, r4, #0x1f
lsl r1, r4, #0x1e
sub r1, r1, r2
mov r0, #0x1e
ror r1, r0
add r0, r2, r1
lsl r0, r0, #1
add r1, r3, #0
asr r1, r0
mov r0, #3
and r0, r1
pop {r4, r5, r6, pc}
; .align 2, 0
thumb_func_end sub_0202C8C8
thumb_func_start sub_0202C918
sub_0202C918: ; 0x0202C918
push {r3, r4, r5, r6, r7, lr}
add r7, r0, #0
add r5, r1, #0
add r4, r2, #0
str r3, [sp]
cmp r3, #4
blt _0202C92A
bl GF_AssertFail
_0202C92A:
mov r0, #1
lsl r0, r0, #8
cmp r5, r0
blt _0202C936
bl GF_AssertFail
_0202C936:
cmp r4, #0x40
blt _0202C93E
bl GF_AssertFail
_0202C93E:
cmp r5, #0
beq _0202C98C
asr r0, r4, #1
lsr r0, r0, #0x1e
add r0, r4, r0
asr r2, r0, #2
sub r0, r5, #1
lsl r0, r0, #4
add r0, r2, r0
lsr r2, r4, #0x1f
lsl r4, r4, #0x1e
sub r4, r4, r2
mov r3, #0x1e
ror r4, r3
add r2, r2, r4
lsl r6, r2, #1
mov r2, #3
add r3, r2, #0
add r1, r7, #7
ldrb r4, [r1, r0]
lsl r3, r6
mov r2, #0xff
eor r2, r3
and r2, r4
ldr r3, [sp]
strb r2, [r1, r0]
ldrb r2, [r1, r0]
lsl r3, r6
orr r2, r3
strb r2, [r1, r0]
cmp r5, #0x67
beq _0202C986
add r0, r7, #0
mov r1, #1
bl sub_0202C994
_0202C986:
mov r0, #0x1e
bl sub_02025C84
_0202C98C:
pop {r3, r4, r5, r6, r7, pc}
; .align 2, 0
thumb_func_end sub_0202C918
thumb_func_start sub_0202C990
sub_0202C990: ; 0x0202C990
ldrb r0, [r0, #4]
bx lr
thumb_func_end sub_0202C990
thumb_func_start sub_0202C994
sub_0202C994: ; 0x0202C994
ldr r3, _0202C99C ; =sub_02025C84
strb r1, [r0, #4]
mov r0, #0x1e
bx r3
; .align 2, 0
_0202C99C: .word sub_02025C84
thumb_func_end sub_0202C994
thumb_func_start sub_0202C9A0
sub_0202C9A0: ; 0x0202C9A0
push {r3, r4, r5, r6, r7, lr}
str r0, [sp]
mov r0, #3
mov r7, #0
mov r4, #2
mov r6, #0xff
add r3, r0, #0
_0202C9AE:
ldr r1, [sp]
add r1, r1, r7
ldrb r2, [r1, #7]
mov ip, r1
mov r1, #0
_0202C9B8:
add r5, r2, #0
asr r5, r1
and r5, r3
cmp r5, #1
bne _0202C9D8
add r5, r0, #0
lsl r5, r1
eor r5, r6
and r2, r5
lsl r2, r2, #0x18
lsr r5, r2, #0x18
add r2, r4, #0
lsl r2, r1
orr r2, r5
lsl r2, r2, #0x18
lsr r2, r2, #0x18
_0202C9D8:
add r1, r1, #2
cmp r1, #8
blt _0202C9B8
mov r1, ip
strb r2, [r1, #7]
mov r1, #0xff
add r7, r7, #1
lsl r1, r1, #4
cmp r7, r1
blt _0202C9AE
mov r0, #0x1e
bl sub_02025C84
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end sub_0202C9A0

View File

@@ -118,7 +118,7 @@ Static main
Object src/unk_0202B594.o
Object asm/unk_0202B604.o
Object src/unk_0202C7FC.o
Object asm/unk_0202C858.o
Object src/unk_0202C858.o
Object src/unk_0202C9F4.o
Object asm/unk_0202CBE4.o
Object asm/unk_0202CC64.o

122
src/unk_0202C858.c Normal file
View File

@@ -0,0 +1,122 @@
#include <nitro.h>
#include <string.h>
#include "struct_decls/struct_021C0794_decl.h"
#include "struct_defs/struct_0202C878.h"
#include "unk_020244AC.h"
#include "unk_0202C858.h"
int sub_0202C858 (void)
{
return sizeof(UnkStruct_0202C878);
}
void sub_0202C860 (UnkStruct_0202C878 * param0)
{
MI_CpuClear32(param0, sizeof(UnkStruct_0202C878));
sub_02025C84(30);
}
UnkStruct_0202C878 * sub_0202C878 (UnkStruct_021C0794 * param0)
{
sub_02025C48(30);
return (UnkStruct_0202C878 *)sub_020245BC(param0, 30);
}
void sub_0202C88C (UnkStruct_0202C878 * param0, int param1, int param2)
{
GF_ASSERT(param1 < 256);
GF_ASSERT(param2 < 64);
param0->unk_05 = param1;
param0->unk_06 = param2;
sub_0202C918(param0, param1, param2, 3);
sub_02025C84(30);
}
int sub_0202C8C0 (const UnkStruct_0202C878 * param0)
{
return param0->unk_05;
}
int sub_0202C8C4 (const UnkStruct_0202C878 * param0)
{
return param0->unk_06;
}
int sub_0202C8C8 (const UnkStruct_0202C878 * param0, int param1, int param2)
{
int v0;
GF_ASSERT(param1 < 256);
GF_ASSERT(param2 < 64);
if (param1 == 0) {
return 0;
}
v0 = (param0->unk_07[(param1 - 1) * 16 + param2 / 4] >> ((param2 % 4) * 2)) & 3;
return v0;
}
void sub_0202C918 (UnkStruct_0202C878 * param0, int param1, int param2, int param3)
{
u8 * v0;
u8 v1 = 3;
u8 v2;
GF_ASSERT(param3 < 4);
GF_ASSERT(param1 < 256);
GF_ASSERT(param2 < 64);
if (param1 == 0) {
return;
}
v0 = &param0->unk_07[(param1 - 1) * 16 + param2 / 4];
*v0 &= ((v1 << ((param2 % 4) * 2)) ^ 0xff);
*v0 |= param3 << ((param2 % 4) * 2);
if (param1 != 103) {
sub_0202C994(param0, 1);
}
sub_02025C84(30);
}
BOOL sub_0202C990 (const UnkStruct_0202C878 * param0)
{
return param0->unk_04;
}
void sub_0202C994 (UnkStruct_0202C878 * param0, BOOL param1)
{
param0->unk_04 = param1;
sub_02025C84(30);
}
void sub_0202C9A0 (UnkStruct_0202C878 * param0)
{
int v0, v1;
u8 v2;
for (v0 = 0; v0 < (256 - 1) * 16; v0++) {
v2 = param0->unk_07[v0];
for (v1 = 0; v1 < 8; v1 += 2) {
if (((v2 >> v1) & 3) == 1) {
v2 &= ((3 << v1) ^ 0xff);
v2 |= (2 << v1);
}
}
param0->unk_07[v0] = v2;
}
sub_02025C84(30);
}