Ladeadresse vom Action-Programm ?
Ladeadresse vom Action-Programm ?
von atarineuling » Mi 4. Sep 2013, 18:43
Hallo , guten Tag.
Ich habe mir jetzt mal diese Action-Pdf ausgedruckt.
Folgende Info find ich nicht dort drin :
Die Startadresse vom Compilat, welches fertig auf der Disk liegt und mit eine Runtime von der Disk läuft.
Und wie ich die Endadresse bitte setzen kann, ab wo das Action-Compilat nicht mehr reingehen soll, bei mir ist es zb hA000.
Danke.
Re: Ladeadresse vom Action-Programm ?
von eda70 » Mi 4. Sep 2013, 21:26
Steht eigentlich alles im bereits genannten Artikel
Interen VariablenDas Ende des genutzten Speicherbereiches kann man nur indirekt beeinflussen.
Man kann den Start vorgeben. Wenn man die Länge kennt/abfragt, weiß man, ob es vor der gewünschten Adresse aufhört. Reicht der Block vor a000 nicht, muss man sich einen anderen freien Block suchen/ schaffen.
Re: Ladeadresse vom Action-Programm ?
von atarineuling » Mi 4. Sep 2013, 22:40
Hallo, danke für die Info.
Dann bleibt die Frage, ab wo wird ein ein Programm geladen welches mit Action hergestellt wurde, ohne das irgendwie etwas mit Set geändert wurde. Danach kann ich ja anhand der Programmlänge das Ende ausrechnen ?
Man kann den Start vorgeben.
Das möchte ich nicht , sondern ich möchte bitte die normale Startadresse ?
Es muss doch ein Limit beim Atari800 geben, ab wann ein Compilat von Action startet bzw geladen wird wenn es nicht beeinflusst wird. Beim C64 ist zb ab 2049 Byte.
Danke.
Re: Ladeadresse vom Action-Programm ?
von eda70 » Do 5. Sep 2013, 09:34
Probier es doch einfach aus.
(Mein Tipp wäre, er speichert an die gleiche Adresse wie bei Kompilierung.)
Das Verwalten des Speichers obliegt dem Programmierer. Der Beginn des freien Bereiches hängt von zusätzlichen Faktoren ab (z.B. ist ein Dos geladen oder nicht und wenn ja welches Dos etc.)
Ladeadresse vom Action-Programm ?
von Erhard » Do 5. Sep 2013, 14:26
Hi,
ich bin nicht sicher, ob ich die Frage richtig verstanden habe.
Ich bin aber auch nocht nicht mit der Speicherbenutzung durch ACTION! durch.
Offenbar frísst es auch Speicher, wenn ich Quellcode direkt von Disk kompiliere, so daß ein Beginn des Binärfiles bei $2000 wohl eher illusorisch ist - aber wie gesagt, damit bin ich noch nicht durch.
Generell kann ein Binärfile überall im Speicher liegen, außer der Speicher ist dort schon belegt.
Freien Speicher findet man zwischen MEMLO (Oberkante DOS) und MEMHI (Unterkante Bildschirm).
Da ich in meine kompilierten ACTION! Programme oft mit einem Debugger reinschaue, brauche ich eine definierte Adresse, ab wo sie im Speicher liegen.
Da die Abfrage von Speichergrenzen in ACTION! ziemlich uneinfach ist, kann man wie folgt vorgehen:
Man legt keinen Anfang fest, kompiliert sein Programm und speichert das Kompilat ab. Dann schaut man im COM-File nach der Anfangsadresse, nicht zu verwechseln mit der INIT oder RUN Addresse.
Die Adresse ist um so höher, je länger der Quellcode ist.
Setzt man die Anfangsadresse manuell auf einen zu niedrigen Wert, überschreibt der Compiler beim kompilieren den Quelltext im Speicher.
Darum also die Anfangsadresse großzügig aufrunden, jedoch höchstens so hoch, daß die Endadresse auch noch unterhalb des Anfangs der Display List (MEMHI) endet.
Beispiel:
automatisch entsteht z.B. folgende Datei:
$3587 - $4211
RUN: $4023
Dann den Anfang mit den beiden SET-Anweisungen im Programm wie folgt setzen:
MODULE
SET 14 = $4000
SET $491 = $4000
BYTE RTS=[$60]
...
Wenn man das dann kompiliert, sollte das COM-FIle hinterher wie folgt aussehen:
$4000 - $4C8A
RUN: $4A9C
Viele Grüße
Erhard