PC-98x1/clock/int 1Ch,AH=80h/81h

PC-98x1/clock?/int 1Ch,AH=80h/81h

clock というより timer (hrtimer) ですかね…

動作内容

いわゆるハイレゾタイマーの取得/設定。
IBM PC でいうところの int 1Ah,AH=00hAH=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