feat(phase-30 S49): jr lane — func_80185440 banked via jtbl_family_bank (lane-A re-sweep)

This commit is contained in:
Drew T
2026-08-12 21:24:24 -06:00
parent a194268e01
commit dfd6be8b38
3 changed files with 87 additions and 3 deletions
+1 -1
View File
@@ -4994,7 +4994,7 @@ build/src/ov_SC02_037/ov_SC02_037_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
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_80171B4C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC02_037/ov_SC02_037_jr_801789AC.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
build/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.o: JTBL_PADS := 0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x4c
build/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.o: JTBL_PADS := 0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x4c,+0x64
ov_SC02_037_CHECK_SHA := config/check.ov_SC02_037.sha
ov_SC02_037_SYMBOLS := config/symbols.ov_SC02_037.txt
ov_SC02_037_SIG := .run/sig.ov_SC02_037.jsonl
+1 -1
View File
@@ -135,7 +135,7 @@ segments:
- [0x9ff24, .rodata, ov_SC02_037_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa01d0, data, tail12]
- [0xa01d4, .rodata, ov_SC02_037_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa0238, data, tail13]
- [0xa024c, 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
+85 -1
View File
@@ -9236,7 +9236,91 @@ void func_801836D4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8017AE2C", func_80183710);
// STEP 0 magic-literal grep: (*(LBlk16 *)&D_800A5E88) / func_8002850C / func_80028620 / func_8012AD44
// all found together in this same TU (ov_SC02_027_jr_8017D898.c). Siblings func_8018A758,
// func_8018A808, func_8018A8B8, func_8018A970 (all banked, same TU) establish the byte-proven
// idioms reused here: struct-assignment for 16-byte Blk16 records (`dst[0]=src[0];` etc.),
// and `extern void func_8012AD44(s32 *a0, s16 a1);` cast-at-call. func_8018A8B8/func_8018A970
// also already declare (*(LBlk16 *)&D_801C6C44) / (*(LBlk16 *)&D_801C6C7C) as a *singular* Blk16_8018A8B8 elsewhere in
// this TU, and (*(LBlk16 *)&D_800A5E88) likewise — since my splice point (replacing the func_80183710
// INCLUDE_ASM stub) sits ABOVE those file-scope decls/typedef, I cannot reuse the
// Blk16_8018A8B8 name here (typedef not yet visible) without a forward-reference problem, and
// per §138 (reconcile direction) redeclaring those two symbols with an INCOMPATIBLE type at
// file scope risks a clash once banked. So every symbol here is declared block-scoped (function
// body) using a locally-named struct type — block-scope externs don't collide with another
// function's block-scope externs for the same symbol (§S38/D2).
typedef struct { s32 w[4]; } LBlk16; /* 16-byte record, block-scoped local name only */
void func_80183710(void *a0)
{
extern void func_8002850C(s32 a0, s32 a1, s32 a2);
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_80028620(s32 a0, void *a1);
extern s16 D_801C6BCC, D_801C6BCE, D_801C6BD0;
extern LBlk16 D_801C6BD4;
extern s16 D_801C6C04, D_801C6C06, D_801C6C08;
extern LBlk16 D_801C6C0C;
extern s16 D_801C6C3C, D_801C6C3E, D_801C6C40;
extern Blk16_8018A8B8 D_801C6C44;
extern s16 D_801C6C74, D_801C6C76, D_801C6C78;
extern Blk16_8018A8B8 D_801C6C7C;
s32 v1 = *(s16 *)((s32)a0 + 0xFC);
LBlk16 *s0;
*(s16 *)((s32)a0 + 0xFE) = 0;
switch (v1) {
case 0:
func_8002850C(D_801C6BCC, D_801C6BCE, D_801C6BD0);
s0 = &D_801C6BD4;
func_8012AD44((s32 *)a0, 1);
break;
case 1:
func_8002850C(D_801C6C04, D_801C6C06, D_801C6C08);
s0 = &D_801C6C0C;
func_8012AD44((s32 *)a0, 2);
break;
case 2:
func_8002850C(D_801C6C3C, D_801C6C3E, D_801C6C40);
s0 = &(*(LBlk16 *)&D_801C6C44);
func_8012AD44((s32 *)a0, 3);
break;
case 3:
func_8002850C(D_801C6BCC, D_801C6BCE, D_801C6BD0);
s0 = &D_801C6BD4;
func_8012AD44((s32 *)a0, 4);
break;
case 4:
func_8002850C(D_801C6C74, D_801C6C76, D_801C6C78);
s0 = &(*(LBlk16 *)&D_801C6C7C);
func_8012AD44((s32 *)a0, 5);
break;
}
{
LBlk16 *dst = &(*(LBlk16 *)&D_800A5E88);
LBlk16 *src = s0;
dst[0] = src[0];
dst[1] = src[1];
dst[2] = src[2];
func_80028620(0, &dst[0]);
func_80028620(1, &dst[1]);
func_80028620(2, &dst[2]);
}
}