Minszk–22

A Wikipédiából, a szabad enciklopédiából
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

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


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.

Története[szerkeszté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ése[szerkeszté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ég[szerkeszté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ég[szerkeszté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észlet[szerkeszté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ások[szerkeszté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ások[szerkeszté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ások[szerkeszté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ása[szerkeszté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ágon[szerkeszté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ás[szerkeszté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.

Jegyzetek[szerkesztés]

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

Források[szerkesztés]