PC-98x1/clock/int 1Ch,AH=80h/81h
PC-98x1//int 1Ch,AH=80h/81h
clock というより timer (hrtimer) ですかね…
動作内容
いわゆるハイレゾタイマーの取得/設定。
IBM PC でいうところの int 1Ah,AH=00h と AH=01h にほぼ相当するようだ。
システムエリア(0000:04F1〜04F3h)の値を適当に取得/設定している感じ?
int 1Ch,AH=80h
入力
レジスタ | 内容 |
---|---|
AH | 80h |
出力
レジスタ | 内容 |
---|---|
AL | 経過日(0〜3) |
CX:DX | 当日中の経過クロック数 (1クロックは1/32秒。値は0〜2AFFFFh) |
どうやらシステム初期化時に、経過クロック数はその日の時刻に応じた値に設定されるらしい。 なので(値を再設定しなければ)その日の時刻を1/32秒単位で得ることができる。 ちなみに4日以上連続運転すると経過日はふつうに 0 に戻るようだ。
int 1Ch,AH=81h
入力
レジスタ | 内容 |
---|---|
AH | 81h |
AL | 経過日時(0〜3) |
CX:DX | 当日中の経過クロック数 (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