Exomizer

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Exomizer
Entwickler Magnus Lind und viele andere
aktuelle Version 3.1.1 (22.05.2021)
Lizenz Open Source
Plattform Windows, DOS, MorphOS
Bedienung über Kommandozeile
Sprache Sprache:englisch
Information Zielplatformen:
Atari 400/800 XL/XE
Apple II+ IIe
Commodore
C16 C116 Plus/4
VC20 C64 C128 PET 4032
Oric-1, Oric Atmos and BBC Micro.

Das Programm Exomizer ist ein Packer, genauer gesagt, eine in ANSI-C geschriebene Kommandozeilen-Anwendung, die auf Hostplattformen wie z.B. DOS, Windows oder Linux läuft. Diese erstellt komprimierte Dateien für 8-Bit-Zielplatformen mit 6502-kompatibler CPU.

Exomizer akzeptiert bei der Eingabe Dateien im PRG-Format oder Rohdaten ohne der 2-Byte großen vorangestellten Ladeadresse.
Die Erzeugung von selbstextrahierenden Dateiarchiven (SFX) ist möglich.

Mit Unpacker-Tools[1] können Exomizer-Programme auch wieder ausgepackt werden.

Zielsetzung[Bearbeiten | Quelltext bearbeiten]

Das Primärziel von Exomizer ist die Reduzierung der Dateigröße. Dadurch werden Ladezeiten verkürzt und zusätzlicher Speicherplatz im Speichermedium geschaffen.

Verfügbarkeit[Bearbeiten | Quelltext bearbeiten]

Es gibt vorkompilierte Versionen für DOS und Windows. Weiters ist eine Kompilierung von Exomizer mit Hilfe des Quellcodes, dem Makefile und den Werkzeugen GNU Make und GCC auf anderen Platformen möglich.

Praktische Anwendung[Bearbeiten | Quelltext bearbeiten]

BASIC-Programme komprimieren[Bearbeiten | Quelltext bearbeiten]

Die Startadresse des BASIC-Programms muss bei der Option sfx basic bei $0801 beginnen.

exomizer sfx basic foo-in.prg -o foo-out.prg 

Das BASIC-Programm foo-in.prg wird komprimiert und als foo-out.prg ausgegeben.

Maschinenspracheprogramme komprimieren[Bearbeiten | Quelltext bearbeiten]

Einfaches Maschinenspracheprogramm komprimieren und mit BASIC-Start versehen[Bearbeiten | Quelltext bearbeiten]

Die zwei häufigsten Möglichkeiten die Startadresse anzugeben sind als Dezimalzahl oder Hexadezimalzahl.

exomizer sfx 2080 foo-in.prg             # Startadresse im Dezimalsystem
exomizer sfx 0x0820 -o ggs.prg foo.prg   # Startadresse im Hexadezimalsystem
exomizer sfx $3000 main.prg -o main_exo.prg -n   
                                         # alternative Startadresse im Hexadezimalsystem,
                                         # mit der Option "-n" für "ohne Entpackeffekt"

Mehrteiliges Maschinenspracheprogramm komprimieren und mit BASIC-Start versehen[Bearbeiten | Quelltext bearbeiten]

exomizer sfx 2080 foo-in-1.prg foo-in-2.prg -o foo-out.prg

Erzeugt die komprimierte Datei foo-out.prg aus den zwei Dateien foo-in-1.prg und foo-in-2.prg.

Maschinenspracheprogramm (oder Daten) ohne BASIC-Start-Zeile[Bearbeiten | Quelltext bearbeiten]

Nicht immer will man eine BASIC-Startzeile haben, zum Beispiel bei nachträglich geladenen Daten oder Programmteilen wäre das eher störend. Der Befehl

exomizer sfx

kann so genutzt werden, dass komprimierte Daten an einer bestimmten Ladeadresse abgelegt werden, um sie anschließend an der ursprünglichen Ladeadresse zu dekomprimieren und hinterher einen Sprung im Speicher auszuführen an eine Wunschadresse, die nicht notwendigerweise in dem fraglichen Datenbereich liegen muss.

exomizer sfx $XXXX foo-in.prg -o foo-out.prg -n -Di_load_addr=$YYYY            
# $XXXX Sprungadresse in HEX, hier wird nach dem Decrunchen hingesprungen.
# $YYYY Ladeadresse in HEX, zugleich die Adresse, die zum Decrunchen aufgerufen werden muss.

Ein Beispiel: Angenommen, die zu packenden Daten umfassen den Bereich bei $4000 bis $7fff. Die alte Ladeadresse ist also $4000.

exomizer sfx $FCE2 foo-in.prg -o foo-out.prg -n -Di_load_addr=$1000

Führt man dies durch, so erhält man ein gepacktes File, das man mit

LOAD "FOO-OUT",8,1

an die Adresse $1000 laden und mit

SYS4096

starten kann. Die Daten werden an den Ort entpackt, dem sie über ihre alte Ladeadresse vor dem Komprimieren zugewiesen waren (hier $4000). Anschließend wird nach $FCE2 gesprungen (zur Veranschaulichung wurde in dem Beispiel der KERNEL-Reset als Sprungadresse gewählt).

Effekte beim Entpacken[Bearbeiten | Quelltext bearbeiten]

Standardmäßig wird während des Entpackens ein farbig blinkendes '@'-Zeichen in der rechten unteren Ecke angezeigt.

Mit der Option -n werden etwaige Auspackeffekte unterdrückt.

Die Optionen -x1, -x2 und -x3 wirken sich als Effekt im Rahmen (border) aus.
Individuelle Effekte können mit -X generiert werden, z.B.

-X "INC $D021 DEC $D418"   # Syntax - Windows-Kommandozeile (cmd.exe)
-X 'INC $D021 DEC $D418'   # Syntax - Linux-Shell (bash)


Die Optionen -s und -f erlauben es, vor und nach dem Entpacken Assembler-Fragmente einzufügen, etwa um den Bildschirm blank zu setzen oder die Bildschirmfarbe zu ändern, z.B.

-s "LDA #$0b STA $D011"    # Bildschirm blank
-f "LDA #$1b STA $D011"    # Bildschirm wieder sichtbar

Diese Fragmente stehen im Entpacker an folgender Stelle: LDY #$00 SEI Start-Fragment INC $1 ... Entpackroutine ... DEC $1 End-Fragment CLI JMP Programm-Start

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]