マイコンゲーム機のスペックは今どのあたりなのか調査
C-WebGLはRaspberryPi Zero(= OpenGL ES2)をターゲットしている。ただ、営業的にはもう一段階下が欲しいので、Arduinoでプログラムされるようなデバイスを想定してスペックを引く必要がある。
今のところの想定
項目 | 仕様 |
---|---|
画面 | 320x240 RGBフルカラー、20fps |
CPU | 32bit整数および単精度浮動小数点 |
データRAM | 64KiB (セーブデータ込み) |
プログラムRAM | 64KiB |
オーディオ | PCM |
入力 | D-Pad + ABボタン |
プラットフォームとして機能させるために、いわゆる手作りゲーム機とはいくつか重大な違いがある。
- ユーザプログラムをROMに焼かない 。Flashは寿命が心配なのと、妥当なサイズを決めようがないため。
- 浮動小数点前提 。ちょっと調べた限りでは既にFPU付きのマイコンが主流になっているようだ。
M5StackとWio Terminal
↑の仕様はM5StackとWio Terminalを想定して引いている。
M5StackのESP32は十分な機能を提供する。
問題は Wio Terminal で、 RAMが192KiB しか無いのでランタイム側が自由に使えるRAMは64KiBしか残らないことになる。 ...それでも64KiBのコードとRAMは現代的なゲームを書くには全然足らないのでスペック的には非常に悩ましい。
もっと低いスペック
Arduboy
ArduboyはAVRマイコンを採用した8bit機で32KiB ROM + 2.5KiB RAM。 ...汎用的なCコードを動作させるのは非常に難しいだろう。つまり書いたゲームがAVR専用になってしまう。
Gamebuino META
CortexM0+、32KiB。Gameduinoってのも有るんだよな。。
MakeCode Arcade
Meowbitのような、Microsoft MakeCode Arcade に対応したマイコンは無限に存在する。どれもFPU搭載でRAMも192KiBは搭載している。ただし、これらは画面が160x128で、通信機能と拡張ストレージが一切ない。
もっと高いスペック
例えばMaix Amigoはデュアルカメラ、64bit RISC-V、8MiB RAMを備えている。 ... 他に相当するものがあんまり無く、他の実装を期待するにはスペックが高すぎるように思える。
M5Stack FireやCore2等8MiB程度のRAMを追加したプラットフォームもあるが、ESP32以外ではなかなか出てきていないようだ。
このため、M5Stack vs. Wio Terminalあたりのラインが、現状ではもっとも妥当な多様性と実用性を提供していると考えている。
32blit
STM32-400MHzあたりをターゲットしたゲームエンジン ...といっても実機の方は全然更新がない。Kick starterは終わっているので発売自体はするんだろうけど。。
320x240、1MiB RAM。
ESP8266
Bluetoothが無いのは厳しいもんがあるな。。
ESPboyの人がLovyanGFXに突撃してるのはちょっと面白いな(他人事)
(P/ECE vs.) Playdate
そういやP/ECEってあったな。。2001年、256KiB RAM、FPUなし。
P/ECE研究室は丸1年更新が途絶えている。 ...まぁそれまで更新が続いてたのも驚異的と言える。Twitter https://twitter.com/piece_me はアクティブ。
というか開発元(OeRSTED)消滅してたんだ。。
Playdateの方は16MiB RAM、400×240 x1bit。C言語ではなくスクリプトでプログラムされることを強く前提としている。
RaspberryPi Pico
プログラマブルI/Oによるbit-bangなVGA出力がSDKにあり、それを想定したボードも売られている。デュアルコアなため片方のコアをVGA合成に充てれば十分なパフォーマンスは提供できるはず。
264KiB RAM がネックか。。320 x 240 x RGB565で既に150KiB、リアルタイム合成か256色に落とすか。。まぁ明かに4bit pallete、8x8セルみたいな仕様にしないとメモリ足りないよな。。
あと、 RaspberryPi Pico はCortexM0でFPUが無い。ハードウェア除算器や内蔵bootromなどを活用したsoftfloat向けのランタイムライブラリが提供されている。
- https://github.com/raspberrypi/pico-sdk/tree/bfcbefafc5d2a210551a4d9d80b4303d4ae0adf7/src/rp2_common/pico_float
- 内蔵bootromの
fmul
実装: https://github.com/raspberrypi/pico-bootrom/blob/00a4a19114195e20fb817bdfbca1165e157eef37/bootrom/mufplib.S#L889
VGAボードを販売しているPimoroniは携帯ゲーム機型の製品も予告している。240x240。
SparkFun MicroMod
CortexM4とESP32くらいしかCPUの選択肢が無いんだよなぁ。。まぁ今さらMIPS32とか出てきても困るってのは有るけど。。