アダプタ設定

各アダプタごとの設定ビット説明
設定ファイルに記述する際は、値の頭に “$” をつけると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)

俺メモ

ユーザ定義マクロの設定について

ユーザ定義マクロはキーコード(※スキャンコードではありません)を押した/離したの順に設定するだけです。簡易機能なのでタイミングを調整したりといった高度なことは出来ません。

押した/離したの区別はありません。あるキーのキーコードが初めて出現したら「押した」、2度目の出現は「離した」と判断します。

 

以下例(カッコ内はキーコード)

例1Ctrl左 (0xE0) + Alt左 (0xE2) + Del (0x4C)

→ E0, E2, 4C, 4C, E2, E0, 00, 00

※ stepを使い切らずに余った分は 0x00 で埋めて下さい

例2Shift右 (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

 

マクロの中からマクロを呼び出すことは出来ません。特にチェックもしていないので多分アダプタが暴走します。

意図的なケースを除いて、必ず「押した+離した」をペアで記述して下さい(つまり、あるキーコードは必ず偶数回出現する)。そうしないとキーが押しっぱなしの状態でマクロが終了します。

ユーザ定義マクロの記述について (その1)

俺メモ

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を混在させて定義した例です。

EEPROMアドレスマップ (その2)

俺メモ

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領域を割り振るか) だけの差

EEPROMアドレスマップ (その1)

俺メモ

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レイヤー定義の領域を広げたのみです。

MicrochipのUSB HID Bootloader

俺メモ

新しく作ったWindows10環境において、ファームをBootloaderで書き込んでもEEPROMが初期化されない。理由がわからなくて小一時間悩んでたら、HIDBootloader.exeのオプション画面の中に「Write Options」ってのがあって “EEPROM” のチェックが外れてた。多分ダウンロードして最初の実行時はチェックオフがデフォルト。

<画像>

 

と言うことは

アダプタを購入後にファームを更新した方は多分全員、その後のファームリリースでファームを更新してもEEPROMまでは更新されてないということになりそう

あと、このチェックボックスの状態はどこに保存されてんだ?と思ったらレジストリだった罠

 

サイバースティック コンバーター

といいつつ画像はカブトガニ (XE-1AP) ですが。

ハード的にはメガドラパッドコンバーターのコネクタ出力を2本入れ替えただけです (DB9 の8p ⇔ 9p を基板上で入れ替え)

使ってるマイコンのI/Oピンを全部使い切ってるため、アダプタ外部から何らかの設定を投入することが出来ません。なので完全にサイバースティック専用です。例によってUSB経由でファームを更新出来るようにしてあります。

DB9の8pと9pを入れ替えるようなチェンジャを噛ませた上でメガドラコンバーターのファームに入れ替えればメガドラパッドが繋がりますが、それやるなら最初からメガドラパッドコンバーター買って下さいよろしくお願いします(宣伝

メガドラパッド コンバーター

ちょっと乗り遅れた感はありますが、メガドラ実機用コントローラの変換アダプタを作ってみました。

こんな感じでDB9のシェルの中に基板を収めた小型アダプタに仕上げました。外部から設定変更できる訳でもなく、挿して繋いで使うだけです。USB経由でファームの更新が出来る様にしています。

今回初めてBOOTHに出品しています。値段が高めなのはご勘弁を。1個作るのに予想以上に手間隙がかかるので。 出品は終了しました。再生産の予定はありません。

使っているのはPIC16F1455です。UART、I2C、SPIの各信号はコネクタに引き出してあるのでファームを差し替えればUSB-MIDIとかも出来そうな気がします(DB9-DIN5変換ケーブルを作る必要がありますが)「PIC16F1455 MIDI」で検索すると(以下略

PS/2キーボードをPC-8801 FH以降に繋ぐ (2)

不足していた機能の追加や不具合の修正を行いました。PIC12F1822 or PIC12F1840用です。

PC-8801FH用 PS/2キーボード変換アダプタ ファーム

 

2019.11.14追記
日本語106 Keyboardでも使えるように、PCキーをRight ALTに割り当てたバージョンを作成しました(APPはGRPHを割り当てています)キー配置以外の変更はありません

PC-8801FH用 PS/2キーボード変換アダプタ ファーム+

 

変更点

1. CAPSキー、かなキーのロック処理を追加しました

一度押すとONのままロックされ、もう一度押すとロックが解除されてOFFになります。キーの状態はキーボードのLEDで確認出来ます。なお、かなキーのロックはScroll Lock LEDに割り当てています。

処理の都合上、キーを「離した(Break)」時に判定を行っています(CAPSキーを押して、離した時にONでロック。もう一度押して、離した時にロック解除)

 

2. キーレイアウトを見直して変更しました

現在のレイアウトは以下のとおりです。なおPCキーはApp (Menu) にアサインしているので日本語109キーボード必須となります。

未アサインキーがあっても意味が無い気がしたので重複してでも全キーに何らかのアサインを行いました1106キーボードでも全キー叩けるようにしようかと思ったけど、スペースの右側の並びがどうもしっくり来なかったので結局AppにPCをアサインしています。テンキー=とテンキーカンマは、これはさすがにどうしようもないのでF11とF12にアサインしました。

STOPはScroll LockとPauseの両方にアサインしていますが、押しっ放し動作が必要な場合はScroll Lockを使って下さい。PS/2の仕様上、Pauseキーは押しっ放しが出来ません(押した瞬間に「押した」「離した」が出力されるので)

前述のとおり「CAPS」と「かな」はロックキーです。一度ON-OFFすると「押した」だけが通知されて、もう一度ON-OFFすると「離した」が通知されます。現在どちらの状態にあるかはLEDで判別可能です。なお「かな」はScroll Lock LEDを割り当てています

※左CTRLとCAPSの配置は逆の方がいい、と言う方がいましたらコメントで教えて下さい。

PageUpに「ROLL DOWN」をアサイン、PageDownに「ROLL UP」をアサインしています。(NEC系の伝統?)これも「逆の方がいい」と言う方はコメント下さい。

 

回路図再掲。点線部分はオプションで実装しなくても動きます。LEDはPS/2キーボードの操作にあわせて点滅します。POLYSWは自己復旧型のヒューズです。万一の場合の気休めに。

 

PC-8801 キーボード端子 (ミニDIN 5ピン)

 

PC-8801 FH以降 キーボードのマトリクス

自分用メモ

※1 Row=0x0Eの7bit目は常に0が返る

Row=0x0C以降はPC-8801 mkII のキーボードには無い、追加されたキー。便宜上「拡張キー」と呼ぶことにするが、拡張キーを打鍵した場合はmkII/SRとの互換性維持のため従来キー(mkII/SRに存在するキー)のキーコードも同時に出力される(2行表記のキーの下段)

例えばF9を打鍵した場合は「F9(Make), SHIFT(Make), F4(Make)」が出力される

F9押下→F4押下と打鍵した場合は「F9(Make), SHIFT(Make), F4(Make), F4(Make)」と、F4のMakeが連続で発生する

拡張キーを離した場合はやや複雑となる。単独Breakの場合は簡単で、例えばF9以外のキーが押されていない状態でF9を開放した場合は「F9(Break), F4(Break), SHIFT(Break)」が出力される。

F4を押したままF9を開放した場合はF4のBreakコードは出力されない1。よって「F9(Break), SHIFT(Break)」のみが出力される。

SHIFT左かSHIFT右を押したままF9を開放した場合は「F9(Break), F4(Break), SHIFT(Make)」と、最後にSHIFTのMakeコードが出力される。普通に考えたらSHIFTについてはMakeもBreakも出力しなくて良いようにも思われるが。なおこの「良く分からないMakeの出力」はBSとDEL2、ENTERとテンキーENTER3 でも同様に発生する。逆に、SHIFT左とSHIFT右の場合はSHIFTのMakeは発生しない。

INSを押下した場合はINSのMakeに続けて「SHIFT, INSDEL」のMakeも出力されるが、これは個別に出るのではなくまとめて出力される。同一Rowのキーは最大7キーまでMake/Breakを一度に表現できるので、SHIFTとINSDELのMakeは

Row = 0x08、Col = 0b10110111

となる(Col の bitが 0のキーが押下中のキー。4bit目の0はINSDELの押下を示し、7bit目の0はSHIFTの押下を示している)

 

上記の動作は Type Aキーボードで確認。Type B以降のキーボードでも同じ挙動を示すのかは不明。