6502

エミュレータを作りたいなぁとだいぶ前から思ってて、

ようやく先週、重い腰が上がって、図書館でそれっぽいのを2冊借りてきた。

 

www.amazon.co.jp

 

www.amazon.co.jp

 

2冊とも随分ふざけた表紙だが、レビューにもある通りいい本である。

 

『CPUの創り方』はエミュレータではなく実際にICとか買ってきて半田ごて持って頑張ろうって内容で、

最終的には4bitCPUのTD4(TとりあえずD動作する4bitCPU)を作る。

筆者がラフなのもあって電子工学的な部分の説明も理解しやすかった。

 

x86アーキテクチャの方はなかなか高難度な内容で、Mod R/Mレジスタあたりの話で挫折した。

この本へは、ある程度知識がたまってから出直すことにした。

 

上記2冊(実質1冊)を読んだあとに、TD4のエミュレータを自作するところから始めた。

初めてエミュを書くので調べつつやって6時間ぐらいでどうにか完成。

ちなみに言語はC++

f:id:hxbdy541:20181112102107p:plain

要はこれを8bitまで拡張するだけなのだ。(?)

 

もちろん作りたいエミュはnesで、nesが使用しているCPUはリコー製6502カスタムだと読んだので、

手始めに6502エミュを作成することにした。
詳細な文章は今度Qiitaにでもあげるつもりでいる。完成すればだけど。

 

基本は以下の2つのサイトをみながら作成していく。

hp.vector.co.jp

 

NesDev.com: Info, programs, and more!

 

日本語で書いてくれているNES研究室の命令表を見ながら基本はコーディングしている。

NesDevの方は基本英語で書かれているが、こっちの方は仕様書とかが多く管理されていて情報量は圧倒的である。

フォーラムには「エミュレータの作り方を聞かないで下さい。それはあなたの勉強不足で、私はうんざりしてる。」

みたいな不満爆発の人がいて面白い。

もっとテクニカルなやりとりにしか興味がないみたい。

 

大まかな流れを掴みたいのであれば、以下のサイトを見ると良いと思う。

 

qiita.com

 

以前、少しだけどZ80をハンドアセンブルで動かしたことがあって、当時の感覚で、

6502も上位4bitをオペコード、下位4bitをイミディエイトみたいな感じにコーディングしてたら、

メモリの扱い方がそもそも間違ってて、オペコード、イミディエイト、イミディエイトの順で

メモリに格納されていくスタイルだったことに途中で気づいて回収作業を1度やる羽目になっている。

...Z80もそうだったか?あー、中途半端な知識は身を滅ぼす。

ちなみにZ80も6502もリトルエンディアンでした。

 

開発日誌をつけているわけではないけど、githubにはいつかあげておこうと思う。

ちなみに現段階で、転送命令群 LDA,LDXの実装が終わった。

次にALUを書くつもりでいる。