                  ͻ
                                                  
                              FRANKE.387          
                                                  
                      Koprozessor-Emulation fr   
                           387DX und 387SX        
                                                  
                             Version 2.4          
                                                  
                    (c) Copyright 1989, 1990 by   
                        Ingenieurbro FRANKE,     
                        All rights reserved.      
                                                  
                  ͼ

berblick

FRANKE.387 ist eine Software-Emulation der mathematischen Koprozessoren
387DX und 387SX von Intel. FRANKE.387 wurde fr ATs mit 386DX oder 386SX
Prozessor entwickelt. Als Betriebssystem wird MS-DOS, oder ein dazu
kompatibles, vorausgesetzt.

Durch FRANKE.387 wird der gesamte Befehlsumfang der 387-Koprozessoren
abgedeckt. Neben smtlichen Befehlen stehen auch smtliche 16 und 32
Bit Adressierungs-Modi zur Verfgung. Dadurch besteht fr Anwendungs-
Programme kein Unterschied zum echten Koprozessor.

Natrlich kann FRANKE.387 nicht die physikalische Rechenleistung erhhen.
FRANKE.387 arbeitet zwar langsamer als ein Koprozessor, macht aber davon
unabhngig. Viele Standard-Programme, die einen Koprozessor automatisch
erkennen, arbeiten mit FRANKE.387 bis Faktor 2,25 schneller.

Shareware

Mit der Version 2.4 wurde FRANKE.387 auch als Shareware-Version in Umlauf
gebracht. Auf einige Leistungs-Merkmale wurde bei dieser Shareware-Version
verzichtet.
Die nicht registrierte Shareware-Version darf beliebig kopiert und unent-
geltlich weitergegeben werden. Jeder hat das Recht, diese nicht registrierte
Version bis zu 30 Tage kostenlos zu testen.
Alle weiteren Rechte, wie z.B. Verkauf, nderung, Weitergabe einer
registrierten Version oder auch Nutzung der nicht registrierten Version
lnger als 30 Tage, sind ausdrcklich untersagt. Ausnahmen hiervon
bedrfen einer vorherigen, schriftlichen Genehmigung durch das Ingenieur-
bro Franke.

Registrieren

FRANKE.387 darf nur von registrierten Anwendern lnger als 30 Tage
genutzt werden. Die registrierten Versionen bentigen keinen Benutzer-
Eingriff beim Boot-Vorgang.

   Ŀ
    Version                                                Preis zzgl.  
                                                           Kosten       
   Ĵ
    Shareware-Version, nur eine Genauigkeits-Stufe         DM  60,00    
                                                                        
    Komplett-Version, 3 Genauigkeits-Stufen, High Level                 
    Language Interface, 387 Instruction Trace Modus        DM  95,00    
                                                                        
    Upgrade von Shareware-Version auf Komplett-Version     DM  40,00    
   

Zum Registrieren werden folgende Angaben bentigt:

        1. Name
        2. genaue Anschrift
        3. gewnschte Version (Shareware/Komplett/Upgrade)

diese Angaben senden Sie an:

      Ŀ
         Brief/Fax:                      berweisung:              
                                                                   
         Ingenieurbro FRANKE            Ingenieurbro FRANKE      
         Rennweg 61                      Konto 10039999            
         D-8500 Nrnberg 20              Schmidt Bank, Nrnberg    
         Fax: 49 911 535421              BLZ 760 300 70            
      

Die Lieferung erfolgt gegen Nachnahme zzgl. Kosten, bzw. ohne zustzliche
Kosten bei berweisung.


Installation


Die Installation ist sehr einfach:
1. Die Dateien FRANKE.387 und 387.EXE auf die Festplatte bzw. Boot-Diskette
   kopieren.
2. Die Datei CONFIG.SYS erstellen, falls noch nicht geschehen.
3. Folgende Zeile in CONFIG.SYS eintragen:
        DEVICE = FRANKE.387
   Ggf. kann dem Namen FRANKE.387 eine Pfad-Angabe vorangestellt werden,
   also z.B. DEVICE = c:\tools\FRANKE.387
   Hinter dem Namen FRANKE.387 kann der Schalter ON oder OFF stehen.
   Also z.B. DEVICE = FRANKE.387 ON. Dieser Schalter gibt an, ob FRANKE.387
   anfangs ein- oder ausgeschaltet sein soll. Fehlt dieser Schaltet, so
   wird FRANKE.387 automatisch eingeschaltet, wenn kein Koprozessor gefunden
   wurde, und automatisch ausgeschaltet, wenn bereits ein Koprozessor
   installiert ist.

4. Rechner neu booten.
   Durch den Eintrag in CONFIG.SYS wird FRANKE.387 bei jedem Boot-Vorgang
   geladen. FRANKE.387 meldet sich mit einer Copyright-Meldung und teilt
   seinen aktuellen Zustand mit.

   Ŀ
    Die nicht registrierte Shareware-Version enthlt eine erweiterte   
    Copyright-Meldung, auerdem ertnt ein akustisches Signal. Der     
    Boot-Vorgang wird dann solange unterbrochen, bis Sie die richtige  
    Taste gedrckt haben. Diese Taste erscheint in der letzten Zeile   
    der Meldung. - Es mssen Grobuchstaben eingegeben werden!         
   

Bedienen von FRANKE.387

FRANKE.387 bentigt normalerweise keinerlei Bedienung durch den Anwender.
Smtliche Aktionen werden durch die Anwendungs-Programme eingeleitet, wenn
sie den Koprozessor ansprechen. FRANKE.387 arbeitet also vollautomatisch.
Fr die Anwendungs-Programme besteht kein Unterschied zum echten Koprozessor.
Natrtlich arbeitet FRANKE.387 nur im eingeschalteten Zustand. Wie bei der
Installation erklrt, kann dieser Zustand durch die Schalter ON bzw. OFF
fest eingestellt werden. Normalerweise ist FRANKE.387 immer dann einge-
schaltet, wenn kein Koprozessor vorhanden ist.
Zum nachtrglichen Ein- bzw. Ausschalten von FRANKE.387 wird das Programm
387.EXE mitgeliefert. Dieses Programm kann in irgendein Verzeichnis der
Festplatte oder auch auf eine Diskette kopiert und von dort aus gestartet
werden.
Folgende Aufruf-Arten von 387.EXE sind mglich. Einige dieser Funktionen
werden nur durch die Komplett-Version untersttzt.

Ŀ
 Aufruf           Funktion                                              
Ĵ
 387              FRANKE.387 wird in den Standard-Zustand gesetzt.      
                  D.h. FRANKE.387 wird eingeschaltet, wenn kein         
                  Koprozessor installiert ist, bzw. ausgeschaltet,      
                  wenn ein Koprozessor gefunden wurde.                  
Ĵ
 387 ON           FRANKE.387 wird mit voller Genauigkeit eingeschaltet. 
Ĵ
 387 OFF          FRANKE.387 wird ausgeschaltet. Das kann z.B. notwendig
                  werden, wenn bei eingeschaltetem FRANKE.387 kein      
                  Warm-Start (Strg+Alt+Entf) mglich ist. Der Tastatur- 
                  Treiber KEYBOARD.386 erledigt das selbstndig.        
͵
 Die Folgenden Funktionen werden nur in der Komplett-Version untersttzt.
͵
 387 53           FRANKE.387 wird mit maximal 53 Bit Genauigkeit        
                  eingeschaltet. Das entspricht den Daten-Typen double, 
                  long real oder doppelter Genauigkeit. Das ist fr fast
                  alle Anwendungen die hchste untersttzte Genauigkeit 
                  und in diesen Fllen ausreichend. FRANKE.387 arbeitet 
                  dadurch deutlich schneller.                           
Ĵ
 387 24           FRANKE.387 wird mit maximal 24 Bit Genauigkeit        
                  eingeschaltet. Das entspricht den Daten-Typen float,  
                  real oder einfacher Genauigkeit. Das ist in vielen    
                  Fllen die tatschlich bentigte Genauigkeit.         
                  FRANKE.387 arbeitet dadurch deutlich schneller.       
Ĵ
 387 ON I         Wie 387 ON, zustzlich wird das High Level Language   
                  Interface aktiviert. (Siehe High Level Language       
                  Interface.)                                           
Ĵ
 387 53 I         Wie 387 53, zustzlich wird das High Level Language   
                  Interface aktiviert. Das ist die empfohlene Standard- 
                  Einstellung fr die Komplett-Version. (Siehe High     
                  Level Language Interface.)                            
Ĵ
 387 24 I         Wie 387 24, zustzlich wird das High Level Language   
                  Interface aktiviert. In dieser Einstellung erreicht   
                  FRANKE.387 die hchste Rechenleistung. (Siehe High    
                  Level Language Interface.)                            


Rechengeschwindigkeit

Wie jeder 387-Koprozessor kann auch FRANKE.387 in den drei Genauigkeits-
stufen mit 64, 53 bzw. 24 Bit rechnen. In der Komplett-Version kann der
Anwender die maximale Genauigkeit festlegen, um hhere Rechenleistung zu
erzielen.
Die folgende Tabelle gibt fr einige Befehle die ungefhren Taktzyklen an.
Die Angaben gelten fr 386DX-Prozessoren ohne Wait States, bei 386SX oder
Wait States sind alle Werte geringfgig hher anzusetzen.

Unter EMUL87 sind die Zeiten fr den Public Domain 80287-Emulator angegeben.
Ŀ
                                           FRANKE.387                
 Funktion  Beschreibung      387DX  64 Bit  53 Bit  24 Bit  EMUL87 
͵
 FNOP      keine Operation      25     410     410     410   1.075 
 FLD       TByte-Zahl laden     38     650     650     650   1.470 
 FSTP      TByte speichern      55     745     745     745   1.495 
Ĵ
 FADD      Addition             34     700     700     680   1.460 
 FSUB      Subtraktion          34     770     770     750   1.565 
 FMUL      Multiplikation       52     830     800     700   1.985 
 FDIV      Division             96     840     840     710   2.340 
Ĵ
 FSQRT     Quadratwurzel       126   1.295   1.060     805   3.135 
 FSIN      Sinus               490   3.960   3.770   1.960    ---  
 FCOS      Cosinus             547   4.100   3.910   2.070    ---  
 FPTAN     Tangens             342   5.845   5.400   2.995  13.530 
 FPATAN    Arcustangens        448   8.895   7.965   3.750  13.875 
 FYL2X     Logarithmus         492   8.690   7.610   3.410  12.885 
 F2XM1     Potenzfunktion      317   4.385   3.975   2.140  11.640 


High Level Language Interface

Das High Level Language Interface (HLLI) steht nur in der Komplett-Version
zur Verfgung. Das HLLI nutzt die spezielle Kodierung der Koprozessor-
Befehle, wie sie durch etliche Hochsprachen-Compiler z.B. von Microsoft
oder Borland erzeugt werden.
Durch das HLLI kann FRANKE.387 alle Anweisungen deutlich schneller aus-
fhren als ohne HLLI. In der Regel strt das HLLI keine Anwendungen. Bei
Problemen sollte es abgeschaltet werden. Es wird empfohlen, FRANKE.387 auf
maximal 53 Bit Genauigkeit mit High Level Language Interface einzustellen.
Durch diese Einstellung entstehen gewhnlich keine Nachteile bei sehr
hoher Rechenleistung.
Die folgende Tabelle zeigt den Nutzen des HLLI anhand eines Testprogramms.
Das Testprogramm fhrt jede Anweisung 100.000 mal mit gleichmig verteilten
Zufallszahlen aus. Es wurde in C geschrieben, und mit Microsoft C
(Firma Microsoft) bzw. Turbo C (Firma Borland) bersetzt.
Als Testrechner diente ein 386DX, 25MHz. Alle Zeitangabe sind in Sekunden.

ͻ
 Testprogramm mit Microsoft C bersetzt:                          
Ķ
    C-            Microsoft    FRANKE.387     FRANKE.387+HLLI 
 Funktion  387DX  Emulation  64 Bit  53 Bit  64 Bit  53 Bit 
͹
 x := y     0,27       0,27    0,27    0,27    0,27    0,27 
 x < y      0,71       8,63    9,56    9,51    8,35    8,35 
Ķ
 x + y      0,66       8,63    9,07    9,07    8,30    8,24 
 x * y      0,71      10,49    9,67    9,62    8,85    8,79 
 x / y      0,93      12,47    9,73    9,73    8,90    8,90 
Ķ
 sqrt(x)    2,75      27,58   29,56   28,74   26,32   25,44 
 sin(x)     7,14     129,67   92,86   90,11   84,62   82,42 
 cos(x)     7,14     131,32   94,51   91,21   86,26   82,97 
 tan(x)     6,04     103,30   76,92   75,82   70,88   69,23 
 atan(x)    4,95     107,69   52,20   52,20   47,25   46,70 
 exp(x)     7,14     130,77   94,00   92,31   83,52   81,87 
 log(x)     4,95     103,30   70,33   65,38   65,38   60,99 
 pow(x,y)   9,89     217,58  143,41  137,36  131,32  125,27 
ͼ

ͻ
 Testprogramm mit Borland Turbo C bersetzt:                      
Ķ
    C-            Borland      FRANKE.387     FRANKE.387+HLLI 
 Funktion  387DX  Emulation  64 Bit  53 Bit  64 Bit  53 Bit 
͹
 x := y     0,57       4,47    5,74    5,74    5,13    5,13 
 x < y      0,68       6,89    8,21    8,21    7,32    7,32 
Ķ
 x + y      0,79       8,59    9,31    9,31    8,48    8,48 
 x * y      0,90      10,74    9,91    9,80    9,08    8,98 
 x / y      1,01      11,95    9,91    9,91    9,14    9,09 
Ķ
 sqrt(x)    1,67      19,25   17,05   16,18   15,62   14,69 
 sin(x)     3,21      38,92   29,58   28,48   28,48   27,93 
 cos(x)     3,76      38,92   30,64   29,03   29,03   28,48 
 tan(x)     3,76      68,04   39,47   37,82   37,82   35,63 
 atan(x)    4,86      44,97   47,16   46,62   26,83   26,29 
 exp(x)     8,70      68,64  102,66  101,56   36,17   34,53 
 log(x)     4,86      60,90   61,45   57,05   51,01   46,62 
 pow(x,y)  15,05     149,67  190,88  184,84  107,31  101,32 
ͼ

Benchmark-Tests

FRANKE.387 wurde mit ein paar bekannten Benchmark-Programmen getestet.
Die Tabelle enthlt die entsprechenden Ergebnisse, die auf einem 386DX
mit 25MHz erziehlt wurden:
Ŀ
                        ohne      FRANKE.387       FRANKE.387 + HLLI 
 Benchmark  Ma  387DX  Kopr. 64 B. 53 B. 24 B. 64 B. 53 B. 24 B.
Ĵ
 ATPERF     MHz  52,5   ----  6,8   6,8   7,5   6,8   6,8   7,5  
 87TEST     MHz  26,91  ----  1,881 1,937 2,8   1,881 1,937 2,8  
 BENCH 5.0   s    0,33  ----  3,66  3,45  2,94  2,44  2,30  1,78 
 TEST41V     s    0,50  2,06  1,55  1,50  1,22  1,44  1,39  1,17 


Die verwendeten Benchmark-Programme:

ATPERF:    ATPERF -- PC Tech Journal AT Hardware Performance Test
           Version 2.00, Copyright (c) 1986, 1987 Ziff Communications Co.
87TEST:    87TEST Version 2.01
           Copyright (C) MicroWay, Inc. 1985-1989
BENCH 5.0: PC Magazine Labs Benchmark Series 5.0
TEST41V:   SpeedTest Version 4.1, Copyright 1990 by Duane A. Allred

387 Instruction Trace Modus

Der 387 Instruction Trace Modus ist nur mit der Komplett-Version verfg-
bar. Er erffnet vllig neue Methoden zum Debuggen. Durch den 387 Instruction
Trace Modus wird jeder ausgefhrte Koprozessor-Befehl in folgendem Format
am Bildschirm angezeigt:

  CS:IP   Code Befehl   Operand      Adresse       Inhalt

also z.B.:

2AE1:4FD3 D9EC LDLG2
2AE1:4FD6 DEC9 MULP     ST(1),ST
2AE1:4FD9 DF5E ISTP     Word         30ED:03C4     = 0000
2AE1:4FE6 DB6E LD       TByte        30ED:03BA     = 3FFF8000000000000000

Die Anzeige am Bildschirm erfolgt - natrlich nur bei eingeschaltetem
387 Instruction Trace Modus - solange Scroll Lock eingeschaltet ist.
Bei ausgeschaltetem Scroll Lock erfolgt keine Anzeige am Bildschrim,
auch wenn der 387 Instruction Trace Modus eingeschaltet ist.
Mithilfe der linken Shift-Taste und der Strg-Taste (bzw. Ctrl-Taste)
knnen die Koprozessor-Befehle auch im Einzelschritt ausgefhrt werden.
Dazu mssen der 387 Instruction Trace Modus und Scroll Lock einge-
schaltet sein. Wenn die linke Shift-Taste gedrckt ist, wartet der
387 Instruction Trace Modus nach dem Anzeigen eines Koprozessor-Befehls
so lange, bis eine Strg-Taste (Ctrl-Taste) gedrckt wird. Solange also
die linke Shift-Taste gedrckt bleibt, kann mit der Strg-Taste jeder
Koprozessor-Befehl einzeln gesteppt werden.

Der 387 Instruction Trace Modus stellt eine ntzliche Alternative zu
den herkmmlichen Debuggern dar. Zum einen ist der 387 Instruction Trace
Modus fr Anwendungs-Programme vllig transparent, zum anderen werden
ausschlielich Koprozessor-Befehle angezeigt. Dadurch knnen umfangreiche
mathematische Anwendungen problemlos getestet werden.

Ŀ
 Fr den 387 Instruction Trace Modus wird das Programm 387TRACE.EXE       
 bentigt, das der Komplett-Version beiliegt. Dieses Programm installiert 
 sich beim ersten Aufruf resident und bentigt ca. 2800 Bytes. 387TRACE   
 schaltet bei jedem Aufruf zyklisch den 387 Instruction Trace Modus ein   
 bzw. aus.                                                                


Kompatibilitt

FRANKE.387 ist ein hochwertiges Software-Produkt, das mit effizienten
Algorithmen die Mglichkeiten der 32 Bit 386-Prozessoren ausschpft.
Bis auf wenige Ausnahmen verhlt sich FRANKE.387 total identisch zum
387-Koprozessor. In diesem Abschnitt sind diese wenigen Ausnahmen
aufgefhrt:

1. Rechengenauigkeit

Der 387-Koprozessor rechnet intern stets mit 67 Bit Genauigkeit. Nur
beim Runden werden die Zahlen der gewnschten Genauigkeit entsprechend
angepat. FRANKE.387 rechnet dagegen intern nur mit 64 Bit. Dadurch
knnen geringe Rundungsfehler bei 64 Bit Genauigkeit auftreten, die in
der Praxis allerdings keine Bedeutung haben. Die Genauigkeiten
von 24 bzw. 53 Bit werden durch FRANKE.387 stets bertroffen.

2. Runden

FRANKE.387 rundet nur durch den Befehl FRNDINT bzw. beim Speichern von
Koprozessor-Registern, whrend der 387-Koprozessor nach jeder Berechnung
rundet. Dadurch wird die Rechenleistung von FRANKE.387 verbessert.
Nachteile dadurch konnten bis jetzt nicht festgestellt werden.

3. F2XM1, FYL2XP1

Beim 387-Koprozessor sind lediglich die Befehle F2XM1 und FYL2XP1 im
Argument beschrnkt. Diese Beschrnkung trifft auf FRANKE.387 nicht zu,
soda hier alle Befehle mit allen mathematisch zulssigen Argumenten
mglich sind.

4. F2X

FRANKE.387 kennt zustzlich den Befehl F2X (Kodierung D9 EF). Dieser Befehl
entspricht den Befehlen F2XM1, FLD1, FADDP allerdings ohne Verlust an
Genauigkeit.

5. FPTAN

Im Gegensatz zum 387-Koprozessor errechnet FRANKE.387 fr den Tangens von
/2 etwas genauer den Wert "unendlich".

6. Exceptions

Da FRANKE.387 eine Software-Emulation ist, wird bei Exceptions kein
Hardware-Interrupt erzeugt. Bei einer Exception erzeugt FRANKE.387 stets
einen INT 2. Dieser Interrupt kann nicht maskiert werden. Das entspricht
auch den Spezifikationen des 387-Koprozessors.
