New compression method: Exomizer 2

Pagina 1/4
| 2 | 3 | 4

Door Metalbrain

Expert (67)

afbeelding van Metalbrain

08-12-2007, 16:00

Hi all, I'm new here! I'm from the Spectrum scene, but I think this is good news for all Z80 coders.

After I finished working on optimizing aPLib's decoder, I was told that pucrunch did compress better, and while looking for info about pucrunch (it turns out that sometimes aPLib wins, but most times pucrunch is a bit better), I found another packer that clearly beats both on compression: exomizer 2.

http://hem.bredband.net/magli143/exo/

Since there was no Z80 decompressor, I made it, and also made an optimizer to take the output and remove two unneeded bits and rearrange the bit organization, so depackers can be optimized a bit more.

The depackers sizes are between 169-190 bytes, and they also need space to generate a table of 156 bytes, but that table can be discarded after the decompression is done, so if you place it in a buffer it shouldn't take any extra memory. Speed is slow, because the algorithm is complex.

http://www.speccy.org/metalbrain/exo_v3.zip

The normal versions of the depackers use the output from exomizer, in raw mode forwards, so you produce the data file with command line:

exomizer raw -o output input

The optimized versions also require to use my optimizer, so the command lines would be:

exomizer raw -o temporal input
exoopt temporal output

As for the difference between deexo.asm and deexo_simple.asm, the simple version requires the table to be aligned in a 256 boundary, and doesn't handle literal sequences (which are rare, and you may also force exomizer not to generate them using the parameter -c).

Aangemeld of registreer om reacties te plaatsen

Van Manuel

Ascended (19678)

afbeelding van Manuel

08-12-2007, 16:26

Have you compared it to pletter and/or bitbuster?

Van Metalbrain

Expert (67)

afbeelding van Metalbrain

08-12-2007, 17:17

Have you compared it to pletter and/or bitbuster?

AFAIK those are faster but already have worse compression than aPLib or pucrunch.

Using the benchmarks from MegaLZ ( located at http://lvd.nm.ru/MegaLZ/ ), I get:

123609 bytes for bitbuster_extreme0.1
119475 bytes for pletter 0.4a (buffersize 3 = 8320 bytes)
118341 bytes for MegaLZ
114715 bytes for aPLib
113927 bytes for pucrunch
110121 bytes for exomizer 2 (no literal sequences)
110116 bytes for exomizer 2 (no literal sequences,optimized)
110089 bytes for exomizer 2
110085 bytes for exomizer 2 (optimized)

Try it yourself!

Van Edwin

Paragon (1182)

afbeelding van Edwin

08-12-2007, 17:30

I tested it on some of my game data and I got somewhere around 10% off the size that pletter 0.5a gives me. Pretty decent. Haven't run any cpu time tests yet because currently that would be my main concern. Is there any data available as to how much longer decompression takes compared to bitbuster/pletter?

Van ARTRAG

Enlighted (6977)

afbeelding van ARTRAG

08-12-2007, 23:39

Metalbrain can you test it against platter 0.5a ?

Van Metalbrain

Expert (67)

afbeelding van Metalbrain

09-12-2007, 00:15

117791 bytes for pletter 0.5a

still far from aPLib, pucrunch or exomizer 2

Van [D-Tail]

Ascended (8263)

afbeelding van [D-Tail]

09-12-2007, 20:32

This may be a stupid question, but how do the packers/unpackers compare speed-wise?

Van Sonic_aka_T

Enlighted (4130)

afbeelding van Sonic_aka_T

09-12-2007, 20:48

Hardly a stupid question, speed is very often a bigger factor than compression ratio...

Van cax

Prophet (3741)

afbeelding van cax

09-12-2007, 21:45

I compared it with RNC PRO-PACK, and RNC was better for code and especially for text, but for the rest of tests it was almost the same, if not worse a little.

Van Metalbrain

Expert (67)

afbeelding van Metalbrain

10-12-2007, 19:39

Well, I get:

115547 bytes for RNC PRO-PACK

Van Metalbrain

Expert (67)

afbeelding van Metalbrain

17-01-2012, 18:32

Thread necromancy! Evil

Antonio Villena has optimized the depackers, so they're now a bit smaller and also faster:
http://www.speccy.org/metalbrain/exo_v4.zip

Pagina 1/4
| 2 | 3 | 4