Open2

グラフィックステート32KiBで320x240ドットのゲームを作れるか問題

okuokuokuoku

本当はFantasy consoleとか作りたくないんだけど、メモリが厳しいのでやらざるを得ない。。

既存の市販32bitマイコンのスペックをねっとりと眺めたところ 、最小でシステム192KiBでゲームを成立させなければならない事がわかった。ゲーム側に出せるのは多くて128KiB、現代的なプログラミングを想定するとコードには64KiBは出す必要があるから、ゲームが使えるRAMは64KiB程度ということになる。

しかし、この手のシステムが備えるディスプレイは 320x240x18bit のフルカラー表示であり、そのためのフレームバッファは1ピクセルあたり2バイトとしても 320x240x2 = 150KiBとなり普通に(全体のバジェット128KiBにさえ)収まらない。

okuokuokuoku

想定

とりあえず調査前にざっくりと考えたのは、

  • 15色の8x8タイルを組み合わせて描画を行う (1色は通常透明色となる)
  • 最大256個程度のオブジェクトを定義可能にする
  • グラデーション付きライン描画、ライン単位のwindow機能、各種ブレンドをもって画面のリッチ感を確保
  • 32KiBをどのように使うかはゲームまかせにする(タイルや描画リストの容量分配を自由にする)

描画の最小単位となるタイルは1つあたり32バイト、画面全体は 40x30 = 1200 タイル。つまり32KiB全部をタイルに使っても、 4bitカラー(16色)でさえ画面全領域の描画は行えない ということになる。(ただしタイル定義で画面を埋められない = ビットマップ描画ができない事自体はゲーム機では普通の仕様)

つまり、タイルは2bit色や3bit色もサポートしないと厳しいだろうということがわかる。

既存のゲーム機との比較

単純にアドレス可能なビットマップ領域のサイズで比較すると:

  • 16KiB : MSX1、セガ・マークIII
  • 64KiB : MSX2、PCエンジン、スーパーファミコン、メガドライブ

となり、32KiBはその丁度中間にあたる。現代的なプロセッサでは乗算器が使い放題で、かつメモリアクセスも高速になるため、いわゆる16Bit機の半分の容量で同等レベルの描画が可能になると期待している。