これおもしろい

なにはともあれ1日1記事、いや、週1記事

「エミュレータ研究 PHPで学ぶコンピュータアーキテクチャ」の感想:1 / 3

※最初に断っておくと、完全に感想文です。悪しからず。
f:id:takattata:20181010234632j:plain:w300

面白い連載!

SoftwareDesign2018年6-8月号は読まれましたか?
この3月分には素敵な連載があるのですよ!
その名も「エミュレータ研究 PHPで学ぶコンピュータアーキテクチャ」。
ゲームボーイエミュレータを元にコンピュータアーキテクチャを学ぼうという連載です。

最高ですね!iOSDCに参加された方&&アンカンファレンスであったゲーム機のアーキテクチャを語るを楽しまれた方には心くすぐられるテーマではないでしょうか?

構成は

第1回:CPUのエミュレーション:6月号(8ページ分)
第2回:メモリとI/Oのエミュレーション:7月号(7ページ分)
第3回:画面表示のエミュレーション:8月号(9ページ分)

となっています。
本を読んで記事を書こうとすると、どこまで本の内容に触れて良いのか悩みますね...。
とりあえず、ここが面白かったんですよー!という感じで書いてみようと思います。

github.com この連載で題材となっているエミュレータリポジトリは↑こちら。

第1回:CPUのエミュレーション

はじめに

まず、ゲームボーイのスペックが載っています。
細かいところは分かりませんが、4色モノクロで160x144ピクセルRAM8KB/VRAM8KB、この辺りで歴史を感じてまずテンションが上がりますね!

次に、副読本としてオススメされていた、有志の愛好家によって書かれたゲームボーイの仕様の詳細ドキュメントを見て更にテンションが上がります。
http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf
なんと139ページ!
スペックやプロセッサ、メモリマップなどは勿論のこと、スプライトRAMのバグについても書かれていました。
どうやって調べ上げるんですかね...。すごい...。面白そう...。

CPU

ここまでが大体1ページ分の内容です。期待大の状態で、次はCPUの話に入っていきます。
ゲームボーイのCPUはLR35902なるもので、これはZ80のカスタムCPUだそうです。

はじめて読む8086―16ビット・コンピュータをやさしく語る (アスキーブックス)

はじめて読む8086―16ビット・コンピュータをやさしく語る (アスキーブックス)

この本を過去に途中まで読んだ覚えがあるのですが、8086はZ80と互換性あったりするのでしょうか?
調べてもいまいち分からなかったです...。

レジスタ

レジスタとは、から始まり、LR35902の特徴の紹介、その後にPCレジスタ、SPレジスタ、Fレジスタといった特定用途向けのレジスタ紹介があります。
ゼロフラグとかハーフキャリーフラグとかあったなー!という気持ちになりました。
基本情報技術者試験でも出てきましたっけ?たしか。(落ちてるからなんとも言えない)

命令セット

その後は勿論命令セットの説明です!
これいつも「そうなってるのかー、へー」と理解は出来るものの、実際に動くものを作るイメージがつかないんですよね。

$01 LD BC,d16
普段ずっとこういうものを書いていたらそんなことはないのでしょうが、たまに見る勢としては非常にテンションが上がります。そわそわします。
レジスタ操作、メモリ操作、演算、実行制御などの解説がされていきます。
キャリーフラグなどは演算時に使われますが、その説明を見て、Fレジスタの理解苦手だったなぁというのを思い出しました。
ちゃんと復習したい欲が掻き立てられます。

アセンブラで書かれたものを見た時に「何故ここでわざわざレジスタに格納してから他のレジスタに値を渡すんだろう」とか、「何故ここでわざわざジャンプして処理してから戻ってくるんだろう」と理解に苦しんでいた覚えがありましたが、今思えば効率やメモリマップの制約などがあったのでしょうか?
そう考えると全体を知っていないとろくなものが作れないであろうこの頃の開発者は本当にすごいなと思います。
当時からしたらジェネリクスとか理解出来る今の開発者すごいなとなるのかもしれませんが。

エミュレータ実装

さて!ここまでがゲームボーイ本体の話でした!
エミュレータなので、今まであった動きを実装していかなければなりません。
このコードのところに関しては、別途Kotlinバージョン読んでみた後に記事にしようと思います。
(でないとブログ書くハードルが上がって、この記事アップ出来ない気がする...。)

次は第2回!

メモリとI/Oのところです!これもすごく楽しかったんですよー!
明日書きますー。

第1回が載っている号はこちら。
gihyo.jp