📄 extint13.c
字号:
/* 扩展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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -