Elektronika MK-61 (ロシア語: Электроника МК-61) は、1983年から1994年までの間にソ連で製造されたRPNプログラム電卓である。
当初の販売価格は85ルーブルであった。

Elektronika MK-61は、15本のデータメモリと105ステップのプログラムメモリを備えたプログラム電卓である。4レベルのスタックとLastXレジスタを備えたRPN電卓でもある。
間接指定機能が豊富であり、しかも内部コードの半数超を間接指定命令で占めており、間接指定機能を重視していることが窺える。しかしながら、間接指定時のデータメモリの直交性は考慮されていない。(特徴の項を参照)

## 概要

- 精度
  - 仮数8桁、指数2桁

- スタック
  - スタックレベル: 4レベル(X、Y、Z及びT)
  - スタック操作機能: 「В↑」(ヒューレット・パッカード社(以下「HP」と略す)の電卓における「ENTER↑」に相当)、「⇔」(HP電卓の「X<>Y」に相当)、「↑○↓」(HP電卓の「R↓」に相当)

- データメモリ
  - データメモリ数: 15本(RG0-RG9及びRGa-RGe) 並びに X1レジスタ(HP電卓のLastXレジスタに相当)
  - データメモリ操作機能: リコールメモリ「П→X」、ストアメモリ「X→П」、リコールX1「Вx」

- 数学機能
  - 三角関数、逆三角関数、対数関数、指数関数、16進計算(AND、OR、XOR「(+)」、NOT「ИНВ」)、疑似乱数「СЧ」、度分変換、度分秒変換、整数部、小数部「{x}」、絶対値、符号(SIGN)「ЗН」、など

- プログラム
  - プログラムメモリ: 105ステップ
  - プログラム機能: 無条件ジャンプ「БП」、条件ジャンプ(「X<0」,「X=0」,「X≧0」,「X≠0」)、ループ支援(RG0用「L0」,RG1用「L1」,RG2用「L2」,RG3用「L3」)(プログラム例の項を参照)、サブルーチンコール「ПП」、サブルーチンからのリターン「В/0」、停止「С/П」、など
  - プログラム編集機能: プログラム編集モード移行「ПРГ」、実行モード移行「АВТ」、ステップ進む(FST)「→ШГ」、ステップ戻る(BST)「←ШГ」、など
  - プログラム実行機能: 先頭アドレス00へ移動「В/0」、実行・中断「С/П」
  - プログラムアドレス指定: 絶対アドレス。先頭のアドレスが「00」であり、最後が104であるが、100から104までのアドレスは「-0」、「-4」等と表示される。

- 間接指定機能
  - 「К」。「П→X」,「X→П」,「БП」,「ПП」,「X<0」,「X=0」,「X≧0」,「X≠0」とともに使用する。(特徴の項を参照) 「К」には第2シフトの機能もある。

- ハードウェア
  - スライドスイッチ: 2個。左側が電源スイッチで、右側が角度単位指定スイッチ(Р:ラジアン、ГРД:グラード、Г:度)となっている。
  - 入力装置: 30キー(写真参照)。キーストロークが浅く、キーを押した感覚はほとんどないものを使用している。シフトキーが2個あり、第1シフトキーが「F」、第2シフトキーが「К」となっている。「К」キーは間接指定にも用いる。
  - 表示装置: VFD 12桁。表示桁の配置は、左から、仮数の負号用1桁、仮数用8桁、指数の負号などに使用する1桁、指数用2桁となっている。仮数負号桁と指数負号桁には数字は表示できない。従って、数字用だけであれば10桁である。
  - 電源: А-316(単三形)電池3本 又は 専用ACアダプタД2-10М(D2-10M)(220V50Hz専用)
  - メモリの揮発性: スタック、データメモリ、プログラムの記憶域は、全て揮発性である。

## 特徴

### データメモリと間接指定時の動作

MK-61は15本の汎用データメモリレジスタを備えているが、間接指定時の動作にはレジスタ毎に下表の通り差異がある。

| レジスタ 名 | レジスタ 番号 | レジスタ コード | 押下 キー | 間接指定時の動作 |
| --- | --- | --- | --- | --- |
| RG0 | 0 | 0 | 0 | デクリメント後アドレス評価 または アドレス評価後デクリメント |
| RG1 | 1 | 1 | 1 |
| RG2 | 2 | 2 | 2 |
| RG3 | 3 | 3 | 3 |
| RG4 | 4 | 4 | 4 | インクリメント後アドレス評価 |
| RG5 | 5 | 5 | 5 |
| RG6 | 6 | 6 | 6 |
| RG7 | 7 | 7 | 7 | アドレス評価のみ |
| RG8 | 8 | 8 | 8 |
| RG9 | 9 | 9 | 9 |
| RGa | 10 | - | . |
| RGb | 11 | L | /-/ |
| RGc | 12 | [ | ВП |
| RGd | 13 | Г | СХ |
| RGe | 14 | E | В↑ |

(間接指定のプログラム例)

| プログラム アドレス | キー入力 | 命令 コード | 説明 |
| --- | --- | --- | --- |
| 00 | 「4」 | 04 | 4を置数 |
| 01 | 「В↑」 | 0E | ENTER↑ |
| 02 | 「К」「БП」「3」 | 83 | RG3の内容をデクリメント後、RG3の値のアドレスへジャンプ |
| 03 | 「F」「√」 | 21 | 平方根 |
| 04 | 「2」 | 02 | 2を置数 |
| 05 | 「+」 | 10 | 加算 |
| 06 | 「К」「БП」「4」 | 84 | RG4の内容をインクリメント後、RG4の値のアドレスへジャンプ |
| 07 | 「+」 | 10 | 加算 |
| 08 | 「3」 | 03 | 3を置数 |
| 09 | 「×」 | 12 | 乗算 |
| 10 | 「К」「БП」「a」 | 8- | RGaの値のアドレスへジャンプ |
| 11 | 「-」 | 11 | 減算 |
| 12 | 「С/П」 | 50 | 停止 |

プログラム実行前に

|  |
| --- |
| 「5」「X→П」「3」 |
| 「7」「X→П」「4」 |
| 「1」「2」「X→П」「a」 |

として、RG3に5を、RG4に7を、RGaに12を入れておく。

「В/0」(プログラムの先頭アドレス00に移動)、「С/П」(プログラム実行)を押してプログラムを実行すると

という結果が表示される。これは、(4+2)×3の演算結果であるが、上記のプログラムを見ても なかなか わかりにくい。

アドレス02の間接ジャンプでは、実行前にRG3に入れた値の「05」ではなく、デクリメントされた「04」のアドレスへジャンプしている。
同様に、アドレス06の間接ジャンプでは、実行前にRG4に入れた値の「07」ではなく、インクリメントされた「08」のアドレスへジャンプしている。
ただし、アドレス10の間接ジャンプでは、RGaの値「12」のアドレスにそのままジャンプしている。

その結果、アドレス「03」「07」「11」のコマンドは飛ばされて実行されないことになる。

### 演算・関数

1. 「max」は、スタックXとスタックYのうち値の大きい方を返す演算(アリティが2の最大値関数)であるが、以下の注意点がある。

- スタックXとスタックYの少なくとも一方がゼロである場合はゼロが返される。オペランドの片方がゼロで、もう片方が正数である場合には、返される値ゼロは最大値ではない。
- 返された値はスタックXに上書きされるだけで、スタックの下降はしない。スタックYに演算前のオペランドの片方が残っている。

2. 「x」は、冪乗(累乗)演算であるが、HP電卓の「y」とはオペランドの順番が逆となっている。

## プログラム例

2 以上 69 以下の指定した整数の階乗を計算するプログラムの例を示す。

| プログラム アドレス | キー入力 | 命令 コード | 説明 | スタック |
| --- | --- | --- | --- | --- |
| 00 | 「X→П」「0」 | 40 | スタックXの値をRG0にストア | - |
| 01 | 「1」 | 01 | 1を置数 | 上昇 |
| 02 | 「П→X」「0」 | 60 | RG0の値をリコール | 上昇 |
| 03 | 「×」 | 12 | 乗算 | 下降 |
| 04 | 「F」「L0」 | 5Г | RG0の値が 2<=RG0 ならば、RG0をデクリメントし、命令の2バイト目で指定されたアドレス(ここでは02)へジャンプする。 RG0の値が 1<=RG0<2 の範囲ならば次の命令のアドレス(ここでは06)へ進む。 | - |
| 05 | 「0」「2」 | 02 |
| 06 | 「С/П」 | 50 | 停止 | - |

「ПРГ」でプログラム編集モードに入り、上記プログラムを入力する。「АВТ」で実行モードに戻り、計算したい数値を、例えば、

などと入力し、「В/0」で先頭アドレス00へ移動し、「С/П」でプログラムを実行すると、暫くして、結果が、

のように表示される。

## ギャラリー

- プログラムモードのMK-61が2台並んでいる
- 裏面
- ロシア語マニュアル
- メイン基板(表)
- メイン基板(裏)と電源基板(表)
- 電源基板(裏)
- 回路図