#include<stdio.h>
#include<dos.h>
union REGS inreg,outreg;
struct SREGS segreg;
main()
{
    int i;
    char boot_buf[512];                          /*暂存放boot.exe的内容*/
    char kernel_buf[512];                        /*暂存放kernel.exe的内容*/
    FILE *fp;
    for(i=0;i<512;i++)
    {                                           /*先把这两个缓冲区清0*/
        boot_buf[i]=0;
        kernel_buf[i]=0;
    }
    if((fp=fopen("boot.exe","rb"))==NULL)
    {
        printf("cannot find boot.exe");exit(0);
    } /*打开boot.exe*/
    fseek(fp,512L,0);                            /*直接定位到文件第513个字节处,即512L*/
    i=0;
    while(1)
    {
        fread(&boot_buf[i],1,1,fp);                /*读入后面的所有内容直到结束*/
        i++;
        if(feof(fp))
        {
            fclose(fp);
            break;
        }
    }
    boot_buf[510] = 0x55;                        /*最后两个字节必须为55aa*/
    boot_buf[511] = 0xaa;
    
    /* 设置:将boot中的引导程序写入A盘的第0磁道1扇区*/
    inreg.h.ah=0x03;                             /*调用bios13h的3号写盘功能*/
    inreg.h.al=0x1;                              /*要读的扇区数为1*/
    inreg.h.ch=0;                                /*磁道号为0*/
    inreg.h.cl=1;                                /*扇区号为1*/
    inreg.h.dh=0;                                /*磁头号为0*/
    inreg.h.dl=0;                                /*驱动器号为0,即a盘*/
    inreg.x.bx=FP_OFF(boot_buf);                 /*bx中写boot_buf的内存偏移地址*/
    segreg.es=FP_SEG(boot_buf);                  /*es中写它的内存段地址*/
    int86x(0x13,&inreg,&outreg,&segreg);         /*调中断写盘*/
    if (_AH!=0)                                 /*ah为0刚写盘成功，否则退出*/
    {
        printf("error writing");exit(0);
    }
    else
    {
        printf("ok");
    }
    
    
    if((fp=fopen("kernel.exe","rb"))==NULL)        /*打开kernel.exe*/
    {
        printf("cannot find kernel.exe");exit(0);
    } 
    fseek(fp,512L,0);                              /*直接定位到文件第513个字节处,即512L*/
    i=0;
    while(1)
    {
        fread(&kernel_buf[i],1,1,fp);               /*读入后面的所有内容直到结束*/
        i++;
        if(feof(fp))
        {
            fclose(fp);
            break;
        }
    }
    
    /* 设置:将kernel中的程序写入A盘的第0磁道2扇区*/
    inreg.h.ah=0x03;
    inreg.h.al=0x1;
    inreg.h.ch=0;
    inreg.h.cl=2;                 /*扇区号为2*/
    inreg.h.dh=0;
    inreg.h.dl=0;
    inreg.x.bx=FP_OFF(kernel_buf);
    segreg.es=FP_SEG(kernel_buf);
    int86x(0x13,&inreg,&outreg,&segreg);
    if (_AH!=0)
    {
        printf("error writing");exit(0);
    }
    else
    {
        printf("ok");
    }
    
    
}

