-
Notifications
You must be signed in to change notification settings - Fork 0
Amiga PowerPack 2.0
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.
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)
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.
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.
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.
Demnächst im SVN zu finden ...
Kategorie:DSA1Kategorie:DSA2Kategorie:DSA3Kategorie:Kompressionsverfahren