Support IDE port enable/disable on PIIX.

This commit is contained in:
SarahW 2018-02-19 21:35:30 +00:00
commit 1c3bb20044

View file

@ -49,24 +49,12 @@ void piix_write(int func, int addr, uint8_t val, void *priv)
card_piix_ide[0x40] = val; card_piix_ide[0x40] = val;
break; break;
case 0x41: case 0x41:
if ((val ^ card_piix_ide[0x41]) & 0x80)
{
ide_pri_disable();
if (val & 0x80)
ide_pri_enable();
}
card_piix_ide[0x41] = val; card_piix_ide[0x41] = val;
break; break;
case 0x42: case 0x42:
card_piix_ide[0x42] = val; card_piix_ide[0x42] = val;
break; break;
case 0x43: case 0x43:
if ((val ^ card_piix_ide[0x43]) & 0x80)
{
ide_sec_disable();
if (val & 0x80)
ide_sec_enable();
}
card_piix_ide[0x43] = val; card_piix_ide[0x43] = val;
break; break;
} }
@ -77,6 +65,18 @@ void piix_write(int func, int addr, uint8_t val, void *priv)
if (card_piix_ide[0x04] & 1) if (card_piix_ide[0x04] & 1)
io_sethandler(base, 0x10, piix_bus_master_read, NULL, NULL, piix_bus_master_write, NULL, NULL, NULL); io_sethandler(base, 0x10, piix_bus_master_read, NULL, NULL, piix_bus_master_write, NULL, NULL, NULL);
} }
if (addr == 4 || addr == 0x41 || addr == 0x43)
{
ide_pri_disable();
ide_sec_disable();
if (card_piix_ide[0x04] & 1)
{
if (card_piix_ide[0x41] & 0x80)
ide_pri_enable();
if (card_piix_ide[0x43] & 0x80)
ide_sec_enable();
}
}
// pclog("PIIX write %02X %02X\n", addr, val); // pclog("PIIX write %02X %02X\n", addr, val);
} }
else else
@ -367,7 +367,7 @@ void piix_init(int card, int pci_a, int pci_b, int pci_c, int pci_d)
card_piix_ide[0x00] = 0x86; card_piix_ide[0x01] = 0x80; /*Intel*/ card_piix_ide[0x00] = 0x86; card_piix_ide[0x01] = 0x80; /*Intel*/
card_piix_ide[0x02] = 0x30; card_piix_ide[0x03] = 0x12; /*82371FB (PIIX)*/ card_piix_ide[0x02] = 0x30; card_piix_ide[0x03] = 0x12; /*82371FB (PIIX)*/
card_piix_ide[0x04] = 0x00; card_piix_ide[0x05] = 0x00; card_piix_ide[0x04] = 0x02; card_piix_ide[0x05] = 0x00;
card_piix_ide[0x06] = 0x80; card_piix_ide[0x07] = 0x02; card_piix_ide[0x06] = 0x80; card_piix_ide[0x07] = 0x02;
card_piix_ide[0x08] = 0x00; card_piix_ide[0x08] = 0x00;
card_piix_ide[0x09] = 0x80; card_piix_ide[0x0a] = 0x01; card_piix_ide[0x0b] = 0x01; card_piix_ide[0x09] = 0x80; card_piix_ide[0x0a] = 0x01; card_piix_ide[0x0b] = 0x01;
@ -383,4 +383,7 @@ void piix_init(int card, int pci_a, int pci_b, int pci_c, int pci_d)
pci_set_card_routing(pci_b, PCI_INTB); pci_set_card_routing(pci_b, PCI_INTB);
pci_set_card_routing(pci_c, PCI_INTC); pci_set_card_routing(pci_c, PCI_INTC);
pci_set_card_routing(pci_d, PCI_INTD); pci_set_card_routing(pci_d, PCI_INTD);
ide_pri_disable();
ide_sec_disable();
} }