中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 怎么用C语言编写控制光驱的程序?
作者:
标题: 怎么用C语言编写控制光驱的程序? 上一主题 | 下一主题
profree
中级用户




积分 478
发帖 132
注册 2003-7-2
状态 离线
『楼 主』:  怎么用C语言编写控制光驱的程序?

找到了一些资料都是汇编的,汇编又不懂,怎么用C语言写?谢谢

2004-8-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhaojinpo
初级用户




积分 183
发帖 31
注册 2002-11-30
状态 离线
『第 2 楼』:  

人贵自知,末要得寸进尺!

[此贴子已经被作者于2004-8-22 1:48:25编辑过]






我的论坛  http://zjp-vlk.vicp.net/bbs 我在它就在!
2004-8-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wchong
银牌会员




积分 1186
发帖 510
注册 2004-7-30
状态 离线
『第 3 楼』:  

2楼的英文很好吗?翻译点儿共享啊!

2004-8-20 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 4 楼』:  

下面的程序是我几年前把一个CD播放器程序缩改成打开、关闭光驱的小程序,送给你玩玩吧。不过有个缺点,只能在纯DOS下运行,在Win9x的DOS窗口下运行时,如果光驱没有光盘是打不开的,但可以关闭。
#include<dos.h>
int ppp=0;
unsigned int cdnum;
char getbuff[11],setbuff[11];
char  stop[]={0x0d,0,0x85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
char setcd[]={0x1a,0,0x0c,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
char getcd[]={0x1a,0,0x03,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

main()
{int i; char ch;
_BX=0;
_AX=0x1500;
geninterrupt(0x2f);
if(ppp==0){cdnum=_CX;ppp=1;}
_AX=FP_OFF(getbuff);
_BX=FP_SEG(getbuff);
getcd[0x0e]=_AL;
getcd[0x0f]=_AH;
getcd[0x10]=_BL;
getcd[0x11]=_BH;
_AX=FP_OFF(setbuff);
_BX=FP_SEG(setbuff);
setcd[0x0e]=_AL;
setcd[0x0f]=_AH;
setcd[0x10]=_BL;
setcd[0x11]=_BH;
for(i=0;i<2;i++)
{
  getcd[0x12]=5;
  getbuff[0]=0x06;
  _ES=FP_SEG(getcd);
  _BX=FP_OFF(getcd);
  _CX=cdnum;
  _AX=0x1510;
  geninterrupt(0x2f);
}
ch=getbuff[1]&0x01;
if(ch==0)i=0;
else i=1;
if(i==0)
{_ES=FP_SEG(stop);  /*Stop CD*/
  _BX=FP_OFF(stop);
  _CX=cdnum;
  _AX=0x1510;
  geninterrupt(0x2f);
  setcd[0x12]=1;     /*Open CD*/
  setbuff[0]=0;
  _ES=FP_SEG(setcd);
  _BX=FP_OFF(setcd);
  _CX=cdnum;
  _AX=0x1510;
  geninterrupt(0x2f);
}
else
{             /*Close CD*/
  setcd[0x12]=1;
  setbuff[0]=5;
  _ES=FP_SEG(setcd);
  _BX=FP_OFF(setcd);
  _CX=cdnum;
  _AX=0x1510;
  geninterrupt(0x2f);
}
}
[ Last edited by JonePeng on 2006-5-1 at 00:48 ]

   此帖被 +8 点积分        点击查看详情   




----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2004-8-20 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
profree
中级用户




积分 478
发帖 132
注册 2003-7-2
状态 离线
『第 5 楼』:  



  Quote:
以下是引用zhaojinpo在2004-8-19 22:22:40的发言:从 http://www.he.net/~marcj/cdrom.html 你可以看到介绍! ftp://ftp.he.net/pub/marcj/cdrom.c 有源代码!

[此贴子已经被作者于2004-8-21 22:10:47编辑过]




2004-8-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 6 楼』:  

ftp://ftp.he.net/pub/marcj/cdrom.c 我试过了,可是好像有些问题,怎么光驱没有任何反应啊?既不打开也不关闭,更不会读盘!楼主的意思是要编个程序来打开和关闭光驱,而上面的经我改编的C程序很好用,把编译成的EXE改名为EJ.EXE,只要在DOS下按EJ回车,就可以打开光驱,在输入就关闭,我总喜欢用它。^_^



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2004-8-23 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
profree
中级用户




积分 478
发帖 132
注册 2003-7-2
状态 离线
『第 7 楼』:  

对,我用过ftp://ftp.he.net/pub/marcj/cdrom.c这个文件,好像没有什么用处,什么反应都没有,4楼的那个程序不错,谢谢

2004-8-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qingfen
初级用户





积分 70
发帖 22
注册 2006-4-22
状态 离线
『第 8 楼』:  

我希望能用端口编程而不是用中断来编写??

2006-4-22 21:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
johnsonlam
银牌会员

阿林


积分 1410
发帖 497
注册 2004-6-28
来自 九龍,香港
状态 离线
『第 9 楼』:  有 现 成 的 啊 (QCDROM) , 自 己 编 程 不 容 易 !

QCDROM 『 汇 编 语 言 大 师 』( 我 说 的 ) 出 品 , 支 援 UltraDMA , 相 当 稳 定 , 配 合 SHSUCDX V3.03A (Jack R. Ellis 修 正 版 ) 就 更 "快" 了 !

http://johnson.tmfc.net/freedos

内 有 QCDROM 及  SHCDX33A 下 载 !

[ Last edited by johnsonlam on 2006-4-24 at 11:40 ]



我 的 網 站 - http://optimizr.dyndns.org
2006-4-24 11:39
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
qingfen
初级用户





积分 70
发帖 22
注册 2006-4-22
状态 离线
『第 10 楼』:  

我想问一下4楼版主这句语句:
for(i=0;i&lt;2;i++) 和 ch=getbuff[1]&amp;0x01;
的 i&lt 有什么作用,还有好像 lt,amp 都没有定义吧?

[ Last edited by qingfen on 2006-4-26 at 01:10 ]

2006-4-25 03:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by qingfen at 2006-4-25 03:07:
for(i=0;i&lt;2;i++) 和 ch=getbuff[1]&amp;0x01;
的 i&lt 有什么作用,还有好像 lt,amp 都没有定义吧?

以前该论坛是DVBBS的论坛,对源程序的“&”和大小于符号特别敏感,会将“&”变成“&amp”,小于号变成“%lt”等。现在4楼的源程序已更新了。



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2006-5-1 00:51
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
CrazyWind
初级用户




积分 131
发帖 12
注册 2004-3-2
状态 离线
『第 12 楼』:  

控制光驱开关的原理是什么?每个光驱都一样的吗?
某“XXX中断大全”里有介绍吗?

2006-5-3 10:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qingfen
初级用户





积分 70
发帖 22
注册 2006-4-22
状态 离线
『第 13 楼』:  

哦,是这样呀,但是在在windows系统里怎么能兼容那么多光驱呢?
还有内核驱动和设备驱动有什么区别呢?

2006-5-5 13:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
darkradx
高级用户





积分 972
发帖 420
注册 2004-5-16
状态 离线
『第 14 楼』:  

ATAPI Spec自己掰啊



平生进退如飙风
2006-5-5 20:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: