LoginSignup
0
0

More than 5 years have passed since last update.

ESP32でGAMEエミュレーターを動かす(GAME少年編)

Last updated at Posted at 2017-12-10

概要

ESP32でエミュレータを動かすシリーズ第三弾。今度はGAME少年です。
良さげな元ネタを探して、比較的判り易かった下記を移植しました。
[Gambit] https://github.com/mattrubin/Gambit
これでハードを都合すればオレだけの携帯機が作れます。
第四弾をどうするかは、考えておりません。

やること、やった事

ハードは
[ESP32でGAMEエミュレーターを動かす]https://qiita.com/hi631/items/a0dfb6ee91b90c028445
を見てください。ピンの配置も全く一緒です。

ソフトは今回も変更が多いのでGitHubに上げました。
[esp32-gbemu]https://github.com/hi631/esp32-gbemu

元のソフトはios用に作られているようなので、これを一旦Windows上で動かし、動作確認の上でESP32に移植しました。
ダウンロードして、COMポートと通信速度をボードに合わせてコンパイルしてください。
make flash して、Resetすれば動くと思います。

動作確認用としてはこんなものが使えます。http://www.gambitstudios.com/FreeSoftware.asp
ファイルのフラッシュへの書き込みは下記のコマンドで行います。
esptool.py --chip esp32 --port "/dev/ttyxx" --baud $((921600)) write_flash -fs 4MB 0x140000 xxxx.gb(gbc)
"/dev/ttyxx"、xxxx.gbは自分の環境に合わせましょう。
一応2MBまでは動作するはずです。

今回苦労した所

今回もgbemuをnesemuのI/Oに接ぎ木して動かしています。
開発環境が全く違うので、コンパイルエラーの多さに一時は暗澹となりましたが、何とか持ち直しました。
取敢えず動けばいいという発想の元、下記のようになっています。
(1)パレットとして256KBもメモリーを使っており、ESP32では最初はコンパイルできませんでした。
  64KBに圧縮しましたが、画面全てに対応していないので、妙な画面(主に背景)が出る場合が有ります。
  LCD.Cの561行からの、パレットの反転処理を各画面に入れれば治ると思いますが、やってません。
(2)一応、ちゃんと画面も音も出てコントローラーで遊ぶことができますが、処理が不足気味で、画面が大きく動くと全体的に遅くなります。
(3)処理が遅くなり間に合わなくなると音が途切れます。その場合はspi_lcd.cの142行当たりの
  .sample_rate=SNDRATE*166/(116*2),の116を大きくしてください。ただし音が伸びます。
(4)ノーマルではあまりに画面が小さかったので、ほぼLCD一杯に拡大しています。spi_lcd.cの322行当たりの
  int x, y, xss, yss, widths, heights, mug=2;の2を1にして下さい。ノーマルサイズに戻ります。
(5)フレーム当たりの処理速度を確認可能です。spi_lcd.cの84行当たりの
  //wccnt++; のコメントを外すと、シリアルに処理に要した時間が10us単位で表示されます。
  Lp=(一周期時間) Fr=(フレーム処理) cpu=(CPU処理) Dsp=(LCD処理) Snd=(サウンド処理) Wt=(サウンド出力待ち)
  1234と表示された場合は、12.34ms要した事になります。
  なお、Wtが0になると音が途切れる可能性があります。

その他

 上記記載のハード、ソフトは無保証であり、各自の責任においてご利用願います。
 中身がよく判らないのに、動けばOKという勢いで改変していますので、何か傷を抱えているかもしれません。
 また蛇足ですが、世の中にはフリーでないプログラムも存在しますので、注意の上で遊ばれることをお勧めします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0