2012年12月02日

画面描画期間検出(7)

  昨日アップした画面描画期間の検出プログラムは、やはり間違っていたようです。

  改定版をアップします。

vsync2_2.zip

  拡張RAMが必要で、ページ4です。
  前と同じですが、画面切り換えを使っている関係で、mk2、66では動作しません。



  方法ですが、基本は同じです。

・画面描画期間の検出の方法(基本)

  画面描画期間の時だけ止まっているCPU で、その止まっている期間を検出するためには、CPU の外部に基準の時計が必要になります。
  SUB-CPU がつながっている8255 のポートを使用します。

  特定ポートにデータを書き込むと、4MHz で60〜80クロックぐらいかかる処理があります。


  これを使い、画面描画期間を判定します。

  データ書き込み
  ↓
  4MHz で50クロックぐらい待つ
  ↓
  処理が完了しているかを判断する


  画面描画期間以外:処理が完了しない。
  画面描画期間:CPU が途中で止まっているため、実際には50クロック以上の時間が経っており、処理が完了する。

  で判断します。


・画面描画期間の検出の方法

  上記の基本の検出を4度行います。その際、一定期間(具体的には155クロック)空けます。
  こうすると、画面描画をしている時は、4度の検出のどこかで検出できるようになります。

  ただし、検出には大体8走査線分(描画期間中)、3走査線分(描画期間中)の時間がかかります。


  初代P6では、1走査線は 910クロック@14M(253クロック@4M)分の時間で、CPU が動作できる期間はその内の、296クロック@14M(83クロック@4M)ぐらいです。
  また、mk2、66では、1走査線は 912クロック@14M(255クロック@4M)分の時間で、CPU が動作できる期間はその内の、304クロック@14M(85クロック@4M)です。

  この走査線とCPUが動作できる/動作できない期間はほぼ一定間隔なので、検出期間をいい感じにすると、4度の検出の間のどこかで引っ掛けることが出来ます。


vsyncdet.xls


  ↑が説明の図です。

  ピンクの長方形が、検出方法の基本で書いている、サブCPU の処理完了待ちです。ピンクの最後で処理が完了しているかどうかを判断します。
  ピンクの最後が水色になっているのは、そのタイミングで画面描画期間(CPUが止まった期間)を検出できることを示します。


  サブCPUにアクセスする間隔をもっと短くすればよさそうなんですが、短くすると応答の時間が極端に長くなったり短くなったりと、変になります。
  なので、実測から今の155クロック間隔にしています。


 サンプルプログラムでは描画期間判断ルーチンを2度呼んでいますが、これは

 1)描画期間が開始されるまで待つ。その後に
 2)描画期間が終了するまで待つ。

 として、描画期間が終了した直後を探しています。

 2)描画期間が終了するまで待つ。だけでよさそうなんですが、これだと描画期間直後ではなく、中間の時も検出される場合があるからです。

 マウスのプログラムを作った時にハマりました(^^;



  ちなみに、PC-6001F の方でも、サブCPU からの応答値を合わせましたので、同じように動作すると思います。


posted by えすび at 23:26| Comment(0) | P6解析:画面周り | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。