Speeding up the TaskWindow |
One of the least-touched parts of RISC OS is the TaskWindow. Sure enough, there are various different builds in the different versions of RISC OS, but they all seem to suffer from the two problems it has always had:
Of them, the speed of the taskwindow was always a bit of an embarrassment. Entering
*modules
on my ARM710 machine takes just short of four seconds. On my A5000, it was
quite a bit slower.
But now?
Now, that same command takes slightly less than two seconds!
The speed improvement depends a lot on what you are doing. This has given a 50% increase, where some have reported as much as a 30-40 times increase for some tasks. Ie, it isn't twice as fast, it is forty times as fast!
But such niceties come with a caveat. If you try something that is forever outputting to the
VDU, like *Help .
, or a program like PRINT "Alyson! ":RUN
then you'll find Bad Things Happen. This is because the speed up patch is a hack. A more elegant
solution is being devised, watch this space!
Fancy following this entire thread? In groups.google.com , and in the advanced search page enter the newsgroup comp.sys.acorn.programmer, and the subject Faster taskwindow. The first message was posted by Daniel Ellis on 2001-12-05.
On the 5th of December, Daniel Ellis posted the following:
One of the main things slowing down taskwindow is that it Wimp_Polls every time its output buffer is full. You can stop it doing this by NOOPing the branch to the poll in the output routine, which on RO 4.02 looks like this: 0000140C : ï..ë : EB0002EF : BL &00001FD0 00001410 : ...: : 3A000004 : BCC &00001428 00001414 : Ó..ë : EB0002D3 : BL &00001F68 00001418 : ì..ë : EB0002EC : BL &00001FD0 0000141C : .. ã : E3A00000 : MOV R0,#0 00001420 : .0 ã : E3A03000 : MOV R3,#0 00001424 : ...û : FB00022E : BL &00001CE4 You can rmfaster taskwindow, and edit it in zap then rerun it, NOOPing that last BL, e.g. make it MOV r0, r0. Have fun!Immediately I set about applying the patch to TaskWindow 0.54 (in RISC OS 3.70), and others patched their own versions and released the details...
Find...
00001410 BL &<something>And change it to:
00001410 MOV R0, R0
Find...
00001424 BL &00001CE4BLAnd change it to:
00001424 MOV R0, R0
Find...
0000152C BL &<something>And change it to:
0000152C MOV R0, R0
Remember, Bad Things Happen with continuous screen output.
Long screen output, well, less bad things happen:
I typed Help .
and the entire system froze for twelve seconds. Then the window
redraw in bizarre horizontal strips for a further eight seconds. The whole output was over and
done with in twenty seconds. Pretty impressive, if you ask me!
Caveat emptor.
And, watch this space!