Open9

マイコンゲーム機のスペックは今どのあたりなのか調査

okuokuokuoku

C-WebGLはRaspberryPi Zero(= OpenGL ES2)をターゲットしている。ただ、営業的にはもう一段階下が欲しいので、Arduinoでプログラムされるようなデバイスを想定してスペックを引く必要がある。

今のところの想定

項目 仕様
画面 320x240 RGBフルカラー、20fps
CPU 32bit整数および単精度浮動小数点
データRAM 64KiB (セーブデータ込み)
プログラムRAM 64KiB
オーディオ PCM
入力 D-Pad + ABボタン

プラットフォームとして機能させるために、いわゆる手作りゲーム機とはいくつか重大な違いがある。

  • ユーザプログラムをROMに焼かない 。Flashは寿命が心配なのと、妥当なサイズを決めようがないため。
  • 浮動小数点前提 。ちょっと調べた限りでは既にFPU付きのマイコンが主流になっているようだ。
okuokuokuoku

M5StackとWio Terminal

↑の仕様はM5StackとWio Terminalを想定して引いている。

https://www.switch-science.com/catalog/3649/

https://www.switch-science.com/catalog/6360/

M5StackのESP32は十分な機能を提供する。

問題は Wio Terminal で、 RAMが192KiB しか無いのでランタイム側が自由に使えるRAMは64KiBしか残らないことになる。 ...それでも64KiBのコードとRAMは現代的なゲームを書くには全然足らないのでスペック的には非常に悩ましい。

okuokuokuoku

もっと低いスペック

Arduboy

https://www.switch-science.com/catalog/7157/

ArduboyはAVRマイコンを採用した8bit機で32KiB ROM + 2.5KiB RAM。 ...汎用的なCコードを動作させるのは非常に難しいだろう。つまり書いたゲームがAVR専用になってしまう。

Gamebuino META

https://gamebuino.com/creations/gamebuino-meta-manual

CortexM0+、32KiB。Gameduinoってのも有るんだよな。。

MakeCode Arcade

https://www.switch-science.com/catalog/6077/

Meowbitのような、Microsoft MakeCode Arcade に対応したマイコンは無限に存在する。どれもFPU搭載でRAMも192KiBは搭載している。ただし、これらは画面が160x128で、通信機能と拡張ストレージが一切ない。

https://learn.adafruit.com/adafruit-pygamer

https://www.switch-science.com/catalog/6230/

okuokuokuoku

もっと高いスペック

https://www.switch-science.com/catalog/6931/

例えばMaix Amigoはデュアルカメラ、64bit RISC-V、8MiB RAMを備えている。 ... 他に相当するものがあんまり無く、他の実装を期待するにはスペックが高すぎるように思える。

https://www.switch-science.com/catalog/6530/

M5Stack FireやCore2等8MiB程度のRAMを追加したプラットフォームもあるが、ESP32以外ではなかなか出てきていないようだ。

このため、M5Stack vs. Wio Terminalあたりのラインが、現状ではもっとも妥当な多様性と実用性を提供していると考えている。

okuokuokuoku

(P/ECE vs.) Playdate

https://twitter.com/gingerbeardman/status/1429479465781010432

そういやP/ECEってあったな。。2001年、256KiB RAM、FPUなし。

http://www.piece-me.org/

P/ECE研究室は丸1年更新が途絶えている。 ...まぁそれまで更新が続いてたのも驚異的と言える。Twitter https://twitter.com/piece_me はアクティブ。

https://twitter.com/r2o2k/status/1403255348719493123

というか開発元(OeRSTED)消滅してたんだ。。

https://www.ifixit.com/Teardown/Playdate+Teardown/143811

Playdateの方は16MiB RAM、400×240 x1bit。C言語ではなくスクリプトでプログラムされることを強く前提としている。

okuokuokuoku

RaspberryPi Pico

https://www.switch-science.com/catalog/7379/

プログラマブル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向けのランタイムライブラリが提供されている。

VGAボードを販売しているPimoroniは携帯ゲーム機型の製品も予告している。240x240。

https://shop.pimoroni.com/products/picosystem