Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ const char *nethubHelpstring =
const char *nethubHelpstring = "";
#endif

#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
extern int insnsCountdownForTimerAsyncEmulation;
#endif

Expand Down Expand Up @@ -601,7 +601,7 @@ int main(int argc, char *argv[])
}
#endif /* MAIKO_ENABLE_NETHUB */

#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
else if (!strcmp(argv[i], "-intr-emu-insns")) {
if (argc > ++i) {
errno = 0;
Expand Down
12 changes: 11 additions & 1 deletion src/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,11 @@ static void int_timer_service(int sig)
/* */
/************************************************************************/

#if MAIKO_OS_LINUX
// for WSL1, which doesn't support setitimer(ITIMER_VIRTUAL ...)
int linux_emulate_timer = 0;
#endif /* MAIKO_OS_LINUX */

static void int_timer_init(void)

{
Expand Down Expand Up @@ -489,6 +494,11 @@ static void int_timer_init(void)
/* then attach a timer to it and turn it loose */
timert.it_interval.tv_sec = timert.it_value.tv_sec = 0;
timert.it_interval.tv_usec = timert.it_value.tv_usec = TIMER_INTERVAL;

#if MAIKO_OS_LINUX
// (For WSL1) Capture error output from setittimer to indicate need to emulate timer
linux_emulate_timer =
#endif /* MAIKO_OS_LINUX */
setitimer(ITIMER_VIRTUAL, &timert, NULL);

DBPRINT(("Timer interval set to %ld usec\n", (long)timert.it_value.tv_usec));
Expand All @@ -499,7 +509,7 @@ static void int_timer_init(void)
/* */
/* */
/* */
/* */
/*
/* */
/* */
/* */
Expand Down
19 changes: 13 additions & 6 deletions src/xc.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,15 +173,17 @@ static const int n_mask_array[16] = {

extern int TIMER_INTERVAL;

#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)

# if !defined(MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN)
# define MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN 20000
# endif

int insnsCountdownForTimerAsyncEmulation = MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN;
static int pseudoTimerAsyncCountdown = MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN;

#if MAIKO_OS_LINUX
extern int linux_emulate_timer;
#endif /* MAIKO_OS_LINUX */
#endif

void dispatch(void) {
Expand Down Expand Up @@ -282,10 +284,12 @@ op_ufn : {
#endif /* PCTRACE */

/* quick_stack_check();*/ /* JDS 2/12/98 */

#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
if (--pseudoTimerAsyncCountdown <= 0) {
Irq_Stk_Check = 0;
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
#if MAIKO_OS_LINUX
if (linux_emulate_timer) {
#endif /* MAIKO_OS_LINUX */
if (--pseudoTimerAsyncCountdown <= 0) {
Irq_Stk_Check = 0;
Irq_Stk_End = 0;
#if defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
IO_Signalled = TRUE;
Expand All @@ -294,6 +298,9 @@ op_ufn : {
emscripten_sleep(1);
#endif
pseudoTimerAsyncCountdown = insnsCountdownForTimerAsyncEmulation;
#if MAIKO_OS_LINUX
}
#endif /* MAIKO_OS_LINUX */
}
#endif

Expand Down