Release note for JP106.KEY mapping of FreeDOS KEYB
--------------------------------------------------
$Id: jp106.txt,v 1.8 2004-03-31 23:44:24+09 kabe Exp $

■FreeDOS KEYB[*1] における日本語106キーボードについて
文責：かべ <kabe@sra-tohoku.co.jp>


旧バージョンの FreeDOS KEYB では100番以上のスキャンコードを
扱えなかったため、日本語106キーボードはまともに使えませんでしたが、
2.0 pre1 からはほぼ完全に対応できるようになっています。


▼ドライバ起動方法

KEYB JP106
もしくは
KEYB JP

電気的には英語101と日本語106は判別不能なので、
"JP"と明示的に指定する必要があります。
(マイクロソフトの JKEYB.SYS のような対話設定機能はありません)


▼本パッケージにおける日本語キーボードでの特徴

・(ほぼ)すべてのキーで OADG[*2] の規格通りの各種キーコードを発生。
	FEPが日本語キーボードに対応していれば、
	変換キーを含む各キーを本来の用途で使用できます。

・単独でのカナロックに対応。半角カナだけならFEP不要。

・[＼]キーと[￥]キーは同じコード ($5D) を発生します。
	…当たり前ぢゃんと思うかもしれませんが
	VGAモード (chcp 437[*3]) では＼($5D)と￥($A5)の両方が出せるのです。
	本パッケージでは日本の習慣に合わせ両方とも常に$5Dを発生します。
	(¢£¬も１バイトで出せますが何もしてません)


なお、残念ながら親指シフトキーボード (FMV-KB211タイプ)は
親指シフトでのカナ打ちは実用になりません。
意味ないですがローマ字打ちでご使用下さい。
(キーボード内部で独自に状態を持っているのをドライバ側で制御できないため)


▼カナロックについて

本パッケージのドライバでは、FEPを使わなくても
半角カナが入力できるようになっています。

現在は、Alt+[ひらがな]キーにて半角カナロックの On/Off が可能です。
これに伴い、このAlt+[ひらがな]だけは OADGに従ったコード[*4]を発生しません。
また、英数キー (シフトを押さずに[CapsLock]) で常にカナロックを解除できます。

なお、このカナロックキーの割り当ては将来変更されるかもしれません。

気に食わないという方は、KEYBのソースパッケージの方を入手し、
JP.KEY ファイルを書換えてから KC.EXE でコンパイルし、
できた JP.KL を入れ替えてください。
この改造にはエディタ以外の開発環境は不要です。


▼FEPでのカナ打ち (ローマ字打ちでないほう)

ローマ字打ちでFEPを使用する際には従来との変更はない、と思います。


本来ローマ字入力切替用の Alt+[ひらがな] (「ローマ字」)を
KEYBドライバ内部のカナロック専用に割り当てているので、
このキーを押してもFEPでの表示はローマ字のままです。

ただドライバ側からのデータは半角カナになるので、
実質的にはカナ打ちになります。これは、キーボードからFEPに半角カナを送信すれば
FEPはカナ打ちと認識してくれることを期待しています。
(FEPによってはうまくいかないかもしれない…)

[英数]キーを押すとキーボード、FEP双方とも英字モードに切り替わります。
ここから[ひらがな]キーを押してFEPを全角ひらがなにしても
キーボード側は英字のままなのでローマ字打ちに戻ってしまいます。
めんどくさいですが、英字から かな に戻る際は
[ひらがな]キーの後に再度 Alt+[ひらがな] を押してカナロックしてください。

カナ入力中にFEPをOffにしても、カナロックはキーボード側でかかっているので、
半角英数にはならず半角カナのままです。
さらに[英数]かAlt+[ひらがな]にてカナロックを解除してください。

完全なサポートは KEYBドライバ側で日本語シフトAPIが実装されるまでお待ち下さい。


▼コントロールコードの打ち方

^A - ^Z ($01-$1A) は、普通に Ctrl+英字キーで打てます。

^@ ($00)	Ctrl+2, Ctrl+@
^[ ($1B)	Ctrl+[, ESC
^\ ($1C)	Ctrl+＼, Ctrl+￥
^] ($1D)	Ctrl+]
^^ ($1E)	Ctrl+6, Ctrl+^
^_ ($1F)	Ctrl+-

Ctrl+2,6,- てのは英語キーボード準拠のシーケンスで、
OADGでも定義されているのですが、日本語キーボードでは
キートップと発生コードが合わないのでわかりにくくなっています。
Ctrl+@,^ はOADGでは無動作となっていますが本パッケージでの追加機能です。


▼現在KEYBに実装されていないもの

・DOS/V 専用の日本語シフト状況変更API (INT16/AH=13H)
	通常の操作によるローマ字・カナ打ち・英字の切替えを
	完全にサポートするにはこのAPIが必要ですが、
	現在KEYBには実装されていないため、FEPでのカナ打ちは
	上記のように若干変な操作を必要とします。

・コードページ変更
	KEYB自体はFreeDOS標準のコードページ切替えに対応していますが、
	DOS/Vでは欧米用DOSとは異なったAPIでコードページ変更を
	ドライバに通知するため、chcp 437 (chev us, us) にて
	英語モードに切替えても、カナを殺す等キーボードのコード割り当てを
	変えることができません。

	本パッケージでは日本語キーボードはコードページにかかわらず
	同じコードを発生するので、英語モードでカナロックすると化けます。
	英数(シフトなしCapsLock)かAlt+[ひらがな]で解除してください。
	現状では日本語キーボードでフランス語やスカンジナビア語を
	打とうとしない限り問題になることはないと思われますが

	ドライバ起動中に KEYB <layout>,<codepage> とすることで
	レイアウトやコードページを変更する機能はまだ実装されていません。
	/u でドライバを外してから再度 KEYB を起動してください。

・Composeキー
	Composeキーは日本ではなじみが薄いと思われますが
	[Compose][Y][=]で￥、[Compose][c][|]で¢を入力できるような
	コマンドキーです。KEYBでは Dead KeyだけでComposeはまだ使えません。


▼開発者向け情報

*.KEY をテキストエディタで編集し、KC.EXE で *.KL にコンパイルします。

[PLANES]でのKanaLockは内部ではUserKey8と同じなので、
UserKey# は 1-7 をご使用下さい。(あまり使わないと思うけど)

[SUBMAPPINGS]ではコードページによってマップを切替えられますが、
後述のようにこの部分は特にFreeDOS/Vとの相性が良くないので、
デフォルトの最初の行だけに割り当てた方が良いでしょう。

▽[SUBMAPPINGS]の注意点

KEY.TXTではわかりにくい点もあるので補足しておきますと、

最初の行は基礎マップとして使われ、常に有効です。
コードページ番号は*使われません*(0でも999でもよい)
２行目以降が特定マップとなります。

必ず１つ以上の特定マップが必要です。これはKEYBの制限。

コードページが 0 の特定マップはワイルドカードで、常にマッチします。
つまり最後に置かないと意味がない。

マッチするコードページがないと、KEYBは起動時にエラーを出します。
コードページにかかわらずとにかく起動したい場合は
最後にコードページ 0 のマップを追加すること。
(ヨーロッパ環境では一致なしの場合は起動して欲しくないことがあるらしい)

▽例での解説

JP.KEY 中の例

[SUBMAPPINGS]
0	k932	;基礎マップ
932	-	;特定マップ (cp=932)
0	-	;特定マップ (cp=*)

最初の "0 k932" は、基礎マップとして [KEYS:k932] を使用することを
宣言します。0とありますがこれは無視されます。(ワイルドカード、ではない)

"932 -" で、コードページ932 (シフトJIS) にマッチさせます。
"-" とあるので、特定マップとしては何も使いません。
基礎マップのk932へ素通し。

"0 -" で、全コードページにマッチします。"-" なので k932へ素通し。

∴この場合は"932 -"行は 無くても同じ。


▽コードページの扱い
FreeDOS KEYBではヨーロッパDOSの習慣(悪習？)に準じて、
コードページの取得は DISPLAY.SYS の INT2Fh/AX=AD02h を使用しています。
が DOS/V ではDISPLAY.SYSは使ってないので、このAPIは常に失敗。
この際は代わりに DOS/V で標準とされる INT21h/AX=6601h 
(システムコードページ取得; NLSFUNC なんかが提供)を使うので、
PC-DOS/VやMS-DOS/Vでもなんとなくコードページの検出が効きます。

がFreeDOS/V ではNLSFUNCはないので常にコードページ437が返ります。
コードページによってキーマップが切替わるような新たなマップを使う際は、
KEYBのオプションに明示的にコードページを指定してください。
	KEYB JP,932
パッケージ中のJP.KEY定義ファイルはコードページ依存になっていないので、
コードページに何を指定しても同じ文字を発生します。
(∴英語モードで半角カナを打つと化ける)

chev や chcp による動的コードページ切替えには、API的に未対応です。

フリーの CHEJ[*5] や CHES[*6] (FreeDOS/Vに同梱) では、
英語・日本語モード切替え時に KEYB JP,437 などを外部コマンドとして
発行しますが、今のFreeDOS KEYBは動的変更に対応していないので
何も起こらない(INT2Fh/AX=AD80h失敗か、KEYBのエラー)と思われます。


▼参考文献
[1] FreeDOS KEYB, http://projects.freedos.net/keyb/
[2] PCオープン・アーキテクチャー推進協議会 (OADG), http://www.oadg.or.jp/
[3] Microsoft Windows OEM Codepage : 437 (US), http://www.microsoft.com/globaldev/reference/oem/437.htm
[4] OADGテクニカルレファレンス DOS/V プログラミング概説編, SBCSコード・ジェネレータ, pp25-30
[5] CHEJ, http://www.vector.co.jp/soft/dos/util/se004219.html
[6] CHES, http://www.vector.co.jp/soft/dos/util/se008830.html

EOF
