A quick glance at WA

A certain Paul B. asked me to look at WA (aka WavArc) and it turned out to be rather interesting. For starters, it’s the only lossless audio archiver and not compressor I’m aware of (the difference is an ability to store multiple files in single archive). Of course there are things like Rar or WinZip with special multimedia compression modes but they’re general-purpose archives with content-specific compression methods and not audio-only archivers.

There are two versions of the executable: 32-bit DOS one and 16-bit DOS one (where all 32-bit integer and FPU operations are emulated). The latter turned out in showcase what Ghidra lacks in supporting old DOS executables, so eventually I tried 32-bit version. Even if I had to load it manually, luckily it turned out to have PE-like header for the loader so it was no problem figuring out segment mapping. After that it was a piece of cake.

Essentially there are three compression modes: store (mode 0), Shorten-like fixed prediction and fixed Rice codes (modes 1-4) and mode 5 with LPC prediction and residue coding using either fixed Rice codes or arithmetic coder (with fixed model transmitted before residues).

Overall, it’s a curious piece of software that was interesting to look at.

2 Responses to “A quick glance at WA”

  1. Paul says:

    I expect wiki entry by end of this month with enough info to write 0CPY and 1DIF mode decoder. The only thing that I got is that it uses LE version of crc32 for checksum, a rather novel idea by that time. I managed to install FreeDOS and there executables work ok, the one with DosBox fail crc checksum, and sharing files with FreeDOS via VirtualBox is pain.

  2. Kostya says:

    0CPY is raw data, the rest of modes have a lot in common. I’ll try to document it but no promises.

    Also have you tried playing with cores in DosBox? Maybe an emulated 386 will work better.