Changed the way device timers are run, fixes DesqView/X.

This commit is contained in:
OBattler
2020-01-16 05:48:36 +01:00
parent 9b80d4b151
commit d516716b38
6 changed files with 33 additions and 12 deletions

View File

@@ -73,8 +73,12 @@ extern int dontprint;
#define OP_TABLE(name) ops_ ## name
#define CLOCK_CYCLES(c) cycles -= (c)
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
#define CLOCK_CYCLES(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#define CLOCK_CYCLES_ALWAYS(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#include "x86_ops.h"

View File

@@ -710,8 +710,12 @@ void leave_smm()
}
#define OP_TABLE(name) ops_ ## name
#define CLOCK_CYCLES(c) cycles -= (c)
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
#define CLOCK_CYCLES(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#define CLOCK_CYCLES_ALWAYS(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#include "386_ops.h"

View File

@@ -9,6 +9,7 @@
#endif
#include "../86box.h"
#include "cpu.h"
#include "../timer.h"
#include "x86.h"
#include "x86_ops.h"
#include "x87.h"
@@ -63,7 +64,8 @@ static __inline void fetch_ea_16_long(uint32_t rmdat)
#define PREFETCH_FLUSH()
#define OP_TABLE(name) dynarec_ops_ ## name
#define CLOCK_CYCLES(c)
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
#define CLOCK_CYCLES(c)
#define CLOCK_CYCLES_ALWAYS(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#include "386_ops.h"

View File

@@ -175,8 +175,12 @@ fetch_ea_16_long(uint32_t rmdat)
#define OP_TABLE(name) ops_ ## name
#define CLOCK_CYCLES(c) cycles -= (c)
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
#define CLOCK_CYCLES(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#define CLOCK_CYCLES_ALWAYS(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#include "x86_ops.h"

View File

@@ -471,8 +471,12 @@ void leave_smm()
}
#define OP_TABLE(name) ops_ ## name
#define CLOCK_CYCLES(c) cycles -= (c)
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
#define CLOCK_CYCLES(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#define CLOCK_CYCLES_ALWAYS(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#include "386_ops.h"

View File

@@ -9,6 +9,7 @@
#endif
#include "../86box.h"
#include "cpu.h"
#include "../timer.h"
#include "x86.h"
#include "x86_ops.h"
#include "x87.h"
@@ -63,6 +64,8 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
#define OP_TABLE(name) dynarec_ops_ ## name
/*Temporary*/
#define CLOCK_CYCLES(c)
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
#define CLOCK_CYCLES_ALWAYS(c) do { cycles -= (c); \
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc)) \
timer_process(); } while(0)
#include "386_ops.h"