Die Komprimierung in Pokémon G/S

(ALLE RECHNUNGEN ERFOLGEN IM HEX-SYSTEM)

 

00 bis 1F

( x = Kontrollbyte - 00 )

Die nächsten x+1 Bytes werden in den Ram geladen.

 

z.B. 021A2B3C -> 1A2B3C

 

20 bis 3F

( x = Kontrollbyte - 20 )

Das nächste Byte wird x + 1 mal in den Ram geladen.

 

z.B. 231A -> 1A1A1A1A

 

40 bis 5F

( x = Kontrollbyte - 40 )

Die nächsten 2 Bytes werden geladen und x + 1 mal in den Ram geladen.

 

z.B. 421A2B -> 1A2B1A

 

60 bis 7F

( x = Kontrollbyte - 60 )

Es wird x + 1 mal "00" in den Ram geladen.

 

z.B. 71 -> 000000000000000000000000000000000000

 

80 bis 9F

( x = Kontrollbyte – 80 )

Das nächste Byte heißt A.

 

Dann rechnet man A AND 80.

Wenn das Ergebnis <> 0 dann:

 

Bytes zurück zu gehen = A AND 7F + 1

Bytes zu kopieren = Kontrollbyte AND 1F + 1

 

z.B. Im Ram steht schon "1A2B3C" und jetzt kommt der Befehl 8182.

     Man rechnet nun 82 AND 80 = 80. 80 <> 0 also:

 

     Bytes zurück zu gehen = 82 AND 7F + 1 = 3

     Bytes zu kopieren = 81 AND 1F + 1 = 2

 

     Man gehe im Ram nun 3 Bytes zurück und kopiere 2 Bytes. -> 1A2B

 

Wenn das Ergebnis = 0 dann:

Das nächste Byte heißt B.

 

     Position = ( A * 100 ) + B

     Bytes zu kopieren = x + 1

    

z.B. Im Ram steht schon "1A2B3C" und jetzt kommt der Befehl 810001.

     Man rechnet nun 00 AND 00 = 0. 0 = 0 also:

 

     Position = ( 00 * 100 ) + 01 = 01

     Bytes zu kopieren = 1 + 1 = 2

 

     Man gehe im Ram nun 1 Byte von der Startposition weg und kopiere 2 Bytes. -> 2B3C

 

A0 bis BF

Dieser Befehl ist dasselbe wie der Befehl 80 bis 9F.

Nur dieses mal wird die Bitfolge des zu Kopierenden umgekehrt.

 

z.B. Es sollen die Bytes 1A2B in den Ram geladen werden.

       1A Hex = 00011010 Bin und 2B Hex = 00011011 Bin

     Ungedreht ist es 01011000 Bin und 11011000 Bin.

     Wieder in Hex umrechen:

       01011000 Bin = 58 Hex und 11011000 Bin = D8 Hex

     Es wird also 58D8 in den Ram geladen.

 

C0 bis DF

Dieser Befehl ist dasselbe wie der Befehl 80 bis 9F.

Nur dieses mal wird von Hinten nach Vorne kopiert.

 

z.B. Im Ram steht schon "1A2B3C" und jetzt kommt der Befehl C181.

     Man rechnet nun 81 AND 80 = 80. 80 <> 0 also:

 

     Bytes zurück zu gehen = 81 AND 7F + 1 = 2

     Bytes zu kopieren = C1 AND 1F + 1 = 2

 

     Man gehe im Ram nun 2 Byte zurück und kopiere 2 Bytes rückwärts. -> 2B1A

     Achtung: Beim Kopieren ist zu beachten, dass das Byte nach der Position mitgenommen wird.

     Man gehe 2 Byte zurück -> Position

                                   |

                                   V

                                 1A 2B3C

     Das Byte was zuerst kopiert wird ist nicht 1A sondern 2B!

   

E0 bis FE

Dieser Befehl erzeugt ein neues Kontrollbyte.

Das nächste Byte heißt A.

Man rechnet:

 

neues Kontrollbyte = ( Kontrollbyte AND 1C ) * 8

x = ( Kontrollbyte AND 3 ) * 100 + A

 

z.B. E4221A

     ( E4 AND 1C ) * 8 = 20 <- neues Kontrollbyte ( Das nächste Byte wird x + 1 mal in den Ram geladen. )

     ( E4 AND 3 ) * 100 + 22 = 23 <- das ist x

 

     Es wird also das Byte "1A" 35 mal in den Ram geladen. ( 23 Hex = 35 Dez )

 

FF

Beendet die Komprimierung

 

©2004 Lug2k ( lugia2000_fwb@yahoo.de ) bei Fragen etc. stehe ich gerne zu Hilfe.

Thx: Tauwasser & FWB-Crew