# splat config TEMPLATE — Brave Fencer Musashi location overlays (SCxx.CD/FILE_nnn/0.4.dec) # ============================================================================= # Phase 13: the reusable flat-blob splat config for a LOCATION OVERLAY. ~134 overlays # all stream into the SAME RAM slot (vram 0x80128158) and chain into the resident engine # (0x800CEDF8) + the EXE. This is a TEMPLATE: the @TOKEN@ placeholders are substituted to # produce config/splat..yaml — by tools/new_overlay.sh (Phase 13 T4), or by hand # (Phase 13 T1a for the first overlay). It is NOT a valid splat config until instantiated. # # Placeholders: # ov_SC01_080 binary alias, ov__ e.g. ov_SC01_077 # extracted/retail/SC01.CD.dir/FILE_080.dir/0.4.dec extracted 0.4.dec payload path e.g. extracted/retail/SC01.CD.dir/FILE_077.dir/0.4.dec # 404603e32c43aa0f2565539d8f3af4474045ce12 sha1 of the 0.4.dec (the build-identity target; also -> config/check..sha) # 0x80128158 load vram (the shared overlay slot) e.g. 0x80128158 (constant across overlays today; # parameterized so a future non-0x80128158 overlay needs no template edit) # 0x5B3B4 file offset where code ends -> data tail begins (iterated vs the byte check, T1b) # 0x9FDF7 file size in bytes (the EOF marker; = the 0.4.dec length) # # Modeled on config/splat.resident.yaml (the Phase-10 flat-blob recipe), with overlays' # differences: (1) code at file offset 0x0 (overlays open with a function prologue, NOT a # leading data word like the resident — so NO leading-rodata trick by default; see the # commented `head` slot for the rare pre-code-data overlay); (2) symbol_addrs_path ALSO # stacks config/symbols.resident.txt because overlays reference resident engine globals; # (3) vram is the overlay slot. Everything else matches the resident options verbatim. # # Byte-match is robust to the exact text/data split (splat round-trips the bytes — the # resident precedent); iterate 0x5B3B4 against `make check BINARY=ov_SC01_080` (Phase-5/10 # precedent). LZSS is NOT in the verify path — we match the DECOMPRESSED 0.4.dec (repack is Gen3). name: ov_SC01_080 sha1: 404603e32c43aa0f2565539d8f3af4474045ce12 options: basename: ov_SC01_080 target_path: extracted/retail/SC01.CD.dir/FILE_080.dir/0.4.dec elf_path: build/ov_SC01_080/ov_SC01_080.elf # base_path is resolved relative to THIS yaml's dir (config/), so `..` = repo root base_path: .. platform: psx compiler: PSYQ asm_path: asm/ov_SC01_080 src_path: src/ov_SC01_080 # asset_path scoped per-alias so a `bin` subseg (the trailing-partial-word carve, below) lands at # assets/ov_SC01_080/*.bin and never collides with another overlay's same-named asset. The Makefile's # build/assets/%.o rule incbin's it into a linkable object. asset_path: assets/ov_SC01_080 # build_path = build (NOT build/): splat writes the .ld's object paths under # $(build_path), and the Makefile's pattern rules build them at build/asm/** + build/src/**. # Only the elf/ld/output live in build//. build_path: build ld_script_path: build/ov_SC01_080/ov_SC01_080.ld ld_dependencies: True # Per-binary undefined-symbol outputs (under build//), so `make clean`'s `rm -rf build` # covers them and binaries never share a stale file. undefined_syms_auto_path: build/ov_SC01_080/undefined_syms_auto.txt undefined_funcs_auto_path: build/ov_SC01_080/undefined_funcs_auto.txt find_file_boundaries: False # NO gp_value: overlays are -G0 (verify zero ($gp)/%gp_rel in the disasm). Omitting it -> no _gp. o_as_suffix: True use_legacy_include_asm: False section_order: [".rodata", ".text", ".data", ".bss"] # Stacked symbols: shared engine globals (symbols.us.txt) + resident engine globals the overlay # calls (symbols.resident.txt) + the overlay-local names/boundaries (symbols..txt, seeded # T1c from sig_image + duplicates.cross.md; R13/R15-tagged, overlay-region only). symbol_addrs_path: - config/symbols.us.txt - config/symbols.resident.txt - config/symbols.ov_SC01_080.txt subalign: 2 string_encoding: ASCII data_string_encoding: ASCII rodata_string_guesser_level: 2 data_string_guesser_level: 2 # Enable if maspsx reorders INCLUDE_ASM output in c-mode (unused for the EXE/resident): # include_asm_macro_style: maspsx_hack segments: - name: ov_SC01_080 type: code start: 0x0 vram: 0x80128158 # align 4 (not the code default 16): MIPS is word-aligned; mirrors the EXE/resident choice. align: 4 subsegments: # OPTIONAL leading pre-code data/rodata island (rare): if an overlay begins with a data # word BEFORE its first function (the resident's case), uncomment a `head` subseg here and # shift the code start. Mark it `rodata` (section_order places .rodata first) so it lands at # 0x80128158 ahead of the code, a 1-word analogue of main's rodata-island (no ld_interleave). # - [0x0, rodata, head] - [0x0, c, ov_SC01_080] - [0x2b88, c, ov_SC01_080_jr_8012ACE0] - [0xd730, c, ov_SC01_080_jr_80135888] - [0xd8f4, c, ov_SC01_080_jr_80135A4C] - [0xdbc8, c, ov_SC01_080_jr_80135D20] - [0xff88, c, ov_SC01_080_jr_801380E0] - [0x13410, c, ov_SC01_080_o0c] - [0x14834, c, ov_SC01_080_jr_8013C98C] - [0x171f8, c, ov_SC01_080_jr_8013F350] - [0x17e80, c, ov_SC01_080_jr_8013FFD8] - [0x184b0, c, ov_SC01_080_jr_80140608] - [0x1CA44, c, ov_SC01_080_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_080_after] - [0x2c2f4, c, ov_SC01_080_jr_8015444C] - [0x2cacc, c, ov_SC01_080_jr_80154C24] - [0x30774, c, ov_SC01_080_jr_801588CC] - [0x31b2c, c, ov_SC01_080_jr_80159C84] - [0x32270, c, ov_SC01_080_jr_8015A3C8] - [0x32cd4, c, ov_SC01_080_jr_8015AE2C] - [0x341d4, c, ov_SC01_080_jr_8015C32C] - [0x42a14, c, ov_SC01_080_jr_8016AB6C] - [0x499f4, c, ov_SC01_080_jr_80171B4C] - [0x4b364, c, ov_SC01_080_jr_801734BC] - [0x50854, c, ov_SC01_080_jr_801789AC] - [0x50be8, c, ov_SC01_080_jr_80178D40] - [0x52354, c, ov_SC01_080_jr_8017A4AC] - [0x52cd4, c, ov_SC01_080_jr_8017AE2C] - [0x5b3b4, data, tail] - [0x9b424, .rodata, ov_SC01_080] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b500, .rodata, ov_SC01_080_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b5f4, data, tail2] - [0x9b5f8, .rodata, ov_SC01_080_jr_80135888] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b60c, data, tail3] - [0x9b610, .rodata, ov_SC01_080_jr_80135A4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b624, data, tail4] - [0x9b628, .rodata, ov_SC01_080_jr_80135D20] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b66c, data, tail5] - [0x9b678, .rodata, ov_SC01_080_jr_801380E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b6dc, .rodata, ov_SC01_080_o0c] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b860, data, tail6] - [0x9bce8, .rodata, ov_SC01_080_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bd1c, data, tail7] - [0x9bd20, .rodata, ov_SC01_080_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bd8c, data, tail8] - [0x9bd90, .rodata, ov_SC01_080_jr_80140608] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bda4, data, tail9] - [0x9bdbc, .rodata, ov_SC01_080_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9be98, .rodata, ov_SC01_080_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bedc, .rodata, ov_SC01_080_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bf84, .rodata, ov_SC01_080_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bfb8, data, tail10] - [0x9bfbc, .rodata, ov_SC01_080_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bfd8, data, tail11] - [0x9bfdc, .rodata, ov_SC01_080_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c018, data, tail12] - [0x9c01c, .rodata, ov_SC01_080_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c038, data, tail13] - [0x9c050, .rodata, ov_SC01_080_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c090, data, tail14] - [0x9c0d0, .rodata, ov_SC01_080_jr_80171B4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c0f0, .rodata, ov_SC01_080_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c104, data, tail15] - [0x9c294, .rodata, ov_SC01_080_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c2ac, .rodata, ov_SC01_080_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c4b0, data, tail16] - [0x9c4b4, .rodata, ov_SC01_080_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c540, data, tail17] - [0x9c544, .rodata, ov_SC01_080_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c578, data, tail18] - [0x9FDF4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FDF7] # 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 # ` - [0x, bin, trailing]` (the final 1-3 bytes spimdisasm's data path drops); # for a 4-aligned overlay the marker line is removed. The Makefile build/assets/%.o rule + the # objcopy end-align TRIM finish the job. Hand-instantiated configs (ov_SC01_077) inline the carve.