2016-11-11 5 views
3

私はエミュレータのメインループを実装しようとしています。エミュレータはフルスピードで動作します。約60Mhz。しかし私はそれを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()は、1つの命令を実行する機能です。 get_cycles(ctx)は、実行されたマシンサイクルの合計です。 set_cycles_zero(ctx, 0)はサイクルカウンタをゼロに設定します。

答えて

0

ifの中に移動した場合、emu_stepはforループの繰り返しごとに実行されているため、elapsed >= 1000000の場合にのみ実行されるためです。その特定のケースでは、ループから独立して1回実行することができますので、スロットルを待つ必要はありません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() ; 
     } 
} 
のようになります
関連する問題