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圖像處理研究論文
- 下一篇:封裝與部署研究論文