Board logo

标题: 32位dos下怎样播放cd?用mscdex 2fh中断吗? [打印本页]

作者: jk20012001     时间: 2004-4-24 00:00    标题: 32位dos下怎样播放cd?用mscdex 2fh中断吗?

我原来在DOS的Turbo C下有一个16位的CDROM函数库,能播放CD和检测光驱状况等,前不久转到watcom c的32位环境下后我又重新写了一个,可运行时什么也不出来,
它的核心是调用0X2F的MSCDEX中断,播放CD的原理是这样的:有一个22字节的存储区存放控制码(如播放CD的开始和长度等),然后要在DX中指定此存储区的偏移量,ES中存放它的段地址,(16位下是这样的,而且运行正常),可现在我不知道32位模式下对于这种16bit-legacy中断的调用具体应该怎样做,因为当时内存模式是flat,ES=DS=CS=SS,我就没有置ES的值,直接将此缓冲区的32位地址存入EDX,可是运行时光驱一点反应也没有,
还有一种就是查询光驱的状况,它和上面又有不同:一个26字节的缓冲区(比如为A),还有一个5-8字节的控制区(为B),A中有两字节存放B的偏移量,再后面两字节存放B的段地址,然后ESX中存放B的偏移量和段地址,这就更复杂了,我应该怎么办?那32位模式下能不能使用这种类型的中断?

另外,我用watcom c的16位模式编译运行成功了,一到32位下就不行,这究竟有什么解决办法吗?(我暂时还不想转到WIN下)还请个位高手指教一下小弟,非常非常感谢!