ゲームボーイのエミュレータを自作した話 · Keichi Takahashi https://keichi.dev/post/write-yourself-a-game-boy-emulator/
> 命令の動作をテストするcpu_instrsと,命令のクロック数をテストするinstr_timingは通らないと,実際のゲームは動かないと思う.逆に言えば,他のテストは通らなくても何とかなる.
ゲームボーイのエミュレータを自作した話 · Keichi Takahashi https://keichi.dev/post/write-yourself-a-game-boy-emulator/
> 命令の動作をテストするcpu_instrsと,命令のクロック数をテストするinstr_timingは通らないと,実際のゲームは動かないと思う.逆に言えば,他のテストは通らなくても何とかなる.
いま各命令に別れていない方のcpu_instrs.gbを動かそうとして思い出したけど、ROMサイズを一番小さいやつに決め打ちしてるんだった。これは直しておきたい。
そしてinstr_timingを動かそうとしたら謎のreloadされまくるバグにハマった。
謎バグだったがだんだん分かってきた。そもそもこのROMは0xd820の値をincrementしつつ実行することで全ての命令を実行することを目的にしている。この値が0xe2、つまり LD (C), A を実行しているときに、後続の0xd822が INC L になっているのが問題で、本当はここは JP C42C になっていないといけないはず。
実際一つ手前の命令 POP HL のときは正しい
あー分かった分かった、opcodeの表が間違っていて、LD (C), Aは1 byteの命令なんだな。そりゃそうだ。opcode表に騙された。
違うバグが出たけどとりあえずreloadし続ける問題は解決した。良かったよかった。
明日用
これもopcode表のバグ。BITの(HL)のサイクルは16ではなくて12
通った〜〜〜〜
CPUの使用率が常時60%くらいあるのが気になるので治す。とりあえず描画用スレッドと計算用スレッドで2つgoroutineが走っているのをやめて、典型的なinput-update-drawのloopにしてみる。例のRust実装もOCaml実装もそうなっていた。治った。
さて次の目標は何にしようか。現状は一通りの命令が実装できたというところで、肝心のスプライトやらウィンドウやらが実装されていないのでゲームは何も動かないはず。このあたりを実装したいが、このあたりをテストできるROMは https://gbdev.gg8.se/files/roms/blargg-gb-tests/ にはなさそうだ。 mem_timing や interrupt_time を試してみたがどうも CAMLBOY も対応していないっぽいのでゲームを動かすだけなら無視してもよさそう。となると、ウィンドウ・スプライトを使っていそうなhomebrew ROMを取ってきて、それを相手に頑張ることになるのか……?
それはそれとして、最近こういうWebサイト貼り付けるときにいい感じにタイトルと一緒にしてくれるFirefoxのアドオンを使っているんですが、Twitter用なので当然Tweet画面が出てくるのをコピペしてMastodonに貼るの大変めんどうなのでMastodon用賀ほしい
AUR (en) - xerox-docucentre-driver https://aur.archlinux.org/packages/xerox-docucentre-driver/
AURにはなんでもあるなぁ
LinusがZFSにLKMLで言及した件 - kuenishi's blog https://kuenishi.hatenadiary.jp/entry/2020/01/13/231033
hehe-
コンピュータサイエンスにおける様相論理|森北出版株式会社 https://www.morikita.co.jp/books/mid/085641 omosirosou
Firefoxくん定期的にデザイン変更でボロカス言われとるなhttps://octodon.social/@joeyh/107283148035893045
なんか前にもこんなことあったなと思ったらちょうど1年前だった
通るとまずそうな最小コード https://wandbox.org/permlink/muHaDkLfPNk4gGzN
senooken JP Social is a social network, courtesy of senooken. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All senooken JP Social content and data are available under the Creative Commons Attribution 3.0 license.