Applied all mainline PCem commits;
Fixed behavior of the FDC RECALIBRATE command for FDC's on certain Super I/O chips; Several 86F-related fixes; Added the Intel Advanced/ML (430HX, Socket 7, currently with non-working Flash) and Intel Advanced/ATX (430FX, Socket 7, works perfectly) motherboards; Fixed handling of DENSEL when the FDC is in National Semiconductors PC87306 mode; Brought 440FX initialization PCI parameters in line with Bochs; Brought PIIX3 initialization PCI parameters in line with QEMU.
This commit is contained in:
42
src/fdd.c
42
src/fdd.c
@@ -39,11 +39,6 @@ static struct
|
||||
#define FLAG_HOLE2 32
|
||||
#define FLAG_DOUBLE_STEP 64
|
||||
|
||||
#define FLAGS_RPM_NONE 0
|
||||
#define FLAGS_RPM_300_ONLY 1
|
||||
#define FLAGS_RPM_360_ONLY 2
|
||||
#define FLAGS_RPM_BOTH 3
|
||||
|
||||
static struct
|
||||
{
|
||||
int max_track;
|
||||
@@ -81,10 +76,6 @@ static struct
|
||||
{ /*3.5" ED*/
|
||||
.max_track = 86,
|
||||
.flags = FLAG_RPM_300 | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2
|
||||
},
|
||||
{ /*3.5" ED 3-Mode*/
|
||||
.max_track = 86,
|
||||
.flags = FLAG_RPM_300| FLAG_RPM_360 | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2
|
||||
}
|
||||
};
|
||||
|
||||
@@ -92,11 +83,12 @@ int fdd_swap = 0;
|
||||
|
||||
void fdd_seek(int drive, int track_diff)
|
||||
{
|
||||
int old_track;
|
||||
|
||||
drive ^= fdd_swap;
|
||||
|
||||
old_track = fdd[drive].track;
|
||||
if (!track_diff)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fdd[drive].track += track_diff;
|
||||
|
||||
@@ -127,36 +119,23 @@ void fdd_set_densel(int densel)
|
||||
fdd[1].densel = densel;
|
||||
}
|
||||
|
||||
int fdd_get_flags(int drive)
|
||||
{
|
||||
return drive_types[fdd[drive].type].flags;
|
||||
}
|
||||
|
||||
int fdd_getrpm(int drive)
|
||||
{
|
||||
int hole = disc_hole(drive);
|
||||
int flags = 0;
|
||||
|
||||
drive ^= fdd_swap;
|
||||
flags = fdd_get_flags(drive);
|
||||
|
||||
if ((flags & 3) == FLAGS_RPM_300_ONLY)
|
||||
{
|
||||
return 300;
|
||||
}
|
||||
else if ((flags & 3) == FLAGS_RPM_360_ONLY)
|
||||
{
|
||||
return 360;
|
||||
}
|
||||
if (!(drive_types[fdd[drive].type].flags & FLAG_RPM_360)) return 300;
|
||||
if (!(drive_types[fdd[drive].type].flags & FLAG_RPM_300)) return 360;
|
||||
|
||||
if (flags & FLAG_525)
|
||||
if (drive_types[fdd[drive].type].flags & FLAG_525)
|
||||
{
|
||||
return fdd[drive].densel ? 360 : 300;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* disc_hole(drive) returns 0 for double density media, 1 for high density, and 2 for extended density. */
|
||||
if (hole >= 1)
|
||||
if (hole == 1)
|
||||
{
|
||||
return fdd[drive].densel ? 300 : 360;
|
||||
}
|
||||
@@ -199,6 +178,11 @@ int fdd_get_type(int drive)
|
||||
return fdd[drive].type;
|
||||
}
|
||||
|
||||
int fdd_get_flags(int drive)
|
||||
{
|
||||
return drive_types[fdd[drive].type].flags;
|
||||
}
|
||||
|
||||
int fdd_is_525(int drive)
|
||||
{
|
||||
return drive_types[fdd[drive].type].flags & FLAG_525;
|
||||
|
||||
Reference in New Issue
Block a user