降低模拟器速度

时间:2016-11-11 12:50:25

标签: c emulation simulation

我正在尝试实现模拟器主循环。仿真器全速运行。大约60兆赫兹。但我想让它以4.77Mhz运行。它是如何完成的?

for (;;)
{
        emu_step(ctx) ;
        uint64_t current = get_gtod_clock_time () ;
        uint64_t elapsed = current - last_time ;
        if (elapsed >= 1000000)
        {
            printf("Cycles: %d\n", get_cycles(ctx)) ;
            set_cycles_zero(ctx, 0) ;
            last_time = get_gtod_clock_time () ;
        }
}

emu_step()是执行一条指令的函数。 get_cycles(ctx)是执行的机器周期的总和。 set_cycles_zero(ctx, 0)将周期计数器设置为零。

1 个答案:

答案 0 :(得分:0)

我认为这是因为emu_step正在for循环的每次迭代中执行,如果你将它移到if内,那么它只会在elapsed >= 1000000时执行。在这种特殊情况下,您可以独立于循环执行一次,这样您就不必等待一个受限制的cycle

它可能看起来像

emu_step(ctx) ;

for (;;)
{
        uint64_t current = get_gtod_clock_time () ;
        uint64_t elapsed = current - last_time ;
        if (elapsed >= 1000000)
        {
            emu_step(ctx);
            printf("Cycles: %d\n", get_cycles(ctx)) ;
            set_cycles_zero(ctx, 0) ;
            last_time = get_gtod_clock_time () ;
        }
}