カテゴリー別アーカイブ: キーボード

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

不足していた機能の追加や不具合の修正を行いました

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

 

変更点

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

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

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

 

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

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

ps2pc88

また、未アサインキーがあっても意味が無い気がしたので重複してでも全キーに何らかのアサインを行いました1。106キーボードでも全キー叩けるようにしようかと思ったけど、スペースの右側の並びがどうもしっくり来なかったので結局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系の伝統?)これも「逆の方がいい」と言う方はコメント下さい。

 

ps2pc88_

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

  1. これによって「未アサインキーを押すと『0』が返る」件も解消 []

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

自分用メモ

88FH_MATRIX

※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以降のキーボードでも同じ挙動を示すのかは不明。

  1. そうじゃないと「F4を押しているのにBreak通知」になってしまう []
  2. INSDELのMake []
  3. RETURNのMake []

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

こちらは実に敷居が高いモノとなっています

まず、このファームは実機で動作確認していません。実機持ってないので。作っても動かないとか、正常に動かない可能性があります。ですので

  • 電子工作に多少の経験がある
  • PC-8801 FH以降の機種を持っている
  • PIC12F1822を書き込めるライタを既に所持している
  • 出来ればブレッドボードを持っている
  • 動かなくても泣かない

という条件に当てはまる方のみお試し下さい。なお、正常に動かなかった場合は教えて頂ければ可能な限り対応します(が、実機持ってないのでお約束は出来ません)

一応、88の実機は持ってないものの88用のType Aキーボードの実物は持っているのでロジアナで出力信号を比較チェックしています。また、先にType Aキーボードの信号を解釈するテストボードを作ったうえで、作ったファームをそのテストボードで検証しています。1

PICはPIC12F1822を使います2。RA0が88への出力信号で、RA4がPS/2 CLK、RA5がPS/2 DATAです。PS/2の2本の信号線には必ず330Ωの抵抗を入れて下さい。パスコンとかは適当に。図中のポリスイッチ(自己復旧型ヒューズ)は省略可能です。

Untitled

PC-8801FH用 PS/2キーボード変換アダプタ ファーム
機能追加&不具合修正を行った更新版があります

 

ファームの制限事項です

PC-8801 FH以降の機種に付いてくるキーボードは88SR用キーボードからキーが増えています(F6~F10とか)。とりあえずここでは 88SRと共通のキーを「従来キー」、追加されたキーを「拡張キー」と呼ぶことにします。

拡張キーを押したとき、88SR用プログラムとの互換性を取るために、従来キーのキーコードも一緒に送信されます。例えば拡張キーの「F9」を押したときは「F9, SHIFT, F4」というキーコードが出力されます。拡張キーの「INS」を押したときは「INS, INSDEL」というキーコードが出力されます。

面倒なのはキーを離したときで、前述の例だとF9を離したときは「F9開放、F4開放、SHIFT開放」のコードが出力されますが、「F4を押したままF9を開放した」とか「SHIFTを押したままF9を開放した」場合は少し挙動が変わります。「F4を押したままF9を開放した」場合は「F9開放、SHIFT開放」だけ出力され、「SHIFTを押したままF9を開放した」場合は「F9開放、F4開放、SHIFT押下」が出力されます。そういうもののようです。

これらの挙動を厳密に網羅するのが面倒だったので、本ファームでは拡張キー開放時の同時押しに付いては特に考慮していません。SHIFTを押したままF9を開放した場合でも「F9開放、F4開放、SHIFT開放」が出力されて、SHIFTキーはリリースされた状態になります3 4

 

CAPSキーとかなキーのロックは実装していません。ロック機構が無いと問題が出るアプリがあるようなら実装を検討します。

 

PS/2 & USB コンパチ型のキーボードだとうまく動かないかもしれません(特に、「デフォルトがUSBで、ケーブルの先端にアダプタを挿すとPS/2でも使える」タイプのキーボード)

  1. これを検証と呼んでいいのか些か疑問ですが []
  2. PIC12F1840でも可 []
  3. 押してもいないのに「押されている」と処理されるのは問題が出そうでも、押しているのに「押していない」と処理されるのはまあ許されるかな、と []
  4. 追加された拡張キーはF6-F10, BS, DEL といった、そんなに他キーとの同時押しを行わないようなキーばかりなのでそう問題は起きないかな、と []

Firmware 3.0-RC9

まさかの大チョンボが見つかったため修正版となるRC9を登録しました。up0075.zip です。
なおRC8はとり急ぎということでADB版しかありませんでしたが、RC9 (up0075.zip) は全機種分のファームをアーカイブしています。ADB版以外でLEDを黙らせたい場合はRC9を使って下さい。

 

RC9変更点

  1. USBフレームワークの処理にミスがあったのを修正1
    ただ、このミスがあっても普通に動いている気がするのが大いに謎なんですが・・・なので現状で「システムコントロールキー」「メディアコントロールキー」の利用に問題が無ければこの更新(RC9)はスルーして下さい
  2. LEDの点滅パターンを指定する機能を追加。
    詳細はこちらを参照願います。
  3. X68000版に限り、実験機能として「Scroll Lock LED」に連動してレイヤーをトグルで切り替える機能を追加。
    LEDの切り替えは他のキーボードから行って下さい。物理キーボードでなくても、ソフトウェアキーボードでも構いません。これで XM6 上で完全に「全てのキー」が使用出来ます。ただしこの機能を有効にした場合、アダプタに繋がったX68000キーボードに対してScrollLockキーを設定してWindowsで使うことは出来なくなります 2

 

macOS用のファーム更新ツールは up0068.zip (ターミナル用)、up0074.zip (GUI用) です。ただ、GUI版は環境によってうまく動かない?ケースがあるようです。

 

  1. intel-macにおいてBIOS画面でキーが利かない不具合の修正。の修正ミス []
  2. キーを押した瞬間Layer切り替えになるので []

ConfigLoader for OSX/macOS

不具合を修正したバージョンを uploader に登録しました。up0073.zip です。設定ファイルの文字コード 「EUC / SJIS / UTF-8」になんとなく対応しました。また改行コードも「CR / LF / CRLF」に対応させたつもりです。

なお uploaderから取得できるサンプルは全部Windows上で作っているので文字コードはSJISで、改行コードはCRLFです。

実行時に「開発元が未確認のため開けません」といわれた場合はコンテキストメニューから開くなどの対応をお願いします。

このバージョンでも動作に問題がありましたらコメント等で報告頂けますと幸いです。

ConfigLoader for OSX/macOS

 

 

tmk_keyboardをPC-8801キーボードに対応させる

タイトルの通りです
tmk_keyboard firmwareを後期型のPC-8801キーボードに対応させます。

次のソースファイルを “tmk_keyboard/converter” の中に解凍して下さい。解凍後のフォルダ構成が次のようになっていれば大丈夫です

folder

あとはtmk_keyboardのbuild手順に従ってmakeするだけです。build環境の構築やbuild手順についてはここでは触れません

ソースファイル差分:pc88_usb_source

mini DIN5ピンコネクタとMCUの接続等については添付のREADMEを参照して下さい

なおコンバータはTYPE B専用です。TYPE B以外のキーボードについては、キーボード背面のモードスイッチを切り替える事でTYPE B相当になります。

ソース一式はオリジナルのtmk_keyboardにしたがってGPLv2ライセンスです。自由にして頂いて結構です。

DSC01229

いつもどおりのブレッドボード試作。mini DINコネクタとMCUを3本(5V, GND, DATA)繋ぐだけの簡単なお仕事です。

 

追記

本家 tmk_keyboard のgithubリポジトリにマージされましたのでそちらから取得して下さい

TMK Keyboard Firmware Collection

東プレ MD01B0

近所のハードオフのジャンク箱に300円で入ってたのでゲット

DSC01227

静電容量無接点、薄型、ゴム椀らしからぬクリック感。鉄板プレート。

特殊配列がいまいちというレビューもあるけど、40%や60%のキーボードが流行ってるような昨今だからなぁ。あんまり気にならないかな

Firmware 3.0-RC8 (usb2adbのみ)

Firmware 3.0-RC8をuploaderに上げました (up0071.zip)。LEDが眩しすぎてウザイというごもっともな指摘に対応すべくLEDの動作を変えられるようにしました。アドレス 0x7D への設定を

  • [3] 完全OFF
  • [2] やや控えめ (キーを押している間だけ点灯)
  • [1] 控えめ  (キーON/OFFの瞬間だけ一瞬点灯)
  • [0] 従来通り

とする事でパターンを選択可能です。控えめにしてもまだ眩しい気がするので、申し訳ありませんが気になる方は完全OFFを試して下さい。デフォルトは「従来通り」です。

例)
7D, 01     ; キーをON/OFFした瞬間に一瞬点灯
7D, 03     ; 完全にOFF (サスペンド中もOFF)

 

なお次々回発送分より、そもそものLEDの明るさを下げるように回路を微修正します。

今回のファーム修正(RC8)はこの1点のみですので、現状で特にLEDが気にならないと言う場合は更新不要です。また、macOS/OSX用のファーム更新ツールも同時にuploaderに上げました(up0068.zip コマンドライン版)。USB2ADB用のファームはいつもどおりLEDの色によって使用するファームが異なりますのでご注意下さい(例:usb2adb_xxxx_blue.hex はLEDが青色のアダプタ専用です)

 

2019.08.23 追記
OSX/macOS用のGUI版ファームウェア更新ツールもDL出来るようにしました  (up0074.zip) ファイルサイズが140MB位ありますので、コマンドラインツール (up0068.zip) に抵抗が無い方はそちらをお試し下さい

2019.10.26 追記
ファームウェアのバージョンをRC9に上げました