atari-home.de - Foren
Software => Coding => Thema gestartet von: guest3744 am Fr 18.09.2015, 14:07:42
-
Hallo, guten Tag.
Wie kann man bitte mit dem Turboassembler 1.77 eine Binäre Datei erstellen ?
Also keine Startfähige PRG.
Oder wie kann man aus der PRG eine Binäre machen ?
Ich brauche die Daten für das GFA-Basic zum Call aufruf.
Danke.
Grruss
-
Call vermeiden, soll Fehlerbehaftet sein. Besser ~C: benutzen
Für GFA-Basic muss der Assembler PC-relativen Code ausspucken. Ob das der Turboass kann, weiss ich nicht. Nehm doch den Assembler von Pure C oder den Devpac. Die können das auf jeden Fall. Dann nur assemblieren und _nicht_ noch mit einer Lib linken. Brauchst nur das ausgespuckte Objektfile
-
Im Turboasm halt darauf achten, daß die verwendeten Befehle alle PC-relativ sind. Irgendeinen Assemblersource übersetzen und als GFABASIC Inline hernehmen, funktioniert nicht.
Im Prinzip muss man irgendwo im Dialog halt sagen "binär abspeichern", k.A. mehr wie das ging.
-
Ich kannte den Autor von "Sparrow Text" und "Der Kaufmann von Venedig" und zummindestens das Erste ist in GFA mit Inline-Assembler geschrieben, das sollte also gehen.
-
Also im F1 Dialog kann man direkt sagen "GFA-INL" und dann speichert er das Zeug direkt ab. So hab ichs immer gemacht.
-
Hallo, guten Tag.
Also im F1 Dialog kann man direkt sagen "GFA-INL" und
Hmmm..., kannst mir bitte einmal zeigen wo du deinen Assembler her hast.
Danke.
Gruss
-
http://dhs.nu/files.php?t=codingtool von vor mindestens 10 Jahren oder so.
-
Es hat jetzt funktioniert mit Turboasm .
Ich weiss aber noch nicht welche kriterien da vom Turboasm verlangt werden.
Bei einem anderen src konnte man das Menü nicht anklicken, es war grau hinterlegt.
Von meine rcall.src wird eine rcall.inl angelegt.
Der Vorteil mit dem Befehl rcall ,man kann in Gfabasic Registerwerte übergeben.
Danke.
Gruss
-
Im Turboasm halt darauf achten, daß die verwendeten Befehle alle PC-relativ sind.
Was heisst das beim Programmieren...?
Bitte einmal erklären.
Danke.
Gruss
-
Verwendete Befhele dürfen keine namentlichen Adressen enthalten, sondern nur Register und Verweise auf Daten in Abhängigkeit zu einem Register.
D.h.
move.w meine_variable,d0
meine_variable: dc.w 42
ist nicht PC-relativ, direkte Adresse meine_variable wird verwendet.
Um das gleiche PC-relativ zu erreichen, müßte man das so formulieren.
lea meine_variable(pc),a0 ; hole Zeiger relativ zum Programmzähler (nur Offset, keine feste Adresse)
move.w (a0),d0 ; lies Wert
meine_variable: dc.w 42
Die Adressierung ...(PC) funktioniert leider nicht in allen Konstellationen, weswegen man wie bei einem RISC häufig erst ein Zeigerregister laden muss.
Für GFABASIC ist das nicht schlimm, da kann man Pointer auf Daten per RCALL oder ~C: Aufurf via Stack leicht übergeben.
Beispiele für GFABASIC Inlines mit PC relativer Adressierung findest du bei mir auf der Homepage: http://paradize.atari.org/
Für mehr Details muss ich Dich an einen 68000er Guru und/oder Literatur verweisen.
-
Ja, danke für deine Erklärung.
Du bist ja sehr fit....mit dem ST usw.
Kannst du mir vielleicht bitte schreiben , wo man das Handbuch für den Turboasm bekommen kann?
Es soll so etwas vorhanden sein, ich finde es aber nicht.
Meine Frage zielt dahin , ob man Entscheidungen in Turboasm auch mit "IF <,> = Endif " machen kann statt der ASM -Typischen Abfragen?
Danke.
GRuss
-
... ob man Entscheidungen in Turboasm auch mit "IF <,> = Endif "...
Nein. Wie oben schon mal beschrieben, sind das Assembler-Direktiven, die schon zum Zeitpunkt des Assemblierens festlegen, ob das, was darin "geklammert" ist, mitassembliert werden soll oder nicht. Die "IF"-Bedingung muß deshalb schon zum Zeitpunkt des Assemblierens festliegen, also eine Konstante sein.
Verwendet wird das, um verschiedene Versionen des Programms in einer einzigen Quelle haben zu können, so etwa z.B.: "wenn's für einen Falcon sein soll, verwende die 68030-Befehle, wenn nicht, dann nur die für den 68000er".