今回は如何にして32KB+8KBのメモリ空間に、ゲームのプログラムとデータを詰め込んだのかというお話です。題して、メモリ省力化の巻~。

イースⅡ ©1988 NIHON FALCOM CORPORATION
結局、こんな高度な重ね合わせは(当然?)出来ませんでした。速度的にもギリ可能な範囲で、技術的にも問題はなく、立ちはだかったのはメモリ不足です。いや、これは初期設計段階に気が付くべきでした。重ね合わせには ANDマスク情報が必要となります。簡単な事なのですが、マスクデータを用意すれば画像データは単純に 2倍に膨れ上がります。消費メモリの試算をしてみます。
1文字8バイトのPCG定義データ
4×4キャラがキャラ4体×上下左右×8パターン。
8×(4×4)×4×4×8 = 16KB
PC-8001 における16KBの意味が分かりますよね?
ここにANDマスクデータを入れて、さらにドンッ!
32KB!!
はい、あふれた!
完全にあふれたよー!! ※ 錯乱状態
さらに、バックバッファ 3KBでしょ?マップデータも当然必要ですよね?タイトルはかっちょ良いの入れたいよねー!サウンドも豪華なのが欲しいよねー!!
追加しよう。
最低でもこれは要ります。すると… 8byte×(4×4)キャラ×10p×8切替 = 10KB
既に 22KB 使っていましたので、
プログラム側では PCG左右反転機能を実装する事にしました。これは以前説明した超高速ビット左右反転を使用して、ゲーム中にリアルタイムで反転するようにしています。

また、PCG同時定義限界数のため 16キャラが使えなくなり、16キャラ文字が14キャラ文字に減りました。これでメモリの計算をもう一度してみます。
あれこれ積算した結果、なんとなんとの 8KB!これで先に進めます!
実際には反転テーブルが256バイトあったりとかしますので、実際には10KB程度です。それでも十分な効果が出ています。また、省メモリの結果、さらにヒーローの登場シーンやステージクリア演出も入れられる可能性が出てきました。
結局、省メモリの実現には小さな小さな努力の積み重ねしかないのです。まさに積算ですね。こうやってデータの省メモリは進めていきました。
- 夢と現実

イースⅡ ©1988 NIHON FALCOM CORPORATION
結局、こんな高度な重ね合わせは(当然?)出来ませんでした。速度的にもギリ可能な範囲で、技術的にも問題はなく、立ちはだかったのはメモリ不足です。いや、これは初期設計段階に気が付くべきでした。重ね合わせには ANDマスク情報が必要となります。簡単な事なのですが、マスクデータを用意すれば画像データは単純に 2倍に膨れ上がります。消費メモリの試算をしてみます。
1文字8バイトのPCG定義データ
4×4キャラがキャラ4体×上下左右×8パターン。
8×(4×4)×4×4×8 = 16KB
PC-8001 における16KBの意味が分かりますよね?
ここにANDマスクデータを入れて、さらにドンッ!
32KB!!
はい、あふれた!
完全にあふれたよー!! ※ 錯乱状態
さらに、バックバッファ 3KBでしょ?マップデータも当然必要ですよね?タイトルはかっちょ良いの入れたいよねー!サウンドも豪華なのが欲しいよねー!!
夢
淡い夢だった…、胸をはなれないぃ…。さて、現実に戻りましょう。まずは重ね合わせを断念して、ANDマスクは切り捨てます。これで16KBになります。VRAMとバックバッファは合わせて6KBなので、トータル22KB。…でもね、まだ攻撃モーションやダメージ等の演出パターンを全く入れてないんだよね、これ。追加しよう。
- 立ち止まっている
- ダメージ
- パワーアップ(上下左右)
- 攻撃(上下左右)
最低でもこれは要ります。すると… 8byte×(4×4)キャラ×10p×8切替 = 10KB
既に 22KB 使っていましたので、
22KB + 10KB = 32KB
はい、出ました、禁断のワード、さんじゅうにきろばいとぉ!
さてどうする?大検討会の始まりです。
まさに苦渋の決断でした。はい、出ました、禁断のワード、さんじゅうにきろばいとぉ!
さてどうする?大検討会の始まりです。
プログラム側では PCG左右反転機能を実装する事にしました。これは以前説明した超高速ビット左右反転を使用して、ゲーム中にリアルタイムで反転するようにしています。

また、PCG同時定義限界数のため 16キャラが使えなくなり、16キャラ文字が14キャラ文字に減りました。これでメモリの計算をもう一度してみます。
・上移動 336byte 8定義×14文字×3パターン(反転利用) ・下移動 336byte 8定義×14文字×3パターン(反転利用) ・左移動 672byte 8定義×14文字×6パターン ・右移動 0byte (反転利用) ・立ち止まり 112byte 8定義×14文字×1パターン ・ダメージ 336byte 8定義×14文字×3パターン ・パワーアップ 336byte 8定義×14文字×3パターン ・攻撃 224byte 8定義×14文字×2パターン×4方向
あれこれ積算した結果、なんとなんとの 8KB!これで先に進めます!
実際には反転テーブルが256バイトあったりとかしますので、実際には10KB程度です。それでも十分な効果が出ています。また、省メモリの結果、さらにヒーローの登場シーンやステージクリア演出も入れられる可能性が出てきました。
結局、省メモリの実現には小さな小さな努力の積み重ねしかないのです。まさに積算ですね。こうやってデータの省メモリは進めていきました。
コメント