void address_map_entry::set_submap(const char *tag, address_map_delegate func, int bits, UINT64 mask) { if(!bits) bits = m_map.m_databits; assert(unitmask_is_appropriate(bits, mask, func.name())); m_read.m_type = AMH_DEVICE_SUBMAP; m_read.m_tag = tag; m_read.m_mask = mask; m_write.m_type = AMH_DEVICE_SUBMAP; m_write.m_tag = tag; m_write.m_mask = mask; m_submap_delegate = func; m_submap_bits = bits; }
void pci_device::add_map(UINT64 size, int flags, address_map_delegate &map) { assert(bank_count < 6); int bid = bank_count++; bank_infos[bid].map = map; bank_infos[bid].adr = 0; bank_infos[bid].size = size; bank_infos[bid].flags = flags; if(flags & M_64A) { assert(bank_reg_count < 5); int breg = bank_reg_count; bank_reg_infos[breg].bank = bid; bank_reg_infos[breg].hi = 0; bank_reg_infos[breg+1].bank = bid; bank_reg_infos[breg+1].hi = 1; bank_reg_count += 2; } else { assert(bank_reg_count < 6); int breg = bank_reg_count++; bank_reg_infos[breg].bank = bid; bank_reg_infos[breg].hi = 0; } logerror("Device %s (%s) has 0x%" I64FMT "x bytes of %s named %s\n", tag(), name(), size, flags & M_IO ? "io" : "memory", map.name()); }