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).