Mit einfachen Mitteln eine weitere RS232-Schnittstelle am ST
Wegen seines Konzepts der Power without the Price" wurde der ST seinerzeit von Hause aus mit vielen Schnittstellen ausgestattet. Die nachträgliche Erweiterung dagegen gestaltete sich schon immer etwas aufwendig. Glücklicherweise ist es recht einfach, die eventuell ungenutzte MIDI-Schnittstelle zu einer RS232 umzubauen.
Wenn die ATARI-eigene Maus in die Jahre kommt, gehen häufigdie Folientaster kaputt. Nach meinen Erfahrungen haben Ersatztaster nur eine sehr kurze Lebensdauer. Billige Ersatzmäuse mit Microschaltern gibt es zuhauf, nur sind das in der Regel serielle PC-Mäuse. Auch wer X unter Linux/68K fährt, möchte gerne eine 3-Tasten-Maus anschließen. Nutzt man die Modem1-Schnittstelle des ST für DFÜ, hat man aber keinen Port mehr frei für die Maus. Auch wer im Zeitalter des Multitasking einen Remote-Login über ein Terminal machen will (neben der DFÜ), braucht einen weiteren Port, genauso wie derjenige, der das System mit einem Hintergrundmonitor überwachen will. In diesem Teil dieser Serie (es wird noch mehr Teile rund um die RS232-Schnittstelle geben) wollen wir daher den ST mit einem weiteren RS232-Port ausrüsten. Bei dieser Gelegenheit kann man auch gleich die Umrüstung der Modeml-Schnittstelle auf 38400 Baud durchführen, womit sich der zweite Teil beschäftigt. Im letzten Teil schließlich kümmern wir uns um die Anbindung serieller PC-Mäuse an die neugewonnene Schnittstelle unter TOS. Dabei handelt es sich um eine reine Software-Lösung.
Wer auf die MIDI-Schnittstelle verzichten will, kann sie für ein paar Mark zu einer weiteren seriellen Schnittstelle umbauen. Neben dem unschlagbar günstigen Preis hat die Lösung außerdem den Vorteil, daß die Schnittstelle von den MIDI-Routinen des Betriebssystems bereits voll verwaltet wird und somit keine zusätzliche Software nötig ist. Benutzt man ein Terminalprogramm,das den MIDI-Port als Eingabe zuläßt, kann man die neue Schnittstelle sofort benutzen.
Der Umbau geht folgendermaßen. Man legt zunächst die Platine frei; sie braucht aber nicht ausgebaut zu werden. Sodann sucht man die MIDI-ACIA und vergewissert sich, daß es definitiv nicht die Keyboard-ACIA ist, die man verarzten möchte. Bei meinem Board (Mega ST 4, Rev. 4.0) ist es die hintere der beiden.
Man knipst dann die Pins 2 (RxD), 3 (RxCIk), 4 (TxCIk) und 6 (TxD) mit einer kleinen Zange unmittelbar über der Platine ab und biegt sie etwas hoch. Hat man kein passendes Werkzeug, so sollte man es sich unbedingt vorher besorgen, auch wenn der Preis des Umbaus sich dadurch etwas erhöht. Bei meinem Board schied die Alternative Leiterbahnen durchzutrennen aus, da die Bahnen entweder unter dem Chip verschwinden oder zur anderen ACIA durchgeführt sind.
Die Signale TxD und RxD werden jetzt über einen 1488/1489-Treiber an einen 9- oder 25poligen Sub-D-Stecker geführt (vgl. Abb. 1).
Es bietet sich an, die Treiber mit Sockeln zu versehen und die Schaltung mit dem Stecker auf eine kleine Lochrasterplatine zu löten. Die benötigten Spannungen +5V, +12V, -12V und Masse entnimmt man der Einfachkeit halber von den entsprechenden Pins der 1488/1489 auf der Hauptplatine.
Beim Mega ST kann man den 9poli-gen Sub-D-Stecker professionell einbauen, indem man das kleine Abdeckblech in der Rückwand des Gehäuses durch ein Stück Fußbodenleiste aus Kunststoff ersetzt, ein passendes Loch für den Stecker bohrt/feilt und schließlich den Stecker mit einem Sub-D-Befestigungssatz festschraubt. Für einen höheren Komfort bei Arbeiten am offenen Rechner ist es übrigens eine gute Idee, die Verbindung von der Adapterplatine zum Mainboard über eine Pfostenleiste und einen Pfostenstecker zu führen.
Bleibt noch zu klären, was mit den Clock-Eingängen der ACIA passieren soll. Beließe man sie auf der Platine, würde die Schnittstelle bereits funktionieren, jedoch mit der MIDI-Baud-Rate von 31250 bps, was keine der üblichen RS232-Raten ist. Folgende Lösungen bieten sich an:
(a) Man benutzt den Ausgang TAO (Timer A Out, Pin 13) des MFP. Dann kann man mittels eigener Software den Timer A und damit die Baud-Rate frei programmieren. Allerdings benutzen manche Programme diesen Timer auch, so daß einem die Baud-Rate unter Umständen verstellt wird.
(b) Man benutzt den Ausgang TDO (Timer D Out, Pin 16) des MFP. Dieser Timer wird auch schon für Modem 1 benutzt, so daß die Baud-Raten beider Schnittstellen dann übereinstimmen. Ferner kann sie natürlich mit jedem gängigen Terminalprogramm oderdem Kontrollfeld eingestellt werden. Besonders sinnvoll ist diese Lösung in Verbindung mit Bauvorschlag 2, welcher Modem 1 von Timer D abkoppelt.
(c) Man baut eine eigene Takterzeugung auf. Auf diese Weise kann man auch sehr hohe Baudraten erzeugen. Man beachte dabei, daß man (zumindest zum Empfang) den 16fachen Vorteiler in der ACIA benutzen muß, was vom Betriebssystem ohnehin so eingestellt wird.
Wenn man übrigens Bauvorschlag 2 eingebaut hat und nur eine serielle Maus am Hilfs-Port betreiben will kann man Pin 4 des CD4040 benutzen. Die Baud-Rate ist B dann auf 1200 Baud fixiert, 1 Diese Lösung ist zur Zeit in B meinem Rechner realisiert. B Wer möchte, kann außerdem die Leitungen RTS, CTS l und DCD der ACIA über die 1488/1489-Treiber an den I Sub-D-Steckerlegen. Im MIDI-Betrieb ist kein Handshake B vorgesehen, so daß diese B Leitungen auf der ST-Platine E unwirksam geschaltet sind, l Leider muß man zur Nutzung des Hardware-Handshakes auch neue MIDI-Empfangs-/Senderoutinen schreiben. Ich habe in l der vorliegenden Lösung davon Abstand genommen, dabei mir die neue l Schnittstelle nur einen Hilfsport für den Mausbetrieb darstellt. i
Soll die MIDI-Schnittstelle doch gelegentlich benutzt werden, kann man l der ACIA über einen Umschalter wähl- l weise die alten oder die neuen Signale l zuführen.
Dieser Umbau ist durchaus keine neue Idee und schnell durchgeführt, unabhängig von den anderen Bauvorschlägen. Auch er zeichnet sich durch einen sehr geringen Preis von unter einer Mark aus. Man klebt einfach einen Binärzähler CD4040 auf den MFP, der den 2.456MHz-Takt durch 4 teilt und an den Clock-Eingängen wieder einspeist. Dabei sollte man Pin 10 des CD4040 direkt, auf Pin 18 des MFP löten, da hier die 2.456 MHz anliegen. Ferner sollte man nicht XTAL1 statt XTAL2 verwenden, da das Signal dort einen schlechteren Störabstand aufweist. Die Clock-Leitungen des MFP (Pin 7 und 10) müssen entweder abgeknipst und hochgebogen werden, oder man trennt die Verbindung von Pin 10 zu PinlS auf. Verschwindet sie allerdings wie bei meinem Board unter dem Chip, muß man sich seiner Sache schon sicher sein.
Nach dem Umbau läuft die Modeml-Schnittstelle konstant mit 38400 Baud, unabhängig von jeglicher Einstellung in Terminalprogrammen oder dem Kontrollfeld. Damit kann man dann die Baud-Rate des Hilfs-Ports einstellen, wenn man Bauvorschlag l verwirklicht hat und die ACIA mit Timer D verbunden wurde.
In der Praxis erreicht man bei einer direkten Rechnerkopplung beinahe die theoretisch maximale Übertragungsrate: man kann bei einem ZModem-Transfer mit 3700 bis 3800 Zeichen pro Sekunde rechnen. Überträgt man ASCII-Text per Modem bei 14400 Baud und V42bis-Datenkompression,so darf man eine Übertragungsrate von typisch 3100 cps erwarten. Gepackte Daten werden mit über 1600 cps übertragen. Je nach Menge der zu übertragenden Daten und je nach Laufzeit des Packers kann es somit sogar günstiger sein, das Online-Packen in Mailboxen aufzugeben. Auf jeden Fall sind die Unterschiede gering, und nach einer abgebrochenen Übertragung ist man mit dem Fragment einerTextdatei meist besser bedient als mit einem kaputten Archiv.
In meinem Rechner wird der Hilfs-Port für den Betrieb einer seriellen Maus benutzt und ist hardwaremäßig auf 1200 Baud fixiert. Unter Linux benutzt man einfach das Device /dev/ttyS5 für die Maus, es sind keine weiteren Aktionen nötig. Für den Betrieb unter TOS oder MagiC muß man dagegen einen Maustreiber benutzen. Ich habe zwei solche geschrieben, einen für das Microsoft- und einen für das Maus-Systems-Protokoll. Gerade für eine 3-Tasten-Maus ist letzteres zu empfehlen. Unter TOS wird dann die mittlere Maustaste so behandelt, als würden beide Tasten der ATARI-Maus gleichzeitig gedrückt. Man kann damit also Aktionen in Fenstern durchführen, die im Hintergrund liegen.
Die Treiber werden auf einer sehr tiefen (aber dokumentierten) Ebene in das Betriebssystem eingebunden. Dadurch ist die serielle Maus vollkompatibel zur Keyboard-Maus. Mir ist nur ein einziges Programm bekannt, das unter Umgehung des Betriebssystems die Tastaturpakete selbst auswertet und daher nichts von der neuen Maus mitbekommt: TurboAss.
Die Bedienung ist denkbar einfach: Man wirft das Programm einfach in den Autoordner und schließt die Maus am Hilfs-Port an. DerTreiber legt einen Cookie an, über den er auch gesteuert werden kann. In dieser Version beschränkt sich die Steuerung allerdings auf das Installieren und Destallieren. Der Cookiepointer zeigt auf folgende Struktur:
struct {
char version[4];
void (Install) (void);
void PdestalIHvoid); }
Der Cookie-String ist übrigens aus historischen Gründen ncMR".
Für den Fall, daß die Baud-Rate über Timer D gesteuert wird, sollte man den Treiber automatisch die serielle Schnittstelle auf die Baud-Rate von 1200 Baud einstellen lassen. Dazu muß man den entsprechenden Teil derSource von Kommentarzeichen befreien und sie neu übersetzen. Ferner muß man dafür sorgen, daß keine Software im System die Baud-Rate verstellt. So muß zum Beispiel bei Benutzung des EMULATOR.ACC die korrekte Baud-Rate mit Arbeit sichern" im DESKTOP.INF abgespeichert werden, da diese Datei beim Hochfahren des Accessories ausgewertet wird. Auch in Terminalprogrammen sollte man die Defaultpa-rameter entsprechend einstellen.
Am einfachsten fixiert man jedoch für den Mausbetrieb die Baud-Rate hardwaremäßig auf 1200 Baud, dann gibt es keine Probleme.
Die Microsoft-Maus sendet Statuspakete, die stets aus drei Bytes bestehen und folgende Gestalt haben:
11LRYYXX lOxxxxxx lOyyyyyy
L und R geben den Status der linken und rechten Maustaste wieder. Beide Bits sind high-aktiv (gesetztes Bit = Taste gedrückt). Die Delta-X-Koordina-te ist das Byte XXxxxxxx, entsprechend ist YYyyyyyy die Delta-Y-Koordinate. Der Maustreiber übersetztdiese Pakete in die ATARI-Form
111110LR XXxxxxxx YYyyyyyy
und übergibt sie an die entsprechende Interruptroutine des Betriebssystems. Daher können die serielle Maus und die Keyboard-Maus des ATARI gleichzeitig benutzt werden.
Entsprechendes gilt für das Maus-Systems-Protokoll. Seine Pakete haben die Form
lOOOOlmr XXXXXXXX YYYYYYYY xxxxxxxx yyyyyyyy
Der Treiber rechnet die Iow-aktiven Maustastenbits /, m und r in die highaktiven Bits L und R um. Bereits nach dem Empfang der ersten drei Bytes übergibt er ein Paket an das Betriebssystem, dem nach Empfang des fünften Bytes ein weiteres Paket folgt:
111110LR XXXXXXXX YYYYYYYY 111110LR xxxxxxxx yyyyyyyy
Engagierten Bastlern, denen die seriellen Mäuse zu hakelig sind, kann ich noch einen Tip geben: Bei manchen Mäusen kann man durch Austauschen des internen Quarzes die Geschwindigkeit erhöhen. Dadurch wird jeder Vorgang in der Maus beschleunigt. Auch die Baud-Rate erhöht sich entsprechend. Mehr als Faktor 4 ist aber wohl nicht sinnvoll, denn bei 4800 Baud kommen ja im Idealfall bereits (je nach Protokoll) 160 bis 192 Statuspakete pro Sekunde an, also mehr als die Bildwiederholfrequenz des Monitors. Martin Rogge
Literatur:
[1] Hans-Dieter Jankowski, Julian F. Reschke, Dietmar Rabich: ATARI ST Profibuch, Sybex-Verlag Düsseldorf, 1988