Exomizer 2.0 beta2 released (no source code and no docs yet).



NEW FEATURES:



o  Totally rewitten handling of the sfx decruncher:

   1) Several different decrunch effects.

   2) Complete user control over memory and irq config.

   3) Can start basic programs properly with built in trampoline by using the

      command 'sfx basic'

   3) The decruncher code is assembled on the fly for maximum flexibility by an

      embedded assembler.

   4) Will adapt the decruncher to include only features used by the compressed

      stream to keep the size down.

   5) Now also supports the c128 and the vic20 (in several configurations).

   6) The Atari 400/800 XL/XE family is supported as a sfx target: 168.

      The file written by this targer is of the type xex.

   7) Also handles relocated sfx without basic line.



o   Exomizer now reads xex-files and autodetects the RUNAD vector if the sys

    keyword is given to the sfx command.



o  Exomizer now can load plain files using the <filename>@<addr> syntax.



o  The cruncher now has an escape mechanism that detects and handles sequences

   of uncrunchable data, literal sequences, properly.



o  The level mode of exomizer now crunches each infile separately and appends

   them to the outfile instead of merging them together like the -r mode did

   before. The new behaviour is more useful for level usage.



o  New sub command, raw, that features:

   1) Crunches plain files instead of .prg files.

   2) Crunches forward or backwards instead of just backwards.

   3) Also decrunches.

   4) Handles files larget than 64k. Sizes below 1MB is now possible to crunch.

      It handles the complete canterbury and calgary corpora just fine.

   5) Comes with two different C-source decrunchers, one thread safe forward

      pull decruncher and one low-level backward push decruncher perfect to

      base an assembler port on.



FEATURES STILL TO DO BEFORE PROPER RELEASE:



o  Sfx decruncher in exomizer:

   1) Handle the vic20 target better with regards to memory holes.



o  There is no 6502 assembler decruncher for streaming data crunched forward or

   crunched using literal sequences.

   However the streaming (backwards) decrunchers will work if the -b and -c

   flags are used when crunching (with exomizer raw). Please see the examples.

   Please note that unlike 1.x, only exomizer raw can crunch data intended to

   be used by the streaming decrunchers.



o  The sfx command sometimes crunch better with the -c flag.



o Update the usage descriptions properly.



-------------------------------------------------------------------------------

The exomizer v2 uses a different command syntax from v1.x. Here's a quick

translation list:

old:                                    new:

------------------                      -----------------------------

exomizer -ssys <infile>                 exomizer sfx sys <infile>

exomizer -s$1234 <infile>               exomizer sfx $1234 <infile>

exomizer -r <infile>                    exomizer level <infile>

exomizer <infile>                       exomizer mem -lnone <infile>

exomizer -l$1234 <infile>               exomizer mem -l$1234 <infile>

exomizer -lauto  <infile>               exomizer mem <infile>

-------------------------------------------------------------------------------



-------------------------------------------------------------------------------

-- A beginning of something like documentation --------------------------------

-------------------------------------------------------------------------------

A note about addresses:

An address in this context is a positive 16-bit value [0 - 65536]. It can be

given in decimal, hexadecimal (prefixed with $ or 0x) or octal (prefixed with

0) notation. Examples: 3, 54, $3456, 0x1111, 06543.



Exomizer has four sub commands: mem, level, sfx and raw. They all compress

data.



 All commands except raw:

The mem, level and sfx command all crunches files backwards. The files have to

belocated in a 16-bit address space and are also limited in size to that 16bit

address space. The file format of the input files are prg files, xex files or

located plain files (plain files that are given an address to load to.)



The syntax for loading a prg or xex file is simply the filename:

$ exomizer mem <prg file> <xex file> -o <output prg file name>



If you want to load a prg file to a different address than it contains you can

simply append a comma and the new load address:

$ exomizer mem <prg file>,<new address> -o <output prg file name>



Relocation does not work for xex files. An relocated xex file will simply be

treated as if it was a relocated prg file.



Plain located files are given using a similar syntax:

$ exomizer mem <plain file>@<address> -o <output prg file name>



 When given multiple input files The sfx and mem commands load all files and

then crunch the resulting memory area. The level command loads each input file

separately and crunches it and then append the crunched data to the output

file.



 The mem command writes its output in prg format.



 The level command writes the files in its own format that is easy to read back

and decrunch on the fly.



 The output of the sfx command is a runnable program file that decrunches

 itself, in memory, when run. The output file format depends on the target

 used. The possible target are: 20, 23, 52, 55, 4, 64, 128 or 168.



 20: Commodore Vic20, unexpanded memory.

 23: Commodore Vic20, 3kB memory expansion.

 52: Commodore Vic20, 32kB memory expasion.

 55: Commodore Vic20  32+3kB memory expansion.

  4: Commodore c16/plus4.

 64: Commodore c64.

128: Commodore c128.

168: Atari 400/800 XL/XE. (168 == $a8)



The sfx command needs a run address. It may be given as an address or

the string sys or basic. If the run address is an address then it is used.

If it is the string sys then the run address will be autodetected.

If it is the string basic then the computer will run a basic program after

decrunch. (Not supported yet for the Atari target).



For all Commodore machines the output is a runnable prg-file that starts with a

basic line., for the Atari target its a auto running xex-file.



The atari target doesn't support decrunching into extended memory.



 The raw command on the other can both crunch and decrunch both forward and

backward. It also handles generic files without any of the above mentioned

restrictions. There's no hardcoded limit in file size but it gets increasingly

slow with larger files so there's a practical limit of about one MB. This

command also outputs a generic file.



-------------------------------------------------------------------------------

-- Reference for the sfx decruncher symbols -----------------------------------

-------------------------------------------------------------------------------

The sfx decruncher is tweaked by defining optional symbols to the assembler on

the command line using the -D<symbol>=<value> flag:



The following symbol controls the sfx load address:

 i_load_addr



If it is unset then the sfx file will load to the default basic start address

of the target machine (For Atari the default load address is $2c00)

If it is set then the sfx file will load to the given address and it will not

have any basic sys line. (The Atari target never has a basic line).



The following symbols control the memory config:

 i_ram_enter      (defaults to standard ROM config)

 i_ram_during

 i_ram_exit       (defaults to standard ROM config)



For the c64 and the c128 target the value n will be stored into $fff0 (c128) or

$01 (c64) to set the mem config. For the c16/+4 target 0=ROM and 1=RAM.

default is $37 for the c64, $00 for the c128 and 0 for the c16/+4.



The following symbols control irqs. (0=disabled,sei, 1=enabled,cli)

 i_irq_enter      (defaults to 1)

 i_irq_during

 i_irq_exit



To locate the decrunch table elsewhere than the default tape buffer:

 -Di_table_addr=<address>



To select one of the four decruncher effects add this flag (0 <= n <= 3):

 -Di_effect=n



To have the effect updated faster add this flag:

 -Di_fast_effect=1



The possible effects to chose from are:

-1: no effect at all.

0: traditional lower right screen corner flashing (default).

1: border flash based on the value of the accumulator (needs fast effects).

2: border flash based on the value of the x-register.

3: border flash based on the value of the y-register.



-------------------------------------------------------------------------------

-- Results for the Canterbury and Calgary corpae for exomizer raw -------------

-------------------------------------------------------------------------------



------------------------------------------------------

Canterbury      in      out     b/B     ratio   gained

------------------------------------------------------

alice29.txt      152089   53060 2.79    34.89%  65.11%

asyoulik.txt     125179   48530 3.10    38.77%  61.23%

cp.html           24603    8352 2.72    33.95%  66.05%

fields.c          11150    3177 2.28    28.49%  71.51%

grammar.lsp        3721    1294 2.78    34.78%  65.22%

kennedy.xls     1029744  162282 1.26    15.76%  84.24%

lcet10.txt       426754  138443 2.60    32.44%  67.56%

plrabn12.txt     481861  190570 3.16    39.55%  60.45%

ptt5             513216   51904 0.81    10.11%  89.89%

sum               38240   12316 2.58    32.21%  67.79%

xargs.1            4227    1829 3.46    43.27%  56.73%

------------------------------------------------------

total           2810784  671757 1.91    23.90%  76.10%



------------------------------------------------------

Calgary         in      out     b/B     ratio   gained

------------------------------------------------------

bib              111261   34219 2.46    30.76%  69.24%

book1            768771  305695 3.18    39.76%  60.24%

book2            610856  198396 2.60    32.48%  67.52%

geo              102400   68268 5.33    66.67%  33.33%

news             377109  139442 2.96    36.98%  63.02%

obj1              21504   10137 3.77    47.14%  52.86%

obj2             246814   78902 2.56    31.97%  68.03%

paper1            53161   18659 2.81    35.10%  64.90%

paper2            82199   29546 2.88    35.94%  64.06%

paper3            46526   18309 3.15    39.35%  60.65%

paper4            13286    5722 3.45    43.07%  56.93%

paper5            11954    5165 3.46    43.21%  56.79%

paper6            38105   13536 2.84    35.52%  64.48%

pic              513216   51904 0.81    10.11%  89.89%

progc             39611   13591 2.74    34.31%  65.69%

progl             71646   16198 1.81    22.61%  77.39%

progp             49379   11129 1.80    22.54%  77.46%

trans             93695   18677 1.59    19.93%  80.07%

------------------------------------------------------

total           3251493 1037495 2.55    31.91%  68.09%

