Archive for the ‘Electronics’ Category

ImpossiBot

Tuesday, February 2nd, 2010

As with most of my posts, click on an image for a larger version where applicable.

Recently, an acquaintance bought me a SunPlus SPG200 devkit:

The Initial Unboxing

SunPlus is a Taiwanese semiconductor company that, surprisingly, actually makes their own tech rather than ripping other companies off.  Their hardware is usually ridiculously cheap, and as a result has found a niche in cheap game consoles: The KenSingTon Vii, Mattel Hyperscan, V-Tech V-Smile, JAKKS Pacific TV Plug’n'Play games, lots of cheap “MP4″ players, and so on.  The SPG series in particular was used in the Vii, V-Smile, and TV Plug’n'Play games.

The first thing I did, naturally, was blink an LED:

I was playing The Impossible Game - an Xbox 360 “indie” game - on the subsequent night when an idea hit me: Bot the game.  Sure, people have managed to beat the game normally, but there’s no EE-style challenge in that!

Another night’s of work and a couple trips to Radio Shack allowed me to eliminate the crappy, many-year-old 75-in-1 electronics kit that I was borrowing from a friend.  Some quick kludging of an Xbox 360 controller later, and I was off and running:

A more close-up view of the breadboard itself:

Overall, it’s a pretty simple circuit.  I have I/O port A line 0 hooked up via a 10kR to an NPN BJT, and the Xbox 360 controller’s A button wires sitting across the collector and emitter with a 10kR inline.  Simple.

The rest of the circuitry is to make my life easier.  There’s a pair of wires that I can touch together to bridge the A button manually in order to navigate menus, there’s another jumper wire that’s hooked up to I/O port A line 8 in order to start the automated sequence of keypresses, and six LEDs to show where in the sequence I am currently.

There are only two real issues that I’ve run into so far: First, I have to manually exit out of the current game and go back into it whenever the player dies in order to resync the hard-coded button timing with the game.  Second, every so often the timing will be a few frames off from the beginning - I blame slight variances in load time.

What I really need to do is figure out why the op-amp comparator circuit I tried to build failed to work.  Once it’s working, I should be able to trigger the restart based on the dead silence that occurs whenever the player loses a life.  After that it would be simple enough to make it automatically start playing once I start the program, or alternatively, I could even make it use a simple genetic-like algorithm to try to find the appropriate sequence rather than me having to hard-code the timing.

Once The Impossible Game falls, I’ll be taking a crack at automating Guitar Hero; after having disassembled the controller, it’s obvious that it’s actually really simple inside.  Then, the world will be mine!