Az EMG 666 programozható asztali számológépet az EMG a BME Folyamatszabályozási Tanszék közreműködésével fejlesztette ki az 1972–1974-es időszakban, elsőként az akkori KGST országok között.
Az EMG 666 fejlesztése és belső felépítése
Az 1970-es évek elején, az EMG (Elektronikus Mérőkészülékek Gyára, Sashalom) egy, az akkoriban újdonságnak számító programozható asztali számológép (programmable desktop calculator) fejlesztésébe kezdett, amely a műszaki/tudományos számításokon túl, a gyár által is gyártott, automatikus mérő és ellenőrző rendszerek vezérlésére és a nyert adatok feldolgozására is alkalmas. Ennek a fejlesztésnek az eredménye az EMG71666, továbbiakban EMG 666.
Az akkoriban elérhető közepes/nagy számítógépeknél a programozási, adat-előkészítési, adminisztrációs idők miatt, a kisebb volumenű számítások megoldása általában időben elhúzódott és így sokszor elveszítette aktualitását. A programozható asztali számológépnél, a fenti részfeladatokat ugyanazon személy végezhette el igen hatékonyan, ennek is köszönhették ugrásszerű elterjedésüket.
Akkoriban a hazai/KGST viszonylatban a mérés és automatizálás céljára jóformán csak a CAMAC[1] szabványosított adatgyűjtő rendszer volt elérhető, pl. a TPA 1001/PDP-8 kisszámítógéppel vezérelve. Az akkortájt a szabványosítás első fázisában lévő IEC 625 (HP-IB, IEEE-488) bájt-soros bit-párhuzamos adatátviteli bus integrálásával kialakított programozható asztali számológép alkalmasnak látszott az EMG rendszervezérlő szerepére.
A fejlesztést az EMG Irodagéplabor végezte, Vizer Jenő† (1970-72), majd Ebergényi Sándor (1972-73) végül Krizs Vladimír (1973-1983) vezetésével.
Hardver vezető tervezők: Kulin György, Vincze Iván.
A Firmware/szoftverfejlesztést a BME Folyamatszabályozási Tanszék[2] (Tanszékvezető Dr. Frigyes Andor†,Témavezető:Kőrösi István) végezte szerződéses KK munka keretében.
Célkitűzések
A fejlesztés előkészítő fázisában csak a Hewlett-Packard 9100[3] ill. WANG 700 programozható asztali számológép volt kereskedelmileg elérhető, míg a HP 9100 még tranzisztoros áramkörökből, a WANG 700 már integrált áramkörökből készült, de egyik se volt alkalmas mérésvezérlési feladatokra. Ez utóbbi került beszerzésre, elmélyíteni az asztali számológép kultúrát, valamint „reverse engineering”[4] célra, mivel akkoriban igen kevés publikus információ volt elérthető, a tényleges belső architektúrákról. Mostanában, 40-50 év távlatában, sorra fellelhetők a technikai múzeumok archívumából a WEB-en, az akkori számológépek belső struktúráját bemutató cikkek, visszaemlékezések, technikatörténeti érdekességek.[5][6][7]
A cél a WANG 700-nál szolgáltatásaiban túlmenő, az automatikus merő és ellenőrző rendszerek online vezérlésére, és a nyert adatok feldolgozására is alkalmas, azok speciális igényeit is kielégítő utasításrendszerrel és architektúrával rendelkező programozható asztali számológép volt. A gép tervezett 4x16 alfanumerikus karakteres CRT kijelzője lehetővé és szükségessé tette, az interaktív felhasználói élmény érdekében, a nem numerikus, karakteres adatok mozgatását, manipulálását. Figyelembe lett véve az utasítás és nyomógomb rendszer tervezésénél a már a kereskedelembe kapható kalkulátorok konvenciói is, kivéve a pl. a HP 9100-nál is alkalmazott RPN (Reverse Polish Notation, fordított lengyel jelölés) logikáját, amely még kézi számolásnál csak kényelmetlen, de programozásnál már zavaró.
A tervezett gép 1–8 KiB (kibibájt) RAM memóriája, amely az utasítások és az adatok közös tárolására is szolgált, megkövetelte a hatékony, de helytakarékos programozás lehetőségének biztosítását. Ehhez olyan, más akkoriban gyártott programozható számológépeknél még nem alkalmazott, funkciók is adaptálva lettek, amelyek inkább a kisszámítógépekre (PDP–8, Data General Nova, DG SuperNova, ODRA1013, ODRA1204) utasításrendszerére (pl. autoinkrementált indexelés, láncolt indirekt címzés, beépített ciklusszervezés, rugalmas hibakezelés stb.) jellemzőek, de összhangban van, a gép hagyományos programozási nyelv ismerete nélkül is programozható a “nyomógomb nyelvével”.[8]
Az akkoriban elterjedt batch üzemmódú számítógépek már nem rendelkeztek a felhasználók számára olyan funkciókkal, amely a programozó jelenlétével és aktív közreműködésével, hatékonnyá tehették a program belövését. A tervezésnél ez is igen fontos szempont volt (lépésenkénti üzemmód, utasítások javítása/ beszúrása, a fő- és adatregiszterek megfigyelése/módosítása stb.).
A gép három kitüntetett (X, Y, Z) valamint két index regiszterrel rendelkezett. A viszonylag kicsi operatív tárban, a sokrétű adatmozgató műveletek és a két akkumulátor (Y, Z), az adatregiszterekben is végezhető aritmetikai műveletek felhasználásával, bonyolult számításokat végző programok is elfértek. A jobb tárkihasználást segítette, hogy a több nyomógombbal bevitt utasítások zöme is csak 1 bájtot foglalt el, a címzett (1008) adatregiszterekre vonatkozó utasítások is csak 2 bájtban tárolódtak. A 20 (A-T betűvel jelzett), felhasználó által definiált szubrutin 1 gombbal volt hívható, és ezek akár a külső, opcionális ROM-ban is elhelyezkedhettek.
Fontos szempont volt a programok relokálhatósága,[9] ezért a vezérlésátadások kereső jellegűek vagy önrelatívak, így a programok javításuk, bővítésük után is működőképesek maradhattak. A programozható kazettás magnó, amely programokon túl, adatokat és szubrutinokat is tárolhatott, a támogató utasításokkal, szegmentált, úgynevezett „overlay programok” lehetőségét is biztosította.
A gép memóriaszervezése megfelelt a Neumann-elveknek, azaz közös az adat- és programmemória, és a bájtmanipulációs utasítások segítségével a program módosíthatja a tárban lévő programokat, lehetőséget biztosítva utilty programokra is (pl. szimbolikus program listázás, gyorsító program stb.). Ez nélkülözhetetlen volt az I/Obuszra csatlakozandó intelligens mérőrendszerek vezérlő és adat karakterfüzérek kezeléséhez is. Talán az egyik legfontosabb célkitűzés volt egy olyan univerzális I/O rendszer adaptálása, amely a hagyományos perifériákon túl alkalmas, az EMG gyár intelligens méréstechnikai termékeinek kiszolgálására is. Az EMG 666 a nemzetközi tendenciák szellemében, az 1960-s évek végén a Hewlett-Packard (HP) által kifejlesztett HP-IB[10] alapján készült, IEC-625 szabványtervezet akkori munkaverziójával[11] összhangban lévő, input-output csatornát valósította meg. Ez a buszrendszer kétirányú információátvitelt tett lehetővé kézfogásos, bájt-soros, bit-párhuzamos rendszerben, maximum 15 adó illetve vevő, 25 méteren belüli kezelésével. Az I/O utasítások, a formázott adatcserével és a prioritásos megszakítási rendszerrel együtt lehetővé tették a valós idejű adatgyűjtést. A későbbi csak 1975-ben véglegesített IEEE488 szabvány ettől különbözik, ezzel csak a később kifejlesztett EMG 666/B csatornája kompatibilis.
Hardver struktúra
Az EMG 666 vezérléséhez, nem valamilyen általános célú mikroprocesszor lett alkalmazva, mivel az 1971-73 években még igen ritka és drága, és szinte elérhetetlen volt a Varsói Szerződés országaiban, hanem egy kis-közepes integrált áramkörökből felépített, célirányú mikrovezérlő, amelyet résztelesebben is taglalunk. A fejlesztés egyik legfontosabb része, ennek funkcionális tervezése volt. Technológiai/gazdasági korlátként jelentkezett a mikroszó hossza, a mikrotár kapacitása.
A mikroprogram az akkoriban erre a célra leginkább elterjedt huzalozott (fűzött) mágnesgyűrűs, csak olvasható memóriában volt tárolva (szó szerint behuzalozva!) [12][13] Ez a technológia előrevetette a mikroprogram igen magas minőségi elvárását (gyakorlatilag hibamentes kód), mivel a fűzött ROM javítása a vevőknél igen költséges és időigényes (a huzalok kézi átfűzése) tevékenység.
Az EMG 666 operatív memóriája 1-8 KiB kapacitású, tetrád szervezésű, dinamikus RAM volt, amit periodikusan frissíteni kellett. A vezérlőegység minden 15 mikroutasítás után (a 16. helyett) frissítette a dinamikus RAM egy szegmensét. Ezt figyelembe kellett venni a külvilággal kapcsolatos műveletek időzítésének kódolásánál is. A legfontosabb következménye talán az volt, hogy ez kizárta a mikroutasítások lépésenkénti végrehajtását HW diagnosztikai és firmware (a továbbiakban csak FW) belövési[14] célból.[15] Ez igen megnehezítette a mikroprogamok tesztelését, finomhangolását, azaz a HW/FW együttműködés problémainak vizsgálatát. Még nem léteztek logikai állapot analizátorok[16] és szinte elérhetetlenek voltak a tároló oszcilloszkópok is. Ezt pótolta a mikrogép néhány száz mikroutasításból álló végtelen ciklusba tevése, amit aztán oszcilloszkóppal bitenként lehetett megfigyelni. Ehhez legtöbbször ad hoc speciális teszt makró programot is kellett készíteni. Ezért a mikroprogram ellenőrzése, belövése szimulációval (lásd lejjebb) történt.
A belső perifériák fontosabb elemei voltak a 4*16 szűkített ASCII karakter megjelentését lehetővé tevő CRT mini display és azt kiszolgáló áramkörök, a BRG [17] mechanikán alapuló kazettás egység, a 88 karakteres billentyűzet, az I/O busz vezérlő, valamint az opcionális (külső), 16 karakter széles mátrixnyomtató, amely szorosan együttműködött a CRT egységgel. Az EMG 666 a CRT, billentyűzet, kazettás magnó, tápegységen túl 7 nyomtatott áramkörű kártyából állt.[18]
A gép HW architektúrájának, a mikrovezérlő strukturáljanak tervezéséhez, igen kevés információ állt rendelkezésre, mivel az ezzel foglalkozó könyvek, cikkek főleg a tranzisztoros nagyszámítógépek horizontális mikrostruktúrájára[19] adtak csak betekintést. Ezért a korábban említett, akkoriban korszerűnek tekinthető WANG 700 programozható asztali számológép mikrorendszere került mélyebb analízisre.[20] Ez a legfontosabb áramkörök, regiszterek és azok vezérlésének megértését jelentette, valamint listázásra került bináris (oktális) formában a 2048*43 bites fűzött ROM. A mikrovezérlő visszafejtett specifikációja és a firmware lista alapján részlegesen meg lehetett érteni a WANG 700 alapvető belső működését. A mikroprogram megértése, részleges visszafejtése, a mögötte lévő algoritmusok értelmezése igen hosszú és kemény feladatnak ígérkezett, de mivel fel sem merült a bináris kompatibilitás lehetősége a különböző HW struktúra, az eltérő mikrotár kapacitása valamint az eltérő funkciók miatt, az csak részlegesen, célirányúan, kritikai szemmel lett végrehajtva.
A fejlesztés ebben a fázisában is már világos volt, hogy a 43 bites 2048 szavas WANG 700-hoz képest csak jóval komplexebb HW/FW megoldásokkal lehet „bepréselni” az EMG 666 tervezett 33%-kal kisebb, 32x2048 kapacitású mikrotárjába a megnövekedett funkciókat. Hasznos volt szoftveres szemmel is felmérni, hogy melyek azok a sokszor ismétlődő, hasonló „előkészítő” utasítások, amelyek jelentős részét foglalták el a ROM-nak. Ilyen volt pl. a felhasználó elől elrejtett memória blokk (az ún. „szolgálati memória”) kezelésekor a cím előkészítése, vagy a beépített függvények polinomiális közelítéséhez szükséges nagy mennyiségű, sok számjegyes konstans 4-bitenkénti összerakása.
A mikroarchitektúra végleges kialakításánál hasznos volt, hogy a Folyamatszabályozási Tanszék a fejlesztésben közreműködő több munkatársa jól ismerte az ODRA1204 mikroarchitektúráját.[21][22] így az ODRA1204 mikrovezérlőjének egy-két hasznosnak vélt megoldását sikerült adaptálni (ilyen pl. a következő mikrocím feltételeinek maszkolási mechanizmusa).
A mikrovezérlő, 13 darab 4 bites regisztert tartalmazott, amelyek az alkalmazott SN 74181[23] szintén 4 bites ALU hoz kapcsolódtak. Ezek láthatók a logikai tömbvázlaton. Optimalizálandó a mikroutasítás szélességét, nem mindegyik regiszter kapcsolódott az ALU bemenetére. Az S, Cqflipflopok az aritmetikai feladatokon túl I/O jelek kezelésére szolgáltak. Az ALU-hoz kapcsolódó kiegészítő logikai áramkör az eredményétől függő feltételes elágazáshoz felhasználható jeleket is generált. Szerteágazó logikai/fizikai kezelési feladatokat látott el a már említett operatív tárhoz kapcsolatos részegység, amely a gazdag címzési lehetőségeken túl, a dinamikus frissítést is támogatta. A mikrovezérlő nem rendelkezett a hagyományos mikroutasításszámlálóval, helyette egy sokrétű logikai rendszer helyettesítette azt. Minden mikroutasítás tartalmazott a következő mikroutasítás címének meghatározásához szükséges bit sorozatot (feltételes cím módosítás kódja + alapcím), amihez a 6 bites FC I és FCII regiszterek kerültek alkalmazásra.
Mikrovezérlő utasításrendszere
Itt, a teljesség igénye nélkül, vázlatosan ismertetésre kerül a mikrovezérlő utasításainak szerkezete, kiemelve azokat az innovatív megoldásokat, amelyek nélkül nem lehetett volna a 2048 szavas mikrotároló áthághatatlan korlátozása mellett a gép tervezett szolgáltatásait megvalósítani. A mikrovezérlő 2,6 µs–os ciklusidővel hajtotta végre a mikroutasításokat.
Az EMG 666 ún. vertikális vezérlési struktúrájú mikrovezérlője szerkezetileg hasonlít egy 3+1 címes gépi kódú utasításhoz, amely tartalmazta a 2 operandus, az eredmény és a következő utasítás (részleges) címét is. Itt persze az operandusok regiszterek, és ezen kívül más célú bit csoportok szolgáltak az egyéb funkciókhoz. Ennek végleges kialakításánál figyelembe lettek véve a programozható kalkulátorok egyedi sajátosságai (decimális lebegőpontos számábrázolás, kiterjedt HW közeli belső perifériakezelés, szokatlanul bonyolult funkciók stb.) de ezt a technológiai és gazdasági és kereskedelmi korlátok behatároltak.
Az alábbi táblázat illusztrálja a mikroutasítás részeit, és azok bit hosszát:
Művelet (3)
ALU-A (3)
ALU-B (3)
ALU-S (4)
Op.tárv. (4)
Konst.(4)
S+CQ (2)
Feltétel (3)
Következő címrész(6)
Művelet: +,- binárisan és decimálisan, és, vagy, mod2 logikai műveletek, különleges üzemmód
ALU-A: 7 regiszter vagy 0 kiválasztása az egyik ALU bemenetre
ALU-B: 6 regiszter vagy 0, vagy 4 bites konstans kiválasztása a másik ALU bemenetre
ALU-S: 13 regiszter vagy operatív tár kiválasztása az ALU kimenetéhez vagy speciális lehetőségek
Operatívtár-vezérlés: az ALU bemenetéhez/kimenetéhez kapcsolódó RAM címzési módja
Konstans: 4 bites konstans az ALU bemenetére vagy a RAM címzésnek része
S+Cq: Flipflop-vezérlési mód
Feltétel: a következő mikroutasítás cím generálás kódja
Következő címrész: a következő mikroutasítás cím része(alapcíme)
Az egyik legbonyolultabb logikai egység a maximum 16384 tetrád operatív RAM kezelését, címzését, azon túl esetleg a következő memória műveletet is előkészítését is támogató 4 bites „Operatív tár vezérlés” volt. A 14 bites tetrád cím általában az OC I, OC II, OC III és vagy a H1 vagy a H2 regiszterek által együtt lett generálva, ahol a H regiszterek alapvetően a 16 tetrádon reprezentált decimális számon belüli helyérték kijelölésére szolgáltak. Bizonyos „operatívtár-vezérlés” kódoknál a tárvezérlő mellékhatásként 1-gyel megnövelte valamelyik H regiszter értékét a következő számjegyhez való kényelmes eléréshez, az esetleges túlcsordulás esetén a dedikált feltételbittel lehetővé tették a mikroprogram elágazását is.
Mint ahogy már említésre került a leggyakoribb operatív tár használat az ún. szolgálati memóriához, azaz az első 256 tetrádhoz kapcsolódott. Ennek egyszerűsített (nem a három OC regiszter által kijelölt) elérése, valamint az első 16 tetrád közvetlen címzési lelhetősége több száz mikroutasítás megspórolását is jelentették.
A másik, igen hasznos, újszerű lehetőség, az akár 16 tetrád hosszúságú konstansok helytakarékos generálását biztosító, ún. „konstans bevitel”. Ezen utasításoknál nem a fent említett struktúra az érvényes, hanem az 5.-20. közti pozíción elhelyezett bitsorozat (ami általában 4 számjegyet reprezentál) kerül az előre megcímzett, 4 egymást követő memória-tetrádba.
Az EMG 666 mikroutasítások mindegyike egyben egy (feltételes) ugróutasítás, ezek utolsó 3+6 bitje, a következő utasításcím generálását szolgálta. A 2048 megcímzéséhez 11 bit szükséges, de a takarékosság érdekében a tárat 32*64 szavas lapokra lett felosztva, és az utasítások csak a lapon belüli 6-bites címet generálták, vagy ugrást egy másik lap ugyanilyen belső pozíciójára.[24] Minden egyes mikroutasítás tehát egyben feltétel nélküli vezérlésátadás vagy feltételes, akár többirányú elágazás is. A következő cím egy 3 bites kód által kiválasztott feltételbitek kombinációja és a megadott, lapon belüli alapcím logikai vagy műveletének eredménye. Így a következő cím tudatos megválasztásával (a felesleges feltétel bit helyértékén 1 a cím megfelelő bitje) maszkolhatjuk a szükségtelen feltételeket. Mivel a mikroprogram alapvetően logikai jellegű feldolgozást végez, a többszörös elágazás igen gyakori. A fenti címzési mechanizmus következményeként a mikroprogram, cím szerint, általában nem szekvenciális, olvasása (nem is beszélve a kódolásáról) nem egyszerű feladat. Ez a megoldás egyszerűsítette a HW-et, rövidítette a mikroutasítás szóhosszát, de jelentős többletmunkát okozott a mikroprogram kódolásnál, belövésnél. Az alkalmazott operatív tár kezelés, beleértve a H regiszterek autóinkrementálását, valamint a következő mikrocím kialakítási mechanizmusa, lehetővé tette az ún. önpörgő mikroutasítások (pl. 16 tetrád másolása vagy fixpontos összeadása stb.) alkalmazását, azaz egyazon mikroutasításnak a H regiszter túlcsordulásáig való ismétlését. Ezek a megoldások is jelentősen növelték a beépített firmware értékarányát.
Mikroalgoritmusok tervezése
Elsőként a gép alapműködését szervező rész a „főhurok”, lett tervezve és ellenőrizve , amely a 4, soronként 16 ASCII karakter generálását és kijelzését, a billentyűzet és a 4 kapcsoló[25] figyelését jelenti, aminek alapján vagy a programbevitel vagy annak futtatása történt (vagy esetleg a gép kézi manipulációja). Majd ezután, az egyes funkciók, al-funkciók stb. kerültek tervezésére. Ezek első lépése, a blokkdiagramok elkészítése volt. Többszintű megközelítés előzte meg a mikroutasítás szintre bontást. Ebben a fázisban figyelmen kívül lett hagyva címzés a lapszervezés problematikája, azaz a „becímzés” okozta nehézségek, csak a lehetetlen feltétel-kombinációk lettek elkerülve blokkdiagram szinten.
Ennek a fázisnak fontos része volt a felhasználó szintű utasítások kódrendszerének kialakítása, amelynél az ASCII kód is fontos szempont volt. A mikroprogram hatékonyságát igen befolyásolta az ún. „szolgálati memória” átgondolt kiosztása. Az asztali számológépeknél ugyanis nagyon kevés HW regiszter áll rendelkezésre, ezért a felhasználó által is látott X, Y, Z regisztereken túl, a belső állapotokat képviselő információkat, a részeredményeket, szubrutinszervezéshez szükséges visszatérési címeket stb. is tárolni kell, a felhasználó által hozzáférhetetlen operatív memóriarészen (a memória első 256 tetrádja).
Ugyancsak számos próba mikroprogram előzte meg legjobban illeszkedő számábrázolás kiválasztását, amely a felhasználó szempontjából indifferens. Az nem volt kétséges, hogy a mantissza BCD kódban legyen ábrázolva, de a karakterisztika mikéntje, illetve az elöljelek sorrendje már komolyan befolyásolta a mikroalgoritmusok hely/időbeli hatékonyságát. A 12 számjegyű mantissza és a 2 számjegyű karakterisztika [1,0×10−100 – 9,99999999999×10+98] tartományban tette lehetővé a számításokat, A belső, normalizált szám már [0, és 0,999999999999] közötti mantisszával, -99 és +99 közötti karakterisztikával volt ábrázolva, az utóbbi ún. 10-es komplemensben. A pontos tetrád sorrend a fizikai memória cím szerint:
· 0,1,2 pozíció a karakterisztika 10-es komplemensben
· 2. pozíció előjelszerűen csak 0 vagy 9 lehet
· 3. pozíció a mantissza előjele 0 vagy 1
· a mantissza előjeles abszolút értékben 12 jegy a 4. – 15. pozícióban (legértékesebb mantissza számjegy a 15. pozíció)
„Az 1 KiB (2048 tetrád, alap tárkiépítésű) EMG 666 memória címzése”ábrán megfigyelhető a 2.adatregiszterben a π, a 3.-ban a -1/2020 negatív, törtszám tetrádonként.
A mikroprogramozás egyik legérdekesebb része a belső perifériák (CRT display, kazettás magnó, nyomtató, IECArchiválva2020. augusztus 23-i dátummal a Wayback Machine-ben kompatibilis csatorna) programozása volt. A nehézségeket egyrészt az okozta, hogy a logikai és a fizikai kezelés vegyesen jelentkezett. A legösszetettebb rész a kazettás magnetofon kezelése volt, ahol a mechanikájának, a gyengébb minőségű, öregebb szalagok nyúlásának (ingadozó sebességű szalag), mágnes tulajdonságainak véletlenszerű romlásának stb. kezelése is cél volt. A magnó bitsoros információ-rögzítéssel működött, a stratégia a STR (Speed Tolerant Recording) pulzus szélesség moduláció, mert a BRG mechanika által is megnyújtott kazettás szalagot, így lehetett redundancia nélküli, hibatűréssel kezelni. Ezért a rendszer olvasáskor 8+1 bites bájtónként újra szinkronizálódott, és a blokk végére irt ellenőrzőösszeg is ellenőrzésre került. A sebesség így csak 60 bájt/sec volt. Általában a helytakarékosság volt az algaritmizálás fő szempontja, de a periferiális részeknél ez természetesen a sebesség maximalizálása volt a szempont.
Külön említést érdemel, a beépített standard függvények megvalósítása. Alapos irodalom tanulmányozás után, nem a számítógépeknél szokásos,(és a WANG 700-nál is alkalmazott) polinomiális alapú közelítés lett alkalmazva, az ehhez szükséges nagy-mennyiségű konstans és a szűk konvergencia sáv miatt. A II világháború alatt a haditengerészetnél, számos elektromechanikus berendezést készítettek a trigonometrikus függvények generálására, e leírások egyike utalt a Gauss munkásságára, a trigonometrikus és exponenciális függvények végtelen lánctörtekkel való közelítésre, ahol a konstansok egész számok.[26] A Villamosmérnöki Matematika Tanszék egyik munkatársával megvizsgálta az algoritmust elméleti konvergencia feltételét,majd ez alapján lett realizálva az SQRT (négyzetgyökvonás) kivételével, minden matematikai függvény, ahova így a sok számjegyű konstansokra csak a konvergencia tartományba való leképezésénél és visszatranszformálásukhoz volt szükség. Az EMG 666 mikroszintre bontott blokkdiagramja 6 db. A2-es lapot foglalt el.
Kódolás és Szimuláció
Az elvileg papíron megtervezett mikroprogram ellenőrzése,előzetes tesztelése igen fontos volt, a már korábban említett dinamikus RAM mellékhatása miatt is, ami a mikroutasítások lépésenkénti végrehajtását lehetetlenné tette a mikrovezérlőn. A roppantul bonyolult struktúrájú mikroprogram rengeteg hibalehetőséget rejtett magában, az elvi, algoritmikus hibáktól, a sok részből álló mikroutasítás kódolási figyelmetlenségekéig. A lapszervezésű, komplex feltételes ugrási cím kialakítás is számos hiba forrása lehetett.
A fentiekben említett standard függvények algoritmusainak konvergencia és pontosság szempontjából való gyakorlati ellenőrzése, nem mikroszinten történt, hanem erre a célra kidolgozott (ALGOL nyelvű) programmal az EMG 666 számábrázolásával megegyező, sőt paraméter segítségével akár még több számjegy kezelésére is képes virtuális aritmetikával. Ezzel lett ellenőrizve az iterációs lépések száma és a konvergencia tartományok gyakorlati ellenőrzése, illetve így lettek generálva a 12 jegyű pontossághoz szükséges konstansok, mivel ezek gyakran nem álltak ilyen pontossággal rendelkezésre.
A szimulációk a BME ODRA1204-es számítógépein történtek, a szimulátorok és a kiegészítő programok a gép assembly nyelvén JAS-ban[27][28] készültek. A szimuláció két lépésben történt, az elvi, algoritmikus, durva kódolási hibák felderítésére egy fiktív gép került definiálásra és implementálásra, amely a következő cím kialakításától eltekintve megegyezett az eredeti mikrovezérlővel. A következő cím(ek) nem numerikusan, hanem szimbolikus formában voltak megadva, az esetleges feltételes elágazások szerint, míg a mikroszó más részei oktálisan voltak kódolva. Így lapmérettől függetlenül, és „következő utasítás címgenerálás mentesen” volt lehetséges a mikroprogram dinamikus ellenőrzése, belövése. Az ODRA1204 nem rendelkezett displayjel így a szimulációkat nagyrészt batch szerű üzemmódban, kisebb részt a konzol írógép és a 24 nyomógombos kezelőpult gombjaival vezérelve kellett elvégezni.
Ennek a szimulációs fázisnak az előkészítését egy speciális szimbolikus mikrotranszlátor a SYTR[29] végezte, amely jól olvasható utasításlistát generált, ezen kívül számos egyéb táblázatot, keresztreferenciát is készített, amely a cím független belövésen túl az ezt követő becímzési fázist is segítette.
A mikroprogram algoritmusainak ellenőrzése alapvetően a SYSI szimbolikus szimulátoron[30] történt, ami nemcsak az mikrovezérlő aritmetikai, logikai funkcióit valósította meg, hanem lehetővé tette a belső perifériakezelő részek tesztelését is. Ezért az aszinkron külvilág valós környezetét is (pl. a dinamikus RAM frissítése, a CRT display visszafutási ideje stb.) figyelembe vevő környezetet támogatott. Igen komoly elvi és programozástechnikai feladat volt a kazettás magnó kezelés szimulációjának realizálása, ami a fizikai rögzítés és a fölette létrehozott logikai I/O kezelés ellenőrzése is volt. A teljesség igénye nélkül a SYSI legfontosabb szolgáltatásai: szimbolikus követés, címkövetés, cím szerinti megállás, retroaktív követés,[31] ellenőrzött részek követésének szűrése, a szolgálati memória listázása, a virtuális magnó szalag kijelzése/módosítása, a I/O handshake jelfolyamatok listázása/programozása volt.
A virtuális gépen már ellenőrzött mikroprogram utasításait ezután, a lapokra bontott ROM memóriába való fizikai címekhez kellett hozzárendelni (becímzés). Az utasítás fizikai címének meghatározása azt jelenti, hogy az összes erre mutató mikroutasítás feltételes elágazásainak alapcíme és feltételkód által generált biteklogikai vagy műveletének eredménye ez a cím legyen, maszkolva a felesleges feltételbiteket, és természetesen a feltételek nem teljesülése egy másik azokkal kongruens címekre mutassanak. Ezt segítették a SYTR által készített kiegészítő táblázatok, azaz először a kritikus, sok feltételes ugrás célutasításainak címét volt célszerű véglegesíteni, majd a kevésbé kritikus utasításokkal a fennmaradó helyek hozzárendelését elvégezni. A becímzés sok heurisztikus elemet tartalmazó, nagy figyelmet igénylő, kényes programozási tevékenységnek bizonyult. Az így kodifikált bináris (oktális csoportokkal leírt) mikrotárat ismét szimulációval ellenőrizni kellett, mivel a becímzési hibák hatásukban algoritmus hibaként manifesztálódtak volna.
Ezt szolgálta az EMG 666 mikrovezérlőjét binárisan szimuláló MISI[32] program, amely hasonló szolgáltatásokkal rendelkezett, mint az előbbiekben már részletezett SYSI. Az oktálisan leírt mikroprogramot a mikrotranszlátor (MTRL)[33] készítette elő a MISI számára, amely megjegyzések és címkék (a blokkdiagram bizonyos pontjainak azonosítása) használatát is támogatta, ami a szervizeléshez, de nem utolsósorban a MISI használata során hasznosnak bizonyult.
Megemlítendő még a FUZ „Fűző program”,[34], amely az EMG 666 mikrotárat készítő speciális fűzőgép vezérlő lyukszalagjának előállítására szolgált, ezt a kísérleti ROM fűzésén túl a sorozatgyártásban is alkalmazták
A szimulációs szoftverek fejlesztésénél figyelembe lettek véve az ODRA1204 szűkös erőforrásai jelentette korlátai (az ODRA1204 csak 48KiB 16384 szó operatív memóriával, és csak 768 KiB periferiális dob memóriával (< 1 MiB, azaz kisebb, mint 3,5" hajlékonylemez 1,4 MiB kapacitása!) rendelkezett. Az assemblyben fejlesztett szimulátor ezért fejlett overlay technikát, és a táblázatok kezelésénél, valamint a külvilág (pl. magnó) fizikai szimulációját reprezentáló bitsorozatok tárolásánál HW támogatás nélküli, dedikált, igény szerinti laptechnikát alkalmazott. Ezek a programok együttesen több mint 15000 sornyi assembly (JAS) program fejlesztését tették szükségessé, ehhez jön még a lánctörtes algoritmusok ellenőrzéséhez készített az ALGOL nyelvű decimális aritmetikai csomag.
A teljes (2048*32 bites mikroutasítás) mikrotár több lépésben került kifejlesztésre, a HW felélesztéshez nélkülözhetetlen mini-alapverziótól, a már összes függvényt is tartalmazó, végleges verzióig. A szimuláció eredményeképpen, az egyes részleges funkciókat tartalmazó, majd a végleges tár alig tartalmazott hibákat (< 2%), amiket csak a tényleges intenzív EMG 666 hardveren futtattatott tesztek mutattattak ki, és ezután kerültek javításra. Megemlítendő, hogy az egyik legkritikusabbnak vélt kazettás magnó kezelés, már az első kísérletre csaknem hibátlanul működött, az alapos szimuláció után.
A fejlesztés vége előtt a Folyamatszabályozási Tanszéken, már megkezdődött az alap programkönyvtár[35] fejlesztése, amely néhány kiszolgáló programon túl a legfontosabb matematikai eljárásokat tartalmazta. A fejlesztés végső fázisában már elkezdődött a felhasználói dokumentációk[36][37] szerkesztése.
Az EMG 666/B fejlesztése
Néhány évvel később 1978-ban, az EMG 666 kereskedelmi sikerét követően, az integrált áramkörök, de elsősorban a mikroprocesszoros technológia elterjedése következményeként bekövetkezett RAM és ROM árzuhanása után, elkészült az EMG 666/B amely az EMG 666 továbbfejlesztett változata, amely 100%-ban azzal szoftverkompatibilis. Már korszerűbb, nagyobb integráltságú/sebességű alkatrészeket tartalmazott, mint elődje. A kibővített firmware 4096×32 bites EPROM-okban helyezkedett el, amely igen megkönnyítette a gyártást. A gép csaknem kétszer gyorsabb lett elődjénél, és az egyik újdonsága a korszerűbb mechanikájú, 4-szeres sebességű, kazettás mágnesszalagos tároló volt, amely azonban kompatibilis maradt az EMG 666 korábbi kazettáival. Az EMG 666/B már 2 független I/O csatornával rendelkezett. Egyrészt továbbra is használhatók maradtak az EMG 666 egyedi csatornarendszeréhez kifejlesztett, és már forgalomban lévő berendezések, másrészt rendelkezett egy új, az IEEE-488[38] (IEC-625)[39] szabványokban definiált hardver/szoftver szempontból 100%-osan kompatibilis csatornával is, amely így lehetőséget biztosított a Hewlett-Packard, Philips, Tektronix[40] stb. mérőberendezések csatlakozására is. Ehhez természetesen a kiterjesztett hardvert figyelembe vevő módosított SYSI, MISI, MTRL, SYTR szoftverre volt szükség, és a FUZ programot az EPROM programozásához szükséges lyukszalag generátor helyettesítette.
Villamosmérnök hallgatók a gép fejlesztésében
A FW/SW fejlesztésben, beleértve a gép, gépkönyv és az alapkönyvtár fejlesztését, a Folyamatszabályozási Tanszék kutatói, oktatói vezetésével több mint tíz, az ODRA1013 illetve ODRA1204 gépi kódú programozásán „nevelkedett” villamosmérnök hallgató is részt vett, közvetlen gyakorlati tapasztalatokat szerezve, egy akkoriban európai szinten is korszerűnek mondható rendszer fejlesztésében.
Források
↑Géher-katalógus: Dr. Géher Károly: Számítógépprogramok katalógusa, 1975.Híradástechnika, XXVII. évf. 6. sz. (1976. június 1.) 182–186. o. Hozzáférés: 2024. április 20.
Kőrösi I., Nagy P., Várhely F.: Az EMG 666 kalkulátor mikroprogramtárjának tervezése és szimulálása. Számítógéptechnika'74, Esztergom, 103–113. oldal
Körösi: Main Aspects of the Design of Programmable Calculators Oriented to On-line Applications. Periodica Politechnica. Vol. 200, No. 3. 1976, pp 355–336
Kulin György: Az EMG 666 típusú programozható számológép jellemzői és alkalmazási lehetőségei. Mérés és Automatika 23. évf. (1975), 7.sz. 256-260 oldal
Boglár Gyula: EMG 71666 Híradástechnika 1974/5.
NELSON, Gerald E.-RICCI, David W.: Practical Interface System for Electronic Instruments. HP Journal, 1972, October
Hewlett Packard:Tutorial Description of the Hewlett-Packard Interface Bus
Chu, Yaohan: Digitális számítógépek tervezésének alapjai, Műszaki Könyvkiadó, 1966
Husson, S.S. (1970): Microprogramming Principles and Practices. Prentice-Hall.Reverse Polish Notation
Kápolnai András – Kőrösi István: Az ODRA-1204 funkcionális leírása és programozása a JAS szimbolikus programnyelven. Egyetemi jegyzet, Budapest, Tankönyvkiadó, 1972, 138 old.
Elwro: Description Of Logical Structure Of Digital Computer ODRA1204
EMG-666 Programozási útmutató . Szerk. Kőrösi I., 1975
↑Ez egyrészt a HW hibakereséshez, másrészt az igen gazdag utasításrendszer pontos leírásához is szükséges volt; ez utóbbi precízen csak lengyelül volt elérhető
↑ (2020. május 26.) „74181” (angol nyelven). Wikipedia.
↑Így elvileg akár 64 lap megcímzése is lehetséges (de ez csak a továbbfejlesztett készüléknél, az EMG 666/B-nál ki is lett használva
↑JAS (Jezyk Adresów Symbolicznych, szimbolikus címzések nyelve) egy assembler az ODRA 1204 számítógépre
↑Kápolnai András - Kőrösi István: Az ODRA-1204 funkcionális leírása és programozása a JAS szimbolikus programnyelven. Egyetemi jegyzet, Budapest, Tankönyvkiadó, 1972, 138 old
↑Géher-katalógus – SYTR Symbolic Translator. Kőrösi I., Nagy P., Várhelyi F., BME Folyamatszabályozási Tsz.
↑Géher-katalógus – SYSI Symbolic Simulator. Kőrösi I., Nagy P., Várhelyi F., BME Folyamatszabályozási Tsz.
↑Retroaktív követés, egy olyan szolgáltatás, amely lehetővé tette, hogy a szimulátor egy „töréspont listában” megadott (pl. hibajelzések stb.) címre érve kinyomtatta az utolsó végrehajtott 20 mikroutasítást a regiszterek tartalmával kiegészítve
↑Géher-katalógus – MISI Mikroprogram Simulation. Kőrösi I., Nagy P., Várhelyi F., BME Folyamatszabályozási Tsz.
↑Géher-katalógus – MTRL Mikro Translator. Kőrösi I., Nagy P., Várhelyi F., BME Folyamatszabályozási Tsz.