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

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

  • Ich habe hier zwei Systeme an denen ich mich vergnüge:

    1.) Einen Ubuntu PC mit Vice 3.3

    2.) Einen TheC64 Mini mit aktueller Firmware 1.6.1.

    Meistens benutze ich den TheC64 Mini.

    Mir ist aufgefallen, wenn ich den Disk-Befehl zum Löschen sende, dann verhalten die sich unterschiedlich.

    Beispiel: Ich habe eine Diskette auf der keine Datei namens "hallo" vorhanden ist.

    Dann lasse ich den folgenden Code im V2 BASIC laufen:

    Code
    10 open1,8,15,"s:hallo"
    20 open2,8,15
    30 input#2,a,b$,c,d
    40 print a;b$;c;d
    50 close2
    60 close1

    Auf dem PC mit Vice Emulator bekomme ich im Fehlerkanal folgende falsche Rückmeldung:

    01, FILES SCRATCHED, 00, 00

    Auf dem TheC64 Mini bekomme ich hingegen folgende richtige Rückmeldung:

    62, FILE NOT FOUND, 01, 00

    Das Verhalten des VICE-Emulators auf dem PC ist offenbar falsch. Auf dem TheC64 Mini ist es hingegen richtig.

    Es ist auch egal, ob ich beim PC "True Drive Emulation" ein- oder ausgeschaltet habe. Das Resultat ist immer verkehrt.

    Wie ist das bei euch? Ist das ein gängiger Fehler in Vice? Oder hab ich ein Brett vorm Kopf?

  • Auf dem PC mit Vice Emulator bekomme ich im Fehlerkanal folgende falsche Rückmeldung:

    01, FILES SCRATCHED, 00, 00

    Nein, die Meldung ist schon richtig: die "Track"-Nummer hinter "FILES SCRATCHED" gibt die Anzahl der gelöschten Dateien - hier 0(!) - an.

    Ein halbwegs aktuelles VICE mit TDE on kannst Du derweil einfach mal als Referenz ansehen, das DOS hat bei deinem einfachen Programm einfach keine Idee, daß es in Emulation läuft. Dagegen basiert die Emulation auf dem TheC64 meines Wissens auf VICE 2.4, ist also technisch gesehen ca. 10 Jahre hinterher. Das VDrive da nutzt dann scheinbar eine andere Rückmeldung, die für sich gesehen in Ordnung geht - aber nicht dazu paßt, daß zuvor ein Scratch-Befehl abgesetzt wurde.

    Du brauchst zum Lesen der Fehlermeldung übrigens keinen zweiten Kommandokanal zu öffnen. Die Meldung kannst Du in deinem Beispiel auch in File Bitte melde dich an, um diesen Link zu sehen. abrufen, wenn Du die Zeilen 20 und 50 wegläßt, und Zeile 30 auf 30 INPUTBitte melde dich an, um diesen Link zu sehen.,... änderst.

  • Das heißt ja, dass man je nach verwendetem VICE mal mit "Files Scratched" und mal mit "File not Found" rechnen muss.

    Du kennst nicht zufällig eine Methode, wie man trotz unterschiedlicher Vice-Versionen zu einem allgemeingültigen Resultat kommen kann?

    Du brauchst zum Lesen der Fehlermeldung übrigens keinen zweiten Kommandokanal zu öffnen. Die Meldung kannst Du in deinem Beispiel auch in File Bitte melde dich an, um diesen Link zu sehen. abrufen, wenn Du die Zeilen 20 und 50 wegläßt, und Zeile 30 auf 30 INPUTBitte melde dich an, um diesen Link zu sehen.,... änderst.

    Ach, so. Das wusste ich nicht. Danke für den Tipp.

  • Das heißt ja, dass man je nach verwendetem VICE mal mit "Files Scratched" und mal mit "File not Found" rechnen muss.

    Du kennst nicht zufällig eine Methode, wie man trotz unterschiedlicher Vice-Versionen zu einem allgemeingültigen Resultat kommen kann?

    Also ich Verwende Vice seit 2.2 bis 3.6 regelmäßig, immer mit der TDE mit einer 1541 (-II) und habe immer ein konsistentes Verhalten gehabt.

    Ich hab nicht den Eindruck, dass es hier tatsächlich ein großes Kopfzerbrechen in der Nutzergemeinde gibt. TheC64 würde ich da eher als Spezialfall ansehen.

  • Auf dem PC mit Vice Emulator bekomme ich im Fehlerkanal folgende falsche Rückmeldung:

    01, FILES SCRATCHED, 00, 00


    Auf dem TheC64 Mini bekomme ich hingegen folgende richtige Rückmeldung:

    62, FILE NOT FOUND, 01, 00

    Der Vice bringt die richtige Meldung, der Mini nicht.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Ausgabe "echter" C64 :

    Bitte melde dich an, um diesen Anhang zu sehen.

    VICE hat gewonnen ;)

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

  • Ich vergaß : das auf dem Mini ist ja auch eine Art VICE ... aber ich denke man weiß was gemeint ist :D

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

  • Na gut. Offenbar ist der TheC64 hier das fehlgeleitete Schaf. Aber trotzdem muss ich mein Programm nun so ändern, dass es mit beidem funktioniert.

    Denn ich benutze selbst ja auch beides. Argh! Und ich dachte ich hätte schon alles fertig. :gahh:

  • Omega

    Da du doch eh TSB nutzt, wäre es nicht sinnvoll die von GoDot bereits ausgearbeitet Lösung zu benutzen um zu prüfen ob ein File bereits vorhanden ist ?

    Bitte melde dich an, um diesen Link zu sehen.

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

  • Aber trotzdem muss ich mein Programm nun so ändern, dass es mit beidem funktioniert.

    Ein Programm an eine kaputte Emulation anzupassen ist nicht die allerbeste Idee.

    Und vielleicht auch gar nicht nötig: wenn es nur darum geht, eine nur möglicherweise zuvor vorhandene Datei zu löschen, damit eine neue Datei unter gleichem Namen gespeichert werden kann, dann reicht es doch einfach den Scratch-Befehl abzuschicken ohne die Rückmeldung zu überprüfen.

  • ...wäre es nicht sinnvoll die von GoDot bereits ausgearbeitet Lösung zu benutzen um zu prüfen ob ein File bereits vorhanden ist ?

    Niemals! Wenn ich das nicht selbst schaffe, dann komme ich mir wie ein nutzloser Wurm vor. :wurm:

  • Niemals! Wenn ich das nicht selbst schaffe, dann komme ich mir wie ein nutzloser Wurm vor. :wurm:

    Na gut, man kann es sich natürlich auch unnötig kompliziert machen :nixwiss:

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

  • Ein Programm an eine kaputte Emulation anzupassen ist nicht die allerbeste Idee.

    Aber ich liebe den TheC64 Mini als wäre er mein eigenes Kind. Und ich würde alles tun, damit mein Programm darauf funktioniert.

  • [...] ich würde alles tun, damit mein Programm darauf funktioniert.

    Also bitte: die Meldung "FILES SCRATCHED" von CBM DOS ist rein informativer Natur und nicht im eigentlichen Sinne eine Fehlermeldung (steht auch so im Handbuch!). Von so einer Art Meldung kann das Funktionieren deines Programms also nicht wirklich abhängen. Wenn nach dem Erzeugen der neuen Datei - mit dem gleichen Namen - was anderes als "00, OK, 00, 00" kommen sollte, dann kannst Du ja immer noch reagieren.

    Anders gesagt: es sind nach einem Scratch-Befehl ja auch noch andere Rückmeldungen denkbar. Etwa DRIVE NOT READY, wenn keine Diskette eingelegt ist. Diverse READ ERRORS, wenn das Laufwerk dejustiert ist und Sektoren nicht lesen kann. WRITE ERRORS, wenn sich die Floppy zuvor beim Schreiben "verhaspelt" hat (kommt bei Gleichlaufschwankungen vor).

    Generell sind die Rückmeldungen erst ab Nr. 20 relevant als Fehler. Alles bis dahin ist wie oben geschrieben informativer Natur (bei der 1581 gibt es z.B. auch 02, PARTITION SELECTED, ...) - insofern ist das Verhalten vom TheC64 mini hier auch einfach mal inkorrekt. Workaround, der aber auch auf originaler Hardware geht, s.o.

  • Mike: Es geht nicht um das Erzeugen einer neuen Dateien. Das funktioniert sowohl in VICE als auch auf dem TheC64. Es geht nur um das reine Löschen.

    Bis jetzt habe ich das so geprüft:

    Wenn b$="files scratched" dann: alles okay. Anzahl der gelöschten Dateien = a.

    Wenn b$<>"files scratched" dann: Fehler beim Löschen. Konkrete Fehlermeldung = b$ (z.B. "file not found", "disk full" usw.).

    Jetzt muß ich das ein bisschen umstricken damit beide VICEs zufrieden sind.

  • Es geht nur um das reine Löschen.

    Und der Kontext? Schreibst Du gerade sowas wie eine DOS SHELL? Und nochmal: ist das Ergebnis, ob die Datei(en) jetzt gelöscht ist (bzw. sind), für den erfolgreichen(!) Weiterbetrieb(!!) des Programms in irgendeiner Weise relevant?

  • Und der Kontext? Schreibst Du gerade sowas wie eine DOS SHELL?

    Der Kontext ist ein Zeichensatzeditor. Der hat Funktionen für:

    1.) Directory anzeigen

    2.) Datei speichern

    3.) Datei laden

    4.) Datei löschen

    5.) Datei umbenennen

    Und nochmal: ist das Ergebnis, ob die Datei(en) jetzt gelöscht ist (bzw. sind), für den erfolgreichen(!) Weiterbetrieb(!!) des Programms in irgendeiner Weise relevant?

    Ja.

    Wenn der Anwender eine Datei löschen will, die gar nicht existiert, dann bekommt er nach derzeitigem Stand der Dinge in VICE 3.3 die Meldung:

    LOESCHEN ERFOLGREICH

    (ANZAHL = 1)

    Auf dem TheC64 bekommt er hingegen die Meldung

    FEHLER BEIM LOESCHEN:

    FILE NOT FOUND

    Kann sein, dass das manch einen nicht stören würde. Aber mich stört es.

    Aber ich krieg das schon in den Griff. Ich musste nur erstmal verstehen, was da los ist und warum die falsche Anzeige auftritt.

    Das ist jetzt nur noch eine Frage der Zeit, bis ich das gelöst habe. Danke für Deine Hilfe.

  • Ich würde das Löschen einfache als Nebenaktion durchführen, ohne den Erfolge oder Misserfolg dieser Operation dem Benutzer vor die Nase zu setzen. Wenn dann beim Anlegen der Datei ein Fehler entstanden ist (FILE EXISTS), dann ist es sinnvoll, das rückzumelden (und einen neuen Schreibversuch anzubieten). Nur so eine Idee ...

  • Kann sein, dass das manch einen nicht stören würde. Aber mich stört es.

    Aber ich krieg das schon in den Griff.

    Wenn Du da Spaß dran hast, mach ruhig...

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

    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..