init.c

来自「可以格式化超过200G硬盘的格式化工具」· C语言 代码 · 共 110 行

C
110
字号
/*
// Program:  Format
// Version:  0.90d
// (0.90b/c/d - DMA friendly buffer movement - Eric Auer - May 2003)
// Written By:  Brian E. Reifsnyder
// Copyright:  2002 under the terms of the GNU GPL, Version 2
// Module Name:  init.c
// Module Description:  Program initialization functions.
*/

#include <stdlib.h>

#include "format.h"
#include "driveio.h" /* sector buffers */

void Setup_DDPT(void);


void Initialization(void)
{
  int bad_sector_map_pointer=0;
  unsigned long int where;

  sector_buffer = &sector_buffer_0[0];
  where = FP_SEG(sector_buffer);
  where <<= 4;
  where += FP_OFF(sector_buffer);
  if ((where & 0xffff) > (0xffff - 512)) {
    sector_buffer = &sector_buffer_1[0];
    where = FP_SEG(sector_buffer);
    where <<= 4;
    where += FP_OFF(sector_buffer);
    printf("DMA tuning: using alternative sector_buffer\n");
  }
  if ((where & 0xffff) > (0xffff - 512)) {
    printf("DMA tuning: CANNOT move sector buffer away from boundary!?\n");
  }

  huge_sector_buffer = &huge_sector_buffer_0[0];
  where = FP_SEG(huge_sector_buffer);
  where <<= 4;
  where += FP_OFF(huge_sector_buffer);
  if ( (where & 0xffff) > (0xffff - sizeof(huge_sector_buffer_0)) ) {
    huge_sector_buffer = &huge_sector_buffer_1[0];
    where = FP_SEG(sector_buffer);
    where <<= 4;
    where += FP_OFF(sector_buffer);
    printf("DMA tuning: using alternative huge_sector_buffer\n");
  }

  if (debug_prog==TRUE) {
    printf("[DEBUG]   1 sector buffer at %4.4x:%4.4x,\n",
      FP_SEG(sector_buffer), FP_OFF(sector_buffer));
    printf("[DEBUG]   1 track buffer  at %4.4x:%4.4x\n",
      FP_SEG(huge_sector_buffer), FP_OFF(huge_sector_buffer));
  }

  param.drive_letter[0]=NULL;
  param.volume_label[0]=NULL;

  param.drive_type=0; /* not NULL; */
  param.drive_number=0; /* not NULL; */
  param.fat_type=0; /* not NULL; */
  param.media_type=UNKNOWN;

  param.force_yes=FALSE;
  param.verify=TRUE;

  param.v=FALSE;
  param.q=FALSE;
  param.u=FALSE;
  param.f=FALSE;
  param.b=FALSE;
  param.s=FALSE;
  param.t=FALSE;
  param.n=FALSE;
  param.one=FALSE;
  param.four=FALSE;
  param.eight=FALSE;

  param.size=UNKNOWN;
  param.cylinders=0;
  param.sectors=0;

  drive_statistics.bytes_in_bad_sectors=0;

  segread(&sregs);

  /* Clear bad_sector_map[]. */
  do
    {
    bad_sector_map[bad_sector_map_pointer]=0;
    bad_sector_map_pointer++;
    }while(bad_sector_map_pointer<MAX_BAD_SECTORS);

  Setup_DDPT();
}

void Setup_DDPT(void)
{
  /* Get the location of the DDPT */

    regs.h.ah =0x35;
    regs.h.al =0x1e;
    intdosx(&regs, &regs, &sregs);

    ddpt = MK_FP(sregs.es, regs.x.bx);
}

⌨️ 快捷键说明

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