TOS.SYSの提供する機能
onDOS版TOWNS-OSのTOS.SYSはTOWNS-OSのIO.SYSで提供される機能の内、
MS-DOS6.2のIO.SYSでは提供されない機能を代行するデバイスです。
int 0xaf ah=0x08-09 高速モード制御
int 0x8e ah=0x20-23 拡張メモリ管理
int 0x8e ax=0xc701 TOS.SYSファンクション
高速モードの設定
[入力] ah=0x08
al=0x00(互換モード),0x01(高速モード),0x02(CMOSの設定値)
[呼出] int 0xaf
[出力] ah=エラーコード
0x00(正常終了)
0x02(パラメーター異常)
0x80(高速モード未対応)
al=0x00(互換モード),0x01(高速モード),変化なし(エラー時)
[備考] エラー時キャリーセット
意外なことにCMOSへの書き込み機能はありません
高速モードの取得
[入力] ah=0x09
[呼出] int 0xaf
[出力] ah=エラーコード
0x00(正常終了)
0x80(高速モード未対応)
al=0x00(互換モード),0x01(高速モード),変化なし(エラー時)
[備考] エラー時キャリーセット
拡張メモリ利用可能サイズ問い合わせ
[入力] ah=0x20
edx=0x545f4f53("T_OS")
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
cx/ecx=利用可能な最大のブロックのサイズ(KB)
[備考] edx未指定時は16bit(cx)
XMM常駐後はXMMfunctionを呼び出します
拡張メモリ確保
[入力] ah=0x21
edx=0x545f4f53("T_OS")
cx/ecx=確保するブロックのサイズ(KB)
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
0x80(メモリ不足)
0x81(管理領域が32blockを超えた)
dx:di=確保したブロックの物理アドレス
[備考] エラー時キャリーセット
edx未指定時は16bit(cx)
XMM常駐後はXMMfunctionを呼び出します
拡張メモリ解放
[入力] ah=0x22
dx:di=解放するブロックの物理アドレス
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
0x82(指定されたアドレスは管理外)
[備考] エラー時キャリーセット
XMM常駐後はXMMfunctionを呼び出します
拡張メモリコピー
[入力] ah=0x23
cx=サイズ(byte)
bx:si=転送元物理アドレス
dx:di=転送先物理アドレス
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
[備考] 常にRAW拡張メモリコピーを呼び出します
TOS.SYSのバージョンの取得
[入力] ax=0xc701 dl=0x00
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
al=0x00
dh=MajorVersion
dl=MinorVersion
bh=Level
bl=0x00
[備考] V2.1L40(dx=0x0201 bx=0x2800)
OSのバージョンではなくTOS.SYSのバージョンです
不明(int8e_c701_01)
[入力] ax=0xc701 dl=0x01
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
[備考] 何もしない
10msタイマ32bitカウンタ物理アドレス取得
[入力] ax=0xc701 dl=0x02
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
ebx=10msタイマ32bitカウンタ物理アドレス
[備考] 内部でタイマ管理BIOS(int 0x97)を使用しています
不明(int8e_c701_03)
[入力] ax=0xc701 dl=0x03
[呼出] int 0x8e
[出力] ah=エラーコード
0x00(正常終了)
al=0xff
[備考] 何もしない
RAW拡張メモリコピー
[入力] cx=サイズ(byte)
bx:si=転送元物理アドレス
dx:di=転送先物理アドレス
[呼出] call 0x0040:0x0024
[出力] なし
[破壊] EFLAGS
[備考] 拡張サービスBIOS(int 0x8e ah=0x23)等から呼び出されます
386sx機では内部でアドレス変換を行います
プロテクトモード移行時はフックします
RAW拡張メモリコピー準備
[入力] なし
[呼出] call 0x0040:0x0028
[出力] なし
[破壊] EFLAGS
[備考] TOS.SYS初期化時以外で呼び出されるタイミングは不明です
プロテクトモード移行時はフックするべきなのかもしれません
内部では一時的なGDT用領域の初期化等を行っています
(ただしGDTRはこの時点では設定されません)
戻る