📄 kbd.c
字号:
#include <arch.h>
void kb_wait();
void kb_readall();
void kb_write(unsigned char val);
unsigned char readchar()
{
//dead loop (because origin is if(da&1) )
unsigned char data,da;
wait:
da =inb(0x64); // read , 8042 status
if(!(da&1))
goto wait; //没有数据,等待 (kbd to host)
data = inb_p(0x60);
return data;
}
void kb_write(unsigned char val)
{
unsigned char da;
wait:
da =inb(0x64); // read , 8042 status
if(da&2) //输出缓冲区满 ( host to kbd )
goto wait;
outb(0x60, val);
}
int kb_reset()
{
int iwait =3000;
kb_wait();
outb(0x64,0xaa);
while(readchar()!= 0x55&&iwait--);
if(iwait==-1)return 0;
return 1;
}
void kb_readall()
{
unsigned char data;
unsigned char da;
wait:
da =inb(0x64); // read , 8042 status
if(da&2) //输出缓冲区满 (kbd to host)
goto read;
return;
read:
data = inb(0x60); //port 0x60 ,data
goto wait;
}
////////////////////////////////////////////////////////////////
//下面的开启键盘leds的方法引起计算机重启, why
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -