FrontPage  Index  Search  Changes  RSS  wikifarm  Login

int21h,AX=6300h

カテゴリ

DOS

対応 DOS バージョン

3.2+(極東版)
4.0+

機能

DOS の DBCS ベクタを取得します。

設定

レジスタ内容
AX6300h

戻り値

レジスタ内容
AL終了コード
基本的には 00h = 正常終了、FFh = 未サポートとなるが、未サポートにもかからわず 00h を返すものもあるので信用できない。
DS:SIDBCS ベクタのアドレス
(ファンクションコールがサポートされている場合)

DBCS ベクタの内容

日本語(シフトJIS)が利用可能な場合、DBCS ベクタは以下のような内容のバイト値になります。

オフセット内容
081h
19Fh
2E0h
3FCh
400h
500h
(以下不定)

シングルバイト文字(英語など)モードの場合は以下のようになります。

オフセット内容
000h
100h
(以下不定)

説明

DOS 内部で2バイト文字が利用可能な場合、このファンクションコールで2バイト文字の先頭バイトを判定するためのテーブルを取得できます。

大部分の DOS/V アプリケーション/システムプログラムは、日本語/英語モードの判定に DBCS ベクタの内容を利用しています。

本ファンクションコールは、バージョン 4.0 もしくはそれ以降の DOS*1でサポートされています。 バージョン 3.31 以下の場合にはいささか微妙です。 英語版の DOS 3.30 ではサポートされていませんが、NEC PC-9801 やエプソン同等機用の MS-DOS 3.3 ではサポートされています。 AX 用の MS-DOS 3.21 でもサポートされていたはずです。 DOS 3.1 では英語といわず日本語といわずサポートされていません。 (あとは DOS 2.25 というのがあるがここでは眼中にいれない)

またじつに悲しむべきことですが、IBM とマイクロソフトに由来しない各社互換 DOS は、ほとんどの場合本ファンクションコールで正しい値を返しません*2

参考

各国語 DOS における DBCS ベクタの内容
日本以外の国だと DOS のベンダやバージョンによって微妙に違いがあって悩ましい…。

*1 ところで、DOS/V の日英両モード対応という点ではきわめて重要であり、日本 IBM の技術解説書においても「このファンクションコールを使って判定せよ」と名指しで指定されているファンクションコールなのですが、困ったことに本家(英語版)PC DOS のプログラミングリファレンスである "PC DOS 7 Technincal Update" には本ファンクションコールに関する記述がまったくありません。同じ本家英語版でも Microsoft のプログラマーズリファレンスには確か記述があったはずなのに…。

*2 個人的に調べた範囲でいうと、PTS-DOS, Datalight ROM-DOS, FreeDOS は間違った値(int21h,AX=6507h とまったく同じアドレス)を返してしまう。DR-DOS 以外の互換 DOS はすべて間違っているんじゃないかとも思っています…