DOS/V機とPC-98の判定
一部の例外を除き、WindowsのAPIを使用すれば機種に依存しないプログラムを作成できます。ほとんどのケースはWindowsAPIをコールすればこと足りるのですが、どうしても機種に依存するプログラムを作りたい(あるいは作らざるを得ない)場合、一般に以下の2通りの選択を強いられることになります。
(1)特定の機種用のプログラムと限定する
(2)機種の判定を行い、機種に合った処理を行う
(1)よりも(2)の方が優れていることは間違いありませんが、特定の機種用と謳っていても、万が一、機種を誤って起動した時の危険が大きい場合は、処理を中止するなどの処置が必要となります。つまり、機種に依存するプログラムを作る場合は、機種の判定が不可欠となるわけです。
MS-DOSが主流だったころは、機種を判定するプログラムもいくらか存在していましたが、BIOSコール、ポート入出力、ROM-BIOSの文字チェック等のWindows上では使えない手法ばかりです。そこで、今回は、WindowsAPIのみを使用してDOS/V機とPC-98の判定を行う方法について考えてみたいと思います(NXシリーズはDOS/V機と判定せざるを得ません)。
判定に使えるかも知れない、機種に依存する部分をざっと拾い上げてみましょう。
(1)システムフォルダがAドライブかCドライブか
(2)MS-DOS.SYSに機種依存する項目がないか
(3)システムフォルダにNEC*.DLL(NECの辞書)が含まれていないか
(4)VWIN32.VxDを利用したBIOSコール
(5)OEM-IDのチェック
(6)キーボードタイプ
汎用性、妥当性、安全性等を考慮して各項目について考えてみたいと思います。
(1)AドライブであればDOS/V機ではないと判断できますが、ドライブの選択が可能であるため、確実な判定はできません。
(2)MS-DOS.SYSの項目はごく一部機種依存していますが、デフォルト状態では存在せず、またユーザが故意に追加することも不可能ではないため、実質、判定には使用できません。
(3)NEC*.DLLが存在すれば、まずDOS/V機ではないと判断できますが、ファイル名なので、自由に削除・リネーム等が行えるため、判定には使用できません。
(4)どの機種で動作しているか判らない状態でこういった処理を行うのはあまりにも危険なため、使用しないほうがいいでしょう。
(5)GetSystemInfoというAPIでOEM-IDが取得できますが、IntelのCPUであればすべて0が返ってくるようです。Windows95はRISCでは動かないはずなので、このOEM-IDは事実上NT用に存在するようです。もちろん、今回のような機種の判定には使用できません。
(6)私事で恐縮ですが、PC-98からDOS/V機に変えた時、キーボードの配列の違いにはかなり苦しみました。これを判定に使えないかと思ったのですが、ファンクションキーの数が12であればDOS/V機(NXシリーズも)と判定はかなり「いける」ようです。ただ、すべての機種で調べたわけではないので、確実かどうかはわかりませんし、今後、ファンクションキーの数が増えた機種(減ることはまずあり得ません)が登場するとも限らないので絶対の判定方法ではありません。
以上、私が考えた限りでは、絶対の方法は存在せず、本気で安全かつ確実に判定を行うなら、幾つかの方法を組み合わせて、それでも判断がつかない時はユーザに指定を促すなどの方法が必要と思われます。CPUのメーカの判定は確実に行えるのに(厳密にいうとこれはAPIではありませんが)、DOS/V機とPC-98の判定に確実な方法がないとしたら、納得がいかないのは私だけでしょうか?
戻る