Having spent a few days learning Direct3D programming, I've knocked up a Pixel Shader3 demo in XNA as an EXE. You'll need an XB360 controller if you want to move around.
Speed wise, at 512x512 on my X1900 I'm getting a solid 60fps. Even 1024 iterations on every pixel gets over 12fps.
Before I shove this in the Gadget, I need to resolve some issues. Getting the total iteration count and interesting C values out from the Pixel Shader is going to be a challenge. They're used to automatically adjust the iteration level based on the screen complexity and figuring out which points to aim for. The problem is, Constant registers (which can easily be read in managed code) can't be modified by the Pixel Shader - so there's no easy way to get values out, short of putting them into a texture. Which is damn complicated from what I can tell as it will have to do several passes to reduce it down to a 1x1 texture. To be truthful, I haven't investigated this much so I could be talking rubbish.
Another major issue is precision. The compiler is converting the Doubles to Singles, so it's very restricted on how far you can zoom in, and it would appear that ATI's only use 24bits of that anyway, so the best precision I can get is 5E-5 (the Gadget is currently 1E-15). You also can't pass a Double from XNA/MDX to a Pixel Shader, you're restricted to Singles, although I've worked around this by converting to 64bit integers and passing the low and high 32bits separately.
I think ultimately, I'll have to drop all floating point and resort to 64bit maths, which will seriously slow it down due to the amount of computation involved - precision will improve three fold though. The last time I had to implement that was when doing 3d maths in machine code on the 6502 25 years ago, before 16bit registers existed!
Controls:
Left Thumbwheel - Move
A - Zoom in
B - Zoom out
X - Decrease iteration count (min is 48)
Y - Increase iteration count (max is 1024)
When you zoom in/out, it automatically adjusts the iteration count to a best guess.