| 网站首页 | 范文中心 | 论文中心 | 党团资料 | · 用户注册 · 设为首页 · 加入收藏 · 联系站长 · ·
广告载入中...
您现在的位置: 126范文网 >> 论文中心 >> 工学论文 >> 网络微机 >> 正文 今天是:
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
一个亟待深入探讨的当代…
深入学习“三个代表”重…
围绕“四个如何认识”深…
核物理前沿发展的深入总…
OECD主要国家软件业发展…
加强党的制度建设深入推…
开展社会主义法治理念教…
icde主席詹姆斯·泰…
深入CD-ROM编程
作者:佚名 文章来源:网络收集 点击数: 更新时间:2006-6-22 0:45:32

  其中,MSCDEX起到了一个转换器的作用,将CD上的文件格式转化为标准的DOS文件格式,使CD-ROM象普通驱动器一样受DOS管理。
  但是,在一般应用中,CD-ROM还能用来播放音乐碟,许多应用软件(如Creative Labs的Quick CD)可以模拟一台CD音响,完成出盒、入盒、播放、快速进退和重复等一系列功能。实际上,MSCDEX并未提供这些功能,必须访问CD-ROM的驱动程序,才能达到上述目的,因为所有CD-ROM的驱动程序与MSCDEX之间的接口都是规范的,这给我们提供了极大的方便。下面将详细阐述如何实现上述功能。
  DOS的设备分为字符设备和块设备两种,CD-ROM的驱动程序属于前者,访问它必须遵循DOS的要求:填写设备驱动程序请求头、访问驱动程序的策略(Strategy)过程、访问驱动程序的中断(Interrupt)过程。
  设备驱动程序请求头的基本格式如下:
  偏移量 类型 含义
  00H 字节 请求头长度
  01H 字节 驱动程序内的子单元
  02H 字节 命令码
  03H 单字 返回码
  …
  以下内容根据命令码进行填写
  下面给出几种CD-ROM常用功能使用的命令码和格式:
  1.IOCTL INPUT:
  偏移量 类型 内容
  00H 字节 1AH
  01H 字节 00H
  02H 字节 03H
  03H 字节 11 DUP(?)
  0EH 双字 缓冲区地址
  12H 单字 缓冲区长度
  14H 字节 6 DUP (?)
  在缓冲区内按一定的格式填入参数,便可得到CD-ROM的各种状态。
  缓冲区的格式:
  作用 长度 格式
  取CD-ROM状态 5 输入:06 xx xx xx xx
  返回:06 SS SS 00 00
  说明:SS SS为状态字,关键的有两位
  位0:1、开门 0、关门
  位B:1、有盘 0、无盘
  取CD总扇区数 5 输入:08 xx xx xx xx
  返回:08 LL LL LL LL
  说明:LL LL LL LL为总扇区数
  取音乐CD信息 7 输入:0A xx xx xx xx xx xx
  返回:0A xx NN TT SS MM xx
  说明: NN为曲目数
  MM为分钟数
  SS为秒数(0~59)
  TT为扇区数(0~74)
  CD的一个扇区大小为2048B
  播放速度为每秒75扇区即150KB/s
  取指定歌曲 7 输入:0B NN xx xx xx xx xx
  的起始时间 返回:0B NN TT SS MM xx xx
  说明: NN为曲目序号
  MM为起始分钟数
  SS为起始秒数(0~59)
  TT为起始扇区数(0~74)
  取播放状态 11 输入:0C xx xx xx xx xx xx xx xx xx xx
  返回:0C xx NN xx MM SS TT xx ZM ZS ZT
  说明: NN为曲目序号(BCD码)
  MM为该曲目分钟数
  SS为该曲目秒数(0~59)
  TT为扇区数(0~74)
  ZM为总分钟数
  ZS为总秒数(0~59)
  ZT为扇区数(0~74)
  2.IOCTL OUTPUT
  偏移量 类型 内容
  00H 字节 1AH
  01H 字节 00H
  02H 字节 0CH
  03H 字节 11 DUP(?)
  0EH 双字 缓冲区地址
  12H 单字 缓冲区长度
  14H 字节 6 DUP(?)
  在缓冲区内按一定的格式填入参数,便可操纵CD-ROM的动作。
  缓冲区的格式:
  作用 长度 格式
  出盒 1 输入:00
  解锁出盒键 2 输入:01 00
  加锁出盒键 2 输入:01 01
  入盒 1 输入:05
  3.PLAY AUDIO
  偏移量 类型 内容
  00H 字节 16H
  01H 字节 00H
  02H 字节 84H
  03H 字节 10 DUP (?)
  0DH 字节 01H
  0EH 字节 起始扇区数(0~74)
  0FH 字节 起始秒数
  10H 字节 起始分钟数
  11H 字节 00H
  12H 双字 播放扇区数(75扇区/s)
  从指定的起始时间开始播放指定的扇区数然后自动停止
  4.STOP AUDIO
  偏移量 类型 内容
  00H 字节 ODH
  01H 字节 00H
  02H 字节 85H
  03H 字节 10 DUP (?)
  停止播放
  以上给出的是CD-ROM常用功能的设备驱动程序请求头格式,但是在应用中怎样实现上述功能呢?有两种方法。
  一是直接访问设备驱动程序,这种方法比较复杂,本文不作介绍。
  二是使用MSCDEX提供的接口。主要功能有以下几种。
  (1) 检测MSCDEX是否安装
  BX=0
  AX=1500H
  INT 2FH
  返回:
  BX=CD-ROM的个数
  CX=起始的CD-ROM盘号(0-A,1-B,等等)
  (2) 发送设备驱动程序请求
  ES:BX=设备驱动程序请求头地址
  CX=CD-ROM盘号(0-A,1-B,等等)
  AX=1510H
  INT 2FH
  用户填写请求头,通过INT 2FH完成所需要的功能。
  下面给出一段例程,播放CD中第二支曲目30秒钟。
  限于篇幅,本程序未作错误处理,假设执行正确。
  CODE SEGMENT
  ASSUME CS: CODE, DS:CODE
  BUF DB OBH, 2, 5 DUP(?)
  REQ DB 1AH,0,3,11 DUP(?)
  DD BUF
  DW 7
  DB 6 DUP (?)
  PLAY DB 16 H,0,84H,10 DUP (?),1
  DB 3 DUP(?),0
  DD 75*30
  START:
  MOV AX,CODE
  MOV DS,AX
  XOR BX,BX
  MOV AX,1500H
  INT 2FH
  OR BX,BX
  JZ NO-CD
  MOV AX,SEG REQ
  MOV ES,AX
  MOV BX,OFFSET REQ
  MOV AX,1510H
  INT 2FH
  MOV AX, [BUF+2]
  MOV [PLAY+0EH],AX
  MOV AL, [BUF+4]
  MOV [PLAY+10H],AL
  MOV AX, SEG
  PLAY
  MOV ES,AX
  MOV BX,OFFSET PLAY
  MOV AX,1510H
  INT 2FH
  NO-CD:
  MOV AH,4CH
  INT 21H
  CODE ENDS
  END START
  还有一些功能,因为不是应用必需的,这里就不再赘述。

  作者:余珏 陈志慧



加入网摘:365Key  | 新浪ViVi  | 和讯网摘  | 天极网摘  | POCO网摘 |百度网摘|      文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)