mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 22:45:39 -04:00
fa7b9d4c71
- THE TOUR (Drew driving the retail debug menu; mode-7 hammer over the Redux web API): all 28 script modules captured live at four byte-verified per-chapter slots (SC03/73-79 @0x801EF468 ch2-period, SC03/132-138 @0x801E25E8 ch3, SC04/24-30 @0x801E7B28, SC05/23-29 @0x801ED988); the routing law: debug-menu AREA selects the chapter, each CITY interior streams its own module (member k <-> interior k). md_MAIN_011/DISELECT byte-proven 24,236/24,240 in RAM; slots A/B/boot R34-verified live. - MAIN/3 DISCOVERED: the main-menu module (id 0x39, 121,884 B), mis-bucketed as data by BOTH audit oracles; live byte-proven @0x800CEDF8 (42,632-B exact prefix); onboarded. - 29 onboardings BYTE-IDENTICAL on first build -> fleet 212; R22 212/212 after three md_MAIN_003 catches: the A4 DsMix leak; an extract-order-sensitive splat boundary (bytes: a 1-word data sentinel in .text + fn at +4 -> pinned in symbols file); corpus.stubs now treats D_*/jtbl_* INCLUDE_ASM as blob includes (mirrors progress.py) - module-id census (offline, disc-wide): 77 id-law code payloads, 0 further misses; SC03/55 = confirmed DATA. audit-disc: UNCLAIMED 34 -> 6, residue 0 — the 6 carry byte-checked negative evidence; next tier = the CD-read tracer - docs: memory-map §S45 (slots + routing + debug-menu ops), disc-completeness S45 addendum, decision-log R31 entry, docs/debug-menu-list.txt (Drew's transcription) - .run/s45 evidence allowlisted (tour logs/scripts/rosters); 104 ram dumps LOCAL-ONLY - new baseline: 93.8% instr / 95.68% fn / 87.2% distinct over 212
104 lines
5.5 KiB
YAML
104 lines
5.5 KiB
YAML
# 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.<alias>.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:
|
|
# md_SC03_138 binary alias, ov_<SCxx>_<nnn> e.g. ov_SC01_077
|
|
# extracted/retail/SC03.CD.dir/FILE_138.dir/2.1 extracted 0.4.dec payload path e.g. extracted/retail/SC01.CD.dir/FILE_077.dir/0.4.dec
|
|
# 05531456ddde6092b6cd309cdd0941ce3b5db5f1 sha1 of the 0.4.dec (the build-identity target; also -> config/check.<alias>.sha)
|
|
# 0x801E25E8 load vram (the shared overlay slot) e.g. 0x80128158 (constant across overlays today;
|
|
# parameterized so a future non-0x80128158 overlay needs no template edit)
|
|
# 0xD08 file offset where code ends -> data tail begins (iterated vs the byte check, T1b)
|
|
# 0x9CE4 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 0xD08 against `make check BINARY=md_SC03_138` (Phase-5/10
|
|
# precedent). LZSS is NOT in the verify path — we match the DECOMPRESSED 0.4.dec (repack is Gen3).
|
|
name: md_SC03_138
|
|
sha1: 05531456ddde6092b6cd309cdd0941ce3b5db5f1
|
|
options:
|
|
basename: md_SC03_138
|
|
target_path: extracted/retail/SC03.CD.dir/FILE_138.dir/2.1
|
|
elf_path: build/md_SC03_138/md_SC03_138.elf
|
|
# base_path is resolved relative to THIS yaml's dir (config/), so `..` = repo root
|
|
base_path: ..
|
|
platform: psx
|
|
compiler: PSYQ
|
|
|
|
asm_path: asm/md_SC03_138
|
|
src_path: src/md_SC03_138
|
|
# asset_path scoped per-alias so a `bin` subseg (the trailing-partial-word carve, below) lands at
|
|
# assets/md_SC03_138/*.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/md_SC03_138
|
|
# build_path = build (NOT build/<alias>): 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/<alias>/.
|
|
build_path: build
|
|
ld_script_path: build/md_SC03_138/md_SC03_138.ld
|
|
ld_dependencies: True
|
|
|
|
# Per-binary undefined-symbol outputs (under build/<alias>/), so `make clean`'s `rm -rf build`
|
|
# covers them and binaries never share a stale file.
|
|
undefined_syms_auto_path: build/md_SC03_138/undefined_syms_auto.txt
|
|
undefined_funcs_auto_path: build/md_SC03_138/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.<alias>.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.md_SC03_138.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: md_SC03_138
|
|
type: code
|
|
start: 0x0
|
|
vram: 0x801E25E8
|
|
# 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
|
|
# 0x801E25E8 ahead of the code, a 1-word analogue of main's rodata-island (no ld_interleave).
|
|
# - [0x0, rodata, head]
|
|
- [0x0, .rodata, md_SC03_138] # module-id header (+jtbl/ptr table) — §154-A
|
|
- [0x14, c, md_SC03_138]
|
|
- [0xD08, data, tail] # data tail: pointer tables + packed data (split iterated)
|
|
- [0x9CE4] # 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<word_floor>, 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.
|