一段时间以来,我一直在试图弄清楚我在键盘上打字时的操作系统,以便可以看到正在显示的字符。
现在,我将总结一下过程,并消除与我一样的孩子。
1)首先知道键盘的组成; 6位计数器通过两个八对一扫描键盘。当键盘上没有任何键时,扫描将随着计数器循环而重复。
这样想。扫描是一束光。当没有按键时,灯光可以在键盘上的任何地方移动。

2)如果按下一个键,扫描将找到信号(按下该键后,光线将无法穿过),该信号将停止计数器并将扫描代码发送到8042。
每个键的位置由一组数字表示,这就是所谓的扫描代码。
您可能很好奇,为什么将扫描代码传递给8042?其实很简单,它直接与电路相连。
3)8042将扫描代码放入缓冲区,并告诉8259A产生了中断。

缓冲区大小为1个字节。如果此时在键盘上按了新键,则8042将不再接收它,并等待缓冲区被清除。
4)8259A识别键盘中断,并将CPU的中断寄存器的特定位置设置为1。
请注意,到目前为止,cpu正在执行其他程序或处于空闲状态,并且根本没有响应键盘按下事件。尽管描述更加复杂,但过程实际上非常快。
5)接下来是典型的中断处理过程。 cpu执行一条指令后,它会发现有一个中断,进入中断周期,并通过IDT映射将其处理转移到键盘处理程序。
6)键盘处理程序的第一步是将扫描代码从8042缓冲区(仅一个字节)移至键盘缓冲区(可调整链接列表的大小,如果没有用,则无用)太大),这时可以接受下一个字符键。
7)如果键盘缓冲区不为空,则开始处理这些键码,首先将扫描码转换为ASCII码
如果它是可打印字符(例如a),则显示它
其他功能键将得到相应处理。

最后是显示过程:
可以通过调用BIOS或写视频存储器来实现。
1向字符的ASCII码添加一些属性(例如颜色控制,最简单的rgb,此时仅最纯的rgb三种颜色及其叠加组合总共为8),这些属性也用01表示, 0表示什么都不表示,1表示将其放在视频内存中(集成显示屏是内存中的特定位置)。
2字符通过读取此特定位置的数据,将ASCII代码及其属性信息转换为一个光点矩阵,1表示有光。

字符实际上是一个rom,并且使用映射函数来实现这种转换。
如果ASCII = 65,则字符会将其转换为一个光点矩阵,并且颜色将由后面的3支控制。
3可以将点矩阵用作显示器的输入信号。每个点由3支电子(分别为rgb)组成。
复制到:从键盘输入到显示器上显示字符的详细过程
参考:编写支持键盘输入和屏幕输出的内核
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-348286-1.html
恶意攻击诋毁用的吧
眼神很棒
他的观点地球人都知道