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:
Drew T
2026-06-15 10:48:08 -06:00
parent c894dadb48
commit f91a67a6fe
11 changed files with 1436 additions and 1237 deletions
+14 -1
View File
@@ -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 $@"
+13 -2
View File
@@ -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]
+2
View File
@@ -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
+28
View File
@@ -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)
+19 -7
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+945
View File
@@ -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
View File
@@ -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);
+1 -1
View File
@@ -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()
+30
View File
@@ -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
View File
@@ -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)