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