📄 key.txt
字号:
首先感谢JASON WONG 兄在百忙中翻译W83977技术资料并找出其编程控制的办法,否则没有他开的这个头,后面的我根本无法进行
---------------------------------------------------------------------------
1.进入到扩展功能模式
MOV DX,3F0H
MOV AL,87H
OUT DX,AL
OUT DX,AL
2.配置逻辑设备5(KBC)
;读数据寄存器(0x60):CR60,CR61, CR60:CR61组合起来是一个16bit寄存器,下同
;读状态寄存器(0x64):CR62,CR63
;写数据寄存器(0x60):CR60,CR61
;写命令寄存器(0x64):CR62,CR63
;因为我们的数据是8bit的,所以对CR60,CR62不关心
; ---选择逻辑设备5(键盘控制器) ---
MOV DX, 370H
MOV AL,07H
OUT DX,AL ; point to Logical Device Number Reg.
MOV DX,3F1H
MOV AL,05H
OUT DX,AL ;select logical device 1
; --- 自测试 ---
;写入0XAA命令,然后等待回应0x55,如果等到,测试通过
-----------------------------------------------------------------------------
以上是本群组成员 Jason wong 兄写的关键部分,下面我对其余的部分做了补充和修改,并完成了芯片的烧写和上机测试
-----------------------------------------------------------------------------
OPENKEY: ;控制8042打开键盘程序段
IN AL,60H
MOV AL,0AAH ;8042控制器复位命令0AAH
OUT 64H,AL ;写到8042命令端口
IN AL,60H ;读出并丢弃返回码,正规的BIOS是需要处理它的,这里略过
MOV AL,60H ;准备写入8042的控制工作方式
OUT 64H,AL ;写到8042命令端口
IN AL,60H ;同上
MOV AL,47H ;打开键盘鼠标的命令47H
OUT 60H,AL ;这次要把命令写到60H端口
IN AL,60H ;同上
RESETKEY: ;复位键盘程序段
MOV AL,0FFH ;键盘复位命令0FFH
OUT 60H,AL ;直接写到60H端口
OPENKEYLED: ;打开键盘灯程序段
IN AL,60H ;同上
MOV AL,0EDH ;开灯命令0EDH
OUT 60H,AL ;写到60H端口
IN AL,60H ;同上
MOV AL,3 ;实验看能否点亮第1和第3个键盘灯
OUT 60H,AL ;再次写到60H端口
IN AL,60 ;同上
JMP OPENKEYLED ;重复执行打开键盘灯程序段的代码
--------------------------------------------------------------
以下是用DEBUG反汇编上面代码看到的情形
--------------------------------------------------------------
-u
137C:0100 BAF003 MOV DX,03F0
137C:0103 B087 MOV AL,87
137C:0105 EE OUT DX,AL
137C:0106 EE OUT DX,AL
137C:0107 BA7003 MOV DX,0370
137C:010A B007 MOV AL,07
137C:010C EE OUT DX,AL
137C:010D BAF103 MOV DX,03F1
137C:0110 B005 MOV AL,05
137C:0112 EE OUT DX,AL
137C:0113 E460 IN AL,60
137C:0115 B0AA MOV AL,AA
137C:0117 E664 OUT 64,AL
137C:0119 E460 IN AL,60
137C:011B B060 MOV AL,60
137C:011D E664 OUT 64,AL
137C:011F E460 IN AL,60
-u
137C:0121 B047 MOV AL,47
137C:0123 E660 OUT 60,AL
137C:0125 E460 IN AL,60
137C:0127 B0FF MOV AL,FF
137C:0129 E660 OUT 60,AL
137C:012B E460 IN AL,60
137C:012D B0ED MOV AL,ED
137C:012F E660 OUT 60,AL
137C:0131 E460 IN AL,60
137C:0133 B003 MOV AL,03
137C:0135 E660 OUT 60,AL
137C:0137 E460 IN AL,60
137C:0139 EBF0 JMP 012B
---------------------------------------------------------------------------------
对芯片的写入操作可以参照我写的BIOS并口实验的相关部分的要求去做!
将以上代码按要求写入芯片中,开机通电,我看到键盘的第1和第3个指示灯被成功点亮,这个实验终于可以告一段落了,而更艰巨的任务(内存初始化)还在后面呢!
本报告目前只对群内公开,是否对外公开需讨论后决定!
cxdzxc------2008-8-7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -