Memory map
In computing, a memory map is the scheme by which different hardware devices can be addressed. This goes hand-in-hand with the modern approach to peripheral design where registers are directly addressable within each device. The complete list of all accessible registers and devices acrosss a system is its memory map.
Example
Consider a simple system built around an 8-bit microprocessor. Such a CPU might provide 16 address lines, allowing it to address up to 64K bytes (65,535 bytes) of memory. On such a system, perhaps the first 32K of address space would be allotted to Random access memory (RAM), a further 16K to Read only memory (ROM) and the remainder to a variety of other devices such as timers, counters, video display chips, sound generating devices, and so forth. The hardware of the system is arranged so that devices on the address bus will only respond to particular addresses which are intended for them; all other addreses are ignored. This is the job of the address decoding circuitry, and it is this that establishes the memory map of the system. The decoding itself may be programmable, allowing the system to reconfigure its own memory map as required. This is commonly done.
Thus we might end up with a memory map like so:
Device | Address Range | Size
RAM | $0000 - $7FFF | 32K | ROM | $8000 - $BFFF | 16K | I/O | $C000 - $C0FF | 256 bytes | Sound | $D000 - $D0FF | 256 bytes | Video | $E000 - $E0FF | 256 bytes |
Note that this memory map contains gaps, that is also quite common.
The advantage of memory mapping is that any device can be controlled by the CPU simply by reading and writing to its registers as if it were simple memory - the CPU does not require special I/O instructions or any knowledge of the device. For example if the fourth register of the video controller set the background colour of the video, the CPU can set this colour by writing a value to the memory location $E003 using its standard memory write instruction.