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 a 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 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ő módosításait 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 bélyegkép|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 , 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 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 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) 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 -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 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 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 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 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.