Hallo Besucher, der Thread wurde 9,2k mal aufgerufen und enthält 29 Antworten

letzter Beitrag von syshack am

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

  • 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

  • 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

  • danke, nun habe ich es kapiert, werde es gleich mal ausprobieren, grins

  • Also ich mach es immer so beim VC-20:

    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

  • 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

  • Variablen behalten auch nach einem Neustart des Basicprogramms, welches der LOAD-Befehl auslöst, ihren Wert, sofern nichts dazwischen kommt, wie z. B. ein CLR.

  • 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

  • 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