alt=|bélyegkép|440x440px|EMG 666/B a Neumann János Számítógéptudományi Társaság Informatika Történeti Kiállításan, fedél nélkül.
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 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ékI IT Irányítástechnika és Informatika Tanszék (korábban Folyamatszabályozási Tanszék) (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 9100HP-9100B modell az Informatika Történeti Kiállítás oldalán 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” 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.
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”.Nyomógomb nyelven való programozás: Keystroke programming
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,Áthelyezhető program, amely a betöltési címétől függetlenül működőképes marad. 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. alt=|bélyegkép|486x486px|1 KiB (2048 tetrád, alap tárkiépítésű) EMG 666 memória címzése 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/O buszra 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 alapján készült, IEC-625 szabványtervezet akkori munkaverziójávalHP-IB Tutorial - March 72 — U.S. Advisory Committee (IEC) formed. The committee takes HP proposal as starting point ö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. alt=|balra|bélyegkép|175x175px|Az Apollo–11 fedélzeti számítógépében használt fűzött ROM, (az 50 éves jubileumi kiállításon Cambridge, Massachusetts alt=EMG 666 Fűzött ROM Kártya|keret|bélyegkép|516x516px|EMG 666 fűzött ROM-kártya 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!) [A később elterjedt PROM, EPROM, EEPROM még elérhetetlen volt a fenti időszakban, de az EMG 666/B már ilyen EPROM-kat tartalmazott 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 célból.Az EMG 666/B már statikus RAM-ot tartalmazott ami lehetővé tette a mikrogép lépesenkénti vizsgálatát. 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 é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 megjelenítését lehetővé tevő CRT mini display és azt kiszolgáló áramkörök, a BRG 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.Az EMG 666 kártyái: Basic Memory, Arithmetic Unit, Fix Memory Control, Input-Output, Op. Memory Control, Fix Memory, Memory Extension
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áraDifference between Horizontal and Vertical micro-programmed Control Unit 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. 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.