mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-29 07:10:32 -04:00
feat(phase-31): S79 #9 (7) — ov_SC05_010: func_8017FFA8 (88 ins, 6-way jtbl switch) banked from a Sonnet agent's fresh draft (loop index s32 not s16 — §241 fused sign-extend; the D_801922B8 lookup into its own temp before the found/zero stores); tail jtbl carve at gate time; worktree gate + in-tree byte-identical
This commit is contained in:
+2
-2
@@ -3894,7 +3894,7 @@ ov_SC05_010_ELF := $(ov_SC05_010_OUT).elf
|
||||
ov_SC05_010_MAPFILE := $(ov_SC05_010_OUT).map
|
||||
ov_SC05_010_LD_SCRIPT := $(ov_SC05_010_OUT).ld
|
||||
ov_SC05_010_SPLAT_YAML := config/splat.ov_SC05_010.yaml
|
||||
ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,tail19.data.o,ov_SC05_010_jr_80180F84.o,ov_SC05_010_jr_80181CDC.o,tail20.data.o,ov_SC05_010_jr_8018473C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,ov_SC05_010_jr_80180F84.o,ov_SC05_010_jr_80181CDC.o,tail19.data.o,ov_SC05_010_jr_8018473C.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC05_010/ov_SC05_010.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -3907,7 +3907,7 @@ build/src/ov_SC05_010/ov_SC05_010_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.o: JTBL_PADS := 0,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x48,+0x60
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.o: JTBL_PADS := 0,0,4,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x48,+0x60,+0x78
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_SC05_010/ov_SC05_010_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_SC05_010_CHECK_SHA := config/check.ov_SC05_010.sha
|
||||
|
||||
@@ -167,12 +167,11 @@ segments:
|
||||
- [0x9d7f8, .rodata, ov_SC05_010_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9d80c, data, tail18]
|
||||
- [0x9d944, .rodata, ov_SC05_010_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9d9b8, data, tail19]
|
||||
- [0x9d9d4, .rodata, ov_SC05_010_jr_80180F84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9d9f4, .rodata, ov_SC05_010_jr_80181CDC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9da28, data, tail20]
|
||||
- [0x9da28, data, tail19]
|
||||
- [0x9da34, .rodata, ov_SC05_010_jr_8018473C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9da48, data, tail21]
|
||||
- [0x9da48, data, tail20]
|
||||
- [0x9FED4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0x9FED7] # EOF marker = the 0.4.dec byte length
|
||||
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
|
||||
|
||||
@@ -4756,7 +4756,76 @@ void func_8017FDE0(s32 param_1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017C8D0", func_8017FFA8);
|
||||
void func_8017FFA8(s32 param_1)
|
||||
{
|
||||
extern volatile s32 D_801C7E30;
|
||||
extern volatile s32 D_801C7E4C;
|
||||
extern s32 D_801C7E60;
|
||||
extern u8 D_80192478[];
|
||||
extern u16 D_801922B8;
|
||||
extern u16 D_80126B62;
|
||||
extern s32 D_8019231C;
|
||||
extern s32 func_8012C588(s32 a0, s32 a1);
|
||||
extern s32 func_80178B18(s32 param_1, s32 param_2);
|
||||
extern void func_801746DC(void);
|
||||
extern int func_80178970(void);
|
||||
extern void func_80178D18(void);
|
||||
|
||||
s32 found;
|
||||
s32 i;
|
||||
s32 *tbl;
|
||||
s16 *b62;
|
||||
s32 q;
|
||||
s32 sub;
|
||||
s32 a;
|
||||
u16 b;
|
||||
u16 lookup;
|
||||
|
||||
switch (*(u16 *)(param_1 + 0x34)) {
|
||||
case 0:
|
||||
found = 0;
|
||||
i = 0;
|
||||
tbl = (s32 *)&D_801C7E30;
|
||||
b62 = (s16 *)&D_80126B62;
|
||||
for (; i < 6; i++) {
|
||||
q = tbl[D_80192478[i]];
|
||||
sub = *(s32 *)(q + 0x6C);
|
||||
if (*(u8 *)(sub + 0x74) != 0) {
|
||||
a = *(s16 *)(sub + 0x70);
|
||||
b = *(u16 *)(sub + 0xA);
|
||||
lookup = *(u16 *)((u8 *)&D_801922B8 + (a << 4));
|
||||
found = 1;
|
||||
*(s32 *)((u8 *)b62 + 0xA) = 0;
|
||||
*b62 = b + lookup;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
break;
|
||||
}
|
||||
func_80178B18(param_1, (s32)&D_8019231C);
|
||||
func_801746DC();
|
||||
goto tail_inc;
|
||||
case 4:
|
||||
D_801C7E60 = func_8012C588(0x27C, param_1);
|
||||
/* fallthrough */
|
||||
case 2:
|
||||
tail_inc:
|
||||
*(u16 *)(param_1 + 0x34) += 1;
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
case 5:
|
||||
break;
|
||||
}
|
||||
if (((s32 (*)(s32))func_80178970)(param_1)) {
|
||||
((void (*)(s32))func_80178D18)(param_1);
|
||||
*(u16 *)(param_1 + 2) = 1;
|
||||
*(u16 *)(param_1 + 0x34) = 0;
|
||||
*(s32 *)(param_1 + 0x1C) = 0x1E;
|
||||
*(s32 *)(D_801C7E4C + 0xE0) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern s32 *D_80126B78;
|
||||
|
||||
Reference in New Issue
Block a user