diff --git a/config/overlays.mk b/config/overlays.mk index d86d6c349..73106a4f0 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -239,7 +239,7 @@ ov_SC02_000_ELF := $(ov_SC02_000_OUT).elf ov_SC02_000_MAPFILE := $(ov_SC02_000_OUT).map ov_SC02_000_LD_SCRIPT := $(ov_SC02_000_OUT).ld ov_SC02_000_SPLAT_YAML := config/splat.ov_SC02_000.yaml -ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000.o,ov_SC02_000_jr_8012ACE0.o,tail2.data.o,ov_SC02_000_jr_80135888.o,tail3.data.o,ov_SC02_000_jr_80135A4C.o,tail4.data.o,ov_SC02_000_jr_80135D20.o,tail5.data.o,ov_SC02_000_jr_801380E0.o,ov_SC02_000_o0c.o,tail6.data.o,ov_SC02_000_jr_8013F350.o,tail7.data.o,ov_SC02_000_jr_8013FFD8.o,tail8.data.o,ov_SC02_000_jr_80140608.o,tail9.data.o,ov_SC02_000_jr_8015444C.o,ov_SC02_000_jr_80154C24.o,ov_SC02_000_jr_801588CC.o,ov_SC02_000_jr_80159C84.o,tail10.data.o,ov_SC02_000_jr_8015A3C8.o,tail11.data.o,ov_SC02_000_jr_8015AE2C.o,tail12.data.o,ov_SC02_000_jr_8015C32C.o,tail13.data.o,ov_SC02_000_jr_8016AB6C.o,tail14.data.o,ov_SC02_000_jr_80171B4C.o,ov_SC02_000_jr_801734BC.o,tail15.data.o,ov_SC02_000_jr_801789AC.o,ov_SC02_000_jr_80178D40.o,tail16.data.o,ov_SC02_000_jr_8017A4AC.o,tail17.data.o,ov_SC02_000_jr_8017AE2C.o,ov_SC02_000_jr_8017EA84.o,tail18.data.o,ov_SC02_000_jr_8017FB24.o,ov_SC02_000_jr_8017FCB0.o,tail19.data.o,ov_SC02_000_jr_801808C4.o,ov_SC02_000_jr_80180D6C.o,ov_SC02_000_jr_80181538.o,tail20.data.o,ov_SC02_000_jr_80181698.o,ov_SC02_000_jr_8018173C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000.o,ov_SC02_000_jr_8012ACE0.o,tail2.data.o,ov_SC02_000_jr_80135888.o,tail3.data.o,ov_SC02_000_jr_80135A4C.o,tail4.data.o,ov_SC02_000_jr_80135D20.o,tail5.data.o,ov_SC02_000_jr_801380E0.o,ov_SC02_000_o0c.o,tail6.data.o,ov_SC02_000_jr_8013F350.o,tail7.data.o,ov_SC02_000_jr_8013FFD8.o,tail8.data.o,ov_SC02_000_jr_80140608.o,tail9.data.o,ov_SC02_000_jr_8015444C.o,ov_SC02_000_jr_80154C24.o,ov_SC02_000_jr_801588CC.o,ov_SC02_000_jr_80159C84.o,tail10.data.o,ov_SC02_000_jr_8015A3C8.o,tail11.data.o,ov_SC02_000_jr_8015AE2C.o,tail12.data.o,ov_SC02_000_jr_8015C32C.o,tail13.data.o,ov_SC02_000_jr_8016AB6C.o,tail14.data.o,ov_SC02_000_jr_80171B4C.o,ov_SC02_000_jr_801734BC.o,tail15.data.o,ov_SC02_000_jr_801789AC.o,ov_SC02_000_jr_80178D40.o,tail16.data.o,ov_SC02_000_jr_8017A4AC.o,tail17.data.o,ov_SC02_000_jr_8017AE2C.o,ov_SC02_000_jr_8017EA84.o,tail18.data.o,ov_SC02_000_jr_8017FB24.o,ov_SC02_000_jr_8017FCB0.o,tail19.data.o,ov_SC02_000_jr_801808C4.o,ov_SC02_000_jr_80180D6C.o,ov_SC02_000_jr_80181538.o,ov_SC02_000_jr_80181698.o,ov_SC02_000_jr_8018173C.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_000/ov_SC02_000.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC02_000/ov_SC02_000_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC02_000/ov_SC02_000_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -257,6 +257,7 @@ build/src/ov_SC02_000/ov_SC02_000_jr_8017EA84.o: JTBL_PADS := 0,4,0,0,0 # §8e build/src/ov_SC02_000/ov_SC02_000_jr_8017FCB0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_000/ov_SC02_000_jr_801808C4.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_000/ov_SC02_000_jr_80180D6C.o: JTBL_PADS := 0,0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x40,+0x60,+0x80,+0xa0 +build/src/ov_SC02_000/ov_SC02_000_jr_80181538.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_000/ov_SC02_000_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118 ov_SC02_000_CHECK_SHA := config/check.ov_SC02_000.sha ov_SC02_000_SYMBOLS := config/symbols.ov_SC02_000.txt @@ -279,7 +280,7 @@ ov_SC02_003_ELF := $(ov_SC02_003_OUT).elf ov_SC02_003_MAPFILE := $(ov_SC02_003_OUT).map ov_SC02_003_LD_SCRIPT := $(ov_SC02_003_OUT).ld ov_SC02_003_SPLAT_YAML := config/splat.ov_SC02_003.yaml -ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003.o,ov_SC02_003_jr_8012ACE0.o,tail2.data.o,ov_SC02_003_jr_80135888.o,tail3.data.o,ov_SC02_003_jr_80135A4C.o,tail4.data.o,ov_SC02_003_jr_80135D20.o,tail5.data.o,ov_SC02_003_jr_801380E0.o,ov_SC02_003_o0c.o,tail6.data.o,ov_SC02_003_jr_8013F350.o,tail7.data.o,ov_SC02_003_jr_8013FFD8.o,tail8.data.o,ov_SC02_003_jr_80140608.o,tail9.data.o,ov_SC02_003_jr_8015444C.o,ov_SC02_003_jr_80154C24.o,ov_SC02_003_jr_801588CC.o,ov_SC02_003_jr_80159C84.o,tail10.data.o,ov_SC02_003_jr_8015A3C8.o,tail11.data.o,ov_SC02_003_jr_8015AE2C.o,tail12.data.o,ov_SC02_003_jr_8015C32C.o,tail13.data.o,ov_SC02_003_jr_8016AB6C.o,tail14.data.o,ov_SC02_003_jr_80171B4C.o,ov_SC02_003_jr_801734BC.o,tail15.data.o,ov_SC02_003_jr_801789AC.o,ov_SC02_003_jr_80178D40.o,tail16.data.o,ov_SC02_003_jr_8017A4AC.o,tail17.data.o,ov_SC02_003_jr_8017AE2C.o,ov_SC02_003_jr_8017EA84.o,tail18.data.o,ov_SC02_003_jr_8017FB24.o,ov_SC02_003_jr_8017FCB0.o,tail19.data.o,ov_SC02_003_jr_801808C4.o,ov_SC02_003_jr_80180D6C.o,ov_SC02_003_jr_80181538.o,tail20.data.o,ov_SC02_003_jr_80181698.o,ov_SC02_003_jr_8018173C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003.o,ov_SC02_003_jr_8012ACE0.o,tail2.data.o,ov_SC02_003_jr_80135888.o,tail3.data.o,ov_SC02_003_jr_80135A4C.o,tail4.data.o,ov_SC02_003_jr_80135D20.o,tail5.data.o,ov_SC02_003_jr_801380E0.o,ov_SC02_003_o0c.o,tail6.data.o,ov_SC02_003_jr_8013F350.o,tail7.data.o,ov_SC02_003_jr_8013FFD8.o,tail8.data.o,ov_SC02_003_jr_80140608.o,tail9.data.o,ov_SC02_003_jr_8015444C.o,ov_SC02_003_jr_80154C24.o,ov_SC02_003_jr_801588CC.o,ov_SC02_003_jr_80159C84.o,tail10.data.o,ov_SC02_003_jr_8015A3C8.o,tail11.data.o,ov_SC02_003_jr_8015AE2C.o,tail12.data.o,ov_SC02_003_jr_8015C32C.o,tail13.data.o,ov_SC02_003_jr_8016AB6C.o,tail14.data.o,ov_SC02_003_jr_80171B4C.o,ov_SC02_003_jr_801734BC.o,tail15.data.o,ov_SC02_003_jr_801789AC.o,ov_SC02_003_jr_80178D40.o,tail16.data.o,ov_SC02_003_jr_8017A4AC.o,tail17.data.o,ov_SC02_003_jr_8017AE2C.o,ov_SC02_003_jr_8017EA84.o,tail18.data.o,ov_SC02_003_jr_8017FB24.o,ov_SC02_003_jr_8017FCB0.o,tail19.data.o,ov_SC02_003_jr_801808C4.o,ov_SC02_003_jr_80180D6C.o,ov_SC02_003_jr_80181538.o,ov_SC02_003_jr_80181698.o,ov_SC02_003_jr_8018173C.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_003/ov_SC02_003.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC02_003/ov_SC02_003_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC02_003/ov_SC02_003_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -297,6 +298,7 @@ build/src/ov_SC02_003/ov_SC02_003_jr_8017EA84.o: JTBL_PADS := 0,4,0,0,0 # §8e build/src/ov_SC02_003/ov_SC02_003_jr_8017FCB0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_003/ov_SC02_003_jr_801808C4.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_003/ov_SC02_003_jr_80180D6C.o: JTBL_PADS := 0,0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x40,+0x60,+0x80,+0xa0 +build/src/ov_SC02_003/ov_SC02_003_jr_80181538.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_003/ov_SC02_003_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118 ov_SC02_003_CHECK_SHA := config/check.ov_SC02_003.sha ov_SC02_003_SYMBOLS := config/symbols.ov_SC02_003.txt diff --git a/config/splat.ov_SC02_000.yaml b/config/splat.ov_SC02_000.yaml index 6fc66ecaa..1e874480d 100644 --- a/config/splat.ov_SC02_000.yaml +++ b/config/splat.ov_SC02_000.yaml @@ -177,10 +177,9 @@ segments: - [0xbe9a4, .rodata, ov_SC02_000_jr_801808C4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe9e4, .rodata, ov_SC02_000_jr_80180D6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbeaa4, .rodata, ov_SC02_000_jr_80181538] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbeac4, data, tail20] - [0xbeae4, .rodata, ov_SC02_000_jr_80181698] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbeb04, .rodata, ov_SC02_000_jr_8018173C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbeb24, data, tail21] + - [0xbeb24, data, tail20] - [0xC070C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC070F] # 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/config/splat.ov_SC02_003.yaml b/config/splat.ov_SC02_003.yaml index 1ae6e3e6f..87996fc69 100644 --- a/config/splat.ov_SC02_003.yaml +++ b/config/splat.ov_SC02_003.yaml @@ -177,10 +177,9 @@ segments: - [0xbe9a4, .rodata, ov_SC02_003_jr_801808C4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe9e4, .rodata, ov_SC02_003_jr_80180D6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbeaa4, .rodata, ov_SC02_003_jr_80181538] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbeac4, data, tail20] - [0xbeae4, .rodata, ov_SC02_003_jr_80181698] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbeb04, .rodata, ov_SC02_003_jr_8018173C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbeb24, data, tail21] + - [0xbeb24, data, tail20] - [0xC070C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC070F] # 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_SC02_000/ov_SC02_000_jr_80181538.c b/src/ov_SC02_000/ov_SC02_000_jr_80181538.c index dc06e4bca..5628367de 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_80181538.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_80181538.c @@ -2782,4 +2782,35 @@ void func_80181538(s32 param_1) { } } -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80181538", func_801815F4); + +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C098(void); +extern void func_8012C218(void *a0); +extern s32 D_801270CC; + +void func_801815F4(s32 param_1) { + ((s32 (*)(s32))func_8012AD80)(param_1); + if (func_8012BEE8(param_1) == 0) { + return; + } + switch ((s32)((u32)*(u16 *)(param_1 + 0x70) << 0x10) >> 0x18) { + case 0: + case 1: + case 2: + case 5: + case 6: + ((s32 (*)(s32))func_8012C098)(param_1); + return; + case 3: + case 7: + ((s32 (*)(s32))func_8012C218)(param_1); + return; + case 4: + D_801270CC = D_801270CC + -1; + ((s32 (*)(s32))func_8012C218)(param_1); + return; + default: + return; + } +} diff --git a/src/ov_SC02_003/ov_SC02_003_jr_80181538.c b/src/ov_SC02_003/ov_SC02_003_jr_80181538.c index 646abd707..5628367de 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_80181538.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_80181538.c @@ -2782,4 +2782,35 @@ void func_80181538(s32 param_1) { } } -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80181538", func_801815F4); + +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C098(void); +extern void func_8012C218(void *a0); +extern s32 D_801270CC; + +void func_801815F4(s32 param_1) { + ((s32 (*)(s32))func_8012AD80)(param_1); + if (func_8012BEE8(param_1) == 0) { + return; + } + switch ((s32)((u32)*(u16 *)(param_1 + 0x70) << 0x10) >> 0x18) { + case 0: + case 1: + case 2: + case 5: + case 6: + ((s32 (*)(s32))func_8012C098)(param_1); + return; + case 3: + case 7: + ((s32 (*)(s32))func_8012C218)(param_1); + return; + case 4: + D_801270CC = D_801270CC + -1; + ((s32 (*)(s32))func_8012C218)(param_1); + return; + default: + return; + } +}