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;