Autore Topic: Quesito sulle SDL  (Letto 1649 volte)

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Quesito sulle SDL
« il: 26 ſettembre 2011, 19:38:18 »
Sono consapevole che in questo periodo sto chiedendo come un forsennato, ma i forum servono ad ampliare/condividere le conoscenze giusto?  :lol:

Il mio quesito riguarda i codici di input delle SDL; come sapete sto scrivendo Emula e dal momento che una delle feature è avere uno schema di input comune a tutti gli emulatori sto scrivendo una parte del programma che modifica i vari file di configurazione degli emulatori per rispecchiare le preferenze di input dell'utente.

Mi sono imbattuto nella definizione dei tasti di VisualboyAdvance che recita:
Codice: [Seleziona]
# Keys values are in the format YXXX where Y is the device number. 0 means
# keyborad and XXX is the SDL define for the desired key (read SDL_keysym.h).
#
# If Y is greater than 0, it means joystick number Y-1 and it uses the
# following format for XXX:
#
# - if XXX < 20, XXX is the axis number multiplied by 2. An even number means
#   movement to the negative side (on the X axis, it means left). An odd
#   number means movement to the positive side (on the X axis, it mean
#   right). For the Y axis, negative means up and positive means down.
#   X axis is usally axis number 0 and Y is axis number 1.
# - if 20 >= XXX > 30, then XXX is the HAT number multiplied by 4 plus the
#   direction: 0 for up, 1 for down, 2 for right and 3 for left. Example:
#   0021 is HAT 0 down, 0026 is HAT 1 right.
# - if 80 >= XXX > 100, XXX is the joystick button number (XXX-080).
#
# Default key configuration is (value in parenthesis):
#
# Left          Left Arrow  (0114)
# Right         Right Arrow (0113)
# Up            Up Arrow    (0111)
# Down          Down Arrow  (0112)
# A             Z           (007a)
# B             X           (0078)
# L             A           (0061)
# R             S           (0073)
# Start         ENTER       (000d)
# Select        BACKSPACE   (0008)
# Speed up      SPACE       (0020)
# Capture       F12         (0125)
#
Joy0_Left=0114
Joy0_Right=0113
Joy0_Up=0111
Joy0_Down=0112
Joy0_A=007a
Joy0_B=0078
Joy0_L=0061
Joy0_R=0073
Joy0_Start=000d
Joy0_Select=0008
Joy0_Speed=0020
Joy0_Capture=0125

Io sinceramente non c'ho capito molto... c'è qualche anima pia che possa chiarirmi il concetto?
I codici dei pulsanti standard sono i codici ASCII, ma se dovessi mappare un Pad?
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
Re: Quesito sulle SDL
« Risposta #1 il: 26 ſettembre 2011, 22:47:52 »
Citazione da: "Allanon"
Io sinceramente non c'ho capito molto... c'è qualche anima pia che possa chiarirmi il concetto?
I codici dei pulsanti standard sono i codici ASCII, ma se dovessi mappare un Pad?

In effetti spiegato come hai trovato tu è un bordello.

Allora, le SDL danno un numero ad ogni pad connesso al pc.
Solo che ad esempio (ma qua anche con poseidon) se hai un pad con una croce direzionale e 2 analogici, per le SDL hai 3 pad connessi al pc.

Detto questo vba pare usare una maschera esadecimale per definire i pad ed i bottoni.

Quando trovi in modo generico  assi x ed y si riferiscono al pad digitale, mentre gli "hat" sono i "pomelli" degli analogici.

Tu hai quindi 4 bit che identificano (in VBA) il "pad in generale"    : Y X X X

Se Y < 1 stai definendo la tastiera

Se Y  è > 0 vuol dire che stai definendo un pad, ed il numero del pad nelle strutture sdl è y-1.

Perciò se trovi ad esempio 0222, il bit y è < 1 quindi xxx vuol dire un tasto della tastiera

Se trovi 1222 il bit y è > 0 e quindi stai usando il pad  in questo caso il pad che ha come id y-1 ovvero 0 (il primo pad)

Se stai usando il pad se il resto dei bit xxx è minore di 20, xxx è il numero dell'asse del pad moltiplicato per 2 + la direzione (0 è in genere l'asse x, 1 è l'asse y)  se il numero è  dispari= sinistra, pari=destra, per l'asse x  e per l'asse y se il numero è  dispari= su , pari=giù

Presumo che se xxx in decimale == 3, l'asse sarà la y e la direzione è su.

Se invece il resto dei bit xxx è >= 20 ma minore di 30, singifica che stai usando lo stick analogico in questo caso XXX significa che  l'id del joy analogico è (xxx-direzione)/4 con idjoy*4+0 = giù ,id*4+1=su etc.

A naso direi che se hai 27 come XXX in decimale  id=parte intera di 27/4= joy n°6,  direzione= parte decimale di (27/4) * 4 =3=sinistra

mentre 80>=xxx>100 indicano i bottoni premuti, facendo bottone= XXX-080.


E' una scelta macchinosissima però.

Se vedi ad esempio il define # Left          Left Arrow  (0114)
0 vuol dire keyboard
114 in decimale è 276 guardando il SDL_keysym.h  salta fuori che  è SDLK_LEFT= 276

Spero di non essere stato troppo contorto nella spiegazione, ma pare che sia questo quello che fa il vba :D
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Re: Quesito sulle SDL
« Risposta #2 il: 26 ſettembre 2011, 22:59:52 »
Mamma mia che casino...
grazie della spiegazione, credo di avere le idee un po' più chiare adesso.
Però una domandina al volo:
metti che ho un pad simile a quello della playstation, SDL "vede" tre pad? E i pulsanti?
 :think:

Domattina a mente fresca provo a fare qualche esperimento  :D
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
Re: Quesito sulle SDL
« Risposta #3 il: 27 ſettembre 2011, 01:05:07 »
Citazione da: "Allanon"
Mamma mia che casino...
grazie della spiegazione, credo di avere le idee un po' più chiare adesso.
Però una domandina al volo:
metti che ho un pad simile a quello della playstation, SDL "vede" tre pad? E i pulsanti?
 :think:

Domattina a mente fresca provo a fare qualche esperimento  :D


vede anche quelli, sul vba
Citazione
 mentre 80>=xxx>100 indicano i bottoni premuti, facendo bottone= XXX-080.

Citazione da: "Allanon"
metti che ho un pad simile a quello della playstation, SDL "vede" tre pad?
Hai ragione scusa, mi ricordavo un espediente che avevo usato per far funzionare un joy dual-analog su morphos , in realtà più che 3 pad distinti SDL vede  6 "assi" diversi , 2 per ogni joy.

Ad esempio questo è il codice SDL di un mio mezzo port di grid wars 2:

Codice: [Seleziona]
SDL_JoystickGetAxis(gJoystick, 0) <----- asse x primo joy analogico
SDL_JoystickGetAxis(gJoystick, 1) <----- assse y primo joy analogico

SDL_JoystickGetAxis(gJoystick, 3) <----- asse x secondo joy analogico
SDL_JoystickGetAxis(gJoystick, 2) <----- assse y secondo joy analogico


Al di là delle SDL, purtroppo ti tocca codificare  i vari valori nelle preferenze di vba.
l'unica è smanettare un po' e vedere :D :D , perchè in effetti è un bel bordello configurarlo :P

Edit :
qua c'è una configurazione anche del joypad http://http://mandrivausers.org/index.php?/topic/8836-configuring-visual-boy-advance/page__view__findpost__p__71924

questo invece è un programmino in c++ sul sito di vba per configurare il joy http://http://vba.ngemu.com/downloads/SDL-Test.cpp
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Tags: