This document was last updated: 8/10/2007
Do not make the mistake of calling your hard drive "memory" or "RAM" - although it does remember stuff, arguably a lot better than system memory does, and it does provide random access (to a limited degree), it's better to refer to it as "the hard drive" (or "hard disk") which is unambiguous. I also hear a lot of people talking about their case and all its contents as "the hard drive". Don't do that either; call it "the box" or "the machine" if you really don't want to call it "the computer". To clarify, your hard drive is inside your case and you can't normally see it but it is (still, at this stage) mechanical and noisy, unlike your memory (RAM) which is just a chip or two (also inside your case).
As well as RAM, systems have a (relatively) small amount of Read Only Memory or ROM which generally stores code to control devices. The distinction between "ROM and RAM" is actually false seeing as ROM is also random-access (but for reading only). Interface cards can also come with their own ROM. The system BIOS, or "Basic Input/Output System", which is software responsible for the initial memory tests and device configuration when the computer is powered on, is also generally implemented as a ROM chip on the motherboard. Nowadays most ROM is actually erasable and re-programmable, so technically it is not really read-only however it is not writable with random-access as RAM is.
Another type of memory incorporated in modern systems is the CMOS RAM, which has a battery backup to prevent it from losing its contents when the system is powered off. The CMOS RAM generally contains BIOS configuration information, as well as maintaining the system time.
More permanent storage (as opposed to system memory) comes in the form of hard drives, DVD-ROMS and the like. These are generally connected via a bus (such as ATA - sometimes referred to as IDE; or SATA, SCSI, USB, IEEE 1394) to a corresponding controller which is in turn connected to the CPU and RAM (sometimes via another bus such as PCI, or via integration with some kind of I/O controller).
Add-in cards (for sound, video, or other functions) can usually be slotted into a motherboard (also called mainboard) are are connected to the rest of the system via a bus such as PCI, PCI-X or AGP. Older bus types include EISA, ISA and VLB. (So what is a bus? Basically, it is a bundle of wires, with a specific protocol used for communication).
These days, many of the controllers are embedded in the mainboard. In days long past, some of the less essential ones (including IDE and floppy-disk controllers) used to exist as add-in cards, usually with an ISA interface. Note however that when something is embedded on to the mainboard it is still generally connected to the processor and RAM via a bus of some sort.
While newer standards allow devices to access system memory fairly freely, ISA did not - communication between the processor and device was only possibly via I/O ports, or via the "DMAC" (Direct Memory Access Controller) which was in turned programmed via I/O ports (but which was able to route memory contents to and from devices). The Intel "x86"-series processors (and compatibles), as used in the PC, have instructions specifically for writing to and reading from I/O ports.
The DMAC was based on two Intel 8237 chips - technically then there are two DMACs - how to program them from software is documented here (it should also be possible to find the datasheet for the 8237A chip if you search the web).
Many devices need to able to inform the software of asynchronous events. For instance, a Network Interface adapter generally wants to tell the software when data has arrived over the network (otherwise, the software has to constantly "poll" the device to check whether data has arrived, which consumes processor cycles). To do such notifications, a device can generated an "interrupt". The bus supports the transmitting of interrupts between the device and the processor; the processor responds to interrupts by interrupting current processing (hence the name) and executing a subprogram designed to handle the interrupt.
In the ISA-era PC architecture (known as the "AT architecture"), interrupts were handled by a PIC (Programmable Interrupt Controller) which passed them on to the processor. The PIC was implemented as two 8259A chips, documented here. The main function of the PIC is to map "IRQ" (interrupt request) lines to interrupt numbers (the processor supports 256 interrupt numbers, each can be associated with a different software handler; traditionally, each device would be assigned its own IRQ line and interrupt number. In modern systems it is possible for multiple devices to share an interrupt number, if the system software supports this).
ISA systems also had as standard an Intel 8042 keyboard controller (actually a programmable microcontroller, programmed to act as a keyboard controller), serial port controller, parallel port controller, NEC 765 floppy disk controller, one or two IDE controllers, and an 8253 PIT (programmable interrupt timer). Also present was a video card, generally backwards compatible with the MDA (and in modern systems, with the VGA). All of these were at standard I/O port addresses, IRQ lines and DMA channels. Incredibly, modern systems generally maintain compatibility with these ISA systems by emulating the various controllers when they are accessed by the assigned I/O ports.
In general, the term plug-and-play refers to enumeration and configuration abilities in buses, not specifically ISA.
IBM developed the "Micro Channel Architecture" to overcome the problems of ISA, including plug-and-play (this was before the ISA PnP standard was developed), faster speed, and bus mastering. In MCA systems the DMA controllers were not cascaded thus allowing use of all 8 DMA channels (though with bus mastering, use of the DMA controller channels would not have been required except for compatibility with ISA). MCA never really caught on, apparently because IBM maintained too tight a control over it. It was used in the PS/2 series. Device configuration was performed by the BIOS.
EISA was developed as an extension to ISA, which supported all the main features of MCA and was essentially a direct competitor thereof. Like MCA, it never really took off (except perhaps in the server market) and was superceded by PCI.
PCI (Peripheral Comopnent Interconnect) provided an increased bus speed over EISA (and a new slot type, making it non-compatible with ISA and EISA cards). The cards and slots can be either 32-bit or 64-bit (and must match). Cards can be either 33MHz or 66MHz; the slots support both speeds. PCI provides only four IRQ lines (but fully supports IRQ line sharing). Later revisions support "Message Signalled Interrupts" (MSI) which allows devices to generate interrupts via a memory write rather than an IRQ line. AGP (Accelerated Graphics Port) extended PCI (with yet another slot type) to allow direct access to RAM, mainly for 3D graphics cards (normally, one or two AGP slots will be accompanied by a bunch of PCI slots).
PCI-X - is essentially PCI at a faster speed.
PCI Express (PCIe) - increased bandwidth again. Uses MSI exclusively.
The general order of PC models produced by IBM was: