short cut to ... [main] [news] [forum] [download] [Hall of Fame] [game] [cg] [link]

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はこの時点では設定されません)



戻る