Hallo Besucher, der Thread wurde 43k mal aufgerufen und enthält 209 Antworten

letzter Beitrag von DerSchatten am

XS1541 - universal serial adapter for CBM Floppy

  • Analog zu einem X1541 Kabel dient dieser Adapter dazu, die Floppy Hardware der Firma Commodore an einen PC anzuschliessen. Dabei werden sowohl die alten Geräte mit parallelen IEEE-488 Bus als auch die neueren mit seriellen IEC Bus unterstützt. Auch Floppy mit Speed-Dos Kabel werden von dem Adapter unterstützt.



    Hardware

    Die Verbindung des XS1541 Adapter zum PC erfolgt entweder über einen seriellen Port (RS232) oder USB. Damit ist der Adapter einfacher an moderne PC's anzuschliessen, wo oft der Druckerport fehlt oder durch das Betriebssystem schwer zugänglich ist.


    Die Kosten für den Adapter sind sehr gering und er ist einfach aufzubauen. Das Kernstück ist ein Atmel Controller Mega32. Es kann wahlweise nur der serielle IEC Bus oder nur der parallele IEEE-488 verdrahtet werden. Der Adapter kann auch gleichzeitig auf beide Bus System zugreifen, dh. der PC kann zB. gleichzeitig eine 1541 und eine 8050 ansteuern.



    Software


    Die 'Software' für den Adapter ist im Mega32 Controller gespeichert. Am PC benötigt man nichts als ein Terminal Programm wie zB. das Hyper Terminal, das bei jedem Windows PC dabei ist.



    Aufbau


    Zum Aufbau benötigt man folgende Dinge:

    • Einen Mega32 Controller und Kleinteile im Wert von ein paar Euros (Quarz, Kondensatoren, Lochraster). Für die weniger ambitionierten Bastler tut es auch ein fertiges Mega32 Board um 15€.
    • Optional ein paralleles IEEE-488 Kabel. Das Kabel wird in der Mitte durchschnitten und die Drähte an den Mega32 angelötet.
    • Optional ein serielles IEC Kabel um 3€. Das Kabel wird in der Mitte durchschnitten und die Drähte an den Mega32 angelötet.
    • Optional ein paralleles Flachbandkabel (Speed-Dos) das an den Mega32 angelötet wird.


    Falls man bereits einen XA1541 Adapter hat, kann man den selbstverständlich verwenden indem man eine 25 poligen SUB-D Buchse verwendet. Der XA1541 (oder XAP1541) kann so alternativ wie bisher direkt mit einem PC verbunden werden oder am XS1541 Adapter betrieben werden.



    Mit einem XAP1541 Adapter hat man gleichzeitig den seriellen IEC Bus und das Speed-Dos parallel Kabel angeschlossen. Die Bilder zeigen genau diese Lösung (XS1541 über SUB-D and XAP1541).


    Der XAP-1541 Adapter ist eine Erweiterung eines Standard XA-1541 mit einem parallel Kabel Anschluss (SUB-D 15 Buchse) nach der Bauanleitung von Joe Forster: XAP-1541 cable combo


    Durch die parallele Erweiterung taugt die Lösung auch als Nibble Copy. Es kann jede parallele Standardlösung verwendet werden wie SpeedDos oder DolphinDos Laufwerke.



    Alternativ zu einer seriellen Verbindung zum PC kann man noch eine USB Bridge um 13€ zwischen PC und XS1541 schalten. Der Vorteil von USB liegt auf der Hand, moderne PC oder Laptops haben oft nur noch USB und zudem übernimmt der USB Adapter nauch noch die Stromversorgung des Mega32 Controller.




    Links zu verwendbarer Hardware:




    Der Schaltplan ist auch im Quellformat beigelegt, sodass ihn jeder nach Bedarf anpassen kann. Das Dateiformat ist für den Abacom sPlan v6, für den es auch einen kostenlosen Viewer gibt.


    Die Software ist in Entwicklung und steht zur Zeit nur für parallel IEEE-488 Geräte zur Verfügung.




    .CIMG0733_Bildgröße ändern.JPGCIMG0737_Bildgröße ändern.JPG
    ieee2rs232_32.GIFxap1541.GIF
    Screenshot_2.gif

  • Hier die Beschreibung der Befehls Syntax. Im Anhang befindet sich immer die aktuelle Firmware.


    have fun!





    Befehls Syntax


    Die Befehle können direkt im Terminal Programm eingegeben werden und werden direkt vom Controller ausgeführt. Dadurch ist man komplett unabhängig von der Hardware. Das funktioniert auf jedem PC, unter Windows, Linux oder Apple OS, es muß nicht mal ein PC sein.


    Optional kann natürlich auch ein Programm am PC erstellt werden, mit dem man komfortabel auf den XS1541 Adapter zugreifen kann. Dazu kann man jede beliebige Programmiersprache benutzen, die auf den seriellen Port zugreifen kann.



    Einige Befehle kontrollieren direkt das Protokoll oder sogar die Portleitungen. Diese "low level" Befehle sind zum Test des Adapter bzw. für PC Programme gedacht.


    Einige Befehle sind noch nicht fertig implementiert, aber die Syntax wird wie beschrieben funktionieren. Für sinnvolle Verbesserungsvorschläge habe ich ein offenes Ohr.



    Jeder Befehl hat einen Mussteil und einen Kannteil. Der Kannteil kann ganz oder teilweise weggelassen werden. Der Kannteil steht in rechteckigen Klammern. Manche Befehle haben mehrere Kürzel.



    h[elp]


    Listet alle Befehle die in der Firmware des Controller implementiert sind. Es kann 'h', 'he', 'hel' oder 'help' eingegeben werden.



    iee[e]


    Der aktive Bus wird zum parallelen IEEE-488 Bus geschalten. Alle Nachfolgenden Befehle (außer IEC) beziehen sich nun auf den IEEE-488 Bus. Dieser Modus ist die Standard Einstellung nach einem Controller Reset.



    iec


    Der aktive Bus wird zum seriellen IEC Bus geschalten. Alle Nachfolgenden Befehle (außer IEEE) beziehen sich nun auf den IEC Bus.



    dev[ice] oder #


    Damit wird die aktive Gerätenummer des aktiven Bus festgelegt oder abgefragt. Wenn dem Befehl folgt ein numerischer Parameter folgt wird die Gerätenummer gesetzt. Der Befehl alleine ohne Parameter listet die aktuelle Einstellung. Für beide Bus Systeme ist die voreingestellte Adresse nach einem Reset 8.



    @


    Dieser Befehl sendet einen befehl an die aktive Floppy (Befehlskanal 15) oder fragt den Fehlerkanal / Status ab wenn der Befehl alleine (ohne Parameter) gesendet wird.



    dir[ectory] oder ca[talog] oder $


    Listet das Verzeichnis der eingelegten Diskette. Als Parameter kann optional ein String mitgegeben werden. Das Format entspricht dem des Floppy DOS (load "$....",8). Bei Doppelfloppy sollte man als Parameter zumindest das Laufwerk (0 oder 1) mitgeben, sonst wird das Verzeichnis beider Laufwerke ausgegeben, was zu einem Fehler führt wenn nicht beide Laufwerke formatierte Disketten eingelegt haben.



    filec[opy] oder fc *** noch nicht implementiert


    Kopiert Dateien von Floppy zu Floppy. IEC zu IEEE oder umgekehrt ist möglich.



    filed[ump] oder fd *** noch nicht implementiert


    Erstellt einen Hexdump von einer Datei.



    bac[kup] *** noch nicht implementiert


    Erstellt eine Image Datei einer ganzen Diskette (d64, d72, d80, d81, d82). Die Image Datei wird per X-Modem Protokoll direkt auf die Festplatte des PC gespeichert.



    res[tore] *** noch nicht implementiert


    Schreibt eine Image Datei auf eine Diskette zurück (d64, d72, d80, d81, d82). Die Image Datei wird per X-Modem Protokoll vom PC zum Adapter übertragen.



    lo[ad] *** noch nicht implementiert


    Ladet eine Datei zum PC (P00, T64). Die Datei wird per X-Modem Protokoll direkt auf die Festplatte des PC gespeichert.



    sa[ve] *** noch nicht implementiert


    Schreibt eine Datei auf eine Diskette zurück (P00, T64). Die Datei wird per X-Modem Protokoll vom PC zum Adapter übertragen.




    PROTOKOLL BEFEHLE


    Ein Assembler Programmiererwird sich mit folgenden Befehlen gleich zuhause fühlen. Die Befehle spiegeln das IEEE-488 / IEC Protokoll von Commodore wieder. Die Namen sind angelehnt an das Commodore Kernel API.



    li[sten]


    Gerät zum 'Listener' erklären.



    ta[lk]


    Gerät zum 'Talker' erklären.



    unl[isten]


    Listen Modus beenden.



    unt[alk]


    Talk Modus beenden.



    op[en]


    Datei öffnen.



    cl[ose]


    Datei schliessen.



    ba[sin]


    Ein oder mehrere Bytes vom Bus lesen (vom Talker).



    bs[out]


    Ein oder mehrere Bytes zum Bus schreiben (zum Listener).



    st


    Die alt bekannte Status Variable ST. Nach Bus Operationen werden u.U. Bits in der Variable gesetzt. Durch das Lesen des Status mit diesem Befehl wird die Variable ST auf 0 zurückgesetzt.


    Bit0=Timeout beim Lesen, Bit1=Timeout beim Schreiben, Bit6=EOI: letztes Byte wurde gesendet, Bit7="device not present error".





    LOW LEVEL BEFEHLE


    set[pin] oder sp


    Der Befehl setzt einen Ausgang auf den Pegel high. Als Parameter muß ein gültiger Pin angegeben werden. Für den IEEE-488 Bus sind folgende Namen erlaubt: a[tn], d[av], e[oi], nr[fd], nd[ac].



    res[etpin] oder rp


    Der Befehl setzt einen Ausgang auf den Pegel low. Als Parameter muß ein gültiger Pin angegeben werden. Für den IEEE-488 Bus sind folgende Namen erlaubt: a[tn], d[av], e[oi], nr[fd], nd[ac].



    listp[in] oder lp


    Der Befehl listet den Zustand des aktiven Bus. Der momentane Zustand aller Signalleitungen wird angezeigt. Signalleitungen die den Pegel "high" haben werden mit Großbuchstaben und die mit dem Pegel low durch Kleinbuchstaben dargestellt.

  • Vielleicht lässt sich einer unserer Board Hardware-Chefs überreden (znarF, Shadowolf ...)? ;)



    Ich selbst würde eine gerne eine 'professionellere' Lösung erwerben wollen (Platine statt Lochraster). Zudem könnte man den XA(p) 1541 Adapter mit auf die Platine übernehmen.


    Die Krönung wäre natürlich eine Kombination mit SD, dann könnte man damitauch noch SD2IEEE realisieren und unsere alten 8x32 Schätzchen mit SD / MMC Laufwerke versorgen. :)

  • v0.01.01


    dumpfile implementiert.


    Das String Argument (filename) kann ohne Begrenzung eingegeben werden, wenn der Dateiname kein Blank beinhaltet. Sonst kann man den String mit verschiedenen Zeichen begrenzen: ", ', {}


    Natürlich funktionieren auch Joker (*). Mit 0: oder 1: kann die Suche auf ein Laufwerk begrenzt werden.


    Beispiele:


    dumpfile testdatei
    df "cbm datei"
    df {basic datei}
    df 'oder so'



    Screenshot_2.gif

  • Super!!
    Wenn nur RX/TX benötigt werden, dann wäre ggf. auch ein Pollin Eval. Board geeignet..
    Du sprichst von einem Quartz...? Im Schaltplan sehe ich aber nichts davon..?


    Da ich leider nur serielle IEC Floppies habe.. muß ich wohl noch ein wenig warten..


    Weiter so!


    Peter

  • Wenn nur RX/TX benötigt werden, dann wäre ggf. auch ein Pollin Eval. Board geeignet..


    Ja natürlich würde das Pollin Board dafür geeignet sein.



    Du sprichst von einem Quartz...? Im Schaltplan sehe ich aber nichts davon..?


    Der Schaltplan ist eher etwas schematisch zu sehen. Es zeigt nur die "Außenbeschaltung" des Mega 32. Das kommt daher, weil ich ein vorverdrahtetes Mega32 Protoboard verwende.


    Es fehlen in dem Schaltbild auch diie Stromversorgung und dieser obligatorische Kleinkram wie Kondesnatoren und so. Effektiv betreiben kann man es auch ohne Quarz, nur wird dann halt niemals eine serielle Turbo Routine funktionieren.



    Da ich leider nur serielle IEC Floppies habe.. muß ich wohl noch ein wenig warten..


    Das wird nicht so lange dauern, da die seriellen Routinen eigentlich schon fertig sind (Dank SD2IEC). Ich dachte nur es gäbe keinen Bedarf an seriellen IEC weil dafür gibt es ja schon Lösungen: XA1541.


    Sobald die wichtigsten Funktionen implementiert sind kommt serieller IEC, versprochen.


    Geplante Reihenfolge ist:

    • Block Read
    • Memory Read
    • File download per X-Modem oder Z-Modem Protokoll
    • Image download per X-Modem oder Z-Modem Protokoll (D64, D64-40, D64-42, D64x, D64-40x, D64-42x,D71,D80,D81,D82)
    • Code Bereinigung
    • Serielles IEC
    • Serielles IEC + parallel Kabel
  • Ich hätte absolutes Interresse an so einen Adapter,wenn ich damit meine SFD-1001´er probieren könnte.Ein IEEE-488 Interface für den C64 ist ja so gut wie nicht zu bekommen,und mit löten habe ich es nicht wirklich...


    Ich auch.


    Ich kann leidlich löten aber ich arbeite mit Hardware nur wenn es sich nicht vermeiden lässt.


    Eine Platine die auch gleich den XAP Adapter drauf hat, das würde ich mir wünschen. Am besten gleich mit passenden Gehäuse, damit ich das Elektronik Zeugs nicht sehen muss. Vielleicht können wir jemanden von der Hardware Front gewinnen?

  • Also dieses Pollin Board ist ja der Hammer! Zumindest für AVR Neueinsteiger. Um 15 Euro + 3,50 für den Mega32 bekommt man eine komplette Entwicklungsumgebung inklusive Programmer!



    Natürlich ist das Board XS1541 tauglich wenn man es mit eiem Mega32 bestückt. Die Größe ist halt eher hinderlich und es kann viel zu viel, also eigentlich zu schade dafür. Aber für Leute die keinen Programmer haben vielleicht der Einstig zur AVR Welt und damit zu verschiedene Projekte. :)

  • Neue Version, jetzt läuft auch DumpBlock (db) und DumpNextBlock (dn). Natürlich wurde das U1 Kommando verwendet.



    Das Kommando dn listet den Folgeblock nach einem db oder dn Befehl. Die ersten beiden Bytes in einem Block sind normal der Verweis auf den Nächsten.



    db hat 3 Byte Argumente: Laufwerk (0/1), Spur (Formatabhängig), Sektor



    Beispiel:


    db 0 39 1


    Liest den Sektor auf Spur 39 Sektor 1 am Laufwerk 0 (erster Directory Block).




    Anmerkung: Aus mir unbegreiflichen Gründen alloziert das CBM Dos keinen Buffer mit Open("#") gleich nach dem einschalten. Zumindest meine 8050 macht da Mucken. Deshalb einfach @I senden vor dem ersten Gebrauch. Ich mach es nicht generell weil das unnötig auf die Performance ginge.



    .




    .Screenshot_3.gif

  • Neue Version mit dump memory, damit kann direkt der Speicher der Floppy ausgelesen werden.


    Alle numerischen Argumente können jetzt hexadezimal, dezimal, oktal und binär eingegeben werden.



    Hexadezimalen Zahlen muss ein $ Zeichen oder '0x' voran gestellt werden.


    Oktalen Zahlen muss eine null (0) voran gestellt werden.


    Binären Zahlen muss ein % Zeichen voran gestellt werden.



    X-modem Protokoll funktioniert jetzt auch endlich problemlos. In Kürze gibt es Datei Download über X-Modem Protokoll.


    .Screenshot_4.gif

  • Neue Version ist fertig mit Datei Download per X-Modem Protokoll. Zur Zeit werden die Dateitypen P00, PRG und T64 unterstützt.



    Die Baudrate wurde auf 38400 erhöht damit die Schnittstelle zum PC die Daten ohne Geschwindigkeitsverlust wegbringt, die eine IEEE-488 Floppy anliefert. Der Datentransfer zur Floppy und zum PC erfolgt quasi gleichzeitig, damit keine Wartezeiten entstehen.


    .

  • Es ist soweit, die letzte Funktion ist implementiert: Backup


    Backup kopiert eine Disk in ein Emulator verträgliches Diskimage Format. Zur Zeit gehen aber nur D80, D82, D81 und D64. D81 und D64 konnte ich in Ermangelung eines passenden Laufwerks noch nicht testen.


    Die Geschwindigkeit der seriellen Schnittstelle zum PC wurde auf 115K erhöht. Die Floppy ist zwar bei weitem nicht so schnell, aber wenn man nur die belegten Blöcke überträgt und die Diskette nicht voll ist, dann müssen leider auch die leeren Blöcke übertragen werden. Das liegt daran weil das Terminalprogramm am PC dumm ist und die Image Datei natürlich die volle Größe haben muss.



    Syntax:


    bu (oder backup) imagefiletyp drive option


    Als Imagefiletyp gehen im Moment D80, D82, D81 und D64


    Als drive geht 0 oder 1. Kann auch weggelassen werden dann wird 0 genommen.


    Als Option geht all oder bam. Voreingestellt ist BAM wenn die Option weggelassen wird.



    Viel Spass, falls es jemand testen kann. Für Feedback wäre ich dankbar!




    Ach ja, mit listbam oder lb kann man die BAM der Diskette ansehen ...



    .

  • Es ist Zeit für einen Zwischenstand: Nun gehen ALLE Commodore Floppy (außer der 1551). :D



    Die seriellen Floppys gehen aber erst im langsamen IEC Modus.


    Ich habe vor noch das parallele (SpeedDos) Kabel zu unterstützen und evt. den burst Modus der 1571/1581. Beim Backup fehlt auch noch die Unterstützung für die D71 und D81 Images.



    .