# Motorola 68881

Le Motorola 68881 est un coprocesseur mathématique destiné à travailler en complément à la famille de microprocesseurs m68k de Motorola.
Le Motorola 68882 est une version améliorée du 68881, mais tout à fait compatible pour le reste.

## Utilisation

Les 68881 et 68882 ont été utilisés comme coprocesseurs optionnels dans beaucoup de modèles d'Atari, d'Amiga, de Macintosh.

## Formats de nombre

Le Motorola 68881 connaît quatre formats de nombre :
Précision étendue, sur 12 octets :
| 95 | signe |
| 94-80 | exposant |
| 79-64 | toujours à zéro |
| 63-0 | mantisse |
Précision double (IEEE), sur 8 octets :
| 63 | signe |
| 62-52 | exposant |
| 51-0 | mantisse |
Précision simple (IEEE), sur 4 octets :
| 31 | signe |
| 30-23 | exposant |
| 22-0 | mantisse |
Précision packed, sur 12 octets :
| 95 | signe de la mantisse |
| 94 | signe de l'exposant |
| 93-92 | 00, ou NAN ou infini si 11 |
| 91-80 | les trois chiffres décimaux les moins significatifs de l'exposant |
| 79-76 | le chiffre décimal le plus significatif de l'exposant mantisse |
| 75-68 | pas tenu en compte |
| 67-64 | le chiffre le plus significatif de la mantisse |
| 63-0 | mantisse |

## Registres de données et de contrôle

Ses 8 registres de données (de FP0 à FP7) ont une largeur de 10 octets (80 bits), bien que la taille d'un réel de précision étendue puisse s'étendre sur 12 octets.
Il possède en outre 3 registres de contrôle :
FPCR (Floating Point Control Register), 32 bits dont seuls les premiers sont utilisés :
| 3-0 | ? | zéro |
| 5-4 | ROUND | méthode d'arrondissement |
| | | 00 : au plus proche |
| | | 01 : zéro |
| | | 10 : moins l'infini |
| | | 11 : plus l'infini |
| 7-6 | PREC | précision de l'arrondissement |
| | | 00 : étendu |
| | | 01 : simple |
| | | 10 : double |
| | | 11 : réservé |
| 8 | INEX1 | sortie décimale inexacte |
| 9 | INEX2 | opération inexacte |
| 10 | DZ | division par zéro |
| 11 | UNFL | underflow |
| 12 | OVFL | overflow |
| 13 | OPERR | erreur d'opérande |
| 14 | SNAN | signal Not-A-Number |
| 15 | BSUN | Branch/Set in UNorderd |
FPSR (Floating Point Status Register), 32 bits divisé en 4 octets :
| 7-0 | exception accrue |
| 2-0 | toujours à zéro |
| 3 | INEX!INEX2!OVFL |
| 4 | DZ |
| 5 | UNFL & INEX2 |
| 6 | OVFL |
| 7 | BSUN!SNAN!OPERR |
| 15-8 | statut des exceptions |
| 8 | INEX1 : sortie décimale inexacte |
| 9 | INEX2 : opération inexacte |
| 10 | DZ : division par zéro |
| 11 | UNFL : underflow |
| 12 | OVFL : overflow |
| 13 | OPERR : erreur d'opérande |
| 14 | SNAN : signal Not-A-Number |
| 15 | BSUN : Branch/Set in UNorderd |
| 23 | signe d'un quotient |
| 22-17 | quotient |
| 24 | NAN : Not A Number |
| 25 | I : infini |
| 26 | Z : zéro |
| 27 | N : négatif |
| 31-28 | zéro |
FPIAR (Floating Point Instruction Address Register) est le registre d'adresse de l'instruction en cours.

## Puissance
### 68881

* 155000 transistors
* La version 16 MHz procure 160 KFLOPS
* La version 20 MHz procure 192 KFLOPS
* La version 25 MHz procure 240 KFLOPS

### 68882

* 176000 transistors
* La version 25 MHz procure 360 KFLOPS
* La version 33 MHz procure 475 KFLOPS
* La version 40 MHz procure 576 KFLOPS
* La version 50 MHz procure 720 KFLOPS