Is there a specification of x86 I/O port assignment?
A good source for current (and not from 1994) I/O port map is chipset documentation, e.g. Intel® 7 Series Chipset Family PCH Datasheet (see section 9.3, I/O Map). For example, here are some ports which are commonly used in modern PCs and are not mentioned in the old lists:
- 2E-2F,4E-4F: Low Pin Count (LPC) interface, usually connected to Super I/O or EC (Embedded Controller)
- 0CF8, 0CFC: PCI configuration space access
- B2: ACPI and SMI port (writing to it usually generates an SMI interrupt)
Note that some I/O ranges are dynamic and can be moved by reprogramming various bits in the corresponding PCI devices configuration.
For classic (i.e. pre-1995) information on ports, the Bochs project has a very useful list of XT, AT and PS/2 port addresses. The list is fairly comprehensive, although the preamble warns the reader to "not consider this information as complete and accurate".
You may want to check Ralf Brown's interrupt list "RBIL".
Part D contains the information on I/O ports.