この記事はあくあたん工房2023アドベントカレンダーの15日目です.
omzn教授(キーボード改造学)です.
本日は古いキーボードの再生についての講義をしましょう.
平成版NeXTキーボード
まだ若かりし頃,2000年代に古いコンピュータを改造して最新のPCに換骨奪胎するという遊びに興じていました.
NeXT cubeとか,NeXT stationとか,Macintosh LC II(だったかな),Mac G4 cubeとかを改造して,ミニPCを作る遊びです.
苦労する割には,たいした性能もだせず,熱設計が破綻しているのですぐ暴走するというろくでもない機械を生み出していました.
犠牲になった古いコンピュータには悪いことをしたと思っております.
その流れで,NeXTキーボードの改造をしていました.NeXTのキーボードはMac系のADBぽい何かでしたが,当時は単なる使えないキーボードでした.
そこで若きomznは閃きます.
「そうだ,ここに転がってるジャンクのPS/2キーボードからコントローラを取り出して移植したら使えるようになるんじゃないかな」
早速キーボードの仕組みを調べると,キーボードにはキーマトリクスデコーダが乗っていること,そして,都合の良くないことにキーマトリクスはみんなバラバラということでした.
「せっかく分解したPS/2キーボードを何とか活かしたいな…」
ここでomznはまた閃きます.
「そっか,このPS/2キーボードに合わせてNeXT側を配線し直してやればいいんだ」
こうして魔改造されて生まれたのが平成版NeXTキーボードでした.
当時の標準規格だったPS/2にしておけば大丈夫だろうと思っていたのですが,時代はすぐにUSB全盛になり,NeXTキーボードはUSB変換をかまされたまま20年近く利用されました.ただ,元々PC/AT用のキーボードだったため,Macとの相性はあまり良くなく,キー入れ替えソフトが必須の状態で使うことになりました.また,ファンクションキーへのアクセス手段がないので,時々大変困ることになっていました.
そのため,20年の間,「いつかは今風のキーボードに作り直したい…」という思いを引きずっていたのでした.
令和版NeXTキーボード V1
2023年秋,ゆゆ君がキーボードを自作したのを見せてくれたので心に火が付き,自作キーボード化への完全移行を目指すようになります.
基本的にやることは以前と同じで,物理マトリクスに合わせたマトリクスデコーダを作ることになります.これが簡単にできる仕組みを提供してくれているのが,QMKです.
レイアウト
Fキーがないことを除けば,普通のキーボードに見えます.Backquoteがテンキーパッドにありますが,まあご愛敬.
物理スイッチ
NeXTキーボードではALPSクリーム軸を採用しています.軽やかなクリック感がクセになります.
(ALPS軸についてはこちらのサイトが非常に詳しいです.また,こちらの記事も大変興味深いものです.)
マトリクス解析
以下の図の上は,20年前に私がWebページに載せていたPS/2キーボードのマトリクスです.
非常に贅沢にマトリクスを構成していたので,このままだとマトリクスのピンが25本も必要です.
カラムのORをとってもキーコードがかち合わない場所は単純に統合可能なので,3つのカラムを減らすことができました.(図の下)
これでもまだ22本のGPIOが必要です.
一般的なPro MicroですとGPIOが18本しか使えないので,今回はRaspberry Pi Picoを使用します.Raspberry Pi Picoは26本のGPIOを利用できますので,今回の用途に使ってもまだ4本のGPIOが余ります.そこをLEDの駆動やI2Cに割り当てることで,さらに機能を増やすことができます.
ハードウェア作成
Raspberry Pi Picoを載せる
これまでPS/2コントローラに接続されていたすだれケーブルを切断して,Pi PicoのGPIOに繋いでいきます.
今回は初回の試作だったので,そのままはんだづけしましたが,ソケットで取り外し可能にするのがベターですね.
USBの端子を設置する
3Dプリントで土台を作成して,USBの口を作ります.写真では試作時なので赤で作っていますが,最終形は黒にしています.
最終的にはこんな感じになります.改造前に比べると余計な基板が無くなってすっきりしました.
QMKの設定
キーボードの設定
- このキーボードのように,ダイオードが実装されていないマトリクスでは
MATRIX_HAS_GHOST
をdefineします. - CapsLockのLEDを
GP0
で制御します.
キーマップ
先ほどのマトリクスに忠実にキーマップを書いて行きます.
- NeXTのPowerキーをFnキーとして利用
- Volume up, Volume downをPage up, Page down (Fn押下で本来の機能)
- Brightness up, Brightness downをHome, End (Fn押下で本来の機能)
- 「Fn + 数字」で 「F1~F10」
- 左Commandキー単独で「英数」,右Commandキー単独で「かな」
等の機能を追加しています.
Esc周りはやや特殊で,単押しでEsc, Shift + Escで「〜」, Shift + Alt + Escで「`」が出るようになっています.
利用するGPIOとマトリクスの対応はinfo.json
に書きます.
KLE でグラフィカルなキー配置を作成する
VIAやRemapでキー配置を変更する時のGUI用に,KLEでレイアウトを作ります.
ここでハマりましたが,肝はキートップのLegendにマトリクスの座標を書いてやることです.
PS/2コントローラのマトリクスが物理配列と全く合っていないので,この図では座標がバラバラになっています.
VIAの設定
via.jsonを作ります.これは,RemapなどのツールでキーマップをGUI的に変更するときに使います.
中身は,KLEで作成したキー配置のデータと,キーボードの名前,Vender ID, Product ID,matrixの行列を記したものになります.
できあがり!
ここまでで,一旦キーボードはできあがりです.
ファームウェアを焼いてやれば,キーボードが使えるようになるはずです.
qmk flash -kb next_keyboard_v1 -km via
ソースコードは GitHub に置いています.
(おまけ)OLEDパネルを追加する
キーボード単体だとちょっと寂しかったので,透過OLEDを使ってHUD風ディスプレイを付けて見ました.蛇足感が酷いです.
実はここまでの話は前座に過ぎなかったのです.
長くなるので本編は次の記事で..