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-[[Adressraum]]s 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. {| {{Prettytable}} ! Beginn !! Ende !! Gerät |- | 0x000 || 0x01F || [[Direct Memory Access | DMA Controller]] (8237A-5) |- | 0x020 || 0x021 || [[Programmable Interrupt Controller]] (PIC) |- | 0x040 || 0x043 || [[Programmable Interval Timer]] (PIT) |- | 0x060 || 0x060 || [[Keyboard Controller | Tastaturcontroller ]] |- | 0x064 || 0x064 || [[Keyboard Controller | Tastaturcontroller ]] |- | 0x070 || 0x071 || [[CMOS]] |- | 0x080 || 0x083 || [[Direct Memory Access | DMA Controller]] (8237A-5) |- | 0x0A0 || 0x0AF || [[PIC]] |- | 0x0C0 || 0x0CF || [[Direct Memory Access | DMA Controller]] (8237A-5) |- | 0x0F0 || 0x0FF || [[Floating point unit | Nummerischer Koprozessor]] (FPU) |- | 0x170 || 0x177 || 2. [[ATA | Festplatten Controller]] |- | 0x1F0 || 0x1F7 || 1. [[ATA | Festplatten Controller]] |- | 0x278 || 0x27F || 2. Parallel Port (3. mit MDA) |- | 0x2C0 || 0x2DF || 2. EGA |- | 0x2E8 || 0x2EF || 4. [[Serielle Schnittstelle | RS232]] (COM-Port) |- | 0x2F8 || 0x2FF || 2. [[Serielle Schnittstelle | RS232]] (COM-Port) |- | 0x370 || 0x375 || 2. [[Floppy Disk Controller | Diskettenlaufwerk Controller]] |- | 0x376 || 0x377 || 2. [[ATA | Festplatten Controller]] |- | 0x378 || 0x37F || 1. Parallel Port |- | 0x3B0 || 0x3DF || [[Video Graphics Array]] (VGA) |- | 0x3C0 || 0x3CF || 1. EGA |- | 0x3D0 || 0x3DF || CGA und EGA/[[Video Graphics Array|VGA]] |- | 0x3E8 || 0x3EF || 3. [[Serielle Schnittstelle | RS232]] (COM-Port) |- | 0x3F0 || 0x3F5 || 1. [[Floppy Disk Controller | Diskettenlaufwerk Controller]] |- | 0x3F6 || 0x3F7 || 1. [[ATA | Festplatten Controller]] |- | 0x3F8 || 0x3FF || 1. [[Serielle Schnittstelle | 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: [http://www.cs.cmu.edu/~ralf/interrupt-list/inter61d.zip inter61d.zip] * [http://mudlist.eorbit.net/~adam/pickey/ports.html Eine Liste der Universität Magdeburg] (Letzte Aktualisierung 26.03.1995) Zwar veraltet, aber dafür recht übersichtlich. [[Kategorie:x86]] [[Kategorie:x86-64]]