mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 14:59:48 -04:00
feat(phase-30 S48-0b): jtbl family func_80159A20 — 3/3 blocked-binary siblings banked
This commit is contained in:
+6
-3
@@ -4915,12 +4915,13 @@ ov_MAIN_012_ELF := $(ov_MAIN_012_OUT).elf
|
||||
ov_MAIN_012_MAPFILE := $(ov_MAIN_012_OUT).map
|
||||
ov_MAIN_012_LD_SCRIPT := $(ov_MAIN_012_OUT).ld
|
||||
ov_MAIN_012_SPLAT_YAML := config/splat.ov_MAIN_012.yaml
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,ov_MAIN_012_jr_80131340.o,tail2.data.o,ov_MAIN_012_jr_80135A4C.o,tail3.data.o,ov_MAIN_012_jr_80135EB0.o,tail4.data.o,ov_MAIN_012_jr_801380E0.o,tail5.data.o,ov_MAIN_012_jr_8013F350.o,tail6.data.o,ov_MAIN_012_jr_801549F8.o,ov_MAIN_012_jr_801555F4.o,tail7.data.o,ov_MAIN_012_jr_801594E8.o,tail8.data.o,ov_MAIN_012_jr_80159C84.o,tail9.data.o,ov_MAIN_012_jr_8015A3C8.o,tail10.data.o,ov_MAIN_012_jr_8016AE5C.o,tail11.data.o,ov_MAIN_012_jr_80171B4C.o,tail12.data.o,ov_MAIN_012_jr_801789AC.o,tail13.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,ov_MAIN_012_jr_80131340.o,tail2.data.o,ov_MAIN_012_jr_80135A4C.o,tail3.data.o,ov_MAIN_012_jr_80135EB0.o,tail4.data.o,ov_MAIN_012_jr_801380E0.o,tail5.data.o,ov_MAIN_012_jr_8013F350.o,tail6.data.o,ov_MAIN_012_jr_801549F8.o,ov_MAIN_012_jr_801555F4.o,tail7.data.o,ov_MAIN_012_jr_801594E8.o,ov_MAIN_012_jr_80159C84.o,tail8.data.o,ov_MAIN_012_jr_8015A3C8.o,tail9.data.o,ov_MAIN_012_jr_8016AE5C.o,tail10.data.o,ov_MAIN_012_jr_80171B4C.o,tail11.data.o,ov_MAIN_012_jr_801789AC.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_MAIN_012/ov_MAIN_012.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0xdc
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_80131340.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_80135A4C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90,+0xa8
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_801549F8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x6c
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_801594E8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_801789AC.o: JTBL_PADS := 0,0,0,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220,+0x2b0
|
||||
ov_MAIN_012_CHECK_SHA := config/check.ov_MAIN_012.sha
|
||||
@@ -4944,12 +4945,13 @@ ov_SC02_037_ELF := $(ov_SC02_037_OUT).elf
|
||||
ov_SC02_037_MAPFILE := $(ov_SC02_037_OUT).map
|
||||
ov_SC02_037_LD_SCRIPT := $(ov_SC02_037_OUT).ld
|
||||
ov_SC02_037_SPLAT_YAML := config/splat.ov_SC02_037.yaml
|
||||
ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,ov_SC02_037_jr_80131340.o,tail2.data.o,ov_SC02_037_jr_80135A4C.o,tail3.data.o,ov_SC02_037_jr_80135EB0.o,tail4.data.o,ov_SC02_037_jr_801380E0.o,tail5.data.o,ov_SC02_037_jr_8013F350.o,tail6.data.o,ov_SC02_037_jr_801549F8.o,ov_SC02_037_jr_801555F4.o,tail7.data.o,ov_SC02_037_jr_801594E8.o,tail8.data.o,ov_SC02_037_jr_80159C84.o,tail9.data.o,ov_SC02_037_jr_8015A3C8.o,tail10.data.o,ov_SC02_037_jr_8016AE5C.o,tail11.data.o,ov_SC02_037_jr_80171B4C.o,tail12.data.o,ov_SC02_037_jr_801789AC.o,tail13.data.o,ov_SC02_037_jr_8017AE2C.o,tail14.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,ov_SC02_037_jr_80131340.o,tail2.data.o,ov_SC02_037_jr_80135A4C.o,tail3.data.o,ov_SC02_037_jr_80135EB0.o,tail4.data.o,ov_SC02_037_jr_801380E0.o,tail5.data.o,ov_SC02_037_jr_8013F350.o,tail6.data.o,ov_SC02_037_jr_801549F8.o,ov_SC02_037_jr_801555F4.o,tail7.data.o,ov_SC02_037_jr_801594E8.o,ov_SC02_037_jr_80159C84.o,tail8.data.o,ov_SC02_037_jr_8015A3C8.o,tail9.data.o,ov_SC02_037_jr_8016AE5C.o,tail10.data.o,ov_SC02_037_jr_80171B4C.o,tail11.data.o,ov_SC02_037_jr_801789AC.o,tail12.data.o,ov_SC02_037_jr_8017AE2C.o,tail13.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC02_037/ov_SC02_037.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0xdc
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_80131340.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_80135A4C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90,+0xa8
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_801549F8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x6c
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_801594E8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_8015A3C8.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x40,+0x60
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_801789AC.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190
|
||||
@@ -4975,12 +4977,13 @@ ov_SC03_107_ELF := $(ov_SC03_107_OUT).elf
|
||||
ov_SC03_107_MAPFILE := $(ov_SC03_107_OUT).map
|
||||
ov_SC03_107_LD_SCRIPT := $(ov_SC03_107_OUT).ld
|
||||
ov_SC03_107_SPLAT_YAML := config/splat.ov_SC03_107.yaml
|
||||
ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,ov_SC03_107_jr_80131340.o,tail2.data.o,ov_SC03_107_jr_80135A4C.o,tail3.data.o,ov_SC03_107_jr_80135EB0.o,tail4.data.o,ov_SC03_107_jr_801380E0.o,tail5.data.o,ov_SC03_107_jr_8013F350.o,tail6.data.o,ov_SC03_107_jr_801549F8.o,ov_SC03_107_jr_801555F4.o,tail7.data.o,ov_SC03_107_jr_801594E8.o,tail8.data.o,ov_SC03_107_jr_80159C84.o,tail9.data.o,ov_SC03_107_jr_8015A3C8.o,tail10.data.o,ov_SC03_107_jr_8016AE5C.o,tail11.data.o,ov_SC03_107_jr_80171B4C.o,tail12.data.o,ov_SC03_107_jr_801789AC.o,tail13.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,ov_SC03_107_jr_80131340.o,tail2.data.o,ov_SC03_107_jr_80135A4C.o,tail3.data.o,ov_SC03_107_jr_80135EB0.o,tail4.data.o,ov_SC03_107_jr_801380E0.o,tail5.data.o,ov_SC03_107_jr_8013F350.o,tail6.data.o,ov_SC03_107_jr_801549F8.o,ov_SC03_107_jr_801555F4.o,tail7.data.o,ov_SC03_107_jr_801594E8.o,ov_SC03_107_jr_80159C84.o,tail8.data.o,ov_SC03_107_jr_8015A3C8.o,tail9.data.o,ov_SC03_107_jr_8016AE5C.o,tail10.data.o,ov_SC03_107_jr_80171B4C.o,tail11.data.o,ov_SC03_107_jr_801789AC.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC03_107/ov_SC03_107.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0xdc
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_80131340.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_80135A4C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90,+0xa8
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_801549F8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x6c
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_801594E8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_801789AC.o: JTBL_PADS := 0,0,0,4,4,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220,+0x2b0,+0x2c4,+0x32c
|
||||
ov_SC03_107_CHECK_SHA := config/check.ov_SC03_107.sha
|
||||
|
||||
@@ -123,17 +123,16 @@ segments:
|
||||
- [0x5b668, .rodata, ov_MAIN_012_jr_801555F4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b688, data, tail7]
|
||||
- [0x5b6b0, .rodata, ov_MAIN_012_jr_801594E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b6d0, data, tail8]
|
||||
- [0x5b730, .rodata, ov_MAIN_012_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b764, data, tail9]
|
||||
- [0x5b764, data, tail8]
|
||||
- [0x5b768, .rodata, ov_MAIN_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b784, data, tail10]
|
||||
- [0x5b784, data, tail9]
|
||||
- [0x5b81c, .rodata, ov_MAIN_012_jr_8016AE5C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b83c, data, tail11]
|
||||
- [0x5b83c, data, tail10]
|
||||
- [0x5b87c, .rodata, ov_MAIN_012_jr_80171B4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b89c, data, tail12]
|
||||
- [0x5b89c, data, tail11]
|
||||
- [0x5ba40, .rodata, ov_MAIN_012_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5bd04, data, tail13]
|
||||
- [0x5bd04, data, tail12]
|
||||
- [0x5DB24, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0x5DB27] # 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
|
||||
|
||||
@@ -124,19 +124,18 @@ segments:
|
||||
- [0x9fb4c, .rodata, ov_SC02_037_jr_801555F4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fb6c, data, tail7]
|
||||
- [0x9fb94, .rodata, ov_SC02_037_jr_801594E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fbb4, data, tail8]
|
||||
- [0x9fc14, .rodata, ov_SC02_037_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fc48, data, tail9]
|
||||
- [0x9fc48, data, tail8]
|
||||
- [0x9fc4c, .rodata, ov_SC02_037_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fcc8, data, tail10]
|
||||
- [0x9fcc8, data, tail9]
|
||||
- [0x9fd00, .rodata, ov_SC02_037_jr_8016AE5C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fd20, data, tail11]
|
||||
- [0x9fd20, data, tail10]
|
||||
- [0x9fd60, .rodata, ov_SC02_037_jr_80171B4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fd80, data, tail12]
|
||||
- [0x9fd80, data, tail11]
|
||||
- [0x9ff24, .rodata, ov_SC02_037_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xa0140, data, tail13]
|
||||
- [0xa0140, data, tail12]
|
||||
- [0xa01d4, .rodata, ov_SC02_037_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xa0238, data, tail14]
|
||||
- [0xa0238, data, tail13]
|
||||
- [0xA198C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xA198F] # 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
|
||||
|
||||
@@ -123,17 +123,16 @@ segments:
|
||||
- [0x71e80, .rodata, ov_SC03_107_jr_801555F4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71ea0, data, tail7]
|
||||
- [0x71ec8, .rodata, ov_SC03_107_jr_801594E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71ee8, data, tail8]
|
||||
- [0x71f48, .rodata, ov_SC03_107_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71f7c, data, tail9]
|
||||
- [0x71f7c, data, tail8]
|
||||
- [0x71f80, .rodata, ov_SC03_107_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71f9c, data, tail10]
|
||||
- [0x71f9c, data, tail9]
|
||||
- [0x72034, .rodata, ov_SC03_107_jr_8016AE5C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x72054, data, tail11]
|
||||
- [0x72054, data, tail10]
|
||||
- [0x72094, .rodata, ov_SC03_107_jr_80171B4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x720b4, data, tail12]
|
||||
- [0x720b4, data, tail11]
|
||||
- [0x72258, .rodata, ov_SC03_107_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x725ac, data, tail13]
|
||||
- [0x725ac, data, tail12]
|
||||
- [0x73BE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0x73BE7] # 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
|
||||
|
||||
@@ -2342,7 +2342,64 @@ DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
|
||||
void func_80159A18(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801594E8", func_80159A20);
|
||||
|
||||
// @class: struct
|
||||
// Redraft of the DECAYED backlog draft. The stored seed took `void *param_1` and then
|
||||
// dereferenced it (`param_1[0xdd]`) — gcc-2.7.2 rejects that ("void value not ignored
|
||||
// as it ought to be"), so the seed no longer compiles at all. Fix: retype the parameter
|
||||
// as `unsigned char *`, which keeps every pointer offset byte-scaled (as void* arith did)
|
||||
// while making the byte load legal.
|
||||
// Structure preserved from the seed: the two return-tests are kept STRUCTURALLY
|
||||
// DIFFERENT (positive `if(==) goto mask;` per branch, not `if(!=) return;`) so gcc's
|
||||
// cross-jump pass cannot tail-merge them; and the outer test is inverted (`if(d != 1)`)
|
||||
// so the ==4/return path is the inline fall-through and the d==1 / p[2] path becomes the
|
||||
// forward beq-target block — matching the target block order.
|
||||
// Typedefs are BLOCK-SCOPE so the match travels to the sibling overlays.
|
||||
|
||||
|
||||
extern void func_80150B28(int param_1);
|
||||
extern void func_80158638(void*);
|
||||
extern void func_8015126C(unsigned short *);
|
||||
extern void func_8014900C(int *a0);
|
||||
|
||||
void func_80159A20(unsigned char *param_1)
|
||||
{
|
||||
|
||||
extern void (*D_80180AC0[])(unsigned char *);
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned int u32;
|
||||
typedef int s32;
|
||||
typedef unsigned char u8;
|
||||
|
||||
((s32 (*)(void))func_80150B28)();
|
||||
((void (*)(unsigned char *))func_80158638)(param_1);
|
||||
((void (*)(u8 *))func_8015126C)(param_1);
|
||||
((void (*)(u8 *))func_8014900C)(param_1);
|
||||
D_80180AC0[*(u16 *)param_1 & 0x7fff](param_1);
|
||||
*(u32 *)(param_1 + 0x44) |= 0x8000000;
|
||||
switch (*(u16 *)param_1) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 0xb:
|
||||
case 0xc:
|
||||
goto mask;
|
||||
default:
|
||||
return;
|
||||
case 0x19:
|
||||
if (param_1[0xdd] != 1) {
|
||||
if (param_1[0xdd] == 4) {
|
||||
goto mask;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (*(u16 *)(param_1 + 2) == 3) {
|
||||
goto mask;
|
||||
}
|
||||
return;
|
||||
}
|
||||
mask:
|
||||
*(u32 *)(param_1 + 0x44) &= 0xf7ffffff;
|
||||
}
|
||||
|
||||
DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
|
||||
|
||||
|
||||
@@ -2363,7 +2363,64 @@ DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
|
||||
void func_80159A18(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_801594E8", func_80159A20);
|
||||
|
||||
// @class: struct
|
||||
// Redraft of the DECAYED backlog draft. The stored seed took `void *param_1` and then
|
||||
// dereferenced it (`param_1[0xdd]`) — gcc-2.7.2 rejects that ("void value not ignored
|
||||
// as it ought to be"), so the seed no longer compiles at all. Fix: retype the parameter
|
||||
// as `unsigned char *`, which keeps every pointer offset byte-scaled (as void* arith did)
|
||||
// while making the byte load legal.
|
||||
// Structure preserved from the seed: the two return-tests are kept STRUCTURALLY
|
||||
// DIFFERENT (positive `if(==) goto mask;` per branch, not `if(!=) return;`) so gcc's
|
||||
// cross-jump pass cannot tail-merge them; and the outer test is inverted (`if(d != 1)`)
|
||||
// so the ==4/return path is the inline fall-through and the d==1 / p[2] path becomes the
|
||||
// forward beq-target block — matching the target block order.
|
||||
// Typedefs are BLOCK-SCOPE so the match travels to the sibling overlays.
|
||||
|
||||
|
||||
extern void func_80150B28(int param_1);
|
||||
extern void func_80158638(void*);
|
||||
extern void func_8015126C(unsigned short *);
|
||||
extern void func_8014900C(int *a0);
|
||||
|
||||
void func_80159A20(unsigned char *param_1)
|
||||
{
|
||||
|
||||
extern void (*D_8018634C[])(unsigned char *);
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned int u32;
|
||||
typedef int s32;
|
||||
typedef unsigned char u8;
|
||||
|
||||
((s32 (*)(void))func_80150B28)();
|
||||
((void (*)(unsigned char *))func_80158638)(param_1);
|
||||
((void (*)(u8 *))func_8015126C)(param_1);
|
||||
((void (*)(u8 *))func_8014900C)(param_1);
|
||||
D_8018634C[*(u16 *)param_1 & 0x7fff](param_1);
|
||||
*(u32 *)(param_1 + 0x44) |= 0x8000000;
|
||||
switch (*(u16 *)param_1) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 0xb:
|
||||
case 0xc:
|
||||
goto mask;
|
||||
default:
|
||||
return;
|
||||
case 0x19:
|
||||
if (param_1[0xdd] != 1) {
|
||||
if (param_1[0xdd] == 4) {
|
||||
goto mask;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (*(u16 *)(param_1 + 2) == 3) {
|
||||
goto mask;
|
||||
}
|
||||
return;
|
||||
}
|
||||
mask:
|
||||
*(u32 *)(param_1 + 0x44) &= 0xf7ffffff;
|
||||
}
|
||||
|
||||
DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
|
||||
|
||||
|
||||
@@ -2346,7 +2346,64 @@ DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
|
||||
void func_80159A18(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801594E8", func_80159A20);
|
||||
|
||||
// @class: struct
|
||||
// Redraft of the DECAYED backlog draft. The stored seed took `void *param_1` and then
|
||||
// dereferenced it (`param_1[0xdd]`) — gcc-2.7.2 rejects that ("void value not ignored
|
||||
// as it ought to be"), so the seed no longer compiles at all. Fix: retype the parameter
|
||||
// as `unsigned char *`, which keeps every pointer offset byte-scaled (as void* arith did)
|
||||
// while making the byte load legal.
|
||||
// Structure preserved from the seed: the two return-tests are kept STRUCTURALLY
|
||||
// DIFFERENT (positive `if(==) goto mask;` per branch, not `if(!=) return;`) so gcc's
|
||||
// cross-jump pass cannot tail-merge them; and the outer test is inverted (`if(d != 1)`)
|
||||
// so the ==4/return path is the inline fall-through and the d==1 / p[2] path becomes the
|
||||
// forward beq-target block — matching the target block order.
|
||||
// Typedefs are BLOCK-SCOPE so the match travels to the sibling overlays.
|
||||
|
||||
|
||||
extern void func_80150B28(int param_1);
|
||||
extern void func_80158638(void*);
|
||||
extern void func_8015126C(unsigned short *);
|
||||
extern void func_8014900C(int *a0);
|
||||
|
||||
void func_80159A20(unsigned char *param_1)
|
||||
{
|
||||
|
||||
extern void (*D_80184BE8[])(unsigned char *);
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned int u32;
|
||||
typedef int s32;
|
||||
typedef unsigned char u8;
|
||||
|
||||
((s32 (*)(void))func_80150B28)();
|
||||
((void (*)(unsigned char *))func_80158638)(param_1);
|
||||
((void (*)(u8 *))func_8015126C)(param_1);
|
||||
((void (*)(u8 *))func_8014900C)(param_1);
|
||||
D_80184BE8[*(u16 *)param_1 & 0x7fff](param_1);
|
||||
*(u32 *)(param_1 + 0x44) |= 0x8000000;
|
||||
switch (*(u16 *)param_1) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 0xb:
|
||||
case 0xc:
|
||||
goto mask;
|
||||
default:
|
||||
return;
|
||||
case 0x19:
|
||||
if (param_1[0xdd] != 1) {
|
||||
if (param_1[0xdd] == 4) {
|
||||
goto mask;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (*(u16 *)(param_1 + 2) == 3) {
|
||||
goto mask;
|
||||
}
|
||||
return;
|
||||
}
|
||||
mask:
|
||||
*(u32 *)(param_1 + 0x44) &= 0xf7ffffff;
|
||||
}
|
||||
|
||||
DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user