Commit 3c5e1ae3f560ba1568da247f4e835206ff12a264
authorbsekisser <squirmyworms@embarqmail.com>
Tue, 9 Sep 2014 21:53:56 +0000 (17:53 -0400)
committerbsekisser <squirmyworms@embarqmail.com>
Mon, 15 Sep 2014 20:22:24 +0000 (16:22 -0400)
tree4bea9b7ccdb632cd7065622fa9e7404a485db600
parenta0f2f927ea96cc951d2cf4e54f16059d9271f53f
Message:
Changes to allow for free run in core between cycle timers
 with per interval limiting.

Average cycle times drop by about upwards of 50-60+ cycles per emulated cycle,
dependant on usage.

sim_avr.h: struct avr_t changed.
added members run_cycle_count and run_cycle_limit.
run_cycle_count is number of cycles till next cycle timer.
run_cycle_limit is maximum number of cycles to run per interval.

sim_core.c: avr_run_one
* run_one_again label added at top.
* clause added at end which loops to run_one_again given that the core
is still in a cpu_Running state, run_cycle_count is greater than
cycles, and no interrups are pending.

sim_cycle_timers.c:
* static avr_cycle_timer_return_sleep_run_cycles_limited() added.
run_cycle_count is bounded to run_cycle_limit.
returns sleep count unbounded, preserving original behavior.

* static avr_cycle_timer_reset_sleep_run_cycles_limited() added.
sets new run_cycle_count based on present list of cycle timers.

* avr_cycle_timer_reset() changed.
run_cycle_count and run_cycle_limit is set to default values.

* avr_cycle_timer_register() changed.
* avr_cycle_timer_cancel() changed.
* avr_cycle_timer_process() changed.
call the relevant function to set/maintain run_cycle_count.

modified:   simavr/sim/sim_avr.c
modified:   simavr/sim/sim_avr.h
modified:   simavr/sim/sim_cycle_timers.c
3 files changed:
simavr/sim/sim_avr.h
simavr/sim/sim_core.c
simavr/sim/sim_cycle_timers.c