FrontPage
New
Index
SignIn
Edit
PC-98x1/clock/int 1Ch,AH=80h/81h
no archive mode
[[PC-98x1]]/[[clock|PC-98x1/clock]]/int 1Ch,AH=80h/81h clock というより timer (hrtimer) ですかね… !!! 動作内容 いわゆるハイレゾタイマーの取得/設定。((br)) IBM PC でいうところの [int 1Ah,AH=00h|http://www.delorie.com/djgpp/doc/rbinter/id/80/22.html] と [AH=01h|http://www.delorie.com/djgpp/doc/rbinter/id/81/22.html] にほぼ相当するようだ。 システムエリア(0000:04F1〜04F3h)の値を適当に取得/設定している感じ? !!! int 1Ch,AH=80h 入力 |||レジスタ|内容 ||AH|80h 出力 |||レジスタ|内容 ||AL|経過日(0〜3) ||CX:DX|当日中の経過クロック数((br))(1クロックは1/32秒。値は0〜2AFFFFh) どうやらシステム初期化時に、経過クロック数はその日の時刻に応じた値に設定されるらしい。 なので(値を再設定しなければ)その日の時刻を1/32秒単位で得ることができる。 ちなみに4日以上連続運転すると経過日はふつうに 0 に戻るようだ。 !!! int 1Ch,AH=81h 入力 |||レジスタ|内容 ||AH|81h ||AL|経過日時(0〜3) ||CX:DX|当日中の経過クロック数((br))(1クロックは1/32秒。値は0〜2AFFFFh) 出力 (あ、内容が破壊されるかどうか確認し忘れた…) CX:DX の値はべつにカレンダ時計と同期してなくてもいいみたい。 AL, CX, DX のいずれかに範囲外の値が設定されている場合は、すべての値が 0 だとみなされるようだ… !!! 関連システムエリア 0000:04F1〜04F3h 詳細は UNDOC2 の memsys.txt を参照。 いちおう補足すると、0000:04F3h の bit6,7 に経過日が格納されているようだ。 つまり 22bit カウンタ+2bit経過日の構成となっている。 !!! サポート確認 int 1Ch,AH=80h 呼び出し時に、あらかじめ AL や CX,DX に(正常終了時には)絶対戻ってこない値をいれておけば、BIOS 機能のサポート確認が(ひいてはハイレゾタイマのサポート確認も)できる、と思う…。 サンプルプログラム: <<{int1c80.zip}
Attachment
New:
(
download
: 6957 bytes, at 2016/04/06 13:31:37 )