11 KiB
11 KiB
Phase 03 — BT 4.10 literal-source manifest (2026-07-18)
Goal: kick off the literal 4.10 source-tree reconstruction (the archival-grade artifact,
distinct from the WinTesla-hosted port) by measuring the mountain: attribute every function in
BTL4OPT.EXE to its original translation unit, with sizes and evidence tiers.
Deliverables: tools/manifest410.py → reference/BT410_SOURCE_MANIFEST.md + .json.
Method (3 linker invariants + DP)
- TU census + link order = the surviving makefiles (
game/original/BT/BT.MAK— 36 bt.lib TUs;BT_L4/BTL4.MAK— 13 btl4.lib TUs +btl4.obj). Toolchain identified from the same files: Borland (BCC/tasm32/tlib/tlink32), Phar Lap TNT target. The tlink32 response file fixes the lib order: startup + btl4.obj, l4stub, stub, munga, mungal4, libdpl, bt.lib, btl4.lib, RTL — so the BT game code is the LAST game region before the Borland RTL. - Code anchors: Fail() call sites carry
d:\tesla_bt\...path strings + LINE numbers; resolved viasection_dump.txt(release build ⇒ only ~225 such anchors image-wide) plus 24 CLASSMAP-verified seed addresses ([T1]). - Data-cluster affinity: each OBJ's literals/vtables/statics are laid out per-section in
the same link order as its code, so a function's
DAT_/PTR_FUN_/s_refs vote for its TU (shared globals — VAs claimed by >1 anchored TU — are blacklisted;.bsshandled as a virtual section above the dumped DATA). The port's@addressannotations in name-matchedgame/reconstructed/*files add soft votes. - Monotone DP: within the BT region the TU-label sequence must be non-decreasing in link order; a dynamic program picks the anchor-respecting monotone labeling that maximizes affinity. Region totals are exact under the sentinels (first BT anchor @49b54c … RTL @4d4b58) even where an individual boundary is soft.
Result (the mountain, measured)
- BT region = 917 functions / ~230 KB code (bt.lib 482 fn / 153 KB; btl4.lib 435 fn / 76 KB), out of 6267 functions in the image (the rest = engine libs whose source SURVIVES, + RTL).
- Validation: every DP extent with independent ground truth matched — btl4gaug
4c2f94-4c6798(CLASSMAP's own TU extent), btl4mssn starting exactly at the BTL4Mission ctor4d2be0, heat4ad760-4afbe0, mechmppr/powersub/gyro/torso seeds all interior. Link-order monotonicity holds with zero violations. - 17 TUs remain un-localized (folded into a neighbor's range — no anchor evidence): mechdmg
was recovered, but gnrator, ppc, mislanch, gauss, btteam, btreg, btcnsl, bttool, btl4mode,
btl4galm, btl4arnd etc. show
—; 8 of those survive as full.cppso localization is optional. The rest need one anchor each (a ctor identified in CLASSMAP terms).
New leads / corrections found en route
- The
.TCPfiles are TEST-CLASS implementation files (the debug-build TestClass / self-test bodies — cf. L4APP.TCP's L4TestApplication, EMITTER.TCP's "Testing Emitter"). They still carry SOME real shipped-code bodies (HEAT.TCP: HeatableSubsystem:: ResetToInitialState), so they're minor partial survivors, not template glue and not full implementations. 7 TUs have them: heat, gnrator, emitter, projweap, ammobin, projtile, missile. [T1] - Searchlight/ThermalSight code sits in the
hud.cppTU span (4b77bc-4b8a8ccontains @4b841c/@4b85f0/@4b860c), NOT sensor.cpp as the port'ssearchlight.cppfilename implies. [T3 — DP boundary, no direct anchor; verify before relying on it] - Negative sweep:
TeslaRel410/sda4(dev-drive dump) andTeslaRel410/CODEcontain NO BT game.cpp(sda4 = pod runtime drive: DPL3 tools, BRIEF, game installs). The PVCS install on sda4 gives the archive naming convention:.CPV/.HPV/.TCV= the grep targets for any future drive dump.TeslaRel410/BORLAND/is an empty placeholder — the period toolchain is NOT yet archived (needed for any byte-match verification).
Next steps (the literal-tree project)
- Localize the 9 missing-and-unlocalized TUs (one CLASSMAP-grade anchor each).
- ✅ Tree home CREATED (2026-07-18):
TeslaRel410/restoration/source410/(README with provenance rules; reconstructions NEVER mix intoCODE/; per-file.NOTES.mdsidecars). - Per-TU re-hosting passes:
game/reconstructed/<tu>.cpp(WinTesla APIs, port accommodations) →source410/<tu>.CPP(1995 MUNGA APIs, binary-true layouts, house style from the surviving BTMSSN.CPP/PPC.CPP + RP analogs), assert lines at their recorded positions. ✅ PILOT DONE:source410/BT_L4/BTL4APP.CPP— 12/12 functions, every decomp constant resolved to a named 1995 expression (ApplicationID BTL4=1 — and an unreleased BTW4 enum slot!; ModeInitial=0x50421; AddModeMask inlines byte-exact; IOType 2/4; ModeAlwaysActive=-1; video 5-tuple from RPL4VID/RENDERER.HPP), and the binary'sBTL4APP.CPP:400Fail lands on line 400 EXACTLY. Sidecar: BTL4APP.NOTES.md. Port fallout: BT411's btl4app.cpp maps the video-renderer ctor's two globals to the WRONG positions (rate/complexity, not interest args) — benign in the port (its own renderer signature differs) but back-port the correction when touching btl4vid. - ✅ TOOLCHAIN IN HAND (2026-07-19). User supplied BC++ 4.5 and 4.52 installs; 4.52
chosen by BYTE-MATCH (archive
CODE/RP/CW32.LIB≡ 4.52's, ≠ 4.5's) and moved toTeslaRel410/BORLAND/BC45/(4.5 CD disposed per user). BCC32/TLINK32/TLIB/MAKE run NATIVELY on Win11; hello-world compiled+linked+ran.CODE/BT/OPT.MAK= the shipped binary's exact flag recipe (bcc32, NOT bcc32i;-5 -a4 ... -O2set;DEBUG_STREAM=cout; PCHbtopt.csm); extender = Borland PowerPack DPMI32 (corrects the old "Phar Lap TNT" label). Compile bootstrap of ORIGINAL BTL4MODE.CPP: parses deep with include orderCODE/BT/* over CODE/RP/*-DNO_PRECOMPILED_HEADERS, stops at missingvdata.hpp(nowhere in the 1995 archive; the drifted WinTeslaVDATA.hlives in BT412/engine — back-dating basis). Remaining toolchain gap: TASM32 (separate product; JOYSTICK.ASM only). Route A is CLOSED (2026-07-19, user: Nick holds nothing further) — this route is the only route, which upgrades the engine-closure backfill to the critical path.
- ✅ FIRST 1995 COMPILES (2026-07-19).
source410/MUNGA/VDATA.HPPback-dated from BT412's driftedVDATA.h(guard/include restyle; ClassID numbering decomp-verified: 0xF/0x45/0xBB9; the survivingVDATA.CPPconfirms the method set) — and with that ONE backfill the ORIGINAL BTL4MODE.CPP and BTMSSN.CPP compile CLEAN under BC4.52 + the authentic OPT.MAK flags (include order CODE/BT over CODE/RP over source410/MUNGA,-DNO_PRECOMPILED_HEADERS). Per-TU compile is now the standard verification. Next closure gaps mapped by probe: the SOS include dir (path-only),rotation.hpp/audrend.hpp(BT412 back-dates),btplayer.hpp/mech.hpp(1995-form reconstructions). Recipe recorded in source410/README. - ✅ CLOSURE CAMPAIGN round 1 (2026-07-19 cont.): 3 original TUs green (BTMSSN, BTL4MODE,
BTL4ARND — btl4arnd.obj 9,814 b). Tooling:
source410/backdate.py(mechanical WinTesla→1995 header back-dating: guards, include rewrite, std::/true/false/bool de-modernizing) +source410/compile410.sh --sweep(the one-command verification scoreboard). Backfills: VDATA/ROTATION/VECTOR2D/AUDREND compile-proven, APP parses, LAMP pending gaugrend (BACKFILLS.NOTES.md). KEY METHOD FINDING: the period compiler is the drift detector — BC4.52 rejected the OpenAL-eraReleaseSourceSetvirtual in AUDREND (zero 1995 references; removed = vtable now matches period truth) and every post-1994 construct in the donors. Remaining original-TU blockers, all named: btcnsl.hpp, btscnrl.hpp, btplayer.hpp, emitter.hpp, gaugrend.hpp, btl4mppr.hpp (the last also gates the BTL4APP pilot's compile). - ✅ Round 2 (2026-07-19 cont.): 6 of 10 surviving originals GREEN (+BTCNSL, BTSCNRL, BTTEAM via reconstructed BTCNSL.HPP/BTSCNRL.HPP; +GAUGREND/GAUGE back-dates closed the BTTOOL gauge chain). DISCOVERY: the BT→console wire message IDs, recovered from the binary's ctors [T1]: Killed=9 (@4c18f4), Damaged=10 (@4c1944, 7-field payload order matches the surviving CPP), ScoreUpdate=13 (@4c191c), DeathWithoutHonor=15 (@4c198c); TeamScore ctor is NOT in the image — ID guessed 12 [T4], verify live. This answers the TeslaSuite console-port spec's open item ("confirm BT's in-match message set") — cross-pollinate when next touching that repo. BTTEAM compiling against the new header = a surviving consumer validating the TeamScore ctor signature. Everything left (BTREG, GAUSS, PPC, BTTOOL, the BTL4APP pilot) gates on ONE work package: the mech-family headers in 1995 form (mech/mechsub/mechmppr/btl4mppr/emitter/btplayer .hpp) — layout-sensitive, reconstruct against CLASSMAP/decomp offsets.
- Round-3 STRATEGIC FINDING (2026-07-19): MECH.HPP is the capstone, not a prerequisite.
Full read of the port's mech.hpp (1,223 lines): it is a hybrid — 1995 skeleton + Recon
proxies (ReconChain/BTVal/ReconSeq...) + port-only members (MP mirrors, audio-fidelity
rings, collision-economy guards) + members relocated for the 2007 engine — and regions of
the 0x854-byte binary object are still UNMAPPED (owned by the not-yet-reconstructed
mech2-4 slices). The literal MECH.HPP must GROW with the mech TU reconstructions (staged
interface +
reserved[]filler, tightened per TU), exactly as the original grew. Dependent headers ship with their TUs; the corrected order is in source410/README. BTREG.CPP scope note: it includes the ENTIRE game-header world (mech/projtile/missile/ btplayer/btteam/btmssn + engine director/hostmgr/app) — it is the closure's natural FINAL integration test: BTREG.CPP compiling green = the header-reconstruction milestone itself. - ✅✅ THE MILESTONE (2026-07-19, same session): THE WHOLE 4.10 TREE COMPILES — 11/11. All 10 surviving originals + the reconstructed BTL4APP.CPP pilot build clean under BC4.52 with the authentic OPT flags (btl4app.obj 18.5KB; PCH gate retired — bt.hpp/mungal4.hpp pull their full include sets; DPL SDK roots on the include line). Route: layout_probe pinned the base boundary (JointedMover 0x328; 3/3 alloc-size validation) → 13 STAGED headers ([T3] reserved[]-parked layouts, interfaces PROVEN by the surviving consumers: PPC/GAUSS pin Emitter, BTREG pins BTPlayer::MakeMessage 10-arg + BTCameraDirector, BTTOOL pins the 7 Mech::Create* statics, the pilot pins the mapper ctors) → compile-fix loop to green. En route: BTPlayer__MakeMessage = Player's 8-arg base + roleName/teamName CStrings [T1 via BTREG]; DPLRenderer lives in l4video.hpp; ApplicationManager::GetFrameRate() = the audio-rate source (APPMGR.HPP:22). Evidence ledger: source410/BT/STAGED-HEADERS.NOTES.md. REMAINING for a LINKABLE btl4opt: the ~40 missing TU BODIES (917 fn manifest) — the header skeleton they grow into now exists and compiles.