Initial joypad support for cli UI.

This commit is contained in:
evilynux 2007-01-08 22:03:33 +00:00
parent 59e59c7c83
commit 503e58fa51
1 changed files with 126 additions and 23 deletions

View File

@ -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();