Mandalex

In der Sparc-Architektur wird nur das Memory-Mapped-I/O benutzt. Dies bedeutet, dass alle Daten, die von der Peripherie kommen oder zur Peripherie geschickt werden müssen, im Hauptspeicher platziert werden. Dort kann der CPU ebenfalls die Daten lesen bzw. schreiben. Der Speicherbereich, der im Sparc dafür reserviert ist, ist 0xFFF00000 bis 0xFFFFE000, dies sind knapp ein MegaByte.

Um ein Datenbyte an eine Device zu schicken geht man beispielsweise folgendermassen vor:

mov  "a", %o0          !Ascii-Code des Zeichens "a" in o0 sichern
set  0xFFFF0000, %o1   !Adresse des Memory-In-Port in o1 sichern
stb  %o0, [%o1]        !Ascii-Code an die Adresse speichern

Die Peripheriegeräte sprechen direkt den Speicher an (DMA) und schreiben Bit für Bit in die zugeteilten Adressen. Sobald ein Byte voll ist, wird die Device für lesefähig erklärt (Flag setzen). Dann kann der Wert aus der Speicherzelle herausgelesen werden und die Device kann wieder mit dem Auffüllen beginnen. Das Herauslesen geht folgendermassen vonstatten:

set  0xFFFF0008, %o1   !Adresse des Memory-Out-Port in o1 speichern
ldup [%01], %o0        !Inhalt der Adresse in o0 laden

In TKISEM sind folgende Adressen für den Memory-Mapped-I/O reserviert:

CONOUT     = 0x110000   Console out
CONIN      = 0x110000   Console in
HALT       = 0x120000   
TIMER      = 0x130000
UARTSTATUS = 0x140000
UARTCREG   = 0x140001
UARTTXREG  = 0x140002
UARTRXREG  = 0x140003