.2Das mit den ASCII ist auch nur eine Einfache Möglichkeit, um beliebige Strings darstellen (und eben ggf auch durchscrollen lassen) zu können. Insbesondere wird der Zugriff im Charset auf den konkreten ASCII vereinfacht, weil C die Nummern bereits kennt, selbst damit arbeitet.
Du sagst, Du verwendest nicht alle Zeichen, ok...
Aber die meisten.
Von den 0..127 Zeichen (128) nutzt Du nur 65 (63 und zwei selbstdefinierte). Ich hatte ja bereits vorgeschlagen, die ersten 32 (Steuerzeichen) wegzulassen, ebenso könnten die letzten 5 raus. Die 15 Zeichen zwischen 0x20 (Space) und 0x30 (0) willst Du auch nicht. Also schneidet man das (erstmal mit dem Space) auch weg, bleibt der Bereich 0x30 (48dez)..0x7A (122dez). Darin hättest Du dann 13 "unerwünschte" Zeichen. Dir fehlen allerdings 3 Zeichen: das Space (alle aus), alle an und der Smiley. Die tippst Du jetzt einfach anstelle 3 der unnützen Zeichen ein ( remapping - möglichst welche, die man auf der Tastatur gut tippen kann) - dann hast Du nur noch 10 Ballast-Zeichen mit.
Unabhängig davon kannst Du natürlich auch bei Deiner eigenen Tabelle bleiben, dem
JSCII sozusagen
.
Den kennt C halt nicht, insbesondere nicht als String-Format, aber mein Algorithmus kann damit genauso umgehen - bis auf den String eben. Statt eines Stringes, also eines Feldes mit Bytes die ASCII sind, brauchst Du halt ein Feld mit Bytes, die Deine JSCII sind.
Alternativ kannst Du natürlich auch bei dem VRAM bleiben, und echtes Scrollen implementieren.
Stell Dir Dein charset nicht als 65x8-Feld vor, sondern als ein Feld mit 520 Einträgen.
Für das erste Zeichen müssen die Einträge 0..7 in's VRAM. Für das 2te die Einträge 8..15. Und beim Scrollen willst Du halt zwischendurch mal die Einträge 4..11 sehen (also vorn die letzten 4 Spalten von Zeichen 1 (einträge 4..7) und hinten die ersten 4 von Zeichen2 (Einträge 8..11)
Ähnlich Dirks Post kannst Du dann auch so'ne Doppelschleife umsetzen, die Bei jedem Durchlauf der inneren Schleife 8 Spalten in VRAM kopiert, den Index in der äußeren Schleife um eins weiterschiebt. Dafür brauchst Du das charset als eindimensionales Feld, bzw mußt darauf eindimensional zugreifen können. In Wirklichkeit liegt das 2dimensionale natürlich eindimensional im Speicher, der ist ja eindimensional indiziert - wie du In C jetzt einfach darauf zugreifst, weiß ich nicht. Könntest das natürlich einfach eindimensional definieren.
Dann wäre die Doppelschleife ähnlich Dirks - denk mal drüber nach...