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

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

    Hallo Zusammen,

    Ich habe heute die erste Version meines Datentransfersystems xlink für den C64 veröffentlicht.

    Einige Features:

    • Verbindung zum PC über einfaches Parallelport-Kabel oder speziellen USB-Adapter auf den Userport
    • Server-Software auf dem C64 -- als einfaches Programm oder dauerhaft in einem gepatchten Kernal
    • Client-Software auf dem PC -- Kommandozeilentool und Programmbibliothek für Linux und Windows
    • Laden und Ausführen von Programmen vom PC aus auf den C64, Speichern von Programmen/Daten auf PC
    • Zugriff auf alle Speicherkonfigurationen -- z.B. Beladen des RAMs unter dem IO-Bereich möglich
    • Auslösen eines Hardware-Resets vom PC aus möglich
    • Grundbefehle sind load, save, peek, poke, fill, jump run
    • Zusätzliche Befehle für das Cross-Development: ping, ready, reset, identify
    • Backup und Restore von Disk-Images auf eine am C64 betriebene Floppy möglich (allerdings sehr langsam)
    • Intelligentes relocate eines im RAM betriebenen Servers bei Gefahr des Überschreibens
    • Besonders geeignet für schnelles Cross-Development auf dem PC, Übertragung und Test auf echtem C64
    • Übertragungsgeschwindigkeit von bis zu 20kb/s -- 64k in knapp drei Sekunden
    • Open Source -- Open Hardware -- alles wird veröffentlicht


    Hardware:


    Die Verbindung zum Userport kann entweder über ein einfaches Parallel-Port-Kabel oder über einen speziellen USB-Adapter auf Basis eines Atmel at90usb162 hergestellt werden. Schaltplan und Platinenlayout stehen zur Verfügung.

    Außerdem habe ich hier noch sieben Prototypen-Platinen des USB-Adapters, die ich an Interessierte zusammen mit den Bauteilen als Bausatz zum Selbstkostenpreis von 20€ plus Versand zur Verfügung stellen kann. Hierbei ist der SMD-Chip bereits gelötet. Bei Interesse bitte PM.

    Anwendungsmöglichkeiten:

    Cross-Development: Man editiert und assembliert eine prg Datei auf dem PC und testet dann z.B. mit dem Befehl

    Quellcode

    1. xlink load <dateiname> run


    Hat man mehre Dateien kann man diese auch in einem Rutsch übertragen, z.B.:

    Quellcode

    1. xlink ready load sprites.prg load charset.prg load main.prg run


    Durch das Voranstellen des Befehls "ready" wird geprüft, ob der Server Erreichbar ist. Wenn nicht wird ein Reset ausgeführt und gewartet, bis der Server erreichbar ist. Das funktioniert natürlich nur, wenn der Server auch im Kernal integriert ist.

    Ob man das ganze über Makefiles automatisiert oder den xlink-client als "Emulator" in seine IDE einfügt ist jedem selbst überlassen. Ich editiere z.B. im Emacs, die Tastenkombination Strg-Space ruft "make test" auf und das Makefile sorgt für den Rest...

    Natürlich kann man .prg Dateien in seinem Dateimanager auch mit xlink verknüpfen -- und so Programme einfach über einen Doppelklick starten.

    Ebenso könnte man .sid Dateien mit einer kleinen Batchdatei verknüpfen, die das sid mit hilfe von psid64 in ein prg konvertiert und danach über xlink überträgt und ausführt.

    Den Server im Kernal zu haben bietet einige weitere Vorteile. z.B. stecke ich meinen Quickbyte-II Eprommer Expansionsport und übertrage vor dem Brennen die Daten einfach über xlink in den Speicher des C64 -- kein mühsames Kopieren auf Diskette mehr nötig.

    Eine andere Möglichkeit ist das implementieren eines "Live-Previews" für PC-Basierte Editoren -- So habe ich mal als "proof-of-concept" einen rudimentären Charset-Editor auf dem PC programmiert, der über die entsprechenden poke- und load-Funktionen der Bibliothek die Änderungen am Zeichensatz sofort auf den C64 überträgt -- so sieht man das Ergebnis direkt auf dem PAL-Monitor. Das sind nur ein paar Zeilen code -- vielleicht kriegt man ja den ein oder anderen Autor von Editoren (SpritePad, Charpad, anyone?) dazu, einen optionalen Live-Preview Modus über xlink zu implementieren.

    Die Programmbibliothek stellt für solche Zwecke alle Grundfunktionalitäten zur Verfügung. Darüber hinaus ist auch ein lowlevel-Interface vorhanden, über das eigene Protokolle für spezielle Anwendungen programmiert werden können. Eine ausführliche Dokumentation wird noch auf der Projektseite zur Verfügung gestellt werden.

    Nachteile:

    Natürlich hat das System auch seine Nachteile. Der Userport wird belegt, und die Server-Software muss auf dem C64 laufen. Im Kernal werden die Tape-Routinen geopfert, außerdem der Memory-Check beim Start unterdrückt, um schnelle Resets zu ermöglichen (durch drücken von CBM beim Reset kann er aber noch ausgeführt werden). Das Parallel-Port Kabel ist simpel -- dazu braucht es aber einen PC mit Parallelport. Die USB-Hardware ist etwas komplexer -- dafür sind PCs mit USB überall.

    Also...

    ... wenn Ihr Interesse habt, weitere Details gibts auf der website. In eigener Sache möchte ich sagen, dass ich dieses Projekt in erster Linie für meine eigenen Zwecke programmiert habe und es aus einem gesunden open-source-Gedanken heraus veröffentliche, nach dem Motto "vielleicht braucht's ja jemand". Mir ist klar, das es bereits ähnliche Projekte wie dieses gibt, allerdings fehlten mir dort immer einige Features wie der Reset, vor allem aber die Bereitstellung der Funktionen als Bibliothek.

    Im Grunde geht es mir um den Spaß an der Sache :)

    In diesem Sinne,
    Henning
    Bilder
    • usb-adapter-oben.jpg

      185,13 kB, 600×896, 1.398 mal angesehen
    • usb-adapter-unten.jpg

      185,43 kB, 600×896, 178 mal angesehen
    • parport-kabel.jpg

      141,65 kB, 800×536, 115 mal angesehen
    • parport-reset-schaltung.jpg

      154,68 kB, 800×536, 131 mal angesehen
    • bausatz.jpg

      212,31 kB, 600×896, 142 mal angesehen
  • Henning schrieb:

    Besonders geeignet für schnelles Cross-Development auf dem PC, Übertragung und Test auf echtem C64
    Genau das was ich brauche. Perfekt!

    Henning schrieb:

    Natürlich hat das System auch seine Nachteile. Der Userport wird belegt, und die Server-Software muss auf dem C64 laufen.
    Kein Problem, bei mir ist eher das Problem, dass der Expansionsport belegt ist bzw. keinen /IO2 mehr besitzt, und deswegen viele Alternativlösungen wie Kerberos etc. ausscheiden. Mein Projekt verwendet den Userport nicht.

    Henning schrieb:

    Außerdem habe ich hier noch sieben Prototypen-Platinen des USB-Adapters, die ich an Interessierte zusammen mit den Bauteilen als Bausatz zum Selbstkostenpreis von 20€ plus Versand zur Verfügung stellen kann. Hierbei ist der SMD-Chip bereits gelötet. Bei Interesse bitte PM.
    PM folgt.


    Danke dir und frohe Ostern.
    Computer:C64, VC20 Monitor:1702, 1084S Floppy:1541, 1541-II Speicher/Datenübertragung:MMC Replay, 1541U-II, Chameleon, C64TPC, sd2iec, EasyFlash, NeoRAM, XA1541, XU1541 Sprachausgabe:Magic Voice, Voice Messenger, HearSay 1000, Adman Speech Maker, VoiceBox AlienGroup, Covox Voice Master Sonst:Robotarm SVI-2000, Kemtec AMS 64, HardSID4u se, SammichSID, SIDstation, SFX Sound Expander, SFX Sound Sampler
  • @Freak:

    Ja, schick wäre das schon, aber mehr aus meiner Sicht auch nicht. Dafür um Längen schwieriger selbst zu bauen. Der eine SMD chip ärgert mich schon, ist aber leider unvermeidlich.

    Das Layout ist extra so gehalten, dass es noch gut selbst geätzt und gelötet werden kann (Leiterbahnbreiten, Via-Anzahl und Größe, Masseflächenabstände etc).

    Gruß,
    Henning
  • Ich habe nun das API der xlink-Bibliothek auf der Projektseite ausführlich dokumentiert.

    Es wird beschrieben, wie sich die vorhandene Funktionalität von xlink in eigenen Programmen nutzen lässt, wie die Datenübertragung im Detail abläuft und wie man den Server um eigene Funktionen erweitern kann, ohne dass der vorhandene xlink-server modifiziert werden muss. Dazu gibt es auch ein kleines Beispiel, das die Nutzung der low-level Funktionen sowohl auf Seiten des C64 als auch auf Seiten des PCs erläutert.

    Im Moment prüfe ich auch, ob es möglich wäre, einen virtuellen Userport in vice zu realisieren und der xlink-Bibliothek einen entsprechenden Treiber hinzuzufügen. So könnte man das System auch ohne Hardware in vice testen und gegen die Schnittstelle programmieren. Ob und wie das vernünftig funktioniert bleibt allerdings abzuwarten.

    Falls weiteres Interesse an Bausätzen besteht, bitte ich euch, dieses kundzutun. Dann kann ich das weitere Vorgehen planen.

    Edit: Bitte teilt mir auch mit, ob ihr den SMD chip (TQFP32, 0.8mil spacing) selbst löten könnt. Wenn nicht kann ich das auch übernehmen.

    Gruß,
    Henning
  • Ich habe jetzt die Version 1.1 veröffentlicht.

    Auf der Software-Seite ist nun eine Emulationsmöglichkeit für VICE und andere Programme hinzugekommen. Dazu habe ich einen Treiber für einen virtuellen Port in xlink implementiert und einen vice-patch erstellt, der diesen virtuellen port an den in vice emulierten Userport anbindet. So kann mein System nun auch mit Vice benutzt werden. Dazu gibt es auf der Website auch eine vorkompiliertes gepatchtes win32-binary von x64. Weitere Informationen findet ihr auf der Webseite. In Kürze: Man startet die gepatchte x64.exe mit der Option -xlink, läd den server oder das kernal image und kann dann den "shm" Treiber von xlink verwenden, z.B. "xlink --device shm load myprog.prg run".

    Auf der Hardware-Seite habe ich eine neue Revision des USB-Adapters erstellt. Hier wurden zusätzliche Schutzwiderstände in die Leitungen zum Userport eingefügt, um diesen vor zu hohen Strömen zu schützen. Es handlet sich dabei nur um eine Vorsichtsmaßnahme. Um die Nutzer der ersten Platine zu beruhigen kann ich sagen, dass ich die Version ohne Schutzwiderstände bereits seit fast zwei Jahren nutze, ohne dass dabei auch nur ein einziger CIA (alt oder neu) beschädigt worden wäre. Ich habe das ausgiebig getestet, indem ich die beiden Ports auch mutwillig über lange Zeiträume gegeneinander habe arbeiten lassen, ohne das dabei etwas passiert wäre (Beide Ports auf Ausgang, alle möglichen Kombinationen von Zuständen). Diese Zustände sind jedoch durch die Software sowieso so gut wie möglich ausgeschlossen.

    Um auf diese Version zu gehen reicht es, die Software neu zu installieren (build & install from source oder den neuen Windows-Installer benutzen). Firmware und C64-Software (server.prg, kernal) wurden nicht verändert und müssen daher auch nicht neu installiert werden.

    @V.I.N.CENT: Freut mich, Danke :)
  • Die von mir gestern zum download bereitgestellte gepatchte x64.exe läuft nicht richtig, wenn ich sie (wie beschrieben) einfach in meinen vorhandenes WinVICE-Installationsverzeichnis kopiere. Die xlink-Emulation funktioniert, aber manche Konfigurationsdialoge werden einfach nicht angezeigt, z.B. "Attach disk image" oder "Sound settings".

    Daher habe ich nun eine vollständige WinVICE-Installation auf meiner Webseite bereitgestellt, mit der diese Fehler nicht auftreten:

    WinVICE-2.4.19-xlink-1.1-x86.zip