Nintendo 64 Controller Interface Project

Team Members

Project Overview

            Our intent was to use the Motorola 823 microprocessor to interface a Nintendo controller to a computer and then use this to play a Nintendo 64 emulation game.  We’d be playing Nintendo 64 without a Nintendo 64.  This required a large amount of hardware and a small assembly program.  Using a standard Nintendo 64 controller, we use Xilinx to create hardware to poll the controller.  The controller returns a pulse-width modulated signal that we need to run through more hardware to output a 32 bit value representing the buttons and analog stick.  We then use SingleStep to send this data to a serial port so that the main processor can access the button values.  This requires us to use special software that will transfer the serial port data into simulated keystrokes so that the emulator game can be controlled.  Since this occurs approximately every 250 microseconds we can simulate actual controller use on the emulator.

Data Flow

The Most Difficult Issue

            The biggest problem we encountered was how to send the controller data from SingleStep to the emulator.  We wanted to originally send the data through the parallel port but this proved to be too complicated.  The next idea was to somehow use a PS/2 port and simulate keystrokes but this would be a whole project on its own.  The best solution, which we used in the end, was to send the data serially and convert that into keystrokes.  The problem is that no matter how fast you send the data, you cannot perfectly simulate a keypress, hold, and release.  You can only simulate thousands of keytaps per second.  The emulator is fast enough to recognize the serial data as keytaps and therefore the analog stick is not as smooth as it should be.  Given 1-2 more weeks we could have tried to interface the PS/2 port and simulate true keypresses.

Pictures

Links