| 1486 | } |
| 1487 | |
| 1488 | void ide_write_reg (struct ide_hdf *ide, int ide_reg, uae_u32 val) |
| 1489 | { |
| 1490 | if (!ide) |
| 1491 | return; |
| 1492 | |
| 1493 | ide->regs1->ide_devcon &= ~0x80; /* clear HOB */ |
| 1494 | ide->regs0->ide_devcon &= ~0x80; /* clear HOB */ |
| 1495 | if (IDE_LOG > 2 && ide_reg > 0 && (1 || ide->num > 0)) |
| 1496 | write_log (_T("IDE%d PUT register %d=%02X (%08X)\n"), ide->num, ide_reg, (uae_u32)val & 0xff, m68k_getpc ()); |
| 1497 | |
| 1498 | switch (ide_reg) |
| 1499 | { |
| 1500 | case IDE_DRVADDR: |
| 1501 | break; |
| 1502 | case IDE_DEVCON: |
| 1503 | if ((ide->regs.ide_devcon & 4) == 0 && (val & 4) != 0) { |
| 1504 | reset_device (ide, true, false); |
| 1505 | if (IDE_LOG > 1) |
| 1506 | write_log (_T("IDE%d: SRST\n"), ide->num); |
| 1507 | } |
| 1508 | ide->regs0->ide_devcon = val; |
| 1509 | ide->regs1->ide_devcon = val; |
| 1510 | break; |
| 1511 | case IDE_DATA: |
| 1512 | break; |
| 1513 | case IDE_ERROR: |
| 1514 | ide->regs0->ide_feat2 = ide->regs0->ide_feat; |
| 1515 | ide->regs0->ide_feat = val; |
| 1516 | ide->regs1->ide_feat2 = ide->regs1->ide_feat; |
| 1517 | ide->regs1->ide_feat = val; |
| 1518 | break; |
| 1519 | case IDE_NSECTOR: |
| 1520 | ide->regs0->ide_nsector2 = ide->regs0->ide_nsector; |
| 1521 | ide->regs0->ide_nsector = val; |
| 1522 | ide->regs1->ide_nsector2 = ide->regs1->ide_nsector; |
| 1523 | ide->regs1->ide_nsector = val; |
| 1524 | break; |
| 1525 | case IDE_SECTOR: |
| 1526 | ide->regs0->ide_sector2 = ide->regs0->ide_sector; |
| 1527 | ide->regs0->ide_sector = val; |
| 1528 | ide->regs1->ide_sector2 = ide->regs1->ide_sector; |
| 1529 | ide->regs1->ide_sector = val; |
| 1530 | break; |
| 1531 | case IDE_LCYL: |
| 1532 | ide->regs0->ide_lcyl2 = ide->regs0->ide_lcyl; |
| 1533 | ide->regs0->ide_lcyl = val; |
| 1534 | ide->regs1->ide_lcyl2 = ide->regs1->ide_lcyl; |
| 1535 | ide->regs1->ide_lcyl = val; |
| 1536 | break; |
| 1537 | case IDE_HCYL: |
| 1538 | ide->regs0->ide_hcyl2 = ide->regs0->ide_hcyl; |
| 1539 | ide->regs0->ide_hcyl = val; |
| 1540 | ide->regs1->ide_hcyl2 = ide->regs1->ide_hcyl; |
| 1541 | ide->regs1->ide_hcyl = val; |
| 1542 | break; |
| 1543 | case IDE_SELECT: |
| 1544 | ide->regs0->ide_select = val; |
| 1545 | ide->regs1->ide_select = val; |
no test coverage detected