CD-ROM编程研究论文

时间:2022-03-17 05:26:00

导语:CD-ROM编程研究论文一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。

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