SUNのType5キーボードのUSBコンバータ
[English(?) page is here]

これは何?
SUNの古いワークステーションのキーボードをUSBキーボードとして使うためのインターフェース変換機です。
AVR-USBというライブラリを使ってます。

いまやSUN Type5キーボードはゴミ捨て場の常連さんです。見てのとおり無駄にキーがついていてクールです。持ってない人は今すぐゴミ捨て場にGO!

ファームウエアは ここに置いてます。


できること
SUNのキーボードを普通にUSBキーボードとして使うことができます。ドライバなどは不要です。 SUNの特殊キーのいくつかはWindowsで使うキーにマッピングしてます。ドライバはOSの標準ドライバで大丈夫です。ボリュームキーもOSが対応してれば使えます(デバッグに使ったUbuntuでは使えたから正しいコードは出力してるはずだけど、なぜか常用してるVista x64では効かないようで残念。Consumer Page(0Ch)との複合デバイスにすべしとか書いてる人がいたけどこういうことか...)。この原稿も上の写真のキーボードで書いてますが意外と使いやすいです。今使ってる安物キーボード(中央を叩かないと激しくひっかかる)よりずっといいのでしばらく常用しようかと思ってます。

上の写真は日本語キーボードですが、英語キーボードをお使いの場合は main.c の #define JAPANESE_KEYBOARD をコメントアウトしてビルドすれば使えるんじゃないかと思います。
SUNのキーコード調査資料、兼、USBのコードとのマッピング資料の全リストはこの資料の末尾のほうにあります。


キーマクロの使い方
キーマクロを4バンク記録できます。各バンクに記憶できるキーストローク数はUp/Downあわせて63ストロークまでです。とりあえずキーボード左側キーを下図のように割り当てています。

キーストロークの記録を開始したいときにHELPキーを押します。記録を保存するには、Save1~4のキーのいずれかを押します。記録したストロークを再生したいときは、Run1~4のいずれかのキーを押します。
キーストロークはEEPROMに保存してますので一度登録すれば電源を切っても消えません。
記録開始(HELPキー押下)後、保存しないまま記録文字数が制限(63ストローク)をオーバーした場合は、記録操作を自動キャンセルします。このときキーボードから短いビープ音を鳴らして、記録がキャンセルされたことをお知らせします。
モディファイアキーも記録できるので、SCROLL LOCK+数字等で切り替えられるKVMスイッチの切り替えなどに使うと便利と思います。


ファームウェアの使い方
添付のhexはATMega168指定でビルドしてます。eepファイルも忘れず書き込んでください。ATMega48以上であればたぶんリビルドするだけで動くと思います。プログラムメモリ3K、EEPROM256byteしか使ってないので。


実装例

とってもシンプル。
部品リストは同梱の回路図参照。


右上のコネクタ2つはデバッグ用なのでなくてもよいです。 入手が難しいかもしれない部品はmini DINの基板用ソケットぐらいと思いますが、日本橋の共立で1個100円で売ってます。足はICピッチと微妙に違いますがぎゅうぎゅう押せばユニバーサル基板に刺さります。ピンアサインは、1:GND, 2:GND, 3:+5V, 5:RxD, 6:TxD, 7:GND, 8:+5V。
水晶は5V品ですが普通に動いてます。あと、USBコネクタのFGの足はちゃんとつけたほうがいいでしょう。(私は基板の穴あけが面倒だったので足をニッパで切っちゃいました。おかげでぐらぐらです)


SUN Type5 キーボードのキーコードと USB Usage ID の変換表

English
Keytop
Japanese
Keytop
RAW
KeyCode
USB Key
UsageID(E)
USB Key
UsageID(J)
Japanese Mapping Note SUN
LED
USB
LED
(N/A)   00h          
Stop   01h - - 120(*1)    
Volume Down   02h 129 129      
Again   03h - - 121(*1)    
Volume Up   04h 128 128      
F1   05h 58 58      
F2   06h 59 59      
F10   07h 67 67      
F3   08h 60 60      
F11   09h 68 68      
F4   0Ah 61 61      
F12   0Bh 69 69      
F5   0Ch 62 62      
Alt Graph KANA 0Dh 230 136 assign to "KATAKANA/HIRAGANA".
(International 2)
10h 10h
F6   0Eh 63 63      
(N/A)   0Fh          
F7   10h 64 64      
F8   11h 65 65      
F9   12h 66 66      
Alt   13h 226 226      
UP Arrow   14h 82 82      
Pause   15h 72 72      
Print Screen   16h 70 70      
Scroll Lock   17h 71 71   03h 03h
Left Arrow   18h 80 80      
Props   19h - - (*2)    
Undo   1Ah - - 122(*1)    
Down Arrow   1Bh 81 81      
Right Arrow   1Ch 79 79      
ESC   1Dh 41 41      
1 !   1Eh 30 30      
2 @ 2 " 1Fh 31 31      
3 #   20h 32 32      
4 $   21h 33 33      
5%   22h 34 34      
6 ^ 6 & 23h 35 35      
7 & 7 ' 24h 36 36      
8 * 8 ( 25h 37 37      
9 ( 9 ) 26h 38 38      
0 ) 0 27h 39 39      
- _ - = 28h 45 45      
= + ^ ~ 29h 46 46 It's NOT 53 in Japanese Keyboard.    
` ~ (YEN) | 2Ah 53 137 It's NOT 49 in Japanese Keyboard
(International 3)
   
Back Space   2Bh 42 42      
Insert   2Ch 73 73      
Mute   2Dh 127 127      
/ (10key)   2Eh 84 84      
* (10key)   2Fh 85 85      
(POWER)   30h - - 102(*1)    
Front   31h - - (*2)    
. (10key)   32h 99 99      
Copy   33h - - 124(*1)    
Home   34h 74 74      
Tab   35h 43 43      
Q   36h 20 20      
W   37h 26 26      
E   38h 8 8      
R   39h 21 21      
T   3Ah 23 23      
Y   3Bh 28 28      
U   3Ch 24 24      
I   3Dh 12 12      
O   3Eh 18 18      
P   3Fh 19 19      
[ { @ ` 40h 47 47 (*3)    
] } [ { 41h 48 48 (*3)    
Del   42h 76 76      
Compose   43h 101 101 assign to "Application" key. 02h 04h
7 (10key)   44h 95 95      
8 (10key)   45h 96 96      
9 (10key)   46h 97 97      
- (10key)   47h 86 86      
Open   48h - - (*2)    
Paste   49h - - 125(*1)    
End   4Ah 77 77      
(N/A)   4Bh          
Ctrl   4Ch 224 224      
A   4Dh 4 4      
S   4Eh 22 22      
D   4Fh 7 7      
F   50h 9 9      
G   51h 10 10      
H   52h 11 11      
J   53h 13 13      
K   54h 14 14      
L   55h 15 15      
; : ; + 56h 51 51 (*3)    
` : * 57h 52 52 (*3)    
\ | ] } 58h 49 50 It's NOT 48 in Japanese Keyboard.    
Return   59h 40 40      
Enter (10key)   5Ah 88 88      
4 (10key)   5Bh 92 92      
5 (10key)   5Ch 93 93      
6 (10key)   5Dh 94 94      
0 (10key)   5Eh 98 98      
Find   5Fh - - 126(*1)    
Page Up   60h 75 75      
Cut   61h - - 123(*1)    
Num Lock   62h 83 83   01h 01h
Left Shift   63h 225 225      
Z   64h 29 29      
X   65h 27 27      
C   66h 6 6      
V   67h 25 25      
B   68h 5 5      
N   69h 17 17      
M   6Ah 16 16      
, <   6Bh 54 54      
. >   6Ch 55 55      
/ ?   6Dh 56 56      
Right Shift   6Eh 229 229      
(Line Feed) \ _ 6Fh - 135 International 1    
1 (10key)   70h 89 89      
2 (10key)   71h 90 90      
3 (10key)   72h 91 91      
(N/A) KAKUTEI 73h - 139 assign to "MUHENKAN"
(International 5)
   
(N/A) HENKAN 74h - 138 International 4    
(N/A) Japanese
ON-OFF
75h - 53 "HANKAKU/ZENKAKU".
Not LANG 5!
   
Help   76h - - 117(*1)    
Caps Lock   77h 57 57   04h 02h
Left Meta   78h 227 227 Left Windows    
Space   79h 44 44      
Right Meta   7Ah 231 231 Right Windows    
Page Down   7Bh 78 78      
(N/A)   7Ch          
+ (10key)   7Dh 87 87      
(N/A)   7Eh          
    7Fh     Idle state, all Keys UP.    
(*1)These are defined as noted by "HID Usage Table v.1.12", but useless in windows environment.
(*2)These are not defined in "HID Usage Table".
(*3)very confusing !


ご感想など
なんかあれば、hogeman at gmail か 日記のほうまで連絡を。