[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 574] Re: 自動補正の仕組み(Re:About timer routine type-B for AT).



やっほぉ、<川合の旦那>
[2000年4月19日(水)]にもろた
【[OSASK 573] 自動補正の仕組み(Re:About timer routine type-B for AT).】への返答っ! 。

川合>  i486SX/25MHzなどというとてもレトロなCPUのAT機がうちにはありま
川合>して、早速試してみました。僕の悪い予想に反し、自動補正はばっちり
川合>効きました。もちろん、上記の3択のうちのどれもやっていません。BE
川合>EP音は出ますし、タイプBのルーチンですし、リフレッシュ間隔もいじ
川合>っていません。

をを、それはめでたい。
うーん、でもできれば一桁台の調査もしたいなぁ・・・(個人的に)

川合>  次にタイプBでのアルゴリズムです。タイプBもPITを使います。タ
川合>イプBでは、PITの設定を頻繁に変更します。先の3ミリ秒後、7ミリ
川合>秒後、8ミリ秒後という設定の場合、最初にPITの割り込み間隔を3ミ
川合>リ秒にセットします。これで、3ミリ秒間はハードウェアからの割り込
川合>みが起きません。ハードウェアからの割り込みが起きたら、すぐに最初
川合>の処理を呼び出します。そして今度は、PITの設定を4ミリ秒に変更し
川合>、次の割り込みを待ちます。これもハードウェアからの割り込みが来た
川合>ら、2番目の処理を呼び出した後にPITを1ミリ秒に設定し直すわけで
川合>す。・・・タイプAでは、この3つの割り込み処理を完了するために、
川合>ハードウェアからの割り込みを8回受け付けました。一方、タイプBで
川合>は3回だけです。この差が、最低負荷に大きく影響します。

要するに決まった間隔で区切ってそれを単位にするか、
単位自体を変更していくか、ってことだね。
基本的な疑問かと思うけど、PITの変更に関わるロスって
無視できるような物なのかな?
#PITってOTASKで試してたアレだよね?

川合>  また、タイプBでは割り込み間隔の設定単位がPITの限界まで使える
川合>というものポイントです。1ミリ秒なんていう荒い単位に縛られません

ハードを限界まで絞り上げることもまた可、と。

川合>  PITの設定を変更するのにも、当然時間がかかります。どんなに速いC
川合>PUであってもです。設定を変更している間の時間は一体誰がどこで測っ
川合>ているのでしょうか?・・・答えは、誰も測ってくれてはいない、です
川合>。もし、設定にかかる時間が分かれば、この設定にかかる時間を差し引
川合>いて設定しなければいけません。この機能を僕は「自動補正」と呼んで
川合>います。タイプAではPITの設定を変更しないので、この自動補正は全
川合>く不要で、だから今までこんな問題は一度も起きませんでした。

んん、要するに修復の対象はタイプBの為に生じてしまった誤差だね。

川合>る訳です。これを使えばいいというのが、僕の案です。この残りの2つ
川合>のうち、1つはメインメモリのリフレッシュ制御に使われていて、もう
川合>一つはBEEP音の音程制御に使われています。僕は、BEEP音の制御は自由
川合>なままにしておきたかったので、リフレッシュ制御の方に目を付けまし
川合>た。

それでBeepとリフレッシュか。納得。

川合>  いろいろ調べると、430TXでDIMMを使っている場合は、リフレッシュ
川合>制御用に「18」という設定がされているとわかりました。これは、18x
川合>0.838マイクロ秒という意味で、かなり小さい値です。この値を読み出
川合>せば、「0.838マイクロ秒ごとに時間を刻む時計」として利用できます
川合>が、18カウントで針が1周してしまい、18カウント以内に読み出さない
川合>と、誤認してしまいます(本当は23カウント経っているのに5カウント
川合>しか経っていないと判断してしまう)。・・・これは、200MHz以上のCP
川合>Uにはそんなに厳しくない値ですが、それ未満では誤認の危険がありま
川合>す。誤認しても、タイマーの誤差がわずかずつ累積するだけで、それ以
川合>上の害はありません。

一周したのを気づかずにそのまま読んでしまうわけだ。

川合>  ところが、僕が使っているi486SX/25MHzマシンは違いました。もちろ
川合>んリフレッシュ間隔の設定が18のときは誤差が溜まっていきましたが、
川合>標準値が18ではなかったのです。なんと、151でした。チップセットが
川合>なんなのかちょっと分からないのですが、メモリはFastPageかな?・・
川合>・とにかく、この標準値をそのまま使う限り、誤差はちゃんと自動補正
川合>され、良好な精度を保っていることを確認しました。

チップセットに依存かメモリチップに依存なのかな?
んと、標準値は 自動計測→自動補正の為にカウント ってできるの?

川合>  まあ、誤差が累積しているかどうかは簡単に調べられます。ユーザー
川合>は、誤差が累積しているような気がするなら、チェックしてみればいい
川合>でしょう。そして、累積していて、かつ、それが気になるなら、タイプ
川合>Aルーチンに入れ替えるとかすればいいでしょう。

当然プログラム側で選択するようなことも可能なんだよね?
#例えば音関連のプログラムとかが動いている場合だとタイプA、とか。
##そこまで動的に変更して利点が出るのかどうかはまた別だろうけど。

でわでわ

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/  氏名:もしかしたら橋 直行                                      _/
_/  E-mail:n-hashi !Atmark! interlink.or.jp,PXW06256 !Atmark! nifty.ne.jp             _/
_/_/_/_/_/_/_/_/_/_/_/_/_/-----平成12年04月19日(水曜日) PM11時07分_/_/