13

I found some information on the web as follows, but incomplete.

http://en.wikipedia.org/wiki/Input/output_base_address

http://wiki.osdev.org/I/O_Ports

Where to download the specification?

Ciro Santilli OurBigBook.com
  • 347,512
  • 102
  • 1,199
  • 985
xmllmx
  • 39,765
  • 26
  • 162
  • 323

3 Answers3

15

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.

Igor Skochinsky
  • 24,629
  • 2
  • 72
  • 109
  • Are those IO ports 8-bit or 16-bit? Because I've seen them being used with 8-bit CPU registers (out dx,al) as well as 16-bit ones (out dx,ax). What does happen when I write a 16-bit value from a register to some port address? Is it being written to two consecutive IO addresses? Or just one? How can I know the size of the target IO port? – SasQ Jun 11 '19 at 22:04
  • @SasQ can be both: https://reverseengineering.stackexchange.com/a/20335/60 – Igor Skochinsky Jun 16 '19 at 13:29
6

You may want to check Ralf Brown's interrupt list "RBIL".

Part D contains the information on I/O ports.

nrz
  • 10,435
  • 4
  • 39
  • 71
3

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".