【发布时间】:2021-07-09 07:59:23
【问题描述】:
我正在尝试做一个 PS/2 键盘控制器,但我无法让它工作。
outb(0x60, 0xED);
outb(0x60, 2); /* Turn on CapsLock LED (doesn't works)*/
char c = 0;
while (c != 1)
{
if (inb(0x60) != c)
{
c = inb(0x60);
if (c > 0)
putch(scan2char(c));
}
}
scan2char 函数:
char scan2char(char scn)
{
char keych;
switch (scn)
{
case 0x15:
keych = 'q';
break;
case 0x1D:
keych = 'w';
break;
case 0x24:
keych = 'e';
break;
case 0x2D:
keych = 'r';
break;
case 0x2C:
keych = 't';
break;
case 0x35:
keych = 'y';
break;
}
return keych;
}
它读取按键,但键盘布局以一种奇怪的方式发生了变化;例如:如果我按 9,我得到 q,如果我按 0,我得到 w,你懂的。 一开始我以为可能是putch函数,但做了一些测试,发现putch不是问题。
【问题讨论】:
-
确保您拥有使用这些 I/O 端口所需的权限。
-
@linuxfan 我在裸机编程
-
标签
protected-mode让我怀疑...
标签: c x86 osdev bare-metal protected-mode