I/O Ports

Aus Lowlevel
Wechseln zu: Navigation, Suche

Als I/O Ports werden die Schnittstellen zwischen CPU und Peripheriegeräten bezeichnet. Die Kommunikation erfolgt über spezielle Maschinenbefehle, wie zum Beispiel in und out. Jedem Gerät wird dabei ein Bereich des I/O-Adressraums zugeordnet, und Lese- bzw. Schreibzugriffe werden an das Gerät weitergeleitet. In diesem Wiki werden als C-Funktionen outb, outw und entsprechende andere Varianten von in und out vorausgesetzt. Wie man diese Funktionen in C mit Hilfe von Inline-Assembler implementieren kann wird im Artikel Inline-Assembler mit GCC für den GCC teilweise erklärt.

Ergänzend zur Port I/O existiert Memory Mapped I/O, bei dem die Geräte in den Adressraum des physischen Speichers eingeblendet werden. Das Gerät kann somit über normale Befehle zum Speicherzugriff angesteuert werden.

Liste

Dies ist eine kleine Liste der Standard-I/O-Portbereiche eines x86/x86-64-Systems. Diese Liste ist nicht vollständig, da beispielsweise bei Geräten, die über den PCI-Bus angeschlossen sind, die I/O Ports und die physischen Speicherbereiche nicht fix sind, sondern ausgelesen und konfiguriert werden können. Hier sind also vorwiegend Geräte aufgelistet, die aus der Zeit des ISA/EISA-Busses stammen, als die I/O-Portbereiche für viele Geräte standardisiert wurden, da es im Allgemeinen keine Möglichkeit gab, diese Bereiche zur Laufzeit auszulesen bzw. zu konfigurieren.

Beginn Ende Gerät
0x000 0x01F DMA Controller (8237A-5)
0x020 0x021 Programmable Interrupt Controller (PIC)
0x040 0x043 Programmable Interval Timer (PIT)
0x060 0x060 Tastaturcontroller
0x064 0x064 Tastaturcontroller
0x070 0x071 CMOS
0x080 0x083 DMA Controller (8237A-5)
0x0A0 0x0AF PIC
0x0C0 0x0CF DMA Controller (8237A-5)
0x0F0 0x0FF Nummerischer Koprozessor (FPU)
0x170 0x177 2. Festplatten Controller
0x1F0 0x1F7 1. Festplatten Controller
0x278 0x27F 2. Parallel Port (3. mit MDA)
0x2C0 0x2DF 2. EGA
0x2E8 0x2EF 4. RS232 (COM-Port)
0x2F8 0x2FF 2. RS232 (COM-Port)
0x370 0x375 2. Diskettenlaufwerk Controller
0x376 0x377 2. Festplatten Controller
0x378 0x37F 1. Parallel Port
0x3B0 0x3DF Video Graphics Array (VGA)
0x3C0 0x3CF 1. EGA
0x3D0 0x3DF CGA und EGA/VGA
0x3E8 0x3EF 3. RS232 (COM-Port)
0x3F0 0x3F5 1. Diskettenlaufwerk Controller
0x3F6 0x3F7 1. Festplatten Controller
0x3F8 0x3FF 1. RS232 (COM-Port)
0xCF8 0xCFB PCI Configuration Address
0xCFC 0xCFF PCI Configuration Data

Links

  • Ralf Brown's Interrupt List (RBIL) ist nicht nur eine Liste aller erdenklichen Software-Interrupts, sondern bietet auch eine sehr große (!) Liste mit Port-Nummern und entsprechenden Beschreibungen. Die Liste ist ist in 3 Dateien aufgeteilt (PORTS.A, PORTS.B und PORTS.C). Diese Dateien findet man in folgendem Zip-Archiv: inter61d.zip