| 1534 | } |
| 1535 | |
| 1536 | static void ide_write_byte(struct ide_board *board, uaecptr addr, uae_u8 v) |
| 1537 | { |
| 1538 | uaecptr oaddr = addr; |
| 1539 | addr &= board->mask; |
| 1540 | |
| 1541 | #if DEBUG_IDE |
| 1542 | if ((addr & DEBUG_IDE_MASK) == DEBUG_IDE_MASK_VAL) { |
| 1543 | write_log(_T("IDE IO BYTE WRITE %08x=%02x %08x\n"), addr, v, M68K_GETPC); |
| 1544 | } |
| 1545 | #endif |
| 1546 | |
| 1547 | if (!board->configured) { |
| 1548 | addrbank *ab = board->bank; |
| 1549 | if (addr == 0x48) { |
| 1550 | if (board->aci->zorro == 2) { |
| 1551 | map_banks_z2(ab, v, (board->mask + 1) >> 16); |
| 1552 | board->baseaddress = v << 16; |
| 1553 | board->configured = 1; |
| 1554 | if (board->type == ROCHARD_IDE) { |
| 1555 | rochard_scsi_init(board->original_rc, board->baseaddress); |
| 1556 | #ifdef NCR9X |
| 1557 | } else if (board->type == MASOBOSHI_IDE) { |
| 1558 | ncr_masoboshi_autoconfig_init(board->original_rc, board->baseaddress); |
| 1559 | } else if (board->type == GOLEMFAST_IDE) { |
| 1560 | ncr_golemfast_autoconfig_init(board->original_rc, board->baseaddress); |
| 1561 | #endif |
| 1562 | } else if (board->type == DATAFLYERPLUS_IDE) { |
| 1563 | dataflyerplus_scsi_init(board->original_rc, board->baseaddress); |
| 1564 | #ifdef NCR9X |
| 1565 | } else if (board->type == TRIFECTA_IDE) { |
| 1566 | ncr_trifecta_autoconfig_init(board->original_rc, board->baseaddress); |
| 1567 | #endif |
| 1568 | } |
| 1569 | expamem_next(ab, NULL); |
| 1570 | } |
| 1571 | return; |
| 1572 | } |
| 1573 | if (addr == 0x4c) { |
| 1574 | board->configured = 1; |
| 1575 | expamem_shutup(ab); |
| 1576 | return; |
| 1577 | } |
| 1578 | } |
| 1579 | if (board->configured) { |
| 1580 | |
| 1581 | if (board->type == BUDDHA_IDE) { |
| 1582 | |
| 1583 | int portnum; |
| 1584 | int flashoffset = -1; |
| 1585 | bool p1 = (board->aci->rc->device_settings & 3) == 1; |
| 1586 | int regnum = get_buddha_reg(addr, board, &portnum, &flashoffset); |
| 1587 | if (flashoffset >= 0) { |
| 1588 | flash_write(board->flashrom, flashoffset, v); |
| 1589 | } else if (regnum >= 0) { |
| 1590 | if (board->ide[portnum]) { |
| 1591 | put_ide_reg_multi(board, regnum, v, portnum, 1); |
| 1592 | } |
| 1593 | } else if (addr >= 0xfc0 && addr < 0xfc4) { |
no test coverage detected