As I've already written Alex had captured memory + register accesses from the in-house developer tools from ATI. With quite some effort we have reduced these more than 1.5 MBytes of C code to a very manageable size, with structures and models we do (mostly) understand.
There are a few undocumented or sparsely documented register accesses, but nothing worrying. Cache handling will need a bit of care (we haven't really done anything in that area), but that is one part of the chip that's documented very well. OTOH it's pretty complex .
Bottom line is we now have a fully stable programming model for the R6xx chips, the RV770 works as well (not the RV710 or RV730 yet, but we don't even have firmware for them yet), for basic functionality only, but including textures and shaders.
The chips' programming is actually quite beautiful - with a few exceptions. E.g. we do not understand how to send vertices reliably to the chip in any format except for floats, though the hardware engineers claim (undoubtedly they are right) that the integer formats should work as well. So we're still doing something wrong here.
It took so long to get to this point, because the chips are extremely picky - even while being actually beautiful and reasonable to program. Flip one bit the wrong way, and the whole engine goes haywire. And it goes haywire in subtly different ways on RV630 compared to RV620.
And (of course) the documentation is far from perfect, I'm writing down everything learned, so we hopefully never fall into the same pits again.
For now progress will slow down a bit again, because at openSUSE we getting close to RC1 of 11.1 - and that always means we need to fix bugs in other areas as well.