This has been puzzling, so I'll lay it all out here. Apparently, through MMIO, you can access external devices using a certain memory-mapped address, which would then be re-routed to that device itself(through a write, command packet, etc.). However, I've been hearing mixed descriptions of both hardware registers(e.g. like a CPU/GPU register, or even sound chips), and memory-mapped registers used interchangeably. Are they the same thing?
When you say a "memory-mapped register", aren't you referring to the address from which a data byte is re-routed to a specific address inside that device(e.g. theoretical: GPU's 0x500 address is for register TEXTURE_BUFFER). However, a memory-mapped device can't map a physical register inside RAM.
So basically, what is the difference between a memory-mapped register and just a hardware register?