Disk-Befehl Scratch funktioniert in manchen Vice-Versionen nicht richtig?

Es gibt 40 Antworten in diesem Thema, welches 4.213 mal aufgerufen wurde. Der letzte Beitrag (11. August 2022 um 12:31) ist von Mac Bacon.

  • ...aber die sinnvolle Vorgehensweise wäre die, den Laufwerksstatus zu holen und diesen einfach nur unverändert dem Benutzer anzuzeigen.

    Ich weiß nicht wie Du programmiertst. Aber ich persönlich versuche immer meine Vorstellungen von einem Programm so umzusetzen, wie ich es mir in meinem Konzept ausgedacht habe. Und nicht irgendwie anders weil das einfacher und/oder bequemer ist.

    Im konkreten Fall: Wenn der Anwender eine Datei löscht, die nicht existiert, dann würde das nach Deiner sinnvollen Vorgehensweise zu der Meldung führen:

    01, files scratched, 00, 00

    Und der unbedarfte C64 Anwender denkt dann: "Toll. 1 Datei gelöscht."

    Was natürlich nicht stimmt. Aber woher soll er das wissen?

    Wenn die Meldung hingegen lautet: Fehler beim Löschen: Datei nicht gefunden. dann weiß sogar ein Anfänger, was damit gemeint ist.

    Aber jeder hat da anscheinend seine eigenen Vorstellungen. Ich verwende gerne etwas Zeit darauf, ein Programm für den Anwender besser verständlich zu machen. Wieso auch nicht? Ich hab's ja nicht eilig. (Zumindest nicht bei meinen privaten Entwicklungen.)

  • Der TheC64 scheint True Drive Emulation nicht angeschaltet zu haben? Bis inklusive VICE 3.5 ist das VDrive (also True Drive aus) Bitte melde dich an, um diesen Link zu sehen.. Mit True Drive an dagegen ist die Emulation "schon ewig" auf diesem Level perfekt.

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • [...] der unbedarfte C64 Anwender denkt dann [...]

    Hier ist schon mal eine grundsätzliche Fehlannahme drin. Es gibt keine unbedarften C64-Anwender. Die Kenntnis des C64- und 1541-Handbuchs darf man einfach mal voraussetzen.

    Aus meiner Sicht sind für einen Editor, gleich welcher Art, nur drei Datei-Funktionen zwingend notwendig: 1. Speichern (mit automatischem Löschen einer vorher existenten Datei, um der Semantik des CBM DOS gerecht zu werden), 2. Laden und 3. Verzeichnis der Disk anschauen. Das habe ich so z.B. in Bitte melde dich an, um diesen Link zu sehen. auf dem VC-20 so realisiert.

    Alles darüber hinaus sind Komfort-Funktionen, die im wesentlichen in Richtung Arbeitsorganisation gehen. In dem Fall hättest Du das aber auch noch nicht zuende gedacht: Umbenennen und Löschen einer Datei, in Ordnung, was macht der User wenn alle Disketten voll sind und er erst mal eine neue Diskette formatieren muß? Wenn Du das zuende denkst, kommst Du darauf, daß Du im Grunde die komplette Funktionalität die Du von einem Dateimanager kennst, gleich noch in dein spezielles Anwendungsprogramm mit hinzupacken müßtest. Deswegen meine Frage, ob Du gerade eine DOS SHELL programmierst.

    Ich wiederhole mich hier zwar, und andere Gesprächsteilnehmer sehen das ja auch so ähnlich, aber nochmal: Nein - der erfolgreiche Betrieb deines Programms hängt eben nicht von der Rückmeldung des Scratch-Befehls ab! Was zählt ist: der User soll in der Lage sein, seine (unter Umständen stundenlange) Arbeit auf einem Speichermedium sichern zu können. Das möglichst, ohne daß das Programm zwischendurch abstürzt. Wenn von vornherein klar ist, daß das Programm als Dateioperationen "nur" Speichern, Laden und Verzeichnis anschauen ermöglicht, ist es Sache des Anwenders vorher dafür zu sorgen, daß er eine formatierte Diskette zur Hand hat. Sowas, etwas netter formuliert, stand dann auch in den Anleitungen der Programme drin.

    Du kannst es gerne etwas aufwendiger machen. Irgendwann kommst Du aber an den Punkt, wo Du einen vollwertigen Dateimanager geschrieben hast, der zufällig auch noch Zeichensätze editieren kann und das heißt, den Programmieraufwand an einen Nebenkriegsschauplatz zu verschwenden.

  • Ich wiederhole mich hier zwar, und andere Gesprächsteilnehmer sehen das ja auch so ähnlich, aber nochmal:

    Ich nicht. :D

    Komfortfunktionen sind genau das, was manche Programm von anderen unterscheidet und warum man sie gerne benutzt.

    Und nur weil einige Komfortfunktionen vorhanden sind (die einem vielleicht den Arsch retten, wenn man eben doch gerade keine freie Diskette zu Hand hat.), heisst das noch lange nicht, dass man alle denkbaren Komfortfunktionen implementieren muss.

    Diese "ganz oder garnicht" Einstellung verstehe ich nicht.

    Und ja, es gibt/gab unbedarfte C64-User, die das Floppy-Handbuch nie gelesen habe. Da kannte ich einige. ;)

  • Und nur weil einige Komfortfunktionen vorhanden sind (die einem vielleicht den Arsch retten, wenn man eben doch gerade keine freie Diskette zu Hand hat.), heisst das noch lange nicht, dass man alle denkbaren Komfortfunktionen implementieren muss.

    Das sehe ich auch so. Gerade eine einfache Formatieroption kann "lebensrettend" sein, wenn man 70 Stunden am Stück an seinem Zeichensatz gebastelt hat und beim Abspeichern plötzlich merkt, dass man keine formatierte Diskette zur Hand hat. :whistling:

    Da wir im privaten Hobbybereich sind, gilt sowieso: Jeder so, wie er es gerne bei seinem Programm haben möchte. ;)

  • Zitat

    Da wir im privaten Hobbybereich sind, gilt sowieso: Jeder so, wie er es gerne bei seinem Programm haben möchte. ;)

    Das sowieso.

    Zitat

    Das sehe ich auch so. Gerade eine einfache Formatieroption kann "lebensrettend" sein, wenn man 70 Stunden am Stück an seinem Zeichensatz gebastelt hat und beim Abspeichern plötzlich merkt, dass man keine formatierte Diskette zur Hand hat. :whistling:

    Dafür hatte ich immer den Menüpunkt Diskbefehl senden auserkoren.

    Beim Speichern entweder löschen und ersetzen. Oder erst prüfen ob bereits vorhanden und nachfragen, ob gelöscht werden soll oder ein anderer Dateiname gewählt wird.

  • Im konkreten Fall: Wenn der Anwender eine Datei löscht, die nicht existiert, dann würde das nach Deiner sinnvollen Vorgehensweise zu der Meldung führen:

    01, files scratched, 00, 00

    Und der unbedarfte C64 Anwender denkt dann: "Toll. 1 Datei gelöscht."

    Was natürlich nicht stimmt. Aber woher soll er das wissen?

    if b$ = "files scratched" then print b$":",c ;)

  • if b$ = "files scratched" then print b$":",c ;)

    Das funktioniert dann aber nicht mit dem TheC64. Der liefert nämlich im Fehlerkanal beim Löschen einer nicht existierenden Datei:

    b$="file not found", c=01

    Da würde bei Deinem Code dann stehen:    (Gar nichts.)

    Im Grunde ging es mir ja darum, meine Komfortfunktionen (ob sinnvoll oder nicht sei mal dahingestellt) so umzusetzen, dass sie sowohl auf dem TheC64 als auch mit VICE 3.3 funktionieren.

  • Omega

    Dann ist es ja aber wie Mike es schon sagte : Was machst du dann mit Sonderfällen wie BMC64 (nutzt ja auch eine abgespeckte VICE Version), oder mit Leuten die auf dem PC eine ältere Version nutzen, oder gar einen anderen Emulator wo die Ausgabe nochmal anders ist ???

    Dann darfst du dich zumindest nicht auf den Output des Fehlerkanals verlassen und brauchst etwas komplett neues welches auf allen Systemen funktioniert, inklusive dem "echten" C64 ;)

    "Werter Pöbel, wertes Gesocks ... aus dem Arsche zieht euch den Stock ..."

  • Dann darfst du dich zumindest nicht auf den Output des Fehlerkanals verlassen und brauchst etwas komplett neues welches auf allen Systemen funktioniert, inklusive dem "echten" C64 ;)

    Im Moment habe ich nur zwei Test-Systeme.

    1.) TheC64 (Mini)

    2.) VICE 3.3

    Die liefern beim Löschen leicht andere Daten im Fehlerkanal.

    Da ich z.Z. keine anderen Testsysteme zur Verfügung habe, nehme ich das vorerst als Grundlage für meine Programmierung.

    Wenn sich später gravierende Probleme mit anderen Systemen herausstellen, dann muss ich das dann sehen und updaten.

    Wahrscheinlich bin ich aber ohnehin der einzige, der das Programm benutzt. Daher lasse ich das mal auf mich zukommen...

  • LOESCHEN ERFOLGREICH

    (ANZAHL = 1)

    Wo kommt denn diese 1 bei der Anzahl her? c gibt die Anzahl an und c ist bei dir 0.

    Folgerichtig wäre also

    KEINE DATEI GELOESCHT

    oder ähnliches...

    P.S. Ich würde neben solchen Interpretationen aber auf jeden Fall auch die Original-Meldung ausgeben. Dann hat der Benutzer die Chance, sich selbst eine Meinung zu bilden.

    Bitte melde dich an, um diesen Link zu sehen. - Ratespiel • Bitte melde dich an, um diesen Link zu sehen. - BASIC-Erweiterung • Bitte melde dich an, um diesen Link zu sehen. - Sprite-Editor • Bitte melde dich an, um diesen Link zu sehen. - Zeichensatz-Editor Bitte melde dich an, um diesen Link zu sehen. - 2048 Blöcke

    Einmal editiert, zuletzt von goloMAK (10. August 2022 um 19:42)

  • Dafür hatte ich immer den Menüpunkt Diskbefehl senden auserkoren.

    This.

    Wenn man eh schon intelligente Laufwerke hat, kann man sie auch nutzen, und mit dieser recht einfach zu implementierenden Funktion bekommt der Benutzer (so er denn nicht komplett grün hinter den Ohren ist) die Möglichkeit zum Löschen, Formatieren, Umbenennen, Validieren und so weiter und so fort. Bei neueren Laufwerken ist dann auch Partitions- und Verzeichniswechsel drin und alles weitere, was der DOS-Autor sich ausgedacht hat.

    ...nach dem Absenden des eingegebenen Kommandos sollte natürlich der Laufwerksstatus abgefragt und angezeigt werden. :whistling:

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • LOESCHEN ERFOLGREICH

    (ANZAHL = 1)

    Wo kommt denn diese 1 bei der Anzahl her? c gibt die Anzahl an und c ist bei dir 0.

    He he he. Das ist ja das Witzige. Beim TheC64 steht die Anzahl in a und bei VICE 3.3 steht die Anzahl in c.

  • TheC64

    Es wäre ja vielleicht noch ganz witzig zu schauen, ob eine der früheren Methoden, Emulatoren innerhalb von C64-Software zu erkennen, funktioniert (was aber wohl nicht in BASIC möglich wäre). Oder hat TheC64 evtl. eine explizite Identifizierungsmöglichkeit implementiert?

  • LOESCHEN ERFOLGREICH

    (ANZAHL = 1)

    Wo kommt denn diese 1 bei der Anzahl her? c gibt die Anzahl an und c ist bei dir 0.

    He he he. Das ist ja das Witzige. Beim TheC64 steht die Anzahl in a und bei VICE 3.3 steht die Anzahl in c.

    Bitte? In beiden Fällen steht nach deinen Angaben in a die Fehlernummer. Und der TheC64 gibt doch sowieso FILE NOT FOUND aus. Kann dir leider nicht folgen...

    Bitte melde dich an, um diesen Link zu sehen. - Ratespiel • Bitte melde dich an, um diesen Link zu sehen. - BASIC-Erweiterung • Bitte melde dich an, um diesen Link zu sehen. - Sprite-Editor • Bitte melde dich an, um diesen Link zu sehen. - Zeichensatz-Editor Bitte melde dich an, um diesen Link zu sehen. - 2048 Blöcke

    Einmal editiert, zuletzt von goloMAK (11. August 2022 um 01:11)

  • Ich weiß nicht wie Du programmiertst. Aber ich persönlich versuche immer meine Vorstellungen von einem Programm so umzusetzen, wie ich es mir in meinem Konzept ausgedacht habe. Und nicht irgendwie anders weil das einfacher und/oder bequemer ist.

    Aber jeder hat da anscheinend seine eigenen Vorstellungen. Ich verwende gerne etwas Zeit darauf, ein Programm für den Anwender besser verständlich zu machen. Wieso auch nicht? Ich hab's ja nicht eilig. (Zumindest nicht bei meinen privaten Entwicklungen.)

    Hab ich das jetzt falsch verstanden? Das Datei löschen soll als Funktion für sich als Funktion im Programm "umgesetzt" werden. Ich dachte erst, das Löschen dient nur als Vorstufe, um sicherzustellen, dass die Datei mit dem Namen sicher geschrieben werden kann. Z.B. wenn man eine Sequ. Datei ein ändert (liest, verändert und wieder abspeichern möchte). Da ist es eigentlich irrelevant, was genau das Scratch ausgibt. Das kann man dann ja - wie schon andere geschrieben haben - kommentarlos dem Benutzer - wenn überhaupt - anzeigen. Wenn das Anlegen der Datei dann ein Problem macht (FILE EXISTS), dann ist der Benutzer zu informieren.

    Als separate Funktion hab ich in meinen Programmen nicht selten (auch bei anderen oft zu sehen) "Diskbefehl absetzen" eingebaut.

    Nach dem Absetzen des Befehls wird der Fehlerkanal angezeigt, aber nicht interpretiert. Inwiefern wär das dann bei dir notwendig?

    Übrigens, das Löschen von mehr als 99 Dateien wird ohnehin nicht erkannt und gibt dann auch "0" zurück, obwohl es funktioniert hat. Ich würde also auf den Status nicht so viel geben. ;)

  • Übrigens, das Löschen von mehr als 99 Dateien wird ohnehin nicht erkannt und gibt dann auch "0" zurück, obwohl es funktioniert hat.

    <klugscheiß>

    IIRC läuft da "nur" die BCD-Arithmetik über, d.h. es wird nicht zwingend 0 zurückgegeben, sondern es fehlt einfach die Hunderterstelle:

    100 -> 00

    101 -> 01

    ...

    199 -> 99

    usw.

    </klugscheiß>

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Ja, danke für die Details. Ich wusste es einfach nicht mehr genau so aus dem Stegreif und zum Nachschauen hatte ich keine Zeit mehr ... ;)

    Was ich mich damals erinnern kann, also du das damals auch gepostet hast, dass dann meine Bemühungen, das sonst irgendwie aus dem Speicher der Floppy oder entsprechenden Aufrufen von Floppy-Routinen herauszukitzeln, gescheitert sind. Eine Aufgabe, die einer Lösung harrt ... für Ruhm und Ehre.

  • Da kann man doch bestimmt was total Benutzerfreundliches und Robustes machen à la if ti>60 and b<50 then b=b+100... :whistling:

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.