中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-31 19:17
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行
DOS开发编程 & 发展交流 (开发室) » 在DOS下如何用C实现键盘某键的按下
可打印版本  3,844 / 22
第16楼 hebecoco 发表于 2006-12-27 03:00
初级用户 发帖 25 积分 63
dear zly910:
你好!
感谢你提供的宝贵资料!
我有将你这段代码进行编译和运行,可以抓到那几个键而且有相应的响应,因本人知识的贫乏对中断还不是很懂,所以有几个问题还要请教下
http://www.computer-engineering.org/ps2keyboard/scancodes1.html
你应该有看过,对于一般的按键makecode和breakcode都只有1个字节,读出来的值是正常的,但是有很多有2个字节的,比如说播放键是EO,22和E0,2A,但是这里只能抓出2个E0来,也就是说只能取出他们的前面一个字节,是否可以改成抓出2个字节的,因为我不知道你用中断是如何实现的,还请你指点一下.
第17楼 hebecoco 发表于 2006-12-27 03:49
初级用户 发帖 25 积分 63
我有试过将char换成int,将inportb(0x60)换成inport(0x60),效果还是一样
第18楼 hebecoco 发表于 2006-12-27 05:20
初级用户 发帖 25 积分 63
还是要修改中断?该如何改?
第19楼 AlwaysInherit 发表于 2006-12-27 06:13
初级用户 发帖 46 积分 112
偷偷google再来顶帖!

http://www.osdev.org/osfaq2/index.php/Getting%20Keyboard%20Input


What's that E0 scancode i get all the time ? ...you should just store the info and wait for the next scancode to know what key even actually occured...
第20楼 hebecoco 发表于 2006-12-27 06:27
初级用户 发帖 25 积分 63
谢谢,在study中.
还想问下zly910,你那段代码中加入的那2行汇编是起什么作用?

如果有看到,麻烦解答下,谢谢
有知道的大虾也帮看下
第21楼 AlwaysInherit 发表于 2006-12-27 06:44
初级用户 发帖 46 积分 112
disable interrupt -> 避免被其他发生的interrupt切换走 , 应该是避免跟ISRs race
第22楼 hebecoco 发表于 2006-12-27 08:44
初级用户 发帖 25 积分 63
问题解决了,读2次0X60,因为中断程序没次只能是读1个字节,就算是换成inport()也是没用的,象那些有2个字节的键,会先进去高位,一般高位都是E0,然后再进去低,如果没有新的中断近来,低位会一直驻留在0X60的PORT中!!

很高兴问题解决,感谢AlwaysInherit和zly910的顶立支持,感谢CCTV,感谢ChinaV!!
第23楼 hebecoco 发表于 2007-03-23 04:57
初级用户 发帖 25 积分 63
提上来看下
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023