Cruncher Brag-Page


The aim of this page is to communicate the results achieved using my latest cross-cruncher (which has no name...)

FAQ-list:

Will this cruncher be released (in the public domain)?

Probably not. The Exomizer (see below) is an excellent replacement, and it even comes with source code included. Praise the author, Magnus Lind!

What is a cross-cruncher?

A cross-cruncher (in this context) is a program, running on platform A, that compresses data (including executable programs) meant to be decompressed (and executed) on platform B. In this case, platform B would be the Commodore 64, and platform A would be any system with sufficient resources (an ANSI-C-compiler and truckloads of memory and CPU-time required. The latter may be substituted with equivalent amounts of patience).

What (C64) cross-crunchers do you know of?

I think the first one was Pasi Ojala's Pucrunch (see http://www.cs.tut.fi/~albert/Dev/pucrunch/), which is very fast. Pucrunch data decompresses on several Commodore platforms (C128, C64, VIC20, C16/Plus4). The Pucrunch homepage contains an introduction to data compression, as well as a look into the development of a cross-cruncher.

While Pucrunch was being developed -- around 1997 -- I was also working on my first cross-cruncher, which was kinda finished in 1998 (IIRC). My cruncher was slower than Pucrunch, but also created shorter files on average, so I was happy :-)

Then in 2002, the Exomizer (see http://w1.131.telia.com/~u13114991/exo/) came along, completely depantsing earlier cross-crunchers in terms of compression ratio. Exomizer supports the C64 and C16/Plus4.

This lead me to develop a new cruncher from scratch (the old one was very "unclean" and had a huge decrunch header (330 bytes?)). I tried to use a compressed data format that was close to the format used in the Exomizer, just to see if it could be taken any further. It could, if only slightly, and the new cruncher reached a "sorta-finished" stage in April 2003.

What's good about your new cruncher?

Compression ratio is good and the decompression rate is fair. Compresses data $03fc-$ffff (64516 bytes, 254 blocks) (Self-extracting executables).

What's not good about your new cruncher?

It uses gobs of memory and CPU cycles. Self-extracting executables clobber much memory. Only supports the C64. It handles non-compressible data badly. It works, but expands the data quite a bit.

What memory locations are clobbered (self-extracting executables)?

$00fb-$0258, $0334-$03fb, a few other zeropage regs.

Did you know that your decrunch header can be shortened by x bytes?

I know of at least one byte, but feel free to send suggestions.

Test results

Here are a few test results. The results are ranked according to compressed size (provided I've been able to successfully decompress the data). All file sizes include a two-byte load address. Timings were done by hand, using a stopwatch, so they should be taken with a grain of salt. I tried to find the optimal parameters for Pucrunch, but I may not have succeeded. Compressed file sizes for delenn.bin, ivanova.bin and sheridan.bin (three Pucrunch test files) for compressors other than my crunchers and Exomizer are taken from the Exomizer documentation (which includes data taken from other sources).
If you want to download the original files as well as the files crunched with the new cruncher in one .zip file, then it's right here.

zorro_bb.prg

Original size: 31637 bytes.
Description: Remember's crack of Zorro (Data East) including intro. Crunched using byteboiler:

Cruncher
Size
Decompression time
My old cruncher
31918 bytes
2.5 seconds
My new cruncher
33727 bytes
9 seconds
Pucrunch
31875 bytes
Crashes?
Exomizer V1.1.1
33775 bytes
Crashes?

Notes: An obvious example of a situation which my new cruncher (and Exomizer too, since their compressed data format is similar) handles badly: non-compressible data. In this case, data that has already been compressed. I'm surprised that neither Pucrunch nor Exomizer works. This may be an error on my behalf! My old cruncher stores large portions of the file as chunks of uncompressed data, so the size increase is mainly due to the added decompression header.

zorropacked.prg

Original size: 52283 bytes. Remember's crack of Zorro (Data East) including intro. RLE-compressed (Run-Length Encoding, see e.g. the Pucrunch site).

Cruncher Size
Decompression time
My new cruncher
30829 bytes
11.3 seconds
Exomizer V1.1.1
30875 bytes
10.1 seconds
My old cruncher
31415 bytes
20 seconds (!!)
Byteboiler
31637 bytes
12 seconds
Pucrunch
32412 bytes
13 seconds

Notes: My new cruncher creates the shortest file, but is about 1 second slower decompressing (a general trend). The size reduction when compared to the Exomizer output is however modest. The byteboiler compressed data is zorro_bb.prg (see above). The decompression time of the file compressed with my old cruncher is not impressive.

zorrounpacked.prg

Original size: 54105 bytes
Description: Remember's crack of Zorro (Data East) including intro. Not (pre-)compressed.

Cruncher
Size
Decompression time
My new cruncher
30633 bytes
11.3 seconds
Exomizer V1.1.1
30732 bytes
10 seconds
My old cruncher
31181 bytes
20 seconds (!!)
Pucrunch
32192 bytes
13 seconds

Notes: Better size reduction when compared to the Exomizer. 1004 bytes smaller than the Byteboiler+RLE combo used by Remember (125 blocks vs. 121 blocks).

tunnel.prg

Original size: 59394 bytes
Description: Demopart containing lots of unrolled loops.

Cruncher
Size
Decompression time
My new cruncher
21729 bytes
9.2 seconds
Exomizer V1.1.1
22169 bytes
8.2 seconds
My old cruncher
22645 bytes
12 seconds
Pucruncher
24829 bytes
10.5 seconds

Notes: Surprisingly spread out results. 440 bytes difference in the top 2 (88 blocks vs. 86 blocks).

ivanova.bin

Original size: 47105 bytes
Description: BFLI picture + viewer

Cruncher
Size
Decompression time
My new cruncher
9441 bytes
4.3 seconds
Exomizer V1.1.1
9492 bytes
4 seconds
Byteboiler+RLE
9812 bytes
(n/a)
My old cruncher
9818 bytes
8 seconds
Pucrunch
9819 bytes
(n/a)

Notes: Close race here, especially among the older crunchers. Results are clearly split in two groups. I have not compressed this file with Pucrunch or Byteboiler myself, hence I have no decompression time readings.

sheridan.bin

Original size: 47105 bytes
Description: BFLI picture + viewer

Cruncher
Size
Decompression time
My new cruncher
12014 bytes
5 seconds
Exomizer V1.1.1
12152 bytes
4.5 seconds
My old cruncher
12458 bytes
9 seconds
Byteboiler+RLE
12478 bytes
(n/a)
Pucrunch
12501 bytes
(n/a)

Notes: In spite of the 138 byte difference in the top 2, the disk space taken on a stock 1541 will be the same: 48 blocks.

delenn.bin

Original size: 47105 bytes
Description: BFLI picture + viewer

Cruncher
Size
Decompression time
My new cruncher
18534 bytes
8 seconds
Exomizer V1.1.1
18844 bytes
7 seconds
My old cruncher
19065 bytes
13 seconds
Pucrunch
19709 bytes
(n/a)
Byteboiler+RLE
19838 bytes
(n/a)

Notes: 310 byte difference in the top 2 (75 blocks vs. 73 blocks).

Disclaimer

[bettersafethansorry]

IN NO EVENT SHALL STEFAN WOLFF BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS WEBPAGE, EVEN IF STEFAN WOLFF HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

STEFAN WOLFF SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE WEBPAGE PROVIDED IS ON AN "AS IS" BASIS, AND STEFAN WOLFF HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

COPYRIGHT 2003 STEFAN WOLFF
All rights reserved

[/bettersafethansorry]

However, if you feel there's been some mistake, feel free to contact me.

Contact

See http://www.swolff.dk/