Zuse Z1 の演算機構
和田 英一 (IIJ 技術研究所)

wada@u-tokyo.ac.jp
Konrad Zuse がプログラマブルな機械式 2 進法計算機を試作したのは 1936 年頃といわれている [0]. Zuse 関係の文献は整理されていて, インターネットで取ることが出来る [1]. 機械式であったとか, 2 進浮動小数点方式であったとか, プ
ログラムはフィルムに空けた穴で表わすとか, ほぼ同様なアーキテクチャでリレー制御の Z3 には平方根命令があったとかは判るが, 肝心の演算機構は定かではなかった. やっと別の文献 [2] にいろいろ書いてあることが判明した. しかし,どうもこれを書いた人達も精通しているとは思われない節もある.
以下では私流の解釈で, Z1 の演算機構を説明したい.

論理演算機構素子は左の図 0 のように金属の板に空けた穴に棒が差してある構造である.
金属板は離ればなれに描いてあるが, 実際は層状に重なっている. 次の図 1で名称を紹介するが, 上から能動板, 受動板, 制御板といい, 図ではリレーでいえば電流が流れていない時 (定位) を示す. それぞれ矢印の方向に動くことが出来る.

能動板

x

リレーでは, 節点を閉じればすぐ電流が流れるが, 機械回路ではそうはいかない. 節点を閉じ, 回路の一端に電圧をかけるともう一方の端に電圧が出るような仕掛けである. 電圧をかけるのに相当するのが, 能動板を x 方向に矢印分動かすことで, この図では能動板を動かしても棒の位置には影響を与えず, 従って受動板は動かない. 最下段の制御板を y 方向に動かすと,棒も y 方向へ矢印分動き, その状態で能動板を x 方向へ動かすと, 棒も x方向へ動き, 受動板も x 方向へ動く. これが基本である.

受動板

yx制御板

図 0 基本素子

能動板

能動板

制御板
基本素子
Einfaches Schaltglied

能動板

x受動板

能動板

遊動板受動板

y能動板 bewegendes Blech
受動板 bewegtes Blech
制御板 steuerndes Blech
遊動板 schwimmendes Blech

受動板

制御板

制御板
論理積
Konjunktive Verknüpfung

遊動板

制御板

遊動板

受動板

制御板
論理和
Disjunktive Verknüpfung

制御板
制御板
排他的論理和Disvalente Verknüpfung

図 1 論理演算機構

0金属板を使った機械式論理回路を図 1 で説明する. 左上が基本素子で図 0 と同じものである. 各板の相対位置は棒の位置から判断出来る. このまま能動板が右 (x 方向) に動いても, (黒丸で示す) 棒の左の空間のため棒は動かず, 従って受動板も動かない. 制御板が上 (y 方向) に動くと, 棒はそれに押されて上に移動する. すると能動板では棒の左の空間がなくなるので, 能動板が右に動けば棒も右に動き, 受動板も右に動く.
基本素子の下が論理和で, 右方に制御板が 2 個ある. このままで能動板を右に動かしても, 受動板には影響はないが, 制御板のいずれかを上に動かせば, 能動板ではいずれかの棒の左方の空間がなくなり, 棒を右方に押し遣り, 受動板が動く.
基本素子の右隣りが論理積である. これでは遊動板を 1 枚使う. 下方の制御板がともに上に動いていれば, 棒はともに上に移動していて, 能動板が動けば遊動板も動き, 遊動板が動けば受動板も動く仕掛けである.
一種独特な切掛けの遊動板を 2 枚用意すると, 排他的論理和が実現出来る. 制御板をこのままにしておき, 能動板を右に動かすと, 左の棒は右に動く. 従って上の遊動板は右に動くが, 下の遊動板は動かない. いずれにしても右の棒を動かすことは出来ず, 受動板は動かない.
次に左の制御板が上に動いたとすると, 左の棒も上に動き, 能動板を右に動かすと下の遊動板が機能して右の棒も動き,受動板も右に動く. また右の制御板が上に動いたとすると, 上の遊動板が機能して右の棒が動き, 受動板も右に動く仕掛けである. 両方の制御板が上の位置にあるときは, 最初と同じで受動板を動かすことは出来ない.
論理演算にはこの他に否定があるが, 梃子の理で押し引きを逆にすればよい.

桁あげ予測回路
Z1 は 2 進法の浮動小数点演算回路を持っていたといわれる. 演算の基本は加算なので, それを考える.
まず (a7 a6 . . . a0 )2 と (b7 b6 . . . b0 )2 を各桁ごとに足して (c7 c6 . . . c0 )2 を得る. 次に下の桁からの繰上がりだが, c0 には加算の時は繰上がりは来ない. a0 と b0 がともに 1 のとき, c1 に繰上がりが来る. この繰上がりは c1 に影響する他,
a1 . . . と b1 . . . が 0 と 1 の組である限り上に伝わっていく. a1 . . . と b1 . . . が 0,0 か 1,1 になると止る. それを見ているのが ci で開閉するスイッチの絵である.
最左端の AND は c7 のスイッチから来る繰上がりとともに, この加算のオーバーフローをを決める.
最右端の c0 のスイッチは減算の時, 1 の補数の加算に加える繰上がりを注入する口である. 減算の時は bi を上の XOR,AND に入れる前に補数にする. 従ってもう 1 段の XOR 回路が必要である.
図 2 の XOR, AND の入力は図 1 の制御板に対応している. 機械式計算回路を構成するときは, 制御板入力が確定した時点で, 能動板を動かすタイミングが必要になる. それにより受動板から出力が得られる.

a7 b7a6 b6a5 b5a4 b4a3 b3

a2 b2

a1 b1

a0 b0

XOR

XOR

XOR

XOR

XOR

XOR

XOR

XOR

a7 b7c7AND

a6 b6c6AND
c7a5 b5c5

AND
c6

a4 b4c4AND
c5

a3 b3c3

AND
c4

a2 b2

c2

AND
c3

a1 b1

c1

AND
c2

a0 b0c0AND
c1c0c7

c6

c5

c4

c3

c2

c1c0

XOR

XOR

XOR

XOR

XOR

XOR

XOR

XOR

e7e6

e5

e4

e3

e2

e1e0

図 2 加算回路

記憶装置
記憶装置も大変ユニークであった. 図 3 の左端は 22 ビット 64 語の記憶装置の始めの方を示す. 各語は縦方向のビット列で構成され, それらが語 0 から語 1, 語 2, ... と横方向に並ぶ.
図 3 で右へ順に分解した部品を示す. 最初が固定板 (c) で, 「凹」の字を上下逆したような穴が開いていて, そこに棒を差す. その上に各語に対応した縦向きの細胞板 (a) が来る. 更にその上 (かどうかは関係ないが) に各ビットに対応した横向きの制御板 (b) が乗る.

1

語を選択するときは, それに対応した a の板を動作させる.
...
ビット1bビット0b

固定板 Festblech
細胞板 Zellenblech
制御板 Steuerblech

制御板
語0語1...

c固定板

aa細胞板

図 3 記憶装置
読出しの手順は次の通り (図 4). 左から順に操作する. まず読み出す語の a の板を上に動かす. すると棒は 0 にあれば0’ へ, 1 にあれば 1’ へ移動する. a は制御板として働く. 次にその a を右に動かす. 0’ にある棒は b の突起に当り, b を右へ動かす. また 1’ にあると, a により右へ押されることはなく, 突起には当らず b は動かない. この a は能動板といえる. b の右方への動く, 動かないで対応するビットが 0 か 1 かが判明する. 従って b は受動板に相当するといえる.
図には示さないが, 読み終ったら 0 の場合は a を左へ戻し, b を左へ戻し, a を下へ戻す. 1 の場合は a を左へ戻し, 下へもどす.
書込みは図 5 に示す. 書く前にその記憶が 0 か 1 かは判らないので, 始めの棒の位置は示してない. 0 を書くビットは bを右へ 2 単位動かし, 1 を書くビットは b を左へ 2 単位動かしておく. 次に a を上に動かす. b をもとへ戻すと棒は 0を書くか 1 を書くかにより 0’ か 1’ に来る. そこで a を下に動かすと棒は希望通り, 0 か 1 の位置に収まる.

0’01’
10’
01’
10’
01’10’
01’
10’
01’
11を読む時

0’01’
10’
01’
10’
01’
10’
01’
11’
10’
01’11を書く時

0’01’
10’
01’
10’
01’
10’00を読む時

0を書く時

図 4 記憶読出し

図 5 記憶書込み

参考文献[0] Raúl Rojas: “Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3,” IEEE Annals of the History ofComputing, Vol.19, No.2,1997,pp.5-16.
[1] http://www.zib.de/zuse/English Version/index.html[2] U. Schweier & D. Saupe:“Functions und Konstructions prizipien der programmgesteuerten mechanischen
Rechen mashcine Z1,” Arbeitpapiere der GMD 321, Bonn, 1988.

2