991cnx有矩阵键盘码、按键内码、一级字符表三套码
按键内码有些键和一级字符表的对应字符相同(比如按键1的内码是00 31,字符1在一级字符表上是31)还有一些是不同的(比如按键SHIFT的内码是FC 29,但SHIFT没有对应的字符)在rom里,从0:62E2开始有一个按键内码表,目测是按照矩阵键盘码的顺序排的。表上还有一些东西不知道对应什么键(比如0:6308处的FC 3E)
我在分析函数1:F230时(这个函数会等待按下SHIFT然后返回,按其他键没有反应),发现两个似乎可以用来检测按键的函数。1:F230的代码大意如下:
er14 = sp;
sp -= 2;
do {
0:F746( er0 = er14 - 2 );
2:52DC( er0 = er14 - 2, er2 = 0x62E2 );
} while ( er0 != 0xFC29 );
0:F746的代码很长,我暂时没分析出来,可能是用来读键盘的,但是2:52DC我大致看懂了,代码大意如下:
a = er0; b = er2;
r2 = a[0]; r3 = a[1];
if ( r2 == 0 || r3 == 0 ) {
er0 = 0;
return;
}
r0 = (r2的位数-1)<<3 + (r3的位数-1); //01100000有7位,以此类推
er0 = b + r0 + r0;
er0 = *er0;
这个函数似乎是用来把矩阵键盘码转化成按键内码的。SHIFT对应的0xFC29出现在0:6352,也就是0:62E2 + 0x70,反推得到r0为00111000,那么r2有8位,r3有1位。同时,自检界面里发现SHIFT是KI8 KO1,因此我推测r2 r3分别对应KI和KO。如果我的猜想正确,那么函数0:F746就会读取物理键盘并把读到的值放在er0[0]和er0[1]里,然后调用2:52DC,就能把矩阵键盘码翻译成按键内码并放入er0,这样就达到了按键检测的目的。
现在,矩阵键盘码和按键内码的关系已经清楚了,很容易得到开头提到的FC3E对应KI3 KO4。但我不知道物理键盘和矩阵键盘码的关系。请问吧友们有没有物理键盘和矩阵键盘码的对应表?
按键内码有些键和一级字符表的对应字符相同(比如按键1的内码是00 31,字符1在一级字符表上是31)还有一些是不同的(比如按键SHIFT的内码是FC 29,但SHIFT没有对应的字符)在rom里,从0:62E2开始有一个按键内码表,目测是按照矩阵键盘码的顺序排的。表上还有一些东西不知道对应什么键(比如0:6308处的FC 3E)
我在分析函数1:F230时(这个函数会等待按下SHIFT然后返回,按其他键没有反应),发现两个似乎可以用来检测按键的函数。1:F230的代码大意如下:
er14 = sp;
sp -= 2;
do {
0:F746( er0 = er14 - 2 );
2:52DC( er0 = er14 - 2, er2 = 0x62E2 );
} while ( er0 != 0xFC29 );
0:F746的代码很长,我暂时没分析出来,可能是用来读键盘的,但是2:52DC我大致看懂了,代码大意如下:
a = er0; b = er2;
r2 = a[0]; r3 = a[1];
if ( r2 == 0 || r3 == 0 ) {
er0 = 0;
return;
}
r0 = (r2的位数-1)<<3 + (r3的位数-1); //01100000有7位,以此类推
er0 = b + r0 + r0;
er0 = *er0;
这个函数似乎是用来把矩阵键盘码转化成按键内码的。SHIFT对应的0xFC29出现在0:6352,也就是0:62E2 + 0x70,反推得到r0为00111000,那么r2有8位,r3有1位。同时,自检界面里发现SHIFT是KI8 KO1,因此我推测r2 r3分别对应KI和KO。如果我的猜想正确,那么函数0:F746就会读取物理键盘并把读到的值放在er0[0]和er0[1]里,然后调用2:52DC,就能把矩阵键盘码翻译成按键内码并放入er0,这样就达到了按键检测的目的。
现在,矩阵键盘码和按键内码的关系已经清楚了,很容易得到开头提到的FC3E对应KI3 KO4。但我不知道物理键盘和矩阵键盘码的关系。请问吧友们有没有物理键盘和矩阵键盘码的对应表?