2016.10.17
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
キーボードインターフェースの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
そして作戦その2は、やっぱりキーボードインターフェースしかありませんでしょう。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第7回]


●キーコード対照表の作成

ASCIIコードとスキャンコードの対照表を作成しました。
最初はMicrosoftのサイトからダウンロードしたドキュメントからコピーしてそれをEXCELに貼り付けて…、なんで考えて、ちょっとやってみたのですが、いやあ、こういうことをしようとしますと、EXCELなんて全然駄目ですね、使い物になりません。

で。
結局のところ、一番使い勝手のいいのは、わがND80Z3.5だというところに落ち着きました。
どのくらい簡単なのか、論より証拠です。
ログで見ていただきましょう。
ここで作成したのはとりあえず、1〜0、A〜Zと記号キーです。

logfile nd80zlog\10170927.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
ndwr2h.bin loaded,from E23F to E535
>cm 9000
9000 DC-31
9001 00-16
9002 68-32
9003 21-1e
9004 02-33
9005 00-26
9006 A1-34
9007 80-25
9008 00-35
9009 01-2e
900A 04-36
900B 24-36
900C 04-37
900D 48-3d
900E 60-38
900F 90-3e
9010 EA-39
9011 5F-46
9012 FF-30
9013 BE-45
9014 FF-61
9015 FF-1c
9016 EB-62
9017 DF-32
9018 7F-63
9019 B6-21
901A FF-64
901B FB-23
901C FE-65
901D D7-24
901E 6F-66
901F 66-2b
9020 45-67
9021 46-34
9022 09-68
9023 00-33
9024 C1-69
9025 C2-43
9026 10-6a
9027 45-3b
9028 25-6b
9029 00-42
902A 00-6c
902B 09-4b
902C 88-6d
902D 80-3a
902E 51-6e
902F 02-31
9030 DF-6f
9031 BF-44
9032 F7-70
9033 9F-4d
9034 6D-71
9035 E3-15
9036 FD-72
9037 EF-2d
9038 B5-73
9039 EF-1b
903A F3-74
903B BE-2c
903C D7-75
903D 2F-3c
903E FB-76
903F F7-2a
9040 C4-77
9041 00-1d
9042 C8-78
9043 A8-22
9044 20-79
9045 00-35
9046 04-7a
9047 40-1a
9048 CE-2d
9049 00-4e
904A 08-5e
904B 00-55
904C 80-5c
904D 0A-6a
904E 00-40
904F 08-54
9050 FF-5b
9051 CF-5b
9052 BF-3b
9053 B5-4c
9054 B3-3a
9055 BC-52
9056 FB-5d
9057 FF-5d
9058 57-2c
9059 FB-41
905A AF-2e
905B F6-49
905C 7E-2f
905D FB-4a
905E F9-5c
905F C7-51
9060 51-
>/sv keycode1,9000,905f
0060(96)bytes saved

ドキュメント(実際はインターネット上のサイトで検索して、最も見やすいと思った対照表)を見ながらCMコマンドで、最初にASCIIコードを入力し、次にそのキーのスキャンコードを入力して、それを繰り返しました。
入力作業はこれで終わりです。
あれこれ考えるよりも簡単で、実にあっけないぐらい簡単に終ってしまいました。
この入力データはいずれキーコード変換テーブルとして利用することになると思いますから、バイナリファイルとしてセーブしました。

さてここからがASCIIコードとスキャンコードの対照表の作成作業です。
こういう作業はBASICが最適です。
もう即席でプログラムが簡単にできてしまいました。
下は即席で簡単に作ってしまったBASICプログラムとその実行結果です。

>.
    10 FOR A=0 TO $5E STEP 2
    15 AD=$9000+A
    20 CAS=PEEK(AD)
    30 KC=PEEK(AD+1)
    40 PRINT CHR$(CAS),HEX$(CAS,2),HEX$(KC,2)
    50 NEXT A
>    
>ren
>r.
1            31           16
2            32           1E
3            33           26
4            34           25
5            35           2E
6            36           36
7            37           3D
8            38           3E
9            39           46
0            30           45
a            61           1C
b            62           32
c            63           21
d            64           23
e            65           24
f            66           2B
g            67           34
h            68           33
i            69           43
j            6A           3B
k            6B           42
l            6C           4B
m            6D           3A
n            6E           31
o            6F           44
p            70           4D
q            71           15
r            72           2D
s            73           1B
t            74           2C
u            75           3C
v            76           2A
w            77           1D
x            78           22
y            79           35
z            7A           1A
-            2D           4E
^            5E           55
\            5C           6A
@            40           54
[            5B           5B
;            3B           4C
:            3A           52
]            5D           5D
,            2C           41
.            2E           49
/            2F           4A
\            5C           51

どうです。
EXCELなんか、目じゃありませんでしょう。
あっという間に対照表ができてしまいました。

え…と。
ちょっと間が空いていて見にくいですね。
間を詰めてみましょう。
PRINT文をちょっと直して再実行しました。
こういうときにBASICは実に実に便利です。

>.
    10 FOR A=0 TO $5E STEP 2
    20 AD=$9000+A
    30 CAS=PEEK(AD)
    40 KC=PEEK(AD+1)
    50 PRINT CHR$(CAS),HEX$(CAS,2),HEX$(KC,2)
    60 NEXT A
>    50 PRINT CHR$(CAS);" ";HEX$(CAS,2);" ";HEX$(KC,2)
>/save keymake1.txt
    10 FOR A=0 TO $5E STEP 2
    20 AD=$9000+A
    30 CAS=PEEK(AD)
    40 KC=PEEK(AD+1)
    50 PRINT CHR$(CAS);" ";HEX$(CAS,2);" ";HEX$(KC,2)
    60 NEXT A
>r.
1 31 16
2 32 1E
3 33 26
4 34 25
5 35 2E
6 36 36
7 37 3D
8 38 3E
9 39 46
0 30 45
a 61 1C
b 62 32
c 63 21
d 64 23
e 65 24
f 66 2B
g 67 34
h 68 33
i 69 43
j 6A 3B
k 6B 42
l 6C 4B
m 6D 3A
n 6E 31
o 6F 44
p 70 4D
q 71 15
r 72 2D
s 73 1B
t 74 2C
u 75 3C
v 76 2A
w 77 1D
x 78 22
y 79 35
z 7A 1A
- 2D 4E
^ 5E 55
\ 5C 6A
@ 40 54
[ 5B 5B
; 3B 4C
: 3A 52
] 5D 5D
, 2C 41
. 2E 49
/ 2F 4A
\ 5C 51

そうそう。
A〜Zが小文字になっていました。
これは参考にしたもとの表が小文字のコードだったからです。
キーコードは小文字でも大文字でも同じです。
Shiftキーが押されていれば小文字コードに、押されていなければ大文字のコードに変換しますが、その作業はキー入力プログラムの中で行なうことになります。
もとのデータが小文字コードだからといって、わざわざ大文字のコードを入力し直す必要はありません。
それもBASICプログラムをちょいと直すだけで、ほら、この通りです。

>45if (cas>=$60)*(cas<=$7a) then cas=cas-$20
>.
    10 FOR A=0 TO $5E STEP 2
    20 AD=$9000+A
    30 CAS=PEEK(AD)
    40 KC=PEEK(AD+1)
    45 IF (CAS>=$60)*(CAS<=$7A)THEN CAS=CAS-$20
    50 PRINT CHR$(CAS);" ";HEX$(CAS,2);" ";HEX$(KC,2)
    60 NEXT A
>/save keymake2.txt
    10 FOR A=0 TO $5E STEP 2
    20 AD=$9000+A
    30 CAS=PEEK(AD)
    40 KC=PEEK(AD+1)
    45 IF (CAS>=$60)*(CAS<=$7A)THEN CAS=CAS-$20
    50 PRINT CHR$(CAS);" ";HEX$(CAS,2);" ";HEX$(KC,2)
    60 NEXT A
>r.
1 31 16
2 32 1E
3 33 26
4 34 25
5 35 2E
6 36 36
7 37 3D
8 38 3E
9 39 46
0 30 45
A 41 1C
B 42 32
C 43 21
D 44 23
E 45 24
F 46 2B
G 47 34
H 48 33
I 49 43
J 4A 3B
K 4B 42
L 4C 4B
M 4D 3A
N 4E 31
O 4F 44
P 50 4D
Q 51 15
R 52 2D
S 53 1B
T 54 2C
U 55 3C
V 56 2A
W 57 1D
X 58 22
Y 59 35
Z 5A 1A
- 2D 4E
^ 5E 55
\ 5C 6A
@ 40 54
[ 5B 5B
; 3B 4C
: 3A 52
] 5D 5D
, 2C 41
. 2E 49
/ 2F 4A
\ 5C 51

いかがでしたでしょうか。
ND80Z3.5の便利さをご理解いただけましたでしょうか?

キーボードインターフェースの製作[第7回]
2016.10.17upload

前へ
次へ
ホームページトップへ戻る