Following Rapido's return to the Atari scene with the 2 releases at Sommarhack, he recently published his latest experiments in packing;
https://github.com/odipar/ST1. Coded by Claude, directed by Rapido.
ST1 is a modified version of the well-known ZX1 packer by Emmanuel Marty, that incorporates a parameterized (fixed) window size for backreferences; which means that not the complete unpacked file requires to be available for depacking. ST1 provides both a packer (java/c# runtimes) and depacker (m68k). General usecase is (de)packing streams, which characteristic is that only a part of the compressed data is used per time; instead of the whole decompressed dataset.
I held a talk at Sommarhack this year about YM with timer playback using compressed streams; it has my interest and Im trying to find a somewhat generalized solution. I use (a slightly modified version of) tat's minymiser (https://github.com/tattlemuss/minymiser) to pack the bytestreams. Afterwards Rapido asked me for the sheets I presented. And a few weeks later (now), it with the release of ST1 there is an alternative choice for (de)compressing bytestreams. ST1 explicitly states it is inspired by minimyser.
Looking at the code; the main difference seems that ST1's context is a single, general purpose bytestream depacker, whereas minymiser is a complete solution interleaving depacking the different YM bytestreams into a single playback frame. So to use ST1 for YM playback, one should implement their own. So I did; 14 YM register streams, each individually packed. Depack 14 frames of complete YM data at init and then 14 bytes per frame for a single stream, cycling through the compressed streams each frame. Needless to say; it works :).
For a quick comparison purposes I ran 2 measurements, using the (timerless) YM3! dumps of Motus and Darwin's Dilemma end tune. On average, ST1 with ~1.08-1.21% cpu (~3.6 scanlines) per frame vs minymisers ~1.9-~2% cpu (~6.1 scanline).
spkr out.
Add comment