Arduboy FlashCartとは
Arduboyについてはもはや説明は不要でしょう。クレジットカードサイズの携帯ゲーム機で、Arduinoを用いてゲームを開発することができるというものです。
(画像は https://community.arduboy.com/t/flash-cart/6647 から転載)
白黒の128x64のディスプレイ、上下キーとA/Bボタンというシンプルな構成ですが、それゆえにゲーム開発の敷居も低く、電子工作界隈のみならず、多くの人に支持されているゲーム機です。(ちなみに、現状市場に出ているロットで生産終了らしいので、欲しい人は早く買ったほうが良いですよ!)
そして今回紹介するのはArduboy FlashCartというArduboyの改造例です。
前述のようにArduboyは素晴らしいのですが、1度に1つのゲームしか持ち歩けないという問題がありました。ゲームを書き換えるためにはPCとUSBで接続する必要がありました。
この課題は古くから気になっている人も多く、かくいう私もRaspberry Piを使って「持ち運べる書き込み用装置」を作ったこともありました。
FlashCartというのはこの課題に対する解決策です。
Arduboyにいわゆる「カートリッジ」をさせるようにし、そのカートリッジにゲームを入れておくというものです。
Arduboy公式ではなく、Aruduboyのフォーラムにて有志が開発した仕組みです。
今回縁あってFlashCartの実物をいただいたので、せっかくなのでこれがどういうものなのかを解説してみようと思います。
外部接続端子の増設
さて、Arduboyを知っている人ならまず気になるのは、「そのカートリッジってどこに刺すの?」ということでしょう。
ArduboyにはUSB端子以外の外部接続の手段は用意されていません。FlashCartでは、この問題を解決するために、Arduboyに外部接続端子を増設するという手法をとっています。
このためには、Arduboyの裏蓋を開け、内部の配線を引き出し、外部接続端子を増設する必要があります。加えてArduboyの薄い筐体にはこの端子が収まらないため、3Dプリンタ製の少し分厚い裏蓋に換装する必要があります。
この手法の欠点は、この部分で電子工作の技術が必要ということです。
(https://community.arduboy.com/t/flash-cart/6647/28 から転載)
外部端子の仕様
この外部端子はFlashCart接続専用のものではなく、Arduboyに様々な周辺機器を接続することを想定して設計されています。
紹介されている使用例は
- ブートローダー書き換えのためのICSP書き込み
- FlashCartの接続
- SDカードの接続
- 赤外線通信
- 通信ケーブル
- 各種センサー
です。
ポートとしては、UART用のTX,RXや SPI用のMISO,MOSI,CLK、I2C用のSDA,SCLなど使い勝手のよさそうなものが引き出されています。
また逆刺し防止のために、
実際に下記のようなロータリーエンコーダを増設している人もいます。
(https://community.arduboy.com/t/flash-cart/6647/10 より転載)
FlashCartの回路
FlashCartの実体はSPI Flash ROM ICです。3.3V駆動のものが使われているようで、そのために3.3Vレギュレータや、レベル変換ICが実装されています。
SPI Flash ROMということでArduboyとの接続は MISO,MOSI,SCK,CSと電源です。
回路図が下記にあります。
FlashCart対応ブートローダー
FlashCartからゲームデータを読み込む機能はArduboyのブートローダーとして実装されています。Arduboyのオリジナルのブートローダーから変更する必要があります。
Cathy3Kと呼ばれるブートローダがそれで https://github.com/MrBlinky/Arduboy/tree/master/cathy にソースコードがあります。
なんと、すべてアセンブラで記述されており、ぱっと流れを追うことは難しいですが、処理の大半はUSB経由でのプログラム書き込みで、後半に少しFlashCartがらみの処理が記載されているように見えます。
このブートローダーがOLEDの表示なども行い、ゲームの選択画面や、書き込み機能を実現しています。
(余談)ほかの方式の紹介
Arduboyとよく似たゲーム機であるGamebuino Classic(https://gamebuino.com/gamebuino-classic)というのがありますが、これはSDカードからのゲームのロードをを実現していました。
この方式も良いのですが、SDカードの読み書きをするためにはFATを理解し読み書きする必要がありブートローダーのサイズが大きくなってしまうという問題がありました。AVRのブートローダーには容量制限があり、このせいで容量の大きなSDカードには対応できていませんでした。
FlashCartでは読み書きが簡単に出来るSPI Flash ROM ICを使うことで、ブートローダーをシンプルに保ちつつ、ゲームの書き換えを実現しています。
今後のFlashCart
FlashCart自体はArduboyの改造が必要なので、いわゆるProof of Concept(PoC)的なものですが、これを基にした製品については議論が進んでいる段階です。
例えばSelf Bootloading Mod-Chip - Project Falcon - Arduboyでは、AttinyとFlash ROMを組み合わせたフレキシブル基板の設計を進めており、これは、FlashCartと似たような機能を裏蓋の換装なしで、実現するためのものです。
また、Arduboy Mini (coming soon) - Homemade - Arduboyで開発されているArduboy Miniというさらに小型のArduboyにはFlashCartと同等の機能が実装されているようです。
しかし、本家Arduboyの開発は徐々に下火になっておりArduboy – 2020 Status Updateのアナウンスによると、上記のMod-Chip以外の開発予定は未定とのことです。
ということでArduboy Miniなどは、コンセプトだけで販売されること可能性は少なそうです。
まとめ
Arduboyはかなりよくできた製品ですが、FlashCart拡張を使うとさらに魅力的なゲーム機となります。このFlashCartはArduboyコミュニティの有志が設計したもので、ユーザコミュニティが充実しているArduboyならではのコラボレーションの結果生まれたものです。
Arduboyとしての今後の予定はあまり期待できそうにありませんが、似たような仕組みのガジェットを作る際に非常に参考になりそうです。
おまけ
日本でFlashCartに関する記事は少ないのですが、下記は貴重な組み立てレビュー記事です。
私が作ったArduboy用ソフト達です。
良かったら遊んでみてください。