- 締切済み
DOS ターボCのプログラム タイマ割込みについて
こんにちは、最近DOSのプログラムを勉強し始めました。 環境はWindowsXPでやっています。ターボC(Ver2.0)使用 実際使用するのはDOSパソコン 割込みなんですが、BIOSタイマを使用し、1秒ごとのタイム割込みは出来たのですが、500ms毎の割込みを実現したい場合どのようにすればいいのかわかりませんでしたので質問させていただきました。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- pixie-grasper
- ベストアンサー率49% (28/57)
回答No.1
その1秒ごとの割り込みをどういうふうに実現しているかちょっと分からないのですが、 アセンブリを使えるなら、int 21h/AH=25hでint 08hの割り込みベクタを上書きし、 AL <- 0x34, OUT 0x43, AL AL <- 割り込み周期の下位8bit, OUT 0x40, AL AL <- 割り込み周期の上位8bit, OUT 0x40, AL の順でポートを叩けばいけるかと思います。 今回は500ms毎の割り込みを実現したいので、割り込み周期は59659ticks。これの下位8bitは0Bh、上位8bitはE9hですかね。 http://www.computing.dcu.ie/~ray/teaching/CA296/notes/8086_bios_and_dos_interrupts.html http://d.hatena.ne.jp/kobapan/20090506/1241618752 http://en.wikipedia.org/wiki/Programmable_interval_timer
補足
御回答ありがとうございます。 1秒の割り込みの実現方法ですが、 BIOSタイマを使用し実現を行っています。 BIOSには、毎秒18.2回カウントアップするカウンタ値の取得・設定の関数が有りますので それを利用しました。厳密に言うとmain関数内で無限ループの中でカウンタ値を取得し、IF文等で 1秒割り込みを実現しています。