後書き
改めて、なぜ二進数なのか… 考えるまでも無いでしょう。コンピュータは10進数に慣れてるわけでも、桁が多いと混乱するわけでもないので、数値を表すのに最もシンプルな二進数に落ち着くのは自然な結末です。
※史上初のコンピュータといわれるENIACは十組の真空管のうちどれが1かで十進数を表す二値~十進コンピュータです。
コンピュータは最初から二値をあつかっていたわけです。ただし、二進数に発展するのはその後のEDSACになります。
プロセッサはGATEの組み合わせで色々な機能を実現しています。符号付き加算の結果オーバーフローフラグが立つ条件は、「加算する2つの数の符号が同じで、加算される数と結果の符号が違っていた時」です。i8086は256個のテーブルから1つ引いてくるXLATという命令がありました。イマドキのプロセッサコアは1サイクルあたり64ビット浮動少数演算を16個処理できます。
これらは「ナニカCPUの出来るコト」を組み合わせているのではなく、単純な論理GATEの組み合わせて出来ています。GATEの数は膨大ですが、基本的な作りは8ビットのAND演算と違っているわけではありません。
真理値表を回路に変換する方法には Look Up Table というのがあります。これはあり得る入力と出力の組み合わせの全てのパターンについて、1つの決まった方法を提供します。
「1の場合に注目」するやり方はPLDやCPLD、Look Up Tableを使ったやり方はFPGAと呼ばれるデバイスが採用しています。
参考文献はi8080 Datasheet、MC6809 Datasheet、6502BlockDiagramを挙げておきます。
私は参考文献として「これ読んどけば大丈夫、全部書いてあるから」と言えるものにまだ出会っていません。NAND2Tetrisはトランジスタの組み合わせで回路を作る方法について書いてありません。回路設計とアーキテクチャやCPUの作り方系の本は実装になるとVHDLに行っちゃうか、74181使うかになるんですよね。
このシリーズは読んでもぴんと来ない所が多いでしょう。でもいつか、動作原理を調べる上で「あ、あそこに書いてあった」と思い出す場面があったらなと思います。そして最後に。
コンピュータはスイッチのON/OFFの連鎖だけです。