Das sieht im Ansatz nicht schlecht aus.
Naja, um auf Nummer Sicher zu gehen, daß niemals mehr als eine der
/CSn-Leitungen aktiv ist, solltest Du noch einen '138 verwenden, der
zwischen das Latch und die QUART gehängt wird.
Drei Adressleitungen oberhalb A2 gehen dann an den '138, und vier
seiner Ausgänge sind mit den /CSn-Eingängen der QUART verbunden.
Du könntest noch /RD und /WR verXORen und an einen der
Active-Low-Eingänge des '138 anlegen, dann wird /CSn erst dann aktiv,
wenn auch tatsächlich ein Lese- oder Schreibzugriff stattfindet.
Zum Testen kannst Du mit einer einfachen Routine eines der Register der
UARTs verwenden - das sogenannte "scratch pad"-Register hat keine
technische Funktion, außer, daß der hineingeschriebene Wert auch wieder
gelesen werden kann.
Bei meiner oben beschriebenen Beschaltung wiederholt sich das
Scratchpad-Register alle 8 Bytes (jede UART belegt 8 Bytes).
Dein Sourcecode wird vermutlich verständlicher, wenn Du die
Basisadressen der UARTs als Konstanten definierst, und die einzelnen
Register als Offset-Konstanten.
Dann würde Deine "ReadUart" und "WriteUart"-Funktion etwas leichter
lesbar.
Da bei der gegebenen Schaltung die QUART die ersten 32 Byte des XRAM
belegt, kannst Du daher definieren
#define XRAM_BASE 0xEE00 // Startadresse XRAM
#define UART_BASE_0 (XRAM_BASE + 0)
#define UART_BASE_1 (XRAM_BASE + 8)
#define UART_BASE_2 (XRAM_BASE + 16)
#define UART_BASE_3 (XRAM_BASE + 24)
Du solltest zunächst mal nur versuchen, das von mir erwähnte
"scratchpad register" zu beschreiben und lesen - wenn bereits das
nicht klappt, dann solltest Du ein Oszilloskop zur Hilfe nehmen und
einer Testroutine, die bespielsweise in einer Endlosschleife
abwechselnd liest und schreibt, auf die Finger gucken ...
Als nächstes könntest Du, ohne Dich mit Baudratenteilern und ähnlichem
'rumzuschlagen, mal ausprobieren, ob Du die Handshakeleitungen zu
sinnvollen Aktionen bewegen kannst. An die Ausgänge könntest Du
beispielsweise Low-Current-LEDs (mit Vorwiderstand) hängen, und testen,
ob Du die ein- und ausschalten kannst.
Näheres über die Programmierung der 8250 (das ist der "Urvater" der
vier einzelnen UARTs Deiner QUART) solltest Du problemlos im Netz
finden - achte darauf. daß Du C-Quelltext für DOS suchst. Da sehen zwar
die "Speicherzugriffe" auf die UART etwas seltsam aus, da beim PC die
UART nicht im normalen Speicher auftaucht, sondern im
I/O-Adressbereich, aber wenn Du irgendwo Zugriffe auf Adressen um
0x3f8-0x3ff und 0x2f8-0x2ff findest, dann glänzt das sprichwörtliche
Gold schon ganz gut.
Viel Erfolg!