Vendored 86Box EMU8000 core (GPL-2, emu8k.cpp/.h + shim) plus vweawe.cpp: two cards at the production addresses (0x620/0x640 register triplets), rear-card DSP/mixer stub at 0x240, synthesis on an autonomous render thread with direct winmm output so sustained voices ride through emulation-thread stalls (RIO staging retries) like the real silicon did. WC sample-counter interpolation between render chunks keeps HMI SOS busy-waits fast. VWE_AWE32/VWE_AWE_ROM/VWE_AWE_RAM_KB/VWE_AWE_SHIFT/ VWE_AWE_LEAD_MS/VWE_AWE_DUMP/VWE_AWE_LOG env knobs. emulator/roms: the AWE32 1MGM GM ROM dumped from our own pod card (SF2) plus the reconstructed raw image the emulated EMU8000 loads. The HMI driver refuses the AUDIO*.RES SoundFont upload without it (banks declare irom=1MGM) -- that was the root cause of the first silent runs; full debug chain in SOUND-NOTES.md. Repo serves the pod-owner community only. .gitignore: drop the ROM excludes and un-ignore ALPHA_1/ and sda4/ (committed separately). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# VPX + AWE32 devices — DOSBox-X integration
|
|
|
|
Our original source for the emulated pod hardware. Kept here under
|
|
version control because the DOSBox-X source tree itself
|
|
(`emulator/src/`, ~490 MB) is git-ignored.
|
|
|
|
- **`vpxlog.cpp`** — the Division VPX link adapter (INMOS C012 at I/O base
|
|
`0x150`), grown through Phase 3: iserver handshake responder, FIFO scene
|
|
decode, GL Division renderer (gallery shading model), VDB video-head
|
|
splitter windows.
|
|
- **`vweawe.cpp`** — the dual-AWE32 sound device: two vendored EMU8000
|
|
cores at 0x620/0x640 (+0x400/+0x800 triplets), rear-card DSP/mixer stub
|
|
at 0x240, autonomous render thread with direct winmm output. Needs the
|
|
GM ROM (`emulator/roms/awe32.raw`) via `VWE_AWE_ROM` or SoundFont
|
|
uploads are refused (banks declare `irom=1MGM`). See
|
|
`emulator/SOUND-NOTES.md`.
|
|
- **`emu8k.cpp` / `emu8k.h` / `emu8k_shim.h`** — EMU8000 wavetable core
|
|
vendored from 86Box (GPL-2.0-or-later, same license as DOSBox-X), with
|
|
a minimal shim; local changes are listed in the emu8k.cpp header.
|
|
|
|
## Applying to a DOSBox-X source checkout
|
|
|
|
Tested against DOSBox-X `v2026.06.02`, MSYS2 mingw64.
|
|
|
|
1. Copy the devices in:
|
|
```
|
|
cp emulator/vpx-device/vpxlog.cpp emulator/src/src/hardware/
|
|
cp emulator/vpx-device/emu8k.cpp emulator/src/src/hardware/
|
|
cp emulator/vpx-device/emu8k.h emulator/src/src/hardware/
|
|
cp emulator/vpx-device/emu8k_shim.h emulator/src/src/hardware/
|
|
cp emulator/vpx-device/vweawe.cpp emulator/src/src/hardware/
|
|
```
|
|
2. Add them to the hardware build — in `src/src/hardware/Makefile.am`, append
|
|
`vpxlog.cpp emu8k.cpp vweawe.cpp` to `libhardware_a_SOURCES` (we inserted
|
|
them after `glide.cpp`; if you edit the generated `Makefile`/`Makefile.in`
|
|
by hand instead of re-running automake, also mirror the `$(OBJEXT)` list,
|
|
the `.Po` depfile list, and the depfile include markers — grep for how
|
|
`vpxlog` appears and copy the pattern).
|
|
3. Call the inits — in `src/src/gui/sdlmain.cpp`, declare `void VPXLOG_Init();`
|
|
and `void VWEAWE_Init();` next to the other `*_Init()` prototypes; call
|
|
`VPXLOG_Init();` right after `GLIDE_Init();` and `VWEAWE_Init();` right
|
|
after `SBLASTER_Init();` (it needs the mixer initialized).
|
|
4. Build:
|
|
```
|
|
cd emulator/src
|
|
./build-mingw-sdl2 --enable-debug=heavy
|
|
```
|
|
Output: `src/src/dosbox-x.exe`.
|
|
|
|
## Running
|
|
|
|
```
|
|
set VPXLOG=C:\VWE\TeslaRel410\emulator\vpxlog.txt
|
|
emulator\src\src\dosbox-x.exe -conf emulator\capture.conf
|
|
python emulator\analyze_capture.py
|
|
```
|
|
|
|
With `VPXLOG` unset the device is inert and the build behaves like stock
|
|
DOSBox-X.
|