A20-Gate

Das A20-Gate ist eine elektronische Schaltung bei x86-Prozessoren, die die 21. Adressleitung eines zum Intel 80286 kompatiblen Prozessors freischaltet oder sperrt. A20 bedeutet „Adressleitung 20“ – da ab A0 gezählt wird, ist dies die 21. Adressleitung. Der englische Begriff gate bezeichnet ein Logikgatter. Man spricht auch von der A20-line oder der A20-Leitung.

Auf modernen 32-Bit- oder 64-Bit-Betriebssystemen und für darauf laufende Anwendungsprogramme wird das A20-Gate nicht benötigt und ist auf x64-Prozessoren (64-Bit-x86-Architektur) ab ca. 2010 größtenteils nicht mehr implementiert.

Ursprung und Funktionsweise

Das A20-Gate geht auf IBM zurück, denn bei der Einführung des IBM PC/AT mit 80286-Prozessor wurde auf einen Hack im Betriebssystem MS-DOS von Microsoft Rücksicht genommen – ohne das A20-Gate hätte das Betriebssystem nicht mehr funktioniert.[1] Zur Erhaltung der Abwärtskompatibilität erhielt der Prozessor von Intel daher ein Logikgatter in der A20-Adressleitung, um diese abschaltbar zu machen. Das Gatter wird über ein bis dahin ungenutztes Bit des Steuerregisters des ohnehin vorhandenen Tastatur-Controllers gesteuert, was zusätzliche ICs oder Chips einsparen sollte. Doch die A20-Leitung war berüchtigt[2] und sorgte bei der Weiterentwicklung der x86-Architektur immer wieder für Probleme.[3]

Ist das gate „gesetzt“, so wird die vom Prozessor ausgegebene A20-Leitung an den Adressbus des Systems (und damit letztlich an den Arbeitsspeicher) weitergeleitet, ist das gate „gelöscht“, so wird das Signal an der A20-Leitung unterdrückt, und immer eine logische 0 an den Systembus angelegt. Allerdings lässt sich der Status des Gatter nicht abfragen.

Durch das A20-Gate kann ein x86-Prozessor mit mehr als 20 Adressleitungen einen älteren 8086 oder 8088 mit nur 20 Adressleitungen (A0 bis A19) emulieren und bleibt somit zu bestehenden Programmen kompatibel.

Architektur des 8086

Der Intel-8086-Prozessor adressiert den Speicher nach einem Segmentierungsmodell. Dabei wird der verfügbare Hauptspeicher in 64 KiB-Einheiten (sogenannte Segmente, in bestimmten Kontexten auch Paragraphs genannt) unterteilt. Über jedes dieser Segmente lassen sich 64 KiB Speicher adressieren, indem ein Offset hinzugerechnet wird. Sowohl beim Segment als auch beim Offset handelt es sich um 16-Bit-Werte. Die 20-Bit-Adresse des angesprochenen Speicherbereichs berechnet sich dann nach der Formel

Segment × 16 + Offset,

was einen Adressraum von etwas mehr als 1 MiB ergibt.

Der 8086er hat einen physischen 20-Bit-Adressbus, womit sich exakt 1 MiB Speicher adressieren lässt, mit den Adressen 016 bis FFFFF16. Wenn man nun den maximalen Segmentwert von FFFF16 und einen Offset von 016 bis F16 zugrunde legt, kann der Adressbereich von

FFFF16 × 1016 + 016 = FFFF016

bis

FFFF16 × 1016 + F16 = FFFFF16

erreicht werden. Wenn nun aber der Offset größer ist, findet ein Übertrag auf das 21. Bit statt. Insgesamt lassen sich so genau 65.520 Bytes mehr adressieren, als die 20 Adressleitungen adressieren können. Der 8086er ignoriert diesen Übertrag, so dass ein Überlauf auf die ersten 65.520 Byte des Arbeitsspeichers stattfindet. Da sich die Segmente überlappen, lässt sich jede einzelne Adresse mit genau 4.096 Kombinationen aus Segment und Offset darstellen. Die Adresse 1234516 lässt sich z. B. mit Segment 123416 und Offset 516, aber auch mit Segment 120016 und Offset 34516 darstellen. Beim Überschreiten der Grenze von 1 MiB ergeben sich weitere Kombinationen, die auf dieselbe Speicherzelle zugreifen. Die sich dadurch ergebenden Mehrdeutigkeiten erschweren die Nutzung des Speichers u. U. erheblich.

Architektur des 80286

Mit der Einführung des Protected Mode (deutsch auch Schutzmodus bezeichnet) wurde der Adressbus ab dem 80286er gegenüber seinen Vorgängern auf 24 Bits vergrößert. Dadurch kann der Prozessor nunmehr 16 MiB statt davor nur 1 MiB adressieren. Allerdings kann nun die Adressberechnungslogik des Prozessors nicht mehr einfach Überträge (wie den zur 21. Adressleitung) ignorieren. Als Konsequenz ergibt die Rechnung FFFF16 × 1016 + FFFF16 auf einem 80286er-Prozessor nicht mehr die Adresse FFEF16, sondern 10FFEF16.

MS-DOS 1.25 bzw. PC DOS 1.0 und einige frühe Anwendungsprogramme für DOS gehen aber davon aus, dass der Übertrag zur 21. Adressleitung abgeschnitten wird und funktionieren andernfalls nicht richtig. Damit ergab sich das Problem, dass der neue PC/AT nicht ausreichend kompatibel zum PC XT gewesen wäre. Einfach abklemmen konnte man die A20-Leitung aber auch nicht, sonst wäre man weiterhin auf maximal 1 MiB Speicher beschränkt gewesen – ein wesentliches Verkaufsargument für den PC/AT wäre hinfällig gewesen. Als Lösung wurde das A20-Gate erfunden.

Probleme mit dem A20-Gate

Das erste Problem ist, dass der Tastaturcontroller ein für PC-Verhältnisse langsamer und komplizierter Umweg ist. Das zweite, weitaus schwerwiegendere Problem ist jedoch, dass der Zustand des Gates nirgendwo abfragbar war. Erst später wurde eine Möglichkeit zur Abfrage über eine BIOS-Funktion durch IBM eingebaut. Als die ersten prozessorexternen Caches auftauchten, stellten sich weitere Probleme ein: Der Cache muss zwischen den beiden Zuständen unterscheiden können, um nicht veraltete Daten aus dem falschen Speicherbereich zu liefern. Ein weiteres Problem ergibt sich über den Wechsel zwischen Protected Mode und Real Mode. Da es im 80286 nicht vorgesehen ist, aus dem Protected Mode wieder zurück in den Modus des 8086 (ab dem 80286 retronym Real Mode genannt) zu wechseln, diese Funktionalität im PC/AT aber gebraucht wird, nutzte IBM eine weitere Verschaltung, die dafür sorgt, dass der Prozessor ein Reset-Signal erhält, und damit in den Real Mode zurückfällt, sobald sie in den Shutdown-Modus geht (bei Triple Fault). So konnte durch gezieltes Provozieren eines Triple Fault doch in den Real Mode zurückgeschaltet werden. Ist dabei allerdings die A20-Leitung maskiert, so sucht der Prozessor nach dem Reset ihren ersten Befehl zur Ausführung statt an der Adresse FFFFF016 an EFFFF016 – einem Speicherbereich, der damals selten mit RAM oder ROM bestückt war. Mit der Nutzung der HMA durch MS-DOS ab Version 4 muss der Zustand der Maskierung oft gewechselt werden, was eine aufwändige Kontrolle des Zustandes des Gatters erfordert.

Ab dem 80486 wurde ein Pin A20M am Prozessor selbst zur Verfügung gestellt. Über diesen kann nun der AT-Tastaturcontroller (oder sein kompatibles, aber schnelleres Äquivalent) die Notwendigkeit einer Maskierung direkt an den Prozessor melden, der die Maskierung dann selbst durchführt. Der Zustand des Pins wird nur im Real Mode abgefragt und umgesetzt. Im Protected Mode und Virtual 8086 Mode erfolgt keine Maskierung. Die emulierte Maskierung des A20 im Virtual 8086 Mode lässt sich über Paging lösen.

Hackmöglichkeiten auf Systemen mit A20-Maskierung

Xbox

Das A20-Gate lässt sich zum Umgehen des Secret-ROMs und dem Ausführen von Programmen im Flash-Speicher ausnutzen. Dazu wird die Adressleitung A20# des Prozessors auf GND gelegt. Die Xbox startet dann nicht von der Adresse FFFFFFF016 im Secret-ROM, sondern von der Adresse FFEFFFF016, die im Flash liegt. Dort kann zum Beispiel ein Programm abgelegt werden, welches das Secret-ROM über den I²C-Bus ausliest.[4]

Das Ende des A20-Gates

32-Bit- und 64-Bit-Betriebssysteme und -Programme laufen nicht mehr im 16-Bit-Real-Mode des 8086 und benötigen die A20-Leitung daher auch nicht mehr.

Seit der Intel-Haswell-Mikroarchitektur wird das A20-Gate nicht mehr von Intel-Desktop-Prozessoren unterstützt,[5] nachdem es zuvor schon aus der Xeon-Nehalem-Serie verschwunden war.[6] Bis dahin besaßen alle aktuellen (Intel-kompatiblen) Computer ein A20-Gate. Tatsächlich gebraucht wird es selten, außer vom PC-kompatiblen DOS: Dort wird es bei jedem Rechnerstart meist von HIMEM.SYS oder einem anderen Expanded Memory Manager (etwa EMM386.EXE-Alternativen) geprüft und umgeschaltet. Ohne das A20-Gate könnte es sein, dass DOS nicht mehr vollständig auf aktuellen Computern läuft,[7] was z. B. auch verhindern könnte, dass DOS-basierte Startdisketten korrekt funktionieren. Das modernere MS-DOS-kompatible FreeDOS hat damit zwar keine Probleme,[6] doch sehr alte oder systemnahme DOS-Programme, die noch für den Urvater IBM PC 5160 mit 8088-Prozessor konzipiert wurden, funktionieren ohne das A20-Gate nicht mehr. Auch das DOS-basierte Windows 9x verweigert ab Version 95b bei freigeschaltetem A20-Gate den Start.[3]

Weblinks

Einzelnachweise

  1. Andreas Stiller: 35 Jahre Intel 8088-Prozessor. In: Heise online. 1. Juli 2014. Abgerufen am 16. Mai 2021.; Zitat: „IBM kam bei dem IBM-AT dann auf die urige Idee, dieses Feature irgendwie kompatibel simulieren zu wollen und so erfanden sie das berühmte A20-Gate, das bis vor Kurzem noch sein Unwesen in der Prozessorwelt trieb, als eine dauerhafte Erinnerung an den Ausgangsprozessor des PCs.“.
  2. Volker Zota: Zahlen, bitte! Vom Colorburst im PC (und anderen Computern). In: Heise online. 5. April 2016. Abgerufen am 16. Mai 2021.; Zitat: „Die PC-Architektur schleppt so manches Histörchen mit sich herum; eines der berüchtigsten ist das A20-Gate…“.
  3. a b Andreas Stiller: PC-Geschichte(n) – 15 Jahre c´t und die Bits und Bytes der Computerwelt. In: Heise online. 19. November 1998 (Abschnitt A20-Skurrilität). Abgerufen am 16. Mai 2021.
  4. Michael Steil, 17 Mistakes Microsoft Made in the Xbox Security System (PDF; 246 kB).
  5. Intel® 64 and IA-32 Architectures Developer's Manual: Vol. 3A. In: Intel. Abgerufen am 1. November 2016.
  6. a b Andreas Stiller: Prozessorgeflüster – Von trockenen Steinen und markigen Kernen. In: Heise online. 6. Juni 2009 (Box „Nehalem-Xeons: völlig inkompatibel“). Abgerufen am 16. Mai 2021.; Zitat: „Während selbst die neuesten Core i7 noch tapfer an diesem Prunkstück der IBM-Ingenieurskunst festhalten, ist bei den Nehalem-Xeons nun erstmals in der x86-Geschichte tatsächlich das … A20-Gate einfach sang- und klanglos verschwunden. … FreeDOS-Himem.sys kommt jedoch mit diesem schmerzlichen Verlust problemlos klar und meldet schlicht „A20 permanent on“.“.
  7. Andreas Stiller: 40 Jahre 8086: der Prozessor, der die PC-Welt veränderte. In: Heise online. 8. Juni 2018. Abgerufen am 16. Mai 2021.; Zitat: „Wenn man jedoch spaßeshalber mal ein altes Betriebssystem, etwa DOS 6.22 … startet, so läuft dieses samt Uralt-Programmen prinzipiell, nur wird man bei modernen Prozessoren ab Haswell über eine kleine, aber feine Inkompatibilität stolpern … das putzige A20-Gate. „Leitung A20 kann nicht gesteuert werden“ meckert dann der XMS-Treiber Himem.sys. Auf Sandy-Brigde-Systemen kann man hingegen A20M zumeist noch im BIOS-Setup freischalten.“.