feat(phase-8): link libmcrd byte-identical (T5) — 2 objs / +104 fns

- splat: split 800c into [800c][libmcrd1][800c2][libmcrd2]; LIBMCRD.o (2186 ins,
  the 55 LIBMCRD_OBJ_* + _card_* memcard I/O) and USERFUNC.o (68 ins) are 2
  non-adjacent blocks split by game/libc2/libapi/libcard code (800c2)
- Makefile LIBMCRD_* + gated psyq_integrate libmcrd1,libmcrd2 + -T
- region byte-verified: 2/2 objects, 27 .bss commons all recovered (not scattered)
- src/800c.c trimmed (0 real-C moved); src/{libmcrd1,800c2,libmcrd2}.c committed
- dual byte-gate PASS: 143dbb89 with and without the libmcrd objects
- LINKED 424 -> 528; REAL still 43; byte-identical 29.29%
- NB: these are the libmcrd SDK objects; the game SaveLoadRoutine/Q#5 is Phase 12
This commit is contained in:
Drew T
2026-06-15 18:23:59 -06:00
parent ade73cce62
commit 0d6380c845
8 changed files with 325 additions and 303 deletions
+13 -1
View File
@@ -189,6 +189,13 @@ LIBGPU_ELF := .run/obj40/libgpu_used
LIBGPU_OBJDIR := build/psyq/libgpu
LIBGPU_SYMS := build/psyq/libgpu_externals.ld
# libmcrd (Phase 8): 2 objects (LIBMCRD.o = the 55 LIBMCRD_OBJ_* + _card_* memcard I/O; USERFUNC.o), 2
# non-adjacent blocks. Clean (.bss commons all recovered). NB: these are the libmcrd SDK objects; the
# GAME's SaveLoadRoutine/Q#5 save logic is a separate Phase-12 item.
LIBMCRD_ELF := .run/obj40/libmcrd
LIBMCRD_OBJDIR := build/psyq/libmcrd
LIBMCRD_SYMS := build/psyq/libmcrd_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.
@@ -279,7 +286,12 @@ $(OUT): $(OBJS) $(LD_SCRIPT)
else
echo " (no $(LIBGPU_ELF) — libgpu region stays asm stubs; run tools/psyq_build_libs.sh LIBGPU + curate libgpu_used)"
fi
SYMS=""; [ -f "$(LIBCD_SYMS)" ] && SYMS="-T $(LIBCD_SYMS)"; [ -f "$(LIBGS_SYMS)" ] && SYMS="$$SYMS -T $(LIBGS_SYMS)"; [ -f "$(LIBETC_SYMS)" ] && SYMS="$$SYMS -T $(LIBETC_SYMS)"; [ -f "$(LIBGPU_SYMS)" ] && SYMS="$$SYMS -T $(LIBGPU_SYMS)"
if [ -d "$(LIBMCRD_ELF)" ]; then
$(PYTHON) tools/psyq_integrate.py $(LIBMCRD_ELF) $(LD_SCRIPT) $(LIBMCRD_OBJDIR) $(LIBMCRD_SYMS) libmcrd1,libmcrd2
else
echo " (no $(LIBMCRD_ELF) — libmcrd region stays asm stubs; run tools/psyq_build_libs.sh LIBMCRD)"
fi
SYMS=""; [ -f "$(LIBCD_SYMS)" ] && SYMS="-T $(LIBCD_SYMS)"; [ -f "$(LIBGS_SYMS)" ] && SYMS="$$SYMS -T $(LIBGS_SYMS)"; [ -f "$(LIBETC_SYMS)" ] && SYMS="$$SYMS -T $(LIBETC_SYMS)"; [ -f "$(LIBGPU_SYMS)" ] && SYMS="$$SYMS -T $(LIBGPU_SYMS)"; [ -f "$(LIBMCRD_SYMS)" ] && SYMS="$$SYMS -T $(LIBMCRD_SYMS)"
echo " LD $(ELF)"
$(LD) -T $(LD_SCRIPT) -T $(UNDEF_SYMS) -T $(UNDEF_FUNCS) $$SYMS --no-check-sections -Map $(MAPFILE) -o $(ELF)
echo " OBJCOPY $@"
+7 -1
View File
@@ -109,7 +109,13 @@ segments:
# commons across 0x80078xxx/0x800c5xxx, so no single NOLOAD base reproduces it). SYS stays a stub
# in 800c. Curated dir .run/obj40/libgpu_used = {EXT,PRIM}.
- [0x49090, c, libgpu] # libgpu block -> src/libgpu.c (vram 0x80058890-0x80059234, EXT+PRIM)
- [0x49A34, c, 800c] # -O2 game code (incl. excluded libgpu SYS stub) -> src/800c.c (vram 0x80059234-0x80062998)
- [0x49A34, c, 800c] # -O2 game code (incl. excluded libgpu SYS stub) -> src/800c.c (vram 0x80059234-0x8005FC68)
# PsyQ libmcrd (Phase 8): 2 objects — LIBMCRD.o (2186 ins; the 55 LIBMCRD_OBJ_* + _card_* memcard
# I/O) and USERFUNC.o (68 ins, at the very end), 2 non-adjacent blocks split by game/libc2/libapi/
# libcard code (800c2). psyq_integrate libmcrd1,libmcrd2. (The GAME save logic / Q#5 is Phase 12.)
- [0x50468, c, libmcrd1] # libmcrd block 1: LIBMCRD.o -> src/libmcrd1.c (vram 0x8005FC68-0x80061E90)
- [0x52690, c, 800c2] # -O2 game code (mid) -> src/800c2.c (vram 0x80061E90-0x80062888)
- [0x53088, c, libmcrd2] # libmcrd block 2: USERFUNC.o -> src/libmcrd2.c (vram 0x80062888-0x80062998)
# 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+),
+4 -4
View File
@@ -1,17 +1,17 @@
# BFM matching progress (generated by tools/progress.py — authoritative)
REAL substantive matches : 43 <- the Gen1-exit >=25 bar counts THIS
LINKED real PsyQ objects : 424 <- byte-identical via linked SDK objects
LINKED real PsyQ objects : 528 <- byte-identical via linked SDK objects
NON_MATCHING (near-miss) : 7
splat-auto empty no-ops : 42
INCLUDE_ASM stubs : 1577
INCLUDE_ASM stubs : 1473
data blobs (excluded) : 2
----------------------------------------
matchable functions : 2093
REAL / matchable : 43 / 2093 = 2.05%
byte-identical/ matchable: 509 / 2093 = 24.32% (REAL+LINKED+empties)
byte-identical/ matchable: 613 / 2093 = 29.29% (REAL+LINKED+empties)
LINKED subsegs: libcd1 libcd2 libetc libgpu libgs1 libgs2 libgs3 libgs4 libgs5 libgs6 (424 fns)
LINKED subsegs: libcd1 libcd2 libetc libgpu libgs1 libgs2 libgs3 libgs4 libgs5 libgs6 libmcrd1 libmcrd2 (528 fns)
REAL matches: CdQueueBusy CdReadRequest DebugMenuHandler GameModeDispatch LoaderResetReadState LzssDecodeSector ResourceGetCdLoc func_80012AB0 func_800168B4 func_80018F20 func_80019018 func_80019198 func_80019378 func_80019388 func_80019398 func_800193A8 func_8001AA78 func_8001AA88 func_8001B22C func_8001B374 func_8001B384 func_8001B85C func_8001BE20 func_8001BFA0 func_8001BFE8 func_8001D0E8 func_80029254 func_80029264 func_80029504 func_80029514 func_8002953C func_8002954C func_8002957C func_8002958C func_80029FD4 func_8002A26C func_8002A27C func_8002A4B8 func_8002A4C8 func_8002A728 func_8002A738 func_8002A998 func_8002A9A8
NON_MATCHING: CdReadSectorReadyCB CdReadStateMachine LoaderInitFileTable ResourceLoadStateMachine StreamLoadStateMachine func_80015A74 func_80016714
+3 -2
View File
@@ -20,14 +20,15 @@
- [~] **T3…N** — Per-library integrate, ascending difficulty (resegment splat → trim src → Makefile gated psyq_integrate + `-T` syms → dual byte-gate → report → commit). *(xHigh; Max-escalate if a lib fights)* **→ report #2 after first lib lands; #3 when last placed lib done**
- [x] **libetc** (5 objs, 35 fns) — clean single block at 800-tail; 5/5 byte-verified; dual byte-gate PASS; LINKED 340→375. **(progress report #2)**
- [x] **libgpu** (EXT+PRIM, 2 objs / +49 fns; curated `libgpu_used`) — dual byte-gate PASS; LINKED 375→424. **SYS.o EXCLUDED** = scattered-`.bss` §9.1 (GS_001 class), documented in worklist, stays a stub in 800c. Split 800b2→[800b2][libgpu][800c]. First hard case handled.
- [ ] libmcrd · libc2 · libcard · libapi · libspu · libsnd · libgte
- [x] **libmcrd** (2 objs / +104 fns) — clean (27 `.bss` commons all recovered); 2 non-adjacent blocks (libmcrd1/libmcrd2) splitting 800c; dual byte-gate PASS; LINKED 424→528.
- [ ] libc2 · libcard · libapi · libspu · libsnd · libgte
- [ ] **T(N+1)** — Deferred-library hard-case documentation (honest stub deferrals, structured comments, worklist notes). *(xHigh)*
- [ ] **T(N+2)** — Game-code harvest (read cookbook+§5.4 first; sig-refresh → difficulty.md regen → cheap non-jtbl game leaves; bank, don't exhaust). *(xHigh; optional breadth)* **→ report #4**
- [ ] **T(N+3)** — Headers (`include/psyq/*.h`) + cookbook §9 flywheel (R16) + SETUP/memory-map refresh (R21). *(xHigh)*
- [ ] **T(N+4)** — Phase 8 close: verify checkboxes (P7) → demo milestone → Drew confirms (gate 2) → PhaseEnd_Phase8.md + archive worklog (R19) + commit + Ghidra push (R20) + plain-English recap (R18) + hard stop (P8). *(Tier-1 Max)*
## Current task pointer
**T5 — Integrate libmcrd** (2 objs: LIBMCRD.o 2186 ins / 55 LIBMCRD_OBJ_* + USERFUNC.o; 2 blocks in 800b2/800c). libgpu validated the curated-`_used` + exclusion path.
**T6 — Integrate libc2** (17 objs: BZERO/MEMCPY/STRCMP/PRINTF/PRNT… 0x8005C2C8 run + STRCAT outlier; 800c. PRNT.o has internal jtbl — verify NOLOAD .rodata).
## Progress log
- **2026-06-15 (session A, planning):** Read PROJECT_CONTEXT + all PhaseEnds + effort-map + gen2-roadmap. Byte-grounded the Phase-8 scope (R14): harvest is ~90% library objects; progress.py counts linked libs as stubs; machinery ready (20 `.LIB`s, 14 `.a`, 14 built `.run/obj40/*` dirs). Two owner decisions taken (LINKED category; full ceiling). Plan approved (gate 1). **T0 done** — this file written.
-295
View File
@@ -531,298 +531,3 @@ INCLUDE_ASM("asm/nonmatchings/800c", func_8005FB70);
INCLUDE_ASM("asm/nonmatchings/800c", func_8005FBA8);
INCLUDE_ASM("asm/nonmatchings/800c", func_8005FBC8);
INCLUDE_ASM("asm/nonmatchings/800c", func_8005FC68);
INCLUDE_ASM("asm/nonmatchings/800c", MemCardEnd);
INCLUDE_ASM("asm/nonmatchings/800c", func_8005FCB8);
INCLUDE_ASM("asm/nonmatchings/800c", MemCardStop);
INCLUDE_ASM("asm/nonmatchings/800c", func_8005FD58);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_15C);
INCLUDE_ASM("asm/nonmatchings/800c", _card_exist_back);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_2E4);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_308);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_310);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_330);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_334);
INCLUDE_ASM("asm/nonmatchings/800c", func_8005FFB4);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_3B8);
INCLUDE_ASM("asm/nonmatchings/800c", _card_accept_back);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_404);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_438);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_490);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_4B0);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_4DC);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_594);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_5BC);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_5C0);
INCLUDE_ASM("asm/nonmatchings/800c", func_8006023C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_6DC);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_730);
INCLUDE_ASM("asm/nonmatchings/800c", func_800603BC);
INCLUDE_ASM("asm/nonmatchings/800c", func_80060404);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_840);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_84C);
INCLUDE_ASM("asm/nonmatchings/800c", _card_read_data);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_990);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_994);
INCLUDE_ASM("asm/nonmatchings/800c", func_80060614);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_A50);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_A5C);
INCLUDE_ASM("asm/nonmatchings/800c", _card_write_data);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_BA0);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_BA4);
INCLUDE_ASM("asm/nonmatchings/800c", MemCardReadFile);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_C90);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_C9C);
INCLUDE_ASM("asm/nonmatchings/800c", _card_read_file);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_D08);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_D2C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_D6C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_D9C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_DD0);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_E5C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_E60);
INCLUDE_ASM("asm/nonmatchings/800c", func_80060AE0);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_F4C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_F58);
INCLUDE_ASM("asm/nonmatchings/800c", _card_write_file);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_FC4);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_FE8);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1028);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1058);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_108C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1118);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_111C);
INCLUDE_ASM("asm/nonmatchings/800c", func_80060D9C);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1284);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_12E8);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1374);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061010);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061024);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1460);
void LIBMCRD_OBJ_14A4(void) {
}
INCLUDE_ASM("asm/nonmatchings/800c", func_80061114);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_15EC);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_16B8);
INCLUDE_ASM("asm/nonmatchings/800c", MemCardDeleteFile);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_17E0);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_189C);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061524);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1944);
INCLUDE_ASM("asm/nonmatchings/800c", MemCardUnformat);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_19F8);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061678);
INCLUDE_ASM("asm/nonmatchings/800c", LIBMCRD_OBJ_1A60);
INCLUDE_ASM("asm/nonmatchings/800c", _callback_handler);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061770);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpIOE);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpError);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpTimeout);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpNewcard);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpIOEx);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpErrorx);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpTimeoutx);
INCLUDE_ASM("asm/nonmatchings/800c", funcEvSpNewcardx);
INCLUDE_ASM("asm/nonmatchings/800c", func_8006186C);
INCLUDE_ASM("asm/nonmatchings/800c", func_8006189C);
INCLUDE_ASM("asm/nonmatchings/800c", _card_close);
INCLUDE_ASM("asm/nonmatchings/800c", _card_stop);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061B58);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061C60);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061D3C);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061E18);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061E54);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061E90);
INCLUDE_ASM("asm/nonmatchings/800c", STRCAT_OBJ_8C);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061F38);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061F48);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061F58);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061F68);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061F78);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061F88);
INCLUDE_ASM("asm/nonmatchings/800c", erase);
INCLUDE_ASM("asm/nonmatchings/800c", func_80061FA8);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062144);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062248);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062258);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062268);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062278);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062288);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062298);
INCLUDE_ASM("asm/nonmatchings/800c", func_800622D0);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062328);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062360);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062388);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062394);
INCLUDE_ASM("asm/nonmatchings/800c", func_800623A4);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062434);
INCLUDE_ASM("asm/nonmatchings/800c", func_800624C4);
INCLUDE_ASM("asm/nonmatchings/800c", func_800624F4);
INCLUDE_ASM("asm/nonmatchings/800c", func_8006252C);
INCLUDE_ASM("asm/nonmatchings/800c", func_800625A4);
INCLUDE_ASM("asm/nonmatchings/800c", func_800625DC);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062644);
INCLUDE_ASM("asm/nonmatchings/800c", InitPAD2);
INCLUDE_ASM("asm/nonmatchings/800c", StartPAD2);
INCLUDE_ASM("asm/nonmatchings/800c", StopPAD2);
INCLUDE_ASM("asm/nonmatchings/800c", PAD_init2);
INCLUDE_ASM("asm/nonmatchings/800c", func_800626C8);
INCLUDE_ASM("asm/nonmatchings/800c", func_800626DC);
INCLUDE_ASM("asm/nonmatchings/800c", func_800626F0);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062768);
INCLUDE_ASM("asm/nonmatchings/800c", func_800627D8);
INCLUDE_ASM("asm/nonmatchings/800c", func_800627E8);
INCLUDE_ASM("asm/nonmatchings/800c", StopCARD2);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062808);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062888);
INCLUDE_ASM("asm/nonmatchings/800c", func_8006289C);
INCLUDE_ASM("asm/nonmatchings/800c", USERFUNC_OBJ_84);
INCLUDE_ASM("asm/nonmatchings/800c", func_8006291C);
INCLUDE_ASM("asm/nonmatchings/800c", func_80062988);
+85
View File
@@ -0,0 +1,85 @@
#include "common.h"
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061E90);
INCLUDE_ASM("asm/nonmatchings/800c2", STRCAT_OBJ_8C);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061F38);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061F48);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061F58);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061F68);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061F78);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061F88);
INCLUDE_ASM("asm/nonmatchings/800c2", erase);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80061FA8);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062144);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062248);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062258);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062268);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062278);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062288);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062298);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800622D0);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062328);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062360);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062388);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062394);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800623A4);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062434);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800624C4);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800624F4);
INCLUDE_ASM("asm/nonmatchings/800c2", func_8006252C);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800625A4);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800625DC);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062644);
INCLUDE_ASM("asm/nonmatchings/800c2", InitPAD2);
INCLUDE_ASM("asm/nonmatchings/800c2", StartPAD2);
INCLUDE_ASM("asm/nonmatchings/800c2", StopPAD2);
INCLUDE_ASM("asm/nonmatchings/800c2", PAD_init2);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800626C8);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800626DC);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800626F0);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062768);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800627D8);
INCLUDE_ASM("asm/nonmatchings/800c2", func_800627E8);
INCLUDE_ASM("asm/nonmatchings/800c2", StopCARD2);
INCLUDE_ASM("asm/nonmatchings/800c2", func_80062808);
+202
View File
@@ -0,0 +1,202 @@
#include "common.h"
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_8005FC68);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", MemCardEnd);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_8005FCB8);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", MemCardStop);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_8005FD58);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_15C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_exist_back);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_2E4);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_308);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_310);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_330);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_334);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_8005FFB4);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_3B8);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_accept_back);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_404);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_438);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_490);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_4B0);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_4DC);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_594);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_5BC);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_5C0);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_8006023C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_6DC);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_730);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_800603BC);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80060404);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_840);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_84C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_read_data);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_990);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_994);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80060614);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_A50);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_A5C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_write_data);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_BA0);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_BA4);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", MemCardReadFile);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_C90);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_C9C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_read_file);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_D08);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_D2C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_D6C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_D9C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_DD0);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_E5C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_E60);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80060AE0);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_F4C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_F58);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_write_file);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_FC4);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_FE8);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1028);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1058);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_108C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1118);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_111C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80060D9C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1284);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_12E8);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1374);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061010);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061024);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1460);
void LIBMCRD_OBJ_14A4(void) {
}
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061114);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_15EC);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_16B8);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", MemCardDeleteFile);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_17E0);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_189C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061524);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1944);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", MemCardUnformat);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_19F8);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061678);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", LIBMCRD_OBJ_1A60);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _callback_handler);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061770);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpIOE);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpError);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpTimeout);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpNewcard);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpIOEx);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpErrorx);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpTimeoutx);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", funcEvSpNewcardx);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_8006186C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_8006189C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_close);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", _card_stop);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061B58);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061C60);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061D3C);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061E18);
INCLUDE_ASM("asm/nonmatchings/libmcrd1", func_80061E54);
+11
View File
@@ -0,0 +1,11 @@
#include "common.h"
INCLUDE_ASM("asm/nonmatchings/libmcrd2", func_80062888);
INCLUDE_ASM("asm/nonmatchings/libmcrd2", func_8006289C);
INCLUDE_ASM("asm/nonmatchings/libmcrd2", USERFUNC_OBJ_84);
INCLUDE_ASM("asm/nonmatchings/libmcrd2", func_8006291C);
INCLUDE_ASM("asm/nonmatchings/libmcrd2", func_80062988);