Disk Monitor aufmachen und es per Hand ändern... ![]()
Dateiformate lesen/schreiben - welches nutzt man wofür?
-
aitsch -
12. Dezember 2024 um 15:05 -
Erledigt
Es gibt 56 Antworten in diesem Thema, welches 4.370 mal aufgerufen wurde. Der letzte Beitrag (
-
-
Disk Monitor aufmachen und es per Hand ändern...

Er wieder ...

-
Sehr schöner Infothread, inhaltlich habe ich dazu auch nicht mehr viel beizutragen.
Meines Wissens ist es egal wie eine Datei heisst, man kann doch alles laden, kommt nur darauf an WOMIT und WIE und nicht wie die Datei heisst.
Also für die Urpsrungsfrage: Wenn es darum geht die User davon abzuhalten, nenn die Datei ".DAT". Ich speicher alles außer dem Main PRG in DAT Dateien, Assembler code, Daten etc.
-
.DAT hört sich gut an.
Wie muss der String aussehen?
SAVE"name,....",8
-
Wolltest Du nicht nur ein paar Daten ablegen? In BASIC könnte das so aussehen.
Hier ein Auszug aus meinem Kassettenloader aus 1985:
3350 a$="filename":print"Kassette einlegen.":poke198,0:wait198,1:print
3360 open2,1,1,a$
3370 fori=1toag:printBitte melde dich an, um diesen Link zu sehen.,ng(i):next
3380 close2
3465 open2,1,0,a$
3470 fori=1toag:inputBitte melde dich an, um diesen Link zu sehen.,ng(i):next
3485 close2
-
Das geht ja schon wieder anders

Ich muss es in Assembler realisieren ....
-
Hmm ok, ich glaube in der Richtung habe ich noch nichts, was Dein Problem direkt lösen könnte.
Es sollte sich aber code finden lasse der wir oben seq und rel Daten in Assembler liest, reine Datenblöcke in PRG ist ja ein nobrainer.
Eines meiner Projekte verwendet zig PRG Dateien aber nur eine ist sinvvoll benannt. Kann ja nix passieren, die Leute laden ja in der Regel keine Dateien die "0034.PRG" heissen wenn es eine "GAME.PRG" gibt die ganz oben liegt.
-
Ich muss es in Assembler realisieren ....
Vielleicht hilft Dir das weiter....
Bitte melde dich an, um diesen Link zu sehen.
-
aitsch So, ich denke, ein wenig Code wird dir weiter helfen. In meinem Solitaire-Spiel speichere ich die folgenden Daten in einer Datei namens "STATSSOL" vom Typ PRG ab. Die Daten sind
Code; To save on disk ----------- Stats_Time0 !byte 0,10 ;best, format: sec, min Stats_Time1 !byte 0,20 ;2nd best Stats_Time2 !byte 0,30 ;3rd best Stats_Wins !byte 0,0 Stats_Lost !byte 0,0 Stats_WithTimer !byte 1; If 0, timer is not shown and time not considered Stats_CardColor !byte 9;14; color code for card color Stats_Pattern !byte 0; [0,1, or 2] Stats_SoundOn !byte 1Die liegen an einer festen Stelle XXYY im Speicher. Wenn du die als PRG abspeicherst, sind die ersten beiden Bytes in der PRG-Datei YY und XX. Beim Reinladen (zu Beginn des Spiels) werden die dann genau an die Speicherstelle XXYY geladen. Praktisch!
Hier meine Lade- und Save-Routinen. Vielleicht kannst du ja was damit anfangen.
Code
Alles anzeigenlname !text "STATSSOL,P,R" lname_end sname !text "@0:STATSSOL" sname_end LoadStats LDA #lname_end-lname LDX #<lname LDY #>lname JSR $FFBD ; call SETNAM LDA #$01 LDX $BA ; last used device number BNE skip1 LDX #$08 ; default to device 8 skip1 LDY #$01 ; not $01 means: load to address stored in file JSR $FFBA ; call SETLFS LDA #$00 ; $00 means: load to memory (not verify) JSR $FFD5 ; call LOAD BCS eror ; if carry set, a load error has happened RTS eror ; Accumulator contains BASIC error code ; most likely errors: ; A = $05 (DEVICE NOT PRESENT) ; A = $04 (FILE NOT FOUND) ; A = $1D (LOAD ERROR) ; A = $00 (BREAK, RUN/STOP has been pressed during loading) RTS SaveStats LDA #sname_end-sname LDX #<sname LDY #>sname JSR $FFBD ; call SETNAM LDX $BA ; last used device number BNE skip LDX #$08 ; default to device 8 skip LDY #$01 LDA #$00 JSR $FFBA ; call SETLFS LDA #<Stats_Time0 STA $C1 LDA #>Stats_Time0 STA $C2 LDX #<Seconds LDY #>Seconds LDA #$C1 ; start address located in $C1/$C2 JSR $FFD8 ; call SAVE BCS error ; if carry set, a load error has happened RTS error ; Akkumulator contains BASIC error code RTSDas ist sicher nicht perfekt, aber es funktioniert. Und wenn hier einige meckern wollen wegen des "@:" - ich hab das Spiel nun schon zigtausend Mal gespielt und hatte nie Probleme damit. Es wird nach jedem Sieg bzw. Verlust gespeichert. Also ca. 4000 Speicherungen ohne einen Fehler.
-
sname !text "@0:STATSSOL"
Du kennst den Bug der 1541/1570/1571?
Ich mache das immer so: ich schreibe
sname !text "s:statssol"
dann schickst Du den Befehl ab, mit dem Open-Befehl nimmst Du einfach (sname+2), die Länge des Namens natürlich auch -2, und Du läufst nicht Gefahr, dass Dir das Dos Dateien zerstört.
-
sname !text "@0:STATSSOL"
Du kennst den Bug der 1541/1570/1571?
Siehe letzte Zeilen in meinem letzten Post.

Ich mache das immer so: ich schreibe
sname !text "s:statssol"
dann schickst Du den Befehl ab, mit dem Open-Befehl nimmst Du einfach (sname+2)Welchen Befehl schicke ich ab? Und OPEN gibt es bei mir oben gar nicht. Ich wette, deine Version ist sicherer, aber ein bisschen mehr Detail wäre schön (auch für aitsch ).
-
Welchen Befehl schicke ich ab? Und OPEN gibt es bei mir oben gar nicht. Ich wette, deine Version ist sicherer, aber ein bisschen mehr Detail wäre schön (auch für aitsch ).
Den Scratch-Befehl per Open vor dem Speichern abschicken (OPEN wird in dem Link von mir aus Post Bitte melde dich an, um diesen Link zu sehen. verwendet), natürlich auch CLOSE und danach speichern (also Dein Code nur mit sname+2 als Adresse). Reicht das?
-
Moin aitsch
Ich hatte beim schreiben von QIM 4 (Thread: Bitte melde dich an, um diesen Link zu sehen.)
auch diese Überlegungen, ich habe mich für SEQ entschieden.
Anbei eine Beispiel Routine, mit der ich eine QIM ID erzeugt habe - sehr einfach eingebaut - kannst bestimmt easy durchblicken !
Die .SEQ Datei durfte ich nicht hochladen

-
Welchen Befehl schicke ich ab? Und OPEN gibt es bei mir oben gar nicht. Ich wette, deine Version ist sicherer, aber ein bisschen mehr Detail wäre schön (auch für aitsch ).
Den Scratch-Befehl per Open vor dem Speichern abschicken (OPEN wird in dem Link von mir aus Post Bitte melde dich an, um diesen Link zu sehen. verwendet), natürlich auch CLOSE und danach speichern (also Dein Code nur mit sname+2 als Adresse). Reicht das?
Ja. Sorry, stand auf dem Schlauch. Hab das "s" nicht gepeilt. Ok, so wird n Schuh draus.
Die .SEQ Datei durfte ich nicht hochladen

Du könntest ein D64 mit PRG und SEQ darin hochladen.
Ich hatte die Statistiken auch anfangs als SEQ gespeichert. Aber dann bin ich drauf gekommen, dass ich mich mit PRG nicht um die Adressen kümmern muss. Das fand ich für meine Zwecke praktischer.
-
An welcher Stelle gebe ich im Code die Info mit, welcher Dateityp gelesen/gespeichert werden soll?
Brauchst du nur beim Anlegen. Es kann immer nur eine Namen geben, egal welchen Typs (mal abgesehen von Directory-Editoren, die direkt im Directory herumfuhrwerken) - CBM-DOS lässt einen eine Datei anlegen, auch wenn die gleichnamige Datei einen anderen Typ hat. Daher braucht eigentlich beim Laden nur der Name (ohne Typbezeichnung) angegeben werden.
So könnte man auch (mit einem Dir-Editor) auch eine Datei erstellen, die CBM-DOS vielleicht auch nicht mehr findet - ich bin mir nicht sicher, ob dann die Typangabe hier eine weiter hinten im Dir. liegende, gleichnamige Datei tatsächlich findet.
-
sname !text "@0:STATSSOL"
Du kennst den Bug der 1541/1570/1571?
Die Syntax @0: gilt als Workaround für den Bug. Siehe Bitte melde dich an, um diesen Link zu sehen..
-
An welcher Stelle gebe ich im Code die Info mit, welcher Dateityp gelesen/gespeichert werden soll?
... Es kann immer nur eine Namen geben, egal welchen Typs (mal abgesehen von Directory-Editoren, die direkt im Directory herumfuhrwerken) - CBM-DOS lässt einen eine Datei anlegen, auch wenn die gleichnamige Datei einen anderen Typ hat. Daher braucht eigentlich beim Laden nur der Name (ohne Typbezeichnung) angegeben werden. ...
Das ist eine wertvolle Info.Es kann also keine:DEMO.PRG &DEMO.DATgleichzeitg auf einer Disk geben.Und egal ob DEMO.DAT oder DEMO.PRG, ich lade immer mit :Das erspart mir jede Menge Frust beim Umsetzen

-
Die Syntax @0: gilt als Workaround für den Bug. Siehe C64-Wiki: REPLACE (SAVE-@-Bug).
Ehrlich: davon habe ich noch nie gehört. Wäre aber mal interessant, warum es mit der Null (angeblich) nicht auftritt. Aber wir bewegen uns mit dem Exkurs dann doch schon OT.
-
Es kann also keine:
DEMO.PRG &DEMO.DAT
gleichzeitg auf einer Disk geben.Doch doch, das funktioniert ohne Probleme. Er meinte, eine DEMO als PRG und DEMO als SEQ.
-
Ich hatte die Statistiken auch anfangs als SEQ gespeichert. Aber dann bin ich drauf gekommen, dass ich mich mit PRG nicht um die Adressen kümmern muss. Das fand ich für meine Zwecke praktischer.
Das hat übrigens noch einen kleinen Vorteil: wenn man den ARM2IEC benutzt (der kann ja Dolphindos), dann knattert Dolphindos volles Rohr drüber, beim SEQ ist es deutlich langsamer.
-