« Wonder Swan Total Sound Driver | トップページ | MIDIのページを変更しました。 »

2006/05/30

ラスタスクロールに関する覚書

題名だけ見て『?』な人が居るでしょうので、まずそれがどんなものなのかを解説します。
これを読む方は、DRAGON QUEST IVをやった事がありますでしょうか?
あの『旅の扉』を使った時に画面が歪みますが、あれがラスタスクロールだそうです。

最近では、ポリゴン等、グラフィック系の処理が昔とは異なり今では簡単に再現できますが、昔は、グラフィックはハードウェア的に「8×8ドット」や「16×16ドット」単位で管理するのが一般的で、1ドット単位でグラフィックを書き換えるのは困難でした。

何故、8×8ドットや、16×16ドット単位なのかというと、昔のグラフィックは、例えば昔のパソコンの場合はディスプレー画面を25×40キャラクターとしていました。ドットでの管理ではないのです。
では、どうやって絵をディスプレイに書くのでしょう?
8×8やドットや、16×16ドット単位のグラフィックを沢山定義して、ビデオRAMにその内容を書きます。
例えば、(x0,y0)座標には0番のグラフィック、(x1,y0)座標には1番のグラフィックと、その様に書いていきます。
すると、ディスプレイ画面に、16×8ドット(若しくは、32ドット×16ドット)の絵が書けるわけです。

さて、ファミコンのグラフィックも、そのようなグラフィック制御でした。
が、ドラゴンクエストIVのあの『旅の扉』、どのように1ドット単位で揺らぎを出しているのでしょうか?

その技術がラスタスクロールと呼ばれます。
やり方は、CPUの「割り込み」という機能を使うので、アセンブリ言語やマシン語を知らないと先ず出来ないので、話が非常に難しくなると思います。


ディスプレイには、『垂直同期信号』と『水平同期信号』というのが有ります。
これは、ディスプレイのブラウン管の電子線を制御する信号です。
垂直同期信号とは、1画面を絵画する度に発する信号で、
水平同期信号とは、1ラインを絵画する度に発する信号です。
ラスタスクロールには、この『水平同期信号』を利用します。

これらの、『垂直同期信号』と『水平同期信号』にはブランキング期間というのが有り、
電子線が、ディスプレイの範囲外を走査して次のラインに行く為に要する期間です。
CRTCには、このブランキング期間を検出して、CPUに割り込み要求をする機能があります。
この機能を用いて、ブランキング期間になったら割り込みをかけます。

割り込みルーチン内では、次にどのラインを絵画するのかをCTRCに問い合わせ、その結果に応じて、CTRCにx座標や、y座標のスクロール量を設定するのです。スクロール量とは、ビデオRAMのどの座標を、ディスプレイの(x0,y0)座標に割り当てるかというパラメータです。

すると、ディスプレイが1ラインを絵画する度にスクロール量(表示座標)が変わるので、ディスプレイで見ると、あたかも画面が揺らいでいる様に見えるわけです。

よく、こんな事思いつくよなぁ。

|

« Wonder Swan Total Sound Driver | トップページ | MIDIのページを変更しました。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/36969/10313170

この記事へのトラックバック一覧です: ラスタスクロールに関する覚書:

« Wonder Swan Total Sound Driver | トップページ | MIDIのページを変更しました。 »