wmdrv v0.6a
2026-04-01
タグ: #releaseこの前、V30 と 386DX が搭載された PC-98 を求めた結果、案の定 PC-9801RA 後期でなく PC-98RL が生えた話を書いた。 そこでも言ったが「入手した以上何かに使わないと勿体ない」ということで、何かハイレゾの作業をやることにして、結果 wmdrv のハイレゾ対応をやって wmdrv v0.6a として公開した。 CAD/CAM によく使われたと聞くハイレゾモードでタブレットを利用可能にするというのは、なんだかノーマルモード用のタブレットドライバという姿よりも板に付いている気がする。
ただ、wmdrv が提供する int 33h のファンクションはハイレゾモードでもノーマルモード同様マイクロソフト仕様になっている。
ハイレゾ機は ROM で違う仕様のマウス BIOS を持っているようなので、ハイレゾ機内蔵マウス BIOS を使うアプリケーションとは互換性がないことになってしまっている。
NEC 純正ハイレゾマウス BIOS と非互換であるという欠点は致命傷なのか掠り傷にもならないのか、実感を伴って把握することなど全くできていないが、「互換があるに越したことはないだろ」と言われれば首肯せざるを得ないので、何か機会や機運があれば互換モードを足すかもしれない。
作業を振り返ると、ハイレゾ対応は、想像していた通り IO ポートや INT の差異は大したことはなかったが、描画周りの機能追加がやや難儀だった。 ハイレゾの VRAM 領域は 128KiB あるため、単一のセグメントアドレスで全 VRAM にアクセスすることができない。 マウスカーソルの描画はよく行われる処理であろうから、描画処理をノーマルモード向けに 16bit 幅のレジスタでそれなりに最適化してしまっていたのが裏目に出て、思ったより各所を変更することになってしまった。 最終的には、マウスカーソルの描画範囲は 64KiB 以内に収まるので、最初に1回描画開始位置として適切なセグメントとオフセットを計算して、その後はセグメントレジスタに触らないようなコードになった。
ハイレゾ対応以外のところでは、新規の起動オプションとして /x を追加した。
/x を指定するとタブレットを使用せず(RS-232C の割込に常駐せず)、バスマウスのみを入力とするマウスドライバとして動作する。
また、特定条件下で割込ベクタを破壊するとか、マウスの XOR マスクのデータで XOR でなく OR をしていたといった、だいぶ酷いバグも見つかったので修正した。
話が少し変わりますが、v0.4a の公開記事で、8086 命令を使うようにしたために8086搭載機でも動くであろう旨を書きましたが、ちゃんと調べてみると古い PC-9801 の差異の吸収を行うコードが入っておらず、多分正常動作しないと思われますので、ここに訂正します。 少なくとも、無条件で 0e000h の VRAM プレーンにアクセスしているため何か別のメモリがあると書き換えてしまうのと、2D FDD インターフェースのイメージが出ている IO ポート 5fh でウェイトを取っているという問題があります。