diff --git a/config/overlays.mk b/config/overlays.mk index 6c87892ec..96e3c441b 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -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 diff --git a/config/splat.ov_SC05_010.yaml b/config/splat.ov_SC05_010.yaml index 44e354db7..8ecae61c6 100644 --- a/config/splat.ov_SC05_010.yaml +++ b/config/splat.ov_SC05_010.yaml @@ -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 diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c b/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c index 081e96a81..99c7d5946 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c @@ -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;