Back in the old days of game development, programmers needed to know a lot more about hardware than they do nowadays. Previously, programmers would code at a low level, talking to hardware components directly and sending instructions to the graphics card to draw images or to the sound card to play sounds. The method by which programmers communicate with hardware is called a protocol, and its concept is much like the protocols humans develop to talk to one another in socially acceptable ways. For example, two people shake hands in greeting and then one person speaks, the other listens, the first responds, and so on. As the range of hardware increased so did the number of protocols, and since gamers could be potentially running any of that hardware, developers had to find ways to ensure compatibility between systems so gamers on all kinds of hardware ultimately received the same experience.
Eventually, the extensive range of hardware became problematic not only because of the great variety available but because of the innumerable and unpredictable combinations of hardware a user might have. A developer might create a game on one system and could never be certain it would run on another with different hardware. This made support for these customers expensive and led to more and more buggy products, because not every setup could be tested thoroughly or cheaply.
The solution evolved in two forms: hardware and software. The hardware solution was the standardization between hardware manufacturers, and additionally, this led to the emergence of gaming consoles-dedicated home computers for games with specific hardware. For example, the Nintendo Wii is one such dedicated gaming system that has a set hardware configuration-same graphics card, same sound card, and so on-and developers for this platform can develop and test their games knowing that gamers will be running exactly the same configuration. The PC platform, with which this book is mainly concerned, is still sometimes plagued by hardware problems because PCs have such a varied range of hardware installed. Although current PC hardware is far more standardized, it is impossible to guarantee a specific game will run on every machine. For this reason, the hardware requirements of games for PCs are usually specific and restrictive, and few games are developed that claim to run on graphics cards other than those manufactured by a limited number of companies.