Hallo Besucher, der Thread wurde 2,8k mal aufgerufen und enthält 5 Antworten

letzter Beitrag von Chagizzz am

Laden in Speicheradressen...

  • Hi!


    Ich friemel seit ein paar Tagen in ASM auf dem 64er rum und nun möchte ich mal einen Schritt weitergehen. Wie kann ich dem 64er verklickern das ich ein Sprite in eine bestimmte Adresse geladen haben will? Vom logischen her würde ich sagen LOAD"sprite",8,1,$adresse aber das scheint nicht zu funktionieren. :( Kann mir einer von euch weiterhelfen? Besten Dank schonmal....

  • Hi!


    So ganz verstehe ich das nun nicht? Den Befehl Load"filename",8,1,$xxxx gibt's natürlich nicht. Wenn Du also, bevor Du das eigentliche Hauptprogram startest, die Sprites an eine bestimmte Stelle laden willst, dann mußt Du entweder ein entsprechendes Modul benutzen. Mit dem Action Replay z.B. wäre das der Befehl <l"filename",8,xxxx>.
    Oder Du mußt das File schon vorher an die entsprechende Stelle speichern. Dann wird's bei einem Load"filename",8,1 auch an diese Stelle geladen.
    So oder so...ein vernünftiges Modul erleichtert bei solchen Sachen die Angelegenheit ungemein! ;)

  • In ASM verwendet man aber keine LOAD Befehle, aber der Trick lässt sich auch mit BASIC erklären: Man verwendet LOAD"bla",8,0 und setzt vorher die BASIC Startadresse dorthin, wo man gerne die Datei hätte. Die Adressen stehen sogar im Anhang des C64 Handbuchs.

    Code: Floppy Fehlerkanal abfragen - Ausserdem kann ich bei "drive not ready" den I: und N: Befehl verwenden und notfalls den Kopf manuell zurückschieben. Und Finger weg vom Stepper!
    1. 10 open1,8,15 : rem 8 ist die Geräteadresse und das kann man bei Bedarf natürlich anpassen
    2. 20 get#1,a$:?a$;:ifst<>64goto20 : rem Das CLOSE 1 am Ende kann man sich sparen, weil beim RUN automatisch ein CLOSE ALL ausgeführt wird.
    3. RUN
  • In ASM kann man aber recht bequem die Load-Routine verwenden. Man muß nur die Parameter selber setzen:


    b7 Länge des Filenamens
    bb Adresse des Filenamens l-Byte
    bc Adresse des Filenamens h-Byte (Der Filename muß in ASCII irgendwo abgelegt sein)
    b9 Sekundäradresse (0= lade an angegebene Adresse, 1= lade an Originaladresse des Files)
    ba Gerätenummer Drive
    akku=0 (Laden, 1 wäre Verify)
    x= Ladeadresse l-Byte
    y= Ladeadresse h-Byte
    jsr ffd5 (Kernal-Laderoutine)


    In Basic geht das ebenso, und fast noch einfacher:


    sys 57812 "filename",8 [,1 an Originaladresse laden]
    poke 780,0 [1 wäre Verify]
    poke 781,Ladeadresse l-Byte
    poke 782, Ladeadresse h-Byte
    sys 65493


    Ebenso lassen sich die Betriebssystemroutinen auch zum Sichern bestimmter Speicherbereiche in ASM wie in Basic flexibel einsetzen :) .



    Franz

  • Weil das gerade erst 20 Jahre her ist...


    Ich lese mit

    Code
    1. SYS(57812)"FILE",8,0:POKE780,0:POKE781,0:POKE782,160:SYS65493

    die SEQ Datei FILE nach 40960.

    Klappt soweit auch.


    Aber die ersten 2 Bytes des SEQ-Files fehlen, da SEQ-Files ja keine Startadresse haben.


    Kann man das "wegschneiden der Startadresse" irgendwie verhindern oder muss ich die SEQ-Files alle vorneweg mit zwei beliebigen Bytes füllen?


    EDIT: Sehe gerade ich bin hier im ASM, nicht Basic - bin hier durch DuckDuckGo Suche gelandet, man möge mir verzeihen.