Atari TT - Die FPU wird abgeklopft

Zum 68030 haben die Entwickler dem TT auch noch eine FPU (Floating Point Unit) verpaßt. Laut Atari handelt es sich dabei um einen 68882 - den schnelleren Nachfolger des 68881. Manche Programme müssen wissen, welche FPU vorliegt. Ihre softwaremäßige Unterscheidung ist gar nicht so schwer.

Bei einem Blick in die »_FPU-Cookie«-Dokumentation von Atari fällt auf, daß es sich bei dem im TT gefundenen Wert von $00020000 im _FPUCookie nur um eine lapidare Mitteilung handelt: Eine 68881- oder 68882-FPU ist vorhanden und kann die über »LineF« angesprochen werden. Allerdings fanden sich in der Atari-Dokumentation verschiedene Werte für 68881, 68882 und den 68040, der eine interne FPU besitzt. Dann ist's also doch möglich, die angeblich völlig kompatiblen Rechenknechte per Programm zu unterscheiden? Eine Rückfrage in Raunheim sowie Telefonate mit verschiedenen Hard- und Software-Herstellern führten zur einhelligen Meinung: »Die beiden sind absolut kompatibel, sowohl was die Pinbelegung als auch was die Programmierung betrifft. Der 68882 ist nur etwas schneller.« Warum aber hatte man sich bei Atari USA dann aber abgemüht, für alle drei unterschiedliche Cookie-Werte festzulegen? Erster Verdacht: Es handelt sich wieder einmal um eine jener »vorläufigen« Dokumentationen; bei Atari nichts Ungewöhnliches.

Bei einer Spurensuche in den Motorola-Handbüchern fand sich, abgesehen von der verbesserten Verarbeitungsgeschwindigkeit des 68882 auch dort kein signifikanter Unterschied beider Prozessoren. Anscheinend müßte man das Zeitverhalten beider Chips messen, um einen Unterschied zu finden. Dieser Programmieraufwand: Was hat sich Atari da nur gedacht? Halt: In einem Nebensatz des 68882er-Datenblatts fiel die Bemerkung, daß dieser beim Retten des Prozessorstatus andere Werte in den sog. State-Frame schreibt, als seine beiden Kollegen. Ein Umstand, den Entwickler z.B. in Multitasking-Systemen berücksichtigen sollten! Zur Unterscheidung schreibt die deshalb als erstes ein »Format-Wort« in den Frame, das eine Versionsnummer der FPU repräsentiert. Jetzt sind wir klüger!

Ist der 68881/2 oder 68040 neu initialisiert, bevor ein »fsave« durchgeführt wird, kann von allen drei Prozessoren nur ein 4 Byte langer »Null-State Frame« geschrieben werden. Wurde dagegen nach dem letzten Reset oder fsave irgendeine FloatingPoint-Instruktion aufgeführt, wird ein »Idle-State Frame« geschrieben (beim 68040 4 Byte, beim 68881 28 Byte und beim 68882 60 Byte lang). Am Anfang dieses Frames steht das jeweilige Formatwort. Ein »Busy-State Frame« schließlich ist beim 68040 96 Byte, beim 68881 184 Byte und beim 68882 216 Byte lang. Dieser wird aber nur dann geschrieben, wenn der Floating-Point-Befehl vor dem fsave noch nicht komplett abgearbeitet werden konnte.

Kurz und gut: So entstand das abgedruckte Listing, mit dessen Hilfe man sehr einfach alle drei Prozessortypen voneinander unterscheiden kann. Damit können Sie leicht feststellen, welche FPU sich in Ihrem TT befindet.

(uw)

Belegung im High-Word
0 keine FPU
1 Atari Register-FPU
2 LineF-FPU
3 Atari Register-FPU + LineF-FPU
4 mit Sicherheit 68881 LineF-FPU
5 Atari Register-FPU + mit Sicherheit 68881 LineF-FPU
6 mit Sicherheit 68882 LineF-FPU
7 Atari Register-FPU + mit Sicherheit 68882 LineF-FPU
8 68040 internal LineF FPU
9 Atari Register-FPU + 68040 internal LineF-FPU
Low-word derzeit immer 0

Nach Atari-Dokumentation sieht die Belegung des _FPU-Cookie's so aus

Diese Routine stellt fest, um welche FPU es sich handelt. Sie sollte immer im Supervisor-Mode abgearbeitet werden.


Dirk Katschke
Aus: ST-Magazin 01 / 1991, Seite 152

Links

Copyright-Bestimmungen: siehe Über diese Seite