K1810WM87
# K1810WM87

Der K1810WM87 (russisch К1810ВМ87) ist ein sowjetischer Nachbau des numerischen Koprozessors Intel 8087. Er ist Teil des K1810-Systems und wurde beispielsweise im ESER-PC EC 1834 verwendet.

## Datentypen

Der K1810WM87 unterstützt insgesamt 7 verschiedene Datentypen:

* 16-Bit-Short Integer
* 32-Bit-Word-Integer
* 64-Bit-Long-Integer
* 80-Bit-BCD
* 32-Bit-Short Real
* 64-Bit-Long-Real
* 80-Bit-Temporary-Real

In den Registern wird immer das Temporary-Real-Format verwendet. Alle anderen Formate werden nur bei Load- und Store-Befehlen verwendet.

## Register

Der K1810WM87 besitzt folgende Register:

* 8 Gleitkommaregister, als Stapel organisiert, jedes 80 Bit breit
* 1 16-Bit-Steuerwort
* 1 16-Bit-Statuswort
* 1 16-Bit-TAG-Wort
* 1 Instruktionszeiger
* 1 Operandenzeiger

Stapelregister werden in der Form ST(i), i = 0…7, angegeben. Der Index i zeigt auf das i-te Register nach der Stapelspitze. Die Register ST und ST(0) sind die gleichen.

## Programmierung

Als Operanden können Speicherdaten, Stapelregister, Status- und Steuerregister verwendet. Für die Adressierung des Speichers ist der Host-Prozessor (K1810WM86) zuständig. Somit können alle Adressierungsarten der CPU verwendet werden.

Neben normierten Zahlen (Normals) gibt es folgende, spezielle, Werte:

* Null (0)
* Denormierte Zahlen (Denormals)
* Unnormale Zahlen (Unnormals)
* Unendlich (Infinity)
* Indefinit-Kode
* NaN (Not-A-Number)

Für die Synchronisierung zwischen Host- und Koprozessor kann der WAIT-Befehl verwendet werden.

## Initialisierung

Der K1810WM87 kann entweder durch ein RESET-Signal oder durch ein externes Programm initialisiert werden. Nach der Initialisierung besitzt der K1810WM87 folgenden Zustände:

* Steuerwort: Im Steuerwort wird das projektive Modell, Runden zum nächsten Wert, 64 signifikante Stellen, Interrupts verboten und Exceptions maskiert ausgewählt.
* Statuswort: Im Steuerwort wird das BUSY-Flag auf 0, der Ergebniskode auf undefiniert, der Stapelzeiger auf 0 (Stapel leer), das Interruptflag auf 0 (kein Interrupt) und das Exception-Flag auf 0 (keine Exceptions) gesetzt.
* TAG-Wort: Jedes der Tags wird auf den Wert 3 (Register frei) gestellt.

## Befehlssatz

Der Befehlssatz lässt sich folgendermaßen unterteilen:

* Datentransferbefehle
* Arithmetikbefehle
* Vergleichsbefehle
* Transzendente Befehle
* Befehle zum Laden von Konstanten
* Befehle zur Prozessorsteuerung
