Applied all mainline PCem commits;

Added experimental NVidia Riva TNT2 emulation (patch from MoochMcGee);
ASUS P/I-P54TP4XE, ASUS P/I-P55T2P4, and ASUS P/I-P55TVP4 are back;
National Semiconductor PC87306 Super I/O chip now correctly reenables devices after a chip power cycle;
Several FDC improvements and the behavior is now a bit closer to real hardware (based on actual tests);
Added MR Intel Advanced/ATX with Microid Research BIOS with support for 4 floppy drives and up to 4 IDE controllers;
Added floppy drives 3 and 4, bringing the maximum to 4;
You can now connect hard disks to the tertiary IDE controller;
Correct undocumented behavior of the LEA instruction with register is back on 286 and later CPU's;
Pentium-rea models with Intel chipsets now have port 92 (with alternate reset and alternate A20 toggle);
Overhauled DMA channel read and write routines and fixed cascading;
Improved IMG detection of a bad BPB (or complete lack of a BPB);
Added preliminary emulation of PS/2 1.44 MB and PC-98 1.25 MB 3-mode drives (both have an inverted DENSEL pin);
Removed the incorrect Amstrad mouse patch from TheCollector1995;
Fixed ATAPI CD-ROM disk change detection;
Windows IOCTL CD-ROM handler now tries to use direct SCSI passthrough for more things, including obtaining CD-ROM capacity;
The Diamond Stealth32 (ET4000/W32p) now also works correctly on the two Award SiS 496/497 boxes;
The (S)VGA handler now converts 6-bit RAMDAC RGB channels to standard 8-bit RGB using a lookup table generated at emulator start, calculated using the correct intensity conversion method and treating intensity 64 as equivalent to 63;
Moved a few options from the Configuration dialog box to the menu;
SIO, PIIX, and PIIX3 now have the reset control register on port CF9 as they should;
Several bugfixes.
This commit is contained in:
OBattler
2016-12-23 03:16:24 +01:00
parent 724c5699ca
commit dc46480aa4
142 changed files with 8778 additions and 3331 deletions

View File

@@ -1,9 +1,8 @@
/* Copyright holders: Sarah Walker
see COPYING for more details
*/
#include "ibm.h"
#include "config.h"
#include "cpu.h"
#include "device.h"
#include "model.h"
#include "sound.h"
static void *device_priv[256];
@@ -19,9 +18,9 @@ void device_init()
void device_add(device_t *d)
{
int c = 0;
void *priv;
void *priv = NULL;
while ((c < 256) && (devices[c] != NULL))
while (devices[c] != NULL && c < 256)
c++;
if (c >= 256)
@@ -29,9 +28,12 @@ void device_add(device_t *d)
current_device = d;
priv = d->init();
if (priv == NULL)
fatal("device_add : device init failed\n");
if (d->init != NULL)
{
priv = d->init();
if (priv == NULL)
fatal("device_add : device init failed\n");
}
devices[c] = d;
device_priv[c] = priv;
@@ -45,7 +47,8 @@ void device_close_all()
{
if (devices[c] != NULL)
{
devices[c]->close(device_priv[c]);
if (devices[c]->close != NULL)
devices[c]->close(device_priv[c]);
devices[c] = device_priv[c] = NULL;
}
}
@@ -77,8 +80,8 @@ void device_speed_changed()
}
}
}
sound_speed_changed();
sound_speed_changed();
}
void device_force_redraw()
@@ -138,3 +141,43 @@ char *device_get_config_string(char *s)
}
return NULL;
}
int model_get_config_int(char *s)
{
device_t *device = model_getdevice(model);
device_config_t *config;
if (!device)
return 0;
config = device->config;
while (config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_int(device->name, s, config->default_int);
config++;
}
return 0;
}
char *model_get_config_string(char *s)
{
device_t *device = model_getdevice(model);
device_config_t *config;
if (!device)
return 0;
config = device->config;
while (config->type != -1)
{
if (!strcmp(s, config->name))
return config_get_string(device->name, s, config->default_string);
config++;
}
return NULL;
}