中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [原创]我写的键盘程序,呵呵,还很幼稚哦!
作者:
标题: [原创]我写的键盘程序,呵呵,还很幼稚哦! 上一主题 | 下一主题
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『楼 主』:  [原创]我写的键盘程序,呵呵,还很幼稚哦!

/************************************************/
/* 通过8042芯片与键盘通信示例程序 */
/* 作者:xy_god */
/************************************************/
#include "dos.h"
#include "stdio.h"
#include "conio.h"

int iCode=0;
int blKey=0;
void interrupt ( *oldhandler)(void);/*中断处理函数指针*/

void interrupt handler(void);
int getbit(char c,int i);
void getkeystate();

int main(void)/***********************主函数***********************/
{
int a;
oldhandler = getvect(0X09);/*取得原先键盘中断地址*/
setvect(0X09, handler);/*安装新的键盘中断*/
getkeystate();
printf("*********************************************\n";
while (1)
{
if(blKey==1)
{
blKey=0;
printf("%X",iCode);
printf("****";
getkeystate();
}
}
setvect(0X09, oldhandler);/*恢复键盘中断*/
return 0;
}/*****************************************************************/

void interrupt handler(void)/*键盘中断处理程序*/
{
blKey=1;
iCode=inport(0x60);
oldhandler();
}
int getbit(char c,int i)/*获取字节的第i位的值*/
{
int mi;
mi=c<127)
return 1;
else
return 0;
}

void getkeystate()/*获取键盘状态*/
{
int i,ic=0,bitvalue;
for(ic=0;ic<8;ic++)
{
i=inport(0x64);
bitvalue=getbit(i,ic);
switch(ic)
{
case 0:
if(bitvalue) printf("OBF=TRUE\n"; else printf("OBF=FALSE\n";
break;
case 1:
if(bitvalue) printf("IBF=TRUE\n"; else printf("IBF=FALSE\n";
break;
case 2:
if(bitvalue) printf("SYS=TRUE\n"; else printf("SYS=FALSE\n";
break;
case 3:
if(bitvalue) printf("A2=TRUE\n"; else printf("A2=FALSE\n";
break;
case 4:
if(bitvalue) printf("INTH=TRUE\n"; else printf("INH=FALSE\n";
break;
case 5:
if(bitvalue) printf("TxTO=TRUE\n"; else printf("TxTO=FALSE\n";
break;
case 6:
if(bitvalue) printf("RxTO=TRUE\n"; else printf("RxTO=FALSE\n";
break;
case 7:
if(bitvalue) printf("PERR=TRUE\n"; else printf("PERR=FALSE\n";
break;
}
}
}




临河居士
http://www.xygod.pc5.org
2003-10-26 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『第 2 楼』:  

这个程序是用TC2。0写的,开发环境是吴进的WIN-TC172,呵呵!
本来可读性是很好的,可是不知道怎么回事情发到论坛上就变了样,凑合看吧!
其实大家仔细看一看,这个程序和用SDK 开发WINDOWS程序是的结构很相似的,用他就可以实现DOS程序的多线程,注意,我说的是多线程,不是多任务哦,呵呵!
这是一个8042的PS2键盘的程序,等我看完关于鼠标的内容,我会写个鼠标的驱动给大家,
不过,现在真的很忙,没空写,所以要等一段时间了,真的很无奈!TMD!



临河居士
http://www.xygod.pc5.org
2003-10-26 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lemonhall
高级用户

OS/2女孩


积分 639
发帖 183
注册 2003-6-14
状态 离线
『第 3 楼』:  

it's only a console program, but not a dos program.



REM              喜欢DOS,因为它的简单
REM            喜欢OS/2,因为它不再矫饰
REM            喜欢BASIC,因为它并不幼稚
REM             喜欢GNU,因为它杂乱无章
2003-10-27 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (313813)  编辑帖子  回复  引用回复
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『第 4 楼』:  

拜托啦,楼上的,我是用TC20写的,什么CONSOLE程序啊,纯粹的DOS程序好不啦!
你仔细看了没有啊,老天爷!
我是在模仿WIN32 SDK的程序结构啦!



临河居士
http://www.xygod.pc5.org
2003-10-27 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lemonhall
高级用户

OS/2女孩


积分 639
发帖 183
注册 2003-6-14
状态 离线
『第 5 楼』:  

it's my fault, sorry.it's really a hardware programm



REM              喜欢DOS,因为它的简单
REM            喜欢OS/2,因为它不再矫饰
REM            喜欢BASIC,因为它并不幼稚
REM             喜欢GNU,因为它杂乱无章
2003-10-27 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (313813)  编辑帖子  回复  引用回复
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『第 6 楼』:  

我曾经用这个结构写过一个DOS图形系统,
定义了好多消息结构,也挺好玩的,
实现了多线程,不过要处理和初始化好多中断!
完全是以消息为基础的,我希望有人受到这个启发,开发一个函数库,以后开发DOS
程序的时候就有一个图形化标准了,而且程序的框架都是统一的!





临河居士
http://www.xygod.pc5.org
2003-10-27 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
alhan
初级用户




积分 125
发帖 11
注册 2004-5-9
状态 离线
『第 7 楼』:  

>我曾经用这个结构写过一个DOS图形系统
放上来,让我们看看.

2004-5-12 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: