Re: uDOS (ultra small DOS)
von Dietrich » Di 20. Okt 2020, 17:23Open 8 = Datei überschreiben mit Änderung der Dateilänge. Richtige Dateilänge wird aber nur gesetzt, wenn die Datei nur 1 Sektor groß ist oder so viele Sektoren beschrieben werden, wie sie ursprünglich hatte, sonst ist die Datei ggf. zu lang, denn bei uDOS bleibt die Anzahl der genutzten Sektoren immer unverändert.
Open 12 = Datei überschreiben ohne Änderung der Dateilänge. Funktioniert wie bei Atari-DOS, nur kann man in diesem Modus nicht lesen.
Dann werden alle 3 Sektoren beschrieben und die Dateilänge ist richtig. Wenn du aber nur 40 Bytes schreibst, wird nur 1 Sektor beschrieben und dort die Datenlänge = 40 gesetzt, die anderen Sektoren bleiben unverändert. Beim Einlesen kriegst du dann die 40 Bytes aus dem 1. Sektor, sowie die vorhandenen Daten aus
dem 2. und 3. Sektor. Denn uDOS ändert nicht die Sektor-Links.
Sofern man immer beim Einlesen gleichviele Daten liest oder soviele wie geschrieben wurden, ist dieses lustige Verhalten aber egal. Man kann auch bis EOF lesen, wenn die Datei beim Überschreiben genauso lang ist, wie sie ursprünglich angelegt wurde (das ist bei Spielen mit zu speichernder Highscoreliste oder Spielstatus meist so).
Genau. Die Abfrage auf MyDOS ist ja nur 1 Bit im Dateistatus-Byte, die darüber entscheidet, ob das Highbyte des Sektorlinks mit #3 geANDet werden muss oder nicht. Die Dateinummer wird nicht geprüft - und das Schreiben geht bzgl. der richtigen Dateilänge nur mit Einschränkungen, siehe oben.
Open 12 = Datei überschreiben ohne Änderung der Dateilänge. Funktioniert wie bei Atari-DOS, nur kann man in diesem Modus nicht lesen.
Was passiert denn, wenn man eine Datei hat, die was weiß ich 3 Sektoren lang ist, eine Länge von 301 Byte hat und man schreibt z.B. 267 Bytes?
Dann werden alle 3 Sektoren beschrieben und die Dateilänge ist richtig. Wenn du aber nur 40 Bytes schreibst, wird nur 1 Sektor beschrieben und dort die Datenlänge = 40 gesetzt, die anderen Sektoren bleiben unverändert. Beim Einlesen kriegst du dann die 40 Bytes aus dem 1. Sektor, sowie die vorhandenen Daten aus
dem 2. und 3. Sektor. Denn uDOS ändert nicht die Sektor-Links.
Sofern man immer beim Einlesen gleichviele Daten liest oder soviele wie geschrieben wurden, ist dieses lustige Verhalten aber egal. Man kann auch bis EOF lesen, wenn die Datei beim Überschreiben genauso lang ist, wie sie ursprünglich angelegt wurde (das ist bei Spielen mit zu speichernder Highscoreliste oder Spielstatus meist so).
Den ganzen Krempel hast Du in die 384 Bytes bekommen?
Genau. Die Abfrage auf MyDOS ist ja nur 1 Bit im Dateistatus-Byte, die darüber entscheidet, ob das Highbyte des Sektorlinks mit #3 geANDet werden muss oder nicht. Die Dateinummer wird nicht geprüft - und das Schreiben geht bzgl. der richtigen Dateilänge nur mit Einschränkungen, siehe oben.