Nach jahrelangen Gerüchten und Vorankündigungen war PC-SPEED der erste erhältliche MS-DOS-Hardware-Emulator für den ATARI ST. Im folgenden erläutert Hans-Jörg Sack, der Entwickler von PC-SPEED, die Problematik von Hardware-Emulatoren und gibt Tips für den gleichzeitigen Betrieb von PC-SPEED und 16MHz-Erweiterungen im ST.
Ich erinnere mich noch gut an die erstaunten Gesichter der Redakteure, die den Hardware-PC-Emulator PC-SPEED im Mai 1989 testeten. Nachdem sie einige Stunden unter MS-DOS auf dem ST gearbeitet hatten und dem Emulator dabei einige harte PC-Software-Nüsse zu knacken gaben, wollte ein jeder das Gerät sehen, welches den ST endlich in einen schnellen und kompatiblen PC verwandelte. Viele erwarteten ein komplettes PC-Motherboard, das per Kabel mit dem ST verbunden sein sollte. Nach dem Öffnen des ST zeigte sich jedoch eine kleine handliche Platine, die neben einem NEC V30-Prozessor noch 4 TTL-ICs und 2 GALs enthielt. Die PC-Kenner unter den Redakteuren suchten vergeblich nach den ICs, die ein PC normalerweise enthält, wie z.B.: Timer 8253, PIO 8255, Interrupt-Controller 8259 oder den Video-Controller 6845. In den GALs konnte all diese Logik nicht enthalten sein. Mit einem GAL kann man Logik mit einer Komplexität bis ca. 300 Gattern erzeugen. Zum Vergleich: der MC68000 enthält sinnigerweise ca. 68000 Transistoren, neueste 32-Bit-Prozessoren, wie z.B. den Intel 80486 oder MC 68040, enthalten Uber 1 Million.
Zur Entlastung der GALs ist zu beachten, daß eine Gatterfunktion aus mehreren Transistoren besteht, und daß beim PC-SPEED die beiden GALs mindestens 10 Standard-TTL-ICs ersetzen.
Die Lösung ist die, daß die genannten ICs virtuell vorhanden sind. Wenn PC-Programme direkt auf die Hardware zugreifen, wird ihnen von PC-SPEED eine PC-Hardware “vorgegaukelt”. Im Unterschied zu den bekannten Software-Emulatoren wird diese Funktion durch Hardware unterstützt. Der Prozessor selbst braucht bei PC-SPEED natürlich überhaupt nicht emuliert zu werden. Das ist auch nicht sinnvoll, da dieser für die Gesamtleistung eines Systems von höchster Bedeutung ist. Dies wird besonders beim PC-DITTO deutlich, der ohne jegliche Hardware-Unterstützung auskommen muß, und entsprechend nicht mit hohen Landmark/ Norton-Faktoren aufwarten kann (die Faktoren bieten eine Möglichkeit zum Geschwindigkeitsvergleich zwischen verschieden PCs (und Emulatoren)). Die MAC-Emulatoren haben es da leichter, da der Prozessor des MAC (MC 68000) mit dem im ST identisch ist. Mir ist nur ein reiner Software-Emulator für den ST bekannt, der sein Original an Rechenleistung übertrifft. Es ist dies ein SHARP PC1403-Emulator, der eine CPU mit einer Taktfrequenz von 300kHz (original: 150kHz) emuliert.
Wenn in Zukunft erschwingliche Computer mit Rechenleistungen >10 Mips (ATARI ST: <1 Mips) zur Verfügung stehen, kann die Software-Emulation jedoch eine brauchbare Alternative darstellen. Ein Schritt in diese Richtung war ein PC-Emulator für den Acorn Archimedes (ca. 4Mips), welcher etwa halbe PC-Performance erreichte.
Doch nun zurück zum Hardware-Emulator PC-SPEED, welcher schon heute 3-4fache PC-Performance auf dem ST zur Verfügung stellt. Für einen Emulator gibt es verschiedene Ansatzpunkte, ein System zu emulieren.
Computerprogramme greifen normalerweise über 3 Ebenen auf die Hardware zu. Die oberste Ebene ist das Betriebssystem (DOS), darunter befindet sich das BIOS, und die unterste Ebene ist die eigentliche Hardware. Bei einem Emulator sollte zumindest die zweite Ebene (das BIOS) emuliert werden. Die genannten MAC-Emulatoren für den ST begnügen sich auch weitestgehend damit, da MAC-Programme meist so sauber programmiert sind, daß sie nicht direkt auf die Hardware zugreifen. Anders beim PC, dort ist es sogar oftmals unmöglich, einige Funktionen über das BIOS abzuwickeln. Das Schalten in den Grafikmodus der Hercules-Karte ist z.B. nur über direktes Ansprechen des 6845 Video-Controllers möglich. Deswegen würde ein PC-Emulator, welcher nur das BIOS emuliert, ca. 10% kompatibel sein. Die “restlichen” 90% der Programme würden ihren Dienst verweigern. Bei PC-SPEED wird deshalb auch die unterste Ebene (die Hardware) emuliert. Dafür sorgen die 2 GALs und ein wenig Software.
Der NEC V30-Prozessor stellt glücklicherweise ein Signal zur Verfügung, das anzeigt, wann auf einen Hardware-Baustein zugegriffen wird. Beim PC werden die Zugriffe auf die Hardware nämlich durch spezielle IN/OUT-Befehle angesprochen, anders als im ST, wo alle Peripheriebausteine “Memory Mapped” sind, J.h als normale Speicheradressen erscheinen. Dadurch wird es beim V30 sehr einfach, diese Hardware-Zugriffe abzufangen und an die entsprechende ATARI-Hardware weiterzuleiten. Insgesamt können bis zu 65536 Hardware-Adressen verwaltet werden, von denen jedoch nur ein Bruchteil genutzt wird.
Zum besseren Verständnis des Emulationsprinzips ein kleines Beispiel: In eiern PC-Programm soll ein Ton erzeugt erden. Da das PC-BIOS nicht über spezielle Funktionen zur Tonausgabe verfügt, greift das Programm direkt auf die Hardware zu. Dieser Zugriff wird von der PC-SPEED-Hardware festgestellt, und es wird ein Interrupt ausgelöst. Die Interrupt-Routine stellt nun fest, daß auf Adresse 042$ zugegriffen wurde und damit auf den Timer-Baustein 8253 , der beim PC u.a. die Tonausgabe steuert. Danach wird der "real existierende” Soundchip im ST so programmiert, daß ein Ton erzeugt wird. Mit dieser einfachen, aber sehr wirkungsvollen Methode kann man jede beliebige Hardware im PC emulieren, soweit es die Möglichkeiten des ATARI nicht überschreitet.
Oft wird nach einer EGA- oder sogar VGA-Emulation gefragt. Die EGA-Karte hat eine Grafikauflösung von 640 x 350 Pixeln in 16 Farben, neuere VGA-Karten haben sogar Auflösungen bis zu 1024 x 768 Pixeln in 16 Farben. Ein normaler ST kann diese Grafikauflösungen und vollem die Farbenpracht nicht darstellen, jedoch gibt es mittlerweile auch für den ST Möglichkeiten, die obengenannten Auflösungen wiederzugeben, z.B mit der MAXON Grafikkarte (MGE). Eine entsprechende VGA-Emulation mit PC-SPEED ist geplant. Es gibt bei PCs aber genügend Grafikkarten, welche vom ST problemlos dargestellt werden können z.B. CGA, Hercules, ATT, TANDY 1000).
Bei der Emulation einer Grafikkarte ist jedoch noch ein Problem zu lösen. Aufgrund der geringen Fähigkeiten des PC-BIOS und aus Geschwindigkeitsgründen schreiben viele Programme direkt in den Bildschirmspeicher der Grafikkarte. Dieser Speicher liegt beim PC in einem festgelegten Bereich. 128 kByte ab der Adresse $A000:0000 sind als Speicher für Grafikkarten reserviert. Hierin ist auch die magische 640 kByte-Grenze der PCs begründet. Obwohl der Speicherbereich der Hercules-Karte 64 kByte höher liegt, ist bei den meisten PCs, auch denen mit Hercules-Karte, bei 640 kByte das Speicherende erreicht. Lediglich bei PC-SPEED und einigen neueren ATs sind die wertvollen 64 kByte zusätzlich nutzbar. Schreiben PC-Programme nun direkt in diesen Speicherbereich, muß ein Emulator entsprechend reagieren, da die Bitmap im Speicher der Hercules- oder der CG A-Karte anders als die des ST organisiert ist. Wäre sie gleich, könnte man einfach die Anfangsadresse des Videochips im ST auf die Adresse $B000:0000 (Hercules) bzw. $B800:0000 (CGA) zeigen lassen. Zusätzlich haben alle PC-Grafikkarten auch noch einen Textmodus, wo nicht die Bitmap des Buchstabens, sondern sein ASCII-Wert und die dazugehörigen Attribute (hell, dunkel,invers usw.) bzw. ein Farbwert (bei CGA ) im Videospeicher eingetragen sind.
Zur Emulation der PC-Grafikmodi stellt die PC-SPEED-Hardware ein Register zur Verfügung, welches bei Schreibzugriffen auf den Videospeicher gesetzt wird. Der Inhalt dieses Registers wird in einer Interrupt-Routine laufend abgefragt. Ist es gesetzt, wird der Inhalt des PC-Videospeichers vom V30 je nach aktuellem Videomodus umgerechnet und in den ST-Videospeicher übertragen. Bei diesem Vorgang machen sich die schnellen Blockverschiebe-Befehle des V30 besonders vorteilhaft bemerkbar. Das Scrolling des Bildschirms wird vom V30 mit Blitter-Speed bewerkstelligt; eigentlich erstaunlich, daß der V30 trotz seiner 40 Beinchen schneller den Speicher “umschaufeln” kann als der 64-Füßler 68000. Aufgrund dieser Eigenschaft wird die komplette Videoausgabe vom V30-Prozessor übernommen. Nur durch den direkten Zugriff des V30 auf den Speicher im ST ist überhaupt die hohe Geschwindigkeit bei der Bidschirmausgabe möglich. Nebenbei hat das auch noch den Vorteil, daß der Emulator selber keinen eigenen Speicher benötigt. Auch kann der V30 auf den Speicher des ST ohne Wait-States zugreifen, wo PCs beim Zugriff, z.B. auf die Hercules-Karte, bis zu 10 Waits bei nur byteweisem Zugriff benötigen.
Um beide Prozessoren im selben Speicher arbeiten zu lassen, wurde die sogenannte Bus-Arbitration benutzt. Der 68000 wie auch der V30 verfügen über diese Möglichkeit. Dabei ist es möglich, einen Prozessor einfach abzuschalten, so daß ein andere, der soeben angeschaltet wurde, im System Weiterarbeiten kann. Durch die PC-SPEED-Hardware werden die Signale des V30 so umgewandelt, daß sie denen des 68000 gleichen. Diese Umwandlung ist beim V30-Prozessor im Gegensatz zum Original, dem Intel 8086, recht einfach. Zusätzlich ist in einem GAL ein MMU integriert, welches den Adreßbereich des V30 in einen geeigneten im ST abbildet. An der Adresse 0-$200 im ST liegen z.B. Interrupt-Vektoren für den 68000, die der V30 bei einer direkten Adreßanpassung verändern würde. Ebenso sorgt die MMU dafür, daß auch bei einem ST mit nur 512 kByte der ROM-Bereich ($F000:0000) und der Videospeicher ($B800:0000 bei CGA) für den V30 belegt sind. Auch wird das ROM des PC
im RAM des ST emuliert, indem Schreibzugriffe des V30 auf diesen Bereich abgefangen werden. Dieses Verfahren wird vielleicht einigen bekannt Vorkommen; es wurde bei einigen Versionen des AMIGA 1000 angewandt und ermöglichte, das Betriebssystem mit einem einfachen Software-Update zu aktualisieren. Diesen Vorteil genießen auch alle PC-SPEED-Benutzer, so wurden z.B. seit der Version 1.1 lediglich durch Software-Updates folgende neue Möglichkeiten geschaffen:
etc.
Beim ST/PC müssen Sie bei einem TOS/ BIOS-Update bekanntlich einigen Aufwand mehr betreiben. Der Nachteil der direkten Kopplung beider Prozessoren ist, daß beim Einbau die PC-SPEED-Platine auf den 68000 gelötet werden muß. Beim bneuen PC-SPEED für den ATARI STE ist das Löten übrigens nicht mehr erforderlich.
An dieser Stelle möchte ich all den Besitzern von 16MHz-Speedern wie Hypercache/Fast 16 einen Tip geben:
Wenn auf der PC-SPEED-Platine eine Leiterbahn umgelegt wird (Bild 2), läuft sie auch mit diesen Erweiterungen problemlos. Der Aufwand beim Einbau macht sich danach jedoch bezahlt, denn: nach dem Einbau kann man sich an einem ST erfreuen, der die eleganten und schlanken Ausmaße beibehalten hat, dessen Programmreservoir aber um ein Vielfaches zugenommen hat.
Mir ist kein anderer Rechner bekannt, der mehr Computerwelten in sich (wieder)vereint und die Originale dabei noch übertrifft. Ich hoffe, dieser Exkurs über PC-SPEED hat Ihnen die Funktionsweise dieses Emulators verdeutlicht und das Rätsel über das reziproke Verhältnis von Leistung und Bauteileaufwand bei PC-SPEED gelöst.