マーク1の詳細
目次
符号転送
先に書いたように、70 番カウンタに、計算結果の符号だけを送る機能があります。
計算時に、MISC. に 432(または 7432)を指示します。
条件停止
こちらも先に書いたように、72番カウンタを使った条件停止ができます。
MISC. に 64 を指示します。
関数
LIO (LOG IN OUT:765421), EIO (EXP IN OUT:7621), SIO (SIN IN OUT:874)とよばれる3つの特殊カウンタがあります。
これはオプション機器で、接続した時だけ使えました。
カウンタに値を入れ、続いて読み出すと、結果が得られました。
使った後は、必ず「リセット」する必要があります。
LOG は 114~298cycle 、累乗は 172~218cycle 、SIN は 199cycle かかります。
こちらも、各種設定を配線で行えます。
これらの値は、「リレーによって表引きされて求められる」という趣旨のことがマニュアルにあるので、数値計算などではなく、何らかの形で表引きを実現しているようです。
自動増加
MIO (MULTIPLE IN OUT:853,8531) と呼ばれるカウンタは、内部動作ごとに自動的に増加していきます。
書き込むことはできませんが、読出しとリセットができます。
特に明確な目的があって作られたものではないようですが、マニュアルによれば「パンチカード出力の際、この値を入れておけば、後でソートする際に役立つだろう」。
正規化
数値を入れると、「正規化された小数点形式」で表現してくれる特殊装置があります。
normalizing register(8321) と呼ばれています。
正規化というのは、科学計算ではよく使われる方法です。
光の速度を秒速 299792458m を、有効数字4桁で正規化すると、2.997*10^8 のように表現できます。
元々の「数値」が、23桁のどこに小数点があるのか(固定小数点)を、あらかじめ配線によって設定しておく必要があります。
また、正規化する際の有効桁数の設定も必要です。
値を入れた後に、有効桁数の数値と、10の指数を別々に読み出すことができます。
そのほか周辺機器
IBM が作った機械ですから、IBM 標準パンチカードの入出力(読み取り(863)・パンチ(753))も可能でした。
カード1枚で 80桁の数値が表現できますから、ASCCに読み込ませるには桁が多すぎます。
どの桁をASCC に送り込むか、などは、プラグボードの配線を組み替えることで指定したようです。
プリンタも2台(752,7521)接続されています。
配線による指示を与えることで、数値の印字方法を変えられました。
(小数点の位置の指定や、1行にいくつの数値を印字するか、表組みする際のタブ位置など)
バリューテープ
紙テープにデータを記述し、読み込むことができました。(85,851,852)
読み込んだデータはもちろんカウンタに送ることも出来ましたが、乗除算器などに直接送ることはできないなどの制約もありました。
4bit で 0~9 を表すことになりますが、BCD ではありません。
次のような対応になります。
余談
マニュアルでは、プログラムを示すのに、「Code」という言葉を使っています。
ENIAC が電気コードを差し替えることでプログラムを行ったので、プログラムを「コード」と呼ぶ、という話を聞いたことがあるのですが、「コード」という用語が ENIAC 以前から使われていたことになります。
もっとも、ASCC 以前から存在している IBM のパンチカード集計機などでは「電気コード」でプログラムを作ったので、コード=電気コード説を否定するものでもないです。
命令紙テープの、OUT / IN / MISC. のいずれにも何もパンチしない、つまり全く穴の開いていない行は、「何もしない」ようです。
プログラム例の中でも、意味の区切りとして空行を入れて読みやすくしてある例がたびたびありますが、実用的な例に行くにしたがって、その空行も減ります。
空行も当然実行時間が取られたようで、ただでさえ遅い機械なので空行を空けない方が良いのでしょう。
もちろん、積極的に使う命令ではないため、いわゆる「NOP」のように、この命令に名前を付けたりもしていません。
ASCC はアメリカで最初の…昔は、世界で最初の「プログラム可能な計算機」だとされていました。
(今は、ツーゼ Z3 の方が古いと判明しています)
そのため、コンピューターの歴史を取り上げるときには、ASCC (もしくは、ハーバード・マーク1)が登場することは多いのですが、詳細は一般に知られておらず、勘違いした描写が多いです。
財団法人C&C振興財団がまとめた「コンピューターが計算機と呼ばれた時代」では、リレー式計算機だったとされています。どうも、Z3 がリレー式であることと混同したようです。
洋書ですが、「COMPUTERS an illustrated histoty」では、ASCC は(後の ENIAC のように)配線によってプログラムを行った、とされています。(ここでも、プログラムコード=配線説が書かれている)
手元にある本では…それなりに専門書のはずなのですが、正しい記述の方がむしろ少ない、という寒い状況です。
まぁ、それだからこそ、マニュアルを見つけて面白かったからこのページを書いたのですが。
おわりに
非常に簡単ではありますが、以上で説明を終わりにします。
実際には、関数の使い方などはもう少しややこしいです。現代のコンピューターのように、明示的な「命令」がなく、IN と OUT の番地指定の特定の組み合わせが意味を持つ場合も多々あります。
IN / OUT の組み合わせ方の制限や、明示的ではなく内部動作を変える命令などは、ややこしいので説明していません。
興味を持った方は、マニュアルを読んでみてください。ここに書いた知識を前提として読めば、英語でもそれほど難しくないと思います。
参考文献 | |||
A manual of operation for the Automatic Sequence Controlled Calculator | The staff of the computation laboratory | 1946 | Harvard University Press |
誰がどうやってコンピューターを創ったのか? | 星野 力 | 1995 | 共立出版 |
コンピューターが計算機と呼ばれた時代 | 財団法人C&C振興財団 | 2005 | アスキー |
COMPUTERS an illustrated history | Christian Wurster | 2002 | TASCHEN |
その他、WEB上の各種ページ |