俺メモ
設定ファイルの記述について補足
使い慣れたテキストエディタ(メモ帳とか)でプレーンなテキストファイルに設定を記述して、それをツールを使ってアダプタにインポートします。
設定ファイルは SJIS か UTF-8 (bomなし) で記述して下さい。改行コードは CRLF、CR、LF どれでも構いません。
設定ファイルには EEPROM に書き込む内容を “<EEPROMアドレス>,<値>” の書式で記述します。アドレス順になっている必要はありませんし、EEPROMの全256byte分が記述されている必要もありません。
記述のサンプルです
; ; 設定ファイルサンプル ; 00,A5 ; 0x00 は必ず A5 にする ; 01,04 ; Scancode 01 を返すキーが押されたら A (0x04) を発生 02,1E 03,28 04,E0 ; 7D, 何度かの Windows Update を経て、WIndows10における98配列キーボードの動作も改善されているようです。現状では「レジストリを手で修正する必要がある」ものの、修正後は問題なく利用できています
当サイトへのコメントとこちらの情報を参考にさせていただきました(感謝!
Windows10 October 2018 Update で PC-98配列キーボード
https://sk070.hatenablog.com/entry/2018/10/08/210255
レジストリの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters にある LayerDriver JPN を
kbd106.dll → kbdnec.dll
に変更して、OSを再起動させるか一度サインアウトしてサインインしなおせば98配列キーボードとして認識されました。EDGEでの入力も問題ありません。また、以前見受けられた「USBポートを差し替えるとまた106/109倭国語キーボードの認識に戻る」問題も発生しませんでした。
ただしこの変更(レジストリの修正)を行った後、再び106/109倭国語キーボードに差し替えても98配列の認識が残るようです。まあ、その場合は再びレジストリを修正すれば良いだけですが。
上記は Windows10 Pro バージョン 1909 (November 2019 Update) で確認しました。
俺メモ
設定ファイルの記述について補足
使い慣れたテキストエディタ(メモ帳とか)でプレーンなテキストファイルに設定を記述して、それをツールを使ってアダプタにインポートします。
設定ファイルは SJIS か UTF-8 (bomなし) で記述して下さい。改行コードは CRLF、CR、LF どれでも構いません。
設定ファイルには EEPROM に書き込む内容を “<EEPROMアドレス>,<値>” の書式で記述します。アドレス順になっている必要はありませんし、EEPROMの全256byte分が記述されている必要もありません。
記述のサンプルです
; ; 設定ファイルサンプル ; 00,A5 ; 0x00 は必ず A5 にする ; 01,04 ; Scancode 01 を返すキーが押されたら A (0x04) を発生 02,1E 03,28 04,E0 ; 7D,$00000011 ; 設定2 FF,$01100100 ; 設定1 ;
設定ファイルには1行に1バイト分の値を <EEPROMアドレス>, <設定値> の書式で記述します。セミコロン以降の文字はコメントとして無視します。行頭にセミコロンがあればその行はコメント行とみなします。
値は16進数で記述します。なお値の先頭に “$” をつけると2進数で記述出来ます(8bitで記述して下さい)
基本的には設定ファイルの雛形をダウンロードして頂いて、それをお好みでカスタマイズするのがよいかと思います。
各アダプタごとの設定ビット説明
設定ファイルに記述する際は、値の頭に “$” をつけると2進数での記述が可能です
(例: “FF, $01100111” と “FF, 67” は同じ)
未使用のビットは0でも1でもどちらでも構いません
なおファームウェア更新直後はすべてのビットが “1” に初期化されます
X68000
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | DSC | MODE | MODE | - | - | SCLK | SYSC | KITT |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
7 | DSC | スクリーンセーバー殺しの機能を有効化するか 1=無効 (初期設定) 0=有効 |
6-5 | MODE | 動作モード指定 11=mode0 (初期設定) 01=mode1a 00=mode1b |
2 | SCLK | Scroll Lock LEDの状態にあわせてレイヤーの切り替えを行うか 1=行わない (初期設定) 0=行う (Scroll Lock LED点灯中は常に Layer1 を選択する) |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない (初期設定) 0=行う (2秒の長押しが必要) |
0 | KITT | 1=無効 (初期設定) 0=有効 |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
PC-9801 Series
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | - | MODE | MODE | WIN | KGEN | MKBR | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
6-5 | MODE | 動作モード指定 11=mode0 01=mode1a 00=mode1b |
4 | WIN | Windowsキーを有効にするか (※ WInキーを有効にする場合は、必ずKGENも0に設定すること) 1=無効 (初期設定) 0=有効 |
3 | KGEN | キーボードの世代を指定 1=LEDなし、CAPSとかなは機械式のロッキング (初期設定) 0=LEDあり、CAPSとかなはファームウェアによるソフトウェアロッキング ※ この設定は次のように読み替えることも出来ます 1=キーボードによるキーリピート処理を抑止しない (初期設定) 0=キーボードによるキーリピート処理を抑止する |
2 | MKBR | CAPSとかなのロッキング対応を行うか 1=行う (初期設定) 0=行わない |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない (初期設定) 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
ADB
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | - | MODE | MODE | POW | - | MKBR | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
6-5 | MODE | 動作モード指定 11=mode0 01=mode1a 00=mode1b |
4 | POW | NeXT ADB キーボード使用時、Powerキーを有効にするか (※ NeXT ADB キーボード以外のキーボードは常に1にすること) 1=無効 0=有効 |
2 | MKBR | caps lockのロッキング対応を行うか 1=行う 0=行わない |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
FMR/FM TOWNS/OASYS
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | - | MODE | MODE | - | - | - | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
6-5 | MODE | 動作モード指定 11=mode1 10=mode2 01=mode3a 00=mode3b |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
PS/2
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | DSC | MODE | MODE | - | FMEX | - | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
7 | DSC | スクリーンセーバー殺しの機能を有効にするか 1=無効 (初期設定) 0=有効 |
6-5 | MODE | 動作モード指定 11=mode1 (初期設定) 10=mode2 01=mode3a 00=mode3b |
3 | FMEX | 富士通キーボードの拡張コマンドを送信するか 1=送信しない (初期設定) 0=送信する |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない (初期設定) 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 (初期設定) 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
俺メモ
ユーザ定義マクロの設定について
ユーザ定義マクロはキーコード(※スキャンコードではありません)を押した/離したの順に設定するだけです。簡易機能なのでタイミングを調整したりといった高度なことは出来ません。
押した/離したの区別はありません。あるキーのキーコードが初めて出現したら「押した」、2度目の出現は「離した」と判断します。
以下例(カッコ内はキーコード)
例1: Ctrl左 (0xE0) + Alt左 (0xE2) + Del (0x4C)
→ E0, E2, 4C, 4C, E2, E0, 00, 00
※ stepを使い切らずに余った分は 0x00 で埋めて下さい
例2: Shift右 (0xE5) + CapsLock (0x39)
→ E5, 39, 39, E5, 00, 00, 00, 00
例3: ワンキーで “ABC” と大文字で入力(Shift右=0xE5, A=0x04, B=0x05, C=0x06)
→ E5, 04, 04, 05, 05, 06, 06, E5
例4: ワンキーでテンキー “000” を入力 (テンキー0=0x62)
→ 62, 62, 62, 62, 62, 62, 00, 00
マクロを応用すると、ワンキーでExcelやWordを起動することも出来ます
例5: ワンキーでExcel起動 (Win左 =0xE3, E =0x08, X=0x1B, C=0x06, L=0x0F, Enter=0x28)
→ E3, E3, 08, 08, 1B, 1B, 06, 06, 08, 08, 0F, 0F, 28, 28, 00, 00
※Winキーを一度on&offした後、”e”, “x”, “c”, “e”, “l” と順にキーを押し、最後にEnterをon&off
マクロの中からマクロを呼び出すことは出来ません。特にチェックもしていないので多分アダプタが暴走します。
意図的なケースを除いて、必ず「押した+離した」をペアで記述して下さい(つまり、あるキーコードは必ず偶数回出現する)。そうしないとキーが押しっぱなしの状態でマクロが終了します。
俺メモ
EEPROM領域の後半128byteをユーザ定義マクロの記録に使う場合の補足。
EEPROM領域の後半128byteは以下のように8byteごとに15個の領域に区切って、呼び出しのための仮想キーコード ( [0xB?]の部分 )を割り当てています。
同様に、16byteごとに7個の領域に区切って、マクロ呼び出しのための仮想キーコード ( [0xA?] の部分) を割り当てています
なおモードによっては EEPROMの一部領域を別の目的で使用していたり、そもそもマクロが使用不可だったりするので、必ずしも128 byte全域がマクロの記録に使えるわけではありません (たとえばPS/2アダプタの mode3b については 0xD0-0xF7 の領域しかマクロ記録に使用出来ません)
必ず区切りに沿ってマクロを定義します。定義したマクロは呼び出しキーコードを何らかのキーに定義することで呼び出せます。例えば 0x80-0x87 の8バイトに定義したShort macro1 をスキャンコード 0x56 を返すキーで呼び出したい場合は設定ファイルに
; 56,B0 ; スキャンコード 0x56 を発生するキーに ShortMacro1 を割り当て 57,A0 ; スキャンコード 0x57 を発生するキーに LongMacro1 を割り当て ;
のように記述します
区切りの境界を跨いでマクロを定義することは出来ません(たとえば 8byteのマクロを0xD2-0xD9の範囲に記録することは出来ません)
16stepのLong Macroと8stepのShort Macroは混在可能です。ただしこの場合でも区切りの境界を超えて混在させることは出来ません。Long macroは必ず 0x?0から始まっている必要があります。以下はLongとShortを混在させて定義した例です。
俺メモ
FMR用アダプタ、PS/2用アダプタにおけるEEPROMのアドレスマップ
※スキャンコード=キーボードが返す生のコード
※キーコード=アダプタがUSBホストに返す、USB規格で定義されたコード
※通常キー=スキャンコードが 0x01-0x7Cの範囲のキー
※拡張キー=スキャンコードが 0x80-0x9Fの範囲のキー
mode 1 のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常キー (※Scancodeが0x01-0x7Cの範囲) についてのユーザ定義キーマップ。 EEPROMのアドレスがキーのスキャンコードに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 富士通拡張コマンド (※usb2ps2のみ) |
0x80-0x9F | 拡張キー (※Scancodeが0x80-0x9Fの範囲) についてのユーザ定義キーマップ。 スキャンコード = EEPROM アドレス としてキーコードを書き込む |
0xA0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は11個のマクロを定義可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。 このモードではFnキーは使用出来ないので設定は無視される。 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ このモードではFnキー機能は使用出来ない
mode 2 のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常キー (※Scancodeが0x01-0x7Cの範囲 ) についてのユーザ定義キーマップ。 EEPROMのアドレスがキーのスキャンコードに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 富士通拡張コマンド (※usb2ps2のみ) |
0x80 | 予約 |
0x81-0xFC | 通常キー (※Scancodeが0x01-0x7Cの範囲) についての、Fn面のユーザ定義キーマップ。 Scancode + 0x80 がEEPROMアドレスに対応する。 Fnキーの機能を使用しない場合は全領域がユーザ定義マクロの記録に利用可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※このモードでは拡張キーについてキー配置のカスタマイズは出来ない。また、Fnキーの機能とユーザ定義マクロ機能は排他利用となる
mode 3a のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常キー (※Scancodeが0x01-0x7Cの範囲) についてのユーザ定義キーマップ。 EEPROMのアドレスがキーのスキャンコードに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 富士通拡張コマンド (※usb2ps2のみ) |
0x80-0x9F | 拡張キー (※Scancodeが0x80-0x9Fの範囲) についてのユーザ定義キーマップ。 スキャンコード = EEPROM アドレス としてキーコードを書き込む |
0xA0-0xBF | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは16キーまで設定可能 |
0xC0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は7個のマクロを定義可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ 拡張キーも含めてキー配置のカスタマイズが可能。またFnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは16個までしか設定できない。
mode 3b のEEPROMアドレスマップ
0xA0-0xCF | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは24キーまで設定可能 |
0xD0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は5個のマクロを定義可能。 |
※ 拡張キーも含めてキー配置のカスタマイズが可能。またFnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは24個までしか設定できない。
mode 3a と 3b の違いはFnキー定義とマクロ定義のどちらに重きをおくか (どちらにより多くのEEPROM領域を割り振るか) だけの差
俺メモ
FMRおよびPS/2 “以外” のアダプタのEEPROMアドレスマップ
※スキャンコード=キーボードが返す生のコード
※キーコード=アダプタがUSBホスト(PC)に返す、USB規格で定義されたコード
mode 0 のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常レイヤーのユーザ定義キーマップ。 スキャンコードがEEPROMのアドレスに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 予約 |
0x80 | 予約 |
0x81-0xFC | Fnレイヤーのユーザ定義キーマップ。 スキャンコード + 0x80 がEEPROMのアドレスに対応する。 Fnキーの機能を使わない場合は全領域がユーザ定義マクロの記録領域となる。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ もっともシンプルなモード。Fnキーを大量に定義したい場合はこのモードで。
mode 1a のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常レイヤーのユーザ定義キーマップ。 スキャンコードがEEPROMのアドレスに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 予約 |
0x80 | 予約 |
0x80-0x9F | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは16キーまで設定可能 |
0xA0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は11個のマクロを定義可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ Fnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは16個までしか設定できない。
mode 1b のEEPROMアドレスマップ
0x80-0xAF | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは24キーまで設定可能 |
0xB0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は9個のマクロを定義可能。 |
※ Fnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは24個までしか設定できない。mode1aとの違いはマクロ定義領域を削って、代わりにFnレイヤー定義の領域を広げたのみです。
俺メモ
新しく作ったWindows10環境において、ファームをBootloaderで書き込んでもEEPROMが初期化されない。理由がわからなくて小一時間悩んでたら、HIDBootloader.exeのオプション画面の中に「Write Options」ってのがあって “EEPROM” のチェックが外れてた。多分ダウンロードして最初の実行時はチェックオフがデフォルト。
<画像>
と言うことは
アダプタを購入後にファームを更新した方は多分全員、その後のファームリリースでファームを更新してもEEPROMまでは更新されてないということになりそう
あと、このチェックボックスの状態はどこに保存されてんだ?と思ったらレジストリだった罠
https://qfxq.bokepmobile.site https://mqwh.waihui.online https://jmah.qipai.online https://pahq.haychill.site https://irwi.haychill.site https://mapx.workpolska.online https://rgif.haychill.site https://pkyp.qipai.online https://peqf.qipai.online https://pehk.bokepmobile.site https://ytts.lexu.site https://yhyt.ophimhd.site https://eigw.rubberducky.site https://tsfk.bokepmobile.site https://kgef.rubberducky.site
000011 ; 設定2 FF, class="archive date wp-embed-responsive custom-font-enabled single-author"> 何度かの Windows Update を経て、WIndows10における98配列キーボードの動作も改善されているようです。現状では「レジストリを手で修正する必要がある」ものの、修正後は問題なく利用できています
当サイトへのコメントとこちらの情報を参考にさせていただきました(感謝!
Windows10 October 2018 Update で PC-98配列キーボード
https://sk070.hatenablog.com/entry/2018/10/08/210255
レジストリの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters にある LayerDriver JPN を
kbd106.dll → kbdnec.dll
に変更して、OSを再起動させるか一度サインアウトしてサインインしなおせば98配列キーボードとして認識されました。EDGEでの入力も問題ありません。また、以前見受けられた「USBポートを差し替えるとまた106/109倭国語キーボードの認識に戻る」問題も発生しませんでした。
ただしこの変更(レジストリの修正)を行った後、再び106/109倭国語キーボードに差し替えても98配列の認識が残るようです。まあ、その場合は再びレジストリを修正すれば良いだけですが。
上記は Windows10 Pro バージョン 1909 (November 2019 Update) で確認しました。
俺メモ
設定ファイルの記述について補足
使い慣れたテキストエディタ(メモ帳とか)でプレーンなテキストファイルに設定を記述して、それをツールを使ってアダプタにインポートします。
設定ファイルは SJIS か UTF-8 (bomなし) で記述して下さい。改行コードは CRLF、CR、LF どれでも構いません。
設定ファイルには EEPROM に書き込む内容を “<EEPROMアドレス>,<値>” の書式で記述します。アドレス順になっている必要はありませんし、EEPROMの全256byte分が記述されている必要もありません。
記述のサンプルです
; ; 設定ファイルサンプル ; 00,A5 ; 0x00 は必ず A5 にする ; 01,04 ; Scancode 01 を返すキーが押されたら A (0x04) を発生 02,1E 03,28 04,E0 ; 7D,$00000011 ; 設定2 FF,$01100100 ; 設定1 ;
設定ファイルには1行に1バイト分の値を <EEPROMアドレス>, <設定値> の書式で記述します。セミコロン以降の文字はコメントとして無視します。行頭にセミコロンがあればその行はコメント行とみなします。
値は16進数で記述します。なお値の先頭に “$” をつけると2進数で記述出来ます(8bitで記述して下さい)
基本的には設定ファイルの雛形をダウンロードして頂いて、それをお好みでカスタマイズするのがよいかと思います。
各アダプタごとの設定ビット説明
設定ファイルに記述する際は、値の頭に “$” をつけると2進数での記述が可能です
(例: “FF, $01100111” と “FF, 67” は同じ)
未使用のビットは0でも1でもどちらでも構いません
なおファームウェア更新直後はすべてのビットが “1” に初期化されます
X68000
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | DSC | MODE | MODE | - | - | SCLK | SYSC | KITT |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
7 | DSC | スクリーンセーバー殺しの機能を有効化するか 1=無効 (初期設定) 0=有効 |
6-5 | MODE | 動作モード指定 11=mode0 (初期設定) 01=mode1a 00=mode1b |
2 | SCLK | Scroll Lock LEDの状態にあわせてレイヤーの切り替えを行うか 1=行わない (初期設定) 0=行う (Scroll Lock LED点灯中は常に Layer1 を選択する) |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない (初期設定) 0=行う (2秒の長押しが必要) |
0 | KITT | 1=無効 (初期設定) 0=有効 |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
PC-9801 Series
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | - | MODE | MODE | WIN | KGEN | MKBR | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
6-5 | MODE | 動作モード指定 11=mode0 01=mode1a 00=mode1b |
4 | WIN | Windowsキーを有効にするか (※ WInキーを有効にする場合は、必ずKGENも0に設定すること) 1=無効 (初期設定) 0=有効 |
3 | KGEN | キーボードの世代を指定 1=LEDなし、CAPSとかなは機械式のロッキング (初期設定) 0=LEDあり、CAPSとかなはファームウェアによるソフトウェアロッキング ※ この設定は次のように読み替えることも出来ます 1=キーボードによるキーリピート処理を抑止しない (初期設定) 0=キーボードによるキーリピート処理を抑止する |
2 | MKBR | CAPSとかなのロッキング対応を行うか 1=行う (初期設定) 0=行わない |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない (初期設定) 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
ADB
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | - | MODE | MODE | POW | - | MKBR | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
6-5 | MODE | 動作モード指定 11=mode0 01=mode1a 00=mode1b |
4 | POW | NeXT ADB キーボード使用時、Powerキーを有効にするか (※ NeXT ADB キーボード以外のキーボードは常に1にすること) 1=無効 0=有効 |
2 | MKBR | caps lockのロッキング対応を行うか 1=行う 0=行わない |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
FMR/FM TOWNS/OASYS
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | - | MODE | MODE | - | - | - | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
6-5 | MODE | 動作モード指定 11=mode1 10=mode2 01=mode3a 00=mode3b |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
PS/2
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
設定1 (0xFF) | DSC | MODE | MODE | - | FMEX | - | SYSC | - |
設定2 (0x7D) | - | - | - | - | - | - | LED | LED |
設定1 (0xFF)
BIT | NAME | 説明 |
7 | DSC | スクリーンセーバー殺しの機能を有効にするか 1=無効 (初期設定) 0=有効 |
6-5 | MODE | 動作モード指定 11=mode1 (初期設定) 10=mode2 01=mode3a 00=mode3b |
3 | FMEX | 富士通キーボードの拡張コマンドを送信するか 1=送信しない (初期設定) 0=送信する |
1 | SYSC | システムコントロールキー操作時、誤操作防止を行うか 1=行わない (初期設定) 0=行う (2秒の長押しが必要) |
設定2 (0x7D)
BIT | NAME | 説明 |
1-0 | LED | LEDの点灯モードを指定 00=1秒おきに点滅&キー操作のタイミングで反転 (初期設定) 01=キーを押した瞬間に短く点灯 10=キーを押している間中、点灯 11=常時消灯 |
俺メモ
ユーザ定義マクロの設定について
ユーザ定義マクロはキーコード(※スキャンコードではありません)を押した/離したの順に設定するだけです。簡易機能なのでタイミングを調整したりといった高度なことは出来ません。
押した/離したの区別はありません。あるキーのキーコードが初めて出現したら「押した」、2度目の出現は「離した」と判断します。
以下例(カッコ内はキーコード)
例1: Ctrl左 (0xE0) + Alt左 (0xE2) + Del (0x4C)
→ E0, E2, 4C, 4C, E2, E0, 00, 00
※ stepを使い切らずに余った分は 0x00 で埋めて下さい
例2: Shift右 (0xE5) + CapsLock (0x39)
→ E5, 39, 39, E5, 00, 00, 00, 00
例3: ワンキーで “ABC” と大文字で入力(Shift右=0xE5, A=0x04, B=0x05, C=0x06)
→ E5, 04, 04, 05, 05, 06, 06, E5
例4: ワンキーでテンキー “000” を入力 (テンキー0=0x62)
→ 62, 62, 62, 62, 62, 62, 00, 00
マクロを応用すると、ワンキーでExcelやWordを起動することも出来ます
例5: ワンキーでExcel起動 (Win左 =0xE3, E =0x08, X=0x1B, C=0x06, L=0x0F, Enter=0x28)
→ E3, E3, 08, 08, 1B, 1B, 06, 06, 08, 08, 0F, 0F, 28, 28, 00, 00
※Winキーを一度on&offした後、”e”, “x”, “c”, “e”, “l” と順にキーを押し、最後にEnterをon&off
マクロの中からマクロを呼び出すことは出来ません。特にチェックもしていないので多分アダプタが暴走します。
意図的なケースを除いて、必ず「押した+離した」をペアで記述して下さい(つまり、あるキーコードは必ず偶数回出現する)。そうしないとキーが押しっぱなしの状態でマクロが終了します。
俺メモ
EEPROM領域の後半128byteをユーザ定義マクロの記録に使う場合の補足。
EEPROM領域の後半128byteは以下のように8byteごとに15個の領域に区切って、呼び出しのための仮想キーコード ( [0xB?]の部分 )を割り当てています。
同様に、16byteごとに7個の領域に区切って、マクロ呼び出しのための仮想キーコード ( [0xA?] の部分) を割り当てています
なおモードによっては EEPROMの一部領域を別の目的で使用していたり、そもそもマクロが使用不可だったりするので、必ずしも128 byte全域がマクロの記録に使えるわけではありません (たとえばPS/2アダプタの mode3b については 0xD0-0xF7 の領域しかマクロ記録に使用出来ません)
必ず区切りに沿ってマクロを定義します。定義したマクロは呼び出しキーコードを何らかのキーに定義することで呼び出せます。例えば 0x80-0x87 の8バイトに定義したShort macro1 をスキャンコード 0x56 を返すキーで呼び出したい場合は設定ファイルに
; 56,B0 ; スキャンコード 0x56 を発生するキーに ShortMacro1 を割り当て 57,A0 ; スキャンコード 0x57 を発生するキーに LongMacro1 を割り当て ;
のように記述します
区切りの境界を跨いでマクロを定義することは出来ません(たとえば 8byteのマクロを0xD2-0xD9の範囲に記録することは出来ません)
16stepのLong Macroと8stepのShort Macroは混在可能です。ただしこの場合でも区切りの境界を超えて混在させることは出来ません。Long macroは必ず 0x?0から始まっている必要があります。以下はLongとShortを混在させて定義した例です。
俺メモ
FMR用アダプタ、PS/2用アダプタにおけるEEPROMのアドレスマップ
※スキャンコード=キーボードが返す生のコード
※キーコード=アダプタがUSBホストに返す、USB規格で定義されたコード
※通常キー=スキャンコードが 0x01-0x7Cの範囲のキー
※拡張キー=スキャンコードが 0x80-0x9Fの範囲のキー
mode 1 のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常キー (※Scancodeが0x01-0x7Cの範囲) についてのユーザ定義キーマップ。 EEPROMのアドレスがキーのスキャンコードに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 富士通拡張コマンド (※usb2ps2のみ) |
0x80-0x9F | 拡張キー (※Scancodeが0x80-0x9Fの範囲) についてのユーザ定義キーマップ。 スキャンコード = EEPROM アドレス としてキーコードを書き込む |
0xA0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は11個のマクロを定義可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。 このモードではFnキーは使用出来ないので設定は無視される。 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ このモードではFnキー機能は使用出来ない
mode 2 のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常キー (※Scancodeが0x01-0x7Cの範囲 ) についてのユーザ定義キーマップ。 EEPROMのアドレスがキーのスキャンコードに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 富士通拡張コマンド (※usb2ps2のみ) |
0x80 | 予約 |
0x81-0xFC | 通常キー (※Scancodeが0x01-0x7Cの範囲) についての、Fn面のユーザ定義キーマップ。 Scancode + 0x80 がEEPROMアドレスに対応する。 Fnキーの機能を使用しない場合は全領域がユーザ定義マクロの記録に利用可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※このモードでは拡張キーについてキー配置のカスタマイズは出来ない。また、Fnキーの機能とユーザ定義マクロ機能は排他利用となる
mode 3a のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常キー (※Scancodeが0x01-0x7Cの範囲) についてのユーザ定義キーマップ。 EEPROMのアドレスがキーのスキャンコードに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 富士通拡張コマンド (※usb2ps2のみ) |
0x80-0x9F | 拡張キー (※Scancodeが0x80-0x9Fの範囲) についてのユーザ定義キーマップ。 スキャンコード = EEPROM アドレス としてキーコードを書き込む |
0xA0-0xBF | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは16キーまで設定可能 |
0xC0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は7個のマクロを定義可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ 拡張キーも含めてキー配置のカスタマイズが可能。またFnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは16個までしか設定できない。
mode 3b のEEPROMアドレスマップ
0xA0-0xCF | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは24キーまで設定可能 |
0xD0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は5個のマクロを定義可能。 |
※ 拡張キーも含めてキー配置のカスタマイズが可能。またFnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは24個までしか設定できない。
mode 3a と 3b の違いはFnキー定義とマクロ定義のどちらに重きをおくか (どちらにより多くのEEPROM領域を割り振るか) だけの差
俺メモ
FMRおよびPS/2 “以外” のアダプタのEEPROMアドレスマップ
※スキャンコード=キーボードが返す生のコード
※キーコード=アダプタがUSBホスト(PC)に返す、USB規格で定義されたコード
mode 0 のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常レイヤーのユーザ定義キーマップ。 スキャンコードがEEPROMのアドレスに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 予約 |
0x80 | 予約 |
0x81-0xFC | Fnレイヤーのユーザ定義キーマップ。 スキャンコード + 0x80 がEEPROMのアドレスに対応する。 Fnキーの機能を使わない場合は全領域がユーザ定義マクロの記録領域となる。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ もっともシンプルなモード。Fnキーを大量に定義したい場合はこのモードで。
mode 1a のEEPROMアドレスマップ
0x00 | ここに 0xA5 を書くとユーザ定義のキーマップが有効になる |
0x01-0x7C | 通常レイヤーのユーザ定義キーマップ。 スキャンコードがEEPROMのアドレスに対応する |
0x7D | アダプタ設定2 |
0x7E | 予約 |
0x7F | 予約 |
0x80 | 予約 |
0x80-0x9F | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは16キーまで設定可能 |
0xA0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は11個のマクロを定義可能。 |
0xFD | Fnキーとするキーのスキャンコードを設定する。0x00 か 0xFF に設定するとFnキー無効 |
0xFE | リモートWakeUpに使うキーを指定する。 特定キーのScancodeを書いた場合はそのキーでSleep解除。 0xFF を書いた場合は任意のキーでSleep解除。 0x00 を書いた場合はキーボードによるSleep解除は無効。 |
0xFF | アダプタ設定1 |
※ Fnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは16個までしか設定できない。
mode 1b のEEPROMアドレスマップ
0x80-0xAF | Fnレイヤーのユーザ定義キーマップ。 必ず “<スキャンコード>, <発行したいキーコード>” の2バイトペアで記述する。 よってFnキーは24キーまで設定可能 |
0xB0-0xF7 | ユーザ定義マクロの記録領域。 8step (8byte) あるいは 16step (16byte) 単位で設定する 全領域を8stepのマクロ定義で使った場合は9個のマクロを定義可能。 |
※ Fnキー機能とユーザ定義マクロ機能を同時に利用可能。ただしFnキーは24個までしか設定できない。mode1aとの違いはマクロ定義領域を削って、代わりにFnレイヤー定義の領域を広げたのみです。
俺メモ
新しく作ったWindows10環境において、ファームをBootloaderで書き込んでもEEPROMが初期化されない。理由がわからなくて小一時間悩んでたら、HIDBootloader.exeのオプション画面の中に「Write Options」ってのがあって “EEPROM” のチェックが外れてた。多分ダウンロードして最初の実行時はチェックオフがデフォルト。
<画像>
と言うことは
アダプタを購入後にファームを更新した方は多分全員、その後のファームリリースでファームを更新してもEEPROMまでは更新されてないということになりそう
あと、このチェックボックスの状態はどこに保存されてんだ?と思ったらレジストリだった罠
100100 ; 設定1 ;
設定ファイルには1行に1バイト分の値を <EEPROMアドレス>, <設定値> の書式で記述します。セミコロン以降の文字はコメントとして無視します。行頭にセミコロンがあればその行はコメント行とみなします。
値は16進数で記述します。なお値の先頭に “$” をつけると2進数で記述出来ます(8bitで記述して下さい)
基本的には設定ファイルの雛形をダウンロードして頂いて、それをお好みでカスタマイズするのがよいかと思います。