マイコン独立大作戦
キーボードインターフェースの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
そして作戦その2は、やっぱりキーボードインターフェースしかありませんでしょう。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第5回]
●ND80Z3.5でキー入力テスト
前回はスキャンコードについてほんの少しだけ簡単に説明をしました。
とにかくスキャンコードのままでは使うことはできませんから、ASCIIに変換するなどして使うことになります。
そのためにはプログラムで変換するための変換コード表のようなものをいずれは作らなければなりません。
その表ができましたら、その時点でスキャンコードとASCIIコードの対応表として皆様にお見せすることにします。
それまでスキャンコードについてはしばらくおあずけということにいたしましょう。
さて今回はいよいよ実際にキーボードをつないでキーコードを読み込んでみることにします。
[第2回]でも書きましたが、オシロやカメレオンUSBロジアナで観測したキーボードのPS/2コネクタから出力される波形は、1クロックが約80μsです。
このくらいの速度の信号ならばND80Z3.5の82C55に直接つないでプログラムで読み込むことができそうです。
ということで、即席で下の図のように接続してみました。

そしてこれも即席で作ってしまった、簡単なキー入力テストプログラムです。
2016/10/1 17:6 keyin.txt
END=814B
;;; keyboard test program
;16.10.1
;
ORG $8100
;
HXDP2=$104B
;
8100 3E9B START0:LD A,9B
8102 D383 OUT (83),A
8104 CD1781 START:CALL KEYIN
8107 C20481 JP NZ,START
810A 61 LD H,C
810B C5 PUSH BC
810C CD4B10 CALL HXDP2
810F C1 POP BC
8110 79 LD A,C
8111 FE1A CP 1A;=Z
8113 C8 RET Z
8114 C30481 JP START
;
8117 DB80 KEYIN:IN A,(80);bit7 clock
8119 E680 AND 80
811B C0 RET NZ
811C DB80 KEYIN1:IN A,(80)
811E B7 OR A
811F F21C81 JP P,KEYIN1;pass start bit
8122 0608 LD B,08;
8124 DB80 KEYIN2:IN A,(80)
8126 B7 OR A
8127 FA2481 JP M,KEYIN2
812A 1F RRA;bit0 data
812B 79 LD A,C
812C 1F RRA
812D 4F LD C,A
812E DB80 KEYIN3:IN A,(80)
8130 B7 OR A
8131 F22E81 JP P,KEYIN3
8134 05 DEC B
8135 C22481 JP NZ,KEYIN2
;pass parity bit
8138 DB80 KEYIN4:IN A,(80)
813A B7 OR A
813B FA3881 JP M,KEYIN4
813E DB80 KEYIN5:IN A,(80)
8140 B7 OR A
8141 F23E81 JP P,KEYIN5
;pass stop bit
8144 DB80 KEYIN6:IN A,(80)
8146 B7 OR A
8147 FA4481 JP M,KEYIN6
814A AF XOR A
814B C9 RET
;
;END
HXDP2 =104B KEYIN =8117 KEYIN1 =811C
KEYIN2 =8124 KEYIN3 =812E KEYIN4 =8138
KEYIN5 =813E KEYIN6 =8144 START =8104
START0 =8100
|
キー入力プログラムというよりも、キーコード解析プログラムといったほうが適切です。
とにかくキーを押すとどのようなコードがどんなふうに送出されるのか、それを確認してみるためのプログラムです。
こちらが実行結果です。
logfile nd80zlog\10041453.txt open zb3dos3n 2014.4.6 by Chunichidenko ND80Z3に接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld keyin.bin,8100 loading KEYIN.BIN ...004c(76)bytes loaded,from 8100 to 814B >usr($8100) 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CF01C323232323232323232323232323232F03212121212 12121212121212121212121212121212121212121212121212121212121221212121212121212121 2121212121212121212121212121F021F01212121212121212122323232323232323232323232323 23232323F023F01212121212121212121212122424242424242424242424242424242424F0122424 24242424242424242424242424242424242424242424242424F0242B2B2B2B2B2B2B2B2B2B343434 34343434343434343434343434343434343434343434343434343434F034F02B1414141414141414 14141414141414141414141414141414141414141414141414141414141414141414141414141422 22222222222222222222222222222222222222222222F022F0141212121212121212121212121212 12121212121212121212121212121212121212121212122C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CF02CF0121A >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Tue Oct 04 15:01:32 2016 |
キーをA、B、C、D、Eと順番に一定時間押したときに出力された結果です。
途中テストのためにShiftキーも押しています。
ここで表示されているスキャンコードは以下の通りです。
A 1C
B 32
C 21
D 23
E 24
F 2B
G 34
左Shift 12
最初にAキーを押しました。
押している間スキャンコード1Cが連続して出力され、Aキーを離すとF0、1Cが出力されました。
次に同様にしてBキーを一定時間押し続けてから離しました。
その結果スキャンコード32が連続で出力されたあと、F0、32が出力されました。
その次はちょっと分かりにくいのですが、左Shiftキーを押したあと、そのまま押し続けながらさらにCキーを押しました(つまり[Shift]+[C]のキー操作です)。
Shiftキーのスキャンコード12が連続して出されたあとCキーのスキャンコード21に代わっています。
2行目の後から20字ほど戻ったあたりです。
これはちょっとキーの選択がまずかったようです。
Shift(12)とC(21)ですから境目がわかりにくいです。
2が2回連続して表示されているところが1箇所あります。
そこが境目です。
まだShiftキーも押したままですからF0、12が出されることなく、あとから押したCキーのスキャンコードが代わって出力されています。
このあとCキーを離してからShiftキーを離しましたが、その様子が3行目の真ん中あたりに表示されています。
最初にF0、21が出力されて次にF0、12が表示されています。
そのあと同じようにしてShiftキーとDキーを押して、それから両方のキーを離したことが出力されたスキャンコードから読み取れます。
12、23、F0、23、F0、12というデータの流れのところです。
次は同様にして先にShiftキーを押してからEキーを押したのですが、今度は先にShiftキーを離してからEキーを離しました。
普通はこういうキー操作はしないはずですが、テストのためにやってみました。
すると前2回とは異なるちょっと面白い結果が出ました。
最初にShiftキーを押したときは、そのまま押しているとオートリピートが始まって12が連続して出力されます。
そのあとShiftキーを押したまま文字キーを押すとその文字のスキャンコードがオートリピートされます。
そして先に文字キーを離すとF0に続けてその文字キーのスキャンコードが出されますが、そのあとShiftキーだけを押していてもShiftキーはオートリピートされずにShiftキーが離されるまでキースキャンコードは出力されません。
ところが先にShiftキーを離すとF0、12のあとは押している文字キーのスキャンコードがオートリピート出力されるようになります。
説明の途中ですが時間がなくなってしまいました。
続きは次回にすることにいたします。
キーボードインターフェースの製作[第5回]
2016.10.15upload
前へ
次へ
ホームページトップへ戻る