Beiträge von C64-Opa

    Ich habe noch ein paar mal herum probiert aber die Verbindung zwische Vice 2 Vice klappt nicht.

    Code
    RS232NET: Error - Cant open connection.

    Alos ich habe es jetzt hinbekommen.

    Das Problem ist dass Vice die RS232 Einstellungen nur beim Neustart übernimmt, man kann die Einstellungen also nicht ändern wärend das C64 Programm oder der Vice läuft, ein RunStop/Restore hilft auch nicht.

    Zunächst muss man dafür sorgen dass eine Listener da ist (auch das kann man nicht nachträglich machen)

    Code
    socat -s tcp-listen:25232 tcp-listen:25231

    Die '-s' Option sorgt dafür dass Socat kleinere Fehler wie EOF ignoriert und trotzdem weiter läuft.

    Also bei mir hat die Verbindung zwischen Vice und netcat (also Terminal) bei 1200 Baud funktioniert (zumindest mit kurzen Strings)

    Aber noch nicht zwischen Vice <-> Vice, ich werde es auch noch einmal mit 300 Baud testen.

    Es ist ärgerlich, dass Netcat beim Beenden ein EOF schickt und der C64 (oder der Vice) dann die serielle Schnittstelle nicht mehr bedienen will.

    Für mich sieht es so aus als ob ich Vice mit 'der richtigen' Einstellung starten muss, das geht aber nicht wenn ich die Einstellung nach dem Start ändern möchte.

    Das Ganze ist ziemlich wackelig, Vice ist da keine große Hilfe, mit einem echten C64 war es irgendwie einfacher. So ist Vice als Entwicklungswerkzeug für RS232 Programme untauglich.

    Schade ich wollte so was wie ein MUD versuchen, also so eine Art minimales Textadventure bei der mehrere Leute in einem Gebäude herumlaufen.

    Meine Idealvorstellung wäre es gewesen, wenn jeder C64 die Zustandsvariablen (wer befindet sich wo und was hat er gesagt) zum nächsten C64 weiter geben, einen Ring (oder einen Tokenbus) kann man mit ein paar Kabeln sehr einfach aufbauen und vielleicht hätten 600 Baud schon für ein axeptables Spielergebnis bei 2-4 Teilnehmern gereicht.

    Ich wollte das ganze mit Basic machen, so wie man auch Textadventures mit Basic schreiben kann, ich habe das auch eher als 'technische Demonstration und Programmierübung' gesehen.

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

    Theoretisch könnte Vice beim Simulieren eines ACIAs das komplette Byte lesen und müsste nicht die an einem simulierten Userport herausgeschobenen Bits interpretieren.

    Der ACIA auf der C64 Seite zusammen mit der Vereinfachung im Vice sollte eine wesentlich höhere Baudrate erlauben, die einzigen Problemchen dabei wäre die C64 Software die den ACIA unterstützen müsste bzw. ein gepatchtes Kernal.

    Eine spezielle virtuelle Schnittstellen für die Zusammenarbeit mit VICE könnten die Funktion verbessern, ich befürchte da feht das wirtschaftliche Interesse.

    In Lubuntu 20.04 ein "sudo apt install vice" gemacht.

    Code
    $ dpkg -l | grep Versatile
    ii  vice                                          3.4.0.dfsg-1build1                            amd64        Versatile Commodore Emulator

    Also ich habe jetzt den Code bei Sourceforge geladen, etwa 20 benötigte Ressourcen mit 'apt install' installiert und dann übersetzt, hat nur ein paar Stunden gedauert und dann hatte ich eine '3.4 (GTK3 3.22.30, GLib 2.56.4)' vielleicht ist Mint doch nicht so schön wie es aussieht.

    Ich konnte jetzt aus einer Linux Shell Daten auf die serielle Schnittstelle im Vice übertragen und umgekehrt.

    Mir ist es noch nicht gelungen Daten zwischen zwei laufenden Vice Programmen zu übertragen, das Problem liegt wohl daran dass man zuerst mit 'socat' die Umleitung starten muss und die Einstellung vom Vice beim Neustart aktiviert wird, letzteres ist ziemlich blöd, wenn man jedem Vice ein unterschiedliches Setting RS232 geben will, es scheint nur beim Neustart aktiviert zu werden.

    ps.:

    Vielleicht hilft es wenn ich hier frage:

    Wie hast du den Vice nach dem Ändern der RS232 Einstellungen dazu gebracht diese ohne Neustart zu benutzen?

    detlef

    Im ROM des Amiga ist der RTS/CTS Handshake und der XOn/XOff Handshake implementiert, man braucht gar nicht ins ROM zu schauen.

    Das Ganze ist hier Bitte melde dich an, um diesen Link zu sehen. recht gut beschrieben

    Der Handshake wird noch mal hier erklärt:

    Bitte melde dich an, um diesen Link zu sehen.

    Das 'X-Draht' Protokoll benutzt die Leitungen RTS/CTS um seinem Gengenüber zu sagen ob er was empfangen kann.
    Das 3-Wire bzw. XOn/XOff Protokoll benutzt dazu spezielle Datenworte (XOn/XOff).

    Laut Dokumentation gibt es keine Version ohne Handshake, will man mit 3 Leitungen (Masse, TXD, RXD) auskommen, dann wählt man eben das mit XOn/XOff

    Ich habe die Schnittstelle mit folgendem Kommando angesprochen:

    Code
    open 2,2,0, chr$(6)+chr$(0)

    Und das steht für:

    - 300 Baud

    - 8 Datenbits

    - Keine Parity Bit

    - 1 Stopbit

    - 3 wire bzw. XOn/XOff bzw Software Handshake

    - Vollduplex

    Möchte ich RTS/CTS Handshake haben dann würde das so aussehen:

    Code
    open 2,2,0, chr$(6)+chr$(1)


    Jetzt hat die C64 Schnittstelle 2 richtig doofe Probleme:

    1. Das Rausschieben der einzelnen Datentbits geschieht in Software

    2. Handshake (auch bei RTS/CTS) geschieht auch in Software

    Ist der C64 zu langsam um die einzelnen Datenbits am Userport rechtzeitig abzufragen oder zu senden dann sind die Ergebnisse verkehrt, egal ob der Handshake richtig eingestellt ist.


    Bei Vice habe ich das zusätzliche Problem, dass ich nicht weiß ob er die Bits richtig abfragt und interpretiert, so wie es hier aussieht könnte es da Probleme geben.

    Du hast gut erkannt, dass Blöcke mit eigener Prüfziffer die Fehler bei der Datenübertragung verringern können, daher gibt es Lösungen um Fehler zu erkennen. Mit dem Parity Bit kann man eine 1-Bit Prüfzahl für jedes Byte festlegen, Protokolle wie XModem übertragen die Bytes als Block und senden Prüfsummen mit: Bitte melde dich an, um diesen Link zu sehen.

    Viele Terminalprogramme biten XModem zur Datenübertragung.

    Bringt mich allerdings nicht weiter, da ich wesentlich kürzere Datenmengen übertragen möchte.

    Ich habe noch ein wenig Probleme mit dem Zitieren in diesem Forum ... werde ich noch lernen.


    Früher(tm) hab ich mal Daten per ser. Schnittstelle vom Amiga zum C64 übertragen und dort auf EProms gebrannt.
    Die Datenübertragung übernahm ein Basic Programm*, alles selber geschrieben, Details weiß ich nicht mehr, außer dass ich wohl irgenwelche Geschwindigkeiten zwischen 600 und 1200 Baud feherfrei hinbekommen zu haben.

    * Auf dem Amiga wurden die Daten IMR mit 'copy data.txt ser:' übertragen, auf dem C64 wurden sie empfangen und wohl in eine Datei geschrieben.

    Es gab wohl ein paar Versionsunterschiede beim Vice, ich benutze zur Zeit:

    x64 3.1 (GTK+ AMD64/x86_64 Linux glibc 2.26 GCC-7.2.0)

    Mit folgendem Befehl starte ich wohl einen Server Prozess im Hintergrund der auf den Ports 25232 und 25231 einen listener einrichtet und (so wie ich verstanden habe) das an den jeweils anderen Port schickt:

    Code
    socat tcp-listen:25232 tcp-listen:25231 &

    Wenn ich nach der Anleitung Bitte melde dich an, um diesen Link zu sehen. vorgehen will dann geht das etwa so weiter:

    |Einstellungen| -> |RS232 Einstellungen| -> |[x] Userport RS232 Emulation|

    |Einstellungen| -> |RS232 Einstellungen| -> |Userport RS232 Baud Rate| -> [x] 1200

    |Einstellungen| -> |RS232 Einstellungen| -> |RS232 Einstellungen| ? Da gibt es nichts !


    Bitte melde dich an, um dieses Bild zu sehen.

    Das ist ja ein wunderbares Menü, so was finde ich bei mir gar nicht.

    Ich habe mich gerade hier angemeldet weil ich nicht weiter komme.

    Ich wollte mal mit der seriellen Schnittselle des C64 experimentieren, dazu möchte ich Vice zwei mal unter Linux starten und zwischen beiden Vice Versionen Daten über die serielle Schnittstelle tauschen.

    Das Sedeprogramm unter Basic sieht so aus:

    Code
    10 open 2,2,0, chr$(6)+chr$(0) :rem 300 8N1 , wire vollduplex
    20 get a$
    30 if a$ = "" then 20
    40 print a$;
    50 print#2,a$;
    60 goto 20
    ready.

    Das Empfangsprogramm so:

    Code
    10 open 2,2,0, chr$(6)+chr$(0)
    20 get#2,a$
    30 if a$ = "" then 20
    40 print a$;
    50 goto 20
    ready.


    Wie kann ich die beiden Instanzen von Vice (ohne zusätzliche Hardware) dazu bringen zwischen den beiden emulierten C64 eine Verbindung zu simulieren?

    Vielen Dank für die Antworten.

    ----

    Begründung f.d. Experiment

    1. Wollte mal Versuche mit einem MUD unter Basic machen
    2. Wollte mir deswegen nicht die Bude mit Brotkästen vollstellen.