C 64
Tips und Tricks

Der Bitmap-Compander

Mit diesem kurzen Programm können Grafikbildschirme, die auf Diskette abgespeichert werden, auf die Hälfte komprimiert werden.

Jeder, der schon einmal eine hochauflösende Grafikauf Diskette abgespeichert hat, weiß, daß sie 33 Blocks benötigt. Das entspricht den 8 KByte des hochauflösenden Grafikbildschirms. Es besteht aber die Möglichkeit, diese Grafikbildschirme je nach Inhalt auf 10 bis 20 Blocks zu komprimieren. Das Verfahren beruht darauf, häufig wiederkehrende Sequenzen durch kürzere zu ersetzen. Dazu kann man sich die Bitmap als eine lange Kette von Nullen und Einsen vorstellen. Diese Kette wird jetzt in 4-Bit-Blöcke aufgeteilt. Solche Blöcke bezeichnet man als Halb-Byte oder Nibbles. Es gibt 16 verschiedene solcher Nibbles, wovon einige häufiger und andere seltener vorkommen. Jedem Nibble wird nun ein neuer Code zugeordnet, wobei das häufigste Nibble »0000«, den kürzesten Code »0« bekommt. Alle anderen 15 Codes müssen mit einer »1« beginnen. Einen Code »00« darf es nicht mehr geben, denn er könnte bei der Decodierung nicht mehr von dem Code »0« unterschieden werden. Es läßt sich nicht umgehen, viele Codes länger als 4 Bitzu machen. Die komplette Code-Tabelle ist in Tabelle 1 zu sehen. Doch die langen Codes kommen viel seltener vor als die kurzen, so daß bei einem »normalen« Bild viele Bits gespart werden können. Theoretisch wäre es möglich, daß eine komprimierte Bitmap länger wird als das Original. Aber selbst die Fotos aus der »Diashow« lassen sich komprimieren. Sir Winston Churchill magert zum Beispiel auf 24 Blocks ab. Bilder, wie sie üblicherweise in Gafik-Adventures vorkommen, lassen sich meist auf unter 15 Blocks zusammendrücken.

Nibbles Codes Hex Länge
0000 0 $00 1
0001 10100 $A0 5
0010 10101 $A8 5
0011 10110 $B0 5
0100 10111 $B8 5
0101 11000 $C0 5
0110 11001 $C8 5
0111 111100 $F0 6
1000 11010 $D0 5
1001 11011 $D8 5
1010 11100 $E0 5
1011 111101 $F4 6
1100 11101 $E8 5
1101 111110 $F8 6
1110 111111 $FC 6
1111 100 $80 3
Tabelle 1. Tabelle aller möglichen Codes

Tippen Sie das Programm (Listing 1) mit dem MSE ab und speichern Sie es, damit es jederzeit mit LOAD "BMC.EXE",8,1 geladen werden kann (auf der Leserservice-Diskette unter "BITMAPCOMPANDER" gespeichert). Der Aufruf des Companders funktioniert vom Basic aus mit einem SYS-Befehl. Die Parameter werden wie beim OPEN-Befehl angehängt.

Laden einer komprimierten Bitmap: SYS 52798,Filenummer,Geräteadresse,Kanalnummer,"Name"

Speichern einer komprimierten Bitmap: SYS 52736.Filenummer,Geräteadresse,Kanalnummer,"Name,P,W"

Mit der Filenummer wird die Anfangsadresse der Bitmap ausgewählt.

Filenummer Bitmap-Adresse
1 $2000 = 8192 (sichtbares Bild bei Hi-Eddi)
2 $4000 = 16384
3 $6000 = 24576
5 $A000 = 40960 (Bitmap bei Hires-3)
7 $E000 = 57344 (Bitmap bei Simons Basic)

Die Bitmaps 0, 4 und 6 sind theoretisch möglich, aber nicht sinnvoll, da der Videocontroller sie nicht adressieren kann. Die Gerätenummer ist 8 für das Floppy-Laufwerk und die Kanalnummer eine beliebige Zahl von 2 bis 14.

Beispiele für Aufrufe:

Speichern einer Simons Basic-Bitmap: SYS 52736,7,8,2,"Name,P,W"

Laden dieser Bitmap in Hires-3: SYS 52798,5,8,2,"Name"

Das Programm belegt den Bereich von $CE00 bis $CF19 (52736 bis 53017). Es belegt somit keinen Basic-Speicherplatz und verträgt sich auch mit Hires-3 und Simons Basic, solange der Befehl MEM nicht verwendet wird.

(Hans Haberl/ah)
PROGRAMM : BIT-MAP-COMPANDE CE00 CF19
-----------------------------------
CE00 : 20 89 CE A6 B8 20 C9 FF   21
CE08 : A9 08 85 FC 78 A9 34 85   67
CE10 : 01 A0 00 B1 F8 A2 37 86   26
CE18 : 01 58 48 4A 4A 4A 4A 20   01
CE20 : 9D CE 68 29 0F 20 9D CE   6A
CE28 : E6 F8 D0 02 E6 F9 A5 F9   C7
CE30 : 29 1F C9 1F D0 D6 A5 F8   8B
CE38 : C9 40 D0 D0 F0 42 20 89   24
CE40 : CE A6 B8 20 C6 FF 20 CF   20
CE48 : FF 85 FA 20 CF FF 85 FB   D7
CE50 : A9 08 85 FC 20 BC CE 0A   35
CE58 : 0A 0A 0A 48 20 BC CE 68   E7
CE60 : 05 FD A0 00 78 A2 34 86   06
CE68 : 01 91 F8 A2 37 86 01 58   21
CE70 : E6 F8 D0 02 E6 F9 A5 90   3D
CE78 : F0 DA A5 F8 C9 40 D0 D4   E9
CE80 : 20 CC FF A5 B8 20 C3 FF   56
CE88 : 60 20 FD AE 20 BE E1 A5   18
CE90 : B8 0A 0A 0A 0A 0A 85 F9   0C
CE98 : A9 00 85 F8 60 A8 B9 09   06
CEA0 : CF AA B9 E9 CE A4 FC 0A   8A
CEA8 : 26 FA 88 D0 09 48 A5 FA   E7
CEB0 : 20 D2 FF A0 08 68 CA D0   DE
CEB8 : EE 84 FC 60 A2 0F A5 FA   63
CEC0 : 3D F9 CE DD E9 CE F0 03   48
CEC8 : CA D0 F3 86 FD BD 09 CF   59
CED0 : AA A4 FC 06 FB 26 FA 88   BA
CED8 : D0 07 20 CF FF 85 FB A0   8B
CEE0 : 08 CA D0 EF 84 FC A5 FD   42
CEE8 : 60 00 A0 A8 B0 B8 C0 C8   EB
CEF0 : F0 D0 D8 E0 F4 E8 F8 FC   0F
CEF8 : 80 80 F8 F8 F8 F8 F8 F8   43
CF00 : FC F8 F8 F8 FC F8 FC FC   5B
CF08 : E0 01 05 05 05 05 05 05   E1
CF10 : 06 05 05 05 06 05 06 06   28
CF18 : 03                        37
Listing 1. zum Programm »Bitmap-Compander«.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →