system/pucrunch: Added (Hybrid Compressor).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2017-09-07 08:07:36 +07:00 committed by Willy Sudiarto Raharjo
parent a95c301d2b
commit 5528773b70
8 changed files with 880 additions and 0 deletions

12
system/pucrunch/README Normal file
View file

@ -0,0 +1,12 @@
pucrunch (compressor optimized for low-resource decompression)
Pucrunch is a Hybrid LZ77 and RLE compressor, uses an Elias Gamma Code
for lengths, mixture of Gamma Code and linear for LZ77 offset, and
ranked RLE bytes indexed by the same Gamma Code. Uses no extra memory
in decompression.
The compressor can compress/decompress files for C64 (-c64), VIC20
(-c20), C16/+4 (-c16), or for standalone decompressor (-c0).
Assembly sources for example decompressors (for Commodore 64 and Nintendo
GameBoy) are included.

View file

@ -0,0 +1,178 @@
.\" Man page generated from reStructuredText.
.
.TH CBMCOMBINE 1 "2017-09-06" "20081122" "SlackBuilds.org"
.SH NAME
cbmcombine \- combines Commodore 8-bit executables
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.\" RST source for cbmcombine(1) man page. Convert with:
.
.\" rst2man.py cbmcombine.rst > cbmcombine.1
.
.\" rst2man.py comes from the SBo development/docutils package.
.
.\" converting from pod:
.
.\" s/B<\([^>]*\)>/**\1**/g
.
.\" s/I<\([^>]*\)>/*\1*/g
.
.SH SYNOPSIS
.sp
cbmcombine [\fIinput\-file[,load\-address]\fP] [[[\fIinput\-file[,load\-address]\fP]] ...]
.SH DESCRIPTION
.sp
cbmcombine combines several Commodore executables into one. All Commodore
8\-bit machines (64, 128, VIC\-20, Plus4, 16, PET, etc) are supported,
since they all use the same executable file format.
.sp
Files are read in the order listed on the command line. The combined
executable is written to standard output. Each file\(aqs load address can
be forced by adding a comma and the new address (in decimal, or in hex
with 0x prefix), in which case the load address in the file will be read
and ignored.
.sp
If any of the input files overlap the same area of memory, the overlap
area will contain only data from the file(s) listed later in the command
line. The output file\(aqs load address will be that of the input file with
the lowest address, and it will extend to the highest address contained
in any of the files. If there are gaps in the address space (areas where
no file was loaded), the output will contain 0x00 bytes to fill the gap.
.sp
Load address overrides do NOT relocate code.
.sp
There are no switches (options) for cbmcombine.
.SH EXAMPLES
.sp
The examples use 1024 byte input files, named after their load addresses
in hex:
.sp
x1000.prg Load address \fB$1000\fP, last address \fB$13FF\fP
.sp
x1400.prg Load address \fB$1400\fP, last address \fB$17FF\fP
.sp
x1600.prg Load address \fB$1600\fP, last address \fB$19FF\fP
.sp
cmbcombine x1000.prg x1400.prg > new.prg
.INDENT 0.0
.INDENT 3.5
new.prg will have a load address of 0x1000, and contain data from
0x1000 to 0x17ff. Since x1000.prg ends at address 0x13ff, there is
no overlap. If the order of arguments were swapped, the result would
be the same.
.UNINDENT
.UNINDENT
.sp
cmbcombine x1000.prg x1600.prg > new.prg
.INDENT 0.0
.INDENT 3.5
new.prg\(aqs load address will be \fB$1000\fP, and its end address will be \fB$19FF\fP\&.
From \fB$1400\fP to \fB$15FF\fP, it will contain 512 bytes of zeroes, since none
of the input files had any data at these addresses. If the order were
swapped, the result would be the same.
.UNINDENT
.UNINDENT
.sp
cmbcombine x1400.prg x1600.prg > new.prg
.INDENT 0.0
.INDENT 3.5
new.prg\(aqs load address will be \fB$1400\fP and it will end at \fB$19FF\fP\&. The
data from \fB$1400\fP to \fB$15FF\fP comes from x1400.prg, and the rest from x1600.prg.
.UNINDENT
.UNINDENT
.sp
cmbcombine x1600.prg x1400.prg > new.prg
.INDENT 0.0
.INDENT 3.5
As above, but data at \fB$1400\fP to \fB$15FF\fP comes from x1400.prg.
.UNINDENT
.UNINDENT
.sp
cmbcombine x1400.prg x1600.prg,0x1800 > new.prg
.INDENT 0.0
.INDENT 3.5
new.prg loads at \fB$1400\fP and extends to \fB$1BFF\fP\&. Data at \fB$1400\fP to
\fB$17FF\fP comes from x1400.prg, data at \fB$1800\fP to \fB$1BFF\fP comes from
x1600.prg. If x1600.prg contains non\-relocatable code org\(aqed at \fB$1600\fP,
it will fail to run when loaded at \fB$1800\fP\&.
.UNINDENT
.UNINDENT
.SH EXIT STATUS
.sp
0 for success, non\-zero for failure. If any of the input files can\(aqt be
read, the process exits with failure status, without writing anything
to standard output.
.SH BUGS
.sp
There is very little error\-checking. It may be possible to crash
cbmcombine by feeding it bogus input.
.sp
There\(aqs no way to give cbmcombine a filename containing a comma.
.sp
Not exactly bugs, per se, but missing features:
.INDENT 0.0
.INDENT 3.5
The user should be notified if files overlap and/or there are gaps in
the output.
.sp
There should be warnings if a file wraps around the top of the 64K address
space, or loads into dangerous or invalid areas such as ROM or page zero.
Odds are, the file isn\(aqt really a valid CBM executable.
.sp
There should be a cbmsplit utility that does the opposite of cbmcombine.
.UNINDENT
.UNINDENT
.SH COPYRIGHT
.sp
As of 21.12.2005 Pucrunch is under GNU LGPL. See:
.INDENT 0.0
.INDENT 3.5
\fI\%http://creativecommons.org/licenses/LGPL/2.1/\fP
\fI\%http://www.gnu.org/copyleft/lesser.html\fP
.UNINDENT
.UNINDENT
.SH AUTHORS
.sp
cbmcombine was written by Pasi Ojala <\fI\%a1bert@iki.fi\fP>.
.sp
This man page written for the SlackBuilds.org project
by B. Watson, and is licensed under the WTFPL.
.SH SEE ALSO
.sp
pucrunch(1), exomizer(1), vice(1)
.sp
The pucrunch homepage: \fI\%http://a1bert.kapsi.fi/Dev/pucrunch/\fP
.sp
The full documentation and sample decompressor code:
.INDENT 0.0
.INDENT 3.5
/usr/doc/pucrunch\-20081122/
.UNINDENT
.UNINDENT
.\" Generated by docutils manpage writer.
.

View file

@ -0,0 +1,147 @@
.. RST source for cbmcombine(1) man page. Convert with:
.. rst2man.py cbmcombine.rst > cbmcombine.1
.. rst2man.py comes from the SBo development/docutils package.
.. |version| replace:: 20081122
.. |date| date::
.. converting from pod:
.. s/B<\([^>]*\)>/**\1**/g
.. s/I<\([^>]*\)>/*\1*/g
==========
cbmcombine
==========
------------------------------------
combines Commodore 8-bit executables
------------------------------------
:Manual section: 1
:Manual group: SlackBuilds.org
:Date: |date|
:Version: |version|
SYNOPSIS
========
cbmcombine [*input-file[,load-address]*] [[[*input-file[,load-address]*]] ...]
DESCRIPTION
===========
cbmcombine combines several Commodore executables into one. All Commodore
8-bit machines (64, 128, VIC-20, Plus4, 16, PET, etc) are supported,
since they all use the same executable file format.
Files are read in the order listed on the command line. The combined
executable is written to standard output. Each file's load address can
be forced by adding a comma and the new address (in decimal, or in hex
with 0x prefix), in which case the load address in the file will be read
and ignored.
If any of the input files overlap the same area of memory, the overlap
area will contain only data from the file(s) listed later in the command
line. The output file's load address will be that of the input file with
the lowest address, and it will extend to the highest address contained
in any of the files. If there are gaps in the address space (areas where
no file was loaded), the output will contain 0x00 bytes to fill the gap.
Load address overrides do NOT relocate code.
There are no switches (options) for cbmcombine.
EXAMPLES
========
The examples use 1024 byte input files, named after their load addresses
in hex:
x1000.prg Load address **$1000**, last address **$13FF**
x1400.prg Load address **$1400**, last address **$17FF**
x1600.prg Load address **$1600**, last address **$19FF**
cmbcombine x1000.prg x1400.prg > new.prg
new.prg will have a load address of 0x1000, and contain data from
0x1000 to 0x17ff. Since x1000.prg ends at address 0x13ff, there is
no overlap. If the order of arguments were swapped, the result would
be the same.
cmbcombine x1000.prg x1600.prg > new.prg
new.prg's load address will be **$1000**, and its end address will be **$19FF**.
From **$1400** to **$15FF**, it will contain 512 bytes of zeroes, since none
of the input files had any data at these addresses. If the order were
swapped, the result would be the same.
cmbcombine x1400.prg x1600.prg > new.prg
new.prg's load address will be **$1400** and it will end at **$19FF**. The
data from **$1400** to **$15FF** comes from x1400.prg, and the rest from x1600.prg.
cmbcombine x1600.prg x1400.prg > new.prg
As above, but data at **$1400** to **$15FF** comes from x1400.prg.
cmbcombine x1400.prg x1600.prg,0x1800 > new.prg
new.prg loads at **$1400** and extends to **$1BFF**. Data at **$1400** to
**$17FF** comes from x1400.prg, data at **$1800** to **$1BFF** comes from
x1600.prg. If x1600.prg contains non-relocatable code org'ed at **$1600**,
it will fail to run when loaded at **$1800**.
EXIT STATUS
===========
0 for success, non-zero for failure. If any of the input files can't be
read, the process exits with failure status, without writing anything
to standard output.
BUGS
====
There is very little error-checking. It may be possible to crash
cbmcombine by feeding it bogus input.
There's no way to give cbmcombine a filename containing a comma.
Not exactly bugs, per se, but missing features:
The user should be notified if files overlap and/or there are gaps in
the output.
There should be warnings if a file wraps around the top of the 64K address
space, or loads into dangerous or invalid areas such as ROM or page zero.
Odds are, the file isn't really a valid CBM executable.
There should be a cbmsplit utility that does the opposite of cbmcombine.
COPYRIGHT
=========
As of 21.12.2005 Pucrunch is under GNU LGPL. See\:
http://creativecommons.org/licenses/LGPL/2.1/
http://www.gnu.org/copyleft/lesser.html
AUTHORS
=======
cbmcombine was written by Pasi Ojala <a1bert@iki.fi>.
This man page written for the SlackBuilds.org project
by B. Watson, and is licensed under the WTFPL.
SEE ALSO
========
pucrunch(1), exomizer(1), vice(1)
The pucrunch homepage: http://a1bert.kapsi.fi/Dev/pucrunch/
The full documentation and sample decompressor code\:
/usr/doc/pucrunch-|version|/

223
system/pucrunch/pucrunch.1 Normal file
View file

@ -0,0 +1,223 @@
.\" Man page generated from reStructuredText.
.
.TH PUCRUNCH 1 "2017-09-06" "20081122" "SlackBuilds.org"
.SH NAME
pucrunch \- compressor optimized for low-resource decompression
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.\" RST source for pucrunch(1) man page. Convert with:
.
.\" rst2man.py pucrunch.rst > pucrunch.1
.
.\" rst2man.py comes from the SBo development/docutils package.
.
.\" converting from pod:
.
.\" s/B<\([^>]*\)>/**\1**/g
.
.\" s/I<\([^>]*\)>/*\1*/g
.
.SH SYNOPSIS
.sp
pucrunch [\fI\-options\fP] [\fIinfile]\fP [\fIoutfile\fP]]
.SH DESCRIPTION
.sp
Pucrunch is a Hybrid LZ77 and RLE compressor, uses an Elias Gamma Code
for lengths, mixture of Gamma Code and linear for LZ77 offset, and
ranked RLE bytes indexed by the same Gamma Code. Uses no extra memory
in decompression.
.sp
Input files can be arbitrary data (with \fI\-d\fP option) or executables for
Commodore 64, VIC\-20, C16, or Plus/4. Output is either a self\-extracting
compressed Commodore executable, or a compressed data file suitable for
extracting via \fIpucrunch \-u\fP or the included decompressor routines. See
/usr/doc/pucrunch\-20081122/examples/*.asm for 6502, 6809, and Z80
assembly code implementations of the decompressor.
.sp
Note: Because pucrunch contains both RLE and LZ77 and they are
specifically designed to work together, DO NOT RLE\-pack your files
first, because it will decrease the overall compression ratio.
.SH OPTIONS
.sp
Pucrunch expects any number of options and up to two filenames. If you
only give one filename, the compressed file is written to the stardard
output. If you leave out both filenames, the input is in addition
read from the standard input. Options needing no value can be grouped
together. All values can be given in decimal (no prefix), octal (prefix
0), or hexadecimal (prefix $ or 0x). [\fINote\fP: escape the \fI$\fP with quotes
or a backslash, to avoid your shell treating it as a metacharacter]
.sp
Example: pucrunch demo.prg demo.pck \-m6 \-fs \-p2 \-x0xc010
.INDENT 0.0
.TP
.B \fB\-c<machine>\fP
Selects the machine. Possible values are 128 (C128), 64 (C64),
20 (VIC20), 16 (C16/Plus4), 0 (standalone). The default is 64, i.e.
Commodore 64.
.sp
If you use \-c0, a file without the embedded decompression code
is produced. This can be decompressed with a standalone routine
and of course with pucrunch itself. Options marked with [\fISFX\fP]
have no effect if \-c0 is used.
.sp
The 128\-mode is not fully developed yet. Currently it overwrites
memory locations $f7\-$f9 (Text mode lockout, Scrolling, and Bell
settings) without restoring them later.
.TP
.B \fB\-a\fP
[\fISFX\fP] Avoids video matrix if possible. Only affects VIC20 mode.
.TP
.B \fB\-d\fP
[\fISFX\fP] Indicates that the file does not have a load address. A load
address can be specified with \-l option. The default load
address if none is specified is 0x258.
.TP
.B \fB\-l<addr>\fP
[\fISFX\fP] Overrides the file load address or sets it for data files.
.TP
.B \fB\-x<addr>\fP
[\fISFX\fP] Sets the execution address or overrides automatically detected
execution address. Pucrunch checks whether a SYS\-line is present
and tries to decode the address. Plain decimal addresses and
addresses in parenthesis are read correctly, otherwise you need
to override any incorrect value with this option.
.TP
.B \fB\-e<val>\fP
Fixes the number of escape bits used. You don\(aqt usually need or
want to use this option.
.TP
.B \fB\-r<val>\fP
Sets the LZ77 search range. By specifying 0 you get only RLE.
You don\(aqt usually need or want to use this option.
.TP
.B \fB+f\fP
Disables 2MHz mode for C128 and 2X mode in C16/+4.
.TP
.B \fB\-fbasic\fP
[\fISFX\fP] Selects the decompressor for basic programs. This version
performs the RUN function and enters the basic interpreter
automatically. Currently only C64 and VIC20 are supported.
.TP
.B \fB\-ffast\fP
[\fISFX\fP] Selects the faster, but longer decompressor version, if such
version is available for the selected machine and selected
options. Without this option the medium\-speed and medium\-size
decompressor is used.
.TP
.B \fB\-fshort\fP
[\fISFX\fP] Selects the shorter, but slower decompressor version, if such
version is available for the selected machine and selected
options. Without this option the medium\-speed and medium\-size
decompressor is used.
.TP
.B \fB\-flist\fP
List all available decompressors (the \fI\-f\fP options above), for all
supported machines. The list may contain more decompressors than are
shown above (the extras might be experimental, use at your own risk).
.TP
.B \fB\-fdelta\fP
Allows delta matching. In this mode only the waveforms in the
data matter, any offset is allowed and added in the
decompression. Note that the decompressor becomes 22 bytes
longer if delta matching is used and the short decompressor
can\(aqt be used (24 bytes more). This means that delta matching
must get more than 46 bytes of total gain to get any net
savings. So, always compare the result size to a version
compressed without \-fdelta.
.sp
Also, the compression time increases because delta matching is
more complicated. The increase is not 256\-fold though, somewhere
around 6\-7 times is more typical. So, use this option with care
and do not be surprised if it doesn\(aqt help on your files.
.TP
.B \fB\-n\fP
Disables RLE and LZ77 length optimization. You don\(aqt usually
need or want to use this option.
.TP
.B \fB\-s\fP
Display full statistics instead of a compression summary.
.TP
.B \fB\-p<bits>\fP
Fixes the number of extra LZ77 position bits used for the low
part. If pucrunch tells you to to use this option, see if the
new setting gives better compression.
.TP
.B \fB\-m<bits>\fP
Sets the maximum length value. The value should be 5, 6, or 7.
The lengths are 64, 128 and 256, respectively. If pucrunch tells
you to to use this option, see if the new setting gives better
compression. The default value is 7.
.TP
.B \fB\-i<0|1>\fP
Defines the interrupt enable state to be used after
decompression. Value 0 disables interrupts, other values enable
interrupts. The default is to enable interrupts after
decompression.
.TP
.B \fB\-g<byte>\fP
Defines the memory configuration to be used after decompression.
Only used for C64 mode (\-c64). The default value is $37.
.TP
.B \fB\-u\fP
Unpacks/decompresses a file instead of compressing it. The file
to decompress must have a decompression header compatible with
one of the decompression headers in the current version.
.TP
.B \fB\-h\fP
Print built\-in help and exit.
.UNINDENT
.SH COPYRIGHT
.sp
As of 21.12.2005 Pucrunch is under GNU LGPL. See:
.INDENT 0.0
.INDENT 3.5
\fI\%http://creativecommons.org/licenses/LGPL/2.1/\fP
\fI\%http://www.gnu.org/copyleft/lesser.html\fP
.UNINDENT
.UNINDENT
.SH AUTHORS
.sp
pucrunch was written by Pasi Ojala <\fI\%a1bert@iki.fi\fP>.
.sp
This man page consist of excerpts from the author\(aqs documentation. It
was written for the SlackBuilds.org project by B. Watson, and is licensed
under the same terms as the original docs.
.SH SEE ALSO
.sp
exomizer(1)
.sp
The pucrunch homepage: \fI\%http://a1bert.kapsi.fi/Dev/pucrunch/\fP
.sp
The full documentation and sample decompressor code:
.INDENT 0.0
.INDENT 3.5
/usr/doc/pucrunch\-20081122/
.UNINDENT
.UNINDENT
.\" Generated by docutils manpage writer.
.

View file

@ -0,0 +1,86 @@
#!/bin/sh
# Slackware build script for pucrunch
# Written by B. Watson (yalhcru@gmail.com)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
# Note about the source: upstream doesn't provide an archive, instead each
# file is linked to from the homepage. I created pucrunch-20081122.tar.xz
# by downloading all the individual files. The version number is the
# 'Last Updated' date on the homepage.
PRGNAM=pucrunch
VERSION=${VERSION:-20081122}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
sed -i "s,-O,$SLKCFLAGS," Makefile
make
# no Makefile for this, plus it needs special incantations...
gcc $SLKCFLAGS -funsigned-char \
-include sys/param.h -Dfar= -Dmin=MIN -Dmax=MAX \
-o cbmcombine cbmcombine.c
mkdir -p $PKG/usr/bin
install -s -m0755 $PRGNAM cbmcombine $PKG/usr/bin
# man page created by script author from the HTML docs:
mkdir -p $PKG/usr/man/man1
gzip -9c < $CWD/$PRGNAM.1 > $PKG/usr/man/man1/$PRGNAM.1.gz
gzip -9c < $CWD/cbmcombine.1 > $PKG/usr/man/man1/cbmcombine.1.gz
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/examples
cp -a $PRGNAM.html $PKG/usr/doc/$PRGNAM-$VERSION
cp -a *.asm $PKG/usr/doc/$PRGNAM-$VERSION/examples
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View file

@ -0,0 +1,10 @@
PRGNAM="pucrunch"
VERSION="20081122"
HOMEPAGE="http://a1bert.kapsi.fi/Dev/pucrunch/"
DOWNLOAD="http://urchlay.naptime.net/~urchlay/src/pucrunch-20081122.tar.xz"
MD5SUM="dbc3e129a9d963e96f34a3495307aeff"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"

View file

@ -0,0 +1,205 @@
.. RST source for pucrunch(1) man page. Convert with:
.. rst2man.py pucrunch.rst > pucrunch.1
.. rst2man.py comes from the SBo development/docutils package.
.. |version| replace:: 20081122
.. |date| date::
.. converting from pod:
.. s/B<\([^>]*\)>/**\1**/g
.. s/I<\([^>]*\)>/*\1*/g
========
pucrunch
========
---------------------------------------------------
compressor optimized for low-resource decompression
---------------------------------------------------
:Manual section: 1
:Manual group: SlackBuilds.org
:Date: |date|
:Version: |version|
SYNOPSIS
========
pucrunch [*-options*] [*infile]* [*outfile*]]
DESCRIPTION
===========
Pucrunch is a Hybrid LZ77 and RLE compressor, uses an Elias Gamma Code
for lengths, mixture of Gamma Code and linear for LZ77 offset, and
ranked RLE bytes indexed by the same Gamma Code. Uses no extra memory
in decompression.
Input files can be arbitrary data (with *-d* option) or executables for
Commodore 64, VIC-20, C16, or Plus/4. Output is either a self-extracting
compressed Commodore executable, or a compressed data file suitable for
extracting via *pucrunch -u* or the included decompressor routines. See
/usr/doc/pucrunch-|version|/examples/\*.asm for 6502, 6809, and Z80
assembly code implementations of the decompressor.
Note: Because pucrunch contains both RLE and LZ77 and they are
specifically designed to work together, DO NOT RLE-pack your files
first, because it will decrease the overall compression ratio.
OPTIONS
=======
Pucrunch expects any number of options and up to two filenames. If you
only give one filename, the compressed file is written to the stardard
output. If you leave out both filenames, the input is in addition
read from the standard input. Options needing no value can be grouped
together. All values can be given in decimal (no prefix), octal (prefix
0), or hexadecimal (prefix $ or 0x). [*Note*: escape the *$* with quotes
or a backslash, to avoid your shell treating it as a metacharacter]
Example: pucrunch demo.prg demo.pck -m6 -fs -p2 -x0xc010
**-c<machine>**
Selects the machine. Possible values are 128 (C128), 64 (C64),
20 (VIC20), 16 (C16/Plus4), 0 (standalone). The default is 64, i.e.
Commodore 64.
If you use -c0, a file without the embedded decompression code
is produced. This can be decompressed with a standalone routine
and of course with pucrunch itself. Options marked with [*SFX*]
have no effect if -c0 is used.
The 128-mode is not fully developed yet. Currently it overwrites
memory locations $f7-$f9 (Text mode lockout, Scrolling, and Bell
settings) without restoring them later.
**-a**
[*SFX*] Avoids video matrix if possible. Only affects VIC20 mode.
**-d**
[*SFX*] Indicates that the file does not have a load address. A load
address can be specified with -l option. The default load
address if none is specified is 0x258.
**-l<addr>**
[*SFX*] Overrides the file load address or sets it for data files.
**-x<addr>**
[*SFX*] Sets the execution address or overrides automatically detected
execution address. Pucrunch checks whether a SYS-line is present
and tries to decode the address. Plain decimal addresses and
addresses in parenthesis are read correctly, otherwise you need
to override any incorrect value with this option.
**-e<val>**
Fixes the number of escape bits used. You don't usually need or
want to use this option.
**-r<val>**
Sets the LZ77 search range. By specifying 0 you get only RLE.
You don't usually need or want to use this option.
**+f**
Disables 2MHz mode for C128 and 2X mode in C16/+4.
**-fbasic**
[*SFX*] Selects the decompressor for basic programs. This version
performs the RUN function and enters the basic interpreter
automatically. Currently only C64 and VIC20 are supported.
**-ffast**
[*SFX*] Selects the faster, but longer decompressor version, if such
version is available for the selected machine and selected
options. Without this option the medium-speed and medium-size
decompressor is used.
**-fshort**
[*SFX*] Selects the shorter, but slower decompressor version, if such
version is available for the selected machine and selected
options. Without this option the medium-speed and medium-size
decompressor is used.
**-flist**
List all available decompressors (the *-f* options above), for all
supported machines. The list may contain more decompressors than are
shown above (the extras might be experimental, use at your own risk).
**-fdelta**
Allows delta matching. In this mode only the waveforms in the
data matter, any offset is allowed and added in the
decompression. Note that the decompressor becomes 22 bytes
longer if delta matching is used and the short decompressor
can't be used (24 bytes more). This means that delta matching
must get more than 46 bytes of total gain to get any net
savings. So, always compare the result size to a version
compressed without -fdelta.
Also, the compression time increases because delta matching is
more complicated. The increase is not 256-fold though, somewhere
around 6-7 times is more typical. So, use this option with care
and do not be surprised if it doesn't help on your files.
**-n**
Disables RLE and LZ77 length optimization. You don't usually
need or want to use this option.
**-s**
Display full statistics instead of a compression summary.
**-p<bits>**
Fixes the number of extra LZ77 position bits used for the low
part. If pucrunch tells you to to use this option, see if the
new setting gives better compression.
**-m<bits>**
Sets the maximum length value. The value should be 5, 6, or 7.
The lengths are 64, 128 and 256, respectively. If pucrunch tells
you to to use this option, see if the new setting gives better
compression. The default value is 7.
**-i<0|1>**
Defines the interrupt enable state to be used after
decompression. Value 0 disables interrupts, other values enable
interrupts. The default is to enable interrupts after
decompression.
**-g<byte>**
Defines the memory configuration to be used after decompression.
Only used for C64 mode (-c64). The default value is $37.
**-u**
Unpacks/decompresses a file instead of compressing it. The file
to decompress must have a decompression header compatible with
one of the decompression headers in the current version.
**-h**
Print built-in help and exit.
COPYRIGHT
=========
As of 21.12.2005 Pucrunch is under GNU LGPL. See\:
http://creativecommons.org/licenses/LGPL/2.1/
http://www.gnu.org/copyleft/lesser.html
AUTHORS
=======
pucrunch was written by Pasi Ojala <a1bert@iki.fi>.
This man page consists of excerpts from the author's documentation. It
was written for the SlackBuilds.org project by B. Watson, and is licensed
under the same terms as the original docs.
SEE ALSO
========
cbmcombine(1), exomizer(1), vice(1)
The pucrunch homepage: http://a1bert.kapsi.fi/Dev/pucrunch/
The full documentation and sample decompressor code\:
/usr/doc/pucrunch-|version|/

View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
pucrunch: pucrunch (compressor optimized for low-resource decompression)
pucrunch:
pucrunch: Pucrunch is a Hybrid LZ77 and RLE compressor, uses an Elias Gamma
pucrunch: Code for lengths, mixture of Gamma Code and linear for LZ77 offset,
pucrunch: and ranked RLE bytes indexed by the same Gamma Code. Uses no extra
pucrunch: memory in decompression.
pucrunch:
pucrunch: Assembly sources for example decompressors (for Commodore 64 and
pucrunch: Nintendo GameBoy) are included.
pucrunch:
pucrunch: