RLE-Format SylvanianMelodies

aus RHWiki, der freien Romhacking-Enzyklopädie

Inhaltsverzeichnis


Deutsche Version

Das RLE-Format wird in Sylvanian Melodies in den Daten der Tabellen von 19:4000 und 1F:4000 genutzt. Es folgt eine kurze Beschreibung des Formates bzw. der vier Unterformate.

RLE-Modus

Die ersten zwei Bit des ersten Bytes der Daten bestimmt welcher der vier Modi benutzt wird.

Modus-Byte AND 0x03

00 - horizontaler Modus
01 - Reihen-Modus
10 - Füll-Modus
11 - vertikaler Modus

Generelles

Alle Modi unterscheiden zwischen Startoffset und Schreiboffset. Das Startoffset ist das Offset an dem zu schreiben begonnen wurde und kann verschoben werden. Das Schreiboffset ergibt sich aus der Verschiebung zum Startoffset, die mittels Codes realisiert wird.

Die Worte Tile und Zeile heißen hier wirklich ein Tile auf dem sichtbaren Bildschirm und eine Zeile auf dem Sichtbaren Bildschirm.

Alle Modi sind 0xFF-terminiert, d.h. das Byte 0xFF schließt die RLE-Daten ab.

Vertikaler und horizontaler Modus sind miteinander insofern kompatibel als dass sie gespiegelte Tilemaps ergeben können (wenn jeweils mit anderem Modus interpretiert), jedoch keine gespiegelten Tiles! Das gilt jedoch nur, wenn die Daten im horizontalen Modus nicht über die Ränder der BG-Map hinaus zeichnen bzw. diese Automatik mit einbeziehen, da sie im vertikalen Modus nicht vorhanden ist.

00 - horizontaler Modus

Wird vornehmlich genutzt um horizontal angeordnete Daten zu schreiben.

Es erfolgt am "Ende" der BG-Map kein automatischer Umbruch, d.h. z.B. von 0x981F --> 0x9820 wird nicht gegangen, stattdessen 0x981F --> 0x9800! Zeilen können bloß per Code erhöht werden und können nicht auf ein Offset ausserhalb der BG-Map zeigen, die Erhöhung einer Zeile hat 0x9BE1 --> 0x9801 zufolge.

FF - Ende-Code
FE - Schreiboffset + 1 Zeile
FD - Startoffset um 1 Tile verschieben und Schreiboffset auf neues Startoffset legen
<> - Byte schreiben und Schreiboffset + 1 Tile

01 - Reihen-Modus

Wird verwendet um u.a. Hintergrundbilder, die ja teilweise recht viele aufeinanderfolgende Tiles haben, zu zeichnen. Ein "Umbruch" am "Ende" der BG-Map findet statt.

FF - Ende-Code
<>:
Bits 7 und 6 bestimmen "Untermodus" und Ausgaben verschieben Schreiboffset entsprechend
11xxxxxx - abnehmend
Ausgabe xxxxxx + 2 Bytes ab dem Wert des nächsten Byte (NB)
[NB][NB-1][NB-2]...
10xxxxxx - zunehmend
Ausgabe xxxxxx + 2 Bytes ab dem Wert des nächsten Byte (NB)
[NB][NB+1][NB+2]...
01xxxxxx - gleichbleibend
Ausgabe xxxxxx + 2 Bytes das nächste Byte (NB)
[NB][NB][NB]...
00xxxxxx - Direktkopie von xxxxxx +1 folgenden Bytes
[NB1][NB2][NB3]...

10 - Füll-Modus

Wird in der Praxis nicht genutzt, da er eigentlich "sinnlos" ist (da Auffüllen von Ram sehr viel effizienter gehandhabt werden kann mittels ASM).

Es erfolgt am "Ende" der BG-Map kein automatischer Umbruch, d.h. z.B. von 0x981F --> 0x9820 wird nicht gegangen, stattdessen 0x981F --> 0x9800! Zeilen können bloß per Code erhöht werden und können nicht auf ein Offset ausserhalb der BG-Map zeigen, die Erhöhung einer Zeile hat 0x9BE1 --> 0x9801 zufolge.

FF - Ende-Code
FE - Schreiboffset + 1 Zeile
FD - Schreiboffset + 1 Tile
<> - Byte gibt an wie oft nachfolgendes Byte geschrieben wird

11 - vertikaler Modus

Wird benutzt um vertikal angeordnete Daten zu schreiben.

Es findet keine Überprüfung statt ob das Schreiboffset noch in der BG-Map ist; für das Startoffset erfolgt ein "Umbruch" am "Ende" der BG-Map. Diser Modus wird ebenfalls nicht sehr häufig verwendet.

FF - Ende-Code
FE - Startoffset um 1 Tile verschieben und Schreiboffset auf neues Startoffset legen
FD - Schreiboffset + 1 Zeile
<> - Byte schreiben und Schreiboffset + 1 Zeile

Siehe auch

  • ASM - Assembler
  • RLE - Generelle RLE-Funktionsweise erklärt

English Version

'Persönliche Werkzeuge