ID fixo para os controles¶
É predefinido que o MAME não atribua números fixos (IDs) para os
dispositivos da entrada. Por exemplo, o driver de um controle
"joystick 1" pode ser atribuído inicialmente para Joy 1
, porém,
depois de uma reinicialização o mesmo controle pode aparecer como
Joy 3
.
O MAME enumera os dispositivos conectados e os atribui IDs com base na ordem da enumeração do controlador. Os fatores que podem causar a alteração destas IDs são, conectar ou desconectar os controles ou dispositivos USB, alterar as portas ou "hubs", assim como até mesmo a reinicialização do computador. Tais números são impossíveis de se prever.
É aqui onde a configuração do mapdevice
entra em ação. Ao adicionar
esta configuração ao
arquivo de configuração do controle, é possível
atribuir uma identificação fixa para o controlador do dispositivo,
garantindo ao MAME que o dispositivo definido sempre seja mapeado com a
mesma identificação.
Usando o mapdevice¶
O elemento XML mapdevice
é adicionado na entrada do elemento XML do
arquivo de configuração do controle. Dois atributos são necessários,
device
e controller
. Observe que os elementos mapdevice
apenas surtem efeito no arquivo de configuração do controle (definido
através da opção -ctrlr). Eles são
ignorados nos arquivos de configuração do sistema e no arquivo da
configuração padrão.
O atributo device
determina a ID do dispositivo correspondente da
entrada. Também pode ser uma substring da ID do dispositivo. Para
obter a ID do dispositivo da entrada, selecione-o no menu
Dispositivos de entrada:
Inicie a emulação de um sistema qualquer (
mame sf2
por exemplo).Pressione Tab e selecione Configurações da entrada.
Faça um clique duplo em Dispositivos de entrada.
Clique em qualquer um dos itens apresentados.
Faça um clique duplo em Copia a ID do dispositivo para que a ID seja copiada para a área de transferência.
Também será possível ver as IDs dos dispositivos da entrada através do
prompt de comando ou do terminal ao ativar o modo loquaz através da
opção -verbose
(mais detalhes
logo abaixo). O formato das IDs dos
dispositivos depende do tipo do dispositivo, do controlador do
dispositivo (driver), do módulo do provedor da entrada selecionada e
do sistema operacional. A ID dos seus dispositivo de entrada podem ser
muito diferentes dos exemplos mostrados aqui.
O atributo controller
atribui o token para o tipo do dispositivo da
entrada (JOYCODE
, GUNCODE
, MOUSECODE
por exemplo) e o número
para atribuir ao dispositivo separados por um sublinhado. A numeração
começa a partir do 1
, por exemplo, o token para o primeiro
controle será JOYCODE_1
, JOYCODE_2
e assim sucessivamente.
Exemplo de configuração¶
<!-- Veja uma versão deste arquivo aqui https://pastebin.com/fTbEsANJ -->
<mameconfig version="10">
<system name="default">
<input>
<mapdevice device="VID_D209&PID_1601" controller="GUNCODE_1" />
<mapdevice device="VID_D209&PID_1602" controller="GUNCODE_2" />
<mapdevice device="XInput Player 1" controller="JOYCODE_1" />
<mapdevice device="XInput Player 2" controller="JOYCODE_2" />
<port type="P1_JOYSTICK_UP">
<newseq type="standard">
JOYCODE_1_YAXIS_UP_SWITCH OR KEYCODE_8PAD
</newseq>
</port>
</input>
</system>
</mameconfig>
Acima definimos quatro mapeamentos, GUNCODE 1/2 e JOYCODE 1/2:
Os dois primeiros
mapdevice
definem o controle da pistola de luz do jogador 1 e 2 (player 1 e 2) para Gun 1 e Gun 2 respectivamente.Nós usamos uma cadeia de caracteres com os seus nomes brutos para que cada dispositivo combinem forma individual. Observe que, como este é um arquivo em formato XML, precisamos usar o caractere de escape
&
para representar o caractere&
.Os duas últimos elementos
mapdevices
, definem o o controle do jogador 1 e do jogador 2 para Joy 1 e Joy 2 respectivamente. Neste caso, estes são controles do tipoXInput
.
Listando os dispositivos disponíveis¶
Você deve estar se perguntando, como foi que nós obtivemos as IDs dos dispositivos usados no exemplo acima?
Rode o MAME com o parâmetro -v
para ativar o modo
loquaz. Assim será exibido no uma
lista de dispositivos disponíveis no terminal com a etiqueta
device id
.
Aqui um exemplo:
Input: Adding lightgun #1:
Input: Adding lightgun #2:
Input: Adding lightgun #3: HID-compliant mouse (device id: \\?\HID#VID_045E&PID_0053#7&18297dcb&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd})
Input: Adding lightgun #4: HID-compliant mouse (device id: \\?\HID#IrDeviceV2&Col08#2&2818a073&0&0007#{378de44c-56ef-11d1-bc8c-00a0c91405dd})
Input: Adding lightgun #5: HID-compliant mouse (device id: \\?\HID#VID_D209&PID_1602&MI_02#8&389ab7f3&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd})
Input: Adding lightgun #6: HID-compliant mouse (device id: \\?\HID#VID_D209&PID_1601&MI_02#9&375eebb1&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd})
Input: Adding lightgun #7: HID-compliant mouse (device id: \\?\HID#VID_1241&PID_1111#8&198f3adc&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd})
Skipping DirectInput for XInput compatible joystick Controller (XBOX 360 For Windows).
Input: Adding joystick #1: ATRAK Device #1 (device id: ATRAK Device #1)
Skipping DirectInput for XInput compatible joystick Controller (XBOX 360 For Windows).
Input: Adding joystick #2: ATRAK Device #2 (device id: ATRAK Device #2)
Input: Adding joystick #3: XInput Player 1 (device id: XInput Player 1)
Input: Adding joystick #4: XInput Player 2 (device id: XInput Player 2)
Além disso, quando os dispositivos são reatribuídos usando elementos os
mapdevice
no arquivo de configuração do controle, para ver se as
configurações foram aplicadas ou não use o
modo loquaz e veja as linhas com
Remapped
indicam que as configurações foram aplicadas com sucesso,
exemplo:
Input: Remapped lightgun #1: HID-compliant mouse (device id: \\?\HID#VID_D209&PID_1601&MI_02#9&375eebb1&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd})
Input: Remapped lightgun #2: HID-compliant mouse (device id: \\?\HID#VID_D209&PID_1602&MI_02#8&389ab7f3&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd})
Input: Remapped joystick #1: XInput Player 1 (device id: XInput Player 1)
Input: Remapped joystick #2: XInput Player 2 (device id: XInput Player 2)
Limitações¶
Apenas será possível atribuir números fixos aos dispositivos da entrada caso o MAME receba as IDs fixas e únicas dos dispositivos do provedor do dispositivo e do sistema operacional. Isso nem sempre é o caso. Por exemplo, o provedor de um controle SDL pode não ser capaz de fornecer IDs exclusivas para muitos controles USB.
No caso de nenhum dos dispositivos que já foram configurados estejam conectados quando o MAME for iniciado, os dispositivos que forem conectados podem não estar com a numeração esperada.