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:

  1. Doesn't support graphics - though third-party extensions such as David Ruck's GraphTask answer this.
  2. Tediously slow

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...


RISC OS 3.70 (TaskWindow 0.54)

(contributed by Richard Murray)


00001410  BL   &<something>
And change it to:
00001410  MOV  R0, R0


RISC OS 4.02 (TaskWindow ?.??)

(contributed by Daniel Ellis, as above)


00001424  BL   &00001CE4BL
And change it to:
00001424  MOV  R0, R0


RISC OS 4.24 (TaskWindow 0.65)

(contributed by Andy Wingate)


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!

Return to assembler index
Copyright © 2004 Richard Murray / 2001 Daniel Ellis