UINT8 c64_ieee488_device::c64_cd_r(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2) { data = m_exp->cd_r(space, offset, data, sphi2, ba, roml, romh, io1, io2); if (!roml && m_roml_sel) { data = m_roml[offset & 0xfff]; } else if (!io2) { data = tpi6525_r(m_tpi, space, offset & 0x07); } return data; }
static READ16_HANDLER( amiga_dmac_r ) { offset &= 0xff; switch( offset ) { case 0x20: { UINT8 v = dmac_data.istr; LOG(( "DMAC: PC=%08x - ISTR Read(%04x)\n", cpu_get_pc(&space->device()), dmac_data.istr )); dmac_data.istr &= ~0x0f; return v; } break; case 0x21: { LOG(( "DMAC: PC=%08x - CNTR Read(%04x)\n", cpu_get_pc(&space->device()), dmac_data.cntr )); return dmac_data.cntr; } break; case 0x40: /* wtc hi */ { LOG(( "DMAC: PC=%08x - WTC HI Read\n", cpu_get_pc(&space->device()) )); return (dmac_data.wtc >> 16); } break; case 0x41: /* wtc lo */ { LOG(( "DMAC: PC=%08x - WTC LO Read\n", cpu_get_pc(&space->device()) )); return dmac_data.wtc; } break; case 0x42: /* acr hi */ { LOG(( "DMAC: PC=%08x - ACR HI Read\n", cpu_get_pc(&space->device()) )); return (dmac_data.acr >> 16); } break; case 0x43: /* acr lo */ { LOG(( "DMAC: PC=%08x - ACR LO Read\n", cpu_get_pc(&space->device()) )); return dmac_data.acr; } break; case 0x48: /* wd33c93 SCSI expansion */ case 0x49: { LOG(( "DMAC: PC=%08x - WD33C93 Read(%d)\n", cpu_get_pc(&space->device()), offset & 1 )); return 0x00; /* Not available without SCSI expansion */ } break; case 0x50: { LOG(( "DMAC: PC=%08x - CDROM RESP Read\n", cpu_get_pc(&space->device()) )); return matsucd_response_r(space->machine()); } break; case 0x51: /* XT IO */ case 0x52: case 0x53: { LOG(( "DMAC: PC=%08x - XT IO Read(%d)\n", cpu_get_pc(&space->device()), (offset & 3)-1 )); return 0xff; } break; case 0x58: /* TPI6525 */ case 0x59: case 0x5A: case 0x5B: case 0x5C: case 0x5D: case 0x5E: case 0x5F: case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: { device_t *tpi = space->machine().device("tpi6525"); LOG(( "DMAC: PC=%08x - TPI6525 Read(%d)\n", cpu_get_pc(&space->device()), (offset - 0x58) )); return tpi6525_r(tpi, offset - 0x58); } break; case 0x70: /* DMA start strobe */ { LOG(( "DMAC: PC=%08x - DMA Start Strobe\n", cpu_get_pc(&space->device()) )); dmac_data.dma_timer->adjust(attotime::from_msec( CD_SECTOR_TIME )); } break; case 0x71: /* DMA stop strobe */ { LOG(( "DMAC: PC=%08x - DMA Stop Strobe\n", cpu_get_pc(&space->device()) )); dmac_data.dma_timer->reset( ); } break; case 0x72: /* Clear IRQ strobe */ { LOG(( "DMAC: PC=%08x - IRQ Clear Strobe\n", cpu_get_pc(&space->device()) )); dmac_data.istr &= ~ISTR_INT_P; } break; case 0x74: /* Flush strobe */ { LOG(( "DMAC: PC=%08x - Flush Strobe\n", cpu_get_pc(&space->device()) )); dmac_data.istr |= ISTR_FE_FLG; } break; default: logerror( "DMAC-READ: PC=%08x, offset = %02x\n", cpu_get_pc(&space->device()), offset ); break; } return 0; }