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

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

システムサービス
ネイティブコードをNCCC( https://zenn.dev/okuoku/scraps/e94ddff8b767f1 )でwrapして、アプリから使えるようにする必要がある。アプリはWebAssemblyで用意するつもりだけど、Codec類までWebAssemblyにするとパフォーマンスもメモリも絶対に不足するので。。
コアになる(非)同期I/Oサービスは自分で設計するとして、Codecや描画エンジンは拾ってくるのが良いかな。。
- printf: stb_sprintfがある: https://github.com/nothings/stb
- Audio Codec
- MP3/FLAC/WAV: https://github.com/mackron/dr_libs
- OggVorbis: https://github.com/nothings/stb
- 描画エンジン
- 2D: 良いのが無い。 https://github.com/a-e-k/canvas_ity はちょっと高機能すぎるし。。
- 3D: small3dlibあたりか。。?: https://gitlab.com/drummyfish/small3dlib
PC上で動作するエディタ類では更に:
- YAMLやJSON、XMLのシリアライザ / デシリアライザ
- ... を操作するためのいわゆるDOM
- フォントエンジン: stb_truetype がある: https://github.com/nothings/stb
日本語は比較的シンプルなので HarfBuzz ( https://harfbuzz.github.io/ ) が無くてもそこそこの出力ができる。絵文字類はちょっと絶望的だけど。

映像出力
マイコン用の固定解像度出力
マイコンの場合殆どは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を使えば良いね。