mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-30 15:36:55 -04:00
feat(phase-7): libgs block 6 linked byte-identical (16 objs / 26 SDK funcs) — session F
- resegment 800b -> [800b pre][libgs6][800b2 post]; psyq_integrate the 16 contiguous block-6 libgs objects (GS_110/119/120/121/122/123/127/131/133/134/135/137, PRESET, PRESET3, OBJT, OBJT3) at vram 0x80053AF8-0x80057928; make check BYTE-IDENTICAL - fix the resegment-triggered spimdisasm boundary instability: declare GsMulCoord2/3 (real MATRIX.o funcs, verified via the PsyQ object, R15 Ghidra-mirror pending) + carve the s8 data descriptor table [0x53198,data,53198] (D_80062998 was shadowed by a mis-detected func_80062998); ld_interleave FRONT_DATA -> 53198.data.o - psyq_integrate multi-library support: per-lib NOLOAD section namespacing (.nl_<tag>_*) so the 2nd integration's NOLOAD isn't skipped (was discarding OBJT3 .rdata/.bss); trial-link includes sibling *_externals.ld (kills the '31 UNRESOLVED' false alarm); global NOLOAD re-sort by vram (kills 'dot moved backwards') - tools/make_libgs_block6.sh: reproducible curated-dir regen (disambiguated 16 objects) - gated on [ -d .run/obj40/libgs_block6 ]: fresh-clone stub fallback verified byte-identical - cookbook s9.4 (multi-library integration gotchas); CURRENT_PHASE updated - next: full libgs integration (other 5 blocks), then Task 6 close-out + Task 7 PhaseEnd
This commit is contained in:
@@ -166,6 +166,14 @@ LIBCD_ELF := .run/obj40/libcd
|
||||
LIBCD_OBJDIR := build/psyq/libcd
|
||||
LIBCD_SYMS := build/psyq/libcd_externals.ld
|
||||
|
||||
# libgs block 6 (Phase 7 Task #9): 16 contiguous libgs objects (GS_110/119/120/121/122/123/127/131/
|
||||
# 133/134/135/137, PRESET, PRESET3, OBJT, OBJT3) linked in place of the single libgs6 stub. Same
|
||||
# conditional/idempotent model as libcd. The curated block-6 object dir is SDK-derived (gitignored),
|
||||
# regenerated by tools/make_libgs_block6.sh (needs the LIBGS ELF from psyq_build_libs.sh LIBGS).
|
||||
LIBGS6_ELF := .run/obj40/libgs_block6
|
||||
LIBGS6_OBJDIR := build/psyq/libgs6
|
||||
LIBGS6_SYMS := build/psyq/libgs6_externals.ld
|
||||
|
||||
# Assembler flags (docs/SETUP.md §6.2). -G0 is confirmed by the disassembly
|
||||
# (ledger #8: zero $gp-relative addressing). -no-pad-sections keeps section ends
|
||||
# un-padded so the link reproduces the original layout.
|
||||
@@ -241,7 +249,12 @@ $(OUT): $(OBJS) $(LD_SCRIPT)
|
||||
else
|
||||
echo " (no $(LIBCD_ELF) — libcd region stays asm stubs; run tools/psyq_build_libs.sh LIBCD)"
|
||||
fi
|
||||
SYMS=""; [ -f "$(LIBCD_SYMS)" ] && SYMS="-T $(LIBCD_SYMS)"
|
||||
if [ -d "$(LIBGS6_ELF)" ]; then
|
||||
$(PYTHON) tools/psyq_integrate.py $(LIBGS6_ELF) $(LD_SCRIPT) $(LIBGS6_OBJDIR) $(LIBGS6_SYMS) libgs6
|
||||
else
|
||||
echo " (no $(LIBGS6_ELF) — libgs6 region stays asm stubs; run tools/make_libgs_block6.sh)"
|
||||
fi
|
||||
SYMS=""; [ -f "$(LIBCD_SYMS)" ] && SYMS="-T $(LIBCD_SYMS)"; [ -f "$(LIBGS6_SYMS)" ] && SYMS="$$SYMS -T $(LIBGS6_SYMS)"
|
||||
echo " LD $(ELF)"
|
||||
$(LD) -T $(LD_SCRIPT) -T $(UNDEF_SYMS) -T $(UNDEF_FUNCS) $$SYMS --no-check-sections -Map $(MAPFILE) -o $(ELF)
|
||||
echo " OBJCOPY $@"
|
||||
|
||||
@@ -80,7 +80,13 @@ segments:
|
||||
- [0x33888, c, libcd1] # libcd block 1 -> src/libcd1.c (vram 0x80043088-0x80046980, 11 objs)
|
||||
- [0x37180, c, gap] # non-libcd gap -> src/gap.c (vram 0x80046980-0x800469CC, stub)
|
||||
- [0x371CC, c, libcd2] # libcd block 2 -> src/libcd2.c (vram 0x800469CC-0x8004787C, 7 objs)
|
||||
- [0x3807C, c, 800b] # -O2 game code -> src/800b.c (vram 0x8004787C-0x800629DC)
|
||||
# PsyQ libgs block 6 (Phase 7 Task #9): 16 contiguous libgs objects (GS_110/119/120/121/122/
|
||||
# 123/127/131/133/134/135/137, PRESET, PRESET3, OBJT, OBJT3) linked in place of stubs — same
|
||||
# mechanism as libcd (psyq_integrate swaps build/src/libgs6.o -> the real objects + NOLOAD data).
|
||||
# The other 5 libgs blocks + the GS_001 gap stay stubs (remaining libgs integration is future).
|
||||
- [0x3807C, c, 800b] # -O2 game code (pre-libgs6) -> src/800b.c (vram 0x8004787C-0x80053AF8)
|
||||
- [0x442F8, c, libgs6] # libgs block 6 (16 objs) -> src/libgs6.c (vram 0x80053AF8-0x80057928)
|
||||
- [0x48128, c, 800b2] # -O2 game code (post-libgs6) -> src/800b2.c (vram 0x80057928-0x800629DC)
|
||||
# Phase 7 (Task 2' / LZSS) — SURGICAL rodata carve for the LZSS switch only.
|
||||
# The rodata island (0x80072A38-0x80074750) interleaves game jtbls, game data
|
||||
# (loadDestPtrTable @0x80072C70 etc.) and library jtbls (PRESET/OBJT/PRNT @0x800737CC+),
|
||||
@@ -90,7 +96,12 @@ segments:
|
||||
# code subseg covering exactly 0x63238-0x6324C migrates jtbl_80072A38 into
|
||||
# asm/nonmatchings/800/LzssDecodeSector.s; everything else stays raw in the tail data.
|
||||
# tools/ld_interleave.py then places .data(front) -> .rodata(LZSS jtbl) -> .data(tail).
|
||||
- [0x531DC, data, 531DC] # front data (vram 0x800629DC-0x80072A38)
|
||||
# front data starts at 0x53198 (vram 0x80062998), NOT 0x531DC: the 68-B data descriptor
|
||||
# table at 0x80062998-0x800629DC (boot.c's __do_global_dtors references D_80062998/D_800629D4)
|
||||
# is data-in-text (cookbook §8). The big-800b era auto-labelled it; the libgs6 resegment made
|
||||
# splat mis-detect it as func_80062998 (shadowing D_80062998). Carving it as the head of the
|
||||
# front-data subseg forces the data labels deterministically. (ld_interleave FRONT_DATA matches.)
|
||||
- [0x53198, data, 53198] # data table + front data (vram 0x80062998-0x80072A38)
|
||||
- [0x63238, .rodata, 800] # LZSS jtbl_80072A38 ONLY (vram 0x80072A38-0x80072A4C) -> migrates into LzssDecodeSector
|
||||
- [0x6324C, data, 6324C] # tail data: rest of island (raw) + globals (vram 0x80072A4C-0x80074800)
|
||||
- [0x65000]
|
||||
|
||||
@@ -483,6 +483,8 @@ GS_002_OBJ_10C = 0x80052CE8; // func
|
||||
GsInitCoord2param = 0x80052E0C; // func
|
||||
GsSetLightMatrix = 0x80052E68; // func
|
||||
GsMulCoord0 = 0x80052F38; // func
|
||||
GsMulCoord2 = 0x80052FCC; // func libgs MATRIX.o, verified via the PsyQ object, declared to stabilize the 800b split (Ghidra-mirror pending, R15)
|
||||
GsMulCoord3 = 0x80053050; // func libgs MATRIX.o, verified via the PsyQ object, declared to stabilize the 800b split (Ghidra-mirror pending, R15)
|
||||
print_matrix = 0x800530D4; // func
|
||||
print_vector = 0x80053144; // func
|
||||
GsMapModelingData = 0x80053290; // func
|
||||
|
||||
@@ -383,6 +383,34 @@ Wiring a library region into `make build` byte-identical (libcd: 58 SDK funcs, f
|
||||
whole thing on `[ -d <elf_dir> ]` — a fresh clone without `tools/psyq/` builds via stubs. Idempotent
|
||||
(`build/psyq/<lib>` in the `.ld` ⇒ re-derive syms only).
|
||||
|
||||
### §9.4 Integrating a SECOND library (libgs block 6 after libcd) — multi-library gotchas
|
||||
Wiring a 2nd `psyq_integrate` call into the same build (libcd, then a libgs block) surfaced bugs the
|
||||
single-library path never hit. All fixed in `tools/psyq_integrate.py`; reuse for libspu/libsnd/…:
|
||||
- **Namespace the NOLOAD section names per library** (`.nl_<objdir-basename>_<i>`, e.g. `.nl_libgs6_0`).
|
||||
The idempotency guard was a global `if ".nl_0" not in ld` — so the 2nd integration saw `.nl_0` (from
|
||||
libcd) and SKIPPED adding its own NOLOAD lines, discarding that library's `.data/.rdata/.bss`
|
||||
(symptom: `'.bss'/'.rdata' referenced … defined in discarded section` for the 2nd lib's objects, §9.1 tell).
|
||||
- **Globally re-sort ALL `.nl_*` NOLOAD lines by vram across libraries** at the end of each integrate.
|
||||
Two separately-sorted groups whose vram ranges interleave make ld's location counter jump back
|
||||
(`warning: dot moved backwards`) — harmless (NOLOAD emits no bytes) but noisy. Pure reordering.
|
||||
- **Pass already-emitted sibling `*_externals.ld` to the trial link.** The 2nd library's trial link sees
|
||||
the FIRST library's real objects (already in the `.ld`) referencing symbols defined only in the first
|
||||
library's externals (e.g. libcd objects call `DMACallback`/`DeliverEvent`); without the sibling syms the
|
||||
trial reports them as spurious `!! UNRESOLVED`. Glob `build/psyq/*_externals.ld` minus the current one.
|
||||
- **A resegment can shift spimdisasm's auto-detected function/data boundaries** in the UNCHANGED regions
|
||||
around the new subseg (shrinking 800b re-merged `func_80052FCC/053050` and re-typed the `D_80062998`
|
||||
data table as a `func_`). Two deterministic fixes, both from the real artifacts (G1): declare the
|
||||
affected REAL functions in `symbols.us.txt` (verify via the PsyQ object's symbol table — these were
|
||||
`GsMulCoord2/3` in MATRIX.o), and carve any trailing data-in-text table as its own `data` subseg (§8;
|
||||
here extend the front-data subseg back to the table start, update `ld_interleave` FRONT_DATA basename).
|
||||
Always regenerate the split `src/*.c` from the fresh extract so stubs match the generated `.s`.
|
||||
- **Block selection is by EXE-placement + disambiguation, not the full library.** A library's objects span
|
||||
several non-contiguous blocks (libgs: 6 blocks + gaps incl. the GS_001 scattered-`.bss` gap, §9.1).
|
||||
`psyq_identify <full-lib-dir> <lo> <hi>` over ONE block's range reports the right objects PLUS byte-
|
||||
identical-`.text` aliases (GS_131≡RVWUNIT, PRESET2≡PRESET3, OBJT2≡OBJT3); keep the one that also
|
||||
matches `.data/.rdata` (`psyq_link_region --verify` confirms per-object). Hardcode the disambiguated
|
||||
object list in a committed regen script (`tools/make_libgs_block6.sh`) — SDK-derived dir, gitignored.
|
||||
|
||||
---
|
||||
|
||||
## §10 Closing the regalloc/scheduling hard tail by hand (LZSS, Phase 7 session F — the full close)
|
||||
|
||||
@@ -45,12 +45,24 @@ entry above + the 5 LOAD-BEARING comments in `src/800.c` + cookbook §10.
|
||||
Method: §3a web-research ground-truthed all levers against the pinned gcc-2.7.2 source; a floor-free `.text`
|
||||
metric (objcopy `--only-section=.text` + `cmp`, bypasses the rodata/jtbl floor) measured the close; the
|
||||
permuter could NOT (score floor + random divergence).
|
||||
- ▶ **NEXT — Task #9: full libgs integration** (+~63–69 SDK funcs; placement + byte-verification DONE in session
|
||||
E, see "libgs placement" + "libgs BYTE-VERIFIED" below). **Required before PhaseEnd per Drew's locked decision.**
|
||||
Remaining = mechanical: resegment splat 800b into the 6 libgs blocks + 5 gap stubs (~13 subsegs), `split_src`,
|
||||
wire `psyq_integrate` for the 6 block stubs (the libcd pattern, §9.3) → byte-identical. Simpler first win =
|
||||
block 6 alone (16 objs incl. PRESET3/OBJT3) → ~35 funcs. **GS_001 excluded** (scattered `.bss` commons, §9.1 hard
|
||||
case). Then Task 6 close-out, Task 7 PhaseEnd.
|
||||
- ✅ **libgs BLOCK 6 integrated byte-identical** (session F, Drew: "block 6 alone first, then the integration").
|
||||
**16 contiguous libgs objects → 26 SDK functions banked** (vram 0x80053AF8–0x80057928), `make clean/extract/
|
||||
build/check` → `143dbb89… BYTE-IDENTICAL`, reproducible; fresh-clone stub fallback verified; zero spurious
|
||||
warnings. Mechanism (the libcd §9.3 pattern): resegment 800b → [800b pre][libgs6][800b2 post]; regenerate the
|
||||
3 split src files; `psyq_integrate libgs6`. **Three new fixes (all in this commit):**
|
||||
- **splat instability the resegment exposed:** shrinking 800b shifted spimdisasm's auto-detected boundaries.
|
||||
Declared `GsMulCoord2/3` (real MATRIX.o funcs, verified via the PsyQ object — R15, Ghidra-mirror pending);
|
||||
and carved the §8 data descriptor table `[0x53198,data,53198]` (boot.c's `D_80062998` was being shadowed by
|
||||
a mis-detected `func_80062998`). ld_interleave FRONT_DATA → `53198.data.o`.
|
||||
- **psyq_integrate multi-library support:** NOLOAD section names namespaced per-library (`.nl_<tag>_*`) so the
|
||||
2nd integration's NOLOAD placement isn't skipped (was discarding OBJT3 .rdata/.bss); trial-link now includes
|
||||
already-emitted sibling `*_externals.ld` (kills the "31 UNRESOLVED" false alarm — they're libcd's externals);
|
||||
NOLOAD lines globally re-sorted by vram across libraries (kills "dot moved backwards").
|
||||
- **reproducibility:** `tools/make_libgs_block6.sh` regenerates the curated 16-object dir (disambiguated:
|
||||
GS_131/137 not RVWUNIT/RVWLUNIT, PRESET3/OBJT3 not PRESET2/OBJT2).
|
||||
- ▶ **NEXT — full libgs integration** (the other 5 blocks: ~37 more SDK funcs; **GS_001 excluded**, scattered
|
||||
`.bss` commons §9.1). Drew pre-approved ("then the integration"). Same pattern, now de-risked (the splat-
|
||||
instability + multi-lib fixes are in). Then Task 6 close-out, Task 7 PhaseEnd (PhaseEnd gated on libgs per Drew).
|
||||
NOTE: Gen1 exit needs ≥3 SESSIONS of green `make check` — **satisfied** (A, B, C, D, E, +F); Tasks 6/7 pending.
|
||||
|
||||
### Island ownership map (session E — the decisive finding)
|
||||
@@ -83,7 +95,7 @@ Patched `tools/psyq_identify.py` to skip data-only objects (no .text, e.g. GLOBA
|
||||
- 2026-06-15 (session C): `make check` → `143dbb89… BYTE-IDENTICAL` ✓ (full `clean && extract && build`, restored after the Task-2′ experiments). **≥3-session bar MET.** This session: fully diagnosed + built the **rodata-island mechanism** (works); root-caused the +24; **proved the PsyQ-library-linking GO** (see below). No new matches (architectural session). Build green at start and after restore.
|
||||
- 2026-06-14 (session D): `make clean && make extract && make build && make check` → `143dbb89… BYTE-IDENTICAL` ✓ — **libcd LINKED INTO THE BUILD** (Drew-approved push-through). The first real PsyQ library is now sourced from real SDK objects in the byte-identical build: **58 libcd SDK functions** linked (not stubs), replacing the libcd-region asm stubs. Idempotent; Makefile-automated; conditional (fresh clone w/o `tools/psyq/` builds via stubs). New committed tooling: `tools/psyq_link.py` (per-object byte-link engine — recovers externals from resolved relocs, weakens psyq-obj-parser's mislabelled `.bss` commons), `psyq_link_lib.py` (whole-lib verify, 18/18 libcd), `psyq_link_region.py` (region link via **NOLOAD** = no data carving), `psyq_integrate.py` (build wiring: splat resegment + .ld swap + external resolution), `split_src_region.py` (H5-safe src split). Cookbook §9.1/9.2/9.3 + R16. **No data carving** (NOLOAD data placement; flat data subseg unchanged). Build green throughout.
|
||||
- 2026-06-15 (session E): `make clean && make extract && make build && make check` → `143dbb89… BYTE-IDENTICAL` ✓ — start-of-session baseline + after the **LZSS surgical rodata carve** (jtbl_80072A38 migrated + sandwiched) + LZSS C **NON_MATCHING-guarded** (default build = stub). **≥3-session bar already MET (A/B/C/D); E is margin.** Findings: lean LZSS path proven (no libgs needed for it); LZSS C structurally matches (111/122) but blocked on a gcc cross-jump-merge hard-tail (see LZSS block above); libgs placement+disambiguation done (bonus, task #9, deferred per Drew until before PhaseEnd).
|
||||
- 2026-06-15 (session F): `make clean && make extract && make build && make check` → `143dbb89… BYTE-IDENTICAL` ✓ — **LZSS MATCHED byte-for-byte** (asm-differ score 0; C compiled in, NON_MATCHING guard dropped). Closed the session-E ~4 regalloc/scheduling residuals via §3a web-research (ground-truthed against pinned gcc-2.7.2 `reorg.c`/`jump.c`/`local-alloc.c`) + a floor-free `.text` object metric: decoupled high-byte var + OR operand order (residual A); `result`-in-predecessor + explicit-`$2`-local-with-early-pin (residual B); no-`default` sltiu-reuse (residual B3); §5a barrier retained. **43 real matches; Gen1-exit LZSS gate SATISFIED.** Cookbook §10 added. Only `src/800.c` changed (label/logic; zero generated/ROM bulk staged). **Tasks #9 (libgs) → 6 → 7 remain** (PhaseEnd gated on libgs per Drew).
|
||||
- 2026-06-15 (session F): `make clean && make extract && make build && make check` → `143dbb89… BYTE-IDENTICAL` ✓ — TWO milestones. **(1) LZSS MATCHED byte-for-byte** (asm-differ score 0; C compiled in, NON_MATCHING guard dropped). Closed the session-E ~4 regalloc/scheduling residuals via §3a web-research (ground-truthed against pinned gcc-2.7.2 `reorg.c`/`jump.c`/`local-alloc.c`) + a floor-free `.text` object metric: decoupled high-byte var + OR operand order (residual A); `result`-in-predecessor + explicit-`$2`-local-with-early-pin (residual B); no-`default` sltiu-reuse (residual B3); §5a barrier retained. **43 real matches; Gen1-exit LZSS gate SATISFIED.** Cookbook §10. **(2) libgs BLOCK 6 integrated** (16 objects / 26 SDK funcs byte-identical; the libcd §9.3 pattern). Fixed a resegment-triggered spimdisasm boundary instability (declared GsMulCoord2/3; carved the §8 data table `[0x53198,data]`) + made psyq_integrate multi-library-safe (per-lib NOLOAD namespacing + global sort; sibling externals in the trial); `tools/make_libgs_block6.sh` for reproducibility; cookbook §9.4. Build byte-identical with OR without the SDK objects; fresh-clone stub fallback verified. Changed: `src/800.c`, `config/{splat.us.exe.yaml,symbols.us.txt}`, `Makefile`, `tools/{psyq_integrate.py,ld_interleave.py,make_libgs_block6.sh}`, `docs/matching-cookbook.md` (zero generated/ROM bulk staged). **Tasks: full libgs → 6 → 7 remain** (PhaseEnd gated on libgs per Drew).
|
||||
|
||||
---
|
||||
|
||||
|
||||
+2
-1218
File diff suppressed because it is too large
Load Diff
+945
@@ -0,0 +1,945 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastG3GL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastG3GNL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastF3GL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastF3GNL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastF4GL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastF4GNL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastG4GL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GsTMDfastG4GNL);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80058890);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", EXT_OBJ_A8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", EXT_OBJ_AC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LoadClut);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LoadClut2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80058A4C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", EXT_OBJ_234);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80058B04);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80058B40);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GetClut);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", DumpTPage);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", DumpClut);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", NextPrim);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", IsEndPrim);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", AddPrim);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", AddPrims);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80058CE4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", TermPrim);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetSemiTrans);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRIM_OBJ_200);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetShadeTex);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRIM_OBJ_228);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyF3);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyFT3);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyG3);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyGT3);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyF4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyFT4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyG4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPolyGT4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetSprt8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetSprt16);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetSprt);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetTile1);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetTile8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetTile16);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetTile);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetLineF2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetLineG2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetLineF3);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetLineG3);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetLineF4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetLineG4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetDrawTPage);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetDrawMove);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetDrawLoad);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MargePrim);
|
||||
|
||||
void PRIM_OBJ_52C(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", DumpDrawEnv);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", DumpDispEnv);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059234);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_11C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_16C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetGraphReverse);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_210);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800594CC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetGraphQueue);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GetGraphType);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GetGraphDebug);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800595FC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059658);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800596F4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059760);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_604);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_640);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059888);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", ClearImage2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800599B8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", StoreImage);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MoveImage);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_8F4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", ClearOTag);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059BFC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", DrawPrim);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059CF4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059D68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", DrawOTagEnv);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GetDrawEnv);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80059FC0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_E34);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_F00);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_F24);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_F58);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_FD8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1034);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_11C0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GetDispEnv);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", GetODE);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetTexWindow);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetDrawArea);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetDrawOffset);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetPriority);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005A600);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SetDrawEnv);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1578);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005A870);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1790);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_18AC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005AB00);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_191C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005AB58);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1964);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_19A4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_19D8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005AC24);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1A30);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1A70);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1AA4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005ACF0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1AF0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005AD34);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1B78);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005ADB8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1BC4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1C28);
|
||||
|
||||
void SYS_OBJ_1C2C(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _status);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005AE80);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _clr);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1D84);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1DC0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1F64);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _dws);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_1FF4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_202C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_21A4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _drs);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_222C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_2264);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_242C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005B684);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _getctl);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _cwb);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005B710);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005B75C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _addque);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005B7B0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005B7E4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_25C8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_26EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_27A8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_283C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005BA90);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005BD7C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_2C6C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005BED8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_2CC4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_2CDC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_2DD8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C020);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C054);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", SYS_OBJ_2F7C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C1C0);
|
||||
|
||||
void SYS_OBJ_3060(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C29C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C2C8);
|
||||
|
||||
void BZERO_OBJ_28(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", getchar);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C324);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C358);
|
||||
|
||||
void MEMSET_OBJ_28(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C388);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PUTCHAR_OBJ_3C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PUTCHAR_OBJ_98);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", toupper);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", tolower);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", rand);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C4CC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C4DC);
|
||||
|
||||
void STRCMP_OBJ_5C(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", strcpy);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C584);
|
||||
|
||||
void STRNCMP_OBJ_78(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C604);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005C640);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_50);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_60);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_88);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_B8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_C8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_D0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_F4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_FC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_178);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_188);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_190);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_1E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_1F0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_1F8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_200);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_21C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_220);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_24C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_264);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_2A0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_2A4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_2D8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_2E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_340);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_348);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_34C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_380);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_38C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_3BC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_3D0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_3D4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_470);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_590);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_634);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_64C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PRNT_OBJ_654);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CCC8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MEMCHR_OBJ_20);
|
||||
|
||||
void MEMCHR_OBJ_48(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CD18);
|
||||
|
||||
void STRLEN_OBJ_28(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CD48);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PUTS_OBJ_2C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CD98);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", longjmp);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CE18);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CE28);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CE38);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CE50);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CE68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CE78);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", CloseEvent);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CE98);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CEA8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CEB8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", DisableEvent);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CED8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CEE8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CEF8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CF08);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CF18);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CF28);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CF38);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CF48);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CF58);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005CF68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D004);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D03C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D06C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D0A0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D0D8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D0F8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D118);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D138);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D184);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D244);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D33C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D410);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D4B8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D4F0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D538);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D588);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D6A0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D6CC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D734);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D8A0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D8B4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D980);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005D9C4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005DBD8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005DCA0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005DE78);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E0AC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E13C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E168);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E178);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E188);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E194);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E1A4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E228);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E374);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E3AC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E480);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E528);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E79C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E804);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E820);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E8E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E980);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005E9D4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EA34);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EA54);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EA68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EA88);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EAA8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EAC8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EAE8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EB28);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005EC00);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005ECC0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005ED4C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F0C8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F228);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F290);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F384);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F394);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F450);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F6CC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F704);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F728);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F75C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005F830);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FA94);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FB70);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FBA8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FBC8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FC68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MemCardEnd);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FCB8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MemCardStop);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FD58);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_15C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_exist_back);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_2E4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_308);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_310);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_330);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_334);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8005FFB4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_3B8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_accept_back);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_404);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_438);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_490);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_4B0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_4DC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_594);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_5BC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_5C0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8006023C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_6DC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_730);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800603BC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80060404);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_840);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_84C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_read_data);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_990);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_994);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80060614);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_A50);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_A5C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_write_data);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_BA0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_BA4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MemCardReadFile);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_C90);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_C9C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_read_file);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_D08);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_D2C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_D6C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_D9C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_DD0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_E5C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_E60);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80060AE0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_F4C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_F58);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_write_file);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_FC4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_FE8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1028);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1058);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_108C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1118);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_111C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80060D9C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1284);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_12E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1374);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061010);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061024);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1460);
|
||||
|
||||
void LIBMCRD_OBJ_14A4(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061114);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_15EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_16B8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MemCardDeleteFile);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_17E0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_189C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061524);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1944);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", MemCardUnformat);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_19F8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061678);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", LIBMCRD_OBJ_1A60);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _callback_handler);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061770);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpIOE);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpError);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpTimeout);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpNewcard);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpIOEx);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpErrorx);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpTimeoutx);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", funcEvSpNewcardx);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8006186C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8006189C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_close);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", _card_stop);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061B58);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061C60);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061D3C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061E18);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061E54);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061E90);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", STRCAT_OBJ_8C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061F38);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061F48);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061F58);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061F68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061F78);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061F88);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", erase);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80061FA8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062144);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062248);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062258);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062268);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062278);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062288);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062298);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800622D0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062328);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062360);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062388);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062394);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800623A4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062434);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800624C4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800624F4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8006252C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800625A4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800625DC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062644);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", InitPAD2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", StartPAD2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", StopPAD2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", PAD_init2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800626C8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800626DC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800626F0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062768);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800627D8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_800627E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", StopCARD2);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062808);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062888);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8006289C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", USERFUNC_OBJ_84);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_8006291C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/800b2", func_80062988);
|
||||
+355
@@ -0,0 +1,355 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80053AF8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80053B20);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", gte_scale_matrix);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80053CF8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80053D44);
|
||||
|
||||
void GS_122_OBJ_DC(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80053E28);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_123_OBJ_78);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_123_OBJ_90);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_123_OBJ_A8);
|
||||
|
||||
void GS_123_OBJ_BC(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80053EEC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80053F6C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80054340);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_131_OBJ_4A4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80054430);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_800544F8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80054514);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_133_OBJ_30);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_133_OBJ_224);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_800547D8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_134_OBJ_30);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_134_OBJ_224);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80054AAC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_135_OBJ_38);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_135_OBJ_22C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GsSetRefView2L);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_137_OBJ_1B8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_137_OBJ_274);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_137_OBJ_39C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_137_OBJ_488);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_137_OBJ_48C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GS_137_OBJ_5EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GsLinkObject5);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", GsPresetObject);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_108);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_14C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_1A8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_1CC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_244);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_2E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_380);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_39C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_3B4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_3C0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_450);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_4B4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_574);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_5C0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_63C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_6E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_744);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_748);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_754);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_7E8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_8C0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_8CC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET_OBJ_8FC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80055D40);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_D0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_13C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_16C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_1A0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_210);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_254);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_2E0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_33C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_39C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_3E0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_424);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_484);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_4B0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_4D8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_4DC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_4FC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_528);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_540);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_550);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_598);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_5E4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_62C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_658);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_678);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_6C4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_6C8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_6D4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_6E4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_738);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_76C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_7F4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_838);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_8D4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_91C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_96C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_9B0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_9F4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_A44);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_A68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_A88);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_A94);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_AA8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_AD4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_AF0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_B28);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_B68);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_BA0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_BCC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_BE0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_C20);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_C24);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_C30);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_C40);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_CB4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_D3C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_D80);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_E1C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_E64);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_EB4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_EF8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_F3C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_F8C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_FB4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_FD8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_FE0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_FF4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_1020);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_103C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_1074);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_10B4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_10EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_1118);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_112C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_116C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_1170);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_117C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", PRESET2_OBJ_118C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80056F18);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_C4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_D0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_D8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_E4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_F8);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_108);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_110);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_118);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_124);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_12C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT_OBJ_13C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", func_80057094);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_E0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_14C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_1C4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_248);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_28C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_358);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_3BC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_468);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_4AC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_558);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_5C0);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_5EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_614);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_618);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_640);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_66C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_69C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_6EC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_740);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_790);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_7BC);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_7E4);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_838);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_83C);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_848);
|
||||
|
||||
INCLUDE_ASM("asm/nonmatchings/libgs6", OBJT2_OBJ_858);
|
||||
@@ -26,7 +26,7 @@ import re, sys
|
||||
|
||||
LD = sys.argv[1] if len(sys.argv) > 1 else "build/us/SLUS_007.26.ld"
|
||||
# object basenames whose (.data) belongs to the front / tail region
|
||||
FRONT_DATA = ("531DC.data.o",)
|
||||
FRONT_DATA = ("53198.data.o",)
|
||||
TAIL_DATA = ("6324C.data.o",)
|
||||
|
||||
src = open(LD).read()
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
# Regenerate the curated libgs block-6 object dir (.run/obj40/libgs_block6) for the Phase-7 Task-#9
|
||||
# integration (Makefile LIBGS6_ELF). SDK-derived + gitignored, like .run/obj40/libcd; the build is
|
||||
# byte-identical WITH or WITHOUT it (the stubs reproduce the same bytes), so this only matters to a
|
||||
# developer who wants the real SDK objects linked. Needs the LIBGS ELF objects from
|
||||
# tools/psyq_build_libs.sh LIBGS (which needs tools/psyq/lib40/LIBGS.LIB from the DTL-S2002 redump).
|
||||
#
|
||||
# Block 6 = the 6th of the 6 contiguous libgs blocks (vram 0x80053AF8-0x80057928), 16 objects. The
|
||||
# list is DISAMBIGUATED (session E): psyq_identify reports 20 candidates because four objects have a
|
||||
# byte-identical-.text alias — keep GS_131 (not RVWUNIT), GS_137 (not RVWLUNIT), PRESET3 (not
|
||||
# PRESET2), OBJT3 (not OBJT2); the losers have a spurious .data/.rdata mismatch and do NOT link
|
||||
# byte-exact. psyq_link_region verifies the chosen 16 are per-object .text byte-identical.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
LIBGS=.run/obj40/libgs
|
||||
DST=.run/obj40/libgs_block6
|
||||
OBJS=(GS_110 GS_119 GS_120 GS_121 GS_122 GS_123 GS_127 GS_131 GS_133 GS_134 GS_135 GS_137 \
|
||||
PRESET PRESET3 OBJT OBJT3)
|
||||
|
||||
[ -d "$LIBGS" ] || tools/psyq_build_libs.sh LIBGS
|
||||
rm -rf "$DST"; mkdir -p "$DST"
|
||||
for o in "${OBJS[@]}"; do
|
||||
[ -f "$LIBGS/$o.o" ] || { echo "ERROR: $LIBGS/$o.o missing (run tools/psyq_build_libs.sh LIBGS)"; exit 1; }
|
||||
cp "$LIBGS/$o.o" "$DST/$o.o"
|
||||
done
|
||||
echo "libgs_block6: ${#OBJS[@]} objects -> $DST"
|
||||
# Optional self-check: verify the region links per-object .text byte-identical.
|
||||
if [ "${1:-}" = "--verify" ]; then
|
||||
.venv/bin/python tools/psyq_link_region.py "$DST" 0x80053AF8 0x80057928
|
||||
fi
|
||||
+27
-8
@@ -18,7 +18,7 @@ object block. Non-library gaps between blocks keep their own stub subsegment unt
|
||||
|
||||
Usage: psyq_integrate.py <elf_dir> <ld_path> <objdir> <syms_ld> <stub1>[,<stub2>,...]
|
||||
"""
|
||||
import os, re, subprocess, sys, tempfile
|
||||
import glob, os, re, subprocess, sys, tempfile
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from psyq_link import recover_sym_addrs, AS, sh, VRAM_BASE, DATA_SECTIONS
|
||||
from psyq_link_region import classify, placement
|
||||
@@ -41,13 +41,17 @@ def contiguous_blocks(order):
|
||||
|
||||
|
||||
def trial_undefined(ld_path, extra_syms=None):
|
||||
"""Full-build link with the rewritten .ld; return the set of undefined symbol names."""
|
||||
"""Full-build link with the rewritten .ld; return the set of undefined symbol names.
|
||||
extra_syms is a list of already-emitted sibling *_externals.ld (from prior library integrations);
|
||||
including them stops THIS library's trial from re-flagging symbols another library already resolved
|
||||
(e.g. integrating libgs6 after libcd: libcd's objects reference DMACallback etc., defined only in
|
||||
libcd_externals.ld — without it the libgs6 trial reports them as spurious 'UNRESOLVED')."""
|
||||
td = tempfile.mkdtemp(dir=".run")
|
||||
elf = os.path.join(td, "trial.elf")
|
||||
cmd = [f"{AS}ld", "-T", ld_path, "-T", "undefined_syms_auto.txt",
|
||||
"-T", "undefined_funcs_auto.txt", "--no-check-sections", "-o", elf]
|
||||
if extra_syms:
|
||||
cmd += ["-T", extra_syms]
|
||||
for es in (extra_syms or []):
|
||||
cmd += ["-T", es]
|
||||
p = subprocess.run(cmd, capture_output=True)
|
||||
err = p.stderr.decode()
|
||||
# a weakened .bss common referenced by another object whose .bss we discarded shows up not as
|
||||
@@ -97,13 +101,26 @@ def integrate(elf_dir, ld_path, objdir, syms_path, stubs):
|
||||
other = re.compile(r"^[ \t]*build/src/" + re.escape(stub)
|
||||
+ r"\.o\(\.(?:rodata|data|bss|sdata|sbss)\);[ \t]*\n", re.M)
|
||||
ld = other.sub("", ld)
|
||||
# NOLOAD data sections, sorted by vram (keeps ld's location counter monotonic), before /DISCARD/
|
||||
# NOLOAD data sections, sorted by vram (keeps ld's location counter monotonic), before /DISCARD/.
|
||||
# Section names are namespaced by the objdir basename (e.g. .nl_libgs6_*) so MULTIPLE integrations
|
||||
# (libcd then libgs6) each add their own NOLOAD sections idempotently — a global `.nl_0` guard would
|
||||
# let the 2nd library's NOLOAD placement be skipped, discarding its .rdata/.bss (the OBJT3 break).
|
||||
tag = os.path.basename(objdir)
|
||||
nol_items = sorted((b, name, S) for name, (_, _) in order
|
||||
for S, b in bases_by[name].items())
|
||||
nol = [f' .nl_{i} 0x{b:08X} (NOLOAD) : {{ "{objdir}/{name}"(.{S[1:]}) }}'
|
||||
nol = [f' .nl_{tag}_{i} 0x{b:08X} (NOLOAD) : {{ "{objdir}/{name}"(.{S[1:]}) }}'
|
||||
for i, (b, name, S) in enumerate(nol_items)]
|
||||
if ".nl_0 " not in ld:
|
||||
if f".nl_{tag}_0 " not in ld:
|
||||
ld = re.sub(r"^([ \t]*/DISCARD/ :)", "\n".join(nol) + r"\n\n\1", ld, count=1, flags=re.M)
|
||||
# Globally re-sort ALL .nl_* NOLOAD lines by vram across libraries. Successive integrations (libcd
|
||||
# then libgs6) otherwise leave two separately-sorted groups whose vram ranges interleave, so ld's
|
||||
# location counter moves backwards (a harmless warning — NOLOAD emits no bytes). Pure reordering.
|
||||
nlre = re.compile(r"^[ \t]*\.nl_\w+ (0x[0-9A-Fa-f]+) \(NOLOAD\) : \{[^}]*\}$", re.M)
|
||||
items = sorted((int(m.group(1), 16), m.group(0).strip()) for m in nlre.finditer(ld))
|
||||
if len(items) > 1:
|
||||
ld = re.sub(r"\n{3,}", "\n\n", nlre.sub("", ld))
|
||||
block = "\n".join(" " + t for _, t in items)
|
||||
ld = re.sub(r"^([ \t]*/DISCARD/ :)", block + "\n\n" + r"\1", ld, count=1, flags=re.M)
|
||||
open(ld_path, "w").write(ld)
|
||||
|
||||
# 3. resolve every symbol the rewritten build ACTUALLY leaves undefined (a full link, so symbols
|
||||
@@ -124,7 +141,9 @@ def integrate(elf_dir, ld_path, objdir, syms_path, stubs):
|
||||
weaken_all = {w for ws in weaken_by.values() for w in ws}
|
||||
externals = {s: recovered[s] for s in weaken_all if s in recovered}
|
||||
missing = []
|
||||
for s in sorted(set(trial_undefined(ld_path)) - set(externals)):
|
||||
siblings = [f for f in glob.glob(os.path.join(os.path.dirname(syms_path) or ".", "*_externals.ld"))
|
||||
if os.path.abspath(f) != os.path.abspath(syms_path)]
|
||||
for s in sorted(set(trial_undefined(ld_path, siblings)) - set(externals)):
|
||||
m = re.fullmatch(r"func_([0-9A-Fa-f]{8})", s)
|
||||
if m:
|
||||
externals[s] = int(m.group(1), 16)
|
||||
|
||||
Reference in New Issue
Block a user