>Was ist FPU_FIX.PRG ?
>---------------------
>FPU_FIX ist ein Patchprogramm fr die TOS-Versionen 3.0x (TT-Tos).
>In diesen TT TOS Versionen befindet sich in der Resetroutine ein Fehler,
>der sich bei einem Reset ber Tastatur bemerkbar macht (Warmstart).
>TOS versucht in der Resetroutine festzustellen ob ein Mathecoprozessor
>im Rechner eingebaut ist. Dazu testet es, ob die Ausfhrung eines
>Coprozessorbefehls gelingt. Leider ist der dazu gewhlte Befehl die
>Wandlung einer im FP0 Register gespeicherten Fliekommazahl in eine
>Integerzahl. Wenn in dem FPU-Register eine Zahl steht, die nicht mehr
>in eine 32-Bit Integerzahl konvertiert werden kann (TOS beschreibt
>das Register nie; es enthlt also einen zuflligen Wert), lst der
>Coprozessor eine Operand Error Exeption aus, die TOS nicht abfngt.
>Dies hat zur Folge, da sich die Resetroutine aufhngt, und nur noch
>der Griff zum Resettaster den Rechner 'aufweckt'. Es handelt sich bei
>dem Befehl um ein 'FMOVE.L  FP0,D0', der den Inhalt des Registers FP0
>zuerst in eine Integerzahl konvertiert, und dann in das Register D0
>bertrgt.
>Es folgt ein Disassemblerlisting, erstellt mit TempleMon und TOS 3.05.
>Bei TOS 3.01 ist die Routine 2 Bytes vorher im ROM, also ab $E0040E.
>
>
>!,00E00410 MOVE.L  #$5F465055,(A0)+     20FC 5F46 5055      ;(#'_FPU')
>!,00E00416 MOVE.L  $002C,A1             2278 002C           ;Line-F Emulator
>;Vektor sichern
>!,00E0041A MOVE.L  $0034,A2             2478 0034           ;Coprocessor
>;Protocol
>;Exeption-Vektor
>;sichern
>!,00E0041E MOVE.L  A7,A3                264F                ;Stapelpointer
>;sichern
>!,00E00420 MOVE.L  #$00E0043C,$002C     21FC 00E0 043C 002C ;neue Line-F
>;Emulator Routine
>;wird
>;angesprungen,
>;wenn keine FPU
>;vorhanden
>!,00E00428 MOVE.L  #$00E0043C,$0034     21FC 00E0 043C 0034 ;neue Coprocessor
>;Protocol
>;Exeption Routine
>;wird
>;angesprungen
>;wenn Interface
>;FPU-CPU defekt
>!,00E00430 FMOVE.L FP0,D0               F200 6000           ;Der Testbefehl,
>^^^^^^                                   ;ob FPU vorhanden
>;ist (fehlerhaft!)
>!,00E00434 MOVE.L  #$00020000,(A0)+     20FC 0002 0000      ;Kennung fr
>;68882 FPU in
>;CookieJar
>;eintragen
>!,00E0043A BRA     $E0043E              6002                ;weiter gehts
>!,00E0043C CLR.L   (A0)+                4298                ;keine FPU,
>;hierher springen
>;die neuen
>;Exeptionroutinen
>!,00E0043E MOVE.L  A1,$002C             21C9 002C           ;Exeptions
>!,00E00442 MOVE.L  A2,$0034             21CA 0034           ;restaurieren
>!,00E00446 MOVE.L  A3,A7                2E4B                ;SP restaurieren
>
>Wie kann dieser Fehler behoben werden?
>--------------------------------------
>FPU_FIX sorgt dafr, da bevor die Resetroutine des TOS an die kritische
>Stelle kommt in alle Coprozessorregister 0 geschrieben wird, und die FPU in
>einen definierten Zustand gebracht wird.
>FPU_FIX wird einfach in des AUTO-Ordner kopiert und meldet sich beim Start
>mit der Meldung:
>FPU_FIX V1.2 installiert
> 1991 by Stefan Wolf.
>Wenn FPU_FIX auf einem ST oder auf einem TT ohne FPU (da gibt's nix zu fixen)
>gestartet wird, wird eine Fehlermeldung ausgegeben und FPU_FIX nicht
>installiert.
>FPU_FIX hngt sich in den Resetvektor mit der XBRA-Kennung FFix ein.
>
>Eine zweite Mglichkeit den Fehler zu beheben
>---------------------------------------------
>Wer ber ein EPROM-Programmiergert verfgt, kann das TOS im Rom so zu
>patchen, das es einen anderen Coprozessorbefehl zum Testen nimmt.
>Es bietet sich an ein FMOVE.L D0,FP0 (also gerade Ziel und Quelle zu tauschen)
>zu verwenden. Hier kann niemals die Operand  Error Exeption auftreten, weil
>eine Integerzahl immer in eine Fliesskommazahl konvertierbar ist.
>!,00E00430 FMOVE.L D0,FP0               F200 4000      ; korrigierter Befehl
>^^^^^^                    ^^
>Die beiden Befehle unterscheiden sich zudem in nur einem Bit, das sich
>durch Nachprogrammieren eines TOS-Eproms ndern lt.
>Die nderung ist durch berbrennen mglich, da bei TOS 3.05 im Eprom EO
>(EvenOdd) das Byte an der Adresse $10C von $60 auf $40 gendert
>werden kann. Beim TOS 3.01 ist es das Eprom EE (EvenEven), bei dem das
>Byte an Adresse $10C von $60 auf $40 gendert werden mu.
>
>Autoren
>Johannes Hill (Fehlerursache und Disassemblerlisting)
>Stefan Wolf   (Patchprogramm und Readme)
