Kooprocesszort az ENTERPRISE-ba!

 

Mint mindannyian tudjuk, az ENTERPRISE mindent elsöprően 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 processzora (Intel 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óbanforgó 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*1020 ... 9.2*1018 ) é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ő:

- Beírjuk az adatokat az adatregiszterekbe,

- beírjuk az elvégezni kívánt művelet kódját (pl. sin(x)-re 02h) a parancsregiszterbe,

- megvárjuk, amíg az APU elkészül,

- kiolvassuk a művelet eredményét az adatregiszterekből. (A királyi többes itt az általunk, vagy más által (bár az nem olyan jó) írt programot jelenti, amelyet természetesen a főprocesszor, azaz a Z80 hajt végre.)

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.

U5C 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. (Angol nyelvű AM9511A/9512 dokumentáció)

 

Mészáros Gyula

 

Enterpress III. évfolyam 4. szám 1992 július-augusztus