Some slight PIIX and IDE fixes.

This commit is contained in:
OBattler
2020-04-17 01:38:42 +02:00
parent 482cf4af1e
commit ef42bb7e58
2 changed files with 18 additions and 10 deletions

View File

@@ -1194,6 +1194,9 @@ ide_writew(uint16_t addr, uint16_t val, void *priv)
case 0x0: /* Data */
ide_write_data(ide, val, 2);
break;
case 0x7:
ide_writeb(addr, val & 0xff, priv);
break;
default:
ide_writeb(addr, val & 0xff, priv);
ide_writeb(addr + 1, (val >> 8) & 0xff, priv);
@@ -1228,6 +1231,9 @@ ide_writel(uint16_t addr, uint32_t val, void *priv)
else
ide_writew(addr + 2, (val >> 16) & 0xffff, priv);
break;
case 0x6: case 0x7:
ide_writew(addr, val & 0xffff, priv);
break;
default:
ide_writew(addr, val & 0xffff, priv);
ide_writew(addr + 2, (val >> 16) & 0xffff, priv);
@@ -1891,6 +1897,9 @@ ide_readw(uint16_t addr, void *priv)
case 0x0: /* Data */
temp = ide_read_data(ide, 2);
break;
case 0x7:
temp = ide_readb(addr, priv);
break;
default:
temp = ide_readb(addr, priv) | (ide_readb(addr + 1, priv) << 8);
break;
@@ -1923,6 +1932,9 @@ ide_readl(uint16_t addr, void *priv)
else
temp = temp2 | (ide_readw(addr + 2, priv) << 16);
break;
case 0x6: case 0x7:
temp = ide_readw(addr, priv);
break;
default:
temp = ide_readw(addr, priv) | (ide_readw(addr + 2, priv) << 16);
break;
@@ -2367,11 +2379,7 @@ ide_set_handlers(uint8_t board)
return;
if (ide_boards[board]->base_main) {
io_sethandler(ide_boards[board]->base_main, 1,
ide_readb, ide_readw, ide_readl,
ide_writeb, ide_writew, ide_writel,
ide_boards[board]);
io_sethandler(ide_boards[board]->base_main + 1, 7,
io_sethandler(ide_boards[board]->base_main, 8,
ide_readb, ide_readw, ide_readl,
ide_writeb, ide_writew, ide_writel,
ide_boards[board]);
@@ -2393,15 +2401,12 @@ ide_remove_handlers(uint8_t board)
return;
if (ide_boards[board]->base_main) {
io_removehandler(ide_boards[board]->base_main, 1,
ide_readb, ide_readw, ide_readl,
ide_writeb, ide_writew, ide_writel,
ide_boards[board]);
io_removehandler(ide_boards[board]->base_main + 1, 7,
io_removehandler(ide_boards[board]->base_main, 8,
ide_readb, ide_readw, ide_readl,
ide_writeb, ide_writew, ide_writel,
ide_boards[board]);
}
if (ide_boards[board]->side_main) {
io_removehandler(ide_boards[board]->side_main, 1,
ide_read_alt_status, NULL, NULL,

View File

@@ -1229,6 +1229,9 @@ piix_reset_hard(piix_t *dev)
else
fregs[0x09] = 0x80;
fregs[0x0a] = 0x01; fregs[0x0b] = 0x01;
if (dev->type == 5) {
fregs[0x10] = fregs[0x14] = fregs[0x18] = fregs[0x1c] = 0x01;
}
fregs[0x20] = 0x01;
if (dev->type == 5) {
fregs[0x3c] = 0x0e;