Alles anzeigenDie Variablen liegen ja nach dem BASIC Code.
Die Strings wachsen von "oben" nach unten.
Alle Befehle die auf Variable LESEND zugreifen müssen ggf. erst in den RAM wechseln.
Schreibend geht auch so, weil das RAM unter dem ROM erreicht man ja auch so, wenn ich mich recht erinnere.
Ausnahme: der IO Bereich
Entweder man läßt den aus oder man macht einfachheitshalber mal nur den Bereich von 0800 bis CFFF Verfügbar (52 KB).
Ich weiß ja nicht, was BASIC 4.5 (also BASIC 3.5 für C64) vom normalen Interpreter verwendet, aber der BASIC-V2-Code ab $A000 ist de facto nicht geeignet vor dem lesenden Zugriff ROM weg- oder RAM einzublenden. Das BASIC 3.5 der C264-Linie macht alle releventen (ZP),Y Zugriffe (Programmtext, Variablen+Arrays, String-Heap) über einen Stub-Routine (GetUnderROM), in denen das RAM bei ausgeschaltetem Interrupt eingeblendet, das Datum geholt wird und wieder ausgeblendet wird, wobei das Aus-/Einblenden bei der C264-Architektur schon recht effizient mit einer einfachen Schreibaktion auf eine Speicherstelle geht. Bei C64 muss man mit Port $01 herumwursteln (maskieren und mit dem Akku herumjonglieren). Vorteil bei der C264-Architektur ist, dass man fürs Schreiben nichts weglenden muss, weil IO > $F000 liegt. Beim C64 müsste man, wenn man den I/O-Bereich $D000 bis $DFFFF dabei haben will, dann auch noch das Schreiben über einen Stub führen. Das wird dann schon ziemlich unelegant.
Ich mein, wenn man viel ROM-Platz hat (diese Stub-Aufrufe brauchen mehr Platz und so manche Optimierung lässt sich dann auch nicht mehr so direkt verwenden) und man mit dem gebremsten Zugriff zugunsten des RAMs leben will, dann geht das natürlich alles. Der Aufwand das BASIC V2 quasi komplett zu überarbeiten (ich ahne, dass BASIC 3.5 für C64 von Bank-Switching keine Ahnung hat) ist meiner Schätzung nach beträchtlich.
Die Idee das in Programmtext und Variablen und String-Heap zu trennen ... das schränkt das ganze wieder zu sehr ein, wär für mich ein zu harter Kompromiss, wenn man schon so einen Aufwand treiben will. Das Zeil sollte sein, das volle RAM zu nutzen, egal in welcher Konstellation Programmtext, Variablen und Strings anfallen.