The method used to pass signals from the CPU to the controller boards of peripheral devices on x86 machines. An I/O address, also called a "port address," references a separate memory space on peripheral boards. This is often confused with memory-mapped peripherals, such as video cards, which use a block of upper memory (UMB) in the upper memory area (UMA). Peripheral devices often use both methods: an I/O address for passing control signals and an upper memory block (UMB) for transferring and buffering data to and from the CPU.|
Tiny Scattered Memory Banks
There is a 64K address space for I/O addresses, although typically less than 1K is used. Each board that uses an I/O address contains a few bytes of memory (16, 32, etc.) set to a default address range. One or more alternate addresses is also provided to resolve conflicts with other boards. These I/O spaces are a bunch of tiny memory banks scattered over different devices. As long as each one is set to a different address, the CPU can transmit signals to the appropriate boards without conflict.
The I/O Address Operation
If a program needs to send a byte to the serial port, it issues an OUT instruction to the CPU with the address of that serial port. The CPU notifies the address bus to activate the I/O space, not regular memory, and the address bus signals the appropriate byte location on the board. The CPU then sends the data character over the data bus to that memory location. Following are the default I/O addresses for the serial and parallel ports in a PC.
Port PC PS/2
LPT1 378h 3BCh
LPT2 278h 378h
LPT3 3BCh 278h
Windows provides ways to view the details of I/O addresses and other internal settings. This is a Windows 98 screen obtained from the Settings control panel. See