Technische Tips und Tricks: Bankswitching von B. Kühnast Nach dem etwas komplexeren Thema der letzten Ausgabe diesmal etwas simples, was gute Effekte bringt: Bankswitching. Der Ausdruck besteht aus zwei Worten: Bank und switching. Bank bezeichnet in diesem Fall einen Speicherbereich. To switch heißt ganz einfach umschal- ten. Der Begriff (ich halte es für überflüssig, ihn einzudeutschen) be- zeichnet also ein Umschalten zwischen Speicherbereichen. Im Beispielprogramm (diesmal nur für mindestens 128 K Speicher) wird mit START und SELECT zwischen den verschiedenen Banks des erweiterten XE-Speichers umgeschaltet. Da der Prozessor des Atari nur 64 K direkt adressieren kann, muß zur Nutzung des restlichen Speichers etwas umgeschaltet werden. Die grobe Spei- cherbelegung: ------------- 65536 Hauptspeicher Bank 3 ------------- 42191 Hauptspeicher Bank 2 ------------- 32768 Hauptspeicher DIESER TEIL KANN Bank 1 AUSGEBLENDET WERDEN ------------- 16383 Hauptspeicher Bank 0 ------------- Es gibt also 5 Banks, die sich den gleichen Speicherbereich von 16384 bis 32767 teilen: Bank 1 des Hauptspeichers und die Banks 0 bis 3 des erweiterten Speichers. Wie wird umgeschaltet? Dabei hilft uns FREDDIE (nicht Krüger). Dieser Chip übernimmt die Speicherverwaltung (engl. Memory Management). Zum Umschalten wird nur eine Adresse benötigt: 54017 (PORTB). Ursprünglich war Port B für die Joysticks 3 und 4 zuständig. Port B setzt sich so zusammen: Bit 7 6 5 4 3 2 1 0 RAM - ANTIC CPU Basic OS Die einzelnen Bits: 0 OS Bank 3 ist Betriebssystem- ROM (Bit gesetzt) oder RAM 1 BASIC Gesetzt: BASIC ist aus 2,3 Bank Die Nummer der Bank, die eingeschaltet werden soll (binär, also Bank 0=00, Bank 1=01, Bank 2=10, Bank 3=11) 4 CPU Gesetzt: Der Prozessor hat Zugriff auf den Haupt- speicher, sonst auf den erweiterten Speicher 5 ANTIC Wie Bit 4, nur für den ANTIC 6 - Unbenutzt. Vorsicht! Falls ein Wunder geschieht und Atari einen neuen 8-Bitter entwickelt, könnte dieses Bit belegt sein 7 RAM Nicht gesetzt: Selbsttest eingeblendet, sonst RAM Zum Umschalten erfordert das jetzt natürlich noch etwas Rechenarbeit. Im Beispielprogramm stehen 5 DATA-Werte: Sie entsprechen den Banks 0-3 und der Bank 1 des Hauptspeichers. ANTIC und CPU haben gleichzeitig Zugriff. Die Trennung zwischen ANTIC und CPU (der ANTIC ist ja ein selbstständiger Video-Prozessor) ermöglicht zum Beispiel das Laden des externen Speichers, während noch das Titelbild angezeigt wird. D. h. ANTIC zeigt das normale RAM und der 6502 füllt die restlichen 64 K. Nachdem das ganze jetzt in etwa erläutert wurde (Ausprobieren hilft!) will ich noch ein paar Nachteile erwähnen. 1. Unter Basic sollte man das Programm möglichst kurz halten. Befindet sich ein Programm in Bank 1 und es wird umgeschaltet .... (Absturz). Man kann mit einem Ladeprogramm die externen Banks füllen und, sofern nur der ANTIC Zugriff auf diese Daten hat, dann den Hauptspeicher mit dem eigentlichen Programm füllen (vorher den CPU-Zugriff auf Hauptspeicher stellen!). 2. Ein dickes Minus an die Besitzer von 256 K oder 320 K Speicher: Kein Auswählen zwischen ANTIC- und CPU- Zugriff! Da die Bits 2 und 3 nur zum Adressieren von 4 Bank reichen, mußten auch die Bits 4 und 5 dazugenommen werden, also ist Bit 2 bis 5. 3. Wird der Bildschirm gelöscht nachdem der Bildschirmspeicher auf eine externe Bank gelegt wurde, wird BASIC abstür- zen. Zur Abhilfe sollte man RAMTOP senken, z. B. POKE 106, 128 beschränkt die Wirkung auf Bank 1. Je nach DOS wird der Speicher als RAM-Disk benutzt. Dran denken: Die Programmierung des externen Speichers löscht die RAM-Disk! Alles schön und gut, aber was nutzt das Ganze? Man kann z. B. einen Gaphics 15 Bildschirm animieren. In jede Bank passen 2 Bilder, das macht bei 4 externen und 1 internen 10 Bilder, also eine Animation mit 10 Phasen. Adven- ture-Programmierer können auch Bilder oder den Parser im Zusatzspeicher ablegen. Da anscheinend doch ein größerer Teil von ATARI-Usern mehr als 64 K hat, wäre es auch gut, wenn mehr Spiele wie KAISER II den Speicher ausnutzen.