Hallo,
ich lade Programme von der Diskette über das AR6 Modul. Normalerweise wird dort nach dem Laden die Startadresse $0801 angezeigt und das Programm lässt sich mit Run starten. Wie starte ich aber ein Programm mit der Startadresse $1001?
Du bist in Begriff, Forum64 zu verlassen, um auf die folgende Adresse weitergeleitet zu werden:
Bitte beachte, dass wir für den Inhalt der Zielseite nicht verantwortlich sind und unsere Datenschutzbestimmungen dort keine Anwendung finden.
letzter Beitrag von cbm-warrior am
Hallo,
ich lade Programme von der Diskette über das AR6 Modul. Normalerweise wird dort nach dem Laden die Startadresse $0801 angezeigt und das Programm lässt sich mit Run starten. Wie starte ich aber ein Programm mit der Startadresse $1001?
SYS 4097
$1001 (hex) = 4097 (dezimal)
Alternativ bei AR über SYS$1001 oder im Monitor mit G1001
sys 4097
Gruß, Gerd
Normalerweise stammt ein Programm mit Ladeadresse $1001 entweder vom (nicht-erweiterten) VC-20 oder einem C16/C116/+4.
Insofern wäre es hilfreich, wenn Du etwas mehr Details liefern könntest.
Kannst aber mal probieren, das Programm von Hand mit ",8" und *nicht* mit ",8,1" zu laden. Und dann schauen, was bei RUN passiert.
*Theoretisch* könnte auch SYS4097 funktionieren. Allerdings wäre das dann schon eine ungewöhnliche Wahl für Lade- und Startadresse - 4096 wäre da wohl gängiger.
Oder es ist eine nicht gepacktes Programm was bei $1001 liegt so wie Früher die Mukken! Da war dann der einsprung für die Mukke über den jsr $1000 im IRQ!
Oder eher oft lagen sie dort!!
SYS 4097
Danach friert der Rechner ein.
Kannst aber mal probieren, das Programm von Hand mit ",8" und *nicht* mit ",8,1" zu laden. Und dann schauen, was bei RUN passiert.
Das funktioniert. Danke für eure Hilfe!!
Da sind recht simple Basicspiele auf dieser Diskette. Ein anderes Programm zeigt mir $4001 an - das wäre dann 16385 dezimal laut Umrechner. SYS 16385 führt zum Absturz. Load"xy",8 funktioniert. Ok - für die Zukunft werde ich alles was nicht $0801 ist erstmal mit ",8" versuchen.
Danke nochmal.
Axel
Zieh doch von so einer Diskette mal ein D64 ... da finden wir wahrscheinlich viele schöne Sachen.
Übrigens kannst die Startadresse auch hiermit am C-16/116 & Plus/4 vom ganzen Directory anzeigen lassen ...
Ein anderes Programm zeigt mir $4001 an - das wäre dann 16385 dezimal laut Umrechner. SYS 16385 führt zum Absturz. Load"xy",8 funktioniert. Ok - für die Zukunft werde ich alles was nicht $0801 ist erstmal mit ",8" versuchen.
Das ist dann in der Regel ein Basicprogramm am erweiterten C-16/116 oder Plus/4, wo vorher einmal die Grafik eingeschaltet wurde und der Basicanfang entsprechend hochgesetzt wude.
Im Basic 3.5 kannst du auch bequem per DLOAD laden anstelle LOAD"NAME",8 ...
Wenn es reine Basicprogramme sind, nützt der SYS-Befehl sowieso nichts.
Mit SYS werden Maschinencode-Programme gestartet.
bei ungepackten Maschinenprogrammen ist die Ladeadresse nicht unbedingt auch die Startadresse!
Zieh doch von so einer Diskette mal ein D64 ... da finden wir wahrscheinlich viele schöne Sachen.
Siehe Anhang. Aufgefallen war mir das bei "Alien" und "Asteroid", wobei ich mit der Diskette noch nicht ganz durch bin...
Handliche Heuristik: Wenn die Hex-Darstellung der Ladeadresse auf ...01 endet, handelt es sich bei der Datei sehr wahrscheinlich um ein Basicprogramm. Wenn nicht, dann nicht.
In VICE (alt+M):
LOAD "ASTEROID" 8 801
X (enter)
LIST (enter)
BASIC program.
RUN (enter)
undefined statement in 530
Stimmt, schöne alte Schinken. Gemischter Buntwarenladen.
"Alien" liegt bei $1001, "Asteroid" und "Rotamint" bei $4001, sind alle Basic. Der Rest ist $0801.
Jedi04: schön, daß das Programm jetzt erstmal läuft.
Ein hochgesetzter BASIC-Start kommt auch schon mal vor, wenn das Programm mit einem veränderten Zeichensatz versehen ist. Viele Abtipp-Spiele aus der Zeit legen den Zeichensatz, und evtl. auch Maschinenprogramme *unter* das BASIC-Programm. Dann gibt es meistens noch einen Boot-Loader mit ein paar Zeilen, der den BASIC-Start hochsetzt und das Hauptprogramm nachlädt. Falls das Programm aber mit unverändertem BASIC-Start geladen und gestartet wird, überschreibt es sich möglicherweise selbst - da solltest Du deine Fälle daraufhin überprüfen.
In VICE (alt+M): [...]
No wonders. It also escapes me why one would want to load BASIC programs into RAM this way. Your method does an "inject-to-RAM" but misses to re-link the lines of the BASIC program (what is done by the LOAD command in direct mode), and - much more important - it *does* *not* set the pointer of the start of the variables in 45/46 (a.k.a. "end of program") correctly!
Then you can LIST the program without any problems, but as you RUN the program, and the first defined variables will thrash the start of the BASIC program. This confuses the interpreter and will quite likely stop execution with an error messages.
Nochmal für die deutschen Mitleser:
Das verwundert mich nicht. Ich verstehe auch nicht, wie man auf die Idee kommen kann, BASIC-Programme so einzuladen. Deine Methode schreibt das Programm per "inject-to-RAM" in den Speicher, dabei werden die Programmzeilen aber nicht neu verkettet (was das LOAD-Kommando im Direktmodus macht) und - noch viel wichtiger - die Startadresse der Variablen in 45/46 (auch bekannt als "Ende des Programms") *wird* *nicht* gesetzt!
Dann kannst Du zwar das Programm LISTen, aber sobald Du es mit RUN ausführt, überschreiben dir die ersten Variablenzuweisungen den Start des BASIC-Programms. Das bringt den Interpreter durcheinander und dann bricht die Programmausführung mit einer Fehlermeldung ab.
Nachtrag:
- Rotamint ist vermutlich aus der CPU 5/85. Das verlangt keinen hochgesetzten BASIC-Start, sollte also o.k. sein.
- Alien muß auf jeden Fall hochgesetzt werden, da Sprite-Daten und Maschinenprogramme nach $3000 aufwärts geschrieben werden. Da tritt genau das Szenario ein, was ich oben beschrieben hab. Hier brauchts also ein:
im Direktmodus, bevor das das Programm mit ",8" lädst und dann startest.
Nachtrag:
- Rotamint ist vermutlich aus der CPU 5/85. Das verlangt keinen hochgesetzten BASIC-Start, sollte also o.k. sein.
- Alien muß auf jeden Fall hochgesetzt werden, da Sprite-Daten und Maschinenprogramme nach $3000 aufwärts geschrieben werden. Da tritt genau das Szenario ein, was ich oben beschrieben hab. Hier brauchts also ein:im Direktmodus, bevor das das Programm mit ",8" lädst und dann startest.
Stimmt, siehe auch hier: http://www.gb64.com/game.php?id=11090&d=18&h=0
Das Heft habe ich in meinen Fundus, bei Bedarf kann ich die Seiten samt Anleitung gerne eben scannen.