extint13.c

来自「13中断」· C语言 代码 · 共 40 行

C
40
字号

/* 扩展13中断,可读写大硬盘 */
#include <dos.h>
int extInt13(unsigned int cmd,
			 unsigned int driveNum,
			 unsigned long startSector,
			 unsigned int sectorToDo,
			 char *buf)
{
	union REGS in,out;
	struct SREGS sregs;
	struct DiskAddressPacket
	{
		unsigned char PacketSize; /* 数据包尺寸(16字节) */
		unsigned char Reserved; /* ==0 */
		unsigned int BlockCount; /* 要传输的数据块个数(以扇区为单位) */
		unsigned int BufferAddrOFF; /* 缓冲地址偏移 */
		unsigned int BufferAddrSEG; /* 缓冲地址段地址 */
		unsigned long BlockNumLow; /* 磁盘起始绝对块地址低位,支持4G的扇区数,就是2048G字节 */
		unsigned long BlockNumHigh; /* 磁盘起始绝对块地址高位,可支持天文数字的GB,本程序未用,置0 */
	}dap;
	dap.PacketSize=16;
	dap.Reserved=0;
	dap.BlockCount=sectorToDo;
	dap.BufferAddrOFF=FP_OFF(buf);
	dap.BufferAddrSEG=FP_SEG(buf);
	dap.BlockNumLow=startSector;
	dap.BlockNumHigh=0;
	
	in.h.ah = cmd;
	in.h.dl = driveNum;
	in.h.al = 0; /* 0 为无写校验,1为有 */
	in.x.si = FP_OFF(&dap);
	sregs.ds =  FP_SEG(&dap);
	
	int86x(0x13,&in,&out,&sregs);
	return out.h.ah;
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?