Windows上でJWASM(フリーのMASM6互換アセンブラ)と98エミュを使ってのプログラム作成に関するエトセトラ。また、PC-98プログラミング関係の書籍紹介とか自作ソフトの進捗とかも。

補足

エミュと実機での画像表示の違いの項で、透過情報を入力、で済ましていた部分について、混乱を招くといけないので一応補足。
98のプレーンの関係上、VRAMを直接操作して画像を表示する場合には、表示したい部分だけをフラグとandして0でクリアし、透過部分を色番号0にしたデータでandを取ればOK、と言うことになります。
で、透過情報を入力、の部分ではEGCを使って全プレーンを一括して0でクリアする処理をしています。
0クリア処理でのアクセス回数が1/4になるので単純に速くなる感じのようです。
その後はそれぞれのプレーンでand表示をしているだけです。
詳しくは以前も書きましたが「マシン語ゲームグラフィックス」を参照。

では、より速い方法は?

PC98では、VRAMの表示されない部分を使って合成表示を行い、最後に一括転送で戻すと速い、と「マシン語ゲームグラフィックス」にありました。
この場合はy座標を変えずに連続処理が出来たりして通常よりも結果的に速くなるとか何とか。
大まかなクロック数計算もされていますので、信頼性は高いです。

また、エミュと実機での画像表示の違いの項で使ったマスクレジスタでの表示はプレーンをクリアする必要が無く、工夫すればその分速い可能性が無いとは言えません。
が、マスクレジスタを一々変える必要があるので、メモリアクセスの際の処理をかなり工夫しないと結局遅くなると思われます。
クロック数計算とか最適化をやる気はないので多分、でしかないですが。


昔のプロのお仕事の場合では、現在連載中の風雅システムの技術的読み物コーナーに、高速表示についてが載るっぽいです。
(2015/10/29現在は四角の塗りつぶしまでしかないですが、高速表示についてはあと二回あるみたいなので…
但し、ここ数年更新されていないのでこのままお蔵入りもありそうですが…非常に面白いコーナーなんですけどね。)


その他

ある範囲をあるプレーンを使わない8色だけで表示すると、当然ながらその部分はVRAM転送が一回減って速くなります。
シューティングの雑魚敵など色数が必要でない画像が多いもので有用な方法だろうと思います。
また、プレーンのクリア方法にフォアグラウンドカラーを使うとかして上手くやれば、色の組み合わせ方の自由度は上がりそうな気がします(コードを書いてないので気のせいかもしれませんが)。
パレットを工夫する、というのはよく聞く話なので、画像の構成とかを工夫すればかなり違うのではないかと思われます。



今回のネタは表示ルーチンの汎用化とは逆行するものなので、コードが煩雑になりサイズが大きくなる副作用があります。
高速化の必要がないソフトでは、特に行う必要はないでしょう。

Menu

管理人/副管理人のみ編集できます