ふと、思いついて電卓でメモリ量とクロック数の計算。
妄想開始です。マイコンでビデオ表示のお話。
以前マイコンでビデオ表示をした物といえば
TINY2313のスプライトや背景表示器があるわけですが、
いわゆるXY座標系なので、例えばこれでゲームを
作ろうとしても、どうしても80年代ゲームになって
しまうのは仕方ないところ。
うーん、もう少しひねりを加えて、なんとか表現力
を増せないかなと…
以前諦めた「回転機能」、コレ、意外に出来ちゃうんじゃ
ないかな…という思いつき。
回転処理というのは、一番わかりやすい例は大昔の
タイトーのゲームで「キャメルトライ」というのが
あるので検索をしてみていただきたいのですが、要は
角度を指定すると、表示されている画面がその角度で
傾く(回転する)という仕組みのことです。
コレをマイコンで出来ないかなというお話。
回転の計算原理自体はそれほど難しくは無く、高校生
レベルの行列計算とsin、cos計算だけ使えばok。
処理能力に物を言わせてグリグリとコーディング
すれば理論上は可能なんですが、ネックはメモリと
処理クロック数のこと。NTSC信号作りながら
ですからねぇ。
正攻法でビデオ表示をしながら回転計算をやる
なんて…無理無理。
と考えて、最初から諦めていたのですが、処理方法
を工夫すれば何とかなっちゃうんじゃないかな…と。
まぁ、とは言ってもかなり無理無理なことを無理矢理
やるわけで、以前作った背景表示器のようにキャラクタ
コードからビットデータをデコードしながら回転する
って言うのはちょっと難しい。
となると、小さ目のビットマップ(せいぜい80×80ドット)
でVRAMを構成し、それを1ドット単位で制御
するっていう感じかな。これだと、800バイト程度の
メモリ量で済むし、ドット数が減ることで処理データ量も
減るわけで、キャメルトライみたいに回転軸を画面の
中心だけに限定すれば計算も複雑にはならないし。
1kBのMEGA88程度でも入りそう。三角関数計算は
表示前に1回やっておけば良いし、後の回転計算(行列
計算)も上手い具合に端折って(小数の足し算の繰り返し)
しまえば、ハードウェア乗算命令すら使わなくても
それなりに詰め込めそう。
問題は、回転の場合はVRAM全体が表示されるわけ
じゃなく、画面からはみ出る部分も出てくるので、
それを考慮すると実際に表示されるのは50~60ドット
四方といった程度なんだよなぁ。狭いな。表現力がイマイチ。
それにスクロールとかも1ドット単位でねちねちと
やらないといけないので、応用範囲もイマイチ。
もう少しSRAMがあればなぁ。
50ドット程度の画面でなにやらドットらしいものが
同じところでグルグル回っても、あまり面白くないよなぁ。
なら、やっぱりキャラクターのビットマップデータを
持っておいて、そこからデコードしていく方向かな。
そうすると、メモリ量としては制約がほぼなくなるんだけど、
問題は処理速度。
・キャラクターコード→ドットへのデコード処理
・三角関数計算
・行列計算
の3つが必要ということに。後ろ2者は何とかなるとしても、
デコード処理は厳しいな。
以前作った背景表示器でもキャラクターコードからドット
へのデコード処理を行っているわけですが、これは
横8ドット単位でデコードが出来る(要は8倍速)から
押し込むことが出来たわけですが、回転となると
1ドット単位で処理しないといけないので、
処理時間的にはやっぱり厳しいよな。
あとでまた考えよう…。
|