見出し画像

EDSACは教えないで

大学の計算機基礎という実習では、なんとEDSACを学んでいました。まさか実機が使えるわけはありません。PC9801で動くシミュレータでEDSACの命令を打ち込んで、動作させて結果を得ることでマシン語やアーキテクチャを覚えましょうという内容でした。

EDSACというのは、はじめてのプログラム内蔵式コンピュータです。はじめてのコンピュータとして名前が出てくるENIACは、コードを使って物理的にプラグを繋ぐことでプログラムを構成していました。言ってみればハードウェアでプログラムしていたのです。イメージとしてはパッチボードでコードを繋いでいたアナログシンセみたいなものです。ですからソフトウェアでプログラムを書いたり直したりすることは当然できないわけです。

最初のコンピュータ

コンピュータの歴史

マシン語を覚えるというのは、大切な意味があるとは思いますが、EDSACはやりすぎです。この時代のアーキテクチャを覚えたところで、既にPC9801を使っているというのに、時代遅れなことこの上ありません。インデックスレジスタは途中で追加されましたが、スタックなんてありません。モダンなCPUでは大切なアドレッシングモードを理解するのになんの助けにもならないのです。

まともなアドレッシングモードがないので、レガシーなCPUでは当たり前ではあったのですが、プログラムの自己書き換えというのをやるんです。アドレスを計算で求めるようにするにはプログラムコードのオペランドにあるアドレス部分を計算結果で書き換えて実行することで実現するのです。

確かに自己書き換えのテクニックが必要な時代があったことは確かですが、もうこれをやってはいけません。この技術が活用されるのはウィルスを作るときくらいです。今はコードが格納されているメモリ空間は基本的には読み出し専用として保護され、書き換えようとすればメモリ保護違反が発生することが期待されます(もっとも歴史的な理由で多くのUNIX系OSはコード部分の書き換えが可能なことがあります)。

これをようやくプログラミングを覚えようという学生に教えて碌なことはありません。機械語のレベルではコードもデータも単なる2進数の値であって、CPUがどう解釈するかで、意味が変わるだけだというのは高級言語にはない話で、これを理解するのは大事ですが、何もEDSACまで遡ることはありません。

実習の合間に、これは駄目だよ、せめてPDP-11とかにならないかと直訴した覚えがありますが、決まっているカリキュラムを変えるのはそう簡単ではないらしく、この実習がなくなったのは、学科再編のタイミングを待つことになったようです。そのタイミングでマシン語やCPUのアーキテクチャを学ぶ実習自体が無くなってしまったようです。

実習ではEDSACのハードウェアについては、さほど突っ込んだ解説は無かったのですが、その後、調べてみるとレジスタだけでタンスひとつ分のサイズがあり、水銀遅延管というデバイスがメモリとして使われていることがわかりました。シリコンな時代の人間としては、磁気コアメモリまではなんとかついていけますが、想像を絶する世界でした。

1ワードは17ビットで、2ワードを組みにして使うことができ、この場合にはサンドイッチビットというビットが追加されて35bitとして使うことが出来ます。アドレス空間は10ビットです。命令は1ワードで、上位5ビットが命令コードで、オペランドとしてアドレス空間である10ビットが使われます(残り2ビットは別の意味)。

面白いのが文字コードが5ビットのものを使っていたので、命令が文字1文字に対応していることです。アセンブラがない時代にはなかなか書きやすくはあります。データを入力するときも、この書式でメモリに書き込んでやるわけです。

興味が出てきた方はシミュレータがいくつかあるようです。

ブラウザ上で動くEDSACシミュレータを公開しました

EDSACシュミレーターで遊ぶ

命令コードは18しかありませんが、これだけでも結構いろいろなことができるものです。さっそくゲームも作られてマルバツゲームとかできたようです。

EDSAC

写真は、以下から使わせていただきました。
https://commons.wikimedia.org/wiki/File:EDSAC_(19).jpg


この記事が気に入ったらサポートをしてみませんか?