From 0d6380c845bd83eded11d9ddcd9c02ec4c794347 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Mon, 15 Jun 2026 18:23:59 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-8):=20link=20libmcrd=20byte-identica?= =?UTF-8?q?l=20(T5)=20=E2=80=94=202=20objs=20/=20+104=20fns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- Makefile | 14 +- config/splat.us.exe.yaml | 8 +- docs/progress.md | 8 +- phase-ends/CURRENT_PHASE.md | 5 +- src/800c.c | 295 ------------------------------------ src/800c2.c | 85 +++++++++++ src/libmcrd1.c | 202 ++++++++++++++++++++++++ src/libmcrd2.c | 11 ++ 8 files changed, 325 insertions(+), 303 deletions(-) create mode 100644 src/800c2.c create mode 100644 src/libmcrd1.c create mode 100644 src/libmcrd2.c diff --git a/Makefile b/Makefile index eb6ba05024..a33cf10b3f 100644 --- a/Makefile +++ b/Makefile @@ -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 $@" diff --git a/config/splat.us.exe.yaml b/config/splat.us.exe.yaml index 89857786d1..ea5266f391 100644 --- a/config/splat.us.exe.yaml +++ b/config/splat.us.exe.yaml @@ -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+), diff --git a/docs/progress.md b/docs/progress.md index 1f034edc22..d18ff5d672 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -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 diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index ab7edb2430..3321626f98 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -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. diff --git a/src/800c.c b/src/800c.c index 3438ff5513..972d7b8123 100644 --- a/src/800c.c +++ b/src/800c.c @@ -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); diff --git a/src/800c2.c b/src/800c2.c new file mode 100644 index 0000000000..823fb1f895 --- /dev/null +++ b/src/800c2.c @@ -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); diff --git a/src/libmcrd1.c b/src/libmcrd1.c new file mode 100644 index 0000000000..4c5182bd60 --- /dev/null +++ b/src/libmcrd1.c @@ -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); diff --git a/src/libmcrd2.c b/src/libmcrd2.c new file mode 100644 index 0000000000..903edc5af4 --- /dev/null +++ b/src/libmcrd2.c @@ -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);