Hello, Guest the thread was called2.2k times and contains 9 replays

last post from skern at the

neue Hardware erkennen?

  • In unseren Filebrowser wollen wir eine Hardwareerkennung integrieren, damit wir die unterschiedlichen Fähigkeiten von MMC64, IEC-ATA, MMC2IEC, IDE-64 usw. bestmöglich unterstützen können. Es ist nicht so schwierig, zu erkennen, ob eine Hardwareerweiterung eingebaut ist aber wir müssen herausbekommen, ob eine bestimmt Geräteadresse von einer Erweiterung zur Verfügung gestellt wird. Es wäre ja auch z.B. möglich, dass jemand mehrere Erweiterungen im Einsatz hat.


    Gibt es eine Möglichkeit, für jede Geräteadresse herauszubekommen, ob es sich um eine Originalfloppy, ein MMC2IEC oder ein anderes Gerät handelt, damit man die Aufrufe entsprechend anpassen kann?

  • Quote

    Originally posted by Retrofan
    Gibt es eine Möglichkeit, für jede Geräteadresse herauszubekommen, ob es sich um eine Originalfloppy, ein MMC2IEC oder ein anderes Gerät handelt, damit man die Aufrufe entsprechend anpassen kann?


    Für die Orginale und sd2iec würde ich vorschlagen, ein UJ zu senden und wenn das Gerät wieder ansprechbar ist den Fehlerkanal auszulesen. Version 0.1 verschwindet danach zwar für eine unbestimmte Zeit vom Bus weil der Bootloader nochmal läuft (und auf meinem Entwicklungschip 10 Sekunden wartet), aber in 0.2(*) werde ich das wohl abkürzen.


    MMC2IEC sollte man am recht "schrägen" Directoryformat erkennen können: IIRC hat es keine Anführungszeichen und kein Reverse-Code in der ersten Zeile - aber bitte komplett und ohne UNTALK dazwischen einlesen, sonst hängt sich die Firmware mit ziemlich langen Timeouts weg.


    Alternativ könnte man die MMC2IEC-Erkennung auch damit versuchen, dass es auch bei unbekannten Kommandos "00,OK,00,00" zurückliefert - ohne Leerzeichen vor OK wie es die Commodore-Laufwerke machen.


    (*) Allerfrühestens nächste Woche, tendentiell eher später.

  • vorsichtig die Meldung auf irgendwelche Kommandos ist mit Vorsicht zu behandeln, da fast alle Buchstaben verbraucht sind und diverse nicht fertig entwickelte das tun.


    Die Erkennung ist, je nachdem was man tun will, bei Commodore auf 2 Arten gemacht worden.
    Wenn es um Daten auf dem Medium geht , also Dirs oder Files wird der Datenträger typ (das Filesystem auf dem Medium) geprüft .
    Wenn es um die Hartware geht, wird mit m-r 2 oder 3 Adressen geprüft, und damit auf die Hatdware bzw Firmware geschlossen.
    Der Error 73 ist nie dafür verwendet worden, da dieser ja auf falsche Medien hinweisen sollte.
    Bei CMD ist das noch auf die Spitze getrieben worden, da z.B. in der HD, 1541, 1581, cpm1581, 1571 und 16mega Partitionen sein können.



    Das einbinden dieser Verfahren ist recht einfach, da man nur eine Hand von Kommandointerpretationen benötigt, die nur wenige Byte Code brauchen.
    Z.B. wenn es einen Kanal 15 gibt, erkennt man z.B. s:bla ,da fügt man einfach m ohne weite Abfrage ein (besser ist aber richtig)und gibt z.B. die Versionsnummer im Kommando Kanal zurück.
    Wenn alle sich was anderes einfallen lassen gibt es keine Konflikte.
    Das erkennen des Mediums läuft so:


    open2,8,2,"$"
    get#2,a$:?asc(a$+chr$(0))


    das ist normalerweise auch kein Problem, da man sowiso eine recht komplexe dir Auswertung hat.
    Vorschlag : A,C,Dund H sind vergeben S umd M sind frei. die könnte man rash in dei sd2iec und mmc2iec packen ich werde für das iecatav1.35 E verwenden . gegenwärtig ist noch A drinn.

  • vorsichtig die Meldung auf irgendwelche Kommandos ist mit Vorsicht zu behandeln, da fast alle Buchstaben verbraucht sind und diverse nicht fertig entwickelte das tun.


    UI halte ich in dieser Hinsicht für unproblematisch. Das Kommando ist von Commodore als Warmstart dokumentiert und danach steht nun mal die Dos-Versionsmeldung im Fehlerkanal.


    Quote

    Der Error 73 ist nie dafür verwendet worden, da dieser ja auf falsche Medien hinweisen sollte.


    Schonmal eine der Laufwerksanleitungen gelesen? Die der 1571 und 1581 (1541 finde ich gerade keine) sagen ausdrücklich, dass das als erste Meldung im Fehlerkanal steht und verwendet werden kann um die Dos-Version der Floppy auszulesen.


    Quote

    Bei CMD ist das noch auf die Spitze getrieben worden, da z.B. in der HD, 1541, 1581, cpm1581, 1571 und 16mega Partitionen sein können.


    Senden die denn auch je nach Partitionstyp einen anderen String in der 73er-Meldung?


    Quote

    Das erkennen des Mediums läuft so:


    open2,8,2,"$"
    get#2,a$:?asc(a$+chr$(0))


    das ist normalerweise auch kein Problem, da man sowiso eine recht komplexe dir Auswertung hat.
    Vorschlag : A,C,Dund H sind vergeben S umd M sind frei. die könnte man rash in dei sd2iec und mmc2iec packen ich werde für das iecatav1.35 E verwenden . gegenwärtig ist noch A drinn.


    Gut erkannt - das Erkennen des _Mediums_ (wenn auch nicht besonders zuverlässig). Hier geht es aber um die Erkennung des _Laufwerks_. Der Wert der bei dem von dir vorgeschlagenen Test zurückgegeben wird stammt (bei einer 1541/1571) aus Byte 2 von Sektor 0, Track 18 und kann im Prinzip beliebig sein.

  • enden die denn auch je nach Partitionstyp einen anderen String in der 73er-Meldung?

    Genau das geschieht eben nicht. das mmc ändert die ja auch nicht, wenn du in einem d64 bist.


    Quote

    Gut erkannt - das Erkennen des _Mediums_ (wenn auch nicht besonders
    zuverlässig). Hier geht es aber um die Erkennung des _Laufwerks_. Der
    Wert der bei dem von dir vorgeschlagenen Test zurückgegeben wird stammt
    (bei einer 1541/1571) aus Byte 2 von Sektor 0, Track 18 und kann im
    Prinzip beliebig sein.

    Von beliebig kann nicht die Rede sein, da wenn dieses Byte bei der 1541 <> A ist kann man nicht schreiben.
    Im übrigen haben alle Medien, die im Commodore Bereich entstanden sind solch eine Kennung.
    Zitat aus dem 1541 Handbuch:

    Bei der 1570/71 ist CBM DOS 3.0 eingebaut. Dieses hat 2 Formate, 1 und 2 seitig, das steht im 3. Byte des 1. Dirblocks.
    Ausserdem gibt es ätliche 1541 Kernal die natürlich ihre eigene Meldung ausgeben.


    Schau dir mal das angehängte Programm an wie die das machen.

  • die dos einschaltmeldung (also der 73er) ist zur erkennung des laufwerks völlig untauglich, da der string quasi beliebig sein kann. (es existieren gott weiss wie viele DOS erweiterungen bzw replacements, die alle einen anderen string zurückgeben).


    das formatkennzeichen auf der disk ist auch relativ unbrauchbar, da auch das quasi beliebig sein kann und oft auch ist.


    was bleibt ist das auslesen einiger ausgesuchter stellen im drive rom, das funktioniert recht zuverlässig. das ist auch was zb dreamload zur laufwerkserkennung macht.

  • Quote from skern

    Von beliebig kann nicht die Rede sein, da wenn dieses Byte bei der 1541 <> A ist kann man nicht schreiben.
    Im übrigen haben alle Medien, die im Commodore Bereich entstanden sind solch eine Kennung.


    Danke für das "Alle", dann reicht ein Gegenbeispiel: Ein gerade herumliegendes D64-Image von Maniac Mansion Seite B hat an der Stelle 0x00. Eigentlich nicht verwunderlich wenn man bedenkt, dass da auch kein Commodore-Directory drauf ist.


    die dos einschaltmeldung (also der 73er) ist zur erkennung des laufwerks völlig untauglich, da der string quasi beliebig sein kann. (es existieren gott weiss wie viele DOS erweiterungen bzw replacements, die alle einen anderen string zurückgeben).


    Natürlich kann der relativ beliebig sein, aber bisher ist mir nur ein 1541-Rom begegnet bei dem da nicht irgendwo "1541" drinstand und bei dem bin ich mir nicht sicher ob es nicht jemand kaputtgepatcht hat.


    Quote

    was bleibt ist das auslesen einiger ausgesuchter stellen im drive rom, das funktioniert recht zuverlässig. das ist auch was zb dreamload zur laufwerkserkennung macht.


    Das klappt wieder auf diverser Alternativhardware nicht weil da M-R nicht immer implementiert ist.

  • Es ist doch ganz einfach.
    Entweder die Firmware wird dem Standard angepasst oder sie benötigt Treiber oder Patches.
    Also wenn man ein Programm zur Verwendung von Laufwerken schreibt, unterstützt man zuerst den Standard und dann Ermöglicht man Treiber einzubinden.
    Da ich auch an einem neuen Hardware arbeite ist mir der vorhandene Standard sehr lieb, da weiß ich was ich tun muss.
    Mein Error 73 ändert sich z.B. bei jeder Revision. Gegenwärtig habe ich 73, iec-ata v1.35.1,00,00.
    Und es ist nicht schwer 2 odre 4 wirtuelle M-R bzw M-W kommandos in sowas einzubauen.
    Was ich auch tun werde um z.B.die Änderung der Dev Nr zu ermöglichen und Dreamload steht auch auf dem Programm.
    Wobei die Erkennung immer von der Anwendun abhängt.
    Der Einwand das die Disketten der 1541 oft mit <> A gekennzeichnet ist ist kein Problem, da die 1541 dem default Standard folgt.
    Die da währen 2.Block im Dir mit sec!>1 ist direinträge. alle 32 Byte 30 Byte
    Nur bei den C Typen (1001,1002,8050,8250)ist das nicht so. Da muss man auf Track 39 und Sector 1 stellen.


    Auszug aus dem CMD Handbuch.

    Die Uhrzeiten sind bei Geos und CMD Standard
    Der "Commander 64" zeigt sie z.B an.