A tc29Z - az első és egyetlen

A Kandóra* jártam. Soha nem tudtam meg, miért vettek fel. Matekból és fizikából is négyesre* érettségiztem. (Ez azért egy matematika/fizika tagozatos gimnáziumban nem volt olyan rossz, de pl. műegyetemi felvételihez biztosan kevés lett volna.) A miskolci Egyetemvárosban többszáz sorstársammal egyidejűleg írt nagy közös felvételim nem sikerült túl jól - úgy éreztem legalábbis, ugyanis az eredményt sohasem tudtam meg. A pesti szóbeli felvételin valami jelentéktelen feladatot kaptam, nem emlékszem rá, a válaszomra sem. Az nem lehetett a felvételhez mérvadó. A KISZ-megbízott szocio-alapú elbeszélgetése ugyancsak nem. A felvételi pontszámaimat sohasem tudtam meg. Mindenkin csodálkoztam, hogy tudja, meg a küszöbszámokat is tudja, és nagyokat beszélgetnek erről. Én csak azt tudtam, hogy a Kandóra beadtam a felvételi kérelmemet, majd értesítettek, hogy felvettek.

Elsősorban a hangerősítők, kisebb mértékben a rádiózás, érdeklődés-szinten a digitális áramkörök foglalkoztattak. Ha jól emlékszem, egy félévet tanultunk számítógépeket, programnyelveket. Írtam is egy pársoros Fortran programot, talán ellenállások eredőjét számolta volna ki, ha valaha is futott volna. Nem is nagyon érdekelt: sem a számítógép, sem a programozás. (Pedig Vödrös Péterrel, "számítógépes" iskolatársammal laktam közös albérletben - akár be is "olthatott" volna.) A suli után pár hónap meló a HIKI-ben* Budapesten, majd 21* hónap sereg, többnyire Szolnokon, "szabadulás" után pedig hazaköltöztem Miskolcra, ahol a Medicor frissen épített gyára mellé frissen alakult, és gyakorlatilag az utcáról toborzott fejlesztői gárdája oszlopos tagja lettem (1976-ban).

A Kandóban kényszerűségből (hely híján) az utolsó szakirányú évet az addigi érdeklődésemtől legtávolabb álló mikrohullámú ágazaton töltöttem. Később rájöttem: szakmailag így jártam jobban, mert sok olyat tanultam, amit magamtól nem tettem volna meg. Ami pedig érdekelt, azt később könyvekből úgyis könnyedén összeszedtem. A Medicorba kerülve 10 GHz-ről hirtelen 1 Hz-re kellett váltanom, de maradtam az analóg áramköröknél, egy kis digitális technikát is "hozzákeverve". A termék, amelynek a gyártására a miskolci üzemet létrehozták, még a Medicor budapesti fejlesztésén készült, tulajdonképpen egy összetett, többfunkciós, diagnosztikai értékű paramétereket mérő orvosi műszer, a KTD* volt. Egyik mérőcsatornája sem volt vadonatúj, legfeljebb ebben a kivitelben. Minden mérőegység létezett már a Medicor gyártmányválasztékában önálló, nagy, asztali készülékként, vagy egy őrző moduljaként. Az újdonság a kisméretű, cserélhető, fiókos kialakítás, és a funkciók egy készülékbe zsúfolása volt. Nekünk, újaknak, azonban mind meg kellett tanulni, így az orvosi műszertechnikában gyorsan széles látókörre, és sok ismeretségre tettünk szert. Meg kellett ismernünk az EKG és EEG készülékeket, a papírszalagos regisztrálókat, a vérnyomásmérőket, a hőmérőket és a pulzusérzékelőket, a spirométereket, reakcióidő-mérőket, audiométereket és miográfokat, valamint ezek fejlesztőit, az általuk használt fejlesztési módszereket, érzékelőket, műszereket. Pár év alatt dolgoztunk bemérőként, elvégeztük néhány újabb készülék gyártásbevezetését, és elkezdtük további táskavariációk és újabb mérőmodulok (alkoholszonda, ultrahangos magzati-szívhang érzékelő, méhösszehúzódás regisztráló, magzati EKG, biofeedback modul, sőt súly- és magasságmérő, valamint marokba fogható többfunkciós érzékelő) kifejlesztését.

És ekkor jött az "űrprogram". Magyar űrhajós készült az űrbe, szovjet űrhajón. Ehhez kapcsolódva cél volt minél több magyar műszer alkalmazása az űrállomáson is, és a magyar űrhajósok felkészülésénél is. Igény lett egy "katonai kivitelű" KTD-re. Pesten is dolgoztak új készülékeken, mi is igyekeztünk "újat hozni". A kecskeméti ROVKI-t* is felkerestük néhányszor, megnéztünk mindent (csak az űrhajósjelölteket nem láthattuk és a nevüket nem tudhattuk), követelményeket egyeztettünk, majd készült egy Диагност (Diagnoszt) fantázianevű táska, amely csak a gyártásközi és a végső ellenőrzés szigorúságában különbözött az addigi sorozattermékektől. (Ennek ellenére a szovjet átvevő előtt magam szabályoztam a spirométer érzékelőjének hőmérsékletét a csatlakozó észrevétlen ki-be húzogatásával, mert a vezérlő áramkör bizony elromlott.) Később született egy valóban új konstrukciójú készülék: mind a külső kialakítás, mind a belső áramkörök, mind a kekizöld burkolat a "speciális" (katonai) kivitelt célozta, csak egy volt a baj: ez a "hordozható" eszköz hordozhatatlanul nehéz lett.

E készülék kivitelezése közben már tudtuk: kisebb fogyasztású áramkörök, minimális analóg elektronika, éppen csak a mérendő fizikai jellemzőt elektromos jellé átalakító érzékelők kellenek, és digitális jelfeldolgozás. Ezek akkor már reális igények voltak, nem valami valóságtól elrugaszkodott vágyálmok, mivel addigra az eszközök is megszülettek a világban: a mikroprocesszorok erre az időszakra nem csak távoli laboratóriumok kísérleti eszközei voltak már, hanem elérhető, megvásárolható alkatrészek. El is kezdtem egy "deszkamodell" összeállítását: első lépésként kivettem az alkatrészeket tároló páncélszekrényünkből az összes memóriát, és egy füzetlapnyi méretű lyukacsos NYÁK-lemez egyik sarkába beültettem és bekötözgettem. Felhasználtam mind a tíz(!) SN7489-es áramkörünket, pár invertert (SN7404) és háromállapotú buszmeghajtót (SN74125). Ezzel összeállt 80(!) byte RAM. A processzor kiválasztásánál (és aztán később is sokszor) segített egy fiatal budapesti fejlesztő, Kása Zoltán, aki a mikroprocesszoros technika Medicoron belüli meghonosítását tűzte ki célul maga elé. Z80 dokumentációt és áramköri ötleteket adott, de ezek kipróbálásához előbb össze kellett állítani a saját "mikrogépet". Beszereztük tehát a Z80-as processzort (ami azért annyira nem is volt egyszerű, mert már javában dúlt a "tőkés import kiváltás"-i mizéria), és tovább építettem a "karácsonyfámat" a lyukacsos panelon. A processzoron kívül került rá egy 1 MHz-es (ilyen kvarc volt a páncélban) oszcillátor az órajelnek, ISOSTAT nyomógombokból nyolc adat- és nyolc cím-beállító kapcsoló, egy busz-kérés kapcsoló, hogy a processzor leváljon a buszról, amíg én állítom be az adatokat a RAM-ba íráshoz, egy "írás" nyomógomb, egy "várakozás" kapcsoló, hogy a processzor futását meg lehessen állítani, és piros LED-ek az adat és címvezetékekere. Címdekódolók a RAM-nak és az I/O eszközöknek 74154-ből. Felkerült egy kijelző nyolc TIL302-es típusú hétszegmenses LED-ből, mátrixba kötve, valamilyen - I/O-ként címzett - latch-eken keresztül, programvezérlés alatti multiplex meghajtáshoz tervezve. SN74188-as PROM-ból, ugyancsak I/O-ként címezhetően karaktergenerátor készült, kihasználva a Z80-nak azt a tulajdonságát, hogy a 8-bites I/O címzés ideje alatt a címbusz felső byte-ján az "A" (vagy más utasításnál a "B") regiszter tartalma látszik. Ily módon, ha a kódolandó szám az Accumulator-ban várakozott, egy IN A,(n) utasítással a PROM-ból visszaolvastathattam az Accumulator-ba a kívánt szegmenskódot. (Természetesen megfelelően programozott PROM esetén. PROM-égetőt ehhez a típushoz már korábban készítettem.) Első szárnypróbálgatásként a kijelzőt meghajtó programmal próbálkoztam. Nagyon örültem, amikor 30-40 byte-nyi programmal sikerült egy 8 byte-os memóriaterület tartalmát multiplex meghajtással kivinni a nyolc kijelző szegmenseire úgy, hogy elég időt hagytam egy-egy digit világítására, a következő kigyújtása előtt lekapcsoltam az előzőt, hogy ne "folyjon" át a fény a szomszédos digit szegmenseire, és sikerült egyenletesen, szabályozott ideig kigyújtani az egyes digiteket, hogy ne "hullámozzon" a kijelzés fénye. Hogy a kijelzett mintázat ne a RAM bekapcsoláskor véletlenszerűen beálló tartalma legyen, fejben kikódoltam, hogy melyik biteket kell 1-be vagy 0-ba írni, hogy [ 24.0 °C ] felirat legyen kiírva. Ennek annyira örültem, hogy minden nap reggel beírtam* ezt a programot, és elindítottam kis "számítógépemet", hagy dolgozzon. Egyik nap bejött a szobánkba Kiss Miklós, a miskolci fejlesztés akkori (és írhatnám: alapító) főnöke, aki valamit már sejtett arról, hogy - mintegy mellékesen - mivel "játszok" mostanában, és megdicsért milyen ügyes vagyok, hogy máris itt "ketyeg" egy mikroprocesszoros hőmérő az asztalomon.

Gyorsan lehűtöttem, nehogy vérmes reményeket tápláljon a fejlesztés ütemét tekintve.

A panelra egy számláló/időzítő áramkör is (talán 8253, mert Z80 perifériáink nem voltak, csak 8080-asok, de az is lehet, hogy egyszerűen pár SN7490 vagy hasonló) került, és valamilyen megszakítás-kezelő áramkör is volt, de már nem emlékszem pontosan. Sajnos ezt az ipartörténeti jelentőségű* deszkamodellt egy későbbi főnököm (Papp László) "magáévá tette" a céges szekrényem "kitakarítása" ürügyén, miközben én távol voltam. Pedig szerintem semmire sem tudta használni, és valószínűleg a miskolci Medicor gyár többszöri átalakítása, eladása, név- és tulajdonos-változása, és ha korábban nem is, de a pár évvel ezelőtti végső felszámolása kapcsán biztosan megsemmisült. Kár érte, nagyon sajnálom.

Mert ez a panel volt az alapja a további készülékeimnek. E panelt működtetve jöttem rá, hogyan lehet a WAIT és a BUSRQ vonal váltogatott aktivizálásával gépi-ciklusonként léptetni a Z80-at, illetve a WAIT és az INT váltogatásával utasítás-ciklusonként. A léptető áramkör a tc29Z-be is beépült, remekül demonstrálható vele a Z80 működése. Később önálló cikk is lett belőle, amit Szaniszló Tamás egykori kollégám fordított angolra, hogy az Electronics magazinnak is elküldhessem. (Igaz, nem jelent meg, de legalább válaszoltak, és további cikkekre buzdítottak.)

Sajnos dátumokra pontosan nem emlékszem: ez a panel kb. 1979-ben készülhetett. A "katonai" KTD miatt más megoldásokat is keresgéltünk, így jutottunk el a CDP1802 típusú processzorhoz, amely az RCA teljesen statikus (akár 0 Hz órajellel is működtethető) CMOS áramköre volt. Pajának, öcsémnek nagyon tetszett a "szokásos" processzoroktól erősen eltérő struktúrája. (A CDP1802 mosógépek és műholdak jellemző alkatrésze volt.) Paja a Kandó székesfehérvári számítástechnikai karán végzett, és talán a TPAi vagy az Altair, de leginkább a Videotonban gyártott R10 külseje és kezelési módja miatt, egy ezekhez hasonló megjelenésű és működésű számítógépet tervezett otthoni használatra, a CDP1802-re építve. Erről többször beszélgettünk, de aztán bevitték katonának. Mivel nekem már nagyon kellett volna egy "normális" számítógép, amivel ténylegesen lehetett volna dolgozni, a megtervezett előlap és a funkció elemeit "átvéve", de kibővítve és Z80 alapú processzorra áttervezve*, elkezdtem a készülék megépítését. Lényeges volt, hogy az asztalomon elférjen, kártyarendszerű, bővíthető, és önállóan használható legyen. Ne igényeljen sok tápfeszültséget, ha lehet, minden 5V-ról működjön, és lényeges: elérhető(!) alkatrészekből készüljön. Ez nagyon fontos szempont volt, mert akár csak egy kurrens alkatrészre várva évekig is elhúzódhatott volna a megvalósítás. Éppen ezért a már bespájzolt Z80 CPU, 2716 EPROM, 2112A RAM, 8253 TIMER, 8255 PPI, 8251 USART és 8259 megszakítás-vezérlő áramkörökre épült a terv. Kijelzőként LED-eket és a Philips ZM1550 típusú, lapos, hétszegmenses nixie-kijelzőjét terveztem, a kapcsolók a korábban beszerzett csinos kis Secme alkatrészek lettek. Gondban voltam a háttértár kiválasztásával, megvalósításával. Ebben az időben a már kapható személyi számítógépek többsége kazettás magnót használt háttértárnak, így én is ebben gondolkoztam. Azért is, mert a mágneslemezek kezeléséhez nem értettem és nem is volt hozzá alkatrészem. Gondoltam, ha meglesz a gép, majd bővítésként csinálok hozzá valamilyen komolyabb háttértárat.

A "katonai KTD" miatt (feltételezem: főnökei nyomására) Kiss Miklós engem és dr. Juhász András kollégámat, aki az egyetemről "kirándult" át pár évre az iparba, "külső" munkakörbe* helyezett: néhány hónapra a gyár területén, a gyártásfejlesztési osztályon kaptunk íróasztalt, ahol a gyártás megreformálásán kellett (volna) dolgoznunk. Ez a feladat engem egyrészt nem érdekelt, másrészt pedig éreztem, hogy ez csak egy "kirakat munka", hogy a nagyfőnökök lássák: a legjobb embereink dolgoznak a gyártás megreformálásán. Ráadásul a gyárnak voltak erre saját (nem is rossz) szakemberei, valamint volt nekik saját munkájuk is, és a mellérendelt viszony miatt nem igazán foglalkoztak a mi javaslatainkkal. Hozzákezdtem tehát, "univerzális bemérő célműszer" tervezése ürügyén, a saját gépem CPU paneljének megtervezéséhez. Érdeklődésére ezt az univerzális bemérő célműszer kifejezést mondtam a gyártástechnológiai osztály akkori vezetőjének (Ádámkovics Tibornak) is, aki röviden lesajnálta a tevékenységemet: "Univerzális? Akkor semmire nem jó!". Ebben végül is igaza volt, de nem volt kedvem hosszas magyarázkodásra a processzor-vezérelt orvosi műszerek és a beméréshez használható eszközök jelentőségéről és jövőjéről. Ő pedig megnyugodott, hogy most sem csalódott: "Ez is hülye, mint minden fejlesztő!" és mindketten foglalkoztunk tovább a saját dolgunkkal.

Munkaidőben tehát paneltervezés, otthon a további áramkörök és a mechanikai kivitel tervezése folyt. A mechanikát nem akartam nagyon elbonyolítani, ezért a meglevő anyagainkra és gépeinkre építve 10-es alumínium lemezből kimarózott masszív elő- és hátlapot terveztem, amiket ugyanezen anyagból készített rudak tartottak össze. Szintén ezek a rudak vezették meg és tartották a busz-szerűen párhuzamosan álló panelokat is. A díszelőlap a feliratokkal egy fényérzékenyített réteggel ellátott 1 mm-es alumínium lemezre készült, mert volt hozzá anyagunk, és ez házilag is kivitelezhető volt. Amíg a marózás folyt, otthon fordítottam a rendszerelemek angol nyelvű gépkönyveit. Soha nem tanultam angolul, kizárólag szótárból fordítottam. Csináltam egy kis tartó állványt a szótárnak, így állandóan előttem volt kinyitva, és bizony eleinte minden szót ki kellett keresni. Persze a nyelvtan és speciális kifejezések ismeretének hiánya miatt eleinte sok értelmetlen mondatot fordítottam, ami az ismeretlen szöveg, az ismeretlen áramkörök és az ismeretlen technológia miatt is előadódott. Azonban nem álltam meg, ha érthetetlen volt is továbbhaladtam, és általában harmadik átolvasásra minden megvilágosodott.

Abban az időben a nyomtatott áramkörök mintázatának elkészítését a Chartpak márkanevű öntapadós szimbólumokkal csináltuk, saját kezűleg, többnyire tized-collos raszterháló fölött. A CPU panelt nagyon-nagyon szépre/jóra akartam elkészíteni, ezért 2:1-es méretben ragasztottam fel, azonban a házi fotólaborunkban nem sikerült pontosan visszakicsinyíteni. Sokat kínlódtunk ezzel, aztán később a rézfóliás lemezre fotózásával is, meg a kimaratásával is, úgyhogy végül ez lett a legrosszabb minőségű panel az összes között. Amíg ezzel bajlódott Palócz Béla, a műszerész-fotósunk, addig megterveztem és 1:1-es méretben felragasztottam az előlapi panelt, a léptető áramkört és megszakítás-vezérlőt tartalmazó panelt, valamint a perifériák (soros és párhuzamos I/O és timer) paneljét. Érdekes módon, e három panelon utólagos javításra nem volt szükség, mind a megtervezett áramkör, mint a felragasztott fóliázás hibátlan volt, úgy működött, ahogy megterveztem. Végül elkészült a CPU panel is: Z80 CPU, 1 MHz órajel, két foglalat 2716-os EPROM-nak a 0 és a 800H címen, 8 db 2112A-ból felépített 1 kB RAM a 8000H címtől, két 8-áramkörös miniatűr kapcsoló a 7FFEH és a 7FFFH címeken. Lassan a hibáit is megtaláltam, kijavítottam, majd hetekig tartott, míg esténként otthon összehuzaloztam az egész készüléket. Időközben az előlapot kezelő program első változata is elkészült, elvileg minden működött (volna), ha a program valahogy "belement" volna az EPROM-ba. A feladat a tyúk/tojás problémához hasonlított: volt pár üres EPROM-om, amibe akkor tudtam volna beégetni a programot, ha a készülék már működött volna, azaz ha a program már benne lenne az EPROM-ban, vagyis tudnék az előlapi kezelőszervekkel pl. egy EPROM-égető programot beírni a RAM-ba, amivel majd beégetem azt a programot, amit már jelenleg használok is ... Érthető - nem?

Végül is nem tudom hogyan égettem be az EPROM-ot. Ez valamikor 1980 telén lehetett. A következő évben írtam a Rádiótechnika című folyóiratnak egy levelet, hogy érdekelné-e őket egy házi-számítógép építési leírása, mert írnék róla egy cikket, de hosszú lesz. Érdekelte őket, de csak ha az egész cikket elküldöm. Megírtam, László Zsuzsa kolléganőm begépelte. A programlistát is. Hibátlanul. Szép munka volt. Persze nem kértem ingyen, nekem is fizetett a Rádiótechnika. 700 forintot oldalanként. Mármint újságoldalanként. Egy újságoldal kb. 3 gépelt oldalt tett ki. 1982 januárjától jelent meg a cikk, több mint egy évig tartott a közlése, pedig a programlistát nem is közölték. Elkezdték, de egy rész után abbahagyták. Nem is csodálom, iszonyú meló lehetett a szedése. Ha jól tudom, ez a cikk volt az első az országban házi-számítógép építési leírás témakörben. ´Mikroprocesszoros "házi" számítógép készítése´ volt a címe, és szerzőként az öcsém és én szerepeltünk. És ez a cikk sem írja le, hogy hogyan töltöttem be az első programot a gépbe! És más feljegyzésem sem maradt. És nem is emlékszem. Valahogy úgy lehetett, hogy az egyik előlapi nyomógombot bekötöttem a RAM írás-vezetékének, és hasonlóan az első deszkamodell gépemhez, a gombot benyomva a nyolc előlapi adatkapcsoló állása beíródott a RAM-ba. Csak azt nem tudom már, hogyan lépdelt előre a cím. (Lehet, hogy a "single step" kapcsolót használtam erre?) No, mindegy ... Ezzel a technikával beírtam egy EPROM-égető* program-kezdeményt a RAM egyik ¼ kB-os* lapjába, ami elsőre (természetesen) nem, azaz nem jól működött. Második vagy harmadik próbálkozásra ment, persze ilyenkor mindig bőven belecsúsztam az éjszakába. A RAM egy másik ¼ kB-jába kellett beírni az előlap-kezelő program első változatát, amit beégettem az EPROM-ba, mert csak abból lehetett futtatni (kipróbálni). Aztán vezetéket visszaforrasztani a kapcsolóra, EPROM-ot be a helyére a foglalatba. Persze az előlap-kezelőben is volt hiba, ezért kapcsolót megint átforrasztani a RAM-ra, EPROM-égetőt beírni, az előlap-kezelő hibáját megkeresni, kijavítani, újra beírni, beégetni, kapcsolót visszaforrasztani, EPROM-ot betenni a helyére, kipróbálni. Ezekre a programbelövésekre ráment pár estém és éjszakám.

Miután használhatóra "belőttem" az előlapot kezelő programot, a legfontosabb a háttértár kifejlesztése volt. Ez az 1981. évben volt, ekkor már megjelent a ZX81, de a kerregő, krepegő hangú magnós tárolás megbízhatóságáról csak negatív véleményeket hallottam. Otthon, műszerek híján, nem igazán volt módom kísérletezni, az időt pedig sajnáltam rá. Biztosra akartam menni. Kitaláltam egy lassú és redundáns rögzítési módot: soros, aszinkron formátum, 110 baud, páratlan paritásbit, másfél stop bit. A magnóra az USART órajele (ami a bitsebesség 16-szorosa volt) lett kikapuzva az adatvonallal: azaz 16 db 1760 Hz frekvenciájú impulzus ment ki, ha az adatbit bit logikai 1 volt, és 16 periódus szünet, ha a bit 0. Minden adat-byte kétszer ment ki, vételnél pedig összehasonlítás után csak a helyes paritású adat került tárolásra, ha nem volt egyforma a két byte. Ha mindkettő hibás volt, csak egy feljegyzés történt, hogy hol volt a hibás adat, és egy hibajelzés keletkezett, de nem állt le a beolvasás. Minden adatblokk azonos formátumú, és azonos hosszúságú volt: [ 32 SYN ] [ 2 kód ] [ 8x2 adat ] [ 6 SYN ] [ 2 kód ] ... [ 8x2 adat ] [ 6 ETX ]. Az adatok a RAM egy ¼ kB méretű blokkját jelentették. A blokk nullás című adata volt az első adat-byte, és az FFH című az utolsó. Így a "befűző" 32 db ASCII SYN karakterrel, a közbeszúrt (szikronizáló célú) SYN karakterekkel és az adatblokkot azonosító kódokkal, valamint a záró ETX karakterekkel egy blokk összesen 800 byte hosszúságú volt. A választott formátum miatt byte-onként 11,5 bit ment ki a vonalon, tehát a 110-es bitsebesség mellett egy blokk kivitele 84 másodpercig tartott. Ez nem nevezhetjük éppen gyors adatátvitelnek, de nem is a sebesség volt az elsődleges cél, hanem a megbízhatóság. Az adatblokkok közötti kód a teljes blokk azonosítását, és a blokk címzését szolgálta. A kódot az adatblokk kivitele előtt kellett az előlapi adatkapcsolók beállításával megadni oly módon, hogy a két legnagyobb helyértékű bit a tárolásra kerülő ¼ kB címét jelentette. Az alsó hat bit tetszőleges, emlékeztető kód lehetett. Erre a megoldásra az 1 kB-os rendszermemória és a billentyűzet hiánya kényszerített rá. Átmeneti megoldásra jó volt, teljesült az eredeti kívánalmam, hogy a tc29Z önállóan (külső I/O egység csatlakoztatása nélkül) is használható legyen, és legyen háttértára is. A gyakorlatban a tc29Z-re írt, és ily módon tárolt programok nem töltöttek meg egyetlen kazettát sem, azonban még ma (25! év után) is visszaolvashatók.

Később persze többféle I/O eszköz is készült, pl. a CDP1802-höz gyártott COSMAC fejlesztőrendszernél látott kalkulátorszerű mini-terminál is, de ennek a használata sohasem lett teljesen kidolgozva. (Én valóban egy zsebszámológépet "áldoztam fel" erre a célra, a Sharp EL-8016S típusút. Ma is működik, elvileg, mert gyakorlatilag semmire nem használható. De "jól néz ki". :-)

A továbbfejlesztés lehetősége ezután kívülről jött. 1978 táján hozzánk került gépészmérnöknő férje, a TÜKI-ben* dolgozó Bianki Péter felajánlotta az Intel 8080-as fejlesztőrendszerének (SDK = System Design Kit) programját. Az SDK Monitor program néhány könnyen megérthető és megtanulható utasítással kívülről elérhetővé tette a memóriát, a processzor regisztereit, és programfuttatási lehetőséget biztosított. Csakhát az I/O! Beviteli/kiviteli eszközként egy soros vonalon kommunikáló készüléket kért. Ilyenek voltak a billentyűzettel ellátott, papírra író teletype-ok, és az ebben az időben már a nagygépes környezetben megszokott, elterjedt videoterminálok. Ilyenünk nekünk nem volt, de Bianki Pétertől ezt is kaptunk, legalábbis egy mini-type-ot. Ennek két, 4x4-es elrendezésű billentyűzete volt, valamint egy egysoros kijelzője, amelyik az összes ASCII írásjelet meg tudta jeleníteni 16 pozíción. Ha érkezett egy tizenhetedik, az első "kicsorgott" belőle. Ezt ő készítette egy-két éve, és most, hogy az SDK-hoz vásároltak egy ORION gyártmányú (ADP 2000) videoterminált, felajánlotta nekem használatra. Tehát a Z80-asom futtatta a 8080-as kódját, csak a bemeneti/kimeneti szubrutint kellett átírni, és abban is csak a portcímeket (mert az SDK is az i8251-es áramkört használta a soros vonalhoz), valamint a programot ki kellett egészíteni pár sorral, ami induláskor beállította a bitsebességet a mini-type által használt 110 baud-ra. Rövid idő elteltével készítettem a programhoz egy kiegészítést, amivel a külső égetőbe dugott EPROM tartalmát ugyanúgy tudtam kezelni, mintha a rendszer memóriája lett volna. Mindemellett a tc29Z előlapja is üzemelt, mert az megszakítás-szinten futott, az SDK Monitor meg alapszinten, így már egy igazán használható kis gépem lett. Gépem? A Medicor miskolci részlegeinél ez volt az első(!), és sokáig az egyetlen(!) számítógép. Ez a tény nem vet túl jó fényt se a nagy, országos Medicor vállalatra, se a Műszaki Fejlesztési Intézetére, de sajnos ez volt a helyzet. Persze ekkor már évek óta mozgolódott a cég mikrogép ügyben, de még évek kellettek, míg Miskolcra is elért belőle valami. Ez a valami egy - már abban az időben is őskövület számba menő - lyukszalag olvasó és egy lyukasztó készülék volt. Ezt sikerült Kiss Miklósnak "szereznie" a vezérigazgatóságon. Kaptunk is valamit, meg nem is ... (Meghajtót azért írtam hozzá. Használtuk is. Ezzel gyártottuk szilveszterre a konfettit!)

Az említett "mozgolódás" Budapesten zajlott, és az MMT-rendszer kifejlesztetését, megvásárlását és cégen belüli szabványosítását jelentette. Az MMT a Budapesti Műszaki Egyetem Műszer és Méréstechnikai Tanszékének a rövidítése, itt tervezték meg a busz-szabványt, és az MMT-buszra illeszthető rendszerelem-kártyák szabványát, valamint fejlesztettek ki jelentős számú kártyát. A gyártás a Medicorban folyt, elsősorban saját célra, de az MMT-rendszert más cégeknek is eladták, ezért gyártás külsők számára is történt. Eleinte nehezen lehetett rendszerelem-kártyához jutni, mert a cégnek a saját igény kielégítése volt a fő célja. Az első MMT-rendszerű orvosi műszer egy haematológiai automata, egy sokparaméteres vérelemző volt, de azt hiszem egy CT (computer tomográf) vezérlését is fejlesztették MMT-rendszerben, és más nagyobb készüléket is. Ezeknek a sokszor tíz vagy százmilliós értékű berendezéseknek a tervezése sok mindent háttérbe szorított akkor.

Pedig mi is kaptunk új fejlesztési feladatot: egy szovjet bevizsgáló és kutató intézet, a ВНИИИМТ (VNyIIIMT)* jelezte, hogy pilóták gyors, felszállás előtti vizsgálata számára nagyobb mennyiségben vásárolna erre alkalmas készüléket, ha kifejlesztenénk. A vérnyomásmérésre alkalmas "mikrofon"-t viszont ők adnák. A szovjet piac nagy piac* volt, erre rá kellett mozdulnunk. A készülék neve ROK-1 (Repülőorvosi Készülék) lett, a szovjetek a Баръэр (Barrier = Akadály) fantázianevet adták neki. Az előtervezés során a mikroprocesszoros vezérlés nem is volt kétséges. Némi tépelődés és a legfelsőbb vezetés nyomása miatt pedig MMT alapú lett. Az MMT-rendszer ellen a kártyák bonyolultsága és teljesítményfelvétele szólt, ugyanis a stabil, zavarbiztos működést kis ellenállású (azaz nagy áramfelvételű) elemekkel oldották meg, és többnyire egy kártyára egy funkció került. Vagyis egy általános mikrogépbe CPU, ROM és RAM, PIO, SIO, timer, display, IT vezérlő, billentyűzet-kezelő funkciók kellettek, és ezek mind külön kártyán voltak elérhetők. Az akkumulátorról is működtetni kívánt ROK esetén ilyen megoldás nem jöhetett szóba. Szerencsére azonban készült egy olyan MMT kártya, amely ezeket jórészt tartalmazta: ez volt az MMT-I85 típusjelű CPU kártya, 8085-ös processzorral. Ezen RS232 felület, párhuzamos I/O, timer és RAM volt, valamint négy foglalat tetszőleges memóriáknak (statikus RAM vagy ROM), és több szinten fogadhatott megszakításokat is. Miután megjelent, szinte mindenki ezt használta. Mi is ezt választottuk, kiegészítve egy saját tervezésű kártyával, amelyen a billentyűzet-kezelőt és a kijelző-vezérlőt (8279), egy háromcsatornás timert (8253, pontosabban КР580ВИ53 Сделано в СССР, azaz KR580VI53 Made in USSR) és egy párhuzamos I/O-t (8255) helyeztük el. Ez utóbbi - pár kiegészítő alkatrésszel - látta el a mérőegységek buszát, mert a mérőmodulok is cserélhetően, kártyarendszerben, pozíciófüggetlenül, bárhol elhelyezhetően készültek el, bár a készülék kívülről nem mutatott modularitást, az egésznek egy közös előlapja volt, és nem is terveztük a funkciók változtatását vagy bővítését. (Ez inkább egy kicsit előre-tervezés volt, a következő készülékeinkre gondolva.) De nem folytatom a ROK (egyébként számos tanulságos érdekességgel tűzdelt fejlesztésének történetét), hanem térjünk vissza a tc29Z-re. Kis számítógépemre bizony jelentős szerep várt a ROK idején. A pulzusszám megbízható mérése nem volt sem a KTD-k, sem az elődkészülékként létezett őrzők jellemzője. Egy megbízható érzékelő-illesztő áramkört már korábban sikerült készítenem, most pedig a tc29Z-n egy gyorsműködésű periódusidőt mérő programot fejlesztettem ki. (Persze előtte egy A/D átalakító kártyát kellett tervezni és megépíteni a tc29Z-hez.) A "belőtt" programot már csak bele kellett helyezni a ROK programjai sorába, ami azért annyira nem volt egyszerű, mert - szövegszerkesztő híján - a programok papíron készültek, és "kézzel" fordítódtak le gépi nyelvre: vagyis az utasítástáblázatokból kinézett/kiszámolt gépi kódokat kézzel írtam be a listába. Fejben "léptettem" az utasításszámlálót, a címeket pedig utólag, a teljes lista leírása után kerestem ki, és írtam be a listába. Ha a tc29Z-n futtatott próba-programban a programhossz csökkentése miatt relatív címzésű utasításokat használtam, a címet fejben vagy számológéppel számoltam ki. Programváltoztatás esetén pedig radírt elő, ugráscímeket és más helyfüggő operandusokat újraszámolni, újrabeírni, próba, ... stb.

A nehézkesnek tűnő programozás ellenére a vérnyomást, pulzusszámot, (differenciál-)hőmérsékletet és reakcióidőt mérő, valamint billentyűzetet, kijelzőt és a beépített nyomtatót kezelő ROK programjának mérete 10 kB lett, és kb. 3-4 hónap alatt készült el. Persze készült előtte egy újabb fejlesztést segítő hardware, egy 2 kB-os ROM-szimulátor*. Ez egyrészt az egyik memória foglalatába csatlakozott a fejlesztendő készülékben, amely mint 2716 típusú EPROM-ot látta, a másik oldalon pedig a tc29Z párhuzamos I/O csatlakozóján keresztül a belső memóriája írható/olvasható volt egy egyszerű monitor program segítségével. Ezzel elég gyorsan lehetett fejleszteni. A vérnyomásmérő programja (ami kicsit bonyolult lett, és a kiötlött algoritmusokat is tesztelni kellett menet közben) már teljesen ezzel készült úgy, hogy legfeljebb 20-30 programlépést írtam meg egyszerre, és csak a "belövés" után folytattam a programírást.

A ROK sikeres termék lett. Az általunk tervezett változatban kb. 3000 darabot adott el a Medicor. A gyártása Esztergomba került, ahol pár év után önköltség- és tőkés-import csökkentés miatt át kellett dolgozniuk, emiatt az összes dokumentációt átadtam, a papíron levő, szépen dokumentált, beszédes szimbólumokkal és megjegyzésekkel bőven ellátott programlistám egyetlen kéziratos példányát is. A két legfontosabb algoritmus (a pulzusszám- és a vérnyomásmérő) folyamatábrája megvan, és a beégetendő ROM-tartalom is. Ezen kívül van egy prospektusom egy fotóval, de más nem maradt nekem belőle, csak az emlék. Az áramkörök kapcsolási rajzaira is csak nagyvonalakban emlékszem. Az átalakítás utáni években még további, jóval 3000 fölötti darabszám készült belőle.

A ROK után maradt egy kis időm a fejlesztőeszközök fejlesztésére is. Sikerült kiharcolnom egy VDT-52103 típusú videoterminál megvásárlását. Jó drága* volt, nem is ilyet javasoltak az egyszer talán valaha ideérő MMT-s fejlesztőrendszerhez, hanem egy egyszerűbbet (és sokkal olcsóbbat), de én ragaszkodtam ehhez a típushoz, mert ez két floppy-meghajtóval rendelkezett. Reméltem, ezzel megoldódik a háttértár hiányom. Meg is oldódott, bár ennek hátránya is volt. A VDT-52103 mágneslemeze alapvetően egy-egy képernyőnyi szöveg floppy-ra mentésére készült, bár a lemezekre írni, illetve a lemezekről olvasni a soros adatvonalról vezérelve is lehetett. Készítettem is a tc29Z-hez olyan programot, amely kezelte a lemezeket, azonban éppen ez volt az oka, hogy tc29Z-hez sohasem készült el a mágneslemezek illesztésére alkalmas kártya. Ezért sohasem lett alkalmas a CP/M futtatására. Született ugyan egyszer egy tc/M, amely egy olyan CP/M 2.2 volt, amely nem a nullás lapon futtatta a programokat, hanem a tc29Z-ben szabad RAM kezdetétől 8800H-tól, azonban ennek nem volt igazán jelentősége, ugyanis emiatt egyetlen alkalmazás sem futhatott alatta. Megmaradt örök érdekességnek.

Ezután megsűrűsödtek az események. A világban is, a fejlesztési osztályunkon is, körülöttem is. Pár évig nem is nagyon került ki a kezem alól új orvosi műszer, inkább a számítástechnikát műveltem. Került hozzánk, a céghez, egy ZX-Spectrum. Meg is vettük. Voltak vele fejlesztési terveink is, de végül csak körbejárt az embereknél otthon, és mindenki "szétjátszotta az agyát" vele. Felmerült azonban egy TV-kártya elkészítésének lehetősége is a tc29Z-hez, de sohasem valósult meg. Még papíron sem. Elkezdtük azonban egy CRT-vezérlő tervezését CDP1802/i8275 alapon. Volt is működő kísérleti példány, de ezt sem fejeztük be. Láttuk azonban a Spektrumnál (később volt egy saját példányom is), hogy sokkal-sokkal gyorsabban is lehet adatot tárolni egy kazettás magnón. Bianki Pétertől kaptam egy vastag paksamétát: "8080 Users Club" vagy valami hasonló címmel, ebben felhasználóktól begyűjtött 8080 alkalmazások voltak. Találtam benne egy magnós adattárolót, amely ugyancsak adatcsomagokkal dolgozott, mint az én első megoldásom, de egy-egy csomag sokkal kevesebb "vivő"-periódusból állt, és a nullákat és egyeseket a jel/szünet arány jelentette. Hosszú jel, rövid szünet: egyes, rövid jel, hosszabb szünet: nullás. Ráadásul nem a jelek/szünetek abszolút hossza, hanem csak az aránya döntött: emiatt akár hallgathatatlanul "nyávogó" magnón is működhetett. Működött is, kipróbáltam, de az alkalmazásának csak később jött el az ideje. Házi mikrogép tanfolyamot tartottam: fejlesztők és gyári szakemberek jártak rá. Aztán házon kívül is: a Posta "menetrend-szerinti" mikrobusza szállított kora reggelente Emődre, időnként Tokajba, hogy az átjátszó állomások alkalmazottainak (rádiómérnököknek és műszerészeknek) tartsak előadásokat.

Biankiéknál ismét újítottak, és megint kaptam valamit: vásároltak egy egykártyás Mostek gyártmányú Z80-as fejlesztő-rendszert. Nem emlékeztem pontosan a típusára, de találtam rá utalásokat az Interneten: SDB-80 típusú kártya volt, DDT-80 nevű operációs rendszerrel, ASMB-80 assemblerrel, soreditorral. Ezen több program volt. A Monitor az E000H címen kezdődött, alatta egy Assembler/Editor/Loader volt az A000H címen. Egy kapcsolóval beállítható volt, hogy reset után a program ne a szokásos nullás címen kezdődjön, hanem az E000H-n. Alulról RAM-mal fel lehetett tölteni a kártyát, így az Editorral meg lehetett írni egy forrásnyelvű programot, az Assembler lefordította, és a Loader pedig tetszőleges címre (bár célszerűen nullára) betöltötte. Aztán a kapcsolót visszakapcsolva, reset után a frissen megírt program indult el a nullás címen. Mindezt kizárólag a RAM-ot használva is meg lehetett csinálni, nem kellett háttértár. (Pontosabban a RAM volt a háttértár.) Éppen ilyesmire volt szükségem, tehát megpróbáltam az én gépemen futtatni. Mivel a tc29Z 4 kB ROM-ja és 1 kB RAM-ja ehhez kevés volt, terveztem egy másik CPU kártyát. Erre 4 db 8 kB-os (összesen 32 kB) EPROM került, valamint terveztem egy különálló RAM kártyát, amire 16 db 2 kB-os CMOS RAM (6116, összesen 32 kB), plusz egy 3 V-os hosszú élettartamú elem került, hogy ne felejtsenek el a RAM-ok kikapcsolás után. A ROM-ok a 0-7FFDH tartományban, a RAM-ok a 8000H-FFFFH "szóltak". Megmarad a két mini nyolcáramkörös kapcsoló a 7FFEH-7FFFH címen, a funkciójuk azonban megváltozott (különböző rendszerállapotokat lehetett beállítani velük), valamint a processzor órajelét is felemeltem (a "normális") 2,5 MHz-re (találtam egy 5 MHz-es kvarcot!). A korábbi programokkal való kompatibilitás miatt a RAM-ok első 1 kB-ját fenntartottam, ki is használják a rendszerprogramok teljes egészében, a következő (8400H-87FFH című) 1 kB-ot pedig "szabad RAM"-nak neveztem ki. Ezért a RAM a felhasználóknak a 8800H címtől felfelé lett használható. A CPU-kártyán levő ROM-ok egy plusz új bemenet segítségével letilthatók lettek. Ez később, a CP/M-hez (is) szükséges ROM/RAM váltás miatt történt már, de a mágneslemezes tömegtárolók hiánya miatt - mint írtam - CP/M sohasem futott a tc29Z-n.

Közben kaptam egy Basic interpretert is (T.D.L. - Technical Design Labs - 12K Z80 BASIC), ami valószínűleg CP/M alá készült, legalábbis az IOBYTE-ra hivatkozás erősen azt sejttette. Ez elég jól összevegyíthető volt a Mostek programok I/O csatornáival: Consol I/O, Program I/O és List I/O, amihez én még definiáltam egy Basic I/O-t is. A programok ezeken a csatornákon kommunikáltak a külvilággal. Például az Assembler a List-input-on olvasta be a forráskódot, és a Program-output-ra vitte ki a tárgykódot, párhuzamosan a List-outputra kivitt programlistával. A Loader a tárgykódot a Program-input-on várta. A Consol I/O a Monitor csatornája volt, a billentyűzet és a display számára. A Basic I/O-t pedig a Basic program tömegtárolójának illesztésére szántam. Sőt, mindezek után még egy Disassembler programot is kaptam, így ezt a már igazán használható rendszert kellett "felélesztenem", a saját gépemen futtathatóvá tennem.

Miközben a hardware összeállt, visszafejtettem a Monitort, és egy rendszerindító részt valamint a tc29Z előlapját is kezelő programot hozzáírva, a "saját képemre" alakítottam. A Basic-et, az Assembler/Editor/Loader-t és a Diasassemblert pedig byte-ról bytre-ra visszaelemezve, néhol futtatva, megkerestem a 16-bites címzésű konstansokat és ugráscímeket, és átírtam olyan értékre, hogy ez az egész a memória alsó felében futhasson*. Ez pár hét alatt sikerült is. Ebben nagyon nagy segítséget jelentett a tc29Z gépi-ciklusonkénti léptethetősége, és a megszakításként használható előlap-kezelője. Ezzel egy nagyon jól használható géphez jutottam, csak a tömegtároló hiányzott. Sikerült azonban írnom olyan periféria-meghajtó rutinokat, amelyek a soros vonalon keresztül írták/olvasták a VDT-52103 videoterminál mágneslemezét.

Most már csak a többiek mikrogép igényét kellett volna kielégíteni, mert ekkor már mindenki látta, hogy ez a jövő, gép nélkül a fejlesztés nem létezhet. A tc29Z (a nagyvonalú megoldások ellenére is aprólékos mechanikai kialakítása, és a rendszer gyerekbetegségeivel járó) korlátai miatt a megoldást az MMT-rendszerben találtuk meg. Egy saját tervezésű tápegység, egy CPU-Z80-U-07, egy MEM-UNI-U-04 a ROM-oknak, két MEM-D32-U-03 összesen 64k RAM-nak, egy MMU (Memory Management Unit, ami egy UPC-WRP-U-01 összehuzalozható kártyára kitalálva és felépítve), egy BRP-MSI-U-02 a soros vonalai miatt, és a nyomtató illesztéséhez egy PIO-MSI-U-03 kártya felhasználásával, szabványos busz hátlapra (egy kis huzalozással) összerakható volt egy használható gép. A külső váza a pillanatok alatt összeszerelhető Kontaset vázra épült, ennek oldallemezei adták a burkolatot is. Videoterminálként azt használtunk, amit be tudtunk szerezni: Orion (ADP 2000) és Rolytron (ROSY-80) terminálok működtek nálunk. A programok azok voltak, amiket a tc29Z-n már megírtam, belőttem: Monitor, Editor, Assembler, Loader, Disassembler és Basic. A Monitort kicsit át kellett írni, többek között azért, mert az MMT-rendszer memóriára leképzett periféria-rendszert használt, de végül is ugyanazok a programok futottak. Tehát a tc29Z-m MMT-rendszerben született újjá. Háttértárunk nem volt, de eleinte egy saját kártyával kazettás magnós illesztést használtunk, majd a Volán Elektronika nevű cégtől MOM gyártmányú mini-floppy meghajtókat (MF 1800/900) vásároltunk, és egy további MMT-kártya, a FYC-I71-U-03 felhasználásával az illesztést is megvalósítottuk. Ezek a MOM-drive-ok elég kis kapacitású (70 kB) és lassú meghajtók voltak, azonban sikerült órajel váltással és egy kis software-trükkel (sector deblocking algorithm) több mint kétszeresre növelni a tárolóképességet, bár a megbízhatóságuk így lecsökkent. De még mindig jobb volt, mint a magnó. Pár évvel később (1985 táján), amikor a fél modulmagasságú meghajtók elterjedtek és elérhető áruk lett, 1,2 MB kapacitású Panasonic típusra cseréltük őket, és az akkor a gépeinken futó CP/M 2.2 operációs rendszer miatt már valóban komoly számítógépeket mondhattunk magunkénak. (A BIOS-t én írtam mindegyik változathoz.) Sajnos a miskolci gyár többszöri átalakítása utáni végső eladását követően, a '90-es években, az új tulajdonos az összes MMT-kártyát és berendezést, közte a mi számítógépeinket is, odaadta egy szakmai középiskolának: szétszedni, gyakorolni, "játszani". Hát így semmisült meg ez a másik ipartörténeti emlék.

A tc29Z pedig? Most is működik! Itt van mellettem, be van kapcsolva, és "dolgozik": írtam rá egy Basic programot, amely (ál)véletlen módon kigyújtogatja az összes előlapi LED-et, amit perifériaként címezve el lehet érni. Csak hogy ne "unatkozzon". Hogy ne "érezze", hogy elhanyagolom. Még terveim is vannak vele. Valamikor 1992-93 táján utánépítettem egy érzékeny rádióvevőt*, amely a Mainflingen melletti, atomóra jeleit sugárzó adó, a DCF77 adását veszi. Ennek dekódolását és az idő kijelzését akarom "rábízni". Egyszer, ha időm lesz, megírom a programot. Addig csak villog, mint a Star Trek kezelőpultja.

Persze videoterminálom nincs itthon. A VDT-52103 és a többi terminál is megsemmisülhetett a Medicor roncsainak végső felszámolásán. Erre az akcióra bennünket (pár elérhető ismerőst, volt fejlesztőket) meghívtak, a felhalmozott készülékmaradványok közül elhozhattuk, amit akartunk. (A maradék zúzdába ment!) A videotermináljainkat nem, de sok szívünknek kedves, félbe maradt fejlesztés "eredményét" megtaláltuk* és begyűjtöttük.

Azért mégis van itthon videoterminálom. Mert végül mi is az? Kétirányú, duplex soros aszinkron adatvonallal rendelkező valami, aminek ha a billentyűzetén lenyomunk egy gombot, a hozzá tartozó (ASCII) kódot kiküldi a kimenetén. Ha pedig a másik (bemeneti) adatvonalán kap egy kódot, a hozzá tartozó írásjelet megjeleníti a képernyőn, azon a helyen, ahová a kurzor éppen mutat. Ezt azért nem lehet nehéz egy PC-n megprogramozni. Nem is volt nehéz, meg is csináltam, még a '90-es évek elején. Írtam egy VDT-52103 emulátort. No, nem tud mindent, mert csak azt programoztam bele, amire a tc29Z működtetéséhez szükség volt. A mágneslemez-vezérlést azért "tudja". Így tehát manapság, ha egy kicsit játszani akarok a 2,5 MHz órajelű, 8 bites Z80-at működtető tc29Z-vel, bekapcsolom a PC-met, hogy a 2 GHz órajelű, 64 bites P4 Celeron videoterminálként szolgálhassa a 27 éve működő legkedvesebb számítógépemet.

Kovács Attila, 2007.