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]...
- Ausgabe xxxxxx + 2 Bytes ab dem Wert des nächsten Byte (NB)
- 10xxxxxx - zunehmend
- Ausgabe xxxxxx + 2 Bytes ab dem Wert des nächsten Byte (NB)
- [NB][NB+1][NB+2]...
- Ausgabe xxxxxx + 2 Bytes ab dem Wert des nächsten Byte (NB)
- 01xxxxxx - gleichbleibend
- Ausgabe xxxxxx + 2 Bytes das nächste Byte (NB)
- [NB][NB][NB]...
- Ausgabe xxxxxx + 2 Bytes das nächste Byte (NB)
- 00xxxxxx - Direktkopie von xxxxxx +1 folgenden Bytes
- [NB1][NB2][NB3]...
- 11xxxxxx - abnehmend
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

