Mandalex
Zurück zum Index

Autoren-Aufruf! Ich habe seit Jahren keine Zeit und Lust mehr, die Inhalte von Mandalex zu pflegen, weswegen sie teilweise veraltet und inkorrekt sind. Wenn ein Wikipedia-Autor über diese Seite stolpert und Lust hat, meine Texte irgendwie in Wikipedia zu integrieren, darf er oder sie mir eine Email schreiben, ich würde die einzelnen Seiten dann gerne abgeben, auf dass ich die Seite irgendwann schliessen kann. Und bevor die Frage kommt: Nein, ich zahle nichts.

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
Zurück zum Index