mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-07 09:27:55 -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
85 lines
3.8 KiB
Bash
85 lines
3.8 KiB
Bash
#!/usr/bin/env bash
|
|
# S45 II.1 driver: onboard a batch of md_* modules via tools/new_binary.sh, logging per-module
|
|
# PASS/FAIL. A byte-gate failure PARKS that module (records it) and continues the batch — the
|
|
# plan's safety rule: never force a failing derived address.
|
|
set -uo pipefail
|
|
cd "$(dirname "$0")/../.." # repo root
|
|
LOG=.run/s45/onboard.log
|
|
PARKED=.run/s45/parked.txt
|
|
touch "$LOG" "$PARKED"
|
|
|
|
onboard() { # alias payload vram tlo
|
|
local alias="$1" payload="$2" vram="$3" tlo="$4"
|
|
if [ -f "config/check.${alias}.sha" ] && grep -q "^${alias}_EXE " config/modules.mk 2>/dev/null; then
|
|
echo "SKIP $alias (already onboarded)" | tee -a "$LOG"; return 0
|
|
fi
|
|
echo "=== $alias $payload $vram tlo=$tlo ===" >> "$LOG"
|
|
if tools/new_binary.sh "$alias" "$payload" "$vram" "$tlo" >> "$LOG" 2>&1; then
|
|
if make check BINARY="$alias" >> "$LOG" 2>&1; then
|
|
echo "PASS $alias" | tee -a "$LOG"
|
|
else
|
|
echo "FAIL-CHECK $alias — parked" | tee -a "$LOG"; echo "$alias check-failed" >> "$PARKED"
|
|
fi
|
|
else
|
|
echo "FAIL-ONBOARD $alias — parked" | tee -a "$LOG"; echo "$alias onboard-failed" >> "$PARKED"
|
|
fi
|
|
}
|
|
|
|
batch="$1"
|
|
case "$batch" in
|
|
slotA)
|
|
M=extracted/retail/MAIN.CD.dir
|
|
onboard md_MAIN_013 $M/FILE_013.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_014 $M/FILE_014.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_015 $M/FILE_015.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_016 $M/FILE_016.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_017 $M/FILE_017.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_018 $M/FILE_018.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_019 $M/FILE_019.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_020 $M/FILE_020.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_021 $M/FILE_021.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_022 $M/FILE_022.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_023 $M/FILE_023.dir/0.1 0x800CAE08 0x4
|
|
onboard md_MAIN_024 $M/FILE_024.dir/0.1 0x800CAE08 0x4
|
|
onboard md_MAIN_025 $M/FILE_025.dir/1.1 0x800CAE08 0xC
|
|
onboard md_MAIN_026 $M/FILE_026.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_027 $M/FILE_027.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_028 $M/FILE_028.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_029 $M/FILE_029.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_030 $M/FILE_030.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_031 $M/FILE_031.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_032 $M/FILE_032.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_033 $M/FILE_033.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_034 $M/FILE_034.dir/1.1 0x800CAE08 0x80
|
|
onboard md_MAIN_035 $M/FILE_035.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_036 $M/FILE_036.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_037 $M/FILE_037.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_038 $M/FILE_038.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_039 $M/FILE_039.dir/1.1 0x800CAE08 0xC
|
|
onboard md_MAIN_040 $M/FILE_040.dir/1.1 0x800CAE08 0x4
|
|
onboard md_MAIN_041 $M/FILE_041.dir/1.1 0x800CAE08 0x4
|
|
;;
|
|
slotB)
|
|
M=extracted/retail/MAIN.CD.dir
|
|
onboard md_MAIN_042 $M/FILE_042.dir/0.1 0x800CCB1C 0x4
|
|
onboard md_MAIN_043 $M/FILE_043.dir/0.1 0x800CCB1C 0x4
|
|
onboard md_MAIN_044 $M/FILE_044.dir/0.1 0x800CCB1C 0x4
|
|
onboard md_MAIN_045 $M/FILE_045.dir/0.1 0x800CCB1C 0x4
|
|
onboard md_MAIN_046 $M/FILE_046.dir/0.1 0x800CCB1C 0x4
|
|
onboard md_MAIN_047 $M/FILE_047.dir/0.1 0x800CCB1C 0x4
|
|
;;
|
|
boot)
|
|
M=extracted/retail/MAIN.CD.dir
|
|
onboard md_MAIN_001 $M/FILE_001.dir/1.1 0x800CEDF8 0x4
|
|
onboard md_MAIN_008 $M/FILE_008.dir/1.1 0x800CEDF8 0x4
|
|
onboard md_MAIN_011 $M/FILE_011.dir/1.1 0x800CEDF8 0x7C
|
|
;;
|
|
sc07)
|
|
S=extracted/retail/SC07.CD.dir
|
|
onboard md_SC07_003 $S/FILE_003.dir/1.1 0x801A00D8 0xFC
|
|
onboard md_SC07_004 $S/FILE_004.dir/1.1 0x801A00D8 0x158
|
|
;;
|
|
*) echo "usage: onboard_batch.sh slotA|slotB|boot|sc07"; exit 2 ;;
|
|
esac
|
|
echo "--- batch $batch done; parked: $(wc -l < "$PARKED") ---" | tee -a "$LOG"
|