From c3bd9cd6e49687dfdf366f53f4de92498473d772 Mon Sep 17 00:00:00 2001 From: zeromus Date: Wed, 20 Jan 2010 06:54:57 +0000 Subject: [PATCH] sdlports: fix bizarre occasional touchpad failure --- desmume/src/MMU.cpp | 15 +++++++++++++-- desmume/src/ctrlssdl.cpp | 30 +++++++++++++++++------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/desmume/src/MMU.cpp b/desmume/src/MMU.cpp index b60e1c6b2..f7df944d2 100644 --- a/desmume/src/MMU.cpp +++ b/desmume/src/MMU.cpp @@ -3639,6 +3639,9 @@ void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val) } return; + case REG_EXTKEYIN: //readonly + return; + case REG_POWCNT2: { @@ -4107,12 +4110,20 @@ u16 FASTCALL _MMU_ARM7_read16(u32 adr) return MMU.AUX_SPI_CNT; case REG_KEYINPUT: - case REG_EXTKEYIN: //here is an example of what not to do: - //since the arm7 polls this every frame, we shouldnt count this as an input check + //since the arm7 polls this (and EXTKEYIN) every frame, we shouldnt count this as an input check //LagFrameFlag=0; break; + case REG_EXTKEYIN: + { + //this is gross. we should generate this whole reg instead of poking it in ndssystem + u16 ret = MMU.ARM7_REG[0x136]; + if(nds.isTouch) ret &= ~64; + else ret |= 64; + return ret; + } + case REG_POSTFLG: return 1; } diff --git a/desmume/src/ctrlssdl.cpp b/desmume/src/ctrlssdl.cpp index eefab18a4..38d711d66 100644 --- a/desmume/src/ctrlssdl.cpp +++ b/desmume/src/ctrlssdl.cpp @@ -24,14 +24,13 @@ #include "saves.h" #include "SPU.h" #include "commandline.h" +#include "NDSSystem.h" u16 keyboard_cfg[NB_KEYS]; u16 joypad_cfg[NB_KEYS]; u16 nbr_joy; mouse_status mouse; -extern volatile BOOL execute; - static SDL_Joystick **open_joysticks = NULL; /* Keypad key names */ @@ -299,17 +298,22 @@ void set_mouse_coord(signed long x,signed long y) /* Update NDS keypad */ void update_keypad(u16 keys) { -#ifdef WORDS_BIGENDIAN - MMU.ARM9_REG[0x130] = ~keys & 0xFF; - MMU.ARM9_REG[0x131] = (~keys >> 8) & 0x3; - MMU.ARM7_REG[0x130] = ~keys & 0xFF; - MMU.ARM7_REG[0x131] = (~keys >> 8) & 0x3; -#else - ((u16 *)MMU.ARM9_REG)[0x130>>1] = ~keys & 0x3FF; - ((u16 *)MMU.ARM7_REG)[0x130>>1] = ~keys & 0x3FF; -#endif - /* Update X and Y buttons */ - MMU.ARM7_REG[0x136] = ( ~( keys >> 10) & 0x3 ) | (MMU.ARM7_REG[0x136] & ~0x3); + NDS_beginProcessingInput(); + UserButtons& input = NDS_getProcessingUserInput().buttons; + input.G = (keys>>12)&1; + input.E = (keys>>8)&1; + input.W = (keys>>9)&1; + input.X = (keys>>10)&1; + input.Y = (keys>>11)&1; + input.A = (keys>>0)&1; + input.S = (keys>>3)&1; + input.T = (keys>>2)&1; + input.U = (keys>>6)&1; + input.D = (keys>>7)&1; + input.L = (keys>>5)&1; + input.R = (keys>>4)&1; + input.F = 0; + NDS_endProcessingInput(); } /* Retrieve current NDS keypad */