Wie kann ich von Basic aus auf dem Plus 4 einen eigenen Charset in $2000 oder von mir aus auch $3000 aufrufen bzw. einschalten?
Eigenen Charset in $2000 von Basic aus aufrufen auf dem C16 / 116 / Plus4
-
HOLY MOSES/ROLE -
23. Januar 2017 um 16:48 -
Erledigt
Es gibt 18 Antworten in diesem Thema, welches 3.198 mal aufgerufen wurde. Der letzte Beitrag (
-
-
Du brauchst dazu TED-Register $FF12 und $FF13.
In $FF12 musst du Bit 2 auf 0 setzen damit TED das Charset aus dem RAM benutzt
In $FF13 sind es die Bits 2 bis 7 die die oberen 6 Bits der Adresse des Charsets ergeben.
$3000 ergibt also 001100
Dann gibts noch $FF07 Bit 7. Wenn 0 dann erzeugt TED die reversen Chars selbst und damit ist das Charset nur 1KB groĂź. Wenn 1 dann ist das Charset 2 KB groĂź und du kannst alle 256 Zeichen selbst definieren.
Registerliste von TED: Bitte melde dich an, um diesen Link zu sehen.
Du solltest das Charset aber erstmal aus dem ROM ins RAM kopieren.
-
Vielen Dank Gerrit, ich probiere damit mal ein bisschen rum.
Schon echt eine merkwĂĽrdige Sache, diese 264er Reihe.

EDIT:
Funzt super. Schade, das ich beim +4 insgesamt zwei Bytes ändern muss, und nicht nur eines, wie z.B. $d018 beim C64.
Ach so Gerrit, auf welchen Speicherbereich verweist denn der voreingestellte Wert in $ff13 nach dem einschalten des Rechners? Auf $e000?
Gibt es keine Möglichkeit einen eigenen 256-Zeichen Charset zu verwenden, bei dem ich nur mit einem Byte arbeiten muss, um diesen zu aktivieren?
-
Nein, der Default ist 128 Zeichen mit Reverse in Hardware und Charset aus dem ROM. Du musst also 3 Register umsetzen wenn du ein 256 Zeichen Charset im RAM an anderer Adresse haben willst.
Wo das Default-Charset liegt weiss ich nicht auswendig, aber du kannst doch $FF13 nach einem Reset einfach auslesen und nachsehen. BASIC 3.5 hat Befehle um DEC nach HEX und umgekehrt zu wandeln.
-
Aber ich will ich will ich will...
Habe ich das also richtig verstanden: Es gibt keine Möglichkeit einen eigenen Charset zu aktivieren mittels lediglich nur einem Byte (vergleichbar mit $d018 auf dem 64), auch von mir aus nur mit 128 Zeichen???
-
Doch: Wenn du den anderen Charset ins RAM nach $D000 packst. Dann brauchst du nur $FF12 schalten.
-
Doch: Wenn du den anderen Charset ins RAM nach $D000 packst. Dann brauchst du nur $FF12 schalten.
Ja, okay, coole Idee... aber um in $d000 zu schreiben muss ich ja vorher auch noch ein Byte ändern (ROM/RAM), gelle?
-
Doch: Wenn du den anderen Charset ins RAM nach $D000 packst. Dann brauchst du nur $FF12 schalten.
Dann hat er aber nur ein Charset mit 128 Zeichen und Reverse in Hardware. Will er 256 selbst definierte Zeichen muss er noch auf ein zweites Register zugreifen.
TED kann in dieser Richtung nunmal etwas mehr als VIC, macht dann eben auch mehr Arbeit.
-
Ja, okay, coole Idee... aber um in $d000 zu schreiben muss ich ja vorher auch noch ein Byte ändern (ROM/RAM), gelle?
Nein, Schreibzugriffe gehen immer ins RAM und der Default ist meines Wissens beim Lesen das ROM zu lesen. Also ist eine Kopierschleife um das Charset zu kopieren kein Problem.
-
Dann hat er aber nur ein Charset mit 128 Zeichen und Reverse in Hardware.
Er schrieb ja, das 128 auch reichen wĂĽrden.
Wobei ich das Geknauser mit den 1/2 Befehlen auch noch nicht verstanden habe.
-
Wobei ich das Geknauser mit den 1/2 Befehlen auch noch nicht verstanden habe.
Viel wichtiger ist daran zu denken das BASIC-Ende hochzusetzen, sonst überschreiben ihm früher oder später die Strings das Charset.
-
das BASIC-Ende hochzusetzen
Runter, oder?
-
Viel wichtiger ist daran zu denken das BASIC-Ende hochzusetzen, sonst überschreiben ihm früher oder später die Strings das Charset.
Cool, funxt. Char nach $d000 und Bit 2 von $ff12 löschen. Scheint der einzige Weg zu sein.
Geknauser: Noch Geheim

Basic-Ende: Egal

JUUUUUUUUUUUUUUUUHHHHHHHHHUUUUUUUUUUUUUUUUUUUUUUUU!!!
-
Unter $8000 liest der TED soweit ich das verstanden habe immer aus dem RAM. Das RAM/ROM-Bit wäre dann egal. Einfach asuprobieren. Und nicht SHIFT-CBM drücken oder CHAR verwenden, die wollen IIRC die neue Adresse in der erweiterten Zeropage hinterlegt haben...
-
Also, ungeschützt mitten im BASIC-RAM hat der Charset nichts verloren. Wenn er nicht durch Variablen oder das Programm von unten her geschossen wird, machen ihm spätestens die Strings von oben her den Garaus.
Das Speichermaximum absenken ist auf dem System hier auch nicht so prall. Macht man es so, daß der Zeichensatz (auch) mit 16K RAM läuft, sperrt man sich *allen* Extra-Speicher einer 64K Maschine weg!
Idealerweise gehört der Zeichensatz *unter* das BASIC-Programm. Wie's geht steht in einem noch gar nicht so alten Thread hier: Bitte melde dich an, um diesen Link zu sehen.
Und die nötigen Änderungen für 256 Zeichen überlasse ich mal dem geneigten Leser.

-
sperrt man sich *allen* Extra-Speicher einer 64K Maschine weg!
Warum ALLEN?
Bin nicht ganz firm auf der Maschine, aber ich komme auf rd. 11K, die max. verloren gehen. Oder hab ich einen Denkfehler?
-
Vor meinem Zitat steht noch "Macht man es so, daß der Zeichensatz (auch) mit 16K RAM läuft, ...". Dazu muß der Zeichensatz unter $4000 liegen. Damit ist der Speicher ab $4000 definitiv weggesperrt. Und der ist mit "Extra-Speicher einer 64K-Maschine" gemeint.
-
Ah! Nun verstanden, Mike
.Edit Bitte melde dich an, um diesen Link zu sehen.: Gewohnt schöne Lösung in deinem Link. Prima.
Edit Bitte melde dich an, um diesen Link zu sehen.: Holy schrieb in Bitte melde dich an, um diesen Link zu sehen. nur noch von Plus/4. Soll er also machen, wie er meint.
-
Dieses Thema hatten wir letztes Jahr schon mal ;). Ergebnis war dann eine Liste von nĂĽtzlichen POKEs usw.
Einmal der Verweis zur +4 World: Bitte melde dich an, um diesen Link zu sehen.
Thema hier im Forum: Bitte melde dich an, um diesen Link zu sehen. (etwas tiefer in diesem Thema)