Image: DOS/Vで英語版DOS用マウスドライバーが使えない理由

今、DOS/V用マウスドライバーを開発していて欧米のDOSと違う部分にかなり苦労させられているけど、分かってきたこともあるのでまとめておく。

DOS/Vの日本語環境では英語版やDOS用互換マウスドライバーの一部が動作しないことがある。IBM DOSバージョンJ5.02/VのDOSSHELLでマイクロソフト製、ロジテック製などいくつかのマウスドライバーを調べた結果は次の通り。

  • Microsoft Mouse Driver Version 7.04(IBM DOS J5.0/V付属) - OK
  • Microsoft Mouse Driver Version 7.04(IBM DOS 5.0米国版付属) - クリックに反応するがカーソル無し
  • Microsoft Mouse Driver Version 8.20(英語版) - 使用不可
  • Microsoft Mouse Driver Version 8.21J(Windows 3.1日本語版付属) - OK
  • Microsoft Mouse Driver Version 9.01(英語版) - 使用不可
  • Microsoft Mouse Driver Version 11.00.25(Windows 95汎用) - OK
  • Logitech MouseWare 6.5(英語版) - クリックに反応するがカーソル無し
  • Logitech MouseWare 7.2(英語版) - OK
  • ロジクール マウスウェア 7.2J - OK
  • Genius Mouse Drivers v10.10 - 使用不可
  • CuteMouse v2.1 beta4(FreeDOSのコンポーネント) - 使用不可

原因は次の通り。

  1. マウスドライバーがDOS/V固有の画面モードに対応していない。
  2. DOSアプリケーション側が署名チェックでマウスドライバーを弾いている。

まず1について。DOS/V日本語環境のテキストモードはVGA画面モード12H相当の16色グラフィックモードを利用し、見かけ上は画面モード3(16色エミュレートCGAテキストモード)としている。内部動作の詳細は以前の記事で書いた通り。このため、モード3用にBIOSを通して画面を書き換えるDOSアプリケーションは正常に動作するが、モード3を前提としてハードウェア(VGAのI/Oポートやビデオメモリー)を直接操作するDOSアプリケーションは動作しない。

DOS/Vに対応したマウスドライバーは、DOS/Vが日本語環境で動作していることを検出した場合、マウスカーソルの描画にBIOS割り込み INT 10H, AH=13H(文字列の読み取りと書き込み)を使用する。一方、DOS/Vに対応していないマウスドライバーは、VGAがハードウェア的に画面モード3でセットアップされていることを前提に、ビデオメモリーを直接書き換える。本来の画面モード3はテキストバッファーがメモリーアドレスB8000Hに配置されており、マウスドライバーはここを書き換えようとする。DOS/Vの疑似画面モード3は、実際にはモード12H相当なので、APAバッファーがメモリーアドレスA0000Hに配置されている。ビデオメモリーの外を書き換えていることになるから、画面は変化しない。

これだけが理由であれば、カーソルは描画されなくともクリックには反応するはず。しかし、実際には、マウスドライバーによってはIBM DOS J5.0/VのDOSSHELLやMicrosoft Works(DOS/V版)で全く反応しないものがあった。これらはマウス割り込み(INT 33H)を最初に使用する前に、そのドライバー常駐部分の先頭アドレス(正確には、INT 33Hエントリーポイントの直前)にMicrosoft ***という文字列があることをチェックしている。

LogitechはドライバーにThis is a LOGITECH mouse driver, but some software expect here the following string:*** This is Copyright 1983 Microsoft ***というメッセージを入れて、署名チェックが通るようにしている。

同じIBM DOS J5.0/Vでも英語環境ではCuteMouseドライバーでDOSSHELLを起動できた。上記のように互換ドライバーでも回避するものやバージョン番号による判別も可能なのに、なぜ日本語版だけ署名チェックがあるのか。一つDOS/V固有の事情があるとすれば、J-DOS用のマウスドライバーにはIBMのみでMicrosoftの著作権表示がなく、署名も入っていない。J-DOSの画面モードはこれまたDOS/Vとも英語版DOSとも異なるメモリーアドレスにビデオメモリーがあるため、後からDOS/Vを追加するにあたって署名チェックでマウスドライバーがDOS/V用であることを保証する必要があったのでは無いかと推測する。

参考文献


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!