The hardware used for our project was built from standard components, and should be easy to reproduce for others should the need arise. Our hardware allows us to communicate with a television and 4 standard NES (Nintendo Entertainment System) controllers. The system is built around an Atmel ATmega32 microcontroller and STK500 development board.
NES interface on the left, video DAC on the right
When designing the DAC for our video output, we first determined what goals this piece of hardware should accomplish. We wanted it to be able to produce both a 16-level gray-scale video signal as well the sync signal. Therefore, in accordance with the NTSC standard, the voltages we needed to produce were 0V (for the sync), and 16 other levels between 0.3V (black level) and 1V (white level).
To accomplish this, we use a modified version of an R-2R Ladder DAC. In our ladder, however, one of the rungs on the ladder, which corresponds to the sync bit, has only a resistance of 3R. This is achieves the 0.3V offset that we need in order to start the intensity changes at black level. The NPN follower transistor at the output of the R-2R ladder is another key to the design. It keeps the DAC accurate by preventing a mass-load current from running through ground via our impedance-matching 75-ohm resistor. The 210-ohm resistor is used to scale down the voltage from the output of the follower to the desired range (0.3V to 1V).
When we began the project, we knew that we were going to need a solid input device for our game, preferably some sort of controller. At first we attempted to use Microsoft Sidewinders to fill this need. However, due to a lack of clear specification about its communication protocol, we soon realized that it would not be a good solution. Thus, we moved to the old NES controllers as the input device. Using documentation found on the Web, we were successful in communicating with an NES controller. We are capable of reading from 4 NES controllers through one 8-pin input port.
NES data signal on top, latch signal on bottom,
when UP and B are pressed