使用 Rust 開發 WebAssembly 程式 - 3 Gameboy

在我們看過兩個官方文件的範例之後,可以開始寫點真正的 code 了,如之前所言,我們要把 gameboy 移植到 WebAssembly 上面, 這篇文可以說明這到底有多簡單,我覺得已經很接近所謂的 “Code Once, Run Anywhere” 了。

...

Rust Gameboy Emulator Sprite/Joypad

故事是這樣子的,距離我上一篇 2020/12/20 發的 rust gameboy emulator 技術文之後, 已經過了兩個月了,中間除了整理積存已久的天能 舊文(還有過年),感覺 blog 已經荒廢了QQ。

其實不是的,中間也花了很多時間在 debug 我的 rust gameboy emulator,只是堪稱進度緩慢,主要的原因在於雖然 emulator 可以運作, 卻缺乏 debug 的機制,即使到目前為止,debug 方式仍不脫用肉眼去掃執行的 log,這樣 debug 的效率極度糟糕而且我還不知道要怎麼改進。
理想上是要弄一個 debug 的介面,可以像 gdb 一樣停在某個記憶體位置,然後印出當下的暫存器內容等等,不過即便我做出來, 當做我參考答案的其他實作也不會有同樣的東西可用,所以後來我放棄實作這個部分。

即便如此,在這兩個月還是完成了不少事情,也在 github 上得到一位 justapig9020 大大 (呃…只是一隻豬9020 大大)的幫助,幫我實作了不少東西,像是加上 clap-rs,放大畫面的選項等等。

...

Rust Gameboy Emulator

故事是這樣子的,之前看了網路上有個人寫了一份手把手教你寫一個 risc-v 模擬器 Writing a RISC-V Emulator in Rust , 雖然後來發現他文件也就一些些,後兩章沒寫不說,中間的手把手也是先伸出手,快握到的時候把手抽回去(欸,總之沒有寫得很詳細,一定要自己去看 code。

於是小弟就想說來仿造一下,但寫 rvemu 超級費工,決定選一個簡單一點的平台來實作,就選了一款經典處理器 z80 / LR35902,會選這個平台是因為:

  1. 簡單好玩,能實作 LR35902,就能玩一些古早的 gameboy 遊戲,效果十足。
  2. 最近看到傳說中的 jserv 大大寫了這個 CPU 的模擬器,你各位十年 J 粉還不快用 rust 寫一個尬廣跟上,證明 rust 是世界上最好的程式語言

總之就是寫了,從 11 月中開始到現在大概一個月,費了千辛萬苦,先寫個簡單的整理文,進度到可以顯示出 Tetris 的遊戲選單,如下所示:
gb_tetris

...