mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 06:49:47 -04:00
feat(phase-30 S48-0b): jtbl family func_8012AAAC — 3/3 blocked-binary siblings banked
This commit is contained in:
@@ -911,7 +911,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
|
||||
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012", func_8012AAAC);
|
||||
|
||||
extern void func_8012AAAC(void *arg0);
|
||||
|
||||
void func_8012AAAC(void *arg0) {
|
||||
void *ptr;
|
||||
s32 link;
|
||||
s32 next;
|
||||
s32 saved;
|
||||
s32 cnt;
|
||||
s32 back;
|
||||
s32 head;
|
||||
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
|
||||
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
|
||||
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
|
||||
switch (M2C_FIELD(ptr, s16 *, 4)) {
|
||||
case -2:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link == 0) {
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = 0;
|
||||
break;
|
||||
}
|
||||
goto pop;
|
||||
case -1:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link != 0) {
|
||||
pop:
|
||||
back = M2C_FIELD(arg0, s16 *, 0x9A);
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = link;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = back;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
|
||||
break;
|
||||
case -4:
|
||||
head = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = head;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
case -3:
|
||||
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
|
||||
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
saved = M2C_FIELD(arg0, s32 *, 0x90);
|
||||
next = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = next;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
|
||||
break;
|
||||
case -50:
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
|
||||
break;
|
||||
case -5:
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -894,7 +894,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
|
||||
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037", func_8012AAAC);
|
||||
|
||||
extern void func_8012AAAC(void *arg0);
|
||||
|
||||
void func_8012AAAC(void *arg0) {
|
||||
void *ptr;
|
||||
s32 link;
|
||||
s32 next;
|
||||
s32 saved;
|
||||
s32 cnt;
|
||||
s32 back;
|
||||
s32 head;
|
||||
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
|
||||
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
|
||||
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
|
||||
switch (M2C_FIELD(ptr, s16 *, 4)) {
|
||||
case -2:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link == 0) {
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = 0;
|
||||
break;
|
||||
}
|
||||
goto pop;
|
||||
case -1:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link != 0) {
|
||||
pop:
|
||||
back = M2C_FIELD(arg0, s16 *, 0x9A);
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = link;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = back;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
|
||||
break;
|
||||
case -4:
|
||||
head = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = head;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
case -3:
|
||||
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
|
||||
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
saved = M2C_FIELD(arg0, s32 *, 0x90);
|
||||
next = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = next;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
|
||||
break;
|
||||
case -50:
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
|
||||
break;
|
||||
case -5:
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -911,7 +911,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
|
||||
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107", func_8012AAAC);
|
||||
|
||||
extern void func_8012AAAC(void *arg0);
|
||||
|
||||
void func_8012AAAC(void *arg0) {
|
||||
void *ptr;
|
||||
s32 link;
|
||||
s32 next;
|
||||
s32 saved;
|
||||
s32 cnt;
|
||||
s32 back;
|
||||
s32 head;
|
||||
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
|
||||
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
|
||||
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
|
||||
switch (M2C_FIELD(ptr, s16 *, 4)) {
|
||||
case -2:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link == 0) {
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = 0;
|
||||
break;
|
||||
}
|
||||
goto pop;
|
||||
case -1:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link != 0) {
|
||||
pop:
|
||||
back = M2C_FIELD(arg0, s16 *, 0x9A);
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = link;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = back;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
|
||||
break;
|
||||
case -4:
|
||||
head = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = head;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
case -3:
|
||||
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
|
||||
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
saved = M2C_FIELD(arg0, s32 *, 0x90);
|
||||
next = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = next;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
|
||||
break;
|
||||
case -50:
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
|
||||
break;
|
||||
case -5:
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user