>> > RISC OS also calls the SWI Portable_Idle when it is idle, so that's a
>> > potential mechanism to release some of the CPU. I can't remember if RPCEmu
>> > makes use of that.

I got inspired by this discussion, and threw together a quick module
which provides an absolutely minimal implementation of a Portable
module (RPCEmu currently makes no use of the Portable SWIs).

I then had a go at intercepting the Portable_Idle SWI, and sleeping
for a small amount of time (5ms) each time this is called.

The net result was the CPU usage would drop from 100% to ~5% after
5-10 seconds of being at the Desktop. The mouse remained reasonably
smooth, and the CPU usage would jump and down in proportion to the
activity in the emulator.

I haven't yet come to any conclusion about the impact on timing, but
we already require a module to compensate for clock drift.

The code is very rough-and-ready, though it looks like a reasonable
short-term solution.

I think the long-term ideal would be to have separate threads for IO
devices that should wake up the CPU - keyboard, mouse, timers etc.
Currently many of the IO devices hang off the main CPU emulation loop.
We are working on tidying up the code for some of these devices -
hopefully we can decouple them more easily later.

Matthew

_______________________________________________
Rpcemu mailing list
[email protected]
http://www.riscos.info/cgi-bin/mailman/listinfo/rpcemu

Reply via email to