Kooprocesszort az -ba!

Mint mindannyian tudjuk az ENTERPRISE mindent elsöprőn kitűnő számítógép. Van azonban néhány, magáról megfeledkezett géptársunk (Mandelbrot-ábrákat szeretnek kirajzolni), akik azt a kijelentést engedik meg maguknak, hogy az EP lassú! Ami, ha magunkba nézünk igaz.
A gondok enyhítésére (megoldásról aligha beszélhetünk, mert nincs gyors gép, csak keveset tud a program) Ari Sándor műhelyében született egy koprocesszor-kártya, amelynek a buszkiterjesztő egységhez átigazított változatát ismertetem az alábbiakban.
A kártya "szíve" az Advanced Micro Devices AM9511 aritmetikai processzori (Intet megfelelője a 8231A). Ez egy olyan speciális áramkör, amely csak bizonyos számolási műveleteket (pl. gyökvonás, szögfüggvények számítása) képes elvégezni, azokat azonban sokkal gyorsabban, mint az általános célú mikroprocesszorok.
A szótanforgó aritmetikai processzor (APU) háromféle: 16 bites fixpontos, 32 bites fixpontos, és 32 bites lebegőpontos számmal dolgozhat. Az ábrázolható lebegőpontos számtartomány a +/-(2.7*10^20 ...9.2*10^18 ) és persze a 0.
Az adatregiszterek veremszervezésűek (stack). Egyetlen bejáratuk van, amelyből az utoljára beírt adat olvasható ki először. A verem mérete 16 bájt, nyolc 16 bites, vagy négy 32 bites szám fér bele, amelyeken a FORTH nyelvhez hasonló módon végezhetünk műveleteket.
Az APU működési módja a következő:

Lássuk a kártyát! Az APU (U1) adatbuszát U3 illeszti a Z80 adatbuszához. U2 választja ki a megfelelő I/O címeket. Itt is kis ráhagyással dolgoztam (az APU 4 címen látszik egyszerre), de ezáltal az áramkör egyetlen IC-re redukálódott. 50h az adatport címe, 51h pedig a parancsporté. U4 két része állítja elő a kétféle órajelet az AM9511DC (2 MHz), vagy az AM9511-4DC (4 MHz) számára, amelyek közül a JP1-gyel választhatjuk ki a megfelelőt.
USC a reset jelet állítja elő az APU számára. U5A és U5B köti össze az APU READY kimenetét a Z80 -WAIT bemenetével. Ezzel a megoldással az APU "megállítja" a Z80-at a számítások időtartamára, így nem kell a programból figyelni státuszbitek nézegetésével, hogy elkészült-é már pl. a gyökvonás. Ha azonban még haladóbbak vagyunk, megtehetjük, hogy párhuzamos működésre vesszük rá a két processzort, és amíg az APU számol, a Z80 pl. képernyőt rajzol. Ehhez JP2-t bontanunk kell (valamint rengeteget és nagyon ügyesen programoznunk!). Ilyenkor az ún. állapotszó - amelyet a parancsport olvasásával kaphatunk meg - 7. bitje mutatja, ha az APU még dolgozik. (A fiam bejön a szobámba, megnézi a 7. bitemet, és máris látja, hogy dolgozom-e, avagy sem.)
A végére maradt a tápfeszültségeket előállító áramkör. Az AM9511 élemedett kora azon is látszik, hogy szerencsétlen a +5 volt mellett még + 12 voltot is óhajt a működéséhez. Na, ezt állítja elő a bal alsó sarokban látható T1-T4, D1-D4, U7 komplexum. U6 pedig a már megszokott 5 voltos stabilizátor, némi hidegítő kondenzátorral ellátva.
Most már majdnem mindent tudunk, csak az furdalhatja a tisztelt olvasó oldalát, hogy vajh mennyivel lesz gyorsabb a gépe, ha beszerez egy ilyen kártyát? Ari Sándor összeállított egy táblázatot néhány egyoperandusos lebegőpontos műveletre. A számok 10000 művelet idejét jelentik másodpercben.

Művelet APU BASIC APU/BASIC
SIN 24 592 24
COS 24 842 35
TG 31 1704 54
SQRT 7 1569 224 (!)
ASIN 39 2600 66
ATAN 32 860 27
LOG 28 1390 49
EXP 28 930 33


Az átlag 64-szeres sebességszorzó (az APU javára).
Végül, akit bővebben érdekel az APU programozása, az Intel Component Data Catalog 1982 című kiadványból tájékozódhat, a 8231A címszó alatt.

Enterpress 1992/4. - Mészáros Gyula