CD-ROM编程研究论文
时间:2022-03-17 05:26:00
导语:CD-ROM编程研究论文一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。
在多媒体系统中,cd-rom是必不可少的。以DOS为例,CD-ROM应用环境的大致结构是:
用户
↓
MSCDEX
↓
厂家提供的驱动程序
↓
CD-ROM
其中,MSCDEX起到了一个转换器的作用,将CD上的文件格式转化为标准的DOS文件格式,使CD-ROM象普通驱动器一样受DOS管理。
但是,在一般应用中,CD-ROM还能用来播放音乐碟,许多应用软件(如CreativeLabs的QuickCD)可以模拟一台CD音响,完成出盒、入盒、播放、快速进退和重复等一系列功能。实际上,MSCDEX并未提供这些功能,必须访问CD-ROM的驱动程序,才能达到上述目的,因为所有CD-ROM的驱动程序与MSCDEX之间的接口都是规范的,这给我们提供了极大的方便。下面将详细阐述如何实现上述功能。
DOS的设备分为字符设备和块设备两种,CD-ROM的驱动程序属于前者,访问它必须遵循DOS的要求:填写设备驱动程序请求头、访问驱动程序的策略(Strategy)过程、访问驱动程序的中断(Interrupt)过程。
设备驱动程序请求头的基本格式如下:
偏移量类型含义
00H字节请求头长度
01H字节驱动程序内的子单元
02H字节命令码
03H单字返回码
…
以下内容根据命令码进行填写
下面给出几种CD-ROM常用功能使用的命令码和格式:
1.IOCTLINPUT:
偏移量类型内容
00H字节1AH
01H字节00H
02H字节03H
03H字节11DUP(?)
0EH双字缓冲区地址
12H单字缓冲区长度
14H字节6DUP(?)
在缓冲区内按一定的格式填入参数,便可得到CD-ROM的各种状态。
缓冲区的格式:
作用长度格式
取CD-ROM状态5输入:06xxxxxxxx
返回:06SSSS0000
说明:SSSS为状态字,关键的有两位
位0:1、开门0、关门
位B:1、有盘0、无盘
取CD总扇区数5输入:08xxxxxxxx
返回:08LLLLLLLL
说明:LLLLLLLL为总扇区数
取音乐CD信息7输入:0Axxxxxxxxxxxx
返回:0AxxNNTTSSMMxx
说明:NN为曲目数
MM为分钟数
SS为秒数(0~59)
TT为扇区数(0~74)
CD的一个扇区大小为2048B
播放速度为每秒75扇区即150KB/s
取指定歌曲7输入:0BNNxxxxxxxxxx
的起始时间返回:0BNNTTSSMMxxxx
说明:NN为曲目序号
MM为起始分钟数
SS为起始秒数(0~59)
TT为起始扇区数(0~74)
取播放状态11输入:0Cxxxxxxxxxxxxxxxxxxxx
返回:0CxxNNxxMMSSTTxxZMZSZT
说明:NN为曲目序号(BCD码)
MM为该曲目分钟数
SS为该曲目秒数(0~59)
TT为扇区数(0~74)
ZM为总分钟数
ZS为总秒数(0~59)
ZT为扇区数(0~74)
2.IOCTLOUTPUT
偏移量类型内容
00H字节1AH
01H字节00H
02H字节0CH
03H字节11DUP(?)
0EH双字缓冲区地址
12H单字缓冲区长度
14H字节6DUP(?)
在缓冲区内按一定的格式填入参数,便可操纵CD-ROM的动作。
缓冲区的格式:
作用长度格式
出盒1输入:00
解锁出盒键2输入:0100
加锁出盒键2输入:0101
入盒1输入:05
3.PLAYAUDIO
偏移量类型内容
00H字节16H
01H字节00H
02H字节84H
03H字节10DUP(?)
0DH字节01H
0EH字节起始扇区数(0~74)
0FH字节起始秒数
10H字节起始分钟数
11H字节00H
12H双字播放扇区数(75扇区/s)
从指定的起始时间开始播放指定的扇区数然后自动停止
4.STOPAUDIO
偏移量类型内容
00H字节ODH
01H字节00H
02H字节85H
03H字节10DUP(?)
停止播放
以上给出的是CD-ROM常用功能的设备驱动程序请求头格式,但是在应用中怎样实现上述功能呢?有两种方法。
一是直接访问设备驱动程序,这种方法比较复杂,本文不作介绍。
二是使用MSCDEX提供的接口。主要功能有以下几种。
(1)检测MSCDEX是否安装
BX=0
AX=1500H
INT2FH
返回:
BX=CD-ROM的个数
CX=起始的CD-ROM盘号(0-A,1-B,等等)
(2)发送设备驱动程序请求
ES:BX=设备驱动程序请求头地址
CX=CD-ROM盘号(0-A,1-B,等等)
AX=1510H
INT2FH
用户填写请求头,通过INT2FH完成所需要的功能。
下面给出一段例程,播放CD中第二支曲目30秒钟。
限于篇幅,本程序未作错误处理,假设执行正确。
CODESEGMENT
ASSUMECS:CODE,DS:CODE
BUFDBOBH,2,5DUP(?)
REQDB1AH,0,3,11DUP(?)
DDBUF
DW7
DB6DUP(?)
PLAYDB16H,0,84H,10DUP(?),1
DB3DUP(?),0
DD75*30
START:
MOVAX,CODE
MOVDS,AX
XORBX,BX
MOVAX,1500H
INT2FH
ORBX,BX
JZNO-CD
MOVAX,SEGREQ
MOVES,AX
MOVBX,OFFSETREQ
MOVAX,1510H
INT2FH
MOVAX,[BUF2]
MOV[PLAY0EH],AX
MOVAL,[BUF4]
MOV[PLAY10H],AL
MOVAX,SEG
PLAY
MOVES,AX
MOVBX,OFFSETPLAY
MOVAX,1510H
INT2FH
NO-CD:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
- 上一篇:SVGA图像处理研究论文
- 下一篇:封装与部署研究论文