create.soft/469/1-13,23-24,27 uu giso003a.lzh

	98 DOS で USBASPI.SYS を使ってみる試みです。

	具体的には Panasonic KXL-CB20AN を 98 DOS で使えるようにします。

	USBASPI.SYS にはバージョンやメーカーの違いがありますが、
	NOVAC,LECS,NEC 等の USBASPI.SYS も何とかなるかも知れません。

----

	当方の環境は、

		本体		NEC PC-9821RvII26/N20
		OS		NEC MS-DOS 6.20
		USB I/F		BUFFALO UCI2-P2
		USB 機器	Panasonic KXL-CB20AN
		USB ドライバ	Panasonic USBASPI.SYS 2.20
				Panasonic USBCD.SYS 1.00
	です。

----

	それでは本題です。

	USBASPI.SYS の組み込み時に98本体をAT互換機っぽく擬装し、
	USBASPI.SYS がそのまま組み込まれるようにします。

----

	つまり、

		config.sys

		|LASTDRIVE=Z
		|DEVICE=HIMEM.SYS		←任意
		|DEVICE=擬装.COM 開始		←擬装開始
		|DEVICE=USBASPI.SYS
		|DEVICE=擬装.COM 終了		←擬装終了
		|DEVICE=USBCD.SYS /D:USBCD001

		autoexec.bat

		|MSCDEX /D:USBCD001

	という流れになります。

----

	EMM を併用しない場合でも、
	安全のため、XMS ドライバは必ず組み込むようにして下さい。

	XMS ドライバを組み込まない場合、
	拡張メモリの取得が INT-15h AH=88h 経由になりますが、
	PC-98x1 のようにシステム共通域で管理するのとは事情が異なります。

	USBASPI.SYS が INT-15h AH=88h をフックするので、
	もし偶然 AH=88h でマウス割り込みが発生したりすると危険です。

----

	USBASPI.SYS の組み込み時に必要な擬装は、

		・タイマカウンタ 0:046Ch-046Fh	必須			[*1]
		・VDS フラグ 0:047Bh bit5	必須			[*3]
		・INT-13h AH=08h		必須と思えないので無視	[*2]
		・INT-15h AH=87h		必須(EMM 併用時)	[*2]
		・INT-15h AH=88h		必須(XMS 無時)	[*2]
		・INT-15h AX=2401h		必須(A20 無効時)	[*2]
		・INT-10h AH=0Fh FEh		必須(日本語化時)	[*1]

	です。

USBASPI.SYS の種類により必要な擬装は異なります。
[*1] Panasonic,NOVAC,LECS,NEC
[*2] Panasonic
[*3] NOVAC,LECS,NEC

----

	タイマカウンタはカレンダ時計割り込みの半分 16Hz で誤魔化します。

----

	タイマカウンタ、VDS フラグの位置は、
	PC-98x1 は「SCSI ID #3 #6 のパラメータテーブル」なので、
	擬装開始後すみやかに擬装終了しましょう。

	擬装終了しないまま、HSB 等で高速再起動した場合、
	HDD の固定ディスク起動メニューが意味不明な SCSI 装置を探そうとして
	もたついたりします(たぶん)。

	安全のため「SCSI ID #3 #6 のパラメータテーブル」が全て 0
	の場合のみ擬装するようにしています。

	つまり、SCSI ID #3 #6 に接続機器がある環境では擬装しません。

----

	INT-15h AH=87h は、INT-1Fh AH=90h に変換して擬装します。

	EMM の INT-1Fh AH=90h のエミュレーションが、
	搭載メモリのリミットを越えたアドレスで転送エラーや例外にならず、
	物理アドレスにアクセスする仕様であることが必要です。

	NEC 版 EPSON 版 MS-DOS 6.20 付属の EMM386 は大丈夫そうです。
	EMM386 以外の一般的な EMM は残念ながらそういう仕様ではなさそうです。

	LEMM は 4.04b 以降で IO90 を指定すればいけます。

追記
5.01a 以降は IO90 がデフォルトになりました。

----

	EMM の INT-1Fh AH=90h のエミュレーションを使わずに、
	本来の BIOS の INT-1Fh AH=90h を使えばいろいろいけそうです。

	つまり、

		INT-1Fh AX=8C00h
		↓
		リアルモード
		↓
		INT-1Fh AH=90h
		↓
		INT-1Fh AX=8B00h
		↓
		仮想86モード

	というように実行することで、

		EMM386
		VMM386
		MELEMM
		VEM486 + VEMWINX
		LEMM 4.04a 以前(NOIO90 同様)

	はいけそうです。

追記
LEMM で 2nd CPU (AP) が有効な場合、USE8B8C (RM) には L2.com が必要です。

----

	それぞれの擬装する/しないはオプションで個別に設定出来ます。

	* がデフォルトです。

	  開始		擬装開始
	  BEGIN		〃
	  ON		〃

	  終了		擬装終了
	  END		〃
	  OFF		〃

	* INT15		INT-15h 擬装する
	  NOINT15	INT-15h 擬装しない

	* A20		INT-15h AX=2401h 擬装する
	  NOA20		INT-15h AX=2401h 擬装しない

	* VDS		VDS フラグ擬装する
	  NOVDS		VDS フラグ擬装しない

	* TIMER		タイマカウンタ擬装する
	  NOTIMER	タイマカウンタ擬装しない

	* SAFETY	擬装が USBASPI.SYS 以外に影響しないよう努力する
	  NOSAFETY	あまり努力しない

	  USE8B8C	リアルモードに戻る
	  RM		〃
	* NOUSE8B8C	リアルモードに戻らない
	* NORM		〃

	* CHECKXMS	XMS ドライバ存在チェックする
	  NOCHECKXMS	XMS ドライバ存在チェックしない
	  		XMS ドライバ無時 → INT-15h AH=88h 擬装必須

	  JAPANESE	日本語化する → INT-10h AH=0Fh FEh 擬装必須
	  JA		〃
	* NOJAPANESE	日本語化しない
	* NOJA		〃

	  15F5		INT-15h を INT-F5h にパッチする
	* NO15F5	INT-15h を INT-F5h にパッチしない

----

	なお、INT-15h の擬装が必要な USBASPI.SYS の場合、
	USBASPI.SYS を組み込んだ後の動作にも INT-15h の擬装が必要なため、
	擬装終了後も、INT-15h の擬装だけは続けます。

	INT-15h の擬装を止めたい場合は NOINT15 を指定して下さい。

※擬装 v0.03a で追加した 15F5 について

	擬装開始時に 15F5 を指定すると、
	組み込んだ USBASPI.SYS が呼び出す INT-15h を INT-F5h にパッチし、
	INT-15h のファンクションを INT-F5h で呼び出させます。
	(CD 15 → CD F5)

	擬装終了時に INT-15h の擬装は自動的に止まります。

	マウス割り込みとの共存に安心感が増すので、15F5 をおすすめします。

	おすすめならデフォルトにすればよいのでは?

	いえ、擬装.com は当初高らかにパッチしないぞ宣言しておりますゆえ(^^;
	(ZOB Station BBS create.soft Note 469 Res 2)