I've been reading about how memory-mapped I/O actually works and I cannot understand how the system assigns an address or address space to a specific device.
Let's say I had two devices that I wanted to use in a memory-mapped scheme, and they were identical devices (hard drives maybe?). If they both monitored the address bus for the same address, then they wouldn't be able to function independently of each other. Does the I/O controller have some kind of on-board process to dynamically allocate that sort of thing, or is that left up to BIOS/UEFI? Or am I really off track?