Hallo Besucher, der Thread wurde 1,8k mal aufgerufen und enthält 13 Antworten

letzter Beitrag von Stephan Scheuer am

Dreamload, Datei speichern?

  • Eine Frage: Ich benutze Dreamload als Schnelllader.


    Zwischen den Ladezyklen möchte ich auch mal eine Datei speichern, da laufe ich allerdings in eine Art Endlosschleife. Dreamload ist mit
    jsrLdLoc + 6


    abgeschaltet. Laut Doku sollte ich dann Kernal-Routinen (wie das Speichern) wieder ausführen können. Da es ein Spiel ist, habe ich natürlich einiges abgeschaltet.


    Was genau braucht ein Kernal-Save aktiviert, bzw. restauriert, damit es funktioniert? Bestimmte Interrupt-Quellen? Bestimmte Werte in der Zeropage?


    $01 steht auf $37, $ba = 8.


    So sieht der Code aus. Soweit ich sehen kann, bleibt das in KERNAL.OPEN drin stehen

  • Hallo Endurion,


    wie willst Du denn die Daten speichern ? Per SAVE $ffd8 oder wie bei einem z.B. SEQ File per OPEN und PRINT# $ffd2 ?
    Kernal SAVE funktioniert z.B. so (alter Hi-Score Saver Routine von mir):


  • Muss "secondary address nicht = 1" sein? 15 ist doch der Fehlerkanal!?

    Korrekt. Da im Eingangspost OPEN benutzt wird, kann das so nicht gehen. Würde SAVE benutzt, ginge es aber, denn LOAD und SAVE benutzen intern immer die Sekundäradressen 0 und 1, und die vom Benutzer angegebene Sekundäradresse wird anders verwendet (siehe Unterschied zwischen ",8" und ",8,1").

  • Die Routine habe ich so aber schon in anderen Projekten verwendet. Da ist vielleicht nicht klar, das ist erstmal der Teil, der eine Datei löscht (Dateiname "S:..."). Da genügt doch das OPEN, oder nicht?


    Es geht da um Spielstand speichern. Ich lösche erstmal eine evtl. existierende Datei und speichere sie dann, um den Overwrite-Bug zu umgehen.

    Ich habe nur den Eindruck, sobald ich Dreamload angestossen habe, klappt das nicht mehr. Da ich aber mehrere Teile nachlade, möchte ich Dreamload nach dem Laden immer abschalten, und dann beim Reinladen wieder aktivieren (damit es nicht auf der CIA hockt)


    Ich entnehme euren Antworten, dass das eigentlich klappen sollte. Daher vermute ich, dass ich irgendwelche ZP-Werte verstelle, die der Kernal-OPEN und SAVE erwartet. In die Richtung war die Frage eigentlich gemeint, welche Voraussetzungen braucht der Kernal, umd die beiden Funktionen einwandfrei durchführen zu können?

  • Hier mal 2 Saveroutinen von mir im ACME-Format. Vielleicht kannst du damit etwas anfangen. Falsche Werte in Adressen ab $90 bis $9F und fehlende Vektoren ab $0314 können stören. Auch wenn $D015

    nich auf #$00 steht sowie $D01A, der auch auf #$F0 stehen muss.

  • Die Routine habe ich so aber schon in anderen Projekten verwendet. Da ist vielleicht nicht klar, das ist erstmal der Teil, der eine Datei löscht (Dateiname "S:..."). Da genügt doch das OPEN, oder nicht?

    Achso - das war mir nicht ganz klar. Hättest vielleicht ein bisschen mehr von der Routine posten können.

    Dann würde ich auch mal die Angaben von Stephan prüfen!

  • Hat jemand Erfahrung mit Dreamload? Über Umwege konnte ich rauslesen, dass man für normale Kernal-Routinen DreamLoad deaktivieren muss (da gibt es einen Call für), und ca. 2 Sekunden warten, bis die Floppy wieder greifbar ist.


    Das mache ich, es klappt aber trotzdem nicht richtig. Wobei ich mich hier auch auf VICE 2.4 und/oder 3.4 verlasse, eine Floppy habe ich nicht.


    Es bleibt im Kernal.OPEN-Call stehen (bzw. irgendwo in den Kernal-Innereien)



    Edit: Nachtrag. Bei meinem kleinen Sample-Programm klappt das jetzt (ich habe den Loader-Code auf $bd00 bis $beff, das geht natürlich nicht, wenn man $37 in $01 stehen hat).

    Im Spiel selbst tut es noch nicht, das kann jetzt aber auch nicht mehr die Welt sein.

  • Das Ding macht mich kirre. Im Spiel hängt das jetzt im komplett-Abschalt-Aufruf, bei einer Schleife:


    -

    bit $dd00

    bvc -


    Register A steht auf #32. Leider kenne ich mich mit der Fastloader-Materie überhaupt nicht aus, deshalb weiß ich nicht, was genau passieren soll. Die Routine scheint SendH0 zu heissen.


    Was bedeutet das? Dreamload versucht etwas von der Floppy zu lesen, aber bekommt keine Antwort?

  • Sollte es wieder erwartend nicht funktionieren, dann einfach posten, wo der Lader ein einer Schleife festhängt.


    Ich habe nähmlich auch Probleme, mit einem IRQ-Fast-File-Trackloader, den ich durch Kernalload ($FFD5) ersetzen möchte. Das Game heißt "Little Computer People"

    Bei dem Spiel versteht sogar der Floppytreiber mehrere Direktiven, die ich in C64-RAM so nachbilden muss, dass diese die Aufgaben des Floppytreibers übernehmen.


    Nach stundenlangen analysieren des Codes habe ich es fast geschafft. Das Game läuft zu 90% störungsfrei von dinem D81-Image.:)