Initial joypad support for cli UI.
This commit is contained in:
parent
59e59c7c83
commit
503e58fa51
|
@ -9,6 +9,9 @@
|
|||
#include "../debug.h"
|
||||
#include "../sndsdl.h"
|
||||
|
||||
#define DESMUME_NB_KEYS 13
|
||||
#define DESMUME_KEYMASK_(k) (1 << k)
|
||||
|
||||
volatile BOOL execute = FALSE;
|
||||
|
||||
SDL_Surface * surface;
|
||||
|
@ -20,6 +23,22 @@ SoundInterface_struct *SNDCoreList[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const u16 Joypad_Config[DESMUME_NB_KEYS] =
|
||||
{ 1, // A
|
||||
0, // B
|
||||
5, // select
|
||||
8, // start
|
||||
20, // Right -- Start cheating abit...
|
||||
21, // Left
|
||||
22, // Up
|
||||
23, // Down -- End of cheating.
|
||||
7, // R
|
||||
6, // L
|
||||
3, // Y
|
||||
4, // X
|
||||
-1 // DEBUG
|
||||
};
|
||||
|
||||
int Draw() {
|
||||
SDL_Surface *rawImage;
|
||||
|
||||
|
@ -33,11 +52,24 @@ int Draw() {
|
|||
return 1;
|
||||
}
|
||||
|
||||
u16 inline lookup_joykey (u16 keyval) {
|
||||
int i;
|
||||
u16 Key = 0;
|
||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
||||
if(keyval == Joypad_Config[i]) break;
|
||||
if(i < DESMUME_NB_KEYS)
|
||||
Key = DESMUME_KEYMASK_(i);
|
||||
printf("Lookup key %d from joypad...%x\n", keyval, Key);
|
||||
return Key;
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
BOOL click;
|
||||
unsigned short keypad;
|
||||
static unsigned short keypad;
|
||||
SDL_Event event;
|
||||
int end = 0;
|
||||
int nbJoysticks;
|
||||
int i;
|
||||
|
||||
#ifdef DEBUG
|
||||
LogStart();
|
||||
|
@ -63,37 +95,70 @@ int main(int argc, char ** argv) {
|
|||
|
||||
execute = TRUE;
|
||||
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == -1)
|
||||
{
|
||||
fprintf(stderr, "Error trying to initialize SDL: %s\n",
|
||||
SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
SDL_WM_SetCaption("Desmume SDL", NULL);
|
||||
|
||||
surface = SDL_SetVideoMode(256, 384, 32, SDL_SWSURFACE);
|
||||
|
||||
/* Initialize joysticks */
|
||||
nbJoysticks = SDL_NumJoysticks();
|
||||
printf("Nbr of joysticks: %d\n\n", nbJoysticks);
|
||||
|
||||
for (i = 0; i < nbJoysticks; i++)
|
||||
{
|
||||
SDL_Joystick * joy = SDL_JoystickOpen(i);
|
||||
printf("Joystick %s\n", i, SDL_JoystickName(i));
|
||||
printf("Axes: %d\n", SDL_JoystickNumAxes(joy));
|
||||
printf("Buttons: %d\n", SDL_JoystickNumButtons(joy));
|
||||
printf("Trackballs: %d\n", SDL_JoystickNumBalls(joy));
|
||||
printf("Hats: %d\n\n", SDL_JoystickNumHats(joy));
|
||||
}
|
||||
|
||||
keypad=0x0000;
|
||||
while(!end) {
|
||||
keypad=0x0000;
|
||||
|
||||
Uint8 *keys;
|
||||
keys = SDL_GetKeyState(NULL);
|
||||
if(keys[SDLK_UP]) keypad |= 0x40;
|
||||
if(keys[SDLK_DOWN]) keypad |= 0x80;
|
||||
if(keys[SDLK_RIGHT]) keypad |= 0x10;
|
||||
if(keys[SDLK_LEFT]) keypad |= 0x20;
|
||||
if(keys[SDLK_SPACE]) keypad |= 0x1;
|
||||
if(keys['b']) keypad |= 0x2;
|
||||
if(keys[SDLK_BACKSPACE]) keypad |= 0x4;
|
||||
if(keys[SDLK_RETURN]) keypad |= 0x8;
|
||||
if(keys['0']) keypad |= 0x200;
|
||||
if(keys['.']) keypad |= 0x100;
|
||||
|
||||
((unsigned short *)ARM9Mem.ARM9_REG)[0x130>>1] = ~keypad;
|
||||
((unsigned short *)MMU.ARM7_REG)[0x130>>1] = ~keypad;
|
||||
|
||||
|
||||
if (SDL_PollEvent(&event)) {
|
||||
switch(event.type) {
|
||||
case SDL_QUIT:
|
||||
end = 1;
|
||||
break;
|
||||
|
||||
|
||||
case SDL_KEYDOWN:
|
||||
switch (event.key.keysym.sym)
|
||||
{
|
||||
case SDLK_UP: keypad |= 0x40; break;
|
||||
case SDLK_DOWN: keypad |= 0x80; break;
|
||||
case SDLK_RIGHT: keypad |= 0x10; break;
|
||||
case SDLK_LEFT: keypad |= 0x20; break;
|
||||
case SDLK_SPACE: keypad |= 0x1; break;
|
||||
case 'b': keypad |= 0x2; break;
|
||||
case SDLK_BACKSPACE: keypad |= 0x4; break;
|
||||
case SDLK_RETURN: keypad |= 0x8; break;
|
||||
case '0': keypad |= 0x200; break;
|
||||
case '.': keypad |= 0x100; break;
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_KEYUP:
|
||||
switch (event.key.keysym.sym)
|
||||
{
|
||||
case SDLK_UP: keypad &= ~0x40; break;
|
||||
case SDLK_DOWN: keypad &= ~0x80; break;
|
||||
case SDLK_RIGHT: keypad &= ~0x10; break;
|
||||
case SDLK_LEFT: keypad &= ~0x20; break;
|
||||
case SDLK_SPACE: keypad &= ~0x1; break;
|
||||
case 'b': keypad &= ~0x2; break;
|
||||
case SDLK_BACKSPACE: keypad &= ~0x4; break;
|
||||
case SDLK_RETURN: keypad &= ~0x8; break;
|
||||
case '0': keypad &= ~0x200; break;
|
||||
case '.': keypad &= ~0x100; break;
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_MOUSEBUTTONDOWN: // Un bouton fut appuyé
|
||||
if(event.button.button==1) click=TRUE;
|
||||
|
||||
|
@ -112,13 +177,51 @@ int main(int argc, char ** argv) {
|
|||
}
|
||||
|
||||
break;
|
||||
|
||||
case SDL_MOUSEBUTTONUP: // Le bouton de la souris a été relaché
|
||||
if(click)NDS_releasTouch();
|
||||
click=FALSE;
|
||||
break;
|
||||
|
||||
|
||||
/* Joystick axis motion */
|
||||
case SDL_JOYAXISMOTION:
|
||||
/* Horizontal */
|
||||
if (event.jaxis.axis == 0)
|
||||
if( event.jaxis.value == 0 )
|
||||
keypad &= ~(lookup_joykey( 20 ) | lookup_joykey( 21 ));
|
||||
else
|
||||
{
|
||||
if( event.jaxis.value > 0 ) keypad |= lookup_joykey( 20 );
|
||||
else keypad |= lookup_joykey( 21 );
|
||||
}
|
||||
/* Vertical */
|
||||
else if (event.jaxis.axis == 1)
|
||||
if( event.jaxis.value == 0 )
|
||||
keypad &= ~(lookup_joykey( 22 ) | lookup_joykey( 23 ));
|
||||
else
|
||||
{
|
||||
if( event.jaxis.value > 0 ) keypad |= lookup_joykey( 23 );
|
||||
else keypad |= lookup_joykey( 22 );
|
||||
}
|
||||
break;
|
||||
/* Joystick button pressed */
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
keypad |= lookup_joykey(event.jbutton.button);
|
||||
break;
|
||||
|
||||
/* Joystick button released */
|
||||
case SDL_JOYBUTTONUP:
|
||||
keypad &= ~lookup_joykey(event.jbutton.button);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Update keypad */
|
||||
((unsigned short *)ARM9Mem.ARM9_REG)[0x130>>1] = ~keypad;
|
||||
((unsigned short *)MMU.ARM7_REG)[0x130>>1] = ~keypad;
|
||||
|
||||
NDS_exec(1120380, FALSE);
|
||||
SPU_Emulate();
|
||||
Draw();
|
||||
|
|
Loading…
Reference in New Issue