Open3

yunipocket: プラットフォーム仕様を考える

okuokuokuoku

これマジで難しいな。。

いわゆるFantasy Console(Pyxel, TIC-80 など)は基本的にはエディタとランタイムを同じプラットフォームで提供している。しかし、通常のマイコンに備わっているRAMだと絶対に収まらないのでプロファイルを分けるしかない ...と思う。Uxn上のVarvara( https://wiki.xxiivv.com/site/varvara.html )くらい割り切ればあるいはという感じか。。

Prev

https://zenn.dev/okuoku/scraps/e754e0f6dc808d

okuokuokuoku

システムサービス

ネイティブコードをNCCC( https://zenn.dev/okuoku/scraps/e94ddff8b767f1 )でwrapして、アプリから使えるようにする必要がある。アプリはWebAssemblyで用意するつもりだけど、Codec類までWebAssemblyにするとパフォーマンスもメモリも絶対に不足するので。。

コアになる(非)同期I/Oサービスは自分で設計するとして、Codecや描画エンジンは拾ってくるのが良いかな。。

PC上で動作するエディタ類では更に:

  • YAMLやJSON、XMLのシリアライザ / デシリアライザ
    • ... を操作するためのいわゆるDOM
  • フォントエンジン: stb_truetype がある: https://github.com/nothings/stb

日本語は比較的シンプルなので HarfBuzz ( https://harfbuzz.github.io/ ) が無くてもそこそこの出力ができる。絵文字類はちょっと絶望的だけど。

okuokuokuoku

映像出力

マイコン用の固定解像度出力

マイコンの場合殆どはSPIでLCDを操作している時間になると思われるので(要計測)、明示的な低解像度モードは省メモリのためだけに存在することになる。

32KiB VRAMの低解像度モードと、64KiB VRAMの高解像度モードを用意する。 64KiBモードでは、アプリケーションの使えるRAMが32KiB減る 。画面モードは起動時に設定され、変更できない。色の指定はパレットで行う(RGB888)。

解像度 ネイティブ解像度 色数 VRAM実サイズ
160x120 320x240 256色 19,200 (低解像度モード)
160x120 x2枚 320x240 16色 19,200 (低解像度モード)
320x240 320x240 16色 38,400 (高解像度モード)

VRAMの余りは、文字用に高解像度、低bppのオーバーレイ機能を用意しようかなと。。

どのFantasy Consoleにも有るタイルグラフィックスを装備するかはかなり悩みどころ。ESP32とRaspberryPi Picoで常識的な速度が出せれば検討したい。

PC用の出力

NCCC経由でWebGLを使えば良いね。