Gerätenummern von mehreren Floppy-Drives smart per Software jonglieren (C128-1571, Pi1541, etc.)

Es gibt 22 Antworten in diesem Thema, welches 3.692 mal aufgerufen wurde. Der letzte Beitrag (5. Mai 2019 um 22:30) ist von wweicht.

  • Hallo,

    ich habe heute einige Zeit damit verbracht, ein kleines Basic-Programm zu coden, welches die vier Gerätenummern 8,9,10 und 11 abklappert und prüft, was da so dranhängt. Danach tauscht es bei zwei Laufwerken die Gerätenummern aus (softwareseitig bis zum nächsten Reset des Laufwerks).

    Alles kein Hexenwerk, und wer das ganze per Hardware löst, braucht sowas nicht. Mich hat eher interessiert, ob es überhaupt von Basic aus möglich ist.

    Hintergrund: Ich habe einen C128DCR und eine Pi1541. Der C128DCR hat eine 1571 eingebaut, die immer auf Adresse 8 lauscht. Hardwaremäßig müsste ich an die Platine ran, um die Adresse umstellbar zu machen. Softwaremäßig kann ich von Basic aus die Adresse ändern bis zum nächsten Reset, was mir evtl. schon reicht.

    Die Pi1541 habe ich je nach Laune an mehreren Rechnern hängen, deswegen habe ich sie auf der SD-Karte momentan auf Gerätenummer 10 eingestellt (und ich hänge selten eine USB-Tastatur dran). Nun wollte ich ein Basic-Programm haben, das nachschaut, ob auf Gerätenummer 10 meine Pi1541 hängt und auf Gerätenummer 8 meine 1571. Wenn das der Fall ist und noch mindestens eine weitere Gerätenummer frei ist, wird die 1571 auf eine freie Gerätenummer verschoben und die Pi1541 wird auf Gerätenummer 8 gesetzt.

    Das scheint nach einigen Fehlversuchen ganz gut zu funktionieren. Bei Interesse kann ich mehr darüber berichten.

    Viele Grüße
    emulaThor

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

  • Klingt ja schonmal gut.
    Jetzt noch ein kleines Menü (mit ein paar Wahlmöglichkeiten) und die Funktion von STFU dazu... ;)

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Einmal editiert, zuletzt von ADAC (1. Mai 2019 um 21:33)

  • Wenn das der Fall ist und noch mindestens eine weitere Gerätenummer frei ist

    Was hast du denn alles am Rechner hängen um alle Gerätenummern von 4 bis 30 zu belegen?

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

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

  • Klingt ja schonmal gut.
    Jetzt noch ein kleines Menü (mein ein paar Wahlmöglichkeiten) und die Funktion von STFU dazu... ;)

    Bitte melde dich an, um diesen Link zu sehen. kannte ich noch nicht, interessant. Deaktivieren eines Laufwerks sollte auch von Basic kein Problem sein, ist Bitte melde dich an, um diesen Link zu sehen. beschrieben. Ein Menü mit Wahlmöglichkeiten wäre cool, da ich heute direkt am C128 gecodet habe, ist es eher Kraut- und Rübencode momentan ohne Struktur. Aber vielleicht komme ich dazu, ein Menü zu bauen. Glücklicherweise ist die Funktionalität des Tools in Basic nicht unglaublich langsam, so dass es nicht unbedingt eine Lösung in Assembler sein muss - jedenfalls nicht von Anfang an.

    Was hast du denn alles am Rechner hängen um alle Gerätenummern von 4 bis 30 zu belegen?

    Ich hatte mich nur auf die Nummern 8,9,10,11 beschränkt in dem Fall. Habe zum Testen noch zustäzlich eine 1541-II dran, so dass tatsächlich nur noch eine Nummer frei ist. (1571, Pi1541, 1541-II).

    Ich muss den Basic-Code mal ein bisschen aufbereiten, dann melde ich mich wieder.

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

  • Hallo Leute
    ich habe auch eine Menge Geräte am Bus.

    8 1541
    9 1571
    10 1581
    11 cmd hd
    12 net2 iec im aufbeu
    13 iec2ata 1
    14 iec2ata 2 POS
    15 cmd fd
    16 cmd RL
    17 frei bis 23
    24 sd2iec POS
    25 frei bis 30

    manchmal möchte ein Programm eine 8 haben und dafür habe ich ein Programm namens "u" dieses Tauscht das aktuelle Gerät mit 8
    Bitte melde dich an, um diesen Anhang zu sehen.

  • Mein Basic-Programm ist immer noch chaotisch, aber ich hänge eine erste Version hier mal rein. Es greift folgendes Coding auf zur Detection von Geräten: Bitte melde dich an, um diesen Link zu sehen.

    Das prg hängt unten an.

    Dateien

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

    2 Mal editiert, zuletzt von emulaThor (2. Mai 2019 um 00:04)

  • Das SD2IEC vllt noch mit einbauen....

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Das SD2IEC vllt noch mit einbauen....

    Ich habe keins. Wenn Du eins hast: Bitte mal testen, welche Nummer meine Detection rausschreibt nach dem Wort UNKNOWN.

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

  • Mache ich... muss aber erst noch was Löten :syshack:

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Mache ich... muss aber erst noch was Löten :syshack:

    Prima, ich wünsche guten Lotfluss!

    Es ist auch nicht gesagt, dass die Detection oben, so wie sie ist, stabil und gut funktioniert. Gestern Abend habe ich in Vice rumgetestet damit mit allen virtuellen Laufwerkstypen - und mit einer 1540 wollte der Check gar nicht zusammenarbeiten. Da blieb die Detection hängen.

    Manchmal blieb es bei mir auch auf dem realen C128DCR hängen. Das Basic-Programm verwendet nur Basic v2 und sollte daher auf dem C64 und C128 funktionieren, allerdings kann ich mein mit petcat generiertes prg, dass ich oben angehängt habe, nicht in VICE 128 einfach reinziehen. Im VICE 64 geht es. Muss ich mit petcat für 64er und 128er getrennte prg's erzeugen?

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

  • Das Basic-Programm verwendet nur Basic v2 und sollte daher auf dem C64 und C128 funktionieren, allerdings kann ich mein mit petcat generiertes prg, dass ich oben angehängt habe, nicht in VICE 128 einfach reinziehen. Im VICE 64 geht es. Muss ich mit petcat für 64er und 128er getrennte prg's erzeugen?

    Nein. Das Problem ist die ",1" beim LOAD, welches VICE automatisch anhängt. Lässt man das weg (oder benutzt gleich DLOAD), kann man auch die Basic-Programme von "anderen" Systemen laden.

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

  • Ich habe keins. Wenn Du eins hast: Bitte mal testen, welche Nummer meine Detection rausschreibt nach dem Wort UNKNOWN.

    Das hängt davon ab, was für ein ROM-File der Benutzer eingestellt hat. Wenn er keines eingestellt hat wird im Augenblick einfach der aktuelle Inhalt eines internen Puffers zurückgeliefert, aber das kann sich jederzeit ändern. M-R ist keine geeignete Methode, um sd2iec zu erkennen.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

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

  • Das hängt davon ab, was für ein ROM-File der Benutzer eingestellt hat. Wenn er keines eingestellt hat wird im Augenblick einfach der aktuelle Inhalt eines internen Puffers zurückgeliefert, aber das kann sich jederzeit ändern. M-R ist keine geeignete Methode, um sd2iec zu erkennen.

    Das habe ich schon befürchtet... gibts alternativen?

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Das hängt davon ab, was für ein ROM-File der Benutzer eingestellt hat. Wenn er keines eingestellt hat wird im Augenblick einfach der aktuelle Inhalt eines internen Puffers zurückgeliefert, aber das kann sich jederzeit ändern. M-R ist keine geeignete Methode, um sd2iec zu erkennen.

    Ähnlich ist es mit der Detection der Pi1541: Nach dem Start ist die Pi1541 im Browse-Mode.

    Sobald man ein d64- oder ein d81-Image auswählt, ist sie im Emulationsmode und verrät dann auch nicht mehr ohne weiteres, dass sie eine Pi1541 ist. In der verwendeten Detection-Logik hat meine Pi1541 im Browse-Mode mit Kernel 1.19 den Wert 48 zurückgeliefert, der von den anderen bekannten Werten für die "realen" Laufwerke glücklicherweise abweicht.

    Allerdings habe ich nicht geprüft, ob der Wert 48 bei allen Kernel-Versionen der Pi1541 zurückgeliefert wird, oder ob er sich während der Browse-Mode-Runtime ändert. Es ist halt eine Art Notnagel, der für meinen Anwendungsfall bisher funktioniert.

    Wenn es neben M-R noch weitere Detection-Methoden gibt, dann bin ich interessiert. Ich hatte mit U9/UI rumgespielt, aber das Problem dabei ist, dass damit auch die 1571 resettet wird.

    Mit U9 bekommt man schön als Antwort "CBM DOS V3.1 1571". Und bei der Pi1541 bekommt man schön "PI1541 V01.19" (im Browse-Mode). Allerdings setzt halt ein U9 die verbogenen Laufwerksnummern wieder zurück. Eine 1571, die vorher meinetwegen bei 11 war, ist dann wieder bei 8.

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

  • Das habe ich schon befürchtet... gibts alternativen?

    UI senden und schauen, ob im Fehlerkanal "sd2iec" oder "uiec" auftaucht.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

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

  • UI senden und schauen,

    Das klappt aber nur, wenn alle Adressen per Hardware fest eingestellt sind. Ist ein Laufwerk per Software auf eine andere Adresse eingestellt, bekommt es einen Reset und hat dann eine andere Adresse.

    Ich bevorzuge für das SD2IEC:

    10 OPEN15,z,15,"X?":INPUTBitte melde dich an, um diesen Link zu sehen.,A$,B$,C$,D$
    20 CLOSE15
    30 PRINT A$,B$,C$,D$

    (z durch die Laufwerksnummer ersetzen.)

    :wink: .

    Gruß
    Werner

  • Meiner Erfahrung nach darf man nicht das Gerät erkennen sondern das Medium.
    Bei CMD kann man 5 verschiedene haben...
    Dann wird die Anzahl der Geräte immer größer. also muss man ständig updaten.
    Medien gibt es aber nicht so fiele 1541 Vormate sind sehr verbreitet. Nativ schon weniger
    und offene wie und sd2iec, hd auf pc und iec2ata sind nicht Block basiert müssen also ganz anders angefasst werden.
    Wenn ich dann irgendwann das Internet als Gerät habe ist das mit dem erkennen ... 1541 1581 html...

  • So, habe mal das Basic-Programm aus Post Nummer 6 etwas aufgeräumt, funktional sollte sich aber nichts verändert haben.

    Wie handhabt Ihr das hier allgemein - gibt es sowas wie ein kollaboratives Arbeiten an Basic-Programmen? Wahrscheinlich gibt es viele Gründe, dass man als 64er-Fan die Existenz von Basic 2.0 nach dem Einschalten des C64 super findet, aber ansonsten im Jahr 2019 nichts mehr damit zu tun haben will.

    Jedenfalls kann ich im Sourcecode-Editor vom Board hier kein petcat-Syntax-Highlighting auswählen... Gibt es hier Leute, die regelmäßig Basic-Programm-Updates veröffentlichen? Wie machen die das? Via Github und Konsorten? Über Beispiele wäre ich dankbar.

    Meiner Erfahrung nach darf man nicht das Gerät erkennen sondern das Medium.

    Das ist nicht mein Ziel hier bei diesem Projekt und würde mein Problem nicht lösen, das ich mit diesem Basic-Programm lösen kann.

    Dateien

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

  • Im letzten Posting waren noch Flüchtigkeitsfehler, hier ist die v3. Zukünftige Änderungen werde ich nicht mehr hier im Thread posten, wird sonst zu unübersichtlich. Ich werde den Sourcecode auslagern.

    Ich habe eben schon meine Pi1541 auf die neue Version 1.20 aktualisiert. Es kommt noch ein Screenshot, der zeigt, wie es bei mir in der Praxis am C128 aussieht.
    Bitte melde dich an, um diesen Anhang zu sehen.

    Dateien

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

  • Ich bevorzuge für das SD2IEC:

    10 OPEN15,z,15,"X?":INPUTBitte melde dich an, um diesen Link zu sehen.,A$,B$,C$,D$

    Mit der heute erschienenen Version 1.20 des Pi1541-Kernels wird "X?" auch unterstützt. Dies kann ich in einer der nächsten Versionen ausprobieren und hätte damit evtl. eine gute Detection inkl. SD2IEC.
    Bitte melde dich an, um diesen Link zu sehen.

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