こんにちは、yasuです。
この記事は、traP夏のブログリレー 月日の記事です。
皆さん、今日が何の日かわかりますか?
なんと、今日はtraP夏合宿の初日です!
合宿楽しみ〜〜
合宿初日だと、バスの中で記事書けていいですね。
さて、本題に入りますが、みなさんコンピュータをゼロから作りたいと思ったことはありませんか。
でも、最初はどこから手を付けたらいいのかわからないですよね。
そんな方々に本日は、From Nand to Tetrisと呼ばれるプロジェクトの紹介をしたいと思います!
From Nand to Tetris(nand2tetris)とは
端的に言うと、汎用コンピュータを自分で手を動かしながらゼロから構築していくプロジェクトにです。
NANDゲートから様々な論理ゲートの作成に始まり、
最終的には、高級言語を用いたアプリケーションの作成までをすべて自分で行なっていきます。
また、これだけ色々なことをやるにも関わらず、プロジェクトの中で利用するハードウェアシミュレータなどのソフトウェアや資料(英語のみ)さらにはCousera[1]の講座まですべて†無料†で使うことができます。
このプロジェクトは全部で12の章からなり、
各章では実装の仕様と、資料が与えられ、
それに沿った実装をしていくような構成になっています。
以降は実際にどのような流れでプロジェクトが進んでいくのか大まかに紹介したいと思います。
プロジェクトの進み方
先にも述べた通り、プロジェクトは全部で12章からなり、1〜6章では主にハードウェア(Hackコンピュータ)について、7〜12章では主にソフトウェアについて扱います。
各章では、その章で実装すべきものの仕様が与えられるとともに、背景にある理論の説明も行われています。
第1章
- 主に論理ゲートの作成
- NAND回路をもとにAND, ORなどの論理ゲートを作成します
第2章
- 主に算術ゲートの作成
- 第1章で作成した論理ゲートをもとに加算器やALUなどを作成していきます
第3章
- 順序回路の作成
- Dフリップフロップ回路をもとにレジスタやプログラムカウンタなどを作成していきます
第4章
- Hackコンピュータで使用するアセンブリ言語の仕様をもとに乗算や、スクリーン表示などの簡単なプログラムの作成
- ここで、Hackコンピュータで使用するアセンブリ言語の仕様を理解すると以降の章が楽になると思います
第5章
- メモリ、CPUなどの作成および、コンピュータの実装
第6章
- アセンブリプログラムを機械語に変換するアセンブラを作成
第7章, 第8章
- バーチャルマシンの作成
- Hackコンピュータで用いる中間コード(スタック型バーチャルマシンのプログラム)をアセンブリ言語に変換します
- 7章では主に基本的な演算やメモリアクセス, 8章ではサブルーチン呼び出しを作成します
第9章
- このプロジェクトで使用するJack言語という高級言語についての説明
- Jack言語でいくつかプログラムを書いて置くと以降の章が楽になります
第10章, 11章
- コンパイラの作成
- 構文解析(10章)、コード生成(11章)を行い、Jack言語を中間コードへ変換します
第12章
- Jack言語で使用するライブラリの実装し、単純なオペレーティングシステムを作成します
- キーボード入力、スクリーン出力、文字列操作などのライブラリを作成します
最後に
面白そうだけど、英語はな...という方には、
コンピュータシステムの理論と実装という本では上記の内容を日本語で学ぶこともできます。
この記事を読んで、少しでも興味を持った方はぜひやってみてください。
それでは、合宿行ってきます〜!
明日はKejunくんの担当です、楽しみにしていてください。