
  DOSVAXJ3 技術情報

・日本語キーボード対応
　日本語キーボードの場合、^ [ : が SDL_KEYDOWN の event.key.keysym.scancode で
90h, 91h, 92h として入ってきます。keyboardlayout=jp の場合に DOS/V と同じスキャ
ンコードになるよう変換し、jp.kl(jp.key) の定義で各文字に割り振っています。
　変換、無変換等も DOS/V と同じスキャンコードになるようにしています。

・MS-IME
　JP190523 で終了時のハングアップに対応しました。
　JP190527 で MS-IME でキー入力が入りっぱなしになってしまう現象の対策を行いま
した。DirectInput のキーボード入力ハンドラ内で、最初にメッセージループを回して
から SDL のイベント発生処理を行うようにしています。また、KeyUp については IME
の状況を問わず SDL のイベントを発生させています。
　Windows 8.1 や Windows 10 のバージョン 1709 以前の場合、DOSVAXJ3 上から IME
の状態取得(ImmGetOpenStatus)と状態変更(ImmSetOpenStatus) が正常に動きません。
　そのため $IAS.SYS や MS-KANJI API のファンクションを使用した FEP の制御が正
常動作しません。
　Windows 10 の場合、バージョン 1803 以降にアップデートすれば動作します。
　Windows 8.1 の場合は、MS-IME 以外の ATOK や Google 日本語入力等の使用を推薦
します。

・IME 変換文字列表示位置
　JP190510 以前は int 10h ah=02h のカーソル位置設定毎に SDL_SetIMPosition()
を呼び出していました。が、単なるコンソール出力でも一文字表示毎に呼び出される
事になってしまい、dir の表示がなめらかでなかったり、Linux では表示中に止まっ
たりしてしまう等の不具合がおきておりました。
　対策として、タイマで BIOS ワークエリア 0040:0050 を参照し、値が変更になって
いて、さらに前回の変更から 100ms 以上経過している場合のみ SDL_SetIMPosition()
を呼び出すよう変更しています。
　JW_CAD ではビデオモード 12h や 6ah 等を使用しており、日本語対応ビデオモード
でないために SDL_SetIMPosition() を呼び出していませんでしたが、これらのビデオ
モードでも、コードページが 932 で DBCS ベクタが日本語用コードページのままであ
れば呼び出すように JP210212 で修正しています。

・日本語関連
　日本語ファイル名を使用可能としています。
　Linux 版の場合、UTF-8 と Shift-JIS の相互変換を行っています。UTF-8 決め打ち
ですのでご注意ください。今時 EUC を使っている環境は流石にないと思いますが。
　ファイル名の変換処理の抜けがあるかもしれませんのでご注意ください。
　内蔵シェルのコマンドライン、DOS の一行入力についても日本語対応(全角文字を
BS で一文字削除可能等)しています。

・ESC シーケンス
　DOSBox で対応している ESC シーケンス以外に、下記に対応しています。
ESC [>5h   カーソル非表示     J-3100 対策
ESC [>5l   カーソル表示       J-3100 対策
ESC [ ; p  キー再割り当て     JEMO 対策
　JP200904 で ESC シーケンスは int 29h 内部で処理するように修正しています。

・コンソール出力
　DOS の CON 出力は int 29h を呼び出し、さらに int 29h 内部から int 10h
ah=09h, ah=02h, ah=06h 等を呼び出して文字を表示します。これにより Vz のコン
ソール取り込みや他のディスプレイドライバの使用が可能となります。

・Vz の常駐
　int 21h が Vz に乗っ取られていた場合、内蔵シェルのコマンドラインは使用せず
に DOS ファンクションの ah=0ah 一行入力 を呼び出しています。

・Vz の LFN 対応版
　バックアップファイルの作成を ON にしている場合、ロングファイルネームのファ
イルを保存しようとすると、まず編集中のファイルを拡張子 BAK のショートファイル
ネームにリネームし、その後でショートファイルネームで保存する事になります。
　拡張子 BAK にリネームした時点でロングファイルネームとショートファイルネーム
の紐付けが解消されてしまうので、その後の保存がショートファイルネームになって
しまいます。

・LFN 対応
　LFN 有効の場合 Windows 95/98/Me の DOS 窓での動作とは異なり、int 21h の通常
のファンクション(ファイルオープン ah=3dh 等)でもロングファイルネームが使用で
きますが、スペースが入っているロングファイルネームは使用できません。
　スペースが入っているロングファイルネームも使用したい場合は lfn_space=true
とする必要があります。
　本来は通常のファンクションではなく、ロングファイルネーム用のファンクション
を使用する必要があります。例えばファイルオープンであれば ax=716ch を使用しま
す。

・JW_CAD
　文字入力時の FEP ON/OFF を自動で行いたい場合、fepcontrol を mskanji または
both に設定する必要があります。

・キー入力待ち
　int 28h が常駐プログラムで乗っ取られている場合、int 16h ah=00h, ah=01h で
キー入力待ちとなっている際に int 28h を呼び出します。

・マウス
　DOS/V 日本語モードの場合、マウスの座標の範囲は 0,0 - 639, 199 となるようで
す。そのため VGA での Y 座標とマウスの仮想の Y 座標とを相互変換する処理を入れ
ています。
　V-Text 上でのマウス座標はどうなるか不明ですが、そもそも V-Text 上でマウスを
使用するプログラムは存在しないと思われます。

・デバイスドライバ
　オリジナルの adddev を使用する場合、ver set でバージョンを 6 以下に設定して
ください。
　sava 氏版 adddev (http://hp.vector.co.jp/authors/VA003720/lpproj/dostools.htm)
の場合、DOSBOX 対応版でなくても動作します。
　adddev で登録したキャラクタデバイスに対しては下記の DOS ファンクションが使
用できます。
　int 21h
　　ah=3dh デバイスオープン
　　ah=3eh デバイスクローズ
　　ah=3fh デバイスからデータを入力
　　ah=40h デバイスにデータを出力
　　ax=4400h デバイスデータの取得
　　ax=4402h I/O Control データ取得
　　ax=4403h I/O Control データ送出
　　ax=4406h 入力ステータスの取得
　　ax=4407h 出力ステータスの取得

　デバイス $IBMAFNT や $IBMADSP はオープンできますが、クローズ以外のファンク
ションは使用できません。MS-IME はこれらのデバイス名がオープンできれば日本語
モードと判定しているようです。
　デバイス $IBMAIAS については DOS/V BIOS int 16h (キーボード) を、デバイス
MS$KANJI については MS-KANJI API を参照してください。

・J-3100 BIOS
　int 10h (ディスプレイ)
　　ah=70h カレントデバイスの読み込み
　　ah=71h プラズマ/LCD アトリビュートの設定
　　上記は非対応です。
　　ah=00h
　　  al=64h DCGA モード グラフィック 640×400 2色、キャラクタ 80×20
　　  al=74h DCGA モード グラフィック 640×400 2色、キャラクタ 80×25
　　  al=75h 拡張 EGA モード グラフィック 640×400 16色、キャラクタ 80×25
　　ax=8200h スクロールモードの設定
　　         つねにノーマルモード(ソフトウェアスクロール)となります。
　　ax=8205h 漢字テキストドライバの確認
　　         [dosbox] j3colordriver=true の場合 bl=01h カラー CRT ドライバあ
　　         り を返します。
　　         Windows 3.1 CGA/EGA キットの setup.exe を動かす場合は true とし
　　         てください。
　　         j3colordriver=true の場合 Windows 3.1 のディスプレイドライバで
　　         東芝 EGA が使用可能になります。

　int 14h (RS-232C)
　　ah=04h 割り込み使用
　　ah=05h EOI 設定
　　ah=06h 割り込み禁止
　　ah=80h 半二重通信設定
　　ah=81h 全二重通信設定
　　ah=82h ブレーク信号送信
　　ah=84h DTR 設定
　　ah=85h RTS 設定
　　ah=87h 割り込みステータス取得
　　ah=f0h タイムアウト時間設定
　　上記は非対応です。

　int 16h (キーボード)
　　ah=f0h ビープ音出力
　　ah=f1h キーシフト設定
　　ah=f2h キークリック音設定
　　上記は非対応です。

　int 17h (プリンタ)
　　ah=84h 1バイト出力
　　ah=85h 漢字変換設定
　　上記は非対応です。
　　プリンタ出力時の Shift JIS から JIS への変換は行いません。

　int 60h (J-3100 システム)
　　ah=05h ユーザー空間情報取得
　　ax=0f02h 網掛けパターンの選択
　　上記は非対応です。

　int 6fh (ATOK5)
　　ah=0fh 学習機能 ON
　　ah=10h 学習機能 OFF
　　ah=11h 漢字キー無効
　　ah=12h 漢字キー有効
　　上記は非対応です。
　　ah=01h～05 は全て IME ON、ah=0bh は IME OFF となります。

・DOS/V BIOS
　int 10h (ディスプレイ)
　　ah=00h 画面モード設定
　　  al=03h CGA テキスト互換モード
　　  al=70h V-Text モード (vtext1)
　　  al=71h V-Text 拡張 CGA テキストモード (vtext1)
　　  al=72h VGA グラフィックスモード
　　  al=73h 拡張 CGA テキストモード
　　  al=78h V-Text モード2 (vtext2) 設定用の値で、画面モード変更後 BIOS ワー
　　         クエリア 0040:0049 は 70h となります。
　　  al=79h V-Text モード3 (vtext3) 設定用の値で、画面モード変更後 BIOS ワー
　　         クエリア 0040:0049 は 70h となります。
　　  al=7ah V-Text モード4 (vtext4) 設定用の値で、画面モード変更後 BIOS ワー
　　         クエリア 0040:0049 は 70h となります。
　　V-Text モードの設定は int 10h を呼び出すのではなく、chev コマンドを使用
　　してください。
　　コードページを932、DBCS ベクタを日本語用に設定後に上記の画面モードに設定
　　すると DOS/V 日本語モードになります。

　int 16h (キーボード)
　　im が true で fepcontrol が ias または both の場合
　　デバイス $IBMAIAS がオープンできるようになります。
　　ax=1300h dl の bit 7 or Bit0 ON で IME ON、bit 7 OFF で IME OFF
　　ax=1301h IME OFF で dl=00h、IME ON で dl=81h を返します。
　　ah=14h シフト情報を表示に設定しても FEP 用のラインは確保されません。

・MS-KANJI API
　im が true で fepcontrol が mskanji または both の場合
　デバイス MS$KANJI がオープンできるようになります。
　ファンクション1 KKAsk
　　カナ漢字変換システム名取得
　　API サポートレベルは 1、カナ漢字変換システムの名前は IME となります。

　ファンクション 5 KKMode
　　漢字入力モードの設定/参照
　　設定時の変換位置の指定は無視されます。
　　参照時の変換位置は常にカーソル位置となります。

　KKOpen, KKClose, KKInOut には対応していません。

・DOSVAXJ3 上で動作しているかどうかの判定
　int 2fh
　　ax=7476h
　　実機上の PC DOS 等では ax に 7476h を入れて int 2fh を実行しても ax の
　　値は変化しませんが、DOSVAXJ3 上では ax は 0002h になります。

                                                                      takapyu
