[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00879] 各種 I/O の反映タイミング



以前に Hsync 中のスプライト座標書き換えが反映されない
という投稿されてがありましたが※、スプライトテーブル中の
座標を1VSync中に複数回書き替えても反映されないという
ことはこの手法でのスプライトダブラーは実現できないという
ことになります。
※ 追試してみましたがやっぱりだめのようです。

そこで、スプライトテーブルを書きかえるのではなく、スプライト
テーブルベースを変更することで、再度スプライトテーブルを
読みこませ、画面に反映させることが出来るか試してみたの
ですが、こちらでも同様に反映されませんでした。

どうやら Line 143描画直後のスプライトテーブルの状態を
ラッチしているようで、これでは XSP のようなスプライトダブラー
を作成することは無理ですね。

もし、スプライトテーブルベースの切り替えを利用しての
ダブラが出来たら、スプライトを画面中に敷き詰める事だって
不可能ではないですので期待していただけに、残念。

表示キャラクタ数を稼ぐには、背景を1面潰してBG に書くか、
(弾など)、ちらつかせて擬似的に増やすしかないということに
なりますね。

タイルパターンやパレットの書き換えは随時 or HSync単位
で反映されるので、画面上と下でパターンを書きかえること
なら出来ましたが、良い使い道は思いつきませんでした。


ウィンドウ系の設定は HSync 単位(随時?)の反映なので、
Hsync割り込みなどでクリッピング範囲を変更することで、
任意の凸多角形でのワイプやスポットライト効果を得ることが
出来るようです。
ここで気をつけないと行けないのが、HSync の割り込み
処理で、1 Line 毎に処理を行わないと行けない場合は
エントリー直後に割り込み応答を返さないといけないようです。
(そうしない場合は、ちょっとした処理ですぐに割り込みが
2ライン単位に落ち込んでしまいます)


それと、多色表示で CPU転送が実行クロックの割に遅かった
理由が推測が付きました。
「暁のコーダー・さ〜」さんのページによると※、命令のフェッチは
1クロックに付き2バイトで、メモリ読み出しと命令フェッチは
衝突するのだそうです。ということは、差分オフセット付き
mov reg,mem の場合 3〜4バイト命令で、MOV 命令の実行
自体は1クロックなので、フェッチ(2+1クロック)が間に合わなく、
プリフェッチキューが殆ど空のままで実行されることなり、実行
ステージが遊んでしまい、最終的に1パレットに付き5クロック
程度で転送されていたと言うことのようです。

※そこで参照されていた V30MZ の最適化の情報を書かれていた
   ページは消滅していました。
  Witch関係のリンクを辿って行くと消えてしまったページがたくさん
  あって、そういう所に限って有用そうな情報があったらしくて残念
  に思うことが度々あります。


                            みかり☆でした



ML Archives