feat(reconstruction): complete binary-backed C recovery

Replace the partial mechanics transcriptions with a separate, readable C11
reconstruction of the complete Win16 image while preserving the original raw
Ghidra export as immutable evidence. Cover all ordinary and overlapping entry
points, Borland runtime behavior, Win16 imports, segmented data, callbacks,
resources, indirect control flow, physics, rendering, persistence, and
startup/shutdown lifecycles.

Add deterministic extraction and audit tooling plus address-linked ledgers for
functions, imports, DGROUP ranges and objects, relocations, resources, and
callbacks. The final gate records zero raw, partial, restored, unknown,
blocked, or unclassified required units. Keep the semantic-fidelity boundary
explicit: the portable C is not claimed to reproduce a byte-identical Borland
NE build.

Add strict focused harnesses for every reconstructed C unit, exact resource
round-trip checks, and a 16-bit Borland Real48 reference probe. No Rust source
or Cargo metadata is changed in this phase.

Test Plan:
- `bash original/tools/test_reconstructed_c.sh` -- passed
- `bash original/tools/probe_real48_reference.sh` -- passed bit-for-bit
- `python3 original/tools/audit_reconstruction.py --require-complete` -- passed
- `git diff --cached --check` -- passed
- `git diff HEAD -- '*.rs' Cargo.toml Cargo.lock` -- empty
This commit is contained in:
2026-08-23 16:41:17 +02:00
parent aef404c834
commit 8b99e9607c
253 changed files with 79031 additions and 51 deletions
+80
View File
@@ -0,0 +1,80 @@
record name_or_start end bytes detail
block Code1 1000:fe39 65082 r=true,w=false,x=true,initialized=true
block Code2 1008:30c4 12485 r=true,w=false,x=true,initialized=true
block Code3 1010:05eb 1516 r=true,w=false,x=true,initialized=true
block Code4 1018:1f79 8058 r=true,w=false,x=true,initialized=true
block Code5 1020:1722 5923 r=true,w=false,x=true,initialized=true
block Data6 1028:4d39 19770 r=true,w=true,x=false,initialized=true
block Rsrc0 1030:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc1 1038:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc2 1040:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc3 1048:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc4 1050:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc5 1058:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc6 1060:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc7 1068:15ff 5632 r=true,w=false,x=false,initialized=true
block Rsrc8 1071:7eff 98048 r=true,w=false,x=false,initialized=true
block Rsrc9 1078:52ff 21248 r=true,w=false,x=false,initialized=true
block Rsrc10 1080:52ff 21248 r=true,w=false,x=false,initialized=true
block Rsrc11 1088:52ff 21248 r=true,w=false,x=false,initialized=true
block Rsrc12 1090:52ff 21248 r=true,w=false,x=false,initialized=true
block Rsrc13 1098:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc14 10a0:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc15 10a8:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc16 10b0:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc17 10b8:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc18 10c0:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc19 10c8:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc20 10d0:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc21 10d8:10ff 4352 r=true,w=false,x=false,initialized=true
block Rsrc22 10e4:10ff 266496 r=true,w=false,x=false,initialized=true
block Rsrc23 10e8:0fff 4096 r=true,w=false,x=false,initialized=true
block Rsrc24 10f1:a6ff 108288 r=true,w=false,x=false,initialized=true
block Rsrc25 10f8:0cff 3328 r=true,w=false,x=false,initialized=true
block Rsrc26 1104:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc27 110c:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc28 1114:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc29 111c:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc30 1124:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc31 112c:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc32 1134:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc33 113c:7eff 294656 r=true,w=false,x=false,initialized=true
block Rsrc34 1140:02ff 768 r=true,w=false,x=false,initialized=true
block Rsrc35 1148:18ff 6400 r=true,w=false,x=false,initialized=true
block Rsrc36 1150:11ff 4608 r=true,w=false,x=false,initialized=true
block Rsrc37 1158:1dff 7680 r=true,w=false,x=false,initialized=true
block Rsrc38 1160:0bff 3072 r=true,w=false,x=false,initialized=true
block Rsrc39 1168:76ff 30464 r=true,w=false,x=false,initialized=true
block Rsrc40 1170:98ff 39168 r=true,w=false,x=false,initialized=true
block Rsrc41 1178:1aff 6912 r=true,w=false,x=false,initialized=true
block Rsrc42 1180:01ff 512 r=true,w=false,x=false,initialized=true
block Rsrc43 1188:b5ff 46592 r=true,w=false,x=false,initialized=true
block Rsrc44 1190:1fff 8192 r=true,w=false,x=false,initialized=true
block Rsrc45 1198:0dff 3584 r=true,w=false,x=false,initialized=true
block Rsrc46 11a0:88ff 35072 r=true,w=false,x=false,initialized=true
block Rsrc47 11a8:14ff 5376 r=true,w=false,x=false,initialized=true
block Rsrc48 11b0:75ff 30208 r=true,w=false,x=false,initialized=true
block Rsrc49 11b8:0cff 3328 r=true,w=false,x=false,initialized=true
block Rsrc50 11c0:56ff 22272 r=true,w=false,x=false,initialized=true
block Rsrc51 11c8:00ff 256 r=true,w=false,x=false,initialized=true
block Rsrc52 11d0:00ff 256 r=true,w=false,x=false,initialized=true
block Rsrc53 11d8:34ff 13568 r=true,w=false,x=false,initialized=true
block Rsrc54 11e0:02ff 768 r=true,w=false,x=false,initialized=true
block Rsrc55 11e8:00ff 256 r=true,w=false,x=false,initialized=true
block Rsrc56 11f0:01ff 512 r=true,w=false,x=false,initialized=true
block Rsrc57 11f8:00ff 256 r=true,w=false,x=false,initialized=true
block Rsrc58 1200:00ff 256 r=true,w=false,x=false,initialized=true
block Rsrc59 1208:00ff 256 r=true,w=false,x=false,initialized=true
block Rsrc60 1210:01ff 512 r=true,w=false,x=false,initialized=true
block Rsrc61 1218:01ff 512 r=true,w=false,x=false,initialized=true
block Rsrc62 1220:00ff 256 r=true,w=false,x=false,initialized=true
block EXTERNAL 1228:048f 1168 r=true,w=false,x=false,initialized=false
summary executable-bytes 93064 n/a
summary disassembled-bytes 92780 99.69% of executable
summary defined-data-bytes 282 0.30% of executable
summary explained-code-or-data-bytes 93062 100.00% of executable
summary function-body-bytes 92745 99.66% of executable
summary internal-functions 391 n/a
summary undefined-executable-bytes 2 n/a
undefined-range 1020:0666 1020:0666 1 not-in-listing
undefined-range 1020:0dea 1020:0dea 1 not-in-listing
1 record name_or_start end bytes detail
2 block Code1 1000:fe39 65082 r=true,w=false,x=true,initialized=true
3 block Code2 1008:30c4 12485 r=true,w=false,x=true,initialized=true
4 block Code3 1010:05eb 1516 r=true,w=false,x=true,initialized=true
5 block Code4 1018:1f79 8058 r=true,w=false,x=true,initialized=true
6 block Code5 1020:1722 5923 r=true,w=false,x=true,initialized=true
7 block Data6 1028:4d39 19770 r=true,w=true,x=false,initialized=true
8 block Rsrc0 1030:15ff 5632 r=true,w=false,x=false,initialized=true
9 block Rsrc1 1038:15ff 5632 r=true,w=false,x=false,initialized=true
10 block Rsrc2 1040:15ff 5632 r=true,w=false,x=false,initialized=true
11 block Rsrc3 1048:15ff 5632 r=true,w=false,x=false,initialized=true
12 block Rsrc4 1050:15ff 5632 r=true,w=false,x=false,initialized=true
13 block Rsrc5 1058:15ff 5632 r=true,w=false,x=false,initialized=true
14 block Rsrc6 1060:15ff 5632 r=true,w=false,x=false,initialized=true
15 block Rsrc7 1068:15ff 5632 r=true,w=false,x=false,initialized=true
16 block Rsrc8 1071:7eff 98048 r=true,w=false,x=false,initialized=true
17 block Rsrc9 1078:52ff 21248 r=true,w=false,x=false,initialized=true
18 block Rsrc10 1080:52ff 21248 r=true,w=false,x=false,initialized=true
19 block Rsrc11 1088:52ff 21248 r=true,w=false,x=false,initialized=true
20 block Rsrc12 1090:52ff 21248 r=true,w=false,x=false,initialized=true
21 block Rsrc13 1098:10ff 4352 r=true,w=false,x=false,initialized=true
22 block Rsrc14 10a0:10ff 4352 r=true,w=false,x=false,initialized=true
23 block Rsrc15 10a8:10ff 4352 r=true,w=false,x=false,initialized=true
24 block Rsrc16 10b0:10ff 4352 r=true,w=false,x=false,initialized=true
25 block Rsrc17 10b8:10ff 4352 r=true,w=false,x=false,initialized=true
26 block Rsrc18 10c0:10ff 4352 r=true,w=false,x=false,initialized=true
27 block Rsrc19 10c8:10ff 4352 r=true,w=false,x=false,initialized=true
28 block Rsrc20 10d0:10ff 4352 r=true,w=false,x=false,initialized=true
29 block Rsrc21 10d8:10ff 4352 r=true,w=false,x=false,initialized=true
30 block Rsrc22 10e4:10ff 266496 r=true,w=false,x=false,initialized=true
31 block Rsrc23 10e8:0fff 4096 r=true,w=false,x=false,initialized=true
32 block Rsrc24 10f1:a6ff 108288 r=true,w=false,x=false,initialized=true
33 block Rsrc25 10f8:0cff 3328 r=true,w=false,x=false,initialized=true
34 block Rsrc26 1104:7eff 294656 r=true,w=false,x=false,initialized=true
35 block Rsrc27 110c:7eff 294656 r=true,w=false,x=false,initialized=true
36 block Rsrc28 1114:7eff 294656 r=true,w=false,x=false,initialized=true
37 block Rsrc29 111c:7eff 294656 r=true,w=false,x=false,initialized=true
38 block Rsrc30 1124:7eff 294656 r=true,w=false,x=false,initialized=true
39 block Rsrc31 112c:7eff 294656 r=true,w=false,x=false,initialized=true
40 block Rsrc32 1134:7eff 294656 r=true,w=false,x=false,initialized=true
41 block Rsrc33 113c:7eff 294656 r=true,w=false,x=false,initialized=true
42 block Rsrc34 1140:02ff 768 r=true,w=false,x=false,initialized=true
43 block Rsrc35 1148:18ff 6400 r=true,w=false,x=false,initialized=true
44 block Rsrc36 1150:11ff 4608 r=true,w=false,x=false,initialized=true
45 block Rsrc37 1158:1dff 7680 r=true,w=false,x=false,initialized=true
46 block Rsrc38 1160:0bff 3072 r=true,w=false,x=false,initialized=true
47 block Rsrc39 1168:76ff 30464 r=true,w=false,x=false,initialized=true
48 block Rsrc40 1170:98ff 39168 r=true,w=false,x=false,initialized=true
49 block Rsrc41 1178:1aff 6912 r=true,w=false,x=false,initialized=true
50 block Rsrc42 1180:01ff 512 r=true,w=false,x=false,initialized=true
51 block Rsrc43 1188:b5ff 46592 r=true,w=false,x=false,initialized=true
52 block Rsrc44 1190:1fff 8192 r=true,w=false,x=false,initialized=true
53 block Rsrc45 1198:0dff 3584 r=true,w=false,x=false,initialized=true
54 block Rsrc46 11a0:88ff 35072 r=true,w=false,x=false,initialized=true
55 block Rsrc47 11a8:14ff 5376 r=true,w=false,x=false,initialized=true
56 block Rsrc48 11b0:75ff 30208 r=true,w=false,x=false,initialized=true
57 block Rsrc49 11b8:0cff 3328 r=true,w=false,x=false,initialized=true
58 block Rsrc50 11c0:56ff 22272 r=true,w=false,x=false,initialized=true
59 block Rsrc51 11c8:00ff 256 r=true,w=false,x=false,initialized=true
60 block Rsrc52 11d0:00ff 256 r=true,w=false,x=false,initialized=true
61 block Rsrc53 11d8:34ff 13568 r=true,w=false,x=false,initialized=true
62 block Rsrc54 11e0:02ff 768 r=true,w=false,x=false,initialized=true
63 block Rsrc55 11e8:00ff 256 r=true,w=false,x=false,initialized=true
64 block Rsrc56 11f0:01ff 512 r=true,w=false,x=false,initialized=true
65 block Rsrc57 11f8:00ff 256 r=true,w=false,x=false,initialized=true
66 block Rsrc58 1200:00ff 256 r=true,w=false,x=false,initialized=true
67 block Rsrc59 1208:00ff 256 r=true,w=false,x=false,initialized=true
68 block Rsrc60 1210:01ff 512 r=true,w=false,x=false,initialized=true
69 block Rsrc61 1218:01ff 512 r=true,w=false,x=false,initialized=true
70 block Rsrc62 1220:00ff 256 r=true,w=false,x=false,initialized=true
71 block EXTERNAL 1228:048f 1168 r=true,w=false,x=false,initialized=false
72 summary executable-bytes 93064 n/a
73 summary disassembled-bytes 92780 99.69% of executable
74 summary defined-data-bytes 282 0.30% of executable
75 summary explained-code-or-data-bytes 93062 100.00% of executable
76 summary function-body-bytes 92745 99.66% of executable
77 summary internal-functions 391 n/a
78 summary undefined-executable-bytes 2 n/a
79 undefined-range 1020:0666 1020:0666 1 not-in-listing
80 undefined-range 1020:0dea 1020:0dea 1 not-in-listing