Tester gesucht: AtariSIO mit USB, RPi, ... seriellem Port
von HiassofT » Mo 22. Okt 2018, 15:31Ich habe letztens AtariSIO erweitert, damit es ohne Kernel Modul läuft und mit üblichen seriellen Schnittstellen (zB FTDI USB Adapter, eingebaute RS232 im Raspberry Pi) verwendet werden kann.
Gleich vorweg: am PC mit 16550/16950 RS232 Schnittstelle ist das Kernel Modul nach wie vor die erste Wahl. Auch funktionieren nicht alle Schnittstellen gleich gut, der Prolific PL2303 USB Adapter ist zB ungeeignet für 1050-2-PC. Dafür sind die "krummen" Pokey Baudraten für FTDI USB Adapter und die RS232 im RPi kein Problem und man kann zB Pokey Divisor 0 verwenden.
Hier ist der Link zur aktuellen Test-Version: http://www.horus.com/~hias/atari/ataris ... 019.tar.gz
Zum Compilieren braucht man die üblichen Entwickler Tools (gcc, make, ...) sowie die ncurses und zlib Header/Libraries. Unter Debian/Raspbian bekommt man die so:
Nach dem Auspacken kann AtariSIO ohne Kernel Treiber mit folgenden Kommandos compiliert unt installiert werden:
Am PC mit 16550 könnt ihr natürlich auch wie bisher "make", "sudo make install" verwenden, dann wird auch das Kernel Modul gebaut und installiert.
Standardmässig verwenden atariserver und atarixfer den AtariSIO Kernel Treiber, um sie mit einer "normalen" Seriellen Schnittstelle zu verwenden muß als erster Parameter die gewünschte Schnittstelle angegeben werden. zB:
Tip: die Schnittstelle kann auch über die Environment Variablen "ATARISERVER_DEVICE" bzw "ATARIXFER_DEVICE" gesetzt werden - zB mit folgenden Zeilen in der ~/.bashrc:
Per Default erwartet atariserver die Command Line am "Ring" Pin der Seriellen, das kann entweder mit der Taste "C" in atariserver oder per Option beim Starten geändert werden: "-c" verwendet den DSR Pin, "-C" den CTS Pin und mit "-N" kann man einen speziellen Modus ohne Command Line aktivieren. Letzteres sollte man aber nur im Notfall verwenden (zB wenn man am RPi nur RxD und TxD verbunden hat), da die SIO Emulation dann nicht zu zuverlässig läuft wie mit der Command Line.
Zum Thema Raspberry Pi:
Die Himbeere hat 2 eingebaute serielle Schnittstellen, beide unterstützen RTS und CTS Handshake Leitungen, ist also bestens gerüstet für SIO2PC/1050-2-PC.
Da die GPIOs nur 3.3V vertragen braucht man aber einen 5V->3.3V Levelshifter um den RPi mit Atari bzw Floppy zu verbinden. Die gibt's als kleine fertige Platinen überall günstig zu kaufen.
Auf den RPis mit Bluetooth (RPi3B, 3B+ und 0W) wird die "bessere" Serielle "/dev/ttyAMA0" standardmässig für Bluetooth verwendet. Wenn man Bluetooth nicht verwendet kann man es einfach abdrehen, mit folgender Zeile in der config.txt, dann steht die "bessere" für AtariSIO & co zur Verfügung:
Alternativ kann man Bluetooth auf die "schlechtere" Miniuart legen:
Oder man belässt Bluetooth auf der besseren und aktiviert die schlechtere Miniuart "/dev/ttyS0" in der config.txt:
Wenn möglich sollte man die "schlechtere" miniuart lieber nicht verwenden, wenn man sie aktiviert wird das autmatische hoch/runter-takten des RPi core blocks abgeschaltet (der RPi also ein wenig langsamer).
Standardmässig liegen am GPIO Anschluss nur RxD und TxD an, um auch an RTS und CTS zu kommen liegen im contrib/rpi Verzeichnis devicetree overlays die man dann per config.txt aktivieren kann. Einfach die *.dtbo Files von dort nach /boot/overlays/ kopieren und dann für die "bessere" UART folgende Zeile in der config.txt eintragen:
bzw für die miniuart:
Daraufhin liegt dann CTS an GPIO16 / Pin 36 des GPIO Anschlusses und RTS an GPIO17 / Pin 11 des GPIO Anschlusses.
Achtung: bei den originalen RPis mit 26-pin GPIO fehlt dadurch CTS - das lässt sich vermutlich aber auf die 8-pin P5 pads legen (muss ich mir mal ansehen).
Nun geht's ans Verkabeln:
Für SIO2PC:
Pin 6 (GND) vom GPIO mit SIO Pin 7 und GND am Level Shifter
Pin 8 (TxD) vom GPIO an einen Level-Shifter Eingang und den Ausgang dann an SIO Pin 3 (Data In). Ggf noch eine 1N4148 Diode zwischen Level Shifter und SIO Pin, Kathode Richtung Level Shifter, damit auch andere SIO Geräte parallel dazu betrieben werden können.
Pin 10 (RxD) vom GPIO durch den Level Shifter mit SIO Pin 5 (Data Out) verbinden.
Pin 36 (CTS) vom GPIO durch den Level Shifter mit SIO Pin 7 (Command) verbinden. (optional)
Ggf. GPIO Pins 2 (+5V) und/oder Pin 1 (3.3V) mit dem Level Shifter verbinden
Für 1050-2-PC:
Pin 4 (+5V) vom GPIO mit SIO Pin 10 (+5V) verbinden
Pin 6 (GND) vom GPIO mit SIO Pin 7 und GND am Level Shifter
Pin 8 (TxD) vom GPIO durch den Level-Shifter Eingang mit SIO Pin 5 (Data Out) verbinden.
Pin 10 (RxD) vom GPIO durch den Level Shifter mit SIO Pin 3 (Data In) verbinden.
Pin 11 (RTS) vom GPIO durch den Level Shifter mit SIO Pin 7 (Command) verbinden.
Ggf. GPIO Pins 2 (+5V) und/oder Pin 1 (3.3V) mit dem Level Shifter verbinden
Hier noch Befehle um SIO2PC / 1050-2-PC mit Highspeed am RPi: nutzen zu können
SIO2PC mit Command Line und Pokey Divisor 0 (Option "-S"):
Das gleiche ohne Command Line:
Disk von 1050 Lesen und als ATR abspeichern, mit Support für Happy/Speedy Ultra Speed (Option "-S")
ATR auf Disk in 1050 Schreibenm, ebenfalls mit Hispeed:
Bisher habe ich erfolgreich den SIO2PC und 1050-2-PC Modus mit meinen (seriellen) Eigenbau SIO2PC bzw 1050-2-PC Adaptern und einem FTDI USB-Seriell Adapter getestet, und auch mit dem einfachen RPi Interface.
Ich würd mich sehr über Feedback von euch freuen, was geht, was nicht geht, welche Hardware ihr verwendet habt etc. Sehr wahrscheinlich sind noch einige Ecken und Kanten in dem recht frischen Code, vermutlich auch noch der eine oder andere Bug :-)
so long,
Hias
Gleich vorweg: am PC mit 16550/16950 RS232 Schnittstelle ist das Kernel Modul nach wie vor die erste Wahl. Auch funktionieren nicht alle Schnittstellen gleich gut, der Prolific PL2303 USB Adapter ist zB ungeeignet für 1050-2-PC. Dafür sind die "krummen" Pokey Baudraten für FTDI USB Adapter und die RS232 im RPi kein Problem und man kann zB Pokey Divisor 0 verwenden.
Hier ist der Link zur aktuellen Test-Version: http://www.horus.com/~hias/atari/ataris ... 019.tar.gz
Zum Compilieren braucht man die üblichen Entwickler Tools (gcc, make, ...) sowie die ncurses und zlib Header/Libraries. Unter Debian/Raspbian bekommt man die so:
- Code: Alles auswählen
sudo apt-get install build-essential libncurses5-dev zlib1g-dev
Nach dem Auspacken kann AtariSIO ohne Kernel Treiber mit folgenden Kommandos compiliert unt installiert werden:
- Code: Alles auswählen
make tools
sudo make tools-install
Am PC mit 16550 könnt ihr natürlich auch wie bisher "make", "sudo make install" verwenden, dann wird auch das Kernel Modul gebaut und installiert.
Standardmässig verwenden atariserver und atarixfer den AtariSIO Kernel Treiber, um sie mit einer "normalen" Seriellen Schnittstelle zu verwenden muß als erster Parameter die gewünschte Schnittstelle angegeben werden. zB:
- Code: Alles auswählen
atariserver -f /dev/ttyUSB0
Tip: die Schnittstelle kann auch über die Environment Variablen "ATARISERVER_DEVICE" bzw "ATARIXFER_DEVICE" gesetzt werden - zB mit folgenden Zeilen in der ~/.bashrc:
- Code: Alles auswählen
export ATARISERVER_DEVICE="/dev/ttyUSB0"
export ATARIXFER_DEVICE="/dev/ttyAMA0"
Per Default erwartet atariserver die Command Line am "Ring" Pin der Seriellen, das kann entweder mit der Taste "C" in atariserver oder per Option beim Starten geändert werden: "-c" verwendet den DSR Pin, "-C" den CTS Pin und mit "-N" kann man einen speziellen Modus ohne Command Line aktivieren. Letzteres sollte man aber nur im Notfall verwenden (zB wenn man am RPi nur RxD und TxD verbunden hat), da die SIO Emulation dann nicht zu zuverlässig läuft wie mit der Command Line.
Zum Thema Raspberry Pi:
Die Himbeere hat 2 eingebaute serielle Schnittstellen, beide unterstützen RTS und CTS Handshake Leitungen, ist also bestens gerüstet für SIO2PC/1050-2-PC.
Da die GPIOs nur 3.3V vertragen braucht man aber einen 5V->3.3V Levelshifter um den RPi mit Atari bzw Floppy zu verbinden. Die gibt's als kleine fertige Platinen überall günstig zu kaufen.
Auf den RPis mit Bluetooth (RPi3B, 3B+ und 0W) wird die "bessere" Serielle "/dev/ttyAMA0" standardmässig für Bluetooth verwendet. Wenn man Bluetooth nicht verwendet kann man es einfach abdrehen, mit folgender Zeile in der config.txt, dann steht die "bessere" für AtariSIO & co zur Verfügung:
- Code: Alles auswählen
dtoverlay=pi3-disable-bt
Alternativ kann man Bluetooth auf die "schlechtere" Miniuart legen:
- Code: Alles auswählen
dtoverlay=pi3-miniuart-bt
Oder man belässt Bluetooth auf der besseren und aktiviert die schlechtere Miniuart "/dev/ttyS0" in der config.txt:
- Code: Alles auswählen
enable_uart=1
Wenn möglich sollte man die "schlechtere" miniuart lieber nicht verwenden, wenn man sie aktiviert wird das autmatische hoch/runter-takten des RPi core blocks abgeschaltet (der RPi also ein wenig langsamer).
Standardmässig liegen am GPIO Anschluss nur RxD und TxD an, um auch an RTS und CTS zu kommen liegen im contrib/rpi Verzeichnis devicetree overlays die man dann per config.txt aktivieren kann. Einfach die *.dtbo Files von dort nach /boot/overlays/ kopieren und dann für die "bessere" UART folgende Zeile in der config.txt eintragen:
- Code: Alles auswählen
droverlay=uart-ctsrts
bzw für die miniuart:
- Code: Alles auswählen
droverlay=miniuart-ctsrts
Daraufhin liegt dann CTS an GPIO16 / Pin 36 des GPIO Anschlusses und RTS an GPIO17 / Pin 11 des GPIO Anschlusses.
Achtung: bei den originalen RPis mit 26-pin GPIO fehlt dadurch CTS - das lässt sich vermutlich aber auf die 8-pin P5 pads legen (muss ich mir mal ansehen).
Nun geht's ans Verkabeln:
Für SIO2PC:
Pin 6 (GND) vom GPIO mit SIO Pin 7 und GND am Level Shifter
Pin 8 (TxD) vom GPIO an einen Level-Shifter Eingang und den Ausgang dann an SIO Pin 3 (Data In). Ggf noch eine 1N4148 Diode zwischen Level Shifter und SIO Pin, Kathode Richtung Level Shifter, damit auch andere SIO Geräte parallel dazu betrieben werden können.
Pin 10 (RxD) vom GPIO durch den Level Shifter mit SIO Pin 5 (Data Out) verbinden.
Pin 36 (CTS) vom GPIO durch den Level Shifter mit SIO Pin 7 (Command) verbinden. (optional)
Ggf. GPIO Pins 2 (+5V) und/oder Pin 1 (3.3V) mit dem Level Shifter verbinden
Für 1050-2-PC:
Pin 4 (+5V) vom GPIO mit SIO Pin 10 (+5V) verbinden
Pin 6 (GND) vom GPIO mit SIO Pin 7 und GND am Level Shifter
Pin 8 (TxD) vom GPIO durch den Level-Shifter Eingang mit SIO Pin 5 (Data Out) verbinden.
Pin 10 (RxD) vom GPIO durch den Level Shifter mit SIO Pin 3 (Data In) verbinden.
Pin 11 (RTS) vom GPIO durch den Level Shifter mit SIO Pin 7 (Command) verbinden.
Ggf. GPIO Pins 2 (+5V) und/oder Pin 1 (3.3V) mit dem Level Shifter verbinden
Hier noch Befehle um SIO2PC / 1050-2-PC mit Highspeed am RPi: nutzen zu können
SIO2PC mit Command Line und Pokey Divisor 0 (Option "-S"):
- Code: Alles auswählen
atariserver -f /dev/ttyAMA0 -C -S 0 mein.atr
Das gleiche ohne Command Line:
- Code: Alles auswählen
atariserver -f /dev/ttyAMA0 -N -S 0 mein.atr
Disk von 1050 Lesen und als ATR abspeichern, mit Support für Happy/Speedy Ultra Speed (Option "-S")
- Code: Alles auswählen
atarixfer -f /dev/ttyAMA0 -S -r mein.atr
ATR auf Disk in 1050 Schreibenm, ebenfalls mit Hispeed:
- Code: Alles auswählen
atarixfer -f /dev/ttyAMA0 -S -w mein.atr
Bisher habe ich erfolgreich den SIO2PC und 1050-2-PC Modus mit meinen (seriellen) Eigenbau SIO2PC bzw 1050-2-PC Adaptern und einem FTDI USB-Seriell Adapter getestet, und auch mit dem einfachen RPi Interface.
Ich würd mich sehr über Feedback von euch freuen, was geht, was nicht geht, welche Hardware ihr verwendet habt etc. Sehr wahrscheinlich sind noch einige Ecken und Kanten in dem recht frischen Code, vermutlich auch noch der eine oder andere Bug :-)
so long,
Hias