aboutsummaryrefslogtreecommitdiff
path: root/source/cpuexec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/cpuexec.cpp')
-rw-r--r--source/cpuexec.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/source/cpuexec.cpp b/source/cpuexec.cpp
index 21b1574..5fb79e5 100644
--- a/source/cpuexec.cpp
+++ b/source/cpuexec.cpp
@@ -105,6 +105,10 @@
#include "sa1.h"
#include "spc7110.h"
+#ifdef SYNC_JOYPAD_AT_HBLANK
+#include "display.h"
+#endif
+
extern void S9xProcessSound (unsigned int);
void S9xMainLoop (void)
@@ -226,6 +230,16 @@ void S9xDoHBlankProcessing ()
switch (CPU.WhichEvent)
{
case HBLANK_START_EVENT:
+#ifdef SYNC_JOYPAD_AT_HBLANK
+ // Re-get the controls every hblank. A resolution algorithm in
+ // ppu.cpp will determine with greater accuracy whether a key was
+ // pressed or released during the frame.
+ uint32 i;
+ for (i = 0; i < 5; i++)
+ {
+ IPPU.JoypadsAtHBlanks [i][CPU.V_Counter] = S9xReadJoypad (i);
+ }
+#endif
if (IPPU.HDMA && CPU.V_Counter <= PPU.ScreenHeight)
IPPU.HDMA = S9xDoHDMA (IPPU.HDMA);