Hallo Besucher, der Thread wurde 1,8k mal aufgerufen und enthält 13 Antworten

letzter Beitrag von kinzi am

Laufwerkstyp per Software erkennen

  • Ich möchte von BASIC aus den Laufwerkstyp erkennen, um in einem kleinen Loader auszuwählen, ob ein Schnelllader (Transwarp in dem Fall) zum weiteren Laden benutzt werden soll.

    Transwarp soll/kann nur bei einer echten 1541/1570/1571 benutzt werden.


    Im Groben gibt es wohl drei Fälle:

    1. An IEC hängt gar nichts; der Loader wurde z.B. von irgendeinem Modul direkt in den Speicher gekippt. Dann ist PEEK(186)=0 bzw. der Code hier tut: OPEN1,PEEK(186),1:CLOSE1:IFSTTHENPRINT"NIX AN IEC". Dann wäre wohl eine entsprechende Meldung und ein Versuch mit KERNAL-LOAD fällig.

    2. An IEC hängt was, aber kein kompatibles Diskettenlaufwerk (sondern was sd2iec-basiertes oder ähnliches).

    3. An IEC hängt eine kompatible Floppy (mit Original-ROM oder wahrschenlich kompatiblem ROM wie z.B. DolphinDOS).


    Preisfrage, wie unterscheidet man 2 und 3? Fehlerkanal zum Auslesen der ROM-Version scheint nur direkt nach Reset des Laufwerks sicher zu gehen? Nach OPEN1,8,15,"I" bringt mir hier der Fehlerkanal (bei eingelegter Diskette) nur 00,OK,00,00. Bei OPEN1,8,15,"UJ" hängt sich der C64 hier im VICE auf. Seltsam. Muss man da direkt in das kalte "M-R"-Wasser springen oder gibt's einen anderen Trick?

  • Preisfrage, wie unterscheidet man 2 und 3? Fehlerkanal zum Auslesen der ROM-Version scheint nur direkt nach Reset des Laufwerks sicher zu gehen? Nach OPEN1,8,15,"I" bringt mir hier der Fehlerkanal (bei eingelegter Diskette) nur 00,OK,00,00. Bei OPEN1,8,15,"UJ" hängt sich der C64 hier im VICE auf. Seltsam. Muss man da direkt in das kalte "M-R"-Wasser springen oder gibt's einen anderen Trick?

    OPEN 1,8,15,"UI" resetted das Laufwerk. Danach kannst du den 73er-String auslesenn und auf "1541" etc. prüfen.


    [EDIT]


    M-R ist vermutlich nicht zielführend, SC2IEC z. B. wird das wohl nicht unterstützen ...


    [/EDIT]

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • M-R ist vermutlich nicht zielführend, SC2IEC z. B. wird das wohl nicht unterstützen

    Natürlich unterstützt es das, es gibt sogar einen Befehl um die Datei festzulegen, aus der die zurückgelieferten Daten kommen sollen.

  • Danke für die Antworten! Ich war mir eigentlich sicher, dass ich UI auch probiert hatte. War wohl etwas spät...

    Aktueller Code:

    Code
    1. 100 id=peek(186):ifid<4thenid=8:goto300
    2. 110 open1,id,15:close1:ifstthen300
    3. 120 open1,id,15,"ui":input#1,ff$,fb$,sp$,se$:close1
    4. 130 l$=right$(fb$,4)
    5. 200 ifl$="1541"orl$="1570"orl$="1571"thenprint"{clr}benutze fastloader..."chr$(13)"{down}{down}load"chr$(34)"gq-turbo"chr$(34)","id", 1":goto400
    6. 300 print"{clr}benutze kernal-load..."chr$(13)"{down}{down}load"chr$(34)"gq-standard"chr$(34)","id;chr$(13)"{down}{down}{down}run"
    7. 400 poke631,13:poke632,13:poke198,2:print"{home}{down}";

    Da das virtuelle Laufwerk in VICE als Version ein "Vx.x" in den letzten 4 Zeichen zurückliefert, passt Zeile 200 sogar auch dort. Ich hoffe, dass andere Emulatoren das ähnlich machen.

    Das IF in Zeile 100 ist etwas Prinzip Hoffnung, falls das PRG direkt in den Speicher kopiert wurde - vielleicht hat dann die jeweilige Erweiterung einen LOAD-Hook installiert.

  • Kann sein, aber String-Geparse ist generell eher fehleranfällig. Letzten Endes willst Du ja nur gucken, ob das Gerät Custom-Code ausführen kann, oder? Also siehe oben. =)


    Auf 1581 zu prüfen ist nicht wirklich relevant, weil Transwarp-Dateien nicht sinnvoll auf eine 3,5"-Disk kopiert werden können. Das dürfte den Leuten, die das versuchen, hoffentlich auffallen.

    (Es gibt dennoch ein Stück Detektionscode in Transwarp, welches $e5c6 aus dem Laufwerk liest - das ist Teil des ID-Strings mit "15xx" - und mit '4' oder '7' zufrieden ist, aber nicht mit '8'.)

  • Ach an der Stelle ist das denke ich okay. Ist ja "Fail Fast", und wenn auf einem eigentlich kompatiblen Laufwerk (keine Ahnung, ein OC-188N vielleicht, oder eine 1541 mit Speeder-ROM) dann nur das Kernal-LOAD benutzt wird, ist's auch kein Beinbruch.

    M-x mag ich nicht so, denn wer weiß, was noch ganz andere/"alte neue" Lösungen (1541-III und Konsorten) da machen bzw. ob die sich dann nicht aufhängen oder ähnliches.

  • OpenCBM hat das gleiche Problem...


    Die Funktion cbm_identify() (https://github.com/OpenCBM/Ope…/opencbm/lib/detect.c#L66) versucht, einige Laufwerke zu identifizieren. Grob gesehen geht es dabei wie folgt vor:


    • Lese $FF40/$FF41 as low/high eines 16-Bit-Werts ("magic")


      • = $AAAA -> Dann Lese $FFFE/FFFF (Reset-Vektor) as low/high eines 16 Bits Werts "magic2"
      • Falls magic2 != $FE67, dann wird magic := magic2


    • Werte magic aus ("case-Statement")
      • = $AAAA: 1540 oder 1541
      • = $FEB6: 2031, 2031LP
      • = $F00F --> 1541-II
      • = $CD18 --> 1541C
      • = $10CA --> DolphinDOS 1541
      • = $6F10 --> SpeedDOS 1541
      • = $8085 --> ProfessionalDOS 1541
      • = $AEEA --> 64'er DOS 1541
      • = $180D --> Turbo Access oder Turbo Trans
      • = $094C --> ProLogic DOS
      • = $FED7 --> 1570
      • = $02ac => 1571
      • = $01ba => 1581
      • = $32f0 => 3040
      • = $c320 oder = $20f8 => 4040
      • = $f2e9 => 8050 dos2.5
      • = $c866 oder = $c611 => 8250 dos2.7

    Das ist nicht vollständig und erkennt auch nicht alle ROMs eindeutig, aber es ist zumindest ein Start, mit dem ich eigentlich ganz gut über die Runden komme. Allerdings nutze ich so etwas wie sd2iec auch nicht.


    Beachte beim Parsen des Format-Strings, dass z.B. die 1540 als V170 gemeldet wird. Das scheint ein interner Code-Name von Commodore zu sein, der es bis ins ROM geschafft hat. Das könnte bei anderen Laufwerken auch so sein.

  • Natürlich unterstützt es das, es gibt sogar einen Befehl um die Datei festzulegen, aus der die zurückgelieferten Daten kommen sollen.

    Und womit ist diese Datei standardmäßig vorbelegt? Ich nehme an, das muss der User erst selbst einrichten? Wie viele User haben ihr SD2IEC so konfiguriert, dass es sich bei M-R entsprechend konfiguriert?


    Es ging nicht um die "M-R"-Funktion allgemein, sondern was man damit anstellen kann, um ein Laufwerk zu identifizieren. Und dazu scheint es mir - auch nach obiger Ergänzung - nicht zu taugen.

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Und womit ist diese Datei standardmäßig vorbelegt?

    Per Default gibts eine kleine Tabelle mit ein paar Einträgen, um die ROM-Erkennung einiger bestimmter Fastloader in die gewünschten Wege zu zwingen.


    Wie viele User haben ihr SD2IEC so konfiguriert, dass es sich bei M-R entsprechend konfiguriert?

    Die GEOS/Wheels-Fraktion dürfte das Feature häufig nutzen.


    Und dazu scheint es mir - auch nach obiger Ergänzung - nicht zu taugen.

    Mit meinem Kommentar wollte ich andeuten, dass das Auslesen des ROMs via M-R ausdrücklich keine geeignete Methode ist, um sd2iec zu erkennen.

  • Mit meinem Kommentar wollte ich andeuten, dass das Auslesen des ROMs via M-R ausdrücklich keine geeignete Methode ist, um sd2iec zu erkennen.

    OK, das war auch meine Sicht darauf. Dann passt das ja. ^^

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.