Tips & Tricks

Mehr Platz auf der Diskette durch »File-Compactor«

Die Zeit, in der man aus Platzgründen nur ein oder zwei Programme auf einer Diskette unterbringen kann, ist vorbei. Mit diesem neuartigen File-Compactor sind Sie in der Lage, nicht nur Grafiken, sondern sogar beliebige Programme um bis zu 55 Prozent zu kürzen.

Das Problem, Programme zu packen, um so Platz auf Disketten zu sparen, istmiteinem einfachen File-Compactor, der sich darauf beschränkt, Folgen gleicher Bytes zu erkennen und zu vereinfachen, noch langenichtbeseitigt Ein solcher Compactor (zum Beispiel der File-Compactor aus dem 64’er, Ausgabe 7/85) kann mit Maschinensprache-Routinen wenig anfangen, da dort selten mehr als zweimal das gleiche Byte hintereinander vorkommt. Ein guter Programm-Compactor muß daher anders arbeiten.

Ein neuartiges Computerverfahren

Hier ist nun ein Compactor, der sich die geringe Unordnung in Programmen zunutze macht. Dadurch wird wirklich jedes Programm (miteiner Längevon mindestens 25 Blocks) erheblich gekürzt. Es gibt praktisch kein Programm, in dem die verschiedenen Zeichen gleich häufig vorkommen. In Basic-Programmen wird das besonders deutlich, weil dort Leerzeichen, Doppelpunkte, das $OO-Byte oder auch einzelne Buchstaben (wie zum Beispiel das »e«) besonders oftzu finden sind. Es gibt aber auch Zeichen, die in einem Programm nur ganz selten oder überhaupt nicht vorkommen. Diese Tatsache kann man sich zunutze machen, indem man beispielsweise für häufig vorkommende Zeichen, einen 3 Bit langen Code definiert. Jeder kann sich vorstellen, was das für eine Platzersparnis mit sich bringt. Je mehr in dem Programm einige wenige Zeichen dominieren, desto geringer ist der durchschnittliche Informationswert und desto stärker läßt es sich kürzen. Natürlich müssen dabei für die weniger oft vorkommenden Zeichen längere Codes (mit einer Länge von 8 Bit und länger) definiert werden, damit die Codierung eindeutig bleibt.

Zusätzlich wurde in diesem Compactor das Verfahren aus Ausgabe 7/85 (Zählen gleicher Bytefolgen) angewandt, da es besonders bei Spielen mit viel Grafik sehr effizient arbeitet.

Däs Programm, das gekürzt werden soll, muß ab dem Basic-Start (Adresse $0801) in den Speicher geladen werden (also laden mit »LOAD"Name",8«) und darf nicht längerals 48639 Bytes sein. Nach dem Kürzen steht eine SYS-Zeile am Anfang, die den Entpacker startet. Dieser wandelt den komprimierten Code wieder in ein lesbares Programm. Auch Basic-Programme können auf diese Weise von dem Computer bearbeitet werden. Mit »RUN« wird dann zuerst der Entpacker gestartet, der dann nach abgeschlossener Umwandlung das eigentliche Basic-Programm ausführt.

Beispiele zur Benutzung

Das Spiel »Fort Apocalypse«, das gerne als Maßstab für die Güte eines Compactors herangezogen wird, belegt normalerweise 153 Blocks auf der Diskette. Nach der Behandlung schrumpft der Platzbedarf auf 74 Blocks. Doch vor allem bei Basic-Programmen zeigt sich die Stärke des Packers: Sie schrumpfen im Schnitt um zirka 20 Prozent, auch wenn sie überhaupt keine Folgen gleicher Bytes enthalten.

  1. Eingabe des Listings »File-Compactor« mit dem MSE.
  2. Den Verdichter mit »LOAD".. ",8« laden und mit »RUN« starten. Der Verschiebelader befördert die Routine automatisch in den richtigen Speicherbereich.
  3. Jetzt kann man das zu kürzende Programm nachladen.
  4. Den Compactor mit »SYS 51000« aufrufen. Nach getaner Arbeit zeigt er den Grad der Verdichtung (in Prozent) an.
  5. Sofern man der Meinung ist, daß sich der Aufwand lohnt, kann man das Programm danach wieder mit »SAVE".." ,8« abspeichern.

Modifizierte SAVE-Routine

Wenn Programme gekürzt werden sollen, die nicht in den Basic-Speicher passen und sich bis unter das ROM erstrecken, dann gibt es allerdings Probleme mit dem Abspeichern. Für diesen Fall wurde eine modifizierte SAVE-Routine implementiert. Statt »SAVE ".." ,8« gibt man in diesem Fall »SYS 50965 ".."« ein; die Geräteadresse 8 wird in diesem Fall automatisch gesetzt.

(Arndt Brenschede/ev)
PROGRAMM : FILE-COMPACTOR 0801 0E0F
-----------------------------------
0801 : 0D 08 C1 07 9E 32 30 36   0C
0809 : 33 3A A2 00 00 00 A2 05   97
0811 : A0 00 B9 31 08 99 15 C7   77
0819 : C8 D0 F7 EE 15 08 EE 18   A2
0821 : 08 CA 10 EE B9 6F 0C 20   F8
0829 : D2 FF C8 C0 5E D0 F5 60   4A
0831 : A5 34 48 A9 CF 85 34 20   72
0839 : D4 E1 A9 36 85 01 A9 08   46
0841 : 85 BA A6 2D A4 2E A9 2B   2B
0849 : 20 D8 FF A9 37 85 01 68   7F
0851 : 85 34 60 A5 2E C9 09 B0   74
0859 : 03 4C 48 B2 C9 C6 B0 F9   74
0861 : A0 00 98 99 00 CD 99 00   2F
0869 : CE 99 00 CF C8 D0 F4 B9   58
0871 : 8B CB 20 D2 FF C8 C0 2E   EA
0879 : D0 F5 A5 2D A6 2E 85 FD   41
0881 : 86 FE A9 00 A2 C7 85 FB   67
0889 : 86 FC A9 36 85 01 A2 00   A9
0891 : 20 11 CB 85 FA E8 F0 0A   AC
0899 : 20 11 CB 90 37 C5 FA F0   B6
08A1 : F4 24 CA A4 FA 85 FA 20   F6
08A9 : 91 C7 F0 E9 C0 F3 F0 1E   43
08B1 : E0 04 B0 0A 98 48 20 2A   A1
08B9 : CB 68 CA D0 F8 60 98 20   BA
08C1 : 2A CB 8A 20 2A CB A9 F3   07
08C9 : 20 2A CB A2 00 60 E0 04   D4
08D1 : B0 EC 90 EE A4 FA 20 91   BF
08D9 : C7 BD B9 CB 9D 01 08 BD   E4
08E1 : B9 CC 9D 01 09 E8 D0 F1   87
08E9 : 8A 9D 69 09 E8 D0 F9 8A   CF
08F1 : A8 B9 01 CF D9 00 CF 90   AE
08F9 : 36 D0 08 B9 00 CE D9 01   B0
0901 : CE B0 2C B9 00 CE 48 B9   75
0909 : 00 CF 48 B9 69 09 AA B9   37
0911 : 01 CE 99 00 CE B9 01 CF   3E
0919 : 99 00 CF B9 6A 09 99 69   05
0921 : 09 8A 99 6A 09 68 99 01   5F
0929 : CF 68 99 01 CE A2 01 C8   4A
0931 : C0 FF D0 BD CA F0 B8 A9   47
0939 : 37 85 01 A9 00 38 E5 FB   FA
0941 : 85 63 A9 C7 E5 FC 85 62   FC
0949 : A2 90 38 20 49 BC A9 91   8A
0951 : 8D 00 CD A9 00 A0 CD 20   03
0959 : 0F BB A2 05 A0 CD 20 D4   32
0961 : BB 20 49 CB 86 FA A4 FA   C1
0969 : B9 00 CE 85 63 B9 00 CF   2A
0971 : 85 62 A2 90 38 20 49 BC   05
0979 : A5 61 D0 03 4C ED C8 A9   0E
0981 : 05 A0 CD 20 28 BA A9 57   FB
0989 : A0 00 20 67 B8 20 CA BB   4D
0991 : A9 5C A0 00 20 50 B8 A9   4B
0999 : 91 8D 00 CD A2 0A A0 CD   43
09A1 : 20 D4 BB A9 00 85 F9 8D   7F
09A9 : 01 CD A9 90 38 E5 F9 8D   C3
09B1 : 0F CD A9 0F A0 CD 20 A2   31
09B9 : BB A9 0A A0 CD 20 67 B8   CC
09C1 : 46 66 A9 00 A0 CD 20 5B   54
09C9 : BC C9 FF D0 0F A2 00 A0   CB
09D1 : CD 20 D4 BB E6 F9 A5 F9   24
09D9 : C9 10 D0 CE A4 F9 88 B9   68
09E1 : F0 CD 18 69 01 99 F0 CD   27
09E9 : A9 91 38 E5 F9 8D 0F CD   09
09F1 : A9 5C A0 00 20 A2 BB A9   4A
09F9 : 0F A0 CD 20 67 B8 20 C7   1C
0A01 : BB E6 FA F0 03 4C 4B C8   5D
0A09 : A9 91 8D 0F CD A9 0F A0   68
0A11 : CD 20 A2 BB A9 5C A0 00   0E
0A19 : 20 50 B8 A5 61 C9 81 90   D0
0A21 : 5C A9 8F 38 E5 61 A8 A5   94
0A29 : 66 30 32 B9 F0 CD D0 04   34
0A31 : 88 10 F8 60 AA CA 8A 99   6A
0A39 : F0 CD C8 B9 F0 CD AA E8   73
0A41 : 8A 99 F0 CD A2 80 8E 10   16
0A49 : CD 84 F9 A9 90 38 E5 F9   62
0A51 : 8D 0F CD A9 0F A0 CD 20   7C
0A59 : 67 B8 4C 00 C9 C8 B9 F0   DB
0A61 : CD D0 05 C0 0F D0 F6 60   04
0A69 : AA CA 8A 99 F0 CD 88 B9   61
0A71 : F0 CD AA E8 8A 99 F0 CD   E4
0A79 : C8 A2 00 F0 C9 A2 00 BD   DE
0A81 : 69 09 A8 8A 99 00 CE A9   12
0A89 : 00 9D 00 CF E8 D0 F0 20   6B
0A91 : 49 CB 8E 10 CD A9 00 85   9B
0A99 : F9 85 FA A4 FA B9 F0 CD   85
0AA1 : 85 63 A9 00 85 62 A2 90   59
0AA9 : 38 20 49 BC A9 90 38 E5   A7
0AB1 : FA 8D 0F CD A9 0F A0 CD   21
0AB9 : 20 28 BA A9 57 A0 00 20   8C
0AC1 : 67 B8 20 CA BB 20 9B BC   8A
0AC9 : A5 FA 0A A8 A5 65 AA 99   E6
0AD1 : D0 CD C8 A5 64 99 D0 CD   61
0AD9 : D0 09 8A D0 06 A5 F9 D0   02
0AE1 : 0C F0 02 E6 F9 E6 FA A5   D1
0AE9 : FA C9 10 D0 AE A0 00 84   DF
0AF1 : F8 84 F9 A4 F8 B9 F0 CD   FB
0AF9 : 48 18 79 BF CD 99 C0 CD   EC
0B01 : 68 A8 C0 00 F0 10 88 A6   EC
0B09 : F9 BD 69 09 AA A5 F8 9D   53
0B11 : 00 CF E6 F9 D0 EC E6 F8   F4
0B19 : A5 F8 C9 10 D0 D5 A9 36   7D
0B21 : 85 01 AC CF CD 88 98 18   00
0B29 : 69 6A 85 FD 8D 4B 08 A9   8F
0B31 : 08 85 FF 69 01 85 FE 8D   7C
0B39 : 47 08 A0 00 84 F7 84 F8   B8
0B41 : B1 FB E6 FB D0 02 E6 FC   DC
0B49 : AA A5 FC C9 C7 90 06 A5   A2
0B51 : FB C9 01 B0 5A BD 00 CF   BA
0B59 : A8 BD 00 CE 38 F9 BF CD   A8
0B61 : 84 FA C0 08 B0 08 85 F8   E7
0B69 : 98 69 08 A8 90 02 85 F7   EC
0B71 : C0 0F F0 07 06 F7 26 F8   81
0B79 : C8 D0 F5 A5 FA F0 10 0A   67
0B81 : A8 B9 CE CD 65 F7 85 F7   8F
0B89 : B9 CF CD 65 F8 85 F8 06   F5
0B91 : F7 26 F8 26 F9 C6 FF D0   16
0B99 : 10 A9 08 85 FF A0 00 A5   81
0BA1 : F9 91 FD E6 FD D0 02 E6   FB
0BA9 : FE C6 FA 10 E2 30 8B A6   F6
0BB1 : FF E0 08 F0 0E A5 F9 0A   4B
0BB9 : CA D0 FC 91 FD E6 FD D0   0D
0BC1 : 02 E6 FE A9 37 85 01 A2   14
0BC9 : 1E BD BE CD 9D 3A 09 BD   7A
0BD1 : CF CD 9D 4A 09 CA D0 F1   46
0BD9 : A2 10 CA BD F0 CD F0 FA   25
0BE1 : 8E FB 08 A4 FE A5 FD 85   24
0BE9 : 63 D0 01 88 C6 63 98 38   60
0BF1 : E9 08 85 62 A2 90 20 49   4E
0BF9 : BC 20 0C BC A4 2E 8C A0   8F
0C01 : 08 A5 2D 8D 9E 08 85 63   E0
0C09 : D0 01 88 C6 63 98 38 E9   04
0C11 : 08 85 62 A2 90 20 49 BC   71
0C19 : 20 14 BB A5 FD A6 FE 85   03
0C21 : 2D 86 2E 20 E2 BA 20 E2   6B
0C29 : BA 4C D7 BD A0 00 A5 FD   53
0C31 : D0 02 C6 FE C6 FD B1 FD   B3
0C39 : A4 FE C0 08 18 D0 04 A4   EF
0C41 : FD F0 01 38 60 A4 FB D0   BA
0C49 : 02 C6 FC C6 FB A0 00 91   AE
0C51 : FB A8 B9 00 CE 18 69 01   64
0C59 : 99 00 CE B9 00 CF 69 00   01
0C61 : 99 00 CF 60 A2 0A A9 00   1B
0C69 : 95 56 CA D0 FB 60 41 55   68
0C71 : 46 52 55 46 20 3A 20 53   F9
0C79 : 59 53 35 31 30 30 30 0D   4F
0C81 : 55 45 42 45 52 4C 41 4E   DB
0C89 : 47 45 20 50 52 47 27 53   28
0C91 : 20 53 50 45 49 43 48 45   72
0C99 : 52 4E 20 3A 20 53 59 53   0A
0CA1 : 35 30 39 36 35 0D 12 46   94
0CA9 : 4C 45 58 49 42 4C 45 20   B3
0CB1 : 43 4F 44 45 20 43 4F 4D   4A
0CB9 : 50 41 43 54 4F 52 20 41   90
0CC1 : 2E 42 52 45 4E 53 43 48   6B
0CC9 : 45 44 45 0D 52 45 53 54   69
0CD1 : 20 3A 20 25 0E 08 CA A8   59
0CD9 : 9E 32 30 36 35 20 46 43   57
0CE1 : 43 00 00 00 A0 00 B9 69   E8
0CE9 : 07 99 00 CD B9 69 08 99   B1
0CF1 : 00 CE B9 69 09 99 00 CF   F1
0CF9 : C8 D0 EB 4C C2 CD 78 A0   6B
0D01 : FF 84 FB A9 C6 85 FC A9   56
0D09 : 36 85 01 8D 20 D0 C8 A5   EB
0D11 : 2D D0 02 C6 2E C6 2D A6   1B
0D19 : 2E E0 30 D0 04 C9 01 F0   52
0D21 : 0F B1 2D 91 FB A5 FB D0   05
0D29 : 02 C6 FC C6 FB 4C D3 CD   B3
0D31 : A2 08 A9 01 86 2E 85 2D   AC
0D39 : 84 FF 20 50 CE C9 F3 D0   7C
0D41 : 27 20 50 CE AA 86 FA C9   C5
0D49 : 04 B0 04 A9 F3 D0 03 20   EE
0D51 : 50 CE A0 00 91 2D C8 C6   64
0D59 : FA D0 F9 98 18 65 2D 85   B9
0D61 : 2D 90 02 E6 2E 4C 34 CE   E7
0D69 : A0 00 91 2D E6 2D F0 F3   97
0D71 : A9 01 A2 60 E4 2E D0 C2   D8
0D79 : C5 2D D0 BE A9 37 85 01   4D
0D81 : A9 FE 8D 20 D0 58 20 59   14
0D89 : A6 4C AE A7 A2 FF 86 F7   2A
0D91 : 86 F8 E8 A9 01 85 FE A9   8E
0D99 : 7F 85 FD C6 FF 10 10 E6   C1
0DA1 : FB D0 02 E6 FC A9 07 85   A6
0DA9 : FF A0 00 B1 FB 85 F9 06   0E
0DB1 : F9 B0 0A A4 FE A5 FD 39   A1
0DB9 : F7 00 99 F7 00 8A 0A A8   E3
0DC1 : A5 F7 38 F9 E2 CE A5 F8   DC
0DC9 : F9 E3 CE 90 0E E0 0D F0   77
0DD1 : 0A E8 38 66 FD B0 C4 C6   30
0DD9 : FE F0 BC 8A F0 0F A5 F7   DE
0DE1 : 38 F9 E0 CE 85 F7 A5 F8   C8
0DE9 : F9 E1 CE 85 F8 A4 FE F0   CA
0DF1 : 07 A5 F8 85 F7 88 84 F8   81
0DF9 : A5 FD 4A 90 07 46 F8 66   95
0E01 : F7 4C BE CE BD D2 CE 65   20
0E09 : F7 A8 B9 00 CF 60         F1
Listing »File-Compactor« (Bitte mit dem MSE eingeben. Beachten Sie die Hinweise auf Seite 8)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →