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