c语言中bios函数,c语言中dos.h和bios.h中有哪些库函数?具体的

函数名: biosdisk

功 能: 软硬盘I/O

用 法: int biosdisk(int cmd, int drive, int head, int track, int sector

int nsects, void *buffer); 本函数用来对驱动器作一定的操作,cmd为功能号,

drive为驱动器号(0=A,1=B,0x80=C,0x81=D,0x82=E等)。

cmd可为以下值:

0 重置软磁盘系统.这强迫驱动器控制器来执行硬复位.忽略所有其它参数.

1 返回最后的硬盘操作状态.忽略所有其它参数

2 读一个或多个磁盘扇区到内存.读开始的扇区由head、track、sector给出。

扇区号由nsects给出。把每个扇区512个字节的数据读入buffer

3 从内存读数据写到一个或多个扇区。写开始的扇区由head、track、sector

给出。扇区号由nsects给出。所写数据在buffer中,每扇区512个字节。

4 检验一个或多个扇区。开始扇区由head、track、sector给出。扇区号由

nsects给出。

5 格式化一个磁道,该磁道由head和track给出。buffer指向写在指定track上

的扇区磁头器的一个表。

以下cmd值只允许用于XT或AT微机:

6 格式化一个磁道,并置坏扇区标志。

7 格式化指定磁道上的驱动器开头。

8 返回当前驱动器参数,驱动器信息返回写在buffer中(以四个字节表示)。

9 初始化一对驱动器特性。

10 执行一个长的读,每个扇区读512加4个额外字节

11 执行一个长的写,每个扇区写512加4个额外字节

12 执行一个磁盘查找

13 交替磁盘复位

14 读扇区缓冲区

15 写扇区缓冲区

16 检查指定的驱动器是否就绪

17 复核驱动器

18 控制器RAM诊断

19 驱动器诊断

20 控制器内部诊 函数返回由下列位组合成的状态字节:

0x00 操作成功

0x01 坏的命令

0x02 地址标记找不到

0x04 记录找不到

0x05 重置失败

0x07 驱动参数活动失败

0x09 企图DMA经过64K界限

0x0B 检查坏的磁盘标记

0x10 坏的ECC在磁盘上读

0x11 ECC校正的数据错误(注意它不是错误)

0x20 控制器失效

0x40 查找失败

0x80 响应的连接失败

0xBB 出现无定义错误

0xFF 读出操作失败程序例:

// main.c

#include

#include

#include "floppyio.h"

int main(void)

{

char buf[512] = "Hello, world!"; int r; FILE *fp = fopen("booter.exe", "rb");

fread(buf, 1, 512, fp);

fclose(fp); printf("floppy ready : %d\n", IsFloppyReady());

buf[510] = 0x55;

buf[511] = 0xaa; printf("write: %d,%d\n", buf[510], buf[511]);

r = WriteFloppyBootSection(buf);

printf("r=%d\n", r);

return 0;

}

// FloppyIO.h

/* defines */

#define FLOPPY_READ 2

#define FLOPPY_WRITE 3

#define FLOPPY_READY 4/* test if floppy is ready now, if so return 1, else 0 */

int IsFloppyReady(void); /* write first head 0 /track 0 /sector 1 of floppy disk (boot section, 512 bytes) */

int WriteFloppyBootSection(char* buffer);/* read first head 0 /track 0 /sector 1 of floppy disk (boot section, 512 bytes) */

int ReadFloppyBootSection(char* buffer);

// FloppyIO.c

#include "FloppyIO.h"

int IsFloppyReady(void)

{

int result;

char buffer[512]; result = biosdisk(FLOPPY_READY, 0, 0, 0, 1, 1, buffer);

return ( result == 0 ? 1 : 0 );

}int WriteFloppyBootSection(char* buffer)

{

int result; result = biosdisk(FLOPPY_WRITE, 0, 0, 0, 1, 1, buffer);

return ( result == 0 ? 1 : 0 );

}int ReadFloppyBootSection(char* buffer)

{

int result;

result = biosdisk(FLOPPY_READ, 0, 0, 0, 1, 1, buffer);

return ( result == 0 ? 1 : 0 );

}

取消

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值