Added a version of the Winbond W83787F Super I/O chip with IDE enabled by default, fixes IDE on the Flytech 386.
This commit is contained in:
@@ -67,6 +67,7 @@ extern const device_t um8669f_device;
|
|||||||
extern const device_t via_vt82c686_sio_device;
|
extern const device_t via_vt82c686_sio_device;
|
||||||
extern const device_t w83787f_device;
|
extern const device_t w83787f_device;
|
||||||
extern const device_t w83787f_ide_device;
|
extern const device_t w83787f_ide_device;
|
||||||
|
extern const device_t w83787f_ide_en_device;
|
||||||
extern const device_t w83787f_ide_sec_device;
|
extern const device_t w83787f_ide_sec_device;
|
||||||
extern const device_t w83877f_device;
|
extern const device_t w83877f_device;
|
||||||
extern const device_t w83877f_president_device;
|
extern const device_t w83877f_president_device;
|
||||||
|
|||||||
@@ -644,7 +644,7 @@ machine_at_flytech386_init(const machine_t *model)
|
|||||||
machine_at_common_init(model);
|
machine_at_common_init(model);
|
||||||
|
|
||||||
device_add(&ali1217_device);
|
device_add(&ali1217_device);
|
||||||
device_add(&w83787f_ide_device);
|
device_add(&w83787f_ide_en_device);
|
||||||
device_add(&keyboard_ps2_device);
|
device_add(&keyboard_ps2_device);
|
||||||
|
|
||||||
if (gfxcard == VID_INTERNAL)
|
if (gfxcard == VID_INTERNAL)
|
||||||
|
|||||||
@@ -78,7 +78,8 @@ typedef struct {
|
|||||||
uint16_t reg_init;
|
uint16_t reg_init;
|
||||||
int locked, rw_locked,
|
int locked, rw_locked,
|
||||||
cur_reg,
|
cur_reg,
|
||||||
key, ide_function;
|
key, ide_function,
|
||||||
|
ide_start;
|
||||||
fdc_t *fdc;
|
fdc_t *fdc;
|
||||||
serial_t *uart[2];
|
serial_t *uart[2];
|
||||||
} w83787f_t;
|
} w83787f_t;
|
||||||
@@ -260,6 +261,7 @@ w83787f_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
|
|
||||||
switch (dev->cur_reg) {
|
switch (dev->cur_reg) {
|
||||||
case 0:
|
case 0:
|
||||||
|
pclog("REG 00: %02X\n", val);
|
||||||
if ((valxor & 0xc0) && (HAS_IDE_FUNCTIONALITY))
|
if ((valxor & 0xc0) && (HAS_IDE_FUNCTIONALITY))
|
||||||
w83787f_ide_handler(dev);
|
w83787f_ide_handler(dev);
|
||||||
if (valxor & 0x30)
|
if (valxor & 0x30)
|
||||||
@@ -376,6 +378,14 @@ w83787f_reset(w83787f_t *dev)
|
|||||||
ide_set_base(0, 0x1f0);
|
ide_set_base(0, 0x1f0);
|
||||||
ide_set_side(0, 0x3f6);
|
ide_set_side(0, 0x3f6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dev->ide_start) {
|
||||||
|
dev->regs[0x00] &= 0x7f;
|
||||||
|
if (dev->ide_function & 0x20)
|
||||||
|
ide_sec_enable();
|
||||||
|
else
|
||||||
|
ide_pri_enable();
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
dev->regs[0x00] = 0xd0;
|
dev->regs[0x00] = 0xd0;
|
||||||
|
|
||||||
@@ -426,6 +436,8 @@ w83787f_init(const device_t *info)
|
|||||||
if ((dev->ide_function & 0x30) == 0x10)
|
if ((dev->ide_function & 0x30) == 0x10)
|
||||||
device_add(&ide_isa_device);
|
device_add(&ide_isa_device);
|
||||||
|
|
||||||
|
dev->ide_start = !!(info->local & 0x40);
|
||||||
|
|
||||||
dev->reg_init = info->local & 0x0f;
|
dev->reg_init = info->local & 0x0f;
|
||||||
w83787f_reset(dev);
|
w83787f_reset(dev);
|
||||||
|
|
||||||
@@ -451,6 +463,15 @@ const device_t w83787f_ide_device = {
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const device_t w83787f_ide_en_device = {
|
||||||
|
"Winbond W83787F/IF Super I/O (With IDE Enabled)",
|
||||||
|
0,
|
||||||
|
0x59,
|
||||||
|
w83787f_init, w83787f_close, NULL,
|
||||||
|
{ NULL }, NULL, NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
const device_t w83787f_ide_sec_device = {
|
const device_t w83787f_ide_sec_device = {
|
||||||
"Winbond W83787F/IF Super I/O (With Secondary IDE)",
|
"Winbond W83787F/IF Super I/O (With Secondary IDE)",
|
||||||
0,
|
0,
|
||||||
|
|||||||
Reference in New Issue
Block a user