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.
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.
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.
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).
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).
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.
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.
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/