ファミコンの画面について

目次

表示色

パレット

キャラクターデータ

BG 画面

ドラクエのフォント

スプライト

ラスタースクロール

PPU

バンク切り替え

メタルスレイダー・グローリー

ファミコン風画面を描くためのまとめ


スプライト

スプライトも、BG と同じように 8x8 ドットです。色は、BG とは独立した4つのパレットで選びます。

画面上の好きな位置に表示することができ、上下左右に反転が可能です。

画面全体で 64 キャラクターを表示できました。


8x16 ドットの表示も可能だったが、これを選択した場合の話は非常にややこしいので割愛。

左向きのマリオを反転すれば右向きになるため、256しかキャラクターがなくても、多彩な表現が可能です。


また、スーパーマリオでは、スターやファイアーフラワーなどが左右対称にデザインされています。

半分は普通の表示で、残りは「反転」して作られているのです。


スプライトは、1枚ごとに BG 画面の「前」か「後ろ」のどちらに置くかを選べました。

ここで、BG 画面にも透明色が設定できる意味が出てきます。


レッキングクルーなどは、壁を挟んで奥と手前で別の世界がある表現がなされていました。


レッキングクルーは、ドアを開いて敵を「向こう側」に送ることができる。
ファミコン版はパズルゲームだけど、業務用は2画面使って、二人で壁を挟んで遊ぶゲームでした。
二人で協力して壁を壊すもよし、相手側に敵を送って邪魔するもよし…
当時の任天堂は、こういう「協力と対戦」の微妙なバランス感覚が上手でしたね。

スプライトは、縦座標、横座標、キャラクタ指定、パレットや反転・BGとの位置関係などの指定の4バイトで1つのデータになります。

これが 64枚分で 256 バイト。BG 画面と同じく、こちらもきりの良い単位に綺麗に収まっています。


ラスタースクロール

基本技術のスプライト表示の方法で説明しましたが、スプライトと走査線は深い関係にあります。


これを使い、ファミコンでは 0番目のスプライトが表示されたことを調べる方法が用意されていました。

0番目が「表示された」瞬間に内部のフラグがセットされ、このフラグは次の走査線の描画が始まるとクリアされました。


これを使うと、任意の走査線が描画されたタイミングを知ることが出来ます。


画面は走査線によって作られていますから、任意の走査線が描画された瞬間に「画面を変更する」と、画面を上下に分割できます。


悪魔城ドラキュラなど、画面の上の方に得点などの表示があり、下の方はスクロール画面、と言う表現はこの方法で作られています。

エキサイトバイクのような、下が固定表示で上がスクロール、と言うものも同様です。


F1レースF1 レース、マッハライダーや3Dホットラリーなど、「3Dの視点で道が曲がる」ゲームでは、走査線ごとに横方向にスクロール位置を変えることで表現を行っています。


「ファミコンにはラスター(走査線)スクロール機能があった」とする記述もよく見るのですが、機能としてラスタースクロールが用意されているわけではありません。

非常に短い時間でセットされ、クリアされるフラグを見落とさないようにしながらゲーム全体を制御する、高度なプログラム技術が要求されます。



後には、カートリッジ内に収めた LSI を使用し、特定のラスターの描画で割り込みを起こす機能も用意されたそうだ。
割り込みがあると、監視を続ける必要がなくなるため、技術がそれほどなくてもラスタースクロールを行いやすくなる。

理論上は、同様の技術を利用して、スプライトの描画を「画面上部」と「画面下部」にわけて行うこともできます。こうすれば、2倍のスプライトが表示できることになります。

ただ、これはあくまでも理論上の話で、市販ゲームで使われた物はないそうです。


当初、そういうテクニックもあった、と書いていたのですが、市販品では存在しないと指摘がありました。
MSX2 では市販品で使われた例もあり、ファミコンにもあると聞いたような気がしていたのですが、これは僕の勘違いだったようです。
なお、MSXの画面のページではこの件について触れていません。MSX(TMS9918)では走査線割り込みができず、この手法が使えたのは MSX2以降となるためです。

PPU

単にファミコン風の絵を描きたい、という人には完全な余談になります。


ファミコンの画面表示回路(PPU:Picture Processing Unit)は「綺麗な画面を表示する」ことに特化されていて、画面を表示することに全力を注ぎます。


結果として、CPU から画面を描き変える指令が来ても無視しがちです。

というか、変なタイミングで指令を出すと、画面がおかしくなるのです。


そこで、CPU は PPU のご機嫌をうかがいながら、少しづつ指令を出すことになります。


MSX ではこのようなことはなかったため、画面全部を一気に描き変えることが可能でした。

スクロール機能を持たない MSX で、8dot 単位の動きとはいえスクロールゲームが作れるのは、「画面全部を描き変えて」いるためです。


しかし、ファミコンにはこんな芸当はできません。

画面全部の描き変えが必要な場合は、PPU に画面表示をお休みさせて、描き変えの仕事に専念させます。

ファミコンゲームでシーン変更時に一瞬画面が暗くなるのはこのためです。


ファミコンは、ゲームに関する性能では MSX を上回っていたように思われがちですが、決してそんなことはありません。

特に BG 画面描画の遅さは、ファミコンの泣き所でした。


公開当初、PPU を VDP と表記していました。
MSX などでは画面表示回路を VDP(Video Display Processor)と呼んでいたため、表記を取り違えました。
ファミコンでは PPU が正式な呼び方です。指摘してくださった方に感謝いたします。


次ページ: バンク切り替え


前ページ 1 2 3 4 5 6 次ページ

(ページ作成 2013-07-28)
(最終更新 2015-10-05)

前記事:MSX の画面について     戻る     次記事:50年代の画面表示技術
トップページへ

-- share --

142000

-- follow --




- Reverse Link -