(仮)釣りと電子工作 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[82] [83] [84] [85] [86] [87] [88]
さて、M0110A(厳密にはM0110AJ)を入手。このキーボードは安い!
人気はないけど、キータッチはM0110とほぼ同じ。

さっそくキーコードを調べてみた。

①基本はM0110とまったく同じ
②Enterキー(Returnではない)の吐き出すコードはM0110のEnterとは違う
③M0110Aで追加されたキーは1バイトではなく2または3バイトのコードを返す

ということで、調べてみた。

キー Make Break
---------------------------
←  79 0d    79 8d
→  79 05    79 85
↑  79 1b    79 9b
↓  79 11    79 91

ここから下はTenキー

0  79 25    79 a5
.  79 03    79 83
1  79 27    79 a7
2  79 29    79 29
3  79 2b   79 2b
4  79 2d    79 2d
5  79 2f    79 2f
6  79 31    79 31
7  79 33    79 33
8  79 37    79 37
9  79 39    79 39
Clear  79 0f    79 8f
=  71 79 11    f1 79 91
/  71 79 1b    f1 79 9b
*  71 79 05    f1 79 85
-  79 1d    79 9d
+  71 79 0d    f1 79 8d
Enter  79 19    79 99

おお、71(shiftキー)の処理が複雑になる!!
PR
忘れないうちにメモしておく。

① CLKとDATAの2本の線でデータのやりとりをする。
② CLKはつねにキーボードからホスト(Mac)に向けて送信する。
③ RS-232CやPS/2と違って、MSB firstでデータを送受信する。(さすが68系)
④ホストはCLK立ち上がりのタイミングでDATAを読む
⑤キーボードはCLK立ち上がりから80μs秒後にDATAを読む
⑥ホストからなにもしなければ、キーを押してもキーボードからデータを送ってこない。(無理にキーから値を読もうとすると無限ループにはまってハングする)
⑦ホストから0x10 (Inquiry)をキーボードに送ると、キー入力がある、ないにかかわらず、キーボードからデータを送ってくる。キー入力がなければNULL(0x7B)を返す。あれば該当するキーコードを返す。
⑧M0110が返すキーボードは、ADBキーボードが返すキーコードをちょうど2倍した値(左に1ビットシフトした値)になぜかなっている。


M0110_protocol.JPG







この図の言わんとすることは、つまり

キーボードからデータを受け取るときは、CLKがHighになるまでループさせて、HighになったときにDATAを読む。

キーボードへデータを送るときは、とりあえずDATAをLowにしておき、しばらくするとキーボードからクロックを送って(Lowにして)くるので、HighからLowに切り替わるタイミングでDATAへ書く。

これだけ。古いだけあって、簡単。
ちょこちょこっとロジックを書いて、RS-232C(PICの世界ではUSARTと呼ぶらしいので以降はUSARTと呼ぶ)とADBの変換はほぼ問題なくできることを確認した。

こんな感じで接続

[ ADB Keyboard ] -- [ 2SC1815 ] -- [ PIC 16F628A ] -- [ MAX232(互換) ] -- [ThinkpadのCOM4]

teratermではちょっと機能不足なので、SerialDebugTool(SerialDebug112.zip)を使用。
左右のShift,Ctrl,Altで違うコードを返してくるし、文字を送るとnum lock、caps lock、scroll lockのLEDを自由に制御できた。

あとは、

[PCのPS/2ポート] -- [ 2SC1815 ] -- [ PIC 16F628A ] -- [ MAX232(互換) ] -- [ThinkpadのCOM4]

てな感じでつなぐような、PS/2をUSARTに変換するものを作って、上のやつと直結すればADB-PS/2変換器の出来上がり。

で、こんなものを作らなくてもi-mateがあるじゃないか、といわれそうだが、まったくそのとおりとおもう。かくいうおれもi-mateを持っているのだが、caps lock のハードロックを微妙に処理しているところが気に食わない。caps lockのハードロックを外してcaps lockとctrlを入れ替えようと考えているおれにはあわない。

っということで、M0115対応は目処がついたので、開発中断。
実はM0116対応(たぶんGSキーボードも一緒)も考えていたけど、キーボードをもっていないのでやめた。M0116対応はM0115対応よりむずかしい。キーの数が101 or 84キーボードより少ないので、Happy HackingみたいにFnキーを作らないといけない。

明日からはM0110 ( Mac 128K/512K用テンキーなしキーボード)に挑戦。
http://www.eetasia.com/ARTICLES/2000JUN/2000JUN02_CT_AN8.PDF

これのほうが詳しい。
http://developer.apple.com/documentation/mac/Devices/Devices-205.html#MARKER-9-69

Apple Extended Keyboardは左右のShift,Ctrl,Altの識別が可能。
なにやら、IDを2から3にするといい、ということらしい。
方法は、

①レジスタ3の値をPUT(Listen): アドレス:0010   Listen:10 : レジスタ3:11
PC→キーボード 8bit: 0x2b ( 0010 1011)
②PC→キーボード 8bit: ( b'01100010')
③PC→キーボード 8bit: 0x03 (b'00000011')
カレンダー
05 2025/06 07
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
リンク
最新TB
バーコード
ブログ内検索
カウンター
Powered by ニンジャブログ  Designed by 穂高
Copyright © (仮)釣りと電子工作 All Rights Reserved
忍者ブログ / [PR]