Üdv,
Az UDG cserélgetése jobb megoldás, ha nem egyszerre kell 21-nél több saját definiálású karakter. Mindenesetre lássuk a betűkészlet átdefiniálás lehetőségét:
Az alap Sinclair betűkészlet a ROM-ban található 15616-os címtől. Itt a 32-127 kódok tartományában szerepelnek a karakterek képei egymást követően. Felépítésük ugyanolyan, mint az UDG definiálása, tehát az "A" betű így néz ki:
00000000 = 0
00111100 = 60
01000010 = 66
01000010 = 66
01111110 = 126
01000010 = 66
01000010 = 66
00000000 = 0
Nos, nincs más dolgod, mint a memóriában a programod mögött bárhová elhelyezni egy új betűkészlet definíciót (768 byte lesz összesen) és utána máris át lehet rá kapcsolni.
Mondjuk tegyük 64000-es címtől az összes karakternek megfelelő képet, ez esetben érdemes:
CLEAR 63999
LOAD "FONT" CODE 64000,768
POKE 23607,249 és máris az új karakterek láthatók.
Miért is ?
A 23606 és 23607 rendszerváltozók mutatják a betűkészlet memória kezdőcímét ellenőrizve: PRINT ((PEEK 23607)+1)*256+PEEK 23606
Ha van egy címed (a példában 64000), akkor az alábbi szerint kell a rendszerváltozó(k) értékét átírni:
POKE 23607, INT(64000/256)-1 (az 1 levonása a ROM rutinok működése miatt kell)
POKE 23606, 64000-INT(64000/256)*256
A példám szerint mivel a 23606 alapból 0-n áll, így elég csak a 23607-et átírni (250*256=64000 nem elfelejteni az 1-et levonni).
Tehát ezek után definiálhatsz akár minden betűre, jelre tetszőleges sprite-ocskát, utána a PRINT "A" már nem az "A"-t írja ki, hanem amit oda definiáltál. Természetesen ha rendes szöveget akarsz kiírni az alap Sinclair betűkészlettel, akkor vissza kell váltanod, azaz ki is számíthatod, de POKE 23606,0 és POKE 23607,60 kell (én meghagynám a nagybetűket, a kisbetűket, jeleket pedig átdefiniálnám, akkor nem kell ide-oda váltogatni).
Ezzel a módszerrel csinálhatsz szép, saját megjelenésű betűkészletet is a programodhoz.
Ha folytassam a segítséget ebben a témában, csak jelezd, írok példát

amúgy meg próbáld ki POKE 23606,8 vagy POKE 23607,0
Pgyuri