DOS と DBCS ベクタと2バイト文字を含むファイル名に関する…

そのうちもすこしちゃんとまとめたい気もしますがとりあえずここに書いておく。

  • DOS ファンクション int 21h, AX=6300h や int 21h, AX=6507h で、正しくない(MS-DOSPC DOS と異なる)アドレスを返す互換 DOS がけっこうある。というか、完全に MS/PC DOS と互換性のある値を返す DOS クローンは DR-DOS だけかもしれない。
    • FreeDOS と PTS-DOS は int 21h, AX=6300h の値が間違っている(int 21h, AX=6507h とまったく同じ値を返してしまう)。たいがいの DOS/V アプリケーションは日本語モードの判定が正しく行えないであろう(FreeDOS は DBCS のことはほとんど考慮してないので逆に問題にならない。FreeDOS/V は外部ドライバ VESAPAT で DBCS ベクタを構築しており、カーネル内の DBCS ベクタは使用していない)。
    • Datalight ROM-DOS は逆に、int 21h, AX=6507h の値が間違っている。
  • MS-DOSPC DOSカーネルは世界共通ではない。というか少なくとも英語版では2バイト文字のファイル名を正しく扱うことができない。これらの DOS でも config.sys に "country=81,932,country.sys" とでも書いておけば DBCS ベクタにそれらしい値が設定されるので擬似 DOS/V 化にはほとんど支障はないが、2バイト文字固有の処理がされないのでたとえば "ハバネロ.txt" というファイルを作ろうとすると "クグキロ.txt" というファイルが作成されてしまう(2バイト目が大文字化されちゃってるんですね)。
  • ためしにいろんな DOS で試してみたけど、DR-DOS 7.03 と Datalight ROM-DOS 7.1 はちゃんと "ハバネロ.txt" が作成できたのでちょっと驚いた。そういえばこのふたつは日本語市場がそれなりに考慮されていた(DR-DOS はかつて DR-DOS 6/V というまっとうな日本語ローカライズ版が存在したし、ROM-DOSどっかのツールが起動ディスクに使ってたっけ)
  • DOS とは直接関係ないけど)まじめな実装の mblen は -1 を返すこともある。
  • DOS とは直接関係ないけど)ショボイ実装の mblen は文字列の終端を突き抜ける文字数を返すこともある。