2018年6月23日土曜日

ゲームボーイのカセットをつくった

よくよく考えてみたら、ゲームのカセットは中身が基板なので、このご時世ならつくるのはたやすいのではないかと思ってやってみたら、遠回りをしつつもうまく動いた。

なぜゲームボーイにしたのか

手元にあったから

実家に置きっぱなしだったのを回収してきて以来、電源の確保が容易なのでずっと遊んでいる。最近はSwitchを買ってしまいスプラトゥーンとプリパラが楽しいのでほったらかしになってきた。

どうかしてる機能を積んだカセットが多かったから

ファミコンやスーパーファミコンは、拡張機能は本体のポートに専用コントローラーやサテラビューみたいなのをつないで実現していたけれど、ゲームボーイはその辺をカセットの延長でつくっていた印象があって。ポケットカメラやカービィの傾きセンサーなんかがその例(個人の感想です)。今やるならBluetoothとか各種無線通信を載せていきたい。

作り方

海外は作っている人が少なからずいるので、そのへんの人の作例を参考に。

http://www.happydaze.se/wolf/
https://github.com/dwaq/Homebrew-Gameboy-Cartridge

カセット側の動作は基本的に

  • 16ビットのアドレスを受けて対応する8ビットの値を
    • 返す (ROM/RAM)
    • 保存する (RAM)
  • バンクを切り替える

なので、このあたりの配線がつながっていればOK。速度が速度なので、等長配線を気にする必要もない。

https://dhole.github.io/post/gameboy_cartridge_emu_1/

dholeさんがSTM32F4Discoveryをつかって、バンク切り替えの任天堂ASICの擬態を行いつつROM/RAMまでSTM32マイコンでまかなう方法を書いてくれているので、この通りに信号線をつなぐとこうなります。

直したい点

穴位置を間違えた

基板の端子情報をライブラリにしてる人がいるのでそのデータを使おうとするも、Eagleが慣れないのでCircuitMakerに持ってくる際に、大きいほうの穴位置がずれたらしく、カートリッジの筐体にすんなりはまらない。次つくることがあったら直す。

電源の使い勝手

ふつうカセットは外から何かするわけじゃないので、ゲーム機から電源をもらって動くのは当たり前の動作だけど、ゲーム機の電源とカセットの電源を別にしておかないと、マイコン側のデバッグで困る。ゲームボーイ本体の電源が入っていないと動作をデバッグできない。ジャンパ等で切り替えられるようにしたい。