uDOS (ultra small DOS)

Re: uDOS (ultra small DOS)
20.10.2020 um 18:23 Uhr von Dietrich
Open 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.

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.
uDOS (ultra small DOS)
Benutzeravatar21.10.2020 um 16:48 Uhr von Erhard
Hi,

da muß ich leider noch nachhaken, sonst verstehe ich es immer noch nicht, vielleicht mit Beispielen ... und erst mal nur DOS 2.0 und erst mal nur "8". Und bitte, es sind nur Fragen und keine Anforderungen, gell :-)

Dietrich hat geschrieben:Open 8


Dateilänge 1 Sektor SD / MD. Echte Länge 47 Byte. Nun werden 96 Byte geschrieben. Die Daten werden ja ab Byte 0 geschrieben. Bekomme ich nun unter DOS 2.0 nach dem Lesen des 96. Byte ein EOF?

Dateilänge 3 Sektoren SD / MD. Echte Länge 300 Bytes. Geschrieben werden 350 Bytes. Kommt auch hier ein EOF nach dem 350ten Byte?

Dateilänge 3 Sektoren SD / MD. Echte Länge 300 Bytes. Geschrieben werden 10 Bytes. Wird das Verzeichnis angepaßt, wird die VTOC angepaßt (Freigabe 2er Sektoren) und ist beim 11. Byte EOF?

Dateielänge 3 Sektoren SD / MD. Echte Länge 300 Bytes. Geschrieben werden 392 Bytes- Wird der 4. Sektor in der VTOC alloziert? Wird die VTOC überhaupt verwendet, um den 4. Sektor zuzuordnen? Wird die Längeninformation ins Verzeichnis geschrieben und kommt das EOF nach dem 392ten Byte?

CU, Erhard
Re: uDOS (ultra small DOS)
21.10.2020 um 17:52 Uhr von Dietrich
Fall 1 und 2: Ja, da alle Sektoren der Datei beschrieben wurden

Fall 3: Nein. Nein. Nein. Da nur einer der 3 Sektoren beschrieben wird, passt die Dateilänge nicht mehr (ist > 10 Bytes, die Datei ist aber nicht defekt). VTOC, Dir und Sektorlinks werden durch uDOS nie geändert.

Fall 4: Geht nicht, da max. 3*125 Bytes in die Datei passen. VTOC, Dir und Sektorlinks werden durch uDOS nie geändert.

Wie gesagt, uDOS ist für Spiele da, die nachladen und allenfalls einfache Dateien (fixer Länge) wie Highscoreliste oder den Spielstatus speichern. Das passiert üblicherweise so, dass einfach eine vorhandene Datei komplett überschrieben wird. Das klappt dann auch mit uDOS. Und uDOS kann auch XEX-Dateien nachladen.

Und bitte, es sind nur Fragen und keine Anforderungen

In den 384 Bytes krieg ich auch nicht mehr unter. Nicht mal einen Reset überlebt uDOS - ist für Spiele aber auch nicht nötig. :)
uDOS (ultra small DOS)
Benutzeravatar22.10.2020 um 09:27 Uhr von Erhard
Hi Dietrich,

Dietrich hat geschrieben:In den 384 Bytes krieg ich auch nicht mehr unter.


muß ja auch nicht. Wie gesagt, ich will nur verstehen / wissen: was passiert wenn.

Zu Fall 1 und 2: okay, das Byte welches anzeigt, wieviele Bytes im Sektor gültig sind wird also angepaßt

Zu Fall 3: wieviele Bytes könnte man denn mit einem normalen DOS aus dieser Datei lesen? 10 Bytes aus dem ersten Sektor, dann 125 aus dem zweiten und den Rest aus dem dritten?

Zu Fall 4: hier kommt also Error 136

In der Beschreibung zu Open Write verstehe ich nun bislang immer noch nicht den Satz: "Die neue Dateilänge stimmt nur, wenn die Datei 1 Sektor hat, sonst kann sie zu groß werden." Irgendwie scheint das zu keinem der möglichen Fälle zu passen.

CU, Erhard
Re: uDOS (ultra small DOS)
22.10.2020 um 19:34 Uhr von Dietrich
Zu Fall 3: Genau, auch Sektoren inmitten einer Datei müssen bei Atari DOS nicht voll gefüllt sein (sowas passiert z.B. beim Append mit Atari DOS 2.x)

Zu Fall 4: Ja, der Satz ist missverständlich, besser sollte da stehen:
Die neue Dateilänge stimmt, wenn alle Sektoren der Datei beschrieben wurden, sonst wird sie zu groß.
uDOS (ultra small DOS)
Benutzeravatar23.10.2020 um 13:48 Uhr von Erhard
Hi Dietrich,

Dietrich hat geschrieben:Die neue Dateilänge stimmt, wenn alle Sektoren der Datei beschrieben wurden, sonst wird sie zu groß.


Was meinst Du mit "sonst wird sie zu groß"?

Nach dem was ich bislang zu verstehen glaube würde ich meinen, daß man maximal so viel Daten in eine Datei schreiben kann, wie sie bei der Erstellung an Sektoren hatte. Also in eine 3-Sektoren-Datei (SD/MD) mit ursürünglich 360 Byte passen maximal 375 Byte, danach geht nix mehr (und uDOS gibt einen CIO Error aus)?

CU, Erhard
Re: uDOS (ultra small DOS)
25.10.2020 um 12:34 Uhr von Dietrich
"sie" bezieht sich auf die Dateilänge, nicht auf die Datei - also noch genauer:
Die neue Dateilänge stimmt, wenn alle Sektoren der Datei beschrieben wurden, sonst wird die neue Dateilänge zu groß.
Vgl. Fall 3: Nur 10 Byte geschrieben, Dateilänge ist jetzt aber nicht 10, sondern 300-(125-10)= 185, also zu groß.
auf ABBUC.de antwortenauf ABBUC.de lesen alle aktiven ABBUC-Forum-Themen zurück zu atarixle.de