DBCS ベクタに関するチラシの裏

DOS 内部の2バイトコード対応状況はアクティブコードページ(func 6601h/6602h)と func6300h(あるいは func6507h)の DBCS ベクタを調べればある程度わかるわけなんですが、このへんのファンクションが確実に使用可能だといえるのはバージョン 4.0 以上なわけで、たとえば PC-9801FM-R/TOWNS あたりの日本語 DOS 3.1 なんかだと DBCS ベクタさえ存在しないわけです。
で、このあたりの古い DOSDOS じたい新しくないってのはまあおいとくとして)が多バイトコードに対応してるかどうかをなるたけ簡便かつ汎用的な方法で判定できないもんか…とかつらつら考えた結果、(DBCS ベクタの取れない環境では)国別コードから適当に割り出したらどうかと思った。つまりファンクション 38h で取得した現行国コードが 81(日本)だったらシフト JIS が使える、とみなしてもそんなに困らないだろうと。

ついでなんで、日本以外の国/コードページ/DBCSベクタの関係をすこし調べてみた。

Country IDCodepageDBCS vector value in COUNTRY.SYS
MS-DOS 6.2/V JapanPC DOS 7.0 JapanPC DOS 7.0 TaiwanPC DOS 7.0 ChinaWindows95 Japan
81 (Japan)93281h-9Fh, E0h-FCh
82 (Korea)93481h-FEh81h-BFh
94981h-FEh
86 (China)93681h-FChA1h-FEh
13818Ch-FEh
88 (Taiwan)93881h-FDh81h-FCh81h-FDh81h-FEh
95081h-FEh81h-FEh

注:

  1. PC DOS 7.0 China と Taiwan の country.sys は、以前 IBM のサイトで公開されていた IBM 2000 年問題 BIOS 検査ツールから取得。
  2. config.sys 内の country 文、および command.com 内部コマンドの CHCP では 1000 以上のコードページを設定できない。DOS ファンクションそのものにはこの制限はない。

…日本以外はけっこうブレがありますな。歴史的経緯がわかんないとちょっとダメかも。