動かしてわかるCPUの作り方 第1~3講
第1講 ソフトウェアからCPUの動作をイメージする
1から10までの合計する計算を例に、C言語、インラインアセンブラ、の順番に理解を深めていく。曰く、「ソフトウェアからPUの動作をイメージする」。
この辺は理解しきっているのでさすがに得るものはなかった。ただ、これらを知らなかった昔の自分はどのぐらいすんなり理解できただろうか。高校生の時にZ80(書籍だけ)やPICに触れていたので、もっと昔まで遡る必要がありそう。
ふと思い出したことがあった。プログラミング言語は英単語がたくさん出てくる。そのため、英語のスペルをきちんと習得していないと、写経するだけでもエラーがいっぱい出てきて挫折する。特に、Win32プログラミングはひたすらAPIが長い上に、昔はIntelliSenceもなかったので、完璧に挫折した。
第2講 シンプルなCPUのアーキテクチャを決定する
内容からすると、命令セットの導入と同義である。
ハーバードアーキテクチャを採用する。PICもこれを採用していて、当時は宣伝文句になっていた気がする。電子工作レベルでは、動的にプログラムを書き換えることもないので、特にアーキテクチャを気にすることはなかった。
Wikipediaの説明によれば、キャッシュがデータと命令で分かれている最近のCPUでは、事実上ハーバードアーキテクチャらしい。主記憶まで含めれば依然としてノイマン型アーキテクチャになる。
命令は15bit、データは16bit。命令は4bit、レジスタ種類は3bit、8種類、即値は8bit。プログラムカウンタは8bit、よって即値で任意箇所に移動(Jump)できる。主記憶のアドレスも8bit、よって即値で任意メモリにアクセス(Store/Load)できる。
命令セットの設計こそが肝で、パタヘネでも丁寧に説明しているのだが、本書では天下り的に与えられている。ここは、書籍の趣旨からすると仕方ないかもしれないが、RISCの醍醐味が感じられないくてちょっと残念な気もする。
第3講 C言語を用いてCPUの動作をエミュレートする
簡易型アセンブラとCPUエミュレーションが一体となったソースコードが提示されている。コードを最後まで見れば一目瞭然なのだが、書籍の冒頭にある説明から読むと、何の話をしているのか全然分からず混乱した。
前者は、ある種のDSLとして実現されている。そう書いておいてくれれば良いのに。コードを見るまで何の説明をしているのか全く分からず頭を抱えた。
後者は、極めて素直なエミュレータで、これも命令セットと同様で天下り的に与えられている。
書籍として読むのは簡単だが、コードを写経してみるのも面白い。C言語で実装したが、オペコードと演算子が一対一対応していることを実感する。|=や&=、三項演算子で記述がどんどん短くなる。
一箇所、エミュレータのLDL命令で、即値と0xffでANDをとっているところがある。即値を返す関数で0xffとANDをとっているので、冗長だが、何か意図的だろうか。フェールセーフにしては、他のところでそういうケアをしていないので、一貫性が無い。
せっかくなので書籍の紹介。