VDPステータスの取得

「VDPステータスの取得」の編集履歴(バックアップ)一覧はこちら

VDPステータスの取得」(2012/04/22 (日) 06:48:07) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

ステータスを参照する主な目的はVDPコマンドの終了などのチェックである。 ステータスレジスタはR#15にステータスレジスタ番号をセットし、 0x99(Port-1)をリードすることで行なう。 ステータスのリードはI/Oポートの0x99(Port-1)をリードするので、 ステータス読み出しは二つのセクションに分かれる。 ステータスの取得は以下のような関数で実現可能だろう。 //CHECK VDP STSTUS unsigned char VStatus(unsigned char sreg){ unsigned char rtn; //R#15 VRegister(15,sreg); rtn=inp(0x99); //R#15 CLEAR VRegister(15,0); return(rtn); } ステータスを読む際に注意する点は、関数の終了時にR#15をゼロクリアして 戻る事。これをしないとその後、VDPが動作しない。 VDPが正しく動作しなくなるので、BIOSのタイマー割り込み期間処理などで 問題が生じる。 VDPアクセス処理なのにシステム全体が不具合を生じるといったトラブルを招く。 ステータス取得関数を用いたVDPコマンド終了待ちの例を以下に示す。 do { status=VStatus(2) & 1; } while(status); このループで、VDPコマンド実行完了までウエイトする。 チェックするレジスタはS#2の1bitの、0/1を確認する。 VDPはCPUと比較して遅いので、待ち時間をウエイトで消費するのは得ではないが、 画面と同期処理する場合は必ずウエイトを待たないと正しく表示されない。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。