All cli UI controls centralized in src/ctrlssdl.{h,c} just like the gtk and gtk-glade UIs.
This commit is contained in:
parent
cd0f5ea781
commit
016cd09ed5
|
@ -1,4 +1,4 @@
|
||||||
bin_PROGRAMS = desmume-cli
|
bin_PROGRAMS = desmume-cli
|
||||||
desmume_cli_SOURCES = main.c ../sndsdl.c
|
desmume_cli_SOURCES = main.c ../sndsdl.c ../ctrlssdl.h ../ctrlssdl.c
|
||||||
desmume_cli_LDADD = ../libdesmume.a $(SDL_LIBS)
|
desmume_cli_LDADD = ../libdesmume.a $(SDL_LIBS)
|
||||||
desmume_cli_CFLAGS = $(SDL_CFLAGS)
|
desmume_cli_CFLAGS = $(SDL_CFLAGS)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "../cflash.h"
|
#include "../cflash.h"
|
||||||
#include "../debug.h"
|
#include "../debug.h"
|
||||||
#include "../sndsdl.h"
|
#include "../sndsdl.h"
|
||||||
|
#include "../ctrlssdl.h"
|
||||||
|
|
||||||
#define DESMUME_NB_KEYS 13
|
#define DESMUME_NB_KEYS 13
|
||||||
#define DESMUME_KEYMASK_(k) (1 << k)
|
#define DESMUME_KEYMASK_(k) (1 << k)
|
||||||
|
@ -27,7 +28,7 @@ SoundInterface_struct *SNDCoreList[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
const u16 Joypad_Config[DESMUME_NB_KEYS] =
|
const u16 Default_Joypad_Config[DESMUME_NB_KEYS] =
|
||||||
{ 1, // A
|
{ 1, // A
|
||||||
0, // B
|
0, // B
|
||||||
5, // select
|
5, // select
|
||||||
|
@ -56,24 +57,9 @@ int Draw() {
|
||||||
return 1;
|
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) {
|
int main(int argc, char ** argv) {
|
||||||
BOOL click;
|
static unsigned short keypad = 0;
|
||||||
static unsigned short keypad;
|
u32 last_cycle;
|
||||||
SDL_Event event;
|
|
||||||
int end = 0;
|
|
||||||
int nbJoysticks;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
LogStart();
|
LogStart();
|
||||||
|
@ -96,10 +82,10 @@ int main(int argc, char ** argv) {
|
||||||
cflash_close();
|
cflash_close();
|
||||||
cflash_init();
|
cflash_init();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
execute = TRUE;
|
execute = TRUE;
|
||||||
|
|
||||||
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == -1)
|
if(SDL_Init(SDL_INIT_VIDEO) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error trying to initialize SDL: %s\n",
|
fprintf(stderr, "Error trying to initialize SDL: %s\n",
|
||||||
SDL_GetError());
|
SDL_GetError());
|
||||||
|
@ -107,130 +93,35 @@ int main(int argc, char ** argv) {
|
||||||
}
|
}
|
||||||
SDL_WM_SetCaption("Desmume SDL", NULL);
|
SDL_WM_SetCaption("Desmume SDL", NULL);
|
||||||
|
|
||||||
|
/* Initialize joysticks */
|
||||||
|
if(!init_joy(Default_Joypad_Config)) return 1;
|
||||||
|
|
||||||
surface = SDL_SetVideoMode(256, 384, 32, SDL_SWSURFACE);
|
surface = SDL_SetVideoMode(256, 384, 32, SDL_SWSURFACE);
|
||||||
|
|
||||||
/* Initialize joysticks */
|
while(!sdl_quit) {
|
||||||
nbJoysticks = SDL_NumJoysticks();
|
/* Look for queued events and update keypad status */
|
||||||
printf("Nbr of joysticks: %d\n\n", nbJoysticks);
|
keypad = process_ctrls_events(keypad);
|
||||||
|
/* Update mouse position and click */
|
||||||
for (i = 0; i < nbJoysticks; i++)
|
if(mouse_down) NDS_setTouchPos(mouse_pos.x, mouse_pos.y);
|
||||||
{
|
if(mouse_click)
|
||||||
SDL_Joystick * joy = SDL_JoystickOpen(i);
|
{
|
||||||
printf("Joystick %s\n", i, SDL_JoystickName(i));
|
NDS_releasTouch();
|
||||||
printf("Axes: %d\n", SDL_JoystickNumAxes(joy));
|
mouse_click = FALSE;
|
||||||
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) {
|
|
||||||
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;
|
|
||||||
|
|
||||||
case SDL_MOUSEMOTION: // La souris a été déplacée sur l?écran
|
|
||||||
|
|
||||||
if(!click) break;
|
|
||||||
|
|
||||||
if(event.button.y>=192)
|
|
||||||
{
|
|
||||||
signed long x = event.button.x;
|
|
||||||
signed long y = event.button.y - 192;
|
|
||||||
if(x<0) x = 0; else if(x>255) x = 255;
|
|
||||||
if(y<0) y = 0; else if(y>192) y = 192;
|
|
||||||
NDS_setTouchPos(x, y);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
/* Update keypad */
|
||||||
|
((unsigned short *)ARM9Mem.ARM9_REG)[0x130>>1] = ~(keypad & 0x3FF);
|
||||||
|
((unsigned short *)MMU.ARM7_REG)[0x130>>1] = ~((keypad >> 10) & 0x3);
|
||||||
|
|
||||||
|
/* NDS_exec(1120380, FALSE); */
|
||||||
|
last_cycle = NDS_exec((560190 << 1) - last_cycle, FALSE);
|
||||||
SPU_Emulate();
|
SPU_Emulate();
|
||||||
Draw();
|
Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Unload joystick */
|
||||||
|
uninit_joy();
|
||||||
|
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
NDS_DeInit();
|
NDS_DeInit();
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
Loading…
Reference in New Issue