REG->keyboard.c注释
主要是按下一个方向键后出来一大堆= =!
程序代码: void far interrupt newInt9(void) /*新的键盘中断程序*/
{
unsigned char ScanCode,temp;
ScanCode=inportb(0x60); /*从键盘I/O端口读入一个按键码*/
temp=inportb(0x61); /*读取控制寄存器61H*/
outportb(0x61,temp | 0x80); /*并用82h完成一个OR操作*/
/*在控制寄存器上用7fh完成一个AND操作,以便复位键盘触发器,告诉硬件一个按键已被处理,可以读下一个键了*/
outportb(0x61,temp & 0x7f);
if(ScanCode&0x80) /*闭合状态*/
{
ScanCode&=0x7f;
key_state[ScanCode]=0;
}
else /*断开状态*/
{
key_state[ScanCode]=1;
key_pressed[ScanCode]=1;
}
outportb(0x20,0x20); /*复位中断控制器8259,向端口20h写一个20h*/
}
int getKey(int ScanCode) /*读取按键*/
{
int res;
res=key_state[ScanCode]|key_pressed[ScanCode]; /*求出所有按键的键码和*/
while(key_state[ScanCode])return 0; /* 如果按键未松开 */
key_pressed[ScanCode]=0; /*读取完后,恢复未按状态*/
return res;
}偶得一注释完全的代码~和REG中的有说明区别呢?
REG中是按方向键不松,那么会一直显示某个键被按下。
而上面那个代码不管按键松还是不松都只会显示一下。
游戏中REG的只要按着方向键不松,人物会一直走下去。
而上面那个每按一下走一步。。。所以要走,得狂按方向键。
造成这区别的是:while(key_state[ScanCode])return 0;






