NANDゲート(のみ)から始めて、テトリスが動くコンピュータを作るという本。 およそ12章からなり、1章から5章で著者が仕様を決めたHACKと名付けられたコンピュータを(電子回路(=HDL)で)自作する。 本書は読みものというよりも、各章に課題がありそれを解いて体得していくことを目的とした構成となっている。 そのため読むだけで理解することを期待したい場合は、別の書籍が良いと思われる。 しかし、私自身も当初1~5章は課題をせずに読み進め、6章から課題を進め、全章読み終わった後に1~5章の課題に戻ってきた。 1~5章はハードウェア、6~12章はソフトウェアの内容であるため、この進め方でも問題なかった。
HACKコンピュータは読者が作りやすく理解しやすい仕様に工夫されている。 勿論、コンピュータの自作と言ってもブレッドボードや半田ごてが必要になるわけではない。 ハードウェアやCPUのシミュレータやエミュレータが用意されており、それらを使いながら自作していく。 単純な論理回路から加算器やマルチプレクサ等の組み合わせ回路、そして順序回路を順次作成していく章立てになっており、 最後にHACKコンピュータの仕様に沿ったCPUやコンピュータを作成することになる。
6章からはHACKコンピュータ上で動くソフトウェアを(読者の好きなプログラミング言語を用いて)作成していく。 まずHACKコンピュータのマシン語仕様に則ったアセンブラを作成し、続いて作者が定義したバーチャルマシン(VM)中間コードからアセンブリコードを生成する変換器を作成する。 そして10章、11章で、JACKと呼ぶ著者が定義したオブジェクト指向言語のコードを、VMコードにコンパイルするコンパイラを作成することになる。 このJACKの言語仕様も構文解析しやすい(コンパイラが作りやすい)ように、非常に工夫されている。 というのは(JACK言語自体は決して実用的な言語ではないが)、最大でも1トークンの先読みで構文解析できるようになっている。
11章までは著者が用意した(メモリ管理やエラー処理、描画処理等の)VMコードを利用して、それが正しく動くか確認しながらコンパイラの作成を進めていく。 12章ではこれらメモリ管理等の基本的な処理を行うコード自体を(これを著者はOSと称している)読者がJACK言語を使って生成する。 最後に著者が用意したPongというJACKで書かれたゲームを自作OSを使って動かす。 これが動けば読者がNandゲートを元に、テトリスが動くコンピュータをシステムも含め自作したの実質同じことになる。 (実際にはテトリスをJACK言語で作ったところで、提供されるエミュレータでは速度の意味で満足には動かないと思われるが、 エミュレータが十分速ければテトリスの作成もHACKとJACKを使えば十分可能なはず。)