Open2
グラフィックステート32KiBで320x240ドットのゲームを作れるか問題
本当はFantasy consoleとか作りたくないんだけど、メモリが厳しいのでやらざるを得ない。。
既存の市販32bitマイコンのスペックをねっとりと眺めたところ 、最小でシステム192KiBでゲームを成立させなければならない事がわかった。ゲーム側に出せるのは多くて128KiB、現代的なプログラミングを想定するとコードには64KiBは出す必要があるから、ゲームが使えるRAMは64KiB程度ということになる。
しかし、この手のシステムが備えるディスプレイは 320x240x18bit のフルカラー表示であり、そのためのフレームバッファは1ピクセルあたり2バイトとしても 320x240x2 = 150KiBとなり普通に(全体のバジェット128KiBにさえ)収まらない。
想定
とりあえず調査前にざっくりと考えたのは、
- 15色の8x8タイルを組み合わせて描画を行う (1色は通常透明色となる)
- 最大256個程度のオブジェクトを定義可能にする
- グラデーション付きライン描画、ライン単位のwindow機能、各種ブレンドをもって画面のリッチ感を確保
- 32KiBをどのように使うかはゲームまかせにする(タイルや描画リストの容量分配を自由にする)
描画の最小単位となるタイルは1つあたり32バイト、画面全体は 40x30 = 1200 タイル。つまり32KiB全部をタイルに使っても、 4bitカラー(16色)でさえ画面全領域の描画は行えない ということになる。(ただしタイル定義で画面を埋められない = ビットマップ描画ができない事自体はゲーム機では普通の仕様)
つまり、タイルは2bit色や3bit色もサポートしないと厳しいだろうということがわかる。
既存のゲーム機との比較
単純にアドレス可能なビットマップ領域のサイズで比較すると:
- 16KiB : MSX1、セガ・マークIII
- 64KiB : MSX2、PCエンジン、スーパーファミコン、メガドライブ
となり、32KiBはその丁度中間にあたる。現代的なプロセッサでは乗算器が使い放題で、かつメモリアクセスも高速になるため、いわゆる16Bit機の半分の容量で同等レベルの描画が可能になると期待している。