MCL(42)

インデックスに戻る

前のMCLへ  次のMCLへ

▼ My Computer Life (42)

42. プライオリティ

 私の作ったRPGが遅いという問題に対し、マシン語を使ってみてはどうかというアプローチは、アセンブラが標準添付ではないという理由で失敗に終わった。

 そういうわけで、その場で何も買わずにやるには、結局X-BASICを使うしかない。X-BASICという元が遅い言語の範囲内で、いかにスピードアップをはかれるか、考えてみた。
 時間がかかっているのは、言うまでもなくマップチップの描画だ(厳密には描画そのものではない。BGの描画は比較的高速に行われる。それに先立って行われる、マップデータの切り出しなどに時間がかかるのだ)。だとすると、画面内のチップ数を減らせば、ある程度速くなるのではないかと考えた。ドラクエのように画面全部がスクロールするのではなく、スクリーンの一部にウインドウを作り、その中だけスクロールするという形にするのだ。これなら描画しなくてはいけないチップの数が減る。
 しかしそういう手段を使うとなると、では何を使ってスクロールウインドウ以外の部分を隠すかという問題にぶち当たる。実際にマップが表示されている部分以外を何かでマスクしなければならないのだ。

 ここで、プライオリティの問題が出てくる。
 X68kの背景画面は、大きく分けて「スプライト・BG面」「テキスト面」「グラフィック面」の3つに区別される。そして、X-BASICではこの順番で優先的に表示される。
 本来は、テキスト面かグラフィックを使い、BGのマスクをしたいところだ。しかし、X-BASICでは上記の順番で表示されるため、BGを何かでマスクするというのか不可能になってしまっている。
 「X-BASICでは」、という前置きには意味がある。実はX68000のビデオコントローラは非常に優秀で、この表示順序を任意に並べ替える事ができるのだ。ハードではそういう風に作られてる。ただ、X-BASICからそれを制御する方法がない。これは非常に残念だった。それ以外の言語で制御するのは簡単なのだから、そういう関数を作っておいてくれてもいいのにと思った。

 さてどうするか。
 最初に試した解決策は、「MUSICDRIVER」である。
 前に書いたとおり、私が初めて買ったOh!Xには、付録としてディスクがついていた。そこに、「MUSICDRIVER」という音源ドライバが収録されていた。どういう経緯でそれが収録される事になったのかは良くわからない。
 まあ名前で分かるとおり、MUSICDRIVERというのはFM音源やMIDI音源を操作するためのインターフェイスを提供するのが目的なのだが、なぜかそこにこっそりと「画面のプライオリティを変える」という外部関数が入っている。これこそ私が求めているものだ。本当になんでそれがMUSICDRIVERに入っているのか全くわからないのだが。
 それで、MUSICDRIVERを入れたシステムディスクを作ってみた。なるほど、これならうまくいきそうだ。いきそうだが、なんとなく気持ち悪い。単に画面の表示順序を変えるという目的で、全然関係のない音源ドライバを入れるというのも気味の悪い話だ。
 で、標準の音源ドライバと衝突していたのか何か知らないが(当時は原因がわからなかった)、他のところで不具合が起こるようになった。そのため、MUSICDRIVERはあきらめることにした。

 それで結局どうしたかと言うと。
 その次に出たOh!Xの読者質問コーナーに、ジャストミートな投稿があった。画面の表示順序を変えたいというのだ。答えのところには丁寧にもアセンブラのソースコードが掲載されており、なおかつそれをX-BASICの外部関数として登録する方法まで書かれていた。これこそ、私が知りたかった事である。
 とは言うものの、これだって実行するためにはアセンブラが必要である。私がこの関数を組み込むようになったのは、これよりずっと後の話である。結果的に、アセンブラを購入せずに済ますというわけにはいかなかったのだ。


前のMCLへ  次のMCLへ

戻る

TOM 2005