File nachladen

Es gibt 26 Antworten in diesem Thema, welches 5.581 mal aufgerufen wurde. Der letzte Beitrag (27. Juli 2015 um 21:18) ist von Mac Bacon.

  • Hallo zusammen,
    ich habe mir aus der Codebase64 folgendes Schnipsel gezogen, um ein File nachzuladen:

    Nachgeladen und direkt gestartet werden soll also ein Programm "test", welches sich im D64 Image befindet.
    Was allerdings passiert: das aufrufende Programm wird immer wieder aufgerufen (bzw immer wieder geladen, genau habe ich das noch nicht verstanden).
    Hab ich irgendwas offensichtliches übersehen?

  • Das dürfte wohl an dem "jsr BASIC RUN start" liegen. Überhaupt macht der Codeschnipsel ziemlich viel neben dem eigentlichen Gelade, vergisst dafür aber beim Laden eventuelle Fehler abzufangen, und die Kommentare ergeben auch nicht wirklich Sinn, ich würd daher vielleicht lieber mit Bitte melde dich an, um diesen Link zu sehen. didaktisch wertvolleren Beispiel anfangen :)

  • Nur um sicherzugehen:
    -Ist das nachzuladende Programm BASIC oder Maschinensprache?
    -Wird der Dateiname korrekt (d.h. PetSCII-) kodiert? Bau mal hinter dem jsr $ffd5 ein bcs load_error ein, sonst merkst Du ja gar nicht, wenn das Laden schiefgeht.

    Grundsätzlich: Der Codeschnipsel ist grauenhaft. Wo die Kommentare nicht fehlen, sind sie falsch. ;)

    EDIT: Colt war mal wieder schneller.

    EDIT2: Nach Konsultation von codebase: Ah, Richard Bayliss, das erklärt es. Dessen Tutorials unterbieten das Niveau von Data Becker. :whistling:

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Mit der anderen Routine hatte ich es davor erfolglos probiert. Könnte ich aber mit den neuen Erkenntnissen nochmal wagen.
    Das nachzuladene Programm ist Maschinensprache mit ner Basic Startzeile.

  • Das von Colt verlinkte Beispiel erledigt nur das Laden selbst, den Aufruf von BASIC-RUN musst Du danach natürlich noch selbst machen.
    Dass der Code nicht vom nachgeladenen Programm überschrieben werden sollte, hast Du bedacht?

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • So, nach ein paar weiteren Experimenten stehe ich nun wieder auf dem Schlauch.
    Ich nutze nun die besser verständliche Routine von hier: Bitte melde dich an, um diesen Link zu sehen.

    Allerdings mache ich vermutlich so einiges falsch, aber der Reihe nach. Ich will ein BASIC Programm nachladen (und natürlich auch starten), keine Ahnung ob ein JMP $0801 überhaupt funktioniert für diesen Zweck? Soweit komme ich aber eh nicht, da mir laut Errorcode immer ein File Not Found ausgegeben wird.
    Ich gehe so vor: Ich kompiliere das File und füge es einem D64 hinzu, welches die Datei "abspann" bereits enthält.
    Bis dahin zu kommen war schon ein Learning, aber jetzt geht's ohne einen Schubs in die richtige Richtung nicht weiter.


    Die $d020er sind nur für's schnelle Debugging drin.
    Vielen Dank für Eure Hilfe.

  • versuch mal das hier:

    Code
    fname  
    !scr "ABSPANN"; groß geschrieben
    fnameend


    Steht denn bei $BA auch schon #$08 bzw die richtige Device No. drin?

  • Danke Dir. War auch meine erste Idee, aber das scheint es nicht zu sein.
    Oder das ist nicht das alleinige Problem.
    Wie würde denn ein korrekte BASIC Aufruf nach dem laden aussehen müssen?

  • ein jmp $080x wird auch nicht gehen bei reinen BASIC Programmen.
    Du willst ja den Basic-Interpreter damit fuettern und nicht den BasicQuelltext an die CPU weiterreichen direkt.
    Da ginge zB Folgendes:

    Code
    jsr $e453 ; prepare BASIC pointers for RUN 
    jsr $a660 ;
    jsr $a68e ; RUN
    jmp $a7ae ;

    Benutzt in meinem Mini-TurboTape-loader :wink:
    Bitte melde dich an, um diesen Link zu sehen.[]=turbo&s[]=tape

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.

  • True Drive on/Dev Traps off (wahlweise auch umgekehrt sollte bei KERNAL Load auch gehen) und (wichtiger) richtiges .D64 image attached?

    EDIT: zieh dir lieber mal Enthusis wink mit dem :zaunpfahl: rein

  • Eigentlich sollte es wohl !pet und nicht !scr sein, da die Kernal-Routine PETSCII und keine Screencodes erwartet. Aber das macht glaube ich keinen Unterschied zu Ryk's Vorschlag...

    ────────────────────────────────────────────────────────────
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    ────────────────────────────────────────────────────────────

  • Jetzt sind wir schon ein ganzes Stück weiter!
    Ich glaube beide Fixes waren notwendig. Jetzt wird das BASIC Programm zumindest geladen (bricht, anders als sonst, allerdings mit einem OUT OF MEMORY ab).


    Euch auf jeden Fall schonmal vielen Dank für die Blitzantworten!

  • Das OUT OF MEMORY problem hat was mit dem zu tun, was Enthusi gepostet hat

  • Fehlt da nicht noch das Setzen des BASIC-Ende-Zeigers in $2d/$2e vor dem jsr $e453?

    Edit: IIRC müssten zwei Befehle reichen:

    Code
    bcs error    ; if carry set, a load error has happened
    
    
          stx $2d ; Neu!
          sty $2e ; Neu!
    
          jsr $e453 ; prepare BASIC pointers for RUN

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Das war's!!

    Klasse, es läuft!
    Vielen Dank an alle Beteiligten. 15 Minuten und die Sache war gelöst - kann mit kein besseres Forum vorstellen.

    Hier nochmal der lauffähige Code falls später mal jemand ein ähnliches Problem hat:

  • Super, ich bin grad an nem Projekt, in dem ich das auch brauchen kann.
    Eigentlich müste man damit ein beliebiges PRG nachladen können und nicht nur basic, da ja ein nicht basic prg ja einen sys befehl am beginn stehen hat, der ja auch basic ist.
    Oder liege ich da falsch?

  • Wenn du dein Maschinensprache Programm bei $C000 beginnen lässt, wäre es kontraproduktiv, eine BASIC-SYS-Zeile bei $0801 mit abuzuspeichern.

    Du würdest die KERNAL Load Routine nutzen mit Ziel $C000 und am Ende dann einfach JMP/JSR $C000 machen nach dem Ladevorgang