Tuesday, August 04, 2009
I've just put the finishing touches to some demo code for an ARM-based operator interface panel we've designed, and it's sitting in front of me as I type with a few windows bouncing about at frame-rate in the foreground and a Mandelbrot being rendered in the background. Every now and then another view of the Mandelbrot drifts past in a stately fashion (frame-locked, of course) and if I touch the screen it pops up another window that follows the touch about under my finger, with a ghostly lattice of lines being drawn overlayed on the background to show the outlines of the various regions of the screen that are being rendered as the window position changes... It looks beautiful, as graphics that change at frame-rate usually do.
I'd include a picture, but a static photo really doesn't do it justice and I can't be bothered to work out how to include video at my time of life.
The hardware is a Cirrus ARM processor that has a fair number of peripherals on chip, including the LCD display driver. That single chip and a couple of SDRAMs, a FLASH and some glue is all that's involved, hardware-wise. The software - a complete graphical windows system and enough of an OS to run operator interface style applications - (in total about 12,000 lines of C) was all written from scratch by yours truly in about five weeks...
Since all of this is written in C and compiled with GCC (unusually for me there's not a line of assembler in there, aside from the device boot code) and it still runs fast enough on a 200MHz ARM to look bloody impressive I find myself wondering how the hell programmers manage to take hardware like this and make it appear as slow and crappy as all the ARM-based personal organisers out there look.
What the hell are they doing to slow them down?
It's amazing how bloody awful the demonstration code that Cirrus supply for their own device is, it makes the thing look like a CP/M machine struggling to write to a terminal.
This particular chip has blitter and line-drawing hardware that I haven't used, since I wanted the graphics code to be pretty generic. The demo code from Cirrus uses the blitter and still manages to run like a slug that has overdosed on valium. Gah...
The incompetence that's endemic in this industry depresses me, it really does :(