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 |