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