Hallo Besucher, der Thread wurde 20k mal aufgerufen und enthält 99 Antworten

letzter Beitrag von bigby am

Projektvorstellung: xlink -- Datentransfer PC <> C64 über usb/parport für x-dev und mehr

  • Das war mir so nicht klar, dass der C128 durch Reset am Userport nicht alles zurücksetzt. D.h. Du hast einen Draht vom Prozessor aus dem C128 raus geführt und klemmst den dann auf den Jumper. Damit kannst Du dann aber nicht mehr so einfach den Adapter aufstecken und abziehen. Da sind dann immer noch extra Handgriffe nötig...


    Wäre hier eventuell eine Softwarelösung besser? Wahrscheinlich aber nicht, da dies einen angesteuerten Kernal voraussetzt. Und das ist ja bei eigenen (abgestürzten) Routinen nicht gewährleistet. Oder den C128 so modifizieren, so dass Pin 3 am Userport alles zurücksetzt...


    Ja, bei dem C128, auf dem ich getestet habe, habe ich tatsächlich ein Kabel aus dem Gehäuse hängen lassen, das ich dann an den oberen Jumper-PIN hänge. Ob eine interne Lösung möglich ist weiß ich nicht, da ich mich mit dem C128 nicht wirklich auskenne. Ich würde vielleicht einfach stumpf die vom RESET-PIN des Userports abgehende Leiterbah unterbrechen und da das "echte" Reset-Signal anhängen, wenn mir ein Kabel zu doof wäre. Ob es allerdings andere Userport-Module für den C128 gibt, die auf das Standard-Verhalten des Reset-Pins setzen, weiß ich nicht. Ich bin selbst kein C128 Nutzer und habe die C128 Unterstützung auf Anfrage von Thom Braxton eingebaut, der mir auch einen C128 bereitgestellt hat. Da wollte ich dann doch keine potentiell "breaking changes" an der Hardware machen...


    Mit Jumper hat der Anwender zumindest alle Optionen offen. Entweder Kabel anbinden oder Jumper schließen und den C128 intern entsprechend modifizieren.


    Und deswegen wird die "Revision A" auch eine Verbindung vom Userport PC2 (Pin 8) zur Atmel-CPU (PB0, Pin 14) haben. Da man sowieso die Servant64-Firmware für die andere Hardware anpassen müsste, hab ich den am besten zugänglichen Pin an der Atmel-CPU gewählt.


    Solange die Hardware kompatibel zu meiner bleibt sehe ich da kein Problem. Am at90usb sind ja noch einige Leitungen frei... das in später in eine Revision meiner Hardware zu übernehmen ist sicher auch möglich.


    Nur für mein Verständnis: Du hast XLink auf die Servant64-Hardware angepaßt? Sehe ich das so richtig? So dass Du im C64 den XLink-Kernal laufen hast und auf dem PC mit "xlink ..." Kontakt zum C64 aufnehmen kannst? Und dazwischen ist die Servant64-Hardware?


    Genau. Der "Stack" sieht so aus: Anwendung -> xlink.dll -> ( Treiber <--> Firmware) -> CIA2 PORT B -> C64 Server (kernal/prg). Für die Unterstützung eines anderen Übertragungsweges braucht es nur einen neuen Treiber und u.U. eine Firmware. (Im Falle des Parallelport-Kabels entfällt z.B. auch die Firmware).


    Ich habe also die Servant-Hardware mit einem neuen Treiber/Firmware Paar xlink-kombatibel gemacht. Du möchtest jetzt den umgekehrten Weg gehen und die xlink-Hardware für die Servant-Software anpassen. In diesem Fall müsste die xlink-Hardware halt eine Firmware kriegen, die das Servant64-Protokoll implementiert, sowie die zusätzliche Leitung nach PC2. Ich sehe keinen Grund, warum das nicht gehen sollte. Natürlich würde eine solche Firmware dann auch in Zukunft kompatibel zur Servant-Firmware bleiben müssen.


    Gern geschehen. Ich will auch gar nicht irgenwie als Konkurrenz angesehen werden. Das Teil zu löten, dauert schon etwas und ist inklusive der folgenden Reinigung vom Flußmittel nicht ohne. Für den Hobbybastler würde ich in jedem Fall Deine bedrahtete Version empfehlen.


    Konkurrenz? Im Gegenteil... die Software ist ja gerade daraufhin konzipiert, dass der konkrete Übertragungsweg vom PC zum C64 transparent ist und durch das Implementieren eines weiteren Treibers andere Hardwarelösungen angebunden werden können, ohne das die anderen Komponenten des stacks (dll, C64-Server) angepasst werden müssen. Wenn jemand lieber deine Version bauen möchte habe ich da überhaupt nichts gegen.


    Und außerdem: die xlink-Lizenz erlaubt dir sowieso alles damit zu tun, was du willst, solange deine Änderungen ebenso frei bleiben... Ich bin aber auch immer bereit, neue Möglichkeiten in das vorhandene Projekt zu übernehmen, vorausgesetzt, sie sprengen das Grundkonzept nicht.

  • Wenn ich mir die ESP8266 Module so ansehe, die es jetzt wie Sand am Meer gibt, dann draengt sich eine WiFi Version des XLink geradezu auf. Das koennte sogar eine 1 Chip Loesung sein, weil der ESP nicht nur eine Serial -> WiFi Protokollwandler ist, sondern ein vollwertiger uC mit bis zu 16 GPIO pins + SPI + seriell (je nach Modul). Was meint ihr?

  • Wenn ich mir die ESP8266 Module so ansehe, die es jetzt wie Sand am Meer gibt, dann draengt sich eine WiFi Version des XLink geradezu auf. Das koennte sogar eine 1 Chip Loesung sein, weil der ESP nicht nur eine Serial -> WiFi Protokollwandler ist, sondern ein vollwertiger uC mit bis zu 16 GPIO pins + SPI + seriell (je nach Modul). Was meint ihr?

    Interessanter Ansatz... Ich habe aber bis jetzt keine ESP8266 Module mit ca. 10 GPIOs gesehen. Hast Du da eine Quelle?


    Eine 1-CPU-Lösung könnte sowas werden, eine 1-Chip-Lösung nicht, da man nicht die Pegelwandlung außer Acht lassen darf. Der ESP8266 arbeitet mit 3.3V, der Userport hat/erwartet 5V-Pegel...

  • Hmm, das mit den 3,3V ist wohl so. Die ESP halten zwar angeblich 6V an den pins aus, aber das ist anscheinend keine echte 5V Toleranz, sondern die interne Ueberspannungs - Schutzbeschaltung. Level Shifter ist da sicher angebracht, auch wenns vielleicht funktionieren wuerde. Das Modul ESP-12-E (https://www.adafruit.com/products/2491 oder https://www.tindie.com/product…ter-with-esp-12d-4-mbyte/) hat 9 GPIO, wobei ich gerade sehe, dass SPI nur fuers programmieren ist.


    Wenn es kein Modul mit 11 GPIOS gibt, waere ein nibble modus vielleicht eine Moeglichkeit?

  • Wozu denn überhaupt die Übertragung über WLAN? Nur weil es mittlerweile Module wie das 8266 gibt, heißt das doch noch nicht, dass es überall Sinn macht. Gerade in diesem Fall wäre es ja nur ein kabelloser Übertragungsweg und nicht etwa eine echte Netzwerkanbindung des C64 a la RR-Net.

  • Wenn es kein Modul mit 11 GPIOS gibt, waere ein nibble modus vielleicht eine Moeglichkeit?


    Man kann beim ESP8266 über gewisse Hacks den GPIO9 und GPIO10 benutzbar machen, das ist jedoch mit etwas Lötarbeit an SMD-Chips verbunden. Also sicher nicht Sache für jedermann. Generell haben die Module maximal 9 verfügbare GPIOs.


    Ein Nibble-Modus würde eine Änderung im Kernal benötigen, dann kannst Du nicht mehr umstecken um ein kabelgebundenes Modul zu verwenden. Fazit: Für jedes Modul ein eigenen Kernal --> Halte ich für ungünstig...


    Man könnte mittels Port-Expandern die Anzahl der GPIO erhöhen, hat dann aber mit Verzögerungen durch die Übertragung vom ESP8266 zum Port-Expander zu kämpfen: Ich hatte mir mal den TCA6416A rausgesucht: 16 zusätzliche Bits, plus Level-Shifting auf 5V. Leider mit I2C-Übertragung mit maximal 400KHz. Da bekomme ich ein Byte in vielleicht 100µs (eher mehr) übertragen. Macht maximal 10KByte (eher weniger) pro Sekunde. Im Moment werden bei mir mit der originalen XLink-Schaltung laut "xlink benchmark" 20KByte pro Sekunde übertragen...


    Während Hennings Strobe-Puls auf /Flag2 nur ein paar µs dauert ist er bei mir mit dem Port-Expander ca. 50µs lang... :(


    Also scheidet I2C als Schnittstelle für Port-Expander aus, die Übertragungsraten würden unterirdisch werden...



    Als nächstes versuche ich mal SPI als Verbindung zwischen ESP8266 und einem Port-Expander. In der Regel sind hier 10MHz als Taktfrequenz möglich, so dass das Schicken eines Bytes von der ESP8266-CPU zum Port-Expander nur ein paar µs dauern sollte...

  • Also Gehäuse per 3D-Drucker drucken? Oder passende Gehäuse verwenden? Letzteres ist für mich wesentlich einfacher und darum habe ich meine SMD-Version des Adapters modifiziert, so dass er in ein "Standard"-Gehäuse reinpaßt. Sofern man dieses Gehäuse dann noch irgendwo kaufen kann...

    Ich überlege derzeit, mir ein xlink zu bauen, und Deine Variante mit den Verbesserungen gefällt mir sehr gut! Exakt Dein Layout zu verwenden hat aber nur dann einen Sinn, wenn ich auch dieses Gehäuse irgendwo herbekomme. Weißt Du (oder sonst jemand) eine Bezugsquelle? Oder hat das mal jemand vermessen und für den 3D Druck modelliert? (Hätte eine gewisse Ironie... :) )


    Sonst würde ich vermutlich gleich auf ein gedrucktes Gehäuse zielen und auf Basis Deines Schaltplans ein rechteckiges Board erstellen.

  • Exakt Dein Layout zu verwenden hat aber nur dann einen Sinn, wenn ich auch dieses Gehäuse irgendwo herbekomme. Weißt Du (oder sonst jemand) eine Bezugsquelle?


    Nein, leider weiß ich keine Bezugsquelle. Und ich habe schon tagelang mit einer Suche danach verbracht. Ich habe meine damals bei Donald im Sinchai-Shop gekauft, welchen es ja bekanntlich nicht mehr gibt. Vielleicht aber hat @Bobbel ja zwischen den überlassenen Restbeständen des Sinchai-Shops noch ein paar Userport-Gehäusekappen, die er verkaufen könnte.


    Ich hätte auch Interesse an ein paar Userport-Gehäusen...


    Gruß
    Thomas

  • Vielleicht aber hat @Bobbel ja zwischen den überlassenen Restbeständen des Sinchai-Shops noch ein paar Userport-Gehäusekappen, die er verkaufen könnte.

    Jupp, habe ich. Bin nur noch nicht dazu gekommen an der Baustelle weiter zu arbeiten.

  • Heute bin ich endlich dazu gekommen, die XLINK Platine zusammenzubauen, die ich großzügiger Weise von @Freak erhalten habe. Nachdem mit der von mir selbst compilierten Firmware erst garnichts ging, habe ich die "offizielle" Version 1.3 geflasht, und siehe da: Alles funktioniert bestens! Ein feines Gerät, das mir bei einem der kommenden Projekte bestimmt eine große Hilfe sein wird.




    Nur mein Plan, den XLINK-Kernal von EasyFlash3 zu laden, geht nicht ganz auf, da man nach jedem Reset wieder im EF3 Menü landet. Hätte ich vorher drauf kommen können.
    Vielen Dank für das tolle Projekt an @Henning und auch nochmal an @Freak für die geduldige Unterstützung. :thnks:

  • Hallo!


    Macht es eigentlich noch Sinn sich mit XLink weiter zu beschäftigen?


    Der Grund meiner Frage ist folgender:


    Ich habe jetzt seit ungefähr einem Jahr eine kostenreduzierte Hardware für das XLink-Protokoll hier rumliegen. Die Firmware ist zwar noch (lange) nicht fertig, aber wenn ich mir die Softwareseite anschaue, dann kommt bei mir nicht wirklich Lust auf, an der Firmware weiter zu schreiben.


    Meine Hardware würde ohne Userport-Stecker und Gehäuse bei einer Fertigung in China so geschätzt 3,00-3,50 EUR kosten, davon Kosten für Platine und Bauteile von insgesamt unter 2,00 EUR.



    Softwareseitig ist das Repository auf einem aktuellen Linux-Betriebssystem jedoch nicht kompilierbar (es wird eine alte Version des KickAssemblers vorausgesetzt) und Henning hat 2016 in seinem Repository hier schon geschrieben, dass er nicht vorhat, seinen Quelltext an die damals aktuelle Version 4.x anzupassen.


    Weiterhin hat der User richy64 2019 im Repository hier auf einen Fehler im "RAM-based Server" hingewiesen, aber keinerlei Rückmeldung erhalten.


    Henning ist hier auch schon eine sehr lange Zeit nicht mehr erreichbar (Useraccount gelöscht...), so dass ich glaube, dass das XLink-Projekt inzwischen verwaist ist, was ich bedauere. Für mich war (und ist es immernoch) eine sehr einfache und preiswerte Art, Codeschnipsel (oder auch ganze Programme) in eine echte Maschine zu übertragen und dort auszuführen.


    Wobei sein Projekt ja weit mehr vorsieht, als nur eine Datenübertragung per Kommandozeile. Henning stellt mit dem Projekt ja auch eine API zur Verfügung, aber ich glaube, da gibt es bis dato keine Anwendung für...


    Ich bin für die Pflege (und Erweiterung) der Clientsoftware zu blöd, das kann ich nicht. Ich kriege ja nicht einmal eine saubere Kompilierung der Quelltextes unter Linux Mint 20 hin. Ich könnte mich um die Firmware auf der Platine kümmern, sowie den "RAM-based Server" debuggen. Ich fing auch schon mal an, XLink auf dem VC20 zu implementieren. Nette Sache, aber lohnt sich das alles noch? (Auch sollte hier der Client derart erweitert werden, so dass er neben C64 und C128 auch den VC20 identifizieren kann...)




    Sind vielleicht Linux-Cracks hier, die den Quelltext mit Leichtigkeit übersetzen? KickAssembler 3.41 hätte ich auf der Festplatte, ist aber auch mit Tricks noch downloadbar... Oder lieber meine Platinen einmotten und auf ein anderes Pferd setzen?


    Was meint ihr?


    Gruß

    Thomas

  • Also am Bauen soll es nicht scheitern, ohne den Source jetzt genauer angeschaut zu haben glaube ich das schon hinzubekommen. Aber auch ich hadere damit, wieviel Bedarf da wohl besteht. Ich weiß, dass ich XLink fest eingeplant habe für die finale Testphase von Time of Silence 2 (was sich aber im Moment in Coronapause befindet). Binaries hab ich aber schon, also speziell dafür müsste ich mich eigentlich nicht damit beschäftigen. Schauen wir mal, wer sich noch so meldet...

  • Macht es eigentlich noch Sinn sich mit XLink weiter zu beschäftigen?

    Ich beantworte mir meine Frage mal selbst: Ja, es macht durchaus noch Sinn... :-)



    So habe ich in den letzten Wochen für einen Nachbau des Junior Computers (siehe hier), eine Anbindung des XLink-Moduls an diesen Nachbau gebastelt und übertrage jetzt Daten zwischen einem PC und dem Junior Computer II mit mehr als 10 KByte pro Sekunde.



    Allerdings lässt sich das mit einfachen Bildern in einem Thread nicht wirklich gut zeigen. Deswegen habe ich mir in den letzten Tagen eine kleine Präsentation ausgedacht und diese mit meinen begrenzten Möglichkeiten (sowohl von der Technik als auch von meinen Präsentationsfähigkeiten her) am PC aufgenommen. Das Material habe ich heute geschnitten und auf Youtube hochgeladen. Ich denke, mittels des Videos lassen sich die Möglichkeiten der XLink-Anbindung an den Junior Computer II wesentlich besser darstellen.


    Die Präsentation findet ihr hier: Klick mich... (Seid aber bitte etwas nachsichtig. Ich bin absolut kein Profi-Youtuber oder Profi-Sprecher...)


    Was haltet ihr davon? Kommentare sind willkommen...


    Gruß

    Thomas

  • Cool! Danke auch für das Video. Auf welche MCU willst Du das Xlink denn portieren? STM32?

    Auf der originalen Platine von Henning ist ein AVR-Controller (AT90USB162) drauf. Ich hatte vor ein paar Jahren die Platine schonmal für einen chinesischen CH552 von WCH angepasst, für den es leider nur eine mittelmäßige englische Übersetzung eines chinesischen Datenblatts gibt. Der Chip ist aber unwiderstehlich günstig (ca. 0,30 EUR. Okay, im Moment zahlt man für den Chip auch das 2-3 fache...) und man benötigt keinen externen Quarz für USB-Betrieb. Ich könnte also das Interface viel günstiger aufbauen. Siehe auch hier. Der Chip hat einen 8051-Kern, sowas habe ich vor Jahrzehnten schonmal programmiert, das ist mir also nicht völlig fremd. Da habe ich mit dem USB-Protokoll und der Anmeldung des USB-Devices am Host-PC mehr zu kämpfen...


    Das lag jetzt alles ein paar Jahre rum, der verlinkte Post ist ja schon ziemlich genau zwei Jahre alt. Aber als ich das Projekt für den Junior Computer II wieder rausgekramt hatte, dachte ich, dass ich für eine Anpassung dann gleich mein geändertes Design nehme und nicht mehr auf den AT90USB162 setze...


    So soll der Adapter für den Junior Computer II später mal aussehen:



    Gruß

    Thomas