Minszk–22

második generációs szovjet számítógéptípus


A Minszk–22 szovjet gyártmányú félvezetős technológiára épülő nagyszámítógép (mainframe). A magyar számítástechnikai kultúra létrejöttének meghatározó számítógéptípusa, amely megalapozta magyar informatikusképzést. A Minszk–22-es sorozatot 1964-ben jelentették be, és 1965–1970 között 953 darab készült belőle. Ez a géptípus volt a szegedi József Attila Tudományegyetem Kibernetika Laborja és a Magyar Néphadsereg első számítógépe. Utódja a Minszk–32-es gép volt.

Minszk–22
Minszk–22 szovjet gyártmányú nagyszámítógép rajza 1966-ból
Minszk–22 szovjet gyártmányú nagyszámítógép rajza 1966-ból

Forgalomban 1964–1970
Utód Minszk–32
A Wikimédia Commons tartalmaz Minszk–22 témájú médiaállományokat.

TörténeteSzerkesztés

1956-ban már az első generációs számítógépek több típusa működött a Szovjetunióban (Sztrela, BESZM, M–3, Ural–1), amikor a Szovjetunió minisztertanácsa határozatot hozott a számítástechnika fejlesztésének gyorsításáról, új, a második generációs számítógépek létrehozására képes kutató és gyártó bázisok létrehozásáról. Ekkor létesítették Fehéroroszország fővárosában az Ordzsonikidzéről elnevezett minszki számítógépgyárat. A gyár tervezőirodája 1958-ban kezdte meg működését. 1960-ban készült el az első számítógép, a Minszk–1. Ez még részben elektroncsöves gép volt, gyártását 1963-ban le is állították. Összességében különböző modifikációit is figyelembe véve 220 darabot gyártottak belőle.

1964-ben épült az első 100%-ban félvezetős technológiára épülő Minszk számítógép, a Minszk-22. Gyártása 1970-ig tartott, és közel 1000 darabot készítettek. Továbbfejlesztett változatának, a Minszk–32-nek a gyártása 1968-ban kezdődött. Ebből a típusból 1975-ig közel 3000 került eladásra. 1972-ben a KGST budapesti tanácskozásán a Minszk–32-t nyilvánították az automatikus vezérlési rendszerek alapgépévé. Magyarországra 1974 körül több Minszk–32-es került (Magyar Néphadsereg, Könnyűipari Minisztérium stb.).

FelépítéseSzerkesztés

 
Neumann-architektúra

A Minszk—22 egy klasszikus Neumann-architektúra alapján felépített gép volt. 37 bites szavakon másodpercenként 5–6000 művelet elvégzésére volt képes. A gép ferritgyűrűs operatív memóriája 8192, egyenként 37 bit hosszú szóból állt. (Működését tekintve, durva közelítésként, ez felel meg a PC-k memóriájának). A háttértár mágnesszalagos egységekből állt, amelyek egyenként 1 600 000, szintén 37 bites szót voltak képesek tárolni.

A mágnesszalagok mellett adatbeviteli perifériaként 80 oszlopos lyukkártya szolgált, míg adatkiviteli eszközként a lyukkártya mellett nyomtató is csatlakozott a géphez.

A félvezető elemekből épített gép teljes helyigénye a külső perifériák nélkül 80 m², nominális fogyasztása 10 kW volt.

Aritmetikai egységSzerkesztés

A gép aritmetikai egysége 2 regiszterből: R1 és R2, valamint egy akkumulátorból állt. Ez az egység hajtotta végre az adatokon a különböző aritmetikai és logikai műveleteket.

Az első, R1 regiszter fogadta az operatív tárból (memóriából) a műveletekben részt vevő első 37 bites szót. A második, R2 regiszter a műveletek végrehajtásakor kisegítő szerepet játszott (például egy szorzás végrehajtásakor először itt tárolódott a szorzó, majd az eredmény alacsony helyi értékű része stb.). Ez a regiszter nem volt összekötve az operatív tárral.

Az akkumulátor egy harmadik 37 bites regiszter. Feladata a műveletekben részt vevő második operandus memóriából történő kiolvasása és tárolása volt. Azokban a műveletekben azonban, ahol a második operandus egy megelőző művelet eredménye volt, ez az adat nem az akkumulátorban, hanem az R2-es regiszterben tárolódott. Minden információ operatív tárba írása, az adatok operatív tár és külső tárak közötti cseréje, illetve a kimeneti eszközökre (nyomtató, lyukkártya) kiírása minden esetben vagy az R1-es regiszteren, vagy a akkumulátoron keresztül valósult meg.

A különböző műveletek átlagsebessége a következő volt:

  • fixpontos összeadás – 96 μs,
  • fixpontos szorzás – 300 μs,
  • fixpontos osztás – 716 μs,
  • lebegőpontos összeadás – 240 μs,
  • lebegőpontos szorzás – 285 μs,
  • lebegőpontos osztás – 600 μs

Vezérlő egységSzerkesztés

A vezérlő egység biztosította a betöltött program végrehajtását. Egy utasításszámlálóból és egy műveletdekódoló regiszterből állt. A vezérlő egység működését minden egyes számítási ciklus első két ütemében munkaregiszterként az akkumulátor segítette.

Az utasításszámláló egy 13 bites egység volt, ez tartalmazta a végrehajtandó utasítás címét (a következő végrehajtandó utasítás kódját tartalmazó memóriahely sorszámát). A program szekvenciális végrehajtásakor az utasításszámláló értéke automatikusan mindig eggyel nőt, így a soron következő memóriarekesz tartalma került végrehajtásra. A műveletdekódoló-regiszter feladata a memóriából kiolvasott utasításkód értelmezése, ez egy 7 bites regiszter volt. Ez a két érték meghatározta a Minszk–22 számítógép alapvető paramétereit, az utasításszámláló memória maximális méretét (213 = 8192), és a műveletdekódoló-regiszterben maximálisan behuzalozható műveleti kódok számát (27 = 128).

Operatív tár (memória)Szerkesztés

A gép belső memóriájának teljes mérete 8192 darab 37 bites szó, klasszikus ferritgyűrűs memória volt. Ez nyolcas számrendszerben volt besorszámozva, és a memória-címtartomány 0-tól 17 777-ig terjedt. A 0-s rekesz kivételével minden rekesz írható és olvasható volt és egyaránt tartalmazhatott utasítást, vagy adatot. A nullás rekesz tartalma egy 0-s kód volt, amit nem lehetett megváltoztatni. A memóriaelérés ideje 24 μs volt.

UtasításkészletSzerkesztés

A Minszk–22 kétcímes gép volt. Ez azt jelenti, hogy minden utasítás esetén két operandust használt, és ennek megfelelően a műveletekben két, az operatív tárban található rekesz (tárterület) címét kellett megadni. Minden gépi utasítás 37 bit hosszú volt és négy részből, azaz négy mezőből állt:

  • Utasításkód 0–6. bitek (az utasításkód minden esetben egy előjeles 8-as számrendszerbeli szám).
  • Indexmező címe 9–12. bitek (továbbiakban mint i jelöljük).
  • Az első operandus címe 7. bit + 13–24. bitek (továbbiakban mint c1 jelöljük).
  • A második operandus címe 8. bit + 25–36. bitek. (továbbiakban mint c2 jelöljük).

Egy szabványos műveletet végrehajtó ciklus öt lépésből állt, ettől eltért a vezérlést átadó utasítások végrehajtása. Az utasításkészlet négy csoportot alkotott:

  • aritmetikai műveletek,
  • logikai műveletek,
  • vezérlő utasítások,
  • input és output műveletek.

Minden műveletet egyértelműen meghatározott a 0–6. biteken található utasításkód (8-as számrendszerbeli szám).

Aritmetikai utasításokSzerkesztés

Utasításkód Az utasítás neve Az utasítás formátuma
+1M összeadás +1М i c1 c2
+2M kivonás +2М i c1 c2
+3M szorzás +3М i c1 c2
+4M osztás +4М i c1 c2
+5M kivonás* +5М i c1 c2
-04 kerekítés tiltása -04 0 0 0
-05 kerekítés -05 0 0 0
-70 szorzás alacsony helyi értékű részének tárolása -70 i c1 c2
-71 osztás maradék részének tárolása -71 i c1 c2
-72 kitevők összeadása -72 i c1 c2
-73 kitevők kivonása -73 i c1 c2
-75 normális alakra hozás -75 i c1 c2
-76 egyesek összeszámlálása -76 i c1 c2

A fenti táblázatból látszik, hogy a Minszk 22 utasításkészlete a szovjet számítógép-építési tradícióknak megfelelően műszaki tudományos számítások végzésére volt tervezve.

Az összeadásnak, a kivonásnak, a szorzásnak és az osztásnak 8–8 változata volt. Ezeket jelöli a táblázatban az M (modifikáció) betű.

Először az utasításkód 4. bitje határozta meg, hogy a művelet fixpontos (tartalma = 0), vagy lebegőpontos (tartalma = 1). Az 5. és 6. bit pedig négy különböző végrehajtási módot definiált:

Az utasításkód 5. és 6. bitje Az utasítás-végrehajtás módja Megjegyzés
00 Akkumulátor, (c2) := (c2) х (c1) A művelet eredménye az akkumulátorban és második címen is tárolásra kerül.
01 Akkumulátor := (c2) х (c1) A művelet eredménye csak az akkumulátorban kerül tárolásra.
10 Akkumulátor, (c2) := R2 х (c1) A műveletet az R2 regiszter és az első cím tartalma között végzi a gép, és az eredmény az akkumulátorban és második címen is tárolásra kerül.
11 Akkumulátor := R2 х (c1) A műveletet az R2 regiszter és az első cím tartalma között végzi a gép, és az eredmény csak az akkumulátorban kerül tárolásra.

A táblázatnak megfelelően például a +22 ( binárisan 010 010) i c1 c2 egy fixpontos kivonás az R2 regiszter és az első cím tartalma között, és az eredmény az akkumulátorban és második címen is tárolásra kerül.

Logikai utasításokSzerkesztés

Utasításkód Az utasítás neve Az utasítás formátuma Megjegyzés
+0m* kizáró vagy +0m* i c1 c2
+6m logikai eltolás (shift) +6m i c1 c2 A második operandus (c2) minden bitje eltolásra kerül. Az eltolás irányát és hosszát az első operandus (c1) tartalmazza.
+6m* aritmetikai eltolás (shift) +6m* i c1 c2 A második operandus (c2) első bitje (az előjel bit) nem csak a maradék 36 bit kerül eltolásra. Az eltolás irányát és hosszát az első operandus (c1) tartalmazza.
+7m és +7m i c1 c2 Bitenkénti logikai konjunkció
+7m* vagy +7m* i c1 c2 Bitenkénti logikai diszjunkció
-10 adatátvitel -10 i c1 c2 Az első cím tartalmát áttölti a második címre és az akkumulátorba.
-11 adatátvitel előjelváltással -11 i c1 c2 Az első cím tartalmát áttölti a második címre és az akkumulátorba, miközben az előjelet bitet (0. bit) ellenkezőre változtatja.
-12 adatátvitel az előjel törlésével -12 i c1 c2 Az első cím tartalmát áttölti a második címre és az akkumulátorba, miközben az előjelet bitbe (0. bit) 0 értéket ír.
-13 beolvasás vezérlőpultról -13 i 0 c2 A c2-es memóriarekeszbe betölti a gép vezérlőpultján beállított 37 bites értéket.
-14 előjel-hozzárendelés -14 i c1 c2 A c1-es rekesz tartalmának előjelét hozzárendeli a c2-es rekesz tartalmához.
-15 címátadás regiszterből -15 0 0 c2 Külső adathordozóról történt információbevitelt követő kötelező utasítás. Az R1 regiszter tartalmát tölti be a c2 rekeszbe. Ez lesz az eltárolt információt tartalmazó utolsó rekeszt követő első rekesz címe.
-16 értékátadás -16 i c1 c2 A c1-es rekesz tartalmát áttölti a c2-es rekesz tartalmába.
-74 ciklikus összegzés -74 i c1 c2 A c1-es rekesz tartalmát hozzáadja a c2-es rekesz tartalmához, az utasítástömbök ellenőrző összegének (checksum) előállítását segíti.

A logikai utasításoknak az aritmetikai utasításokhoz hasonlóan 4–4 végrehajtási módja volt. Ez az aritmetikai utasításoknál megadott táblázatban látható. Az m*-gal jelölt utasítások esetén az utasításkód 4 bitje minden esetben egyenlő 1, míg az m-mel jelölt utasítások esetén egyenlő 0.

Vezérlésátadó utasításokSzerkesztés

A vezérlést átadó utasítások a számítógépes program végrehajtása során a program utasításainak módadósítására szolgálnak. Segítségükkel a szekvenciális végrehajtás módosítható valamilyen okból, vagy valamilyen feltétel alapján. Vezérlés átadáskor a utasításszámlálóba beírásra kerül egy cím, és a program végrehajtás ezen a címen folytatódik.

Utasításkód Az utasítás neve Az utasítás formátuma Megjegyzés
-00 a gép megállítása -00 i c1 c2 Ez egy programtesztelést segítő utasítás. A c1 cím tartalma az R1 regiszterbe, a c2-es cím tartalma az akkumulátorba, és a legutolsó végrehajtott művelet eredménye az R2-regiszterbe íródott. A gép megállását követően ezek az értékek a vezérlőpulton leolvashatók voltak.
-30 feltétel nélküli vezérlésátadás -30 i c1 c2 Az utolsó művelet eredménye a c2-es címen került tárolásra. Az utasításszámlálóba a c1 címen tárolt érték (cím) került betöltésre, és a program futása itt folytatódott.
-31 szubrutinba ugrás -31 i c1 c2 Az utasítás hatására a c2 címen tárolásra került egy feltétel nélküli vezérlésátadás „-30 00 k+1 0000” — a „k” az adott utasítás címe — (ez definiálja szubrutin visszatérési címét). Majd a program végrehajtása a c1 rekeszben tárolt címen folytatódott (a szubrutin kezdő címe).
-32 ugrás előjel szerint -32 i c1 c2 Ha az aktuális művelet eredménye pozitív a c1 címen, ha negatív a c2-es címen tárolt tartalom került betöltésre az utasításszámlálóba, és a programvégrehajtás itt folytatódott
-33 ugrás túlcsordulásra -33 i c1 c2 Akkumulátor túlcsordulás esetén (pl. nullával osztás) a program a c1-rekeszben tárolt címen folytatódott.
-34 ugrás nulla értékre -34 i c1 c2 Ha az aktuális művelet eredménye nulla a c2 címen, ha nem nulla a c1-es címen tárolt tartalom került betöltésre az utasításszámlálóba, és a programvégrehajtás itt folytatódott
-35 vezérlésátadás kulcs szerint -35 i k c2 Ha a vezérlőpulton található kapcsolók értéke megegyezik „k”-val, a vezérlés a c2-es címre kerül átadásra.
-37 vezérlés átadás eltérő érték alapján -37 i c1 c2 Lyukkártyalyukasztás ellenőrzésére szolgáló utasítás. Segítségével az éppen kilyukasztott lyukkártya visszaolvasásra és ellenőrzésre került.
-20 ciklus vége -20 I c1 c2 Az utasításban az „I“ ciklusváltózót jelent. Az művelet végrehajtásakor az ciklusváltózó 13–36. bitjeinek értékéhez adódott hozzá a c2 cím megfelelő bitjein tárolt érték a címmódosító-állandó. Az indexrekesz 0–12. bitjein tárolt értékéből minden végrehajtáskor kivonásra került 1. Ha értéke nullára vagy negatívra csökkent, a vezérlés a c1 címre került. A ciklus indításakor az I 0–12. bitjére a ciklusok száma mínusz egy értéket (n-1-et) kellett beírni, a 13–36-os bitekre pedig a ciklustörzsben használt címmódosító állandót.
-06 programmegszakítás engedélyezés — tiltás -06 i k 0 Ez az utasítás engedélyezte vagy tiltotta a perifériák számára a programmegszakítást (interrupt). A „k” állandó értéke határozta meg a perifériát. (0002 → lyukszalag, 0020 → lyukkártya stb.)
-36 programmegszakítás blokkolásának feloldása -36 i c1 c2 Programmegszakítás feldolgozását segítő utasítás (lásd.: „Kivételkezelés”).

Beviteli és kiviteli utasítások (input, output)Szerkesztés

Míg a fent felsorolt utasításcsoportok már a 60-as években kikristályosodtak, és csekély változtatásokkal a modern számítógépekben is a mai napig szinte változatlan formában megtalálhatók – legfeljebb a felhasználók 99%-a nem tud róluk, mert a szoftver eltakarja ezt a szintet –, addig a beviteli és kiviteli utasítások a mai eszközök mellett igazi őstörténeti különlegességek.

Utasításkód Az utasítás neve Az utasítás formátuma Megjegyzés
-07 lyukszalag visszatekerése -07 0 0 0
-50 számok olvasása lyukszalagról -50 i 0 c2 Számsorozat beolvasása és tárolása a c2-es címtől kezdődően. A beolvasás végén az (utolsó számot tartalmazó rekesz címe)+1 érték került az R1 regiszterbe, és az akkumulátorban ellenőrzőösszeg generálódott.
-51 számolvasás ellenőrzése -51 0 0 0 A -50-es utasítás végrehajtásának ellenőrzése. Adattárolás nem történt, csak ellenőrzőösszeg-képzés.
-52 karakterek olvasása lyukszalagról -52 i 0 c2 Karaktersorozat beolvasása és tárolása a c2-es címtől kezdődően. A beolvasás végén az (utolsó karaktert tartalmazó rekesz címe)+1 érték került az R1 regiszterbe, és az akkumulátorban ellenőrzőösszeg generálódott
-53 karakterolvasás ellenőrzése -53 0 0 0 A -52-es utasítás végrehajtásának ellenőrzése. Adattárolás nem történt csak ellenőrzőösszeg képzés.
-54 lyukkártyák olvasása -54 i k c2 Lyukkártyakötet olvasása. A k konstansban adták meg a kártyák számát és azt, hogy a beolvasott kártyák programkártyák vagy adatkártyák. A kártyák tárolása a c2-es címtől kezdődött. A beolvasás végén az (utolsó karaktert tartalmazó rekesz címe)+1 érték került az R1 regiszterbe.
-60 nyomtatás sornyomtatóra vagy az 1-es lyukszalaglukasztóra (szám lukasztás) -60 i s c2 A c2-es rekesz tartalma került nyomtatásra vagy lukasztásra az s konstansban megadott formázás szerint.
-61 adatkivitel a 2-es lyukszalaglukasztóra (karakter lukasztás) vagy nyomtatás teletype-ra. -61 i s c2 A c2-es rekesz tartalma került lyukasztásra vagy nyomtatásra az „s” konstansban megadott formázás szerint.
-62 adatátvitel pufferbe -62 i s c2 A c2 rekesz tartalmának áttöltése pufferbe az „s” konstansban megadott formázás szerint. A Minszk–22 128 szavas kiviteli pufferrel rendelkezett.
-63 kártyalukasztás -63 i 0 c2 A c2 rekesz tartalmának átadása a kártyalukasztóra.
-40 zónakeresés mágnesszalagon előre -40 i x
-41 zónakeresés mágnesszalagon hátra -41 i x
-46
-45
mágnesszalag olvasás előre – zónakeresés -46 i x
-45 i k c2
A két utasítást együtt kellett alkalmazni.
-47
-45
mágnesszalag olvasás hátra – zónakeresés -45 i k c2 A két utasítást együtt kellett alkalmazni.
-46
-43
írás mágnesszalagra előre – zónakeresés -46 i x
-43 i k c2
A két utasítást együtt kellett alkalmazni.
-47
-43
írás mágnesszalagra hátra – zónakeresés -47 i x
-43 i k c2
A két utasítást együtt kellett alkalmazni.
-46
-44
ellenőrző olvasás mágnesszalagról – zónakeresés -46 i x
-44 i k 0
A két utasítást együtt kellett alkalmazni.
-47
-44
ellenőrző olvasás mágnesszalagról hátra – zónakeresés -47 i x
-44 i k 0
A két utasítást együtt kellett alkalmazni.
-03 kártyalukasztás indítása, leállítása -03 0 k 0
-17 adatbevitel teletype billentyűzetről -17 i c1 c2

A Minszk–22 programozásaSzerkesztés

A Minszk–22 életciklusának vége felé már meglehetősen sok fordítóprogrammal rendelkezett: COBOL, Fortran, ALGOL és ALGOL-68. Szegedre érkezésekor azonban a Minszk–22-n kizárólag egy „Inzsenyer” nevű autókód fordító (АКИ — Автокод инженер) futott. Az Inzsenyer, mint az nevéből kitalálható, mérnöki feladatok megoldására készült, és meglehetősen nagy műszaki-tudományos számítások végzésére kialakított szubrutinkönyvtárral rendelkezett. Az autókód nyelvek a számítástechnika fejlődésének kezdeti szakaszán alkalmazott, az assembler nyelvhez nagyon hasonlító, de annál egyszerűbb programozási nyelvek voltak, általában csak a gépi kód oktálisan megadott kódjait helyettesítették mnemonikus kódokkal. Szegeden a Kibernetikai Labor kutatási területein (matematikai nyelvészet, operációkutatás, fordítóprogramok stb.) alig volt alkalmazható, így a gépet leginkább gépi kódban programozták. Azonban hamarosan Fortran, majd ALGOL fordítót is kapott, és Kalmár professzor vezetésével a szegedi hallgatók egy ALGOL-68-as fordítót is készítettek hozzá.

A Minszk–22 MagyarországonSzerkesztés

MN Számítástechnikai Központja (MN SZK)Szerkesztés

1966-ban hozták létre a Magyar Néphadsereg Számítástechnikai Központját. Az első magyarországi Minszk–22-es számítógép 1967-ben a Néphadsereg Haditechnikai Intézetében kezdte meg működését.[1] Ezzel elkezdődött a honvédelem területén is az informatikai korszak. Ennek a központnak és számítógépnek a jelentősége jóval túlnyúlt a hadseregen. A szocialista idők állambiztonsági felfogásának megfelelően az államigazgatás működésével összefüggő információk is szigorúan titkosak voltak, így ez idő tájt azok kezelése is a Honvédelmi Minisztérium feladatkörébe tartozott. Az MN SZK parancsnoka Majdán Pál alezredes, tudományos vezetője (nem tartozott az állományhoz) Dömölky Bálint volt.[2]

Ezt a gépet 1974-ig használta az MN SZK. Ekkor a szervezet egy új Minszk–32-es gépet kapott, átalakult és elköltözött a Szilágyi Erzsébet fasorból. A Minszk–22 fizikailag a helyén maradva átkerült a Zrínyi Miklós Katonai Akadémia állományába, és még évekig szolgálta a leendő tisztek számítástechnikai oktatását.[3]

FelsőoktatásSzerkesztés

A második Minszk—22-es gép 1968 tavaszán a Budapesti Nemzetközi Vásár szovjet pavilonjának volt a büszkesége. A vásár bezárását követően a gépet, mint a szovjet nép ajándékát adták át a magyar felsőoktatásnak. A számítógép Szegedre került, a József Attila Tudományegyetem Kalmár László akadémikus által vezetett Kibernetikai Laboratóriumába. Ez a gép biztosította az alapot a magyar informatikusképzés elindításához. A Kalmár professzor által oktatott Automatikus számítógépek tantárgy kiegészült számítógépi gyakorlatokkal. Ezeken a gyakorlatokon, évfolyamdolgozat gyanánt, különböző programokat kellett írni és futtatni a Minszk—22-n. A JATE Természettudományi karán 1970-ben végzett hallgatók (13 fő) oklevelébe került be Magyarországon először a programtervező matematikus végzettség.

JegyzetekSzerkesztés

  1. MN 1. oldal
  2. MN 2. oldal
  3. MN 4. oldal

ForrásokSzerkesztés