# PC Plus demo versus retail engine

The playable demo is a separate build of the retail simulation-engine family, with restrictions in its menus, presentation graph and supplied missions. It retains the retail aircraft setup, sampled-effect definitions, synthesised music drivers and music resources. Its executable also has genuine format and file-handling differences, despite the shared **2.01** configuration label.

[Native comparison evidence](engine-comparison.json) · [Eight-build study](../engine-builds.md) · [Demo content and restrictions](../acquisitions-2026-10-15.md).

## Aircraft and sound setup

The three aircraft preset routines were located from the demo's native dispatcher and executed in a relocated, isolated image. Their ordered values and write sizes match both March retail and September 2.05:

| Aircraft | Native write events compared |
| --- | ---: |
| F-22 | 304 |
| Eurofighter | 291 |
| F-117 | 296 |

All **891 writes** match, with a consistent one-to-one mapping of the 308 destination locations between demo and March. Addresses differ between builds and are retained in the full evidence. This establishes matching initialisation under the isolated test conditions, rather than identical complete flight-update behaviour.

The demo also has the same **103 sampled-effect names, rates and cooldowns**, and the same default high-score roster, as all seven previously studied engines. The numeric voice candidates `25`, `29` and `30` acquire no descriptors in this build either. That does not exclude an unidentified dynamic loading path.

Its 81 synthesised music resources match existing March content. `START.EXE`, including the FM/SCC-1/LAPC-I drivers, differs from March only in date/time strings. There is no separate demo musical arrangement to extract.

## Presentation record format really differs

The demo's native loader reads **17 bytes** for a text-settings record and then obtains the string length from offset **11**. March retail reads **16 bytes**, with the length at offset **10**. The separate root-level executable on the later CDs also uses the 16-byte layout.

The first animation-text loading path shows this directly:

| Build | File offset | Record size | Length-word access |
| --- | --- | ---: | --- |
| PC Plus | `0x74784` | 17 | `movzx eax, word ptr [ecx + 0xb]` at `0x7479f` |
| March retail | `0x74bc4` | 16 | `movzx eax, word ptr [ecx + 0xa]` at `0x74bdf` |
| Shared root-CD executable | `0xaf802` | 16 | `movzx eax, word ptr [ecx + 0xa]` at `0xaf81d` |

The record-size allocation and read arguments, plus their raw instruction bytes, are retained in the JSON. This corroborates the extractor's explicit demo layout; it is not just an adjustment chosen to make the files parse. With the shifted drawing fields decoded correctly, all six companion presentation graphs reproduce March's visual sequence, wording, layout and timing. Opaque settings and saved pointers remain preserved.

Thus the shared version label does not establish engine/resource interchangeability. The sound wrapper `START.EXE` and the resource-reading engine `TFX.DAT` have different compatibility considerations.

## Save-path handling links build families

The demo obtains `getenv("DID")` and incorporates it into several save-related paths, including `%s\tfxsav.%i` and `%s\waytxt\a`. For example, the save-slot enumeration at `0x63692` looks up `DID` at `0x636bc` and formats the prefixed save filename at `0x636cb`. March retail uses relative filenames for these paths.

The same prefixed format strings occur in the November floppy, patched floppy, Inferno preview and shared root-CD engines. They do not occur as referenced format strings in the December, March or September installed CD engines. The JSON records the formats per build.

This is useful evidence of differing packaging/file-handling choices across engine families. It does **not** identify an exact source-code ancestry or date every engine revision from the later sound driver's stamp.

## The configuration program omits CD setup

Every referenced string in the demo configuration program also occurs in March's. Retail alone includes the `SB/CD` option and its MSCDEX/CONFIG.SYS installation strings: `LASTDRIVE=Z`, `DEVICE=%s`, CD-driver discovery and the associated failure messages.

Together with the different configuration executable, this identifies a reduced CD-audio installation/configuration path appropriate to the supplied magazine package. It does not mean the entire engine's MSCDEX playback code has been proved absent. No audio tracks or cover-CD image accompanied the acquisition.

## Why the Gravis helper is larger

The demo's `GUS.COM` is 768 bytes larger. Some of that difference is plainly code generation: the demo performs 32-bit work through pairs of 16-bit registers and helper calls, where retail uses operand-size-prefixed 386 instructions.

One original arithmetic sequence was executed in each driver. Retail uses `MOVSX EAX,AX`, a 32-bit shift and add. The demo uses 16-bit sign extension, the original long-shift helper, and `ADD`/`ADC` on the two halves. Both write:

- A constant dword of `32768`.
- `((signed AX << 10) - 32768) mod 2^32`.

All eight tested inputs, including both signed-16-bit extremes, give identical results: **16 native calls** in total. No DOS calls, sound ports or full driver startup run during this test. The tested state calculation is not assigned a pitch/volume meaning without tracing its callers.

After aligning their data segments, both drivers have 3,904 stored data bytes. Only 54 bytes differ, spanning 31 words; every changed word's old/new values lie within the corresponding code-segment extents, consistent with moved callback addresses. The field types have not all been proved.

These results explain concrete binary differences without establishing complete device or playback equivalence. The demo helper's size alone is not evidence of added instruments or new sound effects, and the observed code generation does not establish the minimum CPU requirement of the complete driver/game.

## Validation and reproduction

The expanded engine study now covers **eight executables**, **24 native aircraft preset calls** and **175,476 native relocation sites** across six early-loader builds. The demo contributes 28,724 checked relocations; the original loader's results match the decoded section image byte for byte.

Of 137 qualifying annotated 2.05 routine signatures, 119 match uniquely in the demo, compared with 133 in March. These are address-masked routine prefixes, not complete function equivalence or a percentage of engine functionality. Unmatched signatures do not prove missing features.

```sh
python3 tools/compare_engine_builds.py
python3 tools/compare_pcplus_engine.py
```

Use the usual analysis environment with Capstone and Unicorn. The source executables remain unchanged. Complete mission playback, undocumented differences outside the mapped routines and real-card Gravis audio remain separate comparisons.
