
; Listing28a.s
; serielle Kommunikation mit WinUAE - erster Test "Hallo Welt"

Um "ganz einfach" eine Zeichenkette aus WinUAE an ein Terminalprogramm zu 
senden, sind einige Hürden zu nehmen.

Da WinUAE die Amiga Hardware nur emuliert und somit auch keine echte serielle 
Schnittstelle hat muss die emulierte serielle Schnittstelle virtuell in den
COM-Ports erscheinen. Die Daten dieses virtuellen COM-Ports werden dann über
ein virtuelles Nullmodemkabel an einen weiteren COM-Port gesendet. Die beiden
COM-Ports bilden dabei ein virtuelles COM-Port Paar.

Bekommen kann man so eine virtuelle Nullmodemverbindung mit dem Programm
com0com https://com0com.sourceforge.net/

Als Terminalprogramm habe ich hterm verwendet. 
https://www.der-hammer.info/pages/terminal.html

*******************************************************************************

Test 1: virtuelle Nullmodemverbindung mit zwei Terminals

Als ersten Test um zu sehen, dass die virtuelle Nullmodemverbindung auch
funktioniert habe ich das Terminalprogramm hterm zweimal geöffnet und in beiden
Programmen die gleichen Einstellungen vorgenommen.

Terminal 1: Baud 9600, Data: 8, Stop: 1, Parität: None, CTS Flow - nicht gesetzt	
Terminal 2: Baud 9600, Data: 8, Stop: 1, Parität: None, CTS Flow - nicht gesetzt

Das Programm com0com ist installiert und hterm bietet mir in der Liste der
verfügbaren COM-Ports in meinem Fall folgende COM-Ports an.

COM4
COM5
CNCA0
CNCA0

[Anmerkung: Es werden automatisch zwei virtuelle COM-Ports "CNCA0" und "CNCB0" 
installiert, die über ein virtuelles Nullmodemkabel verbunden sind. Optional 
können Sie die Namen ändern und die Einstellungen mit dem GUI-Setup-Tool 
(setupg.exe) bearbeiten. In diesem Beispiel heißen sie COM3 und COM4.]

Ich refreshe also die COM-Ports in hterm (R) und und wähle aus bzw. öffne die
Verbindung (Connect):
Terminal 1: CNCA0
Terminal 2: CNCB0

Anschließend sende ich von Terminal 1 zu Terminal 2 bzw. umgekehrt erfolgreich
einige Ascii-Zeichen. Das funktioniert.

*******************************************************************************

Test 2: virtuelle Nullmodemverbindung von WinUAE zu einem Terminal

Nun will ich Ascii-Zeichen von WinUAE an ein Terminalprogramm senden. Ich hatte
tatsächlich einige Probleme und möchte daher hier nur den Weg beschreiben, der
in meinem Fall erfolgreich war.

Aus meiner WinUAE Configurationen wähle ich eine vorher eingerichtete A500 
Configuration aus, die die Workbench 1.3 lädt. Bevor ich die Configuration 
jedoch starte, stelle ich in WinUAE unter iO ports und Serial port noch den
COM-Port ein:

Die Auflistung zeigt beispielsweise 4 COM-Ports von com0com:
com0com - serial port emulator (COM4)
com0com - serial port emulator (COM5)
com0com - serial port emulator CNCA0 (CNCA0)
com0com - serial port emulator CNCA0 (CNCA0)

Ich wähle com4 aus.
Alle anderen Checkboxen wie Shared, Host RTS/CTS, Direct, Serial status 
(RTS, ..), Serial status: Ring indicator lasse ich unangekreuzt und drücke OK
und starte die Emulation.

In der Workbench in Prefs für Serial überprüfe ich die folgende Einstellung:
Baud: 9600, Buffer Size: 512, Read/Write Bits: 8, Stop: 1, Parity: None,
Handshaking: None

Jetzt wechsle ich zu hterm und wähle hier den COM-Port: com5 aus und öffne die
Verbidnung.

Jetzt wechsle ich zurück zu WinUAE und gebe in der CLI (Shell) ein:
SYS:>echo >ser: "HELLO"

Und sehe die empfangenen Zeichen in hterm.

*******************************************************************************

Grundlagen und Basiswissen:

Ein virtuelles Nullmodem braucht man vor allem zum Debuggen der seriellen
Kommunikation. Das ist eine Art Treiber, der 2 Com-Ports auf dem Rechner
installiert (virtuell, d.h. sie tauchen zwar im Gerätemanager auf, existieren
aber nicht in Hardware) und mit einem virtuellen X-over Kabel verbindet.
"com0com" ist ein solches Freeware virtuelles Nullmodem. Schicker ist "virtual 
serial ports" von Eltima kostet aber nach 2 Wochen Probe...
Mit dem virtuellen Nullmodem kann man Daten an den einen virtuellen Port
schicken (als ob er real existieren würde) und die Daten erscheinen dann am
anderen virtuellen Port (über das virtuelle Kabel). So kann man die 
"rausgehenden" Daten mal schnell in einem Terminalprogramm anzeigen lassen.

Beim Amiga bzw. WinUAE sieht die Sache so aus, das wir in diesem Beispiel die
Daten aus der CLI an ser: senden. Damit die Daten auf die Windows Seite 
gelangen, muss ser: mit etwas auf dem Windows-PC verknüpft sein. Die 
Einstellung dafür geht auf der WinUAE "IO Ports"-Seite. Da gibt es das Feld
"Serial Port" und dort eine DropDown-Liste. 
Darin sind die (virtuellen oder realen) Com-Ports des PCs gelistet. Einfach 
auswählen, dann gehen die Daten aus der Emulation, welche an ser: gesendet
wurden an diesen PC-Comport. Eventuell muss die Emulation neu gestartet werden,
wenn da Einstellungen geändert wurden. Alle anderen Checkboxen (shared,
RTS/CTS, direct, uaeserial.device) sollten meines Wissens nicht getickt sein.
Um die Daten nun zu empfangen muss nun ein virtuelles Nullmodem auf dem PC
erstellt werden welches in meinem Fall (Com4<=>Com5) ist. 
Die Daten gehen von ser: in Com4 (in WinUAE eingestellt), von da per Nullmodem
zu Com5. Das Terminalprogramm am PC liest dann die Daten von Com5.

*******************************************************************************

Der inter-process serial port bei WinUAE ist - soviel ich weiß - dafür gedacht,
dass man 2 Instanzen von WinUAE über ein (virtuelles?) Kabel miteinander 
verbinden kann um Spiele gegeneinander zu spielen.
