aboutsummaryrefslogtreecommitdiff
path: root/source/nds
diff options
context:
space:
mode:
authorNebuleon Fumika2012-12-21 03:50:10 -0500
committerNebuleon Fumika2012-12-21 03:50:10 -0500
commita0d0c5e7a5bdc396b4c370a750273b6e3b963bb0 (patch)
tree6bc433422db602b974a01dffbfc5ce5d84afc578 /source/nds
parent3972512b2a5c25236ea3ba586621dba6e5b56361 (diff)
downloadsnes9x2005-a0d0c5e7a5bdc396b4c370a750273b6e3b963bb0.tar.gz
snes9x2005-a0d0c5e7a5bdc396b4c370a750273b6e3b963bb0.tar.bz2
snes9x2005-a0d0c5e7a5bdc396b4c370a750273b6e3b963bb0.zip
Eliminate the latency of button press recognition, which was bad enough to lose keys entirely sometimes, and could otherwise delay a button press or release by 200 ms.
This was the entire reason I created the fork, and I finally did it! It syncs the controls every scanline of a frame, which costs about 60,000 MIPS instructions per frame to deal with. Luckily, the processor runs at 396 MHz, which means the cost of checking the controls is 1% of the CPU's power.
Diffstat (limited to 'source/nds')
-rw-r--r--source/nds/ds2_main.c52
-rw-r--r--source/nds/entry.cpp10
-rw-r--r--source/nds/gui.c1
3 files changed, 32 insertions, 31 deletions
diff --git a/source/nds/ds2_main.c b/source/nds/ds2_main.c
index 710215b..2d73313 100644
--- a/source/nds/ds2_main.c
+++ b/source/nds/ds2_main.c
@@ -15,19 +15,19 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include "console.h"
-#include "fs_api.h"
+ */
+
+#include <stdio.h>
+#include "console.h"
+#include "fs_api.h"
#include "ds2io.h"
#include "ds2_timer.h"
#include "ds2_malloc.h"
-
-#define BLACK_COLOR RGB15(0, 0, 0)
-#define WHITE_COLOR RGB15(31, 31, 31)
-
-extern int sfc_main (int argc, char **argv);
+
+#define BLACK_COLOR RGB15(0, 0, 0)
+#define WHITE_COLOR RGB15(31, 31, 31)
+
+extern int sfc_main (int argc, char **argv);
#if 0
void ddump_mem(unsigned char* addr, unsigned int len)
@@ -42,24 +42,22 @@ void ddump_mem(unsigned char* addr, unsigned int len)
}
#endif
+void ds2_main(void)
+{
+ int err;
+ds2_setCPUclocklevel(13);
+ //Initial video and audio and other input and output
+ err = ds2io_initb(512, 22050, 0, 0);
+ if(err) goto _failure;
-
-void ds2_main(void)
-{
- int err;
-ds2_setCPUclocklevel(13);
- //Initial video and audio and other input and output
- err = ds2io_initb(512, 22050, 0, 0);
- if(err) goto _failure;
+ //Initial file system
+ err = fat_init();
+ if(err) goto _failure;
- //Initial file system
- err = fat_init();
- if(err) goto _failure;
+ //go to user main funtion
+ sfc_main (0, 0);
- //go to user main funtion
- sfc_main (0, 0);
-
_failure:
- ds2_plug_exit();
-}
-
+ ds2_plug_exit();
+}
+
diff --git a/source/nds/entry.cpp b/source/nds/entry.cpp
index 24c0e03..467461b 100644
--- a/source/nds/entry.cpp
+++ b/source/nds/entry.cpp
@@ -90,6 +90,7 @@ void S9xParseDisplayArg (char **argv, int &ind, int)
void S9xExit ()
{
+ ds2_setCPUclocklevel(13); // Crank it up to exit quickly
if(Settings.SPC7110)
(*CleanUp7110)();
@@ -382,15 +383,15 @@ void init_sfc_setting(void)
Settings.SixteenBit = TRUE;
Settings.SupportHiRes = FALSE;
- Settings.NetPlay = FALSE;
- Settings.ServerName [0] = 0;
Settings.ThreadSound = FALSE;
Settings.SoundSync = TRUE;
Settings.AutoSaveDelay = 0;
#ifdef _NETPLAY_SUPPORT
+ Settings.NetPlay = FALSE;
+ Settings.ServerName [0] = 0;
Settings.Port = NP_DEFAULT_PORT;
#endif
- Settings.ApplyCheats =FALSE;
+ Settings.ApplyCheats = FALSE;
Settings.TurboMode = FALSE;
Settings.TurboSkipFrames = 40;
Settings.StretchScreenshots = 1;
@@ -1009,7 +1010,8 @@ unsigned int S9xReadJoypad (int which1)
key |= (inputdata.key & (1<<i)) ? keymap[i] : 0;
}
- return (key | 0x80000000);
+ // return (key | 0x80000000);
+ return key; // ??? [Neb]
}
else
return 0;
diff --git a/source/nds/gui.c b/source/nds/gui.c
index bf85b67..4a04efc 100644
--- a/source/nds/gui.c
+++ b/source/nds/gui.c
@@ -1714,6 +1714,7 @@ u32 menu(u16 *screen)
void menu_exit()
{
+ ds2_setCPUclocklevel(13); // Crank it up, leave quickly
if(gamepak_name[0] != 0)
{
game_config.clock_speed_number = clock_speed_number;