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

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

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

[第9回]


●キーコード対照表の作成(3)

前回は終わりのところで、スキャンコードとASCIIコードとShiftを押したときのASCIIコードを別々のメモリアドレスブロックに分けて書き込んだほうがよいと思います、と書きました。
前回は時間がなくなってしまいましたのでそこで終りましたが、今回はその続きということで、またBASICプログラムを作って、そのようにしてみました。
どうせそのように分けるのでしたら、表の方もひとつの表でShiftなしのときのASCIIコードとShiftを押したときのASCiiコードとスキャンコードが対比できるようにするとよい、と思いましたのでそのようにプログラムしました。
下は作成したBASICプログラムとその実行結果です。

>/save keymake8.txt
    10 AD1=$9100,AD2=$9200,AD3=$9300
    20 FOR A=0 TO $5E STEP 2
    30 AD=$9000+A
    40 CAS=PEEK(AD)
    50 KC=PEEK(AD+1)
    60 POKE AD1,KC:POKE AD2,CAS
    70 PRINT CHR$(CAS);" ";HEX$(CAS,2);" ";
    80 IF A=$5E THEN CAS=$5F:GOTO 140
    90 IF (CAS>=$2C)*(CAS<=$2F)THEN CAS=CAS+$10:GOTO 140
   100 IF CAS=$30 THEN PRINT "   - ";HEX$(KC,2):CAS=0:GOTO 150
   110 IF CAS<=$3B THEN CAS=CAS-$10:GOTO 140
   120 IF CAS<=$5E THEN CAS=CAS+$20:GOTO 140
   130 IF CAS<=$7A THEN CAS=CAS-$20
   140 PRINT CHR$(CAS);" ";HEX$(CAS,2);" ";HEX$(KC,2)
   150 POKE AD3,CAS
   160 AD1=AD1+1,AD2=AD2+1,AD3=AD3+1
   170 NEXT A
>r.
1 31 ! 21 16
2 32 " 22 1E
3 33 # 23 26
4 34 $ 24 25
5 35 % 25 2E
6 36 & 26 36
7 37 ' 27 3D
8 38 ( 28 3E
9 39 ) 29 46
0 30    - 45
a 61 A 41 1C
b 62 B 42 32
c 63 C 43 21
d 64 D 44 23
e 65 E 45 24
f 66 F 46 2B
g 67 G 47 34
h 68 H 48 33
i 69 I 49 43
j 6A J 4A 3B
k 6B K 4B 42
l 6C L 4C 4B
m 6D M 4D 3A
n 6E N 4E 31
o 6F O 4F 44
p 70 P 50 4D
q 71 Q 51 15
r 72 R 52 2D
s 73 S 53 1B
t 74 T 54 2C
u 75 U 55 3C
v 76 V 56 2A
w 77 W 57 1D
x 78 X 58 22
y 79 Y 59 35
z 7A Z 5A 1A
- 2D = 3D 4E
^ 5E ~ 7E 55
\ 5C | 7C 6A
@ 40 ` 60 54
[ 5B { 7B 5B
; 3B + 2B 4C
: 3A * 2A 52
] 5D } 7D 5D
, 2C < 3C 41
. 2E > 3E 49
/ 2F ? 3F 4A
\ 5C _ 5F 51

>p.hex$(ad1),hex$(ad2),hex$(ad3)
9130         9230         9330

>dm 9100,912f
9100  16 1E 26 25 2E 36 3D 3E-46 45 1C 32 21 23 24 2B  ..&%.6=>FE.2!#$+
9110  34 33 43 3B 42 4B 3A 31-44 4D 15 2D 1B 2C 3C 2A  43C;BK:1DM.-.,<*
9120  1D 22 35 1A 4E 55 6A 54-5B 4C 52 5D 41 49 4A 51  ."5.NUjT[LR]AIJQ
>dm 9200,922f
9200  31 32 33 34 35 36 37 38-39 30 61 62 63 64 65 66  1234567890abcdef
9210  67 68 69 6A 6B 6C 6D 6E-6F 70 71 72 73 74 75 76  ghijklmnopqrstuv
9220  77 78 79 7A 2D 5E 5C 40-5B 3B 3A 5D 2C 2E 2F 5C  wxyz-^\@[;:],./\
>dm 9300,932f
9300  21 22 23 24 25 26 27 28-29 00 41 42 43 44 45 46  !"#$%&'().ABCDEF
9310  47 48 49 4A 4B 4C 4D 4E-4F 50 51 52 53 54 55 56  GHIJKLMNOPQRSTUV
9320  57 58 59 5A 3D 7E 7C 60-7B 2B 2A 7D 3C 3E 3F 5F  WXYZ=~|`{+*}<>?_
>/sv keycode5.bin,9100,932f
0230(560)bytes saved


プログラムを実行したあとで、DMコマンドで9100〜と9200〜と9300〜のメモリの内容を確認してみました。
9100〜がスキャンコードで、9200〜がShiftを押さないときのASCIIコードで、9300〜がShiftを押したときのASCIIコードです。

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

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