はじめに
前回は信号の取り出しができた。ついでに信号の読み方も分かった。
実はこれで全行程の5割は終わったといっても良い。
今回はキーを押したらどうなるか調べる。
前回のおさらい
わかりますね?必要なのはD0-D7とMake,Brakeだけよ。
やったこと
(1)Zを押す→Zを離す
(2)Zを押す→Xを押す→Xを離す→Zを離す
なんとこれだけで大体の振る舞いがわかっちまうんだ!!!
(1)Zを押す→Zを離す
Zを押した瞬間。Make = 1になっているのが分かる。
この時D7-D0はキーコードを示している。
B00011010 = 0x1Aとなる(おまけ1へ)。
ATRGが0なのはパッドとしても使えるようにするため。(おまけ2へ)
Zを押した1周期後の信号。まだZは押しっぱなし。
ATRGは0のままだ。ただしMake = 0となっている。
D7-D0はZのキーコードを示している。
Zを離した瞬間の信号。Brake = 1となっているのが分かる。
A TRGが1に戻っている。
D7-D0はZのキーコードを示している。
Zを離した1周期後の信号。どのキーも押していない状態。
D7-D0はZのキーコードを示している。
わかったこと。
・ キーを押した/離した瞬間のみMake/Brakeが1となる。
・ D7-D0はキーを離してもそのまま残る。
(2)Zを押す→Xを押す→Xを離す→Zを離す
今Zを押しっぱなしにしていますね。
Xを押した瞬間。Make = 1となりB TRGが0になります。
またキーコードがB00100010 = 0x22となります。
ZとXの同時押し状態です。
Zを離した瞬間。Brake = 1となりキーコードはZのものとなります。
押しているキーはXのみとなります。
Xを離した瞬間。Brake = 0となりキーコードはXのものとなります。
どのキーも押していない状態です。
わかったこと。
・ D7-D0はキーを押した/離した瞬間に対応するキーコードになる。
まとめ
キーコード部(D7-D0)が変わるのはmake/brakeが1になったときのみ。
単純だね。
次はArduinoにキーボードをつなぐよ。
おまけ1(キーコード)
SEGA公式文書にはUS仕様のキーボードしか書いてない[1]。
SEGA of Americaの資料だからしかたないね。
日本語キーボード用のキーコードはこちら。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
00 | F9 | F5 | F3 | F1 | F2 | F12 | F10 | F8 | F6 | F4 | Tab | hankaku | ||||
10 | L_Alt | L_Shit | katakana | L_Ctrl | Q | 1 | R_Alt | R_Ctrl | Z | S | A | W | 2 | |||
20 | C | X | D | E | 4 | 3 | space | V | F | T | R | 5 | ||||
30 | N | B | H | G | Y | 6 | M | J | U | 7 | 8 | |||||
40 | < | K | I | O | 0 | 9 | > | ? | L | ; | P | - | ||||
50 | _ | : | @ | ^ | CapsL | R_Shift | Enter | [ | ] | |||||||
60 | henkan | BackSp | muhenkan | BackSlash | ||||||||||||
70 | ESC | F11 | ScrLock | |||||||||||||
80 | Insert | Pause | F7 | PrintSc | Delete | ← | Home | End | ↑ | ↓ | PageUp | PageDown | → |
e.g.) F9を押したり離したりするとD7-D0 = 0x01になる。SならD7-D0 = 0x1Bになる。
エクセルかなんかに貼り付けると見やすくなるよ。
おまけ2(パッドとの対応)
ESC = Start,
Q = R TRG, E = L TRG
A = X TRG, S = Y TRG, D = Z TRG,
Z = A TRG, X = B TRG, C = C TRG,
矢印キーはそのままキーボードに対応する。
ただし手持ちのゲームではパッドとして使えなかった。
参考