What is PCI anyhow, and why write about it?
In short, PCI is an interconnection specification for computer components. PCI in fact stands For Peripheral Component Interconnect. PCI Is a relatively new technology, having been first seen in the marketplace in 1995 with Intel's first Pentium CPU Chipsets - the Neptune, Saturn and Mercury.
It is because of this new technology that these PCI support pages were born. System programmers must learn to radically adjust their ways of thinking and programming to work in this new environment, not to mention having example code and up to date listings of devices to hand. To this end, I have decided to maintain a database of all known PCI & AGP vendor, device and subsystem codes, as well as publish as much programming information and source code as I can locate. All of the information I collect is free for anyone to use for any purpose - Commercial, Public Domain or Freeware.
The 'official' PCI specifications are only available by payment of (sizable sum of) money to the PCI SIG - something that would normally prevent the hobbyist, casually interested or easily deterred programmer from working with this technology. Like-minded readers are encouraged to protest to the PCI SIG about how unfair their pay-to-use policies are.
For another description of PCI, why not consult the Internet Webpoedia and see what it has to say.
PCI Technical information
PCI is basically a 5 volt, 33MHz, 32-bit bus with a basic
data transfer rate of 133 Mb/s (Megabits per second).
PCI also has many design options which can be combined in any permutation.:
Physical Connector
Most readers should be familiar with the connector variation pictured above - this is the 'standard' PCI slot found in most x86 IBM PC clones. This connector represents the most basic PCI implementation - 32 bit, 33MHz, 5 volt. The 3.3 volt implementation looks the same, except the plastic polarization key is located at the 'top' end, rather than the 'bottom' end.
The 64-bit implementation (shown here as a brown connector,
next to an ISA slot and a normal 32-bit slot for reference) are
about 50% longer; a second connector is butted up against the end
of the standard connector, with the plastic ends of the two
connectors forming a second polarization key. The 64-bit
extension always operates at 3.3 volts. Some motherboards (wrongly)
label the 64-bit extension as a 'Media' connector.
PCI Cards are the 'mirror' of traditional IBM-PC ISA bus cards; that is the components are fitted on the opposite side of the card. The PCI connector aligns with the right hand edge of the expansion slot, whereas ISA connects align with the left hand edge. This means that motherboards an be designed with a 'shared' slot - if the ISA and PCI connectors are placed side by side, either an ISA card, OR a PCI card can be fitted; but not both at the same time. This is often done to save space on a motherboard, yet try to offer the end user as much flexibility as possible to fit whatever selection of cards the user may have in mind.
Each PCI Slot consists of a multiplexed
address and data bus, four interrupt lines, +5v, +3.3v +12v and -12v
power supply lines, card presence sensing, test and control lines.
PCI does not support DMA in the 'traditional' IBM-PC sense,
however bus mastering replaces support replaces the functionality
of DMA when required.
Support of 'Legacy' devices in the IBM-PC world
Implementation of Legacy IBM-PC devices that have traditionally used well defined DMA, I/O and IRQ resources (IE PCI Sound Blaster compatible Sound Cards) is achieved through software driver emulation, which re-maps to the PCI card's resources in a manufacturer specific manner to these legacy resources. In time, legacy compliance will cease to be an issue, as native OS driver calls (Such as DirectX for Windows 9x) rather than direct hardware access become the normal way to access devices.
Design Features
All the 'bells and whistles' of modern design optimization are to be found; multiprocessor support, multiple bus mastering support, burst transfers, interrupt sparing, write posting and processor bridging, but to mention a few. PCI is implemented at a basic clock speed of 0MHz to 33MHz. This is a bus designed for very high performance in modern (>100MHz CPU based) computing systems.
One of the best aspects of PCI is that it is a vendor and platform independent specification; it is not restricted to the IBM-PC clone world (Even though Intel (mostly) invented it), nor is it limited to the x86 CPU Architecture. PCI can be found inside Apple and SUN computers, to name but two, as well as in x86 486, Pentium and newer systems. In theory, PCI can be fitted to almost any 32-bit (or better) computer.
PCI sports a number of improvements rarely found in earlier system expansion bus designs:
Design Expansion & AGP
PCI is also a highly extensible architecture. For example, AGP
is a (fairly) recent extension to the PCI Specification. AGP
stands for Accelerated Graphics Port
and is yet another variety of connector, designed specifically
for the connection of a video display card. AGP is now the
preferred connection method of choice in the IBM-PC/x86
architecture because of it's extremely high performance. AGP
integrates 66MHz operation (but not 64-bit) as standard, and
includes extra design tweaks to optionally double or quadruple
the basic 32-bit, 66MHz platform to a maximum data transfer rate
of 1064Mb/s! Because AGP is simply an extension of existing PCI
technology, AGP from a software viewpoint is virtually identical.
For this reason, the terms AGP and PCI are often used
interchangeably.