Bank Switching
Bank Switching und Adressspeicherumschaltung (ASU) sind synonyme Begriffe für die Erweiterung des Computerspeichers eines Computers (RAM oder ROM) über seine natürlichen Adressierungsräume hinaus durch das durch Software gesteuerte, aber in Hardware umgesetzte Umschalten einzelner Speicherbereiche. Diese Technik ist entweder integraler Bestandteil eines Mikroprozessors oder wird davon unabhängig in Computersysteme integriert. Um Bank Switching zu ermöglichen, wird entweder der gesamte oder auch nur ein Teil des Speicherbereichs reserviert. In diesen reservierten Speicherbereich (Bank) wird jeweils ein entsprechend großer Bereich aus einem anderen Speicher eingeblendet.
Die Technik des Bank Switching gilt als unelegant und als eine Quelle schwer zu findender Programmfehler. Sie wird daher nur dann verwendet, wenn von der Computerarchitektur entsprechende Grenzen gesetzt werden. Mit der zunehmenden Verbreitung von 32- und 64-Bit-Computersystemen entfällt der Bedarf für Bank Switching zunehmend, da diese Architekturen meist ausreichend Adressierungsraum für Speicher mit sich bringen.
Bank Switching bei 8-Bit-Systemen
Bank Switching wurde bereits bei frühen 8-Bit-Computersystemen eingesetzt, z. B. dem C64, da diese nur 64 KiB Speicher adressieren konnten, viele Firmen aber 64 KiB oder noch mehr RAM und zusätzlich auch noch ROM einbauen wollten und teilweise Memory Mapped I/O verwendeten, welche beide auch Adressraum belegten. Auch Spielmodule für Videokonsolen (z. B. Atari 2600) verwendeten diese Technik, um den Programmspeicher über das ursprünglich vorgesehene Maß hinaus zu vergrößern. Bei MSX-Computern mit dem Z80-Prozessor wurde der Speicher in vier Bänke zu 16 KiB eingeteilt und nach Bedarf RAM oder ROM eingeblendet.
Bei einem anderen 8-Bit-System, das vor allem sehr viel ROM-Platz benötigte, wurde es beispielsweise so realisiert, dass die unteren 32 KiB des Adressraums unverändert blieben und neben dem kompletten RAM sowie dem Memory Mapped I/O vor allem die Grundroutinen des Betriebssystems (Hauptschleife, Schnittstellenbedienung) und die Bank-Umschaltroutinen enthielten. Die komplette obere 32-KiB-Hälfte des Adressraums war umschaltbar eingerichtet, wohin wahlweise eine von bis zu acht verschiedenen 32-KiB-ROM-Bänken eingeblendet wurde. Das einzige Problem trat auf, wenn ein Programmteil aus dieser oberen Adresshälfte eine Subroutine aus einer anderen Bank der oberen Hälfte aufrufen wollte. Für diesen Fall gab es spezielle Unterstützungsroutinen in der festen unteren Hälfte, die diese Operation zu organisieren halfen.
Bank Switching beim IBM PC
Das Problem setzte sich später auf dem IBM-PC fort. Alle IBM-kompatiblen PCs sind im Real Mode, der unter MS-DOS üblichen Betriebsart und der einzigen auf älteren PCs möglichen, vom Prinzip her auf maximal 640 KiB direkt nutzbares RAM beschränkt – den sogenannten Konventionellen Speicher. Daher wurde 1988 das Expanded Memory System (EMS) von den Firmen Lotus, Intel und Microsoft („LIM“) spezifiziert. RAM-Steckkarten, die nach diesem LIM-EMS-Standard gebaut waren, konnten dann von Programmen verwendet werden, um den Speicher des PCs in 64 KiB großen Bänken zu erweitern. Diese Bänke konnten von einem Programm einzeln in den Adressraum „eingeblendet“ werden.
Bei Super-VGA-Grafikkarten musste ebenfalls Bank Switching benutzt werden, da die PC-Architektur nur einen Adressbereich von 64 KiB (von Adresse A0000hex bis AFFFFhex) für den Grafikspeicher vorgesehen hatte, über den durch spezielle Adressierungsmodi bis zu 256 KiB Grafikspeicher angesprochen werden konnte. Diese speziellen Adressierungsmodi wurden mit dem EGA-Standard eingeführt und ermöglichten eine maximale Grafikauflösung von 800×600 in 16 Farben. Für höhere Auflösungen oder Farbtiefen gab es – abhängig vom Grafikkarten-Chipsatz – verschiedene Verfahren, um verschiedene Teile des Grafikspeichers in dem 64-KiB-Adressfenster einzublenden. Mit der VESA BIOS Extension (VBE) Version 2.0 wurde eine genormte API für das Bank Switching des Grafikspeichers eingeführt.[1] Mit VBE-Version 3 kamen Funktionen hinzu, um im 32-Bit-Protected-Mode linear auf den Grafikspeicher zugreifen zu können, so dass kein Bank Switching mehr nötig war.[2]
Später wurde mit der Address Windowing Extension von Microsoft eine Schnittstelle in der Windows API geschaffen, mit der 32-Bit-Programme auf physischen Speicher jenseits der 4-GiB-Grenze zugreifen konnten.