PC-6601SR 赤外線キーボードをWindowsパソコンで代用してみる

PC-6601SRのキーボードはPC-6000シリーズ唯一のキーボードセパレートタイプで、4芯の有線ケーブルか、赤外線を通して、PC-6601SR本体にキーの情報を送ります。キーボードが本体と分離しているからか、オークション等々ではPC-6601SR本体が出品されていてもキーボードが付属していない場合があります。また、キーボードのキーが反応しなくなっている場合もあるので、純正キーボードの代用方法を考えてみました。

■ 方法

Bit Trade OneのUSB赤外線リモコンキットを使います。学習型のリモコンで、パソコンから制御できるようになっています。残念ながら、赤外線信号の送り方が違うため、純正品のままではPC-6601SRでは使えないのですが、ハードの仕様が公開されているため、ファームウェアを書き換えることで対応させることができました。ファームウェアの更新もWindowsから簡単にできますので、工作作業はUSB赤外線リモコンキットの半田付けだけですし、完成品を買った場合はUSBで接続するだけで済みます。かんたん!

このリモコンは、送受信が可能なのですが、PC-6601SRのキーボードは、キーボードからPC-6601SR本体への一方向通信だけですので、USB赤外線リモコンキットの受信部は使わない事になります。勿体ないのですが、送信部分の回路を独自に組み立てる事を考えたら、お得なキットだと思います。

USB赤外線リモコンキットは、色々なところで販売しています。

公式サイト USB赤外線リモコンキット(組立済版) / USB赤外線リモコンキット

共立エレショップ USB赤外線リモコンキット【完成品】 / USB赤外線リモコンキット

秋葉原だと、三月兎2号店で買えます。

注意書き:Bit Trade One社の製品のファームウェアを書き換えているのですが、USBに関する諸情報はそのままになっています。ファームウェアのソースコードをみると、ManufacturerやProductといった情報を保持している箇所があり、書き換えた方がいいのかもしれませんが、どういった情報を書き込むべきなのか理解していないので、そのままになっています。VernderID/ProductIDもそのままです(初期状態のVenderID:22EA)。ですので、自分だけで楽しむ程度の使い方に留めておいてください。

■ 手順

組み立て

説明書の手順に従って組み立てます。

赤外線受信部が基板からはみ出ていると、(フリスクの)ケースに収まらなくなるので、足は短めにした方がいいですヨ。

純正ソフトで動作確認

まずは、純正のファームウェアとソフトで動作確認をしましょう。

WindowsパソコンにUSBで接続します。USB赤外線リモコンキットのブートスイッチは通常使用側にしておきます。特別なドライバ無しでWindowsに認識されるはずです。 説明書では、USB IR REMOCONというデバイスで認識されると書かれていますが、私のWindowsパソコンでは、マウスと複数のUSB 入力デバイスで認識されました。

製品ダウンロードページから、 [REMOCON_CT_TRANSv2](送信ツール) をダウンロードして起動します。Windows7よりの前のOSを利用している場合には.Net Framework 3.5が必要だそうです。

USB接続されたリモコンが正しく認識されていれば、アプリの右下に「検出済み」と表示されているはずです。

一応、赤外線送信の確認のために、手持ちのリモコンを使って、テレビやエアコンを操作してみるといいんじゃないかなと思います。

ファームウェアの書き換え

公式サイトの製品ダウンロードページから、【ファームウェア書き換えソフト】 をダウンロードします。

一度、USB赤外線リモコンキットをWindowsパソコンから外し(重要)、USB赤外線リモコンキットのBOOTスイッチを切り換えます。USB接続したままでスイッチを切り換えても駄目です。

USB赤外線リモコンキットをWindowsパソコンに接続すると、HID USB BootLoaderというデバイスとして認識されるそうです。(これも、私のPCでは、入力デバイスになってしまいますが、問題なく使えてます)

ファームウェア書き換えソフト(HIDBootLoader.exe)を起動します。

USB赤外線リモコンキットがファーム書き換えモードとして認識されていれば、書き換えソフトにDevice attached.と表示されます。

Open Hex Fileのボタンをクリックします。

このページの下の方にあるファームウェアをダウンロードしてZIPファイルを展開し、入っている拡張子がhexのファイルを選択します。

Program/Verifyのボタンをクリックします。

これで書き換え完了です。

ファームウェア書き換えソフトを終了して、USB赤外線リモコンを取り外し、BOOTスイッチを切り換えます(重要)。 再び、USB赤外線リモコンを接続します。

※PC-6601SR対応のファームウェアを導入すると、純正のリモコンソフトは使えなくなりますが、公式サイトから最新のファームウェアを落としてきて、同じように書き戻せば、元に戻すことができます。

■ PC-6601SRのキーボードとして認識させる

ダウンロード一覧にある、コントロールアプリ[66SR_IR_KEYBOARD.zip]をダウンロードして起動します。コマンドプロンプトから起動してもいいですし、普通にダブルクリックでもOKです。

USB赤外線リモコンが正しく認識されていれば、デバイス名とファームウェアのバージョンが表示されます。

USB赤外線リモコンが接続されていなかったり、起動スイッチが正しくないと、つれないエラーメッセージが出ます。

正しく認識したら、USB赤外線リモコンをPC-6601SRの赤外線受光部に向けます。

PC-6601SRを起動してメニューが表示されたら、Windows PCのF5キーを押してください。PC-6601SRがMODE6に切り替わるはずです。

これでハード周りの準備と確認は完了です。

私があれこれ試したケースでは、トラブルらしいトラブルが起きなかったので、どのような問題が起きえるのか想像がしにくく、問題の切り分けも対処方法も思い付きません。USB赤外線リモコンをPC-6601SRに向けてF5キーを押しても画面が変化しない場合、PC-6601SR正面フロントパネルのスタンバイランプが点滅するかどうか確認してみてください。

反応がない場合、手持ちのテレビやエアコンのリモコンをPC-6601SR本体の赤外線受光部に向けてリモコンのボタンを色々と押してみてください。赤外線データが違うのでキーの入力はできませんが、それでもPC-6601SR本体側は反応してスタンバイランプが点滅します。反応がない場合、PC-6601SR本体側の受光部に問題があるということになります。

■ コマンドプロンプトアプリの使い方

リアルタイム入力モード

アプリをダブルクリック起動するか、コマンドプロンプトから引数無しで起動すると、リアルタイム入力モードになります。

aと押したら、PC-6601SR側にaと表示されます。SHIFT+Aを入力するとAが表示されます。アプリの仕様上、SHIFTキー単体では反応しません。基本的にはWindows側の日本語キーボードの刻印の通りです。英語キーだとどうなるかわかりません。

特殊キー対応表

Windowsのキー PC-6601SRのキー
F7 かな
F8 ひらがな/カタカナ切換え
F9 CAPS
F12 終了
HOME HOME CLR
END STOP
PAGE UP PAGE
PAGE DOWN MODE
DEL/BS DEL

ひらがなを入力するには、ひらがなモード(F7)を押して、ひらがなモードにします。JIS配列の通りに文字が出るので、Aのキーを押すと「ち」と入力されます。カタカナにするには、ひらがなモードの状態でF8を押します。カタカナ状態でF7を押すとアルファベット状態に戻りますが、ひらがな/カタカナの状態は変化しません。

現状では、グラフィック記号(月火水木...や罫線などの記号)を入力できません。PC-6001系のエミュレータではALTキーとの組合せで入力できるようになっていますが、これもコマンドプロンプトからはALTキーの状態を調べるのが面倒なので対応してません。

コマンドプロンプトが日本語入力受付可能で、コードページが932であれば(chcpコマンドで確認できます)、IMEを有効にして、SJISの2バイト文字も受け付けるはずです。手元の環境(windows7 32bit/64bit + ATOK)でしか試していないので、他の環境では未確認です。コマンドプロンプト上で「あ」(全角)を入力するとPC-6601SR側に「あ」(半角)が表示されます。IMEのローマ字入力でPC-6601SRにひらがな/カタカナを入力できるということですね。罫線記号も含めた一通りの記号や英数字にも対応しています。「ヴ」とかもOKです。

注意点としては、PC-6601SR側が「かな」状態になっている時に、IMEを通して日本語入力すると、正しく動作しません。これは、Windows側から2バイトひらがなを送る場合、ひらがなモードに切り換え→コード送信→ひらがなモード切り換えという処理をしているためで(画面右下の表示が素早く切り替わるのが見えます)、最初の状態がひらがなだった場合、それ以降の状態が反転してしまうからです。

テキストファイル転送モード

PC-6001用BASICが書かれたテキストファイル(文字コードはSJIS限定)をアプリにドラッグ&ドロップするか、コマンドラインからテキストファイルを引数として起動すると、ファイル転送モードになります。

テキストファイルの中身をひたすらPC-6601SRに送ります。

送信前のPC-6601SRのキーの状態がアルファベット(abc)でCAPS OFF、ひらがな/カタカナ切り換え時の状態がひらがなになっていないと、転送がおかしなことになるので注意してください。

■ FAQ

STICK(0)/STRIG(0)が反応しないよ?
コマンドプロンプトアプリでは、SHIFTキー単体の状態を取るのが面倒なのと、キーが離された時の情報を取得するのが同じく面倒なので、SHIFTキーやカーソルキーの現在の状態をPC-6601SR本体に送れないのです。コマンドプロンプトアプリではなく、通常のWindowsのアプリにすれば対応できるので、徐々に対応できたらなーと思いますが、自分では必要性を感じないので、やる気が。
ひらがな(カタカナ)の「ろ」と「を」が入力できないよ?
「を」は、Windowsのメモ帳などでSHIFT+0を押しても文字が出ないのです。同じ理由でコマンドプロンプトではSHIFT+0に対応する文字が取得できないからです。「ろ」は、文字コード自体は取得できるのですが、PC-6601SR側は、ひらがな(カタカナ)状態の時に「ろ」の文字コードである0x5Fを受け取っても「ろ」を表示してくれないのです。どちらの文字も、IME経由で入力するのがいいと思います。
テキストファイルの転送速度が遅いんだけど?
転送速度の限界には2つの上限があります。一つは赤外線データの送信時間と、データ間の間隔で、えすびさんの調査によると、最小間隔は5173us(実測値)だそうです。送信データの内容によって転送時間が変わるのですが、最長の場合、1文字の送信に27ミリ秒ほどかかります。もう一つの上限がBASICの入力受付速度で、あまり高速に文字を入力してもBASIC側が受け付けられないのではないかなと思います。現状、1文字データを送るごとに50ミリ秒のウエイトをかけているので、大体の転送速度は160baudくらいになります。カタカナを送る場合は、かなモードへ切り換え→カナ切り換え→文字コード→カナ切り換え→かな切り換えという段階を踏むので更に遅くなります。
Macでも使いたいんだけど?
USB赤外線リモコンはHIDデバイスとして認識されていて、比較的、制御が簡単みたいです。私は未だにUSBもPICも詳しい仕組みがわかっていませんが\(^o^)/、それでもなんとなくこんなことをしているんだろうなーという想像の範疇でどうにかなるくらいに仕組みが抽象化されているので、Macでもなんとかなるんじゃないかなと思います。一番の手がかりは「DSAS開発者の部屋:親指サイズの USB 赤外線リモコンが面白い」で、こちらのページにMacでUSB赤外線リモコンを制御する方法が書かれています。
LinuxとかRaspberryPiとかAndroidとかで動かせない?
公式サイトのリンク先を参考にすれば出来るんじゃないかなと思います。公式サイト内のフォーラムにも有用な開発情報が書かれています。

■ ダウンロード

ファームウェア: PIC_pc6601sr_irkey.X.production.zip

コントロールアプリ: 66SR_IR_KEYBOARD.zip

以下、ソースコード一式も公開します。オリジナルのソースコードを公開された方々に感謝します。改変したファイルの再配布は無許可でOKです。好き勝手にいじってください。

コントロールアプリ ソースコード: 66SR_IR_KEYBOARD_src.zip
VisualC++2012で書いています。ファイルの拡張子は.cppですが中身はベタベタなC言語です。文字コードやキー入力周りだけがWindows依存ですが、特殊なことはしていない(つもり)なので、他の環境へは持って行きやすいと思います。
ファームウェア ソースコード一式: PIC_pc6601sr_irkey_src.zip
必要なファイルがわからないので全部入ってます。MPLABX IDEとC18で開発しています。C18は最適化OFFでコンパイルしてあります。

■ 技術資料

赤外線のプロトコルと、キーボードからPC-6601SRに送られるデータについて説明します。 PC-6601SRはキーボードから本体への片方向通信です。

赤外線通信の仕組みは、てきとーに「赤外線 データ フォーマット」あたりのキーワードでネット検索すると出てきます。基本的には、PC-6601SRのキーボードも一般的な赤外線通信のフォーマットに則っていますが、細かい数値が異なっています。

実際に、キーボードのAを押した時のLEDから出る信号は波形は、このようになります。(画像クリックで別ウィンドウで開きます)

(信号はサブキャリア38KHzで変化しているのですが、上図では塊になっています)

リーダーと終端の信号以外の波形変化を0と1として読み取ると(0と1は隙間の幅で判断できます)、先頭から000100001101111011110010というビット列になります。ビット列の意味は、画像にも書いてありますが、ざっと説明すると、先頭から3bitが特殊機能用、8bitの送信データ(下位bitから)、データチェック用の1bitで、ここまでの12bitをビット反転したデータが続きます。合計で24bitです。

先頭3bitは常に000という意味ではありません。

1bit目...グラフィックフラグです。送信データは8bitなので256種類のデータ、つまり256種類のキーコードということになりますが、このフラグを使うことで512種類まで拡張しています。PC-6000シリーズは、ひらがな、カタカナ、グラフィック記号を含めると256文字以上あるので、このように1bitの情報を付加して文字数を拡張しています。

2bit目...カーソル4方向、SPACE、STOP、SHIFTキー専用のフラグです。これらいずれかのキーが押された/離された時に、7種類のキーの状態がデータとして送られます。この辺は詳しく調べていません。えすびさんのWebページに詳しい説明があります。

3bit目...未確認ですが、電源ボタン用のBitのようです。PC-6601SRの純正キーボードには電源ボタンがあります。

キーボードのキーの情報は8bitデータ+グラフィックフラグということになります。グラフィックフラグという名称は、PC-6001mkII解析マニュアルIからの表記です。このフラグがONの時は主にグラフィック記号が表示されるからなのだと思いますが、実際にはファンクションキーなども含まれます。キーコードは別のページにまとめてあります。

キーコード表

例えば、ファンクションキーのF5が押されたという情報をキーボードから本体に送るには、グラフィックフラグのbitを1にして、F5キーのキーデータを0xF4を下位bitから流すことになります。リーダー、チェック用bit、反転bit列と合わせた24bitを流すと本体側で受信します。

USB赤外線リモコンキットに書き込んであるファームウェアでは、リーダーと終端を自動的に付加するようになっていますから、Windows側からは(最初の3bit+データ8bit+チェック1bit)×2の合計24bitをUSB経由で送れば、あとはリモコン側が適切な波形を作ってLEDを光らせてくれます。チェックbitと反転bitもUSBリモコン側で処理すれば転送データ量を減らせるのですが、USB経由でで3バイト送るか2バイト送るか程度の差なのとリモコン側の減らすためにPC側で処理しています。

詳しい処理は、ソースコードを見た方が早いと思います。