When the authenticated Waldorf Wave OS 1.700 firmware is loaded, the audio engine installs all 64 factory tables from the original master firmware's own 68000 routines. This applies to both embedded private firmware and locally supplied firmware in the public build. No additional factory-bank download is needed.
The input is the maintainer's local w2sys.bin from Waldorf's original
system archive, 302,768 bytes, SHA256
4282457d9bf7d70da2e2aa4d6a1e69467c178d0d8d8be0a27f524ab8d62e3286.
Only this exact image is accepted by the extractor; absolute addresses
must not be reused with another operating-system revision.
WaveFactoryRom executes routine $011BB8 for selectors 0–63 in an
isolated 68000 address space. It stops at the WDV transfer call $00BD6E
after the firmware has filled the 4,096-byte half-wave workspace at
$104000. Each table includes all 64 positions, including position 60
and the original triangle, square and saw standards at 61–63. The complete
262,144-byte unsigned half-wave result has SHA256
e2d3bdd4d22053058458962df7dc9a7ad08e895190f7b08e7f6b1ef63d1976c3.
The engine expands each half-wave using its complemented reverse half-cycle
and subtracts 128 to obtain signed eight-bit samples.
This fixes differences in the old PPG-based lower bank: table 14's out-of-range references, calculated tables 29/30, position 60, and the standard terminal waves. It also replaces the separately generated private upper fallback, including differences in some calculated tables and their terminal waves. All factory data now comes from one operating-system image.
Automatic PPG discovery and old saved PPG paths cannot replace the original factory bank after this firmware loads. An explicit wavetable-file import remains available for research and is labelled as imported data rather than an original Wave bank. Loading a SET/disk image still supplies its own 64 user tables; those are editable content, not another fixed factory bank.
Native user-table references resolve individual Waves: 0–299 select the
ROM palette at CPU address $042850, and 300–1299 select U000–U999 from
the SET's stored half-wave pool. They do not index positions in the 64
factory tables. The loader retains the complete 300-Wave ROM palette
alongside the factory bank. Interpolation averages unsigned half-waves
before complemented expansion, matching the original routine's rounding.
The core tests execute that routine for INIT and for a user table spanning
R299, U000 and U999, then compare every resulting sample.
Historical SET snapshots containing $1000-based Wave Edit workspace
references retain the previous compatibility mapping to their stored user
Wave pool. That mapping has not been verified against a hardware capture;
it is separate from the verified native ROM/user reference ranges above.
SET imports build all user tables before publishing a new sample bank. A malformed table marker or out-of-range Wave reference resets that individual table to INIT in the audio engine; valid tables continue loading. Sparse records cannot inherit leading samples from a previous disk. Factory tables and source image bytes remain unchanged. Audio voices share one immutable sample snapshot per render block, including across parallel voice cards.
User tuning tables are also validated before use. Records with invalid note or fine-tuning bytes fall back to equal temperament, including when selected through Global tuning. This prevents damaged SET tuning data from changing keyboard pitch across otherwise valid sounds.
The public build without Wave firmware retains the documented PPG/procedural fallback. The old private upper header is also only a pre-firmware fallback. Neither is labelled as a verified original factory bank.
cmake --build build --target DecodeWaveFactoryWavetables
./build/DecodeWaveFactoryWavetables /path/to/w2sys.bin /private/tmp/wave-factory.bin
ctest --test-dir build -R 'WaveCoreTests|WaveFactoryWavetableTests' --output-on-failureThe core tests check every half-wave byte, complemented expansion, rejection of modified firmware, and preservation of user slots. The integration test checks the active bank after fresh startup, factory-set startup, and project recall with a stale PPG import path.
This establishes equality with the factory-table data generated by the original OS 1.700 software. It does not establish equality with every other Wave OS revision, modified user tables, or analogue audio output. ASIC addressing and analogue-path accuracy still require hardware measurements. Firmware and derived bank exports remain private research inputs.