CD-ROM編程研究論文
時(shí)間:2022-03-17 05:26:00
導(dǎo)語(yǔ):CD-ROM編程研究論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
在多媒體系統(tǒng)中,cd-rom是必不可少的。以DOS為例,CD-ROM應(yīng)用環(huán)境的大致結(jié)構(gòu)是:
用戶
↓
MSCDEX
↓
廠家提供的驅(qū)動(dòng)程序
↓
CD-ROM
其中,MSCDEX起到了一個(gè)轉(zhuǎn)換器的作用,將CD上的文件格式轉(zhuǎn)化為標(biāo)準(zhǔn)的DOS文件格式,使CD-ROM象普通驅(qū)動(dòng)器一樣受DOS管理。
但是,在一般應(yīng)用中,CD-ROM還能用來(lái)播放音樂(lè)碟,許多應(yīng)用軟件(如CreativeLabs的QuickCD)可以模擬一臺(tái)CD音響,完成出盒、入盒、播放、快速進(jìn)退和重復(fù)等一系列功能。實(shí)際上,MSCDEX并未提供這些功能,必須訪問(wèn)CD-ROM的驅(qū)動(dòng)程序,才能達(dá)到上述目的,因?yàn)樗蠧D-ROM的驅(qū)動(dòng)程序與MSCDEX之間的接口都是規(guī)范的,這給我們提供了極大的方便。下面將詳細(xì)闡述如何實(shí)現(xiàn)上述功能。
DOS的設(shè)備分為字符設(shè)備和塊設(shè)備兩種,CD-ROM的驅(qū)動(dòng)程序?qū)儆谇罢?,訪問(wèn)它必須遵循DOS的要求:填寫(xiě)設(shè)備驅(qū)動(dòng)程序請(qǐng)求頭、訪問(wèn)驅(qū)動(dòng)程序的策略(Strategy)過(guò)程、訪問(wèn)驅(qū)動(dòng)程序的中斷(Interrupt)過(guò)程。
設(shè)備驅(qū)動(dòng)程序請(qǐng)求頭的基本格式如下:
偏移量類型含義
00H字節(jié)請(qǐng)求頭長(zhǎng)度
01H字節(jié)驅(qū)動(dòng)程序內(nèi)的子單元
02H字節(jié)命令碼
03H單字返回碼
…
以下內(nèi)容根據(jù)命令碼進(jìn)行填寫(xiě)
下面給出幾種CD-ROM常用功能使用的命令碼和格式:
1.IOCTLINPUT:
偏移量類型內(nèi)容
00H字節(jié)1AH
01H字節(jié)00H
02H字節(jié)03H
03H字節(jié)11DUP(?)
0EH雙字緩沖區(qū)地址
12H單字緩沖區(qū)長(zhǎng)度
14H字節(jié)6DUP(?)
在緩沖區(qū)內(nèi)按一定的格式填入?yún)?shù),便可得到CD-ROM的各種狀態(tài)。
緩沖區(qū)的格式:
作用長(zhǎng)度格式
取CD-ROM狀態(tài)5輸入:06xxxxxxxx
返回:06SSSS0000
說(shuō)明:SSSS為狀態(tài)字,關(guān)鍵的有兩位
位0:1、開(kāi)門0、關(guān)門
位B:1、有盤(pán)0、無(wú)盤(pán)
取CD總扇區(qū)數(shù)5輸入:08xxxxxxxx
返回:08LLLLLLLL
說(shuō)明:LLLLLLLL為總扇區(qū)數(shù)
取音樂(lè)CD信息7輸入:0Axxxxxxxxxxxx
返回:0AxxNNTTSSMMxx
說(shuō)明:NN為曲目數(shù)
MM為分鐘數(shù)
SS為秒數(shù)(0~59)
TT為扇區(qū)數(shù)(0~74)
CD的一個(gè)扇區(qū)大小為2048B
播放速度為每秒75扇區(qū)即150KB/s
取指定歌曲7輸入:0BNNxxxxxxxxxx
的起始時(shí)間返回:0BNNTTSSMMxxxx
說(shuō)明:NN為曲目序號(hào)
MM為起始分鐘數(shù)
SS為起始秒數(shù)(0~59)
TT為起始扇區(qū)數(shù)(0~74)
取播放狀態(tài)11輸入:0Cxxxxxxxxxxxxxxxxxxxx
返回:0CxxNNxxMMSSTTxxZMZSZT
說(shuō)明:NN為曲目序號(hào)(BCD碼)
MM為該曲目分鐘數(shù)
SS為該曲目秒數(shù)(0~59)
TT為扇區(qū)數(shù)(0~74)
ZM為總分鐘數(shù)
ZS為總秒數(shù)(0~59)
ZT為扇區(qū)數(shù)(0~74)
2.IOCTLOUTPUT
偏移量類型內(nèi)容
00H字節(jié)1AH
01H字節(jié)00H
02H字節(jié)0CH
03H字節(jié)11DUP(?)
0EH雙字緩沖區(qū)地址
12H單字緩沖區(qū)長(zhǎng)度
14H字節(jié)6DUP(?)
在緩沖區(qū)內(nèi)按一定的格式填入?yún)?shù),便可操縱CD-ROM的動(dòng)作。
緩沖區(qū)的格式:
作用長(zhǎng)度格式
出盒1輸入:00
解鎖出盒鍵2輸入:0100
加鎖出盒鍵2輸入:0101
入盒1輸入:05
3.PLAYAUDIO
偏移量類型內(nèi)容
00H字節(jié)16H
01H字節(jié)00H
02H字節(jié)84H
03H字節(jié)10DUP(?)
0DH字節(jié)01H
0EH字節(jié)起始扇區(qū)數(shù)(0~74)
0FH字節(jié)起始秒數(shù)
10H字節(jié)起始分鐘數(shù)
11H字節(jié)00H
12H雙字播放扇區(qū)數(shù)(75扇區(qū)/s)
從指定的起始時(shí)間開(kāi)始播放指定的扇區(qū)數(shù)然后自動(dòng)停止
4.STOPAUDIO
偏移量類型內(nèi)容
00H字節(jié)ODH
01H字節(jié)00H
02H字節(jié)85H
03H字節(jié)10DUP(?)
停止播放
以上給出的是CD-ROM常用功能的設(shè)備驅(qū)動(dòng)程序請(qǐng)求頭格式,但是在應(yīng)用中怎樣實(shí)現(xiàn)上述功能呢?有兩種方法。
一是直接訪問(wèn)設(shè)備驅(qū)動(dòng)程序,這種方法比較復(fù)雜,本文不作介紹。
二是使用MSCDEX提供的接口。主要功能有以下幾種。
(1)檢測(cè)MSCDEX是否安裝
BX=0
AX=1500H
INT2FH
返回:
BX=CD-ROM的個(gè)數(shù)
CX=起始的CD-ROM盤(pán)號(hào)(0-A,1-B,等等)
(2)發(fā)送設(shè)備驅(qū)動(dòng)程序請(qǐng)求
ES:BX=設(shè)備驅(qū)動(dòng)程序請(qǐng)求頭地址
CX=CD-ROM盤(pán)號(hào)(0-A,1-B,等等)
AX=1510H
INT2FH
用戶填寫(xiě)請(qǐng)求頭,通過(guò)INT2FH完成所需要的功能。
下面給出一段例程,播放CD中第二支曲目30秒鐘。
限于篇幅,本程序未作錯(cuò)誤處理,假設(shè)執(zhí)行正確。
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圖像處理研究論文
- 下一篇:封裝與部署研究論文