home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
sh2x
/
sh24b.d64
/
packer.src-giga
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
15KB
|
468 lines
10 ; PROGRAMM ZUR DEMONSTRATION DER
20 ; FUNKTIONSWEISE VON PACKERN
30 ;
40 ; BY DIRK NEUMEISTER
50 ; IM TRIESCH 28
60 ; 3503 LOHFELDEN
70 ; TEL.: KS/518475
80 ;
120 ;
130 ;
140 ;
150 ;
160 ; PROGRAMMSTART AUF $C000 = 49152
170 ;
180 +$C000
190 ;
200 ; DEFINITION VON ROM-ROUTINEN
210 ;
220 TOSTRAUSG=$AB1E
230 TOGETBYTE=$B79E
240 TOPRINTFAC=$BDD7
250 TOKOMMA=$AEFD
260 TOINTHOLEN=$AD8A
270 TOWANDELN=$B7F7
280 TOFACMAL10=$BAE2
290 TOINFAC=$B395
300 TOCOPYFACII=$BC0C
310 TOFACDIV=$BB14
1000 ;
1010 ; ALLGEMEINER COMPACTOR START
1020 ;
1030 ; SYS 49152, ADR2, ADR3, ADR4, MODE
1040 ; MIT AUSGAGE DER LAENGE IN % UND DER ENDADRESSE
1050 ;
1060 MID$#<(REST); ZEIGER FUER DEN TEXT LADEN, UM DEN
1070 LEN#>(REST); HINWEIS AUF DIE RESTLAENGE AUSZUGEBEN
1080 (null)STRAUSG; TEXT AUSGEBEN
1090 (null)HOLEN; STARTADRESSE DER UNGEPACKTEN DATEN HOLEN
1100 MID$#$FB
1110 (null)COPY; UND DIESE NACH $FB/$FC COPIEREN
1120 (null)HOLEN; ENDADRESSE DER UNGEPACKTEN DATEN HOLEN
1130 RIGHT$$14; DIE ENDADRESSE UM EINS ERHOEHEN
1140 (null)COMP3;
1150 RIGHT$$15;
1160 COMP3 MID$#$FD
1170 (null)COPY; UND NACH $FD/$FE COPIEREN
1180 (null)HOLEN; STARTADR. DER GEPACKTEN DATEN NACH $14/15 LADEN
1190 (null)KOMMA; DEN RESTLICHEN AUSDRUCK AUF KOMMA PRUEFEN
1200 (null)GETBYTE; EIN WEITERES BYTE IN X-REGISTER HOLEN (MODUS)
1210 MID$#$F7; DIE STARTADRESSE DER GEPACKTEN DATEN
1220 (null)COPY; NACH $F7/$F8 COPIEREN
1230 (null)PROZENT; PROZENTROUTINE 1 AUFRUFEN (ERSTE BERECHNUNG)
1240 (null); MODUSBYTE IN AKKU COPIEREN
1250 LEFT$#$A8; MIT EXOR 10101000 VERKNUEPFEN
1260 (null)AUSGABE; MODUSBYTE SPEICHERN
1270 (null)AUSGABE; DUMMY FUER ENDADRESSE SETZEN
1280 (null)AUSGABE; DUMMY FUER ENDADRESSE SETZEN
1290 (null); X-REGISTER COPIEREN, FLAGS WERDEN GESETZT
1300 (null)COMP1; WENN <> 0, DANN MIT NIBBLER ARBEITEN
1310 (null)PACKEN; SONST MIT PACKER ARBEITEN
1320 (null)COMP2
1330 COMP1 (null)NIBBLER; NIBBLER AUFRUFEN
1340 MID$#$EE; AKKU MIT $EE LADEN UND NIBBLER ERNEUT AUFRUFEN
1350 (null)NIBBLER3; DAMIT DAS LETZTE BYTE AUCH GESPEICHERT WIRD
1360 COMP2 LEN#$01
1370 MID$$F7; ENDADRESSE SPEICHERN, WO VORHER DIE DUMMIES
1380 (null)($61),Y; GESTANDEN HABEN
1390 (null)
1400 MID$$F8
1410 (null)($61),Y
1420 (null)PROZENT2; PROZENTROUTINE 2 AUFRUFEN
1430 (null)PRINTFAC; RESTLAENGE DES PROGRAMMS AUSGEBEN
1440 (null)$AAD7; 2 MAL RETURN AUSGEBEN
1450 (null)$AAD7
1460 MID$$F8; ENDADRESSE DER GEPACKTEN DATEN LADEN
1470 PEEK$F7
1480 (null)$BDCD; UND EBENFALLS AUSGEBEN
1490 MID$#<(ENDADR); ZEIGER FUER DEN TEXT DER ENDADRESSE LADEN
1500 LEN#>(ENDADR)
1510 (null)STRAUSG; UND DEN TEXT AUSGEBEN
1520 (null)
2000 ;
2010 ; ALLGEMEINER DECOMPACTOR START
2020 ; SYS 49265, ADR2, ADR3
2030 ;
2040 DECOMP (null)HOLEN; STARTADRESSE DER GEPACKTEN DATEN HOLEN
2050 MID$#$FB
2060 (null)COPY; UND NACH $FB/$FC COPIEREN
2070 (null)NEXTBYTE; MODUSBYTE HOLEN
2080 (null); UND AUF STAPEL LEGEN
2090 (null)NEXTBYTE; ENDADRESSE DER GEPACKTEN DATEN AUS DEM
2100 (null)$35; SPEICHER LESEN UND NACH $35/$36 SPEICHERN
2110 (null)NEXTBYTE
2120 (null)$36
2130 (null)HOLEN; STARTADRESSE DER UNGEPACKTEN DATEN HOLEN
2140 MID$#$F7; CLOSE
2150 (null)COPY; NACH $F7/$F8 COPIEREN
2160 (null); STAPEL LESEN UND IN AKKU SPEICHERN
2170 LEFT$#$A8; CODIERUNG AUFHEBEN
2180 (null)DECOMP1; WENN AKKU <> 0, DANN NIBBLER AUFRUFEN
2190 (null)ENTPACKEN; SONST PACKER AUFRUFEN
2200 (null)
2210 DECOMP1 (null); AKKU IN X-REGISTER COPIEREN
2220 (null); X-REGISTER UM EINS VERRINGERN
2230 (null)DECOMP2; WENN X <> 0 (FEHLER), FALSCHE STARTADRESSE
2240 (null)DENI; SONST NIBBLER AUFRUFEN
2250 (null)
2260 DECOMP2 MID$#<(FEHLER); AUSGABE EINER FEHLERMELDUNG, DA DAS DECODIERTE
2270 LEN#>(FEHLER); MODUSBYTE WEDER NULL NOCH EINS WAR ==>
2280 (null)STRAUSG; FALSCHE STARTADRESSE ANGEGEBEN
2290 (null)
3000 ;
3010 ; UNTERROUTINEN FUER DIE
3020 ; ALLGEMEINEN EINSPRUNGADRESSEN
3030 ;
3040 HOLEN (null)KOMMA; PRUEFT AUF KOMMA
3050 (null)INTHOLEN; 16-BIT ZAHL IN FAC HOLEN
3060 (null)WANDELN; FAC WANDELN IN INTEGER $14/$15
3070 (null); ZURUECK
3080 ;
3090 COPY LEN#$01; ZAHLEN DER SPEICHERSTELLEN $14/$15
3100 (null)COPY1+1; IN DIE SPEICHERSTELLE COPIEREN, DIE IM
3110 COPY2 MID$$14,Y; AKKU (+1) STEHT
3120 COPY1 (null)$00,Y
3130 (null)
3140 (null)COPY2
3150 (null); UND WIEDER ZURUECK
4000 ;
4010 ; PACKER
4020 ; $FB/$FC = BEGINN DER UNGEPACKTEN DATEN
4030 ; $FD/$FE = ENDE DER UNGEPACKTEN DATEN
4040 ; $F7/$F8 = BEGINN DER GEPACKTEN DATEN
4050 ;
4060 PACKEN (null)NEXTBYTE; NAECHSTES BYTE IN AKKU HOLEN
4070 (null); BYTE VOM AKKU NACH X KOPIEREN
4080 (null)VERGLEICHE; BYTE IM AKKU MIT FOLGENDEN BYTES VERGLEICHEN
4090 (null)$A5; ANZAHL-1 DER GLEICHEN BYTES IN Y UND $A5
4100 ATN#03; ANZAHL-1 DER BYTES MIT #03 VERGLEICHEN
4110 (null)PACKEN1; WENN ANZAHL-1 < 3, DANN NICHT PACKEN
4120 (null); ANZAHL-1 IN DEN AKKU KOPIEREN
4130 (null); ADDITION VORBEREITEN
4140 VAL$FB; UM ANZAHL-1 DER GLEICHEN BYTES DEN
4150 (null)$FB; ZEIGER FUER UNGEPACKTE DATEN NACH VORNE, VER-
4160 (null)PACKEN2; SCHIEBEN, DAMIT NICHT DOPPELT ZUSAMMEN-
4170 RIGHT$$FC; GEFASST WIRD
4180 PACKEN2 TAN#00; VERGLEICHEN DER BYTES MIT $00
4190 (null)PACKEN3; WENN JA, DANN MIT $DB CODIEREN
4200 MID$#$DA; SONST MIT $DA BEGINNEN
4210 (null)AUSGABE; $DA SPEICHERN
4220 MID$$A5; ANZAHL-1 DER GLEICHEN BYTES IN AKKU
4230 (null)AUSGABE; UND ABSPEICHERN
4240 (null); CODE DER GLEICHEN BYTES IN AKKU
4250 (null)AUSGABE; UND EBENFALLS SPEICHERN
4260 (null)PACKEN4; UNBEDINGTER SPRUNG, DA AKKU = #$FF
4270 PACKEN3 MID$#$DB; #$DB ALS CODE FUER 00 IN AKKU LADEN
4280 (null)AUSGABE; UND IM SPEICHER ABLEGEN
4290 MID$$A5; ANZAHL-1 DER $00-BYTES IN AKKU
4300 (null)AUSGABE; UND EBENFALLS SPEICHERN
4310 (null)PACKEN4; UNBEDINGTER SPRUNG
4320 PACKEN1 TAN#$DA; VERGLEICHEN OB BYTE ZUFAELLIG $DA
4330 (null)PACKEN5
4340 TAN#$DB; ODER $DB IST
4350 (null)PACKEN6; WENN NICHT, VERZWEIGEN (EINFACHE AUSG.)
4360 PACKEN5 (null); $DA ODER $DB VOM X-REGISTER IN AKKU COPIEREN
4370 (null)AUSGABE; UND AUSGEBEN
4380 MID$#00; ANZAHL-1 LADEN
4390 (null)AUSGABE; UND EBENFALLS ABSPEICHERN
4400 (null)PACKEN4; UNBEDINGTER SPRUNG
4410 PACKEN6 (null); EINFACHE AUSGABE, D.H. CODE IN AKKU
4420 (null)AUSGABE; UND IM SPEICHERN ABLEGEN
4430 PACKEN4 MID$$FB
4440 PEEK$FC; VERGLEICHEN OB ENDE, WENN NEIN, DANN
4450 TAN$FE
4460 (null)PACKEN7
4470 STR$$FD
4480 PACKEN7 (null)PACKEN; VON VORNE WIEDER BEGINNEN
4490 (null); SONST RUECKSPRUNG AUS DER UNTERROUTINE
5000 ;
5010 ; ENTPACKEN
5020 ; $F7/$F8 = BEGINN DER UNGEPACKTEN DATEN
5030 ; $FB/$FC = BEGINN DER GEPACKTEN DATEN
5040 ; $35/$36 = ENDE DER GEPACKTEN DATEN
5050 ;
5060 ENTPACKEN (null)NEXTBYTE; NAECHSTES BYTE IN DEN AKKU LADEN
5070 STR$#$DB; MIT DEM ERKENNUNGSCODE $DB VERGLEICHEN
5080 (null)ENTPACKEN1; WENN AKKU <> #$DB DANN VERZWEIGEN
5090 (null)NEXTBYTE; SONST NAECHSTES BYTE HOLEN
5100 STR$#00; TEST, OB ANZAHL-1 DER GLEICHEN BYTE > 0
5110 (null)ENTPACKEN2; WENN NEIN, DANN VERZWEIGE
5120 MID$#$DB; ES WAR ALSO IM ORIGINAL EIN $DB, AKKU=$DB
5130 (null)ENTPACKEN3; UND VERZWEIGEN UM DIREKT SPEICHERN
5140 ENTPACKEN2 (null); ANZAHL-1 DER$00 IN D. X-REGISTER COPIEREN
5150 MID$#00; AKKU MIT DEM CODE (HIER #$00) LADEN
5160 (null)ENTPACKEN8; UND ENTPACKEN
5170 ENTPACKEN1 STR$#$DA; VERGLEICHEN OB BYTE = ERKENNUNGSCODE $DA IST
5180 (null)ENTPACKEN3; WENN NEIN, VERZWEIGEN UND BYTE AUSGEBEN
5190 (null)NEXTBYTE; NAECHSTES BYTE HOLEN
5200 STR$#00; TEST, CODE FUER GEPACKT ODER FUER $DA
5210 (null)ENTPACKEN4; WENN CODE FUER GEPACKT, DANN VERZWEIGE
5220 MID$#$DA; SONST LADE AKKU MIT $DA
5230 (null)ENTPACKEN3; UND VERZWEIGE ZUR DIREKTEN AUSGABE
5240 ENTPACKEN4 (null); ZAHL DER GLEICHEN BYTE -1 IN X-REIGSTER
5250 (null)NEXTBYTE; NOCH EIN BYTE HOLEN, (CODE DER GL. BYTE)
5260 ENTPACKEN8 (null); X MAL DEN INHALT DES AKKUS SPEICHERN
5270 LEN#00
5280 ENTPACKEN6 (null)($F7),Y
5290 (null)
5300 (null)
5310 (null)ENTPACKEN6; NOCH NICHT FERTIG, DANN WEITERMACHEN
5320 (null)
5330 (null)
5340 (null)
5350 VAL$F7; SPEICHERZEIGER WEITERSTELLEN, DAMIT
5360 (null)$F7; MAN NICHT DOPPELT IN DEN SPEICHER
5370 (null)ENTPACKEN9; GESCHRIEBEN WIRD
5380 RIGHT$$F8
5390 (null)ENTPACKEN9
5400 ENTPACKEN3 (null)AUSGABE; BYTE IN DEN SPEICHER SCHREIBEN
5410 ENTPACKEN9 MID$$35; TEST, OB SCHON ALLE BYTES ENTPACKT WURDEN
5420 PEEK$36
5430 TAN$FC
5440 (null)ENTPACKEN; WENN NEIN, WEITERMACHEN
5450 STR$$FB
5460 (null)ENTPACKEN
5470 (null); SONST FERTIG, D.H. RUECKSPRUNG
6000 ;
6010 ; UNTERROUTINEN FUER DEN PACKER
6020 ; UND DEN NIBBLER
6030 ;
6040 ;
6050 ;NAECHSTES BYTE HOLEN
6060 ;
6070 NEXTBYTE (null)
6080 LEN#$34; ROM AUSSCHALTEN
6090 (null)$01
6100 LEN#00; Y=NULL SETZEN
6110 MID$($FB),Y; DEN AKKU MIT DEM WERT DER SPEICHERSTELLE LADEN
6120 LEN#$37; ROM WIEDER ANSCHALTEN
6130 (null)$01
6140 (null)
6150 RIGHT$$FB; ZEIGER FUER BYTE HOLEN $(FB/FC) UM
6160 (null)NEXTBEND; EINS ERHOEHEN
6170 RIGHT$$FC
6180 NEXTBEND (null); UND WIEDER ZURUECKSPRINGEN
6190 ;
6200 ;AUSGABE
6210 ;
6220 AUSGABE LEN#00; LADE Y MIT NULL
6230 (null)($F7),Y; SPEICHERE AKKU IN DIE SPEICHERSTELLE,
6240 RIGHT$$F7; AUF DIE DER ZEIGER $(F7/F8) ZEIGT
6250 (null)AUSGABEND; ERHOEHE DEN ZEIGER DANN UM EINS
6260 RIGHT$$F8
6270 AUSGABEND MID$#$FF; LADE AKKU=$FF (FLAGS WERDEN BEEINFLUSST)
6280 (null); VERLASSE DIESE UNTERROUTINE WIEDER
6290 ;
6300 ;VERLGEICHEN
6310 ;
6320 VERGLEICHE LEN#00; HIER WIRD DAS Y-REGISTER NULL GESETZT
6330 VERGL1 STR$($FB),Y; VERGLEICHE DEN INHALT DES AKKUS MIT DER
6340 (null)VERGLEND; SPEICHERSTELLE, AUF DIE DER ZEIGER ZEIGT
6350 (null); ZAEHLE, WIE OFT SICH DIE BYTES GLEICHEN
6360 (null)VERGL1; MAX. ANZAHL IST DABEI 255 (FF)
6370 (null)
6380 VERGLEND (null); RUECKSPRUNG WENN DIE BYTES VERSCHIEDEN
6390 (null); SIND ODER DIE ANZAHL GROESSER ALS 255 IST
6400 ;
6410 ; NIBBLER ZUSAMMENFASSEN
6420 ;
6430 ZUSAM (null); WERT DES NIBBLES IN DAS Y-REGISTER KOPIEREN
6440 MID$BITLAENGE,Y; DIE BITLAENGE DES NEUEN CODES IN DEN AKKU
6450 (null); LADEN UND DANN NACH X KOPIEREN
6460 MID$CODE,Y; DEN NIBBLECODE AUFGRUND SEINES WERTES LADEN
6470 LEN$F9; FREIE BITS IN DAS Y-REGISTER LADEN
6480 ZUSAM2 (null)
6490 (null)$FA; BITS AUSTAUSCHEN CLOSE
6500 (null)
6510 (null)ZUSAM1; WENN BYTE NOCH NICHT VOLL, DANN VERZWEIGE
6520 (null); AKKU AUF DEN STAPEL LEGEN
6530 MID$$FA; DEN NEU ZUSAMMENGESTELLTEN WERT LADEN
6540 (null)AUSGABE; UND AUSGEBEN
6550 LEN#$08; ES SIND WIEDER ACHT BITS FREI
6560 (null); AKKU WIEDER VOM STAPEL HOLEN
6570 ZUSAM1 (null); NOCH VERBLEIBENDE CODELAENGE UM EINS VERMINDERN
6580 (null)ZUSAM2; UND WEITERMACHEN, BIS DER CODE COPIERT WURDE
6590 (null)$F9; ZAHL DER NOCH FREIEN BITS ZWISCHENSPEICHERN
6600 (null); UND ZURUECKSPRINGEN
6610 ;
6620 ; NIBBLER WIEDER AUSEINANDER ZIEHEN
6630 ;
6640 ENTNI PEEK#$0F; SCHLEIFENZAEHLER (X-REGISTER) MIT 16 LADEN
6650 ENTNI2 MID$$FD
6660 ASCMASKE,X; DAS BYTE MIT DER MASKE VERKNUEPFEN
6670 STR$CODE,X; ZAHL DER NOCH FREIEN BYTES UM EINS VERRINGERN
6680 (null)ENTNI1; WENN UEBEREINSTIMMUNG, DANN VERZWEIGEN
6690 (null); SONST ZAEHLER UM EINS ERNIEDRIGEN
6700 (null)ENTNI2; UND WEITER SUCHEN
6710 ENTNI1 (null)$FA; CODENUMMER ZWISCHENSPEICHERN
6720 MID$BITLAENGE,X; BITLAENGE LADEN
6730 (null); UND IN DAS X-REGISTER KOPIEREN
6740 LEN$F9; ANZAHL DER RESTLICHEN BITS IN Y LADEN
6750 ENTNI4 (null)$FE; UND AUSTAUSCHEN
6760 (null)$FD
6770 (null); ANZAHL DER BITS, DIE NOCH ZU VERFUEGUNG STEHEN
6780 (null)ENTNI3; WENN DIESE GLEICH NULL IST, NICHT VERZWEIGEN
6790 (null);
6800 (null); Y-REGISTER UND AKKU AUF STAPEL RETTEN
6810 (null)
6820 (null)
6830 (null)ENDE; TEST, OB BEREITS ALLE BYTES DECOMPREMIERT
6840 ATN#$F8; WURDEN, WENN JA, IST Y = $F8 UND
6850 (null)ENTNI6; DANN VERZWEIGEN
6860 (null)NEXTBYTE; SONST NEUES BYTE HOLEN
6870 (null)$FE; UND AUF $FE SPEICHERN
6880 ENTNI6 (null); AKKU UND X-REGISTER WIEDER VOM STAPEL HOLEN
6890 (null)
6900 (null)
6910 ATN#$F8; WENN ALLE BYTES DECODIERT WURDEN, (Y=$F8)
6920 (null)ENTNI5; DANN VERZWEIGEN ZUM RUECKSPRUNG
6930 LEN#$08; ES SIND WIEDER 8 BITS DA
6940 ENTNI3 (null); BITLAENGE DER CODE UM EINS ERNIEDRIGEN
6950 (null)ENTNI4; WENN NOCH NICHT NULL, WIEDER VON VORNE
6960 (null)$F9; ANZAHL DER NOCH FREIEN BITS SPEICHERN
6970 MID$$FA; CODEWERT LADEN (DIES IST EIN NIBBLE)
6980 ENTNI5 (null); UND ZURUECK
6990 ;
7000 ; TEST AUF ENDE
7010 ;
7020 ENDE MID$$35; ENDADRESSE IN AKKU UND X-REGISTER LADEN
7030 PEEK$36
7040 TAN$FC; MIT DER AKTUELLEN LADEADRESSE VERGLEICHEN
7050 (null)ENDE1
7060 STR$$FB
7070 (null)ENDE1; WENN KLEINER, DANN WEITER
7080 LEN#$F8; WENN GLEICH, Y-CODE FUER ENDE ($F8) LADEN
7090 ENDE1 (null); UND ZURUECK SPRINGEN
8000 ;
8010 ; NIBBLE - PACKER
8020 ; $FB/$FC = BEGINN DER UNGEPACKTEN DATEN
8030 ; $FD/$FE = ENDE DER UNGEPACKTEN DATEN
8040 ; $F7/$F8 = BEGINN DER GEPACKTEN DATEN
8050 ;
8060 NIBBLER MID$#$08; ANZAHL DER FREIEN BITS IN EINEM BYTE LADEN
8070 (null)$F9; UND NACH $F9 SPEICHERN
8080 NIBBLER1 (null)NEXTBYTE; NEUES BYTE HOLEN
8090 NIBBLER3 (null); BYTE AUF STAPEL ZWISCHENSPEICHERN
8100 (null); HI-NIBBLE NACH RECHTS SCHIEBEN
8110 (null); LOW-NIBBLE LOESCHEN
8120 (null)
8130 (null)
8140 (null)ZUSAM; UND CODIEREN
8150 (null); BYTE WIEDER VOM STAPEL HOLEN
8160 ASC#$0F; HIGH-NIBBLE LOESCHEN, LOW NIBBLE BLEIBT UEBRIG
8170 (null)ZUSAM; UND AUCH DIESES CODIEREN
8180 MID$$FB
8190 PEEK$FC; TESTEN, OB BEREITS ALLE BYTES CODIERT WURDEN
8200 TAN$FE
8210 (null)NIBBLER2; WENN NEIN, WEITERMACHEN
8220 STR$$FD
8230 NIBBLER2 (null)NIBBLER1
8240 (null); SONST RUECKSPRUNG
9000 ;
9010 ; ENTPACKEN
9020 ; $F7/$F8 = BEGINN DER UNGEPACKTEN DATEN
9030 ; $FB/$FC = BEGINN DER GEPACKTEN DATEN
9040 ; $35/$36 = ENDE DER GEPACKTEN DATEN
9050 ;
9060 DENI RIGHT$$35; ENDADRESSE UM EINS ERHOEHEN
9070 (null)DENI3
9080 RIGHT$$36
9090 DENI3 (null)NEXTBYTE; EIN BYTE HOLEN
9100 (null)$FD; UND ZWISCHENSPEICHERN
9110 (null)NEXTBYTE; EIN WEITERES BYTE HOLEN
9120 (null)$FE; EBENFALLS ZWISCHENSPEICHERN
9130 MID$#$08; ANZAHL DER FREIEN BITS IN EINEM BYTE IST 08
9140 (null)$F9; DIESE EBENFALLS SPEICHERN
9150 DENI1 (null)ENTNI; HI-NIBBLE DECODIEREN
9160 ATN#$F8; TEST AUF ENDE (Y = $F8)
9170 (null)DENI2; WENN JA, VERZWEIGEN ZUM RUECKSPRUNG
9180 (null); SONST HI-NIBBLE NACH LINKS VERSCHIEBEN
9190 (null)
9200 (null)
9210 (null)
9220 (null); AUF STAPEL LEGEN
9230 (null)ENTNI; LOW-NIBBLE DECODIEREN
9240 (null); AKKU WIEDER VOM STAPEL LADEN
9250 ATN#$F8; WENN ENDE DER DATEN (Y = $F8)
9260 (null)DENI2; DANN VERZWEIGE ZUM RUECKSPRUNG
9270 (null)$FA; LOW- UND HIGH-NIBBLE VERKNUEPFEN
9280 (null)AUSGABE; UND AUSGEBEN
9290 (null)DENI1; WEITERMACHEN
9300 DENI2 (null); RUECKSPRUNG
10000 ;
10010 ; PROZENTSATZ DER COMPREMIERUNG
10020 ; BERECHNEN (ERSTER AUFRUF)
10030 ; $FB/$FC = BEGINN DER UNGEPACKTEN DATEN
10040 ; $FD/$FE = ENDE DER UNGEPACKTEN DATEN
10050 ; ==> $35/$36 = ERGEBNIS DER DIFFERENZ
10060 ; $F7/$F8 (BEGINN DER GEPACKTEN DATEN) IN $61/$62 ZWISCHENSPEICHERN
10070 ;
10080 PROZENT (null);SUBTRAKTION VORBEREITEN
10090 (null)
10100 MID$$FD; LAENGE DER UNGEPACKTEN
10110 (null)$FB; DATEN BERECHNEN UND IN
10120 (null)$35; $35/$36 ZWISCHENSPEICHERN
10130 MID$$FE
10140 (null)$FC
10150 (null)$36
10160 MID$$F7; BEGINN DER GEPACKTEN DATEN RETTEN
10170 (null)$61; INDEM MAN SIE IN $61/$62 ZWISCHENSPEICHERT
10180 MID$$F8
10190 (null)$62
10200 (null); UND ZURUECKSPRINGEN
10210 ;
10220 ; PROZENTSATZ DER COMPREMIERUNG
10230 ; BERECHNEN (ZWEITER AUFRUF)
10240 ; $F7/$F8 = ENDE DER GEPACKTEN DATEN
10250 ; $61/$62 = BEGINN DER GEPACKTEN DATEN
10260 ; $35/$36 = LAENGE DER UNGEPACKTEN DATEN
10270 ; BEIM RUECKSPRUNG ENTHAELT FAC I DEN PROZENTANTEIL
10280 ;
10290 PROZENT2 (null); SUBTRAKTION VORBEREITEN
10300 (null)
10310 MID$$F7; LAENGE DER GEPACKTEN DATEN BERECHNEN
10320 (null)$61
10330 (null)
10340 MID$$F8
10350 (null)$62
10360 (null)INFAC; UND IN FLIESSKOMMAAKKU I (FAC I) WANDELN
10370 (null)COPYFACII; UND IN DEN FAC II COPIEREN
10380 LEN$35
10390 MID$$36; LAENGE DER UNGEPACKTEN DATEN LADEN
10400 (null)INFAC; UND EBENFALLS IN FAC SPEICHERN
10410 (null)FACDIV; DIVISION VON FAC UND FAC II
10420 (null)FACMAL10; FAC = FAC *10
10430 (null)FACMAL10; UND NOCHMAL (==> PROZENTANTEIL AUSRECHNEN)
10440 (null); UND WIEDER ZURUECK
11000 ;
11010 ; DATEN, TEXT UND FEHLERMELDUNGEN
11020 ; FUER DAS PROGRAMM
11030 ;
11040 CODE FN$00,$A0,$A8; NEUE CODES, DIE STATT EINES NIBBLES
11050 FN$B0,$B8,$C0; GESPEICHERT WERDEN
11060 FN$C8,$F0,$D0
11070 FN$D8,$E0,$F4
11080 FN$E8,$F8,$FC
11090 FN$80
11100 MASKE FN$80,$F8,$F8; MASKE, UM DIE UNNOETIGEN BITS ZU LOESCHEN
11110 FN$F8,$F8,$F8; UND DIE CODES ZU IDENTIFIZIEREN
11120 FN$F8,$FC,$F8
11130 FN$F8,$F8,$FC
11140 FN$F8,$FC,$FC
11150 FN$E0
11160 BITLAENGE FN$01,$05,$05; LAENGE DER NEUEN CODES
11170 FN$05,$05,$05
11180 FN$05,$06,$05
11190 FN$05,$05,$06
11200 FN$05,$06,$06
11210 FN$03
11220 REST FN13
11230 NOT"ANZAHL DER GEPACKTEN DATEN IM VERHAELT-
11240 [165]13
11250 [168]"NIS ZUM ORIGINAL IN %: CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD
11260 FN0
11270 ENDADR NOT" = ENDADRESSE DER GEPACKTEN DATEN
11280 [165]0
11290 FEHLER [168]"WIE BITTE? DIE STARTADRESSE IST FALSCH!
11300 FN13,13,0