Pre Release Testing: ==================== * check the version number VERSION="$(cat VERSION)" TAG="v${VERSION}" git tag -s "${TAG}" -m "xboxdrv ${TAG}" # Normal Source git archive --format=tar --prefix="xboxdrv-linux-${VERSION}/" ${TAG} | bzip2 -c > /tmp/xboxdrv-linux-${VERSION}.tar.bz2 git push --tags Stuff to do before 0.6.0 release: ================================= * axis-map must take range into account * gives weird not helpful error message: --ui-axismap x1=ABS_X2 * output information for evdev must output KEY_#342 instead of just 342 * Add: --evdev-absmap ABS_X2+=RT,-ABS_X2+=LT to allow mapping of half-axes (syntax is inconsistent with axis inverting) - write man page entry * evdev handling needs to handle [-1,1] axis differently from [0,1] axis http://ps3.jim.sh/sixaxis/usb/ see evdev_controller.cpp:165 * allow separate deadzone for each axis * create dummy joystick axis for the joystick device, see: /usr/src/linux-source-2.6.35/drivers/input/joydev.c /usr/src/linux-source-2.6.35/drivers/input/mousedev.c * make evdev grab optional: --evdev-grab Takes exclusive ownership of the event device, all events are directed to xboxdrv and no other application will be able to receive events. --evdev-no-grab * allow binding of scripts to a button * --ui-axismap LT=KEY_A:KEY_B:1 Here KEY_B is the key you want to send and KEY_A is a random other key that you don't need. It's a hack as mapping both to KEY_B seems to cause some trouble with automatic key repeat for some reason. Note that you must not combine this with --trigger-as-zaxis as that will disable LT and RT * should actually send everything, not just the onces that are needed, rest could be handled by ButtonMap/AxisMap: if (cfg.trigger_as_zaxis) { send_axis(XBOX_AXIS_TRIGGER, (int(msg.rt) - int(msg.lt))); } else if (cfg.trigger_as_button) { send_button(XBOX_BTN_LT, msg.lt); send_button(XBOX_BTN_RT, msg.rt); } else { send_axis(XBOX_AXIS_LT, msg.lt); send_axis(XBOX_AXIS_RT, msg.rt); } * axismap doesn't hamonize with axismap: --ui-axismap LT=KEY_A:KEY_A:1 * invert y axis on --evdev * add Playstation3 controller config to examples ./xboxdrv \ --evdev /dev/input/event6 \ --evdev-absmap ABS_X=x1,ABS_Y=y1 \ --evdev-absmap ABS_Z=x2,ABS_RZ=y2 \ --evdev-absmap ABS_#48=lt,ABS_#49=rt \ --evdev-keymap BTN_THUMB=tl,BTN_THUMB2=tr \ --evdev-keymap BTN_BASE5=lb,BTN_BASE6=rb \ --evdev-keymap KEY_#302=a,KEY_#301=b,BTN_DEAD=x,KEY_#300=y \ --evdev-keymap BTN_TRIGGER=back,KEY_#720=guide,BTN_TOP=start \ --evdev-keymap BTN_TOP2=du,BTN_PINKIE=dr,BTN_BASE=dd,BTN_BASE2=dl * review error handling on missing enums in: src/enum_box.hpp, revert last change and solve the issue in str2key/key2str * allow --type to work even when --device-by-id is not given * axis emulation --ui-axisemulation A:B=ABS_X:5 * rewrite to use no floats: scale_deadzone(int16_t value, const int deadzone) scale_trigger_deadzone(uint8_t value, int deadzone) * documentation on keyboard combinations for axis seems lacking * ini support * endpoints can be taken directly from the usb configuration, thus avoiding issues with nummeric endpoints * bcdDevice (product release version) seem to indicate type (to many possible versions, not enough data): new controller with merged endpoints: bcdDevice: 0x0114 old ones: 1.10 better way then to check for endpoints maybe * give a hint in the documentation on how to do multi line comments: xboxdrv \ --buttonmap A=X,X=A `# swap A and X` \ --buttonmap B=Y,Y=B `# swap B and Y` * 045e:028f is the play&charge kit, give an error message when somebody tries to use that * axis-min/max range must be transmitted to AxisEvent (maybe normalize to float) * match by protocol not, just vendor/product, from xpad.c: /* Xbox 360 has a vendor-specific class, so we cannot match it with only * USB_INTERFACE_INFO (also specifically refused by USB subsystem), so we * match against vendor id as well. Wired Xbox 360 devices have protocol 1, * wireless controllers have protocol 129. */ #define XPAD_XBOX360_VENDOR_PROTOCOL(vend,pr) \ .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, \ .idVendor = (vend), \ .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \ .bInterfaceSubClass = 93, \ .bInterfaceProtocol = (pr) #define XPAD_XBOX360_VENDOR(vend) \ { XPAD_XBOX360_VENDOR_PROTOCOL(vend,1) }, \ { XPAD_XBOX360_VENDOR_PROTOCOL(vend,129) } Docu ==== * docu on how to write a wrapper script needs to be moved to xboxdrv manpage Packaging ========= * split xboxdrv-daemon into a separate .deb package Cleanup ======= * improve output on which uinput devices are created Feature ======= * --extra_devices is broken (no longer implemented and somewhat tricky to reimplement) * add --list-keys --list-x11-keys --list-axis --list-rel etc. * figure out a way to make userspace force feedback driver not become dead processes * better keyboard emulation via analog sticks: axis must not be handled separately as this leads to issues with the diagonals (see mail from Matthew G <matt@remort.org>) (maybe relative axis can help?) * test TR:Anniversary with max effect 16 fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) <- 21 == EV_FF (status report?) http://www.immersion.com/developer/downloads/ImmFundamentals/HTML/ http://msdn.microsoft.com/en-us/library/bb219655(VS.85).aspx Later versions: =============== * complex macro programming, i.e. complete evdev sequences, not just key combinations * The World Tour wireless guitar have 5 buttons and a slide. Currently, the slide is mapped to the x axis, but I don't know if it allows multiple presses at once. I don't have a Xbox, so I don't know if it is allowed at all in the console. Colour: Button: Value in X1 (slide): Green A -27500 Red B -12900 Yellow Y +7000 Blue X +18500 Orange LB1 +32767 (None) (None) -300 * get rid of guitar, merge into xbox360 * send FF status reports (maybe, is that used by anything?) * figure out the max values of force feedback effects so that stuff is mapped more properly (kind of done, could need verification) * add --detach option that detaches any existing driver (needed for gamepads that use HID) * figure out which devices xorg/hal handles as keyboard and how to make it always happen, seems to require two keyboard keys, devices with only one aren't registered * display ui-buttonmap in the configuration overview, tricky since we don't differ between default bindings and user created ones, also which bindings get used depends on other configuration options * report more precisly what devices got created, include device name (HAL has that information) * add support for LED messages (can this be used by anything?) * add support for analog buttons (not all that useful, but would still be nice to have) * include id/wid in device name (would be cleaner, since it makes the device unique, but would make Xorg trouble worse) http://lists.libsdl.org/pipermail/sdl-libsdl.org/2007-March/060263.html - fix http://userweb.kernel.org/~dtor/eviocgbit-bug.html in evtest - cleanup evtest some more, add more features - using rumble in scripts doesn't work, since you can't reset rumble back to 0,0 - thread away on all endpoints - read from stdin on the main thread - send output to file or so usb -d 005:006 -c 5:in,5:out,6:in,7:in,8:out -o /tmp/out, else stdin Daemon Mode: SYSFS{idVendor}=="045e", SYSFS{idProduct}=="028e", RUN+="/home/ingo/projects/xboxdrv/trunk/xboxdrv --daemon" Unpluging doesn't work and causes xboxdrv processing running amok Pictures of Xbox360 and controller: http://g-prime.net/x360/ Add examples to Readme for specific games Use cases: ========== * flightsim: expects: X/Y Rudder Throttle XBox: Left-Stick LT+RT Right-Stick(rel) * FPS: expects: Mouse-X/Y Walk-X/Y Trigger XBox: Left-Stick RickStick Trigger(btn) * 2D Jump Run (done) needs dpad first FIX: ===== filter auto known unknown messages uinput name should be configurable uinput busid/devid shouldn't be hardcoded Battery warning: LEDs 1,4 then 2,3 over and over ~10 times rapidly * a way to send keyboard combination sequences or more general event sequences * abs input must be normalized to min/max * rel input must be scaleable * Cleanup naming conventions sending rumble is slow and delayed, gets buffered up * examples in doc for --dpad as buttons and other options Figure out: =========== Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 Unknown data: bytes: 3 Data: 0x01 0x03 0x00 Different Computer/Pad: Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 Unknown data: bytes: 3 Data: 0x01 0x03 0x00 /* Happens with XBox360 Controller sometimes Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 -- different session: Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 Unknown data: bytes: 3 Data: 0x01 0x03 0x06 */ ----- Guitar: Tilt Sensor: is mapped to the second axis of S2, to LT and RT (three parts) - Range for 2nd axis of S2 : -32768 when guitar is straight down and 32767 when she is straight up. - Range for LT : ~200 not very precise and ~60 at min. - Range for RT : ~190 not very precise and ~55 at min. dummy should stay mostly 0, except the position five and six, which are the LT/RT trigger. We can either just ignore them or you can try to find out if they have any meaning. They control guitar rotation, hmm hard to explain, it's when I rotate the guitar in front of me, it detects if the guitar is in the correct position. ----- * Question: Firestorm Dual Power: How to get rumble to work when there is no endpoint to send data to? * Guitar Hero Controller: - lsusb -v output looks like a XBox360 controller - usbcat looks like an XBox360 controller - it doesn't report events http://forums.gentoo.org/viewtopic-p-5061825.html http://gentoo-wiki.com/HOWTO_Xbox_360_controller_on_Linux http://happypenguin.org/show?xboxdrv http://ubuntuforums.org/showthread.php?t=404577&page=16 http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) * wireless reports battery level * disconnecting the pad in use will just let the driver wait forever for new data, any way we can catch a disconnect? * a way to configure the deadzone for axis (might be needed for some games) * Add support for dancepad/mats (should just mean cleanup up the buttons/axis not provided by the dancepad/mat) New Command Line Options: --button-map BTN BTN is a list of integers, where each integer corresponds to the event that gets send A,B,X,Y,LB,RB,SL,SR,LT,RT,Start,Mode,Back,DPAD-UP,DPAD-DOWN,DPAD-LEFT,DPAD-RIGHT A,B,X,Y,TL2,TR2,TL,TR, #define BTN_A 0x130 #define BTN_B 0x131 #define BTN_C 0x132 #define BTN_X 0x133 #define BTN_Y 0x134 #define BTN_Z 0x135 #define BTN_TL 0x136 #define BTN_TR 0x137 #define BTN_TL2 0x138 #define BTN_TR2 0x139 #define BTN_SELECT 0x13a #define BTN_START 0x13b #define BTN_MODE 0x13c #define BTN_THUMBL 0x13d #define BTN_THUMBR 0x13e * add support to remap keys * allow mouse emulation * allow swapping of dpad and analog axis, so that dpad is first instead of last * merge this thing with Pingus Input handling to get a very flexible framework? * ... [[ InputDrv ]] ============== Needed features: ================ * stick to mouse * relative-axis (throttle doesn't flip back, a stick does, need to handle that) * trigger to button * dpad to axis * dpad to button * inversal of axis * soft-axis for dpad (controller (button (name "BTN_X") ;; X and Y send out BTN_X events (device (xbox360-button "Y") (xbox360-button "X"))) (button (name "BTN_A") (device (inverse (xbox360-button "Y")))) (axis (name "ABS_X") ... ) Controls: ========= * invert button * toggle button * autofire button * invert axis * deadzone axis * split axis (gas/break) * join axis (trigger -> zaxis) * non-linear axis (gamma or so) [[ Xorg Input Hotplug ]] ======================== Not available in Ubuntu and still rough, would work via Dbus, see: http://www.x.org/wiki/XInputHotplug d-feet is a Dbus debuging/viewing tool. Example Dbus stuff: ------------------- dbus-send --system --type=method_call --print-reply --dest=org.x.config.display0 /org/x/config/0 org.x.config.input.remove uint32:5 Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.x.config.display0 was not provi Doing polling seems to lose some events dbus-send --dest=org.gnome.ScreenSaver / dbus-send --dest=org.freedesktop.ExampleName \ /org/freedesktop/sample/object/name org.freedesktop.ExampleInterface.ExampleMethod \ int32:47 string:'hello world' double:65.32 \ array:string:"1st item","next item","last item" \ dict:string:int32:"one",1,"two",2,"three",3 \ variant:int32:-8 \ objpath:/org/freedesktop/sample/object/name dbus-send --dest=org.x.config.display0 \ /org/x/config/0 org.x.config.input.add dbus-send --dest=org.x.config.display0 /org/x/config/0 org.x.config.input.remove int32:5 dbus-send \ --dest=org.x.config.display0 \ org.freedesktop.DBus.Introspectable \ org.freedesktop.DBus.Introspectable.Introspect \ Wine Force Feedback: [ingo@duo:~/projects/xboxdrv/trunk/experimental]$ ~/bin/tombraider-anniversary ERROR: Module xpad does not exist in /proc/modules USB Device: 003:002 Controller: "Microsoft Xbox 360 Controller" (idVendor: 0x045e, idProduct: 0x028e) Controller Type: Xbox360 Deadzone: 0 Rumble Debug: off Rumble Speed: left: 0 right: 0 LED Status: auto ButtonMap: none AxisMap: none Square Axis: no RelativeAxisMap: none AutoFireMap: none ForceFeedback: enabled Starting with uinput... done Your Xbox/Xbox360 controller should now be available as: /dev/input/js1 /dev/input/event10 Press Ctrl-c to quit Unknown: len: 3 data: 0x02 0x03 0x00 user.reg is not a valid registry file fixme:ole:CoInitializeSecurity ((nil),-1,(nil),(nil),0,3,(nil),0,(nil)) - stub! err:ole:CoGetClassObject class {9a5ea990-3034-4d6f-9128-01f3c61022bc} not registered err:ole:CoGetClassObject class {9a5ea990-3034-4d6f-9128-01f3c61022bc} not registered err:ole:create_server class {9a5ea990-3034-4d6f-9128-01f3c61022bc} not registered fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported err:ole:CoGetClassObject no class object {9a5ea990-3034-4d6f-9128-01f3c61022bc} could be created for context 0x17 fixme:win:EnumDisplayDevicesW ((null),0,0x33ef54,0x00000000), stub! fixme:system:SystemParametersInfoW Unimplemented action: 59 (SPI_SETSTICKYKEYS) fixme:d3d:IWineD3DDeviceImpl_EvictManagedResources (0x140a78) : stub fixme:d3d:IWineD3DDeviceImpl_EvictManagedResources (0x140a78) : stub fixme:d3d:IWineD3DDeviceImpl_EvictManagedResources (0x140a78) : stub fixme:d3d:IWineD3DDeviceImpl_EvictManagedResources (0x140a78) : stub fixme:d3d:IWineD3DDeviceImpl_EvictManagedResources (0x140a78) : stub fixme:d3d:IWineD3DDeviceImpl_EvictManagedResources (0x140a78) : stub err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 fixme:dinput:JoystickAImpl_SetProperty DIPROP_AUTOCENTER(0) fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 err:ole:CoGetClassObject class {4590f811-1d3a-11d0-891f-00aa004b2e24} not registered err:ole:CoGetClassObject no class object {4590f811-1d3a-11d0-891f-00aa004b2e24} could be created for context 0x1 Headset: nonetype: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 0 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 257 code: 1 value: 0 XXX FF_UPLOAD: rumble upload: effect_id: 0 effect_type: 82 EFFECT: FF_CONSTANT level: 26880 envelope: attack_length: 16 attack_level: 32767 fade_length: 16 fade_level: 32767 -------------------------------- fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) type: 21 code: 0 value: 1 EV_FF: playing effect: effect_id = 0 value: 1 -------------------------------- type: 21 code: 0 value: 0 EV_FF: playing effect: effect_id = 0 value: 0 -------------------------------- type: 21 code: 0 value: 0 EV_FF: playing effect: effect_id = 0 value: 0 -------------------------------- type: 257 code: 2 value: 0 FF_ERASE: rumble erase: effect_id = 0 -------------------------------- fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:LinuxInputEffectImpl_Download Could not upload effect. Assuming a disconnected device. fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) wine: Unhandled page fault on read access to 0x35545844 at address 0x35545844 (thread 0009), starting debugger... Unhandled exception: page fault on read access to 0x35545844 in 32-bit code (0x35545844). Register dump: CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b EIP:35545844 ESP:0033f2f8 EBP:0033f324 EFLAGS:00210206( - 00 - RIP1) EAX:12b895d0 EBX:7c08fff4 ECX:116fe938 EDX:1294b6e8 ESI:12c59178 EDI:116fe920 Stack dump: 0x0033f2f8: 7c07d52a 12b895d0 b7ed0094 116fe938 0x0033f308: 0033f344 0033f344 b7ed0189 7c07d45b 0x0033f318: 7c08fff4 116fe920 00000000 0033f344 0x0033f328: 7c06f45f 116fe920 00000001 12b895d0 0x0033f338: 00000011 03a23650 039fbac0 03a2369c 0x0033f348: 00412e8a 116fe920 039fbbb0 03a23650 Backtrace: =>1 0x35545844 (0x0033f324) 2 0x7c06f45f IDirectInputDevice2AImpl_Release+0x4f() in dinput (0x0033f344) 3 0x00412e8a in tra (+0x12e8a) (0x03a2369c) 4 0x00000000 (0x00000000) 0x35545844: addb %al,0x0(%eax) Modules: Module Address Debug info Name (88 modules) PE 400000- c5b000 Export tra PE 18000000-18033000 Deferred binkw32 ELF 7b800000-7b93d000 Deferred kernel32<elf> # EOF #