Custom Controller Configuration

Controller configuration is specified in configuration files bundled with FS-UAE. The folder share/input/ contains the bundled configuration files. There is one .ini file per controller type.

FS-UAE Launcher comes with a joystick / gamepad configuration tool (started from the settings dialog). This tool will create configuration files for you and it is highly recommended.

Custom configurations can be placed in the directory:

(My) Documents/FS-UAE/Controllers/

The name of the ini file is the system name of the controller, converted to lowercase, with an underscore between each work. Characters other than letters and numbers are also converted to underscore, and there is never more than one underscore between each word, and the name will not start nor end with underscore.

Example: Controller (Xbox 360 Wireless Receiver For Windows) becomes

controller_xbox_360_wireless_receiver_for_windows.ini

This forum thread has some more information: http://eab.abime.net/showthread.php?t=63800

Universal configuration file (recommended)

If you have a general-purpose gamepad with button layout more or less like PlayStation/Xbox controllers (e.g. a hat, two analog sticks, 4 buttons to the right, start/select and shoulder/trigger buttons), you can create a config which maps the controller events to generic event names (which again is automatically mapped against amiga input events). In this way, the same configuration can be shared with other emulators using the same configuration file format without having to create an explicit configuration for amiga, super nintendo, c64, and so on.

Here is a complete example for this kind of configuration file:

[default]
include = common/gamepad
axis_0_neg = lstick_left
axis_0_pos = lstick_right
axis_1_neg = lstick_up
axis_1_pos = lstick_down
axis_2_neg = rstick_left
axis_2_pos = rstick_right
axis_3_neg = rstick_up
axis_3_pos = rstick_down
button_0 = west_button
button_1 = south_button
button_2 = east_button
button_3 = north_button
button_4 = left_shoulder
button_5 = right_shoulder
button_6 = left_trigger
button_7 = right_trigger
button_8 = select_button
button_9 = start_button
button_10 = lstick_button
button_11 = rstick_button
button_12 = menu_button
hat_0_left = dpad_left
hat_0_right = dpad_right
hat_0_up = dpad_up
hat_0_down = dpad_down

What you must to is to check (with a joystick test application) what button number each physical button on your gamepad has, and update the configuration accordingly.

Example: If you test a button labelled  “start” on your controller, and you want to map this to the generic event “start_button”, you press “start” in a joystick tester program. Let’s say the program indicates that this is button 5! In the config file, the first button is numbered 0, so if the joystick test program calls the first button “1”, you must subtract one from the number, and you get:

button_5 = start_button

This line is important to include:

include = common/gamepad

– since this imports the common gamepad configuration file which maps the generic button names to Amiga joysticks.

Additional information

Axes on your controller are identified as axis_x_neg/axis_x_pos where x is the zero-based index (the first axis is 0). Hat events are referred to with hat_x_left, hat_x_right, hat_x_up and hat_x_down (x is hat number – the first hat is 0). Button events are simply button_x (where button_0 is the first button on the controller).

Also, remember to check the log file to see whats going on when FS-UAE starts. You will probably get some hints to what’s wrong if it does not work.

If you create a configuration file to support your controller, I would very much like a copy of this file to include with FS-UAE in future releases.

Amiga-specific configuration file

If you have a controllers which looks nothing like a “standard” gamepad, if can be better to create a specific configuration file and map the Amiga joystick events directly.

If you created a universal configuration you do not have to add [menu] or [amiga] sections.

The ini file should contain a section [amiga] with a mapping between controller events and amiga joystick events. You should also create a [menu] section where you provide mapping for the menu navigation (if you want to navigate the menu).

Here is an example for a joystick with one stick and 4 buttons:

[menu]
axis_0_neg = left
axis_0_pos = right
axis_1_neg = up
axis_1_pos = down
button_0 = primary
button_1 = back
button_2 = select
button_3 = start

[amiga]
axis_0_neg = left
axis_0_pos = right
axis_1_neg = up
axis_1_pos = down
button_0 = 1
button_1 = 2
button_2 = 3

Amiga events are named left, right, up, 1 (fire), 2 (secondary fire) and 3 (tertirary fire). (see common/gamepad.ini for Amiga CD32 controller mapping).

78 thoughts on “Custom Controller Configuration

  1. Is there some up to date instruction on how to make a joystick button make the latest beta and/or dev version of FS-UAE send a keyboard key to the game? Please, stepwise instructions.

    I can go to settings… > joystick > and doubleclick on xinput controller. This shows an image of a joystick. But it looks like I can only there pick a hardware button on my joystick that will send a joystick event to the game? And it looks to be correct already. But again I want to remap a button to instead send a keyboard key to the game.

    I am probably missing something but there is no information in the GUI on how to use it and this page doesn’t describe that settings page either. If I change some button and then change it back again I can click save. I see that there is a textfile xinput_controller_15_6_0_0_windows.conf in \Controllers. In it there is text like this

    [default]
    include = universal_gamepad
    axis_0_neg = lstick_left
    axis_0_pos = lstick_right
    axis_1_neg = lstick_up
    axis_1_pos = lstick_down

    Is it there I should manually make changes in order to get my joystick button to send a keyboard key? Do I edit the entries under [default]? Or do I make a new section (what title?). I guess I should put some code for a keyboard event on the right side of an = sign. Should I on the left side of it put something like button_12 or something like west_button ?

    I’m sorry if these are stupid questions but I do not see an answer to them here in the documentation. The documentation seems to presuppose that the user knows the interface very well already, which a new user of course do not.

    • One more thing. I would want to map the joystick differently for different games. For example in the game North and South I want a button to send the left shift key, and in other games some other keys. Do I manually create one copy of the .conf file in \Controller (once I understand how to set buttons in it) and then link each configuration file to each individual game? The controls will of course be mostly the same for all games.

      • Hi, I will provide an answer if you leave a proper email address. No point in replying if you don’t see the answer!

    • Hi, I will provide an answer if you leave a proper email address. No point in replying if you don’t see the answer!

      • I would also like the answer to this. Just got a nice setup going and need to be able to map controls on a per-game basis.

  2. Hi,
    i´ve a big Problem. I´ve tried to use the NES30 controller and it doesn´t work.
    My Questions: 1. where´s the config folder for my joypad? (Mac)
    2. it does not show in the settings/joystick screen.
    Can you help me please?
    THX

    • Hi, the joystick device should appear in FS-UAE Launcher settings (and in FS-UAE) if it is recognized by the operating system as a joystick device. Have you checked if other applications detect it as a *joystick/gamepad* device? Perhaps a driver is needed for the device?

      • Hi! Thx for the Answer.
        The Device is detected in all other Programs like OpenEmu etc. I can see it in the Joystick list in the main screen. But in the Preferences it´s not.
        Can I put a own config for the Controller?
        Wheres the Folder for it?
        My USB Joystick works fine but the NES30 is not in the list.
        Sorry for my bad English, I´m from Germany and big THX for your great work!!!

          • Ok I´ve updated to the latest Version.
            But same Problem as before. In the Main Screen “Joystick” the 8Bitdeo is available. In the Preferences it´s not.
            Can I Config it manually? Where´s the path for the config file?
            THX!!!

          • And another Problem.
            When I will change the Keys from “Up Arrow” To “W Key” it does´t have a effect!
            keyboard_key_w = action_key_cursor_up
            I´ve wrote it in the Preferences-Advance
            The NES30 can work as a Bluetooth Keyboard. But the Fire Key is another. (it´s not the ALT or CMD)
            Strange ;(
            Thx

          • keyboard_key_w = action_key_cursor_up probably does not do what you think. What this does is: when you press W on your keyboard, the Amiga sees a keypress on the Amiga “cursor up” key.

  3. Hi FrodeSolheim, please help.

    I’ve a Microsoft wired 360 pad. It perfectly works in OSX (I use Xbox 360 Controllers utility in OSX) and it’s automatically recognized by FS-UAE.
    However all my attempts to personalize buttons are failing miserably. 🙁

    I spent all the night trying to assign the “i” key to the west button and nothing worked. These are some of my tries:
    joystick_0_west_button = keyboard_key_i
    joystick_1_west_button = keyboard_key_i
    west_button = keyboard_key_i
    Controller_west_button = keyboard_key_i
    Controller_button_2 = keyboard_key_i
    Joystick_button_2 = keyboard_key_i
    button_2 = keyboard_key_i

    Everything is ignored.

    Any idea? Joypad is seen as “Controller” by the program

    • Hi, you need to use action_key_i on the right hand side instead of keyboard_key_i (You only use keyboard_key_i on the left hand side if you want to map an action to the i key on the host keyboard).

        • Sorry, got another little issue.

          I’m personalizing the joypad for “Elite” game.
          It uses “space” to accelerate and “slash” to reduce speed.

          While I was able to assign space to the right trigger with: Controller_right_trigger = action_key_space
          I’ve no luck with:
          Controller_left_trigger = action_key_slash

          If I assign any other key, like action_key_space it works, so I guess there’s something wrong with the slash key? The key that correctly works on keyboard is / that usually on Mac does - (minus) but I guess it’s a UAE button remapping? Anyway in the game it correctly reduces speed.
          Before game starts there’s a quick workbench screen where I can test the joypad mapping for a pair of seconds and action_key_slash doesn’t write anything.

          action_key_backslash works (but of course it’s not used in the game)

          Sorry to keep bothering you with boring questions but there are lots of bad pirates out there that demand to be punished. 😉

          • An alternative could be combining mouse 2nd button with mouse down movement (it’s an alternative way to lower speed), but I don’t know if it’s possible to map two actions to one key.
            I’ve tried to do this in the config file:
            Controller_left_trigger = action_joy_0_2nd_button
            Controller_left_trigger = action_mouse_0_down

            but it seems only the second one is working.

          • No, at this point, only one action can be assigned to each input event.

          • Omg, you saved me again.

            I was looking at the Custom Input Mapping page and assuming it was ok to change any:

            keyboard_key_[key]

            into:

            action_key_[key]

            I was wrong of course.

            Many many thanks again Frode, the Intergalactic Federation of Free Planets will be happy to assign you a Gold Merit medal. 🙂

  4. Pingback: FS-UAE: Emulador de Amiga | Cógeme la matrícula

  5. Hey Frode….

    Ii just got a Ps4 controller today. Got some a wierd issue with it.

    In general, everything works fine (using osx yosemite) – pad is detected named “wireless controller” and I am able to map all the buttons using the launchers controller setup as expected. In game everything performs correctly except “menu_button” – this will. It work whatever button i map it to – there are no problems mapping any of the other controls to the pad. Menu button is working normally also on my PS3 pad but that’s an in-built mapping.

    Obviously I am just using f12 atm but it’s not ideal…. Any thoughts? The controller setup section detects the button I am using without problems. Is there anythibg I can send over to help detect the issue?

    Also, would it be possible to get fs-uae to detect OS X devices by their “relabelled” names?
    Thanks

    • Hi, is this with FS-UAE 2.4.1? If so, can you try the latest development version instead?

      • Hi Frode,

        This is with the latest dev version – i dont tend to use the release version!

        • Hmm, that’s strange, I tried it myself and it works just fine here…
          – You can of course send me the controller config file (to frode@fs-uae.net) and I can compare with mine.

    • I’m just guessing here – perhaps the “D-Pad” isn’t part of the joystick interface, but instead appears as a keyboard with “cursor keys” or something like that?

      * If you have the config files for some of the emulators you have configured, you can send those to frode@fs-uae.net and I can check
      * You can also try the “joystick calibration dialog” in Windows to test the buttons, and see if the D-Pad is usable there.

    • Thanks, I got the config file from snes9x 🙂 It looks like my guess was correct (the relevant bits from your snes9x config file):

      Joypad1:Up = Up
      Joypad1:Down = Down
      Joypad1:Left = Left
      Joypad1:Right = Right
      Joypad1:A = (J0)Button 0
      Joypad1:B = (J0)Button 1
      Joypad1:Y = (J0)Button 4
      Joypad1:X = (J0)Button 3
      Joypad1:L = (J0)Button 6
      Joypad1:R = (J0)Button 7
      Joypad1:Start = (J0)Button 11
      Joypad1:Select = (J0)Button 2

      Here we see that the (keyboard) cursor keys are mapped to the SNES directional pad, while buttons on joystick 0 is mapped to the other SNES controller buttons. This means that your gamepad D-Pad is actually pretending to be a keyboard with cursor keys.

      For easy configuration, FS-UAE requires that a joystick device actually is *one* device, and not using hacks like this (presents itself as two devices). It looks like your gamepad is configurable/reprogrammable, so perhaps you can reconfigure to be *a single joystick device*?

      Another possibility is to only map the joystick “buttons” and use FS-UAE custom input mapping to map the cursor keys to the Amiga joystick (you can add these lines to advanced settings in FS-UAE Launcher):
      keyboard_key_up = action_joy_1_up
      keyboard_key_down = action_joy_1_down
      keyboard_key_left = action_joy_1_left
      keyboard_key_right = action_joy_1_right

      This should work fine, but there is a catch. In this case, the cursor keys (= the d-pad on your “gamepad”) is always mapped to the primary joystick port. So if you insert your gamepad in the mouse port, the buttons will be mapped to the Amiga joystick in the mouse port, but the cursor keys (“D-Pad”) will still be mapped to the joystick port.

      In short, it will work fine as long as you use the gamepad as primary Amiga joystick. If you get your gamepad reconfigured as a proper gamepad (D-pad is also joystick buttons/hat/axes), it will work properly when you use it in both Amiga ports.

  6. Hello

    Been using your emulator & I have to say it’s brilliant upgrade from my WinFellow emulator. Anyhow, I have a FC-30 Bluetooth joypad & the fire button works for games like SWIV, Super Twintris etc… but, the digital pad does not work to move at all? I have gone to the custom key mapping section but it lets me change all buttons on the pad except the move pad?

    • Hi, what OS do you have, and does the gamepad work in other games/applications? -And you meant that you have tried the mapping tool in FS-UAE Launcher, but that the d-pad cannot be mapped in this tool?

      • It works on the snes 9x emulator for mapping & sega fusion emulator too. I’m on windows 8 using a tablet asus t100. Can the joypad be used the (+) part that is for movement.

        • So to confirm the wireless bluetooth controller I have is basically a Super Nintendo joypad, the buttons can be mapped using your launcher & then going to settings:

          L, R, Select, Start, B, X, Y & A.

          It’s just the movement pad that doesn’t let you configure it?

  7. Hello,
    Could I ask on how can I play Amiga games with my 360 wireless controller?. Here is my problem, fs use detects my controller and when playing games I can go left, right, up and down but the x,y,a,b buttons also go up down left and right and the fire button is on the right position of the “star” joystick. I tried to use a keyboard and mapping the keys using an external program “joystick mapper” and I gave the left alt key and left control key buttons on the 360 controller but it doesn’t work. How can I fix this?. Thank you.

    • Hi, your problem sounds a bit weird. On most platforms, the wireless controller should be recognized automatically. Perhaps you’ve got a problem because you’re using a “joystick mapper” program? Please try without, and also try mapping all the buttons through the joystick setup dialog in FS-UAE Launcher preferences if it does not work out of the box!

    • No, sorry, this is not configurable, not yet anyway. Can you describe your problem in more detail?

      • It s not a problem, It s normal, I prefer my pad less sensible for platform game (To use my analog pad as numeric pad).
        I can’t configure it directly in windows because somes applications need this “sensitivity” ^^.

        In platform game if you press down and just a little right or left in same time it s deadly.

  8. Hi Dude !!!

    How can i associate the left and right amiga mouse button to the left and right shoulders button on my xbox360 joypad ???

    thanks for the answer 😀

Leave a Reply

Your email address will not be published. Required fields are marked *