Three 8-bit ports are used by the software to access the configuration space on each Plug and Play ISA card. The ports are listed in table 1. The configuration space is implemented as a set of 8-bit registers. These registers are used by the Plug and Play software to issue commands, check status, access the resource data information, and configure the Plug and Play hardware.
The ports have been chosen so as to avoid conflicts in the installed base of ISA functions, while at the same time minimizing the number of ports needed in the ISA I/O space.
Table 1. Auto-configuration Ports
Port Name
Location
Type
ADDRESS
0x0279 (Printer status port)
Write-only
WRITE_DATA
0x0A79 (Printer status port + 0x0800)
Write-only
READ_DATA
Relocatable in range 0x0203 to 0x03FF
Read-only
The ADDRESS and WRITE_DATA ports are located at fixed addresses. The WRITE_DATA port is located at an address alias of the ADDRESS port. All three auto-configuration ports use a 12-bit ISA address decode.
The READ_DATA port is relocatable within the I/O range from 0x0203h to 0x03FFh. This is the only readable auto-configuration port.
Figure 3. Logic Flow for Auto-configuration
3.1.1. ADDRESS Port
The Plug and Play registers are accessed by first writing the address of the desired register to the ADDRESS port, followed by a read of data from the READ_DATA port or a write of data to the WRITE_DATA port. A write to the ADDRESS port may be followed by any number of WRITE_DATA or READ_DATA accesses to the same register location without the need to write to the ADDRESS port before each access.
The ADDRESS port is also the write destination of the initiation key, which is described later.
3.1.2. WRITE_DATA Port
The WRITE_DATA port is used to write information to the Plug and Play registers. The destination of the data is determined by the last setting of the ADDRESS port.
3.1.3. READ_DATA Port
The READ_DATA port is used to read information from the Plug and Play registers. The source of the data is determined by the last setting of the ADDRESS port.
The address of the READ_DATA port is set by writing the proper value to a Plug and Play control register. The isolation protocol verifies that the location selected for the READ_DATA port is free of conflict.