Attention!This tutorial recommends that you use an XFPS adapter. At the time this was the only available option. XFPS is now an inferior adapter compared to alternatives. You will have better results with a GTMax adapter. Replace part 4) XFPS 360 with GTMax in this guide. You can pick one up here:
http://www.amazon.com/gp/product/B0042SB2I0/---
Blog
September 28
Building your own Xbox 360 Input Machine (XIM)
The XIM community is growing fast! Take advantage of the community’s experience in building XIMs by getting support from our new forum.
Last month, I published a write up with a demonstration video documenting a side project I’ve been working on: Xbox 360 Gaming with a Wiimote. What was intended as something friends could look at to see what I’ve been working on turned into something much larger than I anticipated. The reaction from the community was phenomenal. I never expected the kind of attention that it received (Engadget , Joystiq, Gizmodo, etc). Not to mention the level of traffic on my blog and views of the video. I’d like to personally thank all those that took time to check out my work – especially those who left comments of encouragement and praise.
With the level of interest XIM generated, of course, I expected people to be interested in trying it out for themselves. I’ve gotten many requests to share the technology. So I spent a lot of time thinking about the best way to do just that (given the limited amount of time I had to invest). Even though some soldering skills are required, I didn't want to require people to know how to program to use it. Yet, for those programmers out there, I wanted to make sure they had access to the low-level XIM services so they could adapt other input devices to the Xbox 360 themselves: flight sticks, musical instruments, VR gloves, SplitFish, trackballs, controllers from other consoles, etc.
Since my introduction of XIM, I’ve continued to evolve the Wiimote profile (such as adding support for melee in Halo by swinging the Wiimote like a club – very satisfying

. I also recently added mouse and keyboard (MK) support too. What’s great about MK is it’s really easy to configure. Unfortunately, with the Wiimote profile, expressing anything more than the most simple gesture in a high-level manner (i.e. a simple configure file) is difficult without knowing how to program.
For these reasons, I decided to stick with only exposing MK support at this time which includes my configuration application to make customization easy:
Screen shot of the XIM Mouse and Keyboard Profile application showing current button and stick translation status
What I’m providing:
1) Major parts list
2) Assembly instructions
3) Microcontroller firmware (binary form only)
4) XIM Profile and Configuration application (MK support only)
5) XIM SDK
Cost: Free!
Special Thanks
The information I’m providing wouldn’t be of much use unless I had validation that XIM could be reproduced by someone else. I’d like to thank Egyokeo (a fellow modder) for not only verifying my steps and software work on a variety of system configurations, but, also providing valuable feedback in the form of bugs and suggestions of every part of XIM. You can check out his skills and his excellent use for XIM: Play Guitar Hero 2 on the Drums. (Yes, you read the right – it’s called MidiHero
Egyokeo’s XIM Implementation
Building Prerequisites
As you may have gathered thus far, XIM is a very powerful and flexible system that can really change the way you game on your Xbox 360. If you haven’t done so already, please look over my previous blog entry to get an idea of what it took to build XIM. I took care of the hardest parts (such as the microcontroller firmware and the PC software), and, as I mentioned before, I'll will provide this to you for free. But, there is still a cost. Besides having a PC close to your Xbox, you will need an XCM XFPS (see Parts List). You will also need to know how to do some moderately-precise soldering and know how to use a multi-meter.
If cost isn't a factor and you feel you have the technical skills to assemble the parts, then, it’s time to get into the details of what you’ll need. But, before I start, there are a few things concerning XIM's usage I want to cover.
Terms of Use and Disclaimer
XIM is being provided to you free of charge. You may use these instructions and software/firmware to build your own XIM for your own personal Xbox 360 gaming use. You may absolutely not sell XIM as part of any commercial product. XIM must remain free. You may not redistribute any part of XIM. All distribution of XIM (official assembly instructions, parts list, software, and firmware) can only come from me.
In addition, I make no guarantee about the performance of the XIM hardware/software/firmware or the accuracy of the assembly instructions. I am also not responsible for any injury (or worse) that you may incur when building your XIM. Please don’t expect a considerable amount of support from me.
You taking action in building XIM means you understand and agree with the terms of use and disclaimer I just covered.
Downloading the XIM Software/Firmware Package
You can acquire the XIM software and firmware from the XIM Community Forum. The XIM package is found in the Download section and it contains all the software and firmware that you will need. It also contains the SDK which consists of a DLL, C header file, and C import library so that you can create your own systems for adapting just about type of input device to your Xbox 360.
Assembly Diagram
The XIM system is assembled with the following major components (details in the following Parts List section).
PC – Silicon Labs ToolStick – PS2 Cable – XFPS 360 PRO – Xbox 360
Parts List
1) A PC running Windows Vista or XP
To date, verification has been made on PCs running Vista and XP Home and Professional (SP1 and SP2). You will need one free USB port.
2) Silicon Labs ToolStick Starter Kit
http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/en/USBToolStick.htm (information)
http://www.mouser.com/3plcart/cart.cfm?sid=63410000&pn=TOOLSTICKSK&pd=ToolStick%20Starter%20Kit (purchase)
The XIM firmware runs on top of a Silicon Labs 8051 microcontroller. I was new to Silicon Labs when I began XIM, but, quickly became a fan thanks to the quality of their hardware and development environment. They are excellent.
The ToolStick Starter Kit (model number is TOOLSTICKSK) includes the ToolStick Base Adapter, a ToolStick C8051F330 Daughter Card and a nice retractable USB cable.
3) PS2 Extension Cable
You will be cutting this cable and soldering the wires on to the F360 daughter card. This is then plugged into the XFPS 360.
4) XCM XFPS 360 Pro
http://www.xcm.cc/XFPS_360_PRO.htmIf you read my last blog post about XIM, I covered the importance of the XFPS and its ability to circumvent the 360’s peripheral security. Where the XFPS is a terrible mouse and keyboard adapter, it is a very good PS2 controller adapter. This is why XIM uses the PS2 connection. Unfortunately, this product is way overpriced for what you get. I wish I didn’t have to be giving people a reason to buy this device, but, it has a very necessary feature that you can’t get from anywhere else.
NOTE: XIM works on both the standard (Black) and “Pro” (White) version of the XFPS.
5) Wired Xbox 360 Controller
The XFPS requires this.
6) Project Enclosure Box (optional)
http://www.mouser.com/search/ProductDetail.aspx?R=CU-743virtualkey56310000virtualkey563-CU743Although optional, a nice project box will protect your XIM hardware from dust or other unfortunate circumstances as the ToolStick boards are pretty fragile. It is best to mount the ToolStick in the box using double-sided foam tape (a piece under the USB connector, and one under the base/daughter-card connector).
Assembly Step 1: Soldering PS Connector to the Hardware
The first step to building your own XIM is to connect your PS2 cable to the ToolStick F360 board. The F360 board has a series of connection points in the form of a grid. There are three columns (0, 1, and 2). Every column has 8 connectors (pins). Ground (GND) is separate.
The PS2 cable must be cut and 6 of its wires connected to the board. The following picture shows which PS2 cable wire/pin goes to what point on the F360 board.

Make sure to double check that your cable’s pin-wire color matches up
NOTE: You can see I color coded the diagram to correspond to the actual color of the wires. For example, the yellow wire would connect to pin 1.4 on the F360 board. I also mention this is pin 6 on the PS2 connector. This is important since there is no guarantee that the extension cable you bought (likely from a 3rd party manufacturer) will match the wire color to PS2 connector pin listed: 1 = Brown, 2 = Orange, 4 = Black, 6 = Yellow, 7 = Blue, and 9 = Green. To be absolutely sure that, for example, pin 6 is the yellow wire, you need to use a multi-meter to measure the resistance between these two points. If you read ~0 ohms, then, you know it matches up.
Once you have the connector soldered on, it’ll look something like this:

PS2 connector soldered on to the ToolStick (compliments of Egyokeo)
Assembly Step 2: Flashing the Hardware
The second (and last) step to the XIM hardware is flashing (downloading) the XIM firmware onto the ToolStick. In order to do this, you will need to download Silicon Lab’s flash utility:
Link to the Flash Utility page:
http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/en/mcu_winflashutilitiy.htmClick on: Flash Programming Utility under Download Now
After you install the tool (assuming you installed to the default location), follow these steps:
1 ) Plug your ToolStick into your PC’s USB port
2 ) Go to: C:\SiLabs\MCU\Utilities\FLASH Programming\Static Programmers\Windows Console
3 ) Run: FlashUtil.exe
4 ) Under the Connect/Disconnect tab:
a) Make sure the Debug Interface is set to C2
b) Make sure the Debug Adapter says it is USB Debug Adapter and the Adapter Selection has a serial number in it
c) Click the Connect button (you should see a yellow and red LED light up on your ToolStick base adapter)
5 ) Go to the Download Hex File/Go/Stop tab:
a) Under Download filename, click Browse and select XIMfirmware330.hex from where you extracted your XIM package
b) Click the Download button
6 ) Go back to the Connect/Disconnect tab:
a) Click the Disconnect button (you should the yellow and red LED lights turn off)
7 ) Close the Flash Utility
8 ) Unplug the ToolStick and plug it back in
XIM Hardware is Ready
At this point, your XIM hardware is ready. You should be able to plug one end of the hardware into your XFPS (via the PS2 connector, of course), and the other end into your PC. Run XIM.exe and try to navigating around the Xbox 360’s dash board by using your PC keyboard’s arrow keys. If you see the blades fly around as you’d expect, you are ready to go!
One other thing to note is that the tool should constantly display around 29 updates-per-second. This is important to ensure best gaming experience. If it’s running below that, make sure there isn’t something else going on with your PC (such as background processes taking over the CPU).
Now that the hardware is ready, it’s time to learn more about how you can configure XIM’s mouse and keyboard profile to best suit your gaming style.
Introducing the XIM Mouse and Keyboard Profile
The goal of the XIM MK profile is to provide Xbox 360 with the closest experience to mouse and keyboard gaming on a PC. Turns out that interfacing a mouse to an Xbox 360 game (especially shooters) is difficult to do well. Simple translations really show how bad it can be (such as what you get when using the XFPS's mouse and keyboard feature -- ouch). A shooter (like Halo 3) requires precision that you normally don’t get from playing with a low-precision device (i.e. the standard 360 controller’s thumbstick). That is why a generous amount of aim-assist features (in the form of auto-aim and acceleration curves) are included in the game to compensate for this deficiency. But, when it comes to a high-precision device like a mouse, these aim-assist features severely degrade the experience. This is why a simple mouse-to-stick translation isn’t enough. Something more complex needs to be in place to counteract these aides.
The MK profile supports many points of customizability (“knobs”) via a configuration file. Pressing CTRL-ENTER brings up the current configuration so that you can adjust the knobs. The default configuration file that ships with XIM is designed for FPS games (specifically, Halo 3) that use a 1600dpi mouse (such as the Logitech MX518). It’s easy to quickly try different adjustments – and you likely will). The default is based on how I play. For example, I have the “smoothness” knob turned off for Halo 3 so my reticule is very reactive. You may choose you want to have it feel “heavier”. Simply modify file and close it. XIM will reload your new values. Check out the log display to make sure you didn’t make any mistakes while editing the configuration file.
As mentioned, the MK profile supports many knobs of adjustment. In addition to standard buttons assignments (i.e. A = KeySpace), the controller stick mapping has many options to best map mouse moves to stick movement. For example:
DeadZone: All games have a threshold where stick movement isn’t registered until it reaches a certain point. This value makes it so that the smallest mouse change will result in on-screen movement. (More on this later.)
DeadZone Type: The shape of the dead zone (Circular or Square). (More on this later.)
YXRatio: The ratio between Y and X movement for games that don’t have independent adjustable X/Y sensitivity. For example, 2.0 means Y movement should be twice as much as the equivalent X movement.
TranslationExponent: When converting mouse movement to stick, this value allows you to do more than just a simple linear conversion. An exponential translation helps alleviate some of the acceleration that is there for controllers.
SensitivityPrimary: Movement sensitivity multiplier. This combined with the YXRatio provides any combination of X/Y sensitivity.
SensitivitySecondary: A second sensitivity value (typically higher than the primary). When activated, can be used for less-sensitive, non-aiming actions (such as driving vehicles).
SensitivityToggle: The button to use to activate the secondary sensitivity.
Smoothness: Smoothes out sudden movement by moving to the next translation position over time. The more smoothness results in a less jerky, but “heavier” moving reticule.
SmoothnessCutoff: Smoothness adjusts positioning over time. The cutoff value stops smoothing when it reaches this threshold.
Please make sure to configure your game for highest movement sensitivity. For example, in Halo 3, you’d change your look sensitivity setting to Insane.
A Word About Dead Zone
Dead zone is something that most gamers don't realize exists, but, is a very important part gaming when using a controller. A dead zone is the area of stick positioning that doesn't register as actual movement within the game. Without it, the reticule would constantly drift as thumbsticks generally never settle to a rest position (and where they do stop is typically different every time). Resting your thumb on the stick also constantly moves it slightly off center.
Where dead zone is necessary for thumbsticks, it is terrible for mice. Mice don't have the same rest-position problems as thumbsticks and the slightest movement is tracked by a mouse. At a minimum, a constant value needs to be added to any mouse movement that occurs to compensate for the dead zone. Otherwise, small movements wouldn't register and your movement will constantly "stall" if you aren't moving the mouse fast enough. Mouse and keyboard adapter devices like the SmartJoy FRAG (SJF) have this dead zone setting, whereas, the XFPS's mouse and keyboard feature does not. The XIM MK profile, of course, has this dead zone setting as well. But, it goes beyond this with allowing you to customize the shape of the dead zone too.
Most people that talk about dead zone never talk about its shape, but, it turns out that this is something that has a big impact on mouse translation quality. The XIM MK Profile has a dead zone "discovery" mode that you can use to not only determine the size of the dead zone, but, also learn more about its shape. It does this by moving the stick by the current dead zone value horizontally, then vertically, then finally diagonally. If do this on Halo 3, you'll see that, at a dead zone of 35, the reticule moves in all 3 directions. Then, if you reduce to 34, movement stops in all directions. This means that Halo 3 has a square dead zone of 34. (If it were circular, then, movement wouldn't occur in the horizontal and vertical directions, but, would still occur in the diagonal direction.) This actually surprised me since that means you need to move the stick further to get your reticule to move diagonally. Again, most people don't realize this since thumbsticks are so imprecise. In Halo 3, it appears that diagonal movement is actually more sensitive than the other directions. This may have to do with the fact that you have to move the stick further diagonally to cause the reticule to move. When you are talking about a mouse (where you want the smallest of mouse movement to cause your reticule to move), it feels less controllable when dragging diagonally because of this.
The XIM MK profile allows you to specify whether you want your dead zone to be circular or square. I've found, in general, that mouse translation is better when you are working against a circular dead zone. But, how will this work with a game like Halo 3 where the dead zone is square? Turns out that a circular dead zone works nicely when it's grafted on top of the game’s square dead zone. Horizontal and vertical movements wind up being slightly beyond the dead zone area, whereas diagonal movement is slightly within. So, for Halo 3, a circular dead zone with a radius of 42 feels just right.
XIM MK Profile Performance
I’ve been playing Halo 2 and now Halo 3 for awhile now with XIM’s mouse and keyboard support and have been thrilled with its performance. I love being able to game on Xbox Live playing Halo 3 on my big HDTV, on my couch with the mouse and keyboard of my choice. Any mouse and keyboard will work. I use a Logitech MX518 1600dpi mouse and a Thermaltake Flare gaming keyboard:

Picture of my living-room mouse and keyboard gaming lap-board “rig” that connects to my XIM
Continued..