wie kann ich ein assemblerprogramm in basic laden & starten


  • aturnwald
  • 3751 Views 29 replies

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • wie kann ich ein assemblerprogramm in basic laden & starten

    Hallo Leute,

    kann mir bitte jemand sagen, welche Routine ich in Basic nehmen muss, um ein Assemblerprogramm zu laden,

    also so geht's jedenfalls nicht 10 print " CLR/HOME"
    20 load " prg",8,1
    30 sys 828
    40 print " ab hier wieder normal weiter mit Basic Programm " :böse

    ich weiß es gibt ein paar Pokes, mit denen es möglich ist ein Assembler Programm zu starten und dann in Basic weiter zu machen. Das Assemblerlisting endet mit einem ganz normalen BRK am Ende.

    Wenn wer die Pokes kennt, oder die Routine, dann sagt mir das bitte, :thumbup:

    weil, normal lade ich es mit ,8,1 und dann halt sys 828, Manuell geht es, dann müsste ich das Basicprogramm laden usw, jedoch will ich mir den 2. Teil einfach sparen.

    Ich weiß, viele Fragen, aber ich erlerne es derzeit wieder, hoffentlich, grins

    danke euer Toni
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7

    The post was edited 1 time, last by aturnwald ().

  • Der Befehl "LOAD" im Commodore-Basic endet leider immer außerhalb des Programmes, deswegen wird der SYS-Befehl in Deinem Programm nicht mehr ausgeführt. Erschwerend kommt hinzu, dass LOAD auch die Basic-Vektoren neu setzt.

    Das umgeht man, indem man den Bildschirm-Editor mit den entsprechenden Kommandos "impft", und dann nur noch RETURN-Codes in den Zeichenpuffer legt. Du schreibst also den LOAD-Befehl auf den Bildschirm, dann den SYS-Befehl vier oder fünf Zeilen darunter (musst Du ausprobieren, habe ich nicht mehr im Kopf) und dann schreibst Du zwei RETURN-Codes in den Tastaturpuffer. Zum Abschluss dann noch die Länge des Tastaturpuffers auf 2 setzen, dann den Cursor auf das LOAD setzen und END, dann werden die zwei RETURN-Codes ausgeführt, und der Interpreter führt die Befehle aus, die auf dem Bildschirm stehen.

    Auch wichtig: Dein Programm sollte nicht mit BRK enden, sondern mit RTS, dann bekommst Du ein normales READY. zurück, ohne dass der Bildschirm gelöscht wird.

    Jens
    forum.icomp.de/ - Das offizielle iComp Supportforum ist online.
  • Wiesel wrote:

    Der Befehl "LOAD" im Commodore-Basic endet leider immer außerhalb des Programmes, deswegen wird der SYS-Befehl in Deinem Programm nicht mehr ausgeführt. Erschwerend kommt hinzu, dass LOAD auch die Basic-Vektoren neu setzt.

    Das umgeht man, indem man den Bildschirm-Editor mit den entsprechenden Kommandos "impft", und dann nur noch RETURN-Codes in den Zeichenpuffer legt. Du schreibst also den LOAD-Befehl auf den Bildschirm, dann den SYS-Befehl vier oder fünf Zeilen darunter (musst Du ausprobieren, habe ich nicht mehr im Kopf) und dann schreibst Du zwei RETURN-Codes in den Tastaturpuffer. Zum Abschluss dann noch die Länge des Tastaturpuffers auf 2 setzen, dann den Cursor auf das LOAD setzen und END, dann werden die zwei RETURN-Codes ausgeführt, und der Interpreter führt die Befehle aus, die auf dem Bildschirm stehen.

    Auch wichtig: Dein Programm sollte nicht mit BRK enden, sondern mit RTS, dann bekommst Du ein normales READY. zurück, ohne dass der Bildschirm gelöscht wird.

    Jens
    danke, nun habe ich es kapiert, werde es gleich mal ausprobieren, grins
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7
  • syshack wrote:

    Das Thema musst Du in der Programmierung-->BASIC Ecke suchen. Dort wurde es zur Genüge besprochen.
    Hier ein Beispiel mit der Variable setzen:
    Daten in andere PRG-Files auslagern
    Sorry, aber da auf der Seite kapier ich nur noch Bahnhof, jedoch weiß ich nun wie ich es machen muss soll, danke Dir trotzdem
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7
  • Also ich mach es immer so beim VC-20:

    Source Code

    1. 10 dn=peek(186):sys57809"prg",dn,1:poke780,0:sys65493
    2. 20 sys828
    Hat den Vorteil, dass es im Programm gleich danach weitergeht und kein Neustart erfolgt wie bei der Version mit der Variable. Außerdem merkt man sich mit dn=peek(186) das zuletzt benutzte Device, so klappt es auch mit Laufwerksadresse 9 oder sogar Datasette, wenn das Programm auf dem Band dahinter liegt (im Beispiel geht's natürlich nicht mit Datasette, weil das nachzuladende Programm im Tape-Buffer liegt).
  • danke, weil, so wie ich es gemacht habe :
    10 print"CLR/HOME LOAD"test"chr$(34)","peek(186);:Print"home 17*cursor rechts ,"peek(43)
    20 poke 44,32:poke8192,0:poke631,19:poke632,131:poke198,2

    so und das obrige Prg hat zwar nachgeladen, aber dann wurde da sMaschinenprogramm leider nicht mit SYS 828 sondern mit Run ausgeführt.

    danke Dir, so sollte es gehen, melde mich gleixch
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7
  • Hi torka,

    danke nun geht's, hier das kurze Programm, ist zwar ned toll aber für den ersten Tag Assembler relativ witzig. Musste es nur geringfügig verändern, mich tät es nur interessieren, ob dies auch auf einen echten VIC geht. Hier das Prg : TONI-ASS.D64

    mit loader laden, starten, wenn alles OK ist, sollte dann bei Dir so eine Art Gaudi TTY-Terminal erscheinen, welches mit +/- 500 Baud Geschwindigkeit rennt.
    also bei Ready, am besten das Directory laden, oder ein anderes Programm, je länger das File, desto besser der Effekt.

    danke Dir.

    Lg. Toni :bia
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7
  • ja, so ungefähr habe ich es gewusst, das wenn man Load nimmt im Direktmodus, dass dann die Vektoren neu gesetzt werden, jedoch wenn ich es via Programm mache, und einigen Pokes, dann nicht, da liege ich doch richtig, oder ?
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7
  • Kannst Du mir bitte das nur kurz erklären, warum das so einfach geht, also if a=0 then a=1::LOAD"name",8,1
    .. dann weiter im Programm, es funktioniert zwar, aber ich erkenne darin nicht den Grund.

    aber ne super Sache. Danke euch allen für die vielen Vorschläge.

    euer Toni
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7
  • Ahh, OK. also wenn ich dich richtig verstanden habe, dann kann ich egal bei welchem Memory auch immer sagen witr 16 / 32 K
    so schreiben 10 ifa=0thena=1:load"programm 1",8,1
    20 sys programm 1
    30 load"programm 2",8,1
    40 sys programm 2
    usw. usw.
    dann mache ich im Hauptprogramm einige DataZeilen z.B. Zeichensatz usw, und dann das Game, welches ich dann als eigenständiges Prg laden will und auch starten. So im Groben sollte es gehen, oder ?

    danke auf jeden Fall

    Lg. toni
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7
  • Nein, denn "load" löst ja immer einen "Neustart" aus. Programm 1 wird nicht mehr immer neu geladen wird, da a=1 ist und das gemerkt wurde. Jetzt würde Programm 2 aber immer wieder neu geladen werden und dein Programm bleibt immer wieder in Zeile 30 stecken. Diese müsste statt dessen heißen:
    30 if a=1 then a=2:load"programm2",8,1

    wenn du noch ein drittes Programm nachlädst: if a=2 then a=3:load"programm3",8,1
  • Ich finde die Methode mit sys57809"prg",dn,1:poke780,0:sys65493 trotzdem schöner, weil die auch mitten im Programm erfolgen kann und den Ablauf des Programms daher nicht stört.

    Die andere Variante mit if a=0 then a=1 usw. ist ja nur eine Krücke, die die BASIC-Chaining-Funktion nutzt.
  • jep, das habe ich auch vor 5 Minuten gespannt, weil es mit der anderen Routine nicht so gut klappt, wie mit deiner, trotz alledem ist die andere Lösung ein short cut, jedoch haut's ned so hin, wie die von Dir.
    Weil ich gerade am basteln bin bzgl. des loaders. :)
    \ .-. _ .........42, what else ??.......
    ---\-----/---\---/-`-.- -... .---- -.. -.. -. --..-- .-- .---- -..- --
    \ / `-' 00 53 40 DE 9B 23 44 37 23 A3 BE D6 4B 4A B9 F7