Skip to content

Amiga PowerPack 2.0

Shihan edited this page Mar 17, 2020 · 1 revision

Amiga PowerPack 2.0 ist einer der Bildkomprimierungsalgorithmen der Nordlandtrilogie. Neben den ACE-Dateien (wo er die Nummer 50 hat) kommt er auch noch in einigen Bildern der Schicksalsklinge vor, z.B. in der DSALOGO.DAT aus dem Archiv DSAGEN.DAT.

Table of Contents

Header

Der Datenblock von Crunchmode 50 besitzt zunächst einen eigenen kleinen Header:

 Offset       Typ      Bezeichnung
 0x00         4 Byte   Größe der gepackten Daten
 0x04..0x07   1 Byte   Bitbreiten für Modus 1(siehe unten)

Beschreibung des Komprimierungsalgorithmus'

Die Daten werden bitweise (Byteorder beachten!) von hinten nach vorn interpretiert. Dabei werden zunächst einige Bits ignoriert; die Anzahl dieser Bits richtet sich nach der Dateiversion. Die letzten vier Bytes sind zu zu ignorieren; dazu kommt die im allerletzten Byte angegebene Zahl an Bits.

Darauf folgen die eigentlichen Daten, die jeweils in Blöcken von variabler Länge gelesen werden. Das erste Bit eines Blocks gibt den Modus für die Weiterverarbeitung an.

Modus0

Ein Modus0-Block dient dazu, eine Reihe von Bytes unkomprimiert anzugeben. Dazu folgen auf das führende 0-Bit eine Reihe von 2-Bit-Zahlen (also von 0-3), die die Anzahl der unkomprimierten Bytes angeben (Details im Algorithmus). Dann folgen (Anzahl+1) 8-Bit-Folgen, die direkt ausgegeben werden können.

Einem Modus0-Block folgt stets ein Modus1-Block, allerdings ohne die führende 1.

Modus1

Der Modus1 erlaubt die Wiederholung von bereits dekomprimierten Bytefolgen und ist für die Platzersparnis von Crunchmode 50 verantwortlich. Mode1 beginnt (nach der eventuellen führenden 1) mit 2 Bits, die zugleich die Länge L der zu wiederholenden Bytefolge als auch die Bitbreite B des Offsets angeben. Die Länge L der Folge ergibt sich direkt aus den gelesenen 2 Bits plus zwei. Zur Bestimmung der Bitbreite B werden die zwei Bit als Index für die Bitbreiten am Anfang der Datei (Bytes 04 bis 07) benutzt. Nun werden B Bits gelesen. Die aus diesen Bits erhaltene Zahl wird als Offset benutzt, wie viele Bytes im Ausgabe-Datenstrom zurückgegangen werden muss, um das gewünschte Muster zu finden. Das Muster ist L Bytes lang.

Algorithmus

Demnächst im SVN zu finden ...

Kategorie:DSA1Kategorie:DSA2Kategorie:DSA3Kategorie:Kompressionsverfahren

Clone this wiki locally