プログラミングや低レイヤで遊ぶ人

基本的には遊んだことを記事にしていく

ファミコンエミュレータ作り その3

FC emulator作り with golang

完成までのマラソン記事。がんばってやり切るぞい。

また、注意点としてこの記事はコードを更新しながら作成していっていくので記事で書いてある内容と実際のコードに差が生まれる可能性はあります。

コード本体         

実際にファミコンに描画してみる

今回の記事のために下の画像のようなデータを用意した。
f:id:jumdtw:20200510203838j:plain こちらのデータはyychrというソフトを使用して作成している。
yychr wiki

これを描画していきますが、一つ注意点としてVblank中書かなければならないということです。
ファミコンが画面に描画している時画面には描画されないタイミングあります。そのvblankの間に描画処理をしないと画面に映し出すことができません。

やり方の案として二つあり
1、$2002の7bit目(vblank中は1になる)を確認してから書き込む.
2、NMIの設定を使ってvblank中に割り込み処理をを入れ、書き込む。

どっちでもいいんですが、今回は2のやり方でやっていきます。

// 7bit目:vblank時NMI割り込み
// 3bit目:romのデータの置き場所の指定みたいなやつ
$2000 = 0b10001000


本当はキチンと描画のソースコード張るべきなんですが、その辺の情報はネットにかなり落ちているので今回は割愛します。
下記が実際に描画した画像です。エミュレータはfceuxを使用しています。
fceux
f:id:jumdtw:20200510203831j:plain

画面下に1がたくさん描画されているのは私が面倒臭がって適当にコード組んだためです。でもってこれをエミュレータに追加していくわけです。

どうやって描画するか

今回は下記モジュールを使って描画していきます。
azul3d

このモジュールのexsampleの中から使えそうなものを探した結果以下のものがありました。

go run .\azul3d_multiwindow\

f:id:jumdtw:20200510203835j:plain

これをいい感じにいい感じして画面を作っていきます。
ソースは次回の記事で説明します。