2017-12-27 822 views
2

根据这个网页:http://stanislavs.org/helppc/8042.html键盘控制器维护它自己的内部16字节的make/break代码缓冲区。是否可以访问键盘控制器的内部制作/中断代码缓冲区?

“键盘的内部控制器最多可缓冲16个字节的制造/中断代码信息,这在所有PC系统中都很常见,不应与BIOS维护的(32字节)键盘缓冲区混淆。

能够访问此缓冲区对我来说在我的8086汇编语言程序中非常有用(假设更新速度比BIOS维护的32字节缓冲区更快)。

除了轮询端口60h之外,还有办法从内部缓冲区中获取这些制造/中断代码吗?

+1

那么最简单的方法就是正常读取扫描码,不必轮询,可以使用中断处理程序将代码放入RAM中的缓冲区,就像BIOS一样。有文件记录的控制器命令可以让你读取8042的RAM,在真实的8042上,它可能会在某处包含缓冲的扫描码,但我不认为标准的确切位置。现代的键盘控制器可能无法模拟这一点。 –

+0

但在内存中的其他地方使用它有什么用处?你的意思是访问扫描代码会更快,而无需加载不同的段?我同意这一点。我只是真的希望将最后一个break/make代码作为输入到我的程序中,这就是为什么我使用端口60h,但访问缓冲区会很有用,因为人为错误通常会导致我的程序出现问题。通常,我会在让前一个键覆盖我的程序需要的代码之前一秒钟敲一个键,并用我希望忽略的中断代码。访问缓冲区将允许我确定丢失的代码。 –

+0

我已经忽略了与最后接受的make代码不一致的中断代码,但我仍经常遇到与先前遇到的代码相对应的乱序中断代码。例如,在我的游戏中导致不希望的停止移动精灵。我应该提到的是,BIOS中的32字节缓冲区有时会错过分割的第二个make代码。我想象一个非常高频率的中断可以解决这个问题,但我仍然不知道如何编程这两个PIC。我在业余时间一直在研究它的最近几天。 –

回答

3

没有任何记录的方式。我的意思并不是暗示有一种已知的但没有记录的方式来做到这一点;我根本不愿意说没有任何无证的方法。

使用port工具访问的设备通常会维护自己的离散存储器和逻辑,因此您不应该期望在系统的任何其他位置看到存储器空间。这有例外;内存区域的DMA传输,甚至是内存映射到物理地址空间。但对于键盘来说,不,你看不到那个记忆。

+1

是的,我知道它不会映射到系统内存或类似的东西,但我希望有一种方法可以通过与控制器通信来请求缓冲区中的字节。 –

+2

@Mylifeisabug .:是的,不要问,可能有某种远程调试接口,但在这种情况下看起来答案是否定的。 –

+1

如果您可以找到实际控制器的一些低级别文档,但请注意,与其中一个可能不起作用的另一个可能不适用于该级别。 –

相关问题