File: init.c

package info (click to toggle)
dosemu-freedos 1%3A0.0.b9r5a-3
  • links: PTS
  • area: contrib
  • in suites: etch-m68k
  • size: 19,768 kB
  • ctags: 23,285
  • sloc: ansic: 143,966; asm: 20,397; makefile: 3,868; perl: 1,106; yacc: 690; sh: 553; pascal: 297; xml: 150; cpp: 67
file content (112 lines) | stat: -rw-r--r-- 2,818 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
// Program:  Format
// Version:  0.91k
// (0.90b/c/d - DMA friendly buffer movement - Eric Auer - May 2003)
// (0.91k ... Eric Auer 2004)
// Written By:  Brian E. Reifsnyder
// Copyright:  2002-2004 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;
  unsigned long int where;

  bad_sector_map_pointer = 0;
  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.bad_sectors = 0;
  drive_statistics.bytes_per_sector = 512;

  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);
}