Für alle, die mehr Speicher unter Basic wollen, gibt es das Paradoxon-Basic vom 64'er-Sonderheft 21. Damit hat man satte 50KB unter Basic zur Vefügung.
Hallo Besucher, der Thread wurde 12k mal aufgerufen und enthält 58 Antworten
letzter Beitrag von 1Byte am
Wer braucht mehr Speicher unter Basic?
- ogd
- Erledigt
-
-
wie funktioniert das denn das man mehr platz hat auch wenn eigentlich keiner mehr da sein sollte?
-
Zitat
Original von alexvf
wie funktioniert das denn das man mehr platz hat auch wenn eigentlich keiner mehr da sein sollte?das eingebaute basic nutzt leider nicht den ganzen speicher aus. ab der speicherstelle 49152 ($c000) bleibt nämlich noch platz für assembler-programme. ausserdem sitzt davor noch das basic-rom ($a000).
das paradoxon-basic verschiebt den basic-interpreter und stellt somit den ganzen speicher von 2049 ($0801) bis 53248 ($d000) für basic-prgramme zur verfügung.
-
das ist ja cool
-
wo schiebt er ihn den hin, den BASIC Interpreter, der ja bekanntlich 8KB gross ist, also von $a000-$bfff ??? Das Kernal muss ja eingeschaltet bleiben, da hier ja auch noch teilweise Interpreter-Code steht und die Kernal Routinen vom BASIC sowieso gebraucht werden.
der Bereich von $d000-$dfff ist eher tabu, also könnte man die 8k BASIC Code eigentlich nur von $b000-$cfff verschieben, dann hat man... moment rechnen... 42K ($0800-$AFFF), aber keine 50... wo ist der Trick??? -
Wenn ich den Trick richtig in Erinnerung habe ist es wohl so, daß zwar vom Basic aus das Kernal, vom Kernal aus aber nie das Basic angesprungen wird. Daher kann das Basic wohl unter das Kernal geschoben werden, wenn man alle Zieladressen im Kernal durch eine kleine Umleitung ersetzt, die das Kernal erstmal einschaltet.
-
Moin
Ganz klar Bit-splitting.
mfg
Filou -
Zitat
Original von hannenz
wo schiebt er ihn den hin, den BASIC Interpreter, der ja bekanntlich 8KB gross ist, also von $a000-$bfff ??? Das Kernal muss ja eingeschaltet bleiben, da hier ja auch noch teilweise Interpreter-Code steht und die Kernal Routinen vom BASIC sowieso gebraucht werden.ZitatOriginal von hoogo
Wenn ich den Trick richtig in Erinnerung habe ist es wohl so, daß zwar vom Basic aus das Kernal, vom Kernal aus aber nie das Basic angesprungen wird. Daher kann das Basic wohl unter das Kernal geschoben werden, wenn man alle Zieladressen im Kernal durch eine kleine Umleitung ersetzt, die das Kernal erstmal einschaltet.hoogo ist schon auf der richtigen fährte. für alle, die es noch genauer wissen wollen, habe ich die relevanten teile der anleitung abgetippt.
Zitat(Aus dem 64'er- Sonderheft 21)
Normalerweise ist im C64 der Bereich von $0800 bis $9FFF als Basic-Speicher vorgesehen. Im Bereich von $A000 bis $FFFF bleiben so 24 KByte für Basic ungenutzt, da an diesen Stellen der Basic-Interpreter, der Input-Output-Bereich (IO-Bereich) und das Kernel eingeblendet werden.
Der erweiterte Basic-Speicherplatz wird nun dadurch gewonnen, dass der Basic-Interpreter unter den IO-Bereich und das Kernel verschoben wird. Dabei bleiben noch rund 3 KByte frei, die für die neuen Umschaltroutinen genutzt werden.
Folgende Speicherbereiche müssen immer gleichzeitig zur Verfügung stehen:
1. Basic-RAM + Basic-Interpreter, oder
2. Basic-RAM + I/O-Bereich + Kernel.Da der I/O-Bereich nicht verschoben werden kann, diente er als Ansatzpunkt für die Speicheraufteilung. Der Basic-Interpreter musste daher unter den I/o-Bereich und das Kernel:
1. Basic-RAM ($0800 bis $CFFF) + Basic-Interpreter ($D000 bis $F4C0)
2. Basic-RAM ($0800 bis $CFFF) + I/O-Bereich ($D000 bis $DFFF) + Kernel ($E000 bis $FFFF)Da die Kernel-Routinen für die Arbeit des Basic-Interpreters unverzichtbar sind, waren Umschaltroutinen notwendig, um zwischen den beiden Speicherkonfigurationen hin- und herzuschalten. Insgesamt werden vier Umschaltroutinen benötigt.
Generell gilt: Die Umschaltung zwischen beiden Speicheraufteilungen darf nur von einem Speicherbereich aus erfolgen, der selbst ausserhalb des betroffenen Bereichs liegt. Die Speicherbereiche $02A7 bis $02FF sind ungenutzt und können dafür verwendet werden. Alle vier Umschaltroutinen arbeiten nach dem gleichen Prinzip: Sie legen eine Rücksprungadresse auf den Stack, schalten auf das Kernel um und starten die benötigte Routine. Der Rücksprung erfolgt nun auf die Umschaltroutine, die wieder ins RAM verzweigt.
-
Woweee! Ist ja ein cooler Trick!
-
Gibt's zum Speicherverschieben eine Lösung in BASIC? Kann mit POKEn etwas verschoben werden? Wie lauten denn dann die einzugegebenen Zeichen? Habe von Maschinensprache keine Ahnung, jedoch von früheren Bekannten immer etwas von einer BASIC-Lösung gehört. Leider sind die Bekannten nicht mehr da und die Lösung ebenfalls.
-
Hi!
Nein, das geht definitiv nicht per BASIC-Befehl.CU
Kratznagel -
...zumindest nicht in dieser Perfektion. In den Speicherbereich von 49152 bis 53248 kann man ja was reinpoken und mit peek wieder auslesen. Anstatt nun ein normales Array zu benutzen kann man in dem Bereich allerhand rumpoken und somit Basicspeicher gewinnen, wenn man das mal so ganz weit definiert.
-
mmh der anleitung da nach zu urteilen braucht man allerdings nicht wirklich ein modul für den trick....das sollte mit nem kleinen maschinensprache prog zu erschlagen sein...oder was hab ich verpasst?
-
Zitat
...oder was hab ich verpasst?
Im Gegenteil Es hatte noch niemand was von Modul gesagt.
-
ok, überredet :=)
-
Das ist wirklich ein fantastischer trick!
-
Hmmm..., die Basicprogrammierer sollten erstmal die 389011 Byte ausnutzen....
dann kann man weitersehen. Dazu kommen noch 4KB Zusammenhängende für kleine ASM-Beschleuniger.Gruss
-
..., die Basicprogrammierer sollten erstmal die 389011 Byte ausnutzen....
...So viele Basic Byte`s wären ein Traum auf c64 -
Das ist wirklich ein fantastischer trick!
*zustimm*
Da die Datei nur 3.4 KiB groß ist, handelt es sich offensichtlich um keinen kompletten Interpreter, sondern nur um einen Patch, der den vorhandenen Interpreter umkopiert und entsprechend abändert. Ein flüchtiger Blick in den Hexdump fördert allerdings die zusätzlichen Strings MERGE, DELETE, OLD, RENUMBER, AUTO, VAR, ARRAY und FIND zutage. Weiß jemand, ob das Ding auch die Garbage Collection durch eine brauchbare Version ersetzt?Andererseits: Hat vielleicht jemand Zeit und Lust, eine Version von BBC-Basic mit diesem Trick zu coden?
-
...So viele Basic Byte`s wären ein Traum auf c64Das wäre schon reizvoll, ein neuer BASIC-Compo?
Aber andererseits, ab der Länge macht das in BASIC wirklich keinen Spass mehr.