save with replace (@) - Probleme bei 15-71 -81?

  • save with replace (@) - Probleme bei 15-71 -81?

    Hallo,
    ich weiß, daß ein Fehler im ROM der 1541 ein benutzen des 'Save with Replace' ( SAVE"@laufwerk:dateiname",gerät) gefährlich macht - um nicht zu sagen: verhindert.
    In welchen Laufwerken tritt dieser Fehler eigentlich auf? Nur der 1541? Oder der 1541-II? Funktioniert das ganze mit einer 1571, einem sd2iec und einer 1581 gefahrlos, oder wurde dort der Fehler auch eingeschleppt?
    Der Hintergrund ist der, daß ich zwar noch eine 1541 und eine 1541-II eingemottet hier zu liegen habe, aber eigentlich nur mit meiner 1571 und 1581 etwas mache. Na ja, ein sd2iec wird auch noch benutzt.
    Da ich eigentlich nur zum Spaß kleinigkeiten in BASIC mache (die nicht veröffentlich werden), muss es auch nicht 1541-kompatibel sein - zumindest während der Entwicklung. Und in dieser Phase ist der Befehl eigentlich recht praktisch...

    In diesem Zusammenhang würde mich interessieren, ob man auf die schnelle mit BASIC herausfinden kann, welche Laufwerkestype gerade benutzt wird. Daß das direkt nach dem Einschalten des Laufwerks geht, weiß ich. Aber mitten im Betrieb...?
    Ein Rechner ohne Windows ist wie Erdbeerkuchen ohne Senf.
  • Im 1570/1571 Floppybuch von Data Becker heißt es dazu:
    Zitat
    Bald wird es allerdings vorkommen, daß Sie Ihr Programm etwas geändert haben und die neue Version unter dem gleichen Namen abspeichern möchten. Dazu gibt man als erstes Zeichen "@" (at­Zeichen) an, danach den gesamten Namen des Programms, das man überschreiben will, also zum Beispiel

    DSAVE "@minitest"

    Bei dieser Spezialfunktion wird zuerst das neue Programm ab­gespeichert und danach die alte Version gelöscht. Deshalb muß auf der Diskette immer noch soviel Platz sein, daß man das Pro­gramm zusätzlich (nicht ersetzend) abspeichern kann. Leider gibt es bei dieser Sache auch einen Wermutstropfen. Ist die Diskette fast voll, so arbeitet diese Ersetzungsfunktion fehlerhaft und es kann passieren, daß Ihr Programm verlorengeht. Sie sollten den @-Befehl also mit Bedacht einsetzen - oder lieber gar nicht. In BASIC < 3.0 sowie beim Monitor muß nach dem @-Befehl ein Doppelpunkt folgen, um den Programmnamen abzutrennen (z.B. SAVE "@:Minitest").

    Die Speicherzeiten der 1570/71 sind allerdings nicht so berau­schend, wie die Ladegeschwindigkeit. Dies verläuft genauso langsam wie bei der 1541. Außerdem ist das Speichern generell langsamer als das Laden, da nach jedem Schreiben nochmals ge­prüft wird, ob die Daten auf der Diskette richtig gespeichert sind.
    Zitat Ende.

    Es wird also nicht geprüft ob auf der Diskette noch genug Platz ist, das mußt du Sicher stellen, dann geht es demnach. Besser ist es du gibst eine fortlaufende Numerierung ein, dann kannst du bei einem Fehler die alte Version noch laden.
    Wem es beim Bit zählen schwindelig wird, der hat zuviel davon.

    Alt werden ist schön, das Altern nicht.
  • Der Datenmüll-Bug soll doch nur bei ganz alten ROMs der 1541 auftreten. War da nicht irgendwo ein Zahlendreher im Code für verantwortlich?
    Ob auch das "Disk Full"-Problem in bestimmten CBM-DOS-Version behoben wurde, weiß ich nicht. Das könnte man mal im Emulator testen.
    Um sich nicht auf CBM-DOS zu verlassen, kann man diese Funktion doch auch einfach nachbilden, indem man unter einem temporären Namen speichert, prüft, ob vollständig gespeichert wurde, die alte Version löscht, und dann die temporäre Datei in den alten Dateinamen umbenennt.

    Ich bin da allerdings generell lieber vorsichtig, und speichere wichtige Daten in einer neuen Datei, so daß ich immer noch auf die alte zugreifen kann, falls was schief geht.
  • ajunra schrieb:

    In diesem Zusammenhang würde mich interessieren, ob man auf die schnelle mit BASIC herausfinden kann, welche Laufwerkestype gerade benutzt wird. Daß das direkt nach dem Einschalten des Laufwerks geht, weiß ich. Aber mitten im Betrieb...?
    "mitten im Betrieb" kannst Du das erreichen, indem Du das Laufwerk einfach resettest:
    OPEN15,8,15,"UJ":CLOSE15

    wenn Du danach den Fehlerkanal ausliest, ist die Laufwerkskennung mit dabei ....
  • Der Bug existiert sowohl in der 1541 als auch in der 1571. Ob die Diskette fast voll ist oder nicht, ist dabei egal (bzw. ist das Verhalten bei einer vollen Diskette ein weiterer, ganz anderer Bug). In der 1541-II hat Commodore einen Grund für den Bug beseitigt, einen anderen aber nicht. Das macht den Bug zwar seltener, behebt ihn aber nicht komplett.

    Das SD2IEC hat den Bug nicht. Wie es bei der 1581 aussieht, weiß ich nicht - aber wer zusätzlich auch noch mit einer 1571 oder 1541 arbeitet, sollte sich SAVE-WITH-REPLACE auf jeden Fall abgewöhnen.
    Beim Speichern eigener Basic-Programme ist es am einfachsten, eine Versionsnummer an den Namen anzuhängen und diese ständig zu erhöhen.

    Das Problem wurde hier auch mal detailliert erläutert, ich suche gleich mal danach.

    @Gikauf: Bücher von Data Becker bitte nicht zitieren, sondern verbrennen.

    EDIT: Gefunden, siehe NLQs Erklärungen hier - insbesondere das PDF dort für die technischen Hintergründe.
    Yes, I'm the guy responsible for the ACME cross assembler

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Mac Bacon ()

  • LogicDeLuxe schrieb:

    Der Datenmüll-Bug soll doch nur bei ganz alten ROMs der 1541 auftreten.
    "Offiziell" als gefixt gilt das erst ab der zweiten Fassung der 1541c (als Commodore das Ding noch "1541B" nannte...) und damit auch in der 1541-II. Umgekehrt gesehen, betroffen sind alle 1541 und frühe 1541c. Im gleichen Atemzug gefixt wurde es für das 05er-ROM der 1571 (bzw. im 04er, das allerdings nie erschienen ist), betroffen sind also alle 03er-ROMS. Allerdings: siehe was Mac Bacon sagt.