Hello, Guest the thread was called1.6k times and contains 5 replays

last post from schergentoni at the

Save-

  • also, ich will den Bereich von (z.B.) $3000-$4000 auf Diskette speichern und gehe laut versch. Handbüchern folgendermassen vor:


    lda #1
    ldx #8
    ldy #0
    jsr $ffba
    lda $fb ; Länge des filenamens
    ldx #<filename
    ldy #>filename
    jsr $ffbd
    lda #$f7; in $f7/$f8 steht #$00 #$30, also Startadresse
    ldx #$00
    ldy #$40
    jsr $ffd8


    es wird dann auch was gespeichert, allerdings ein 1 Block grosses File, was ja nun wirklich nicht sein kann.
    Habs mir gerade mal angesehen, er speichert einen komplett falschen Bereich, im Beispiel ab $2833 ein paar Bytes weit und das wars...
    Was mach ich falsch??

  • Ich habe es gerade mal mit ROM-Listing, ACME und Emu versucht. So sollte es gehen :


    !to "save"
    !cpu 6502
    *=$1000



    lda#$00
    sta$f7
    lda#$30
    sta$f8
    lda#$06
    sta$fb


    lda #1
    ldx #8
    ldy #0
    jsr $ffba
    lda $fb ; Länge des filenamens
    ldx #<filename
    ldy #>filename
    jsr $ffbd
    lda #$f7


    ldx #$00
    ldy #$40
    jsr $ffd8
    rts


    filename !text "@:TEST"




    Gruesse
    Michael

  • Gerätenummer in BA setzen (Filenummer und Sec.Adr. werden gar nicht gebraucht bzw. von der Routine selbst gesetzt)


    Filenamen (Länge, Adresse) setzen wie gehabt.


    Adresse Fileanfang in C1 und C2


    Adresse Fileende in AE und AF


    JSR F5ED (Register und Status bei Einsprung egal)

  • danke erstmal an alle. Mann zur Zeit bin ich wohl echt bisschen durch den Wind... hatte bei der Endadresse einfach Hi und Lowbyte vertauscht. Dummer Anfängerfehler, ich weiß... hat sich also erledigt, jetzt savet er wie's sein soll.
    @kottira: deine Methode scheint mir sehr effektiv zu sein, die Parameter also von Hand gleich dahinzusetzen wo sie hingehören und vollends direkt in die SAVE Routine springen. Spart PLatz in der Zeropage. Werd ich jetzt wohl auch so machen, vielen Dank