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
1.8 KiB
1.8 KiB
| 1 | address | containing_function | status | reconstructed_name | evidence | notes |
|---|---|---|---|---|---|---|
| 2 | 1020:04a0 | 1020:049f | verified | borland_assign_text_short | bytes 1020:049f-04a1 decode as MOV DX,0xd233 at 049f and XOR DX,DX at 04a0; common body 04a2-04fb | Overlapping Borland runtime entry for Pascal ShortString names; containing ledger row accounts for the shared executable body. |
| 3 | 1020:06b4 | 1020:06ab | verified | borland_create_generic_file | bytes 1020:06ab-06b9 select AH=3d/global access and empty-name handle 0 at 06ab or AH=3c/attributes 0 and empty-name handle 1 at 06b4; common body 06ba-070f | Overlapping Open/Create generic-file entry pair. |
| 4 | 1020:0765 | 1020:0760 | verified | borland_file_write_record | bytes 1020:0760-0769 select AH=3f/error 0x64 at 0760 or AH=40/error 0x65 at 0765; common body 076a-0795 | Overlapping single-record Read/Write entry pair. |
| 5 | 1020:079b | 1020:0796 | verified | borland_file_block_write | bytes 1020:0796-079f select BL=3f/error 0x64 at 0796 or BL=40/error 0x65 at 079b; common body 07a0-07fd | Overlapping BlockRead/BlockWrite entry pair. |
| 6 | 1020:100f | 1020:1017 | verified | borland_real48_truncate_to_i32 | bytes 1020:100f-1016 set CH=0, call conversion core 0f77, and RETF on success; bytes 101f-1024 are the Runtime Error 207 tail shared with Round entry 1017 | disassembleOnly evidence was previously structural; readable Trunc semantics, overflow candidate, and shared error tail are now explicitly represented and DOSBox-differentially tested. |
| 7 | 1020:1130 | 1020:111d | verified | borland_real48_sin | bytes 1020:111d-112f form the Cos-only pi/2-x prelude; 1130-1190 are a complete shared Sin body ending RETF; table 1191-11ba contains -1/15! through -1/3! | Exact modulo-2pi, quadrant folding, odd polynomial, small-argument bypass, half-cycle sign, and independent Sin entry are represented and differentially tested against original-offset bytes. |