USBマウス非対応MBのDOS/VでUSBマウスを使う [DOS]
![Image: USBマウス非対応MBのDOS/VでUSBマウスを使う [DOS]](/blog/img/2025/ctmousev_3.webp)
そもそもCuteMouseドライバーをDOS/Vに移植しようと思ったきっかけは、かつて中古で山ほど出回っていたPS/2マウスもいよいよ骨董品になってきて、何か代替の方法はないかなー。というところからスタートした。
FreeDOSのCuteMouseドライバーは公称で「USBマウスをサポート」とあるが、CuteMouse自体はマウスと直接通信しているわけではなく、BIOSの割り込み機能 (INT 15h) を使用している。よって、そもそもCuteMouseにUSBマウスをサポートするための特別なドライバーが含まれているわけではなく、サポートの程度はマザーボードのBIOS次第ということになる。
+---------------+
| Application |
+---------------+
^
| INT 33h
v
+---------------+
| CTMOUSE |
+---------------+
^
| INT 15h, AH=C2h
v
+---------------+ +--------------+
| M/B BIOS | <---> |USB Controller| <---> (USB Mouse)
+---------------+ +--------------+
^ ^
| IRQ 12 | I/O 60h,64h
|(INT 74h) v
+---------------+
|8042 controller| <---> (PS/2 Mouse)
+---------------+
私のASUS P2BではUSBキーボードは使えるんだけど、USBマウスは使えなかった。そこで、Bret Johnsonn’s DOS USB Driversを併用してみた。このドライバーはIntelかVIA製チップセットに使われているUHCI (USB 1.1) コントローラーを備えている必要があるが、今回のASUS P2BにはサウスブリッジのIntel PIIX4チップセットにUHCIコントローラーがあるので動作対象のはず。USBマウスはLogicool G502 HEROを使った。
USBホストコントローラーのドライバー (USBUHCIL) を導入するとBIOSのレガシーUSBサポートが無効になるため、そのままではUSBキーボードも使用できない。そのため、USBUHCILとUSBKEYBを自動で続けて導入できるように、予めバッチファイルを用意する必要がある。USBUHCILに/DISABLELEGACY
スイッチを付けると、実行時の警告メッセージを非表示にできる。
UMBメモリーはセグメントC800-DFFFhまで96KBを確保したが、USBUHCILがかなり容量を取る。CD-ROMドライバーは入ったので、後はMSCDEXを入れたいところだが、残りは6KB程度しかなく、これ以上詰め込むのは厳しい。かな入力をあきらめて$IAS.SYSを抜けば、入るかもしれない。
USBKEYBを入れるとキーリピートが利かない。ドライバー付属のドキュメントには、キーリピートの速度はMODE CONコマンドで変更できると書かれているが、これを実行すると「この機械では使用できない機能です」というメッセージが出て、拒否される。ゲーム用途にはかなり不便だ。PS/2キーボードは変換コネクターでまだ当分現役だろうから、これを使った方が良い。
日本語、英語ともたいていのDOSアプリケーションはマウスを使えたが、DOS文書プログラムはUSBキーボードと相性が悪いのか、一部のキーが使えない不具合があった。Windows 3.1日本語版は起動中に異常終了した。
使用したバッチコマンドと実行時のメッセージ出力は次の通り。
C:\>USBDOS\USBUHCIL /DISABLELEGACY
USBUHCIL 0.14, (C) 2007-2010, Bret E. Johnson.
DOS Driver for a Universal HCI compatible USB Host Controller.
LITE version (maximum 16 Devices, no Isochronous Transactions).
Initializing Universal Host Controller #0. This may take several seconds...
USBUHCIL has been automatically installed into Upper Memory.
Type "USBUHCIL U" to Uninstall USBUHCIL from memory.
C:\>USBDOS\USBKEYB
USBKEYB 0.09, (C) 2007-2009, Bret E. Johnson.
DOS Driver for up to 4 USB Keyboards.
USBKEYB has been installed into Low Memory.
Type "USBKEYB U" to Uninstall USBKEYB from memory.
C:\>USBDOS\USBMOUSE
USBMOUSE 0.13, (C) 2007-2019 Bret E. Johnson.
DOS Driver for up to 8 Generic USB Mice.
Locating and Resetting the PS/2 Mouse (this may take several seconds) ...
USBMOUSE has been installed using the following memory allocation:
Conventional (Low) Memory : 0 bytes
Upper Memory (UMBs) : 2688 bytes
Expanded Memory (EMS) : 16384 bytes
Extended Memory (XMS) : 0 bytes
DOS Protected Mode Services (DPMS): 0 bytes
Type "USBMOUSE /U" to Uninstall USBMOUSE from memory.
C:\>CUTEMOUSEV
CuteMouse v2.1 b4V01 with DOS/V support
Installed at PS/2 port
MEM /Cの実行結果。
基本メモリー:
名前 サイズ(10進数) サイズ(16進数)
------------- --------------------- -------------
IBMDOS 15984 ( 15.6K) 3E70
$FONT 2608 ( 2.5K) A30
HIMEM 1072 ( 1.0K) 430
EMM386 4240 ( 4.1K) 1090
COMMAND 4208 ( 4.1K) 1070
- 空き - 64 ( 0.1K) 40
- 空き - 626960 (612.3K) 99110
空きメモリー: 627024 (612.3K)
UMB メモリー:
名前 サイズ(10進数) サイズ(16進数)
------------- --------------------- -------------
SYSTEM 170032 (166.0K) 29830
$DISP 19040 ( 18.6K) 4A60
$IAS 7072 ( 6.9K) 1BA0
CDROMDRV 7520 ( 7.3K) 1D60
KEYB 5904 ( 5.8K) 1710
USBUHCIL 29696 ( 29.0K) 7400
USBKEYB 9168 ( 9.0K) 23D0
USBMouse 2672 ( 2.6K) A70
CTMOUSEJ 4032 ( 3.9K) FC0
- 空き - 272 ( 0.3K) 110
- 空き - 6544 ( 6.4K) 1990
空きメモリー: 6816 ( 6.7K)
プログラムへの使用可能全バイト数(基本+UMB) : 633840 (619.0K)
実行可能プログラム最大サイズ : 626672 (612.0K)
使用可能最大 UMB メモリー : 6544 ( 6.4K)
4587520 バイト :全 EMS メモリー
4128768 バイト :使用可能 EMS メモリー
67043328 バイト :全拡張メモリー
0 バイト :使用可能拡張メモリー
14874624 バイト :使用可能 XMS メモリー
DOS は HMA 領域に常駐しています
CONFIG.SYSの内容
BUFFERS=15
FILES=40
STACKS=9,256
DOS=HIGH,UMB
LASTDRIVE=F
COUNTRY=081,932,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM /P /E:512
DEVICE=C:\CTCM\CTCM.EXE
DEVICE=C:\DOS\$FONT.SYS /U=0
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE 4096 RAM /I=C800-EFFF /PE000
DEVICEHIGH=C:\DOS\$DISP.SYS /HS=ON
DEVICEHIGH=C:\DOS\$IAS.SYS /R=1
rem DEVICEHIGH=C:\DOS\ANSI.SYS
rem DEVICE=C:\DOS\$IAESKK.SYS
rem DEVICE=C:\DOS\$PRNESCP.SYS
DEVICEHIGH=C:\CDDRV\CDROMDRV.SYS /D:MSCD001 /V /B
rem INSTALL=C:\DOS\IBMMKKV.EXE /M=S /Z=4 /C /S=C:\DOS\$MULTDCT.PRO /U=C:\$USRDICT.DCT