I meant the same amount of drawing as in the same number of pixels get drawn, just in more parts. In both cases a 600x600 pixel display was completely redrawn, one in 6x6 squares, the other in 1x1 squares.
The actual accessing of the data from the matrix isn't the slow part here, as I can read it all to a standard array in preparation to dump that to a text file in vastly less time than this is now taking.
By "Use the primitives low-level drawing routines" thats what I'm already doing as far as I know, using al_draw_filled_rectangle(...).
I've tried using the primitives drawing both directly onto the display backbuffer and also onto an intermediary bitmap and both gave the same speed results.
I'll have a go on doing putpixel on a locked bitmap and scaling up. This may well be the most efficient solution if there isn't a way to do it directly with the primitives.
EDIT: James, if there isn't a way to solve this issue within allegro, is it possible to incorporate some OpenGL directly into an allegro project for something as simple as drawing a shedload of squares to an existing allegro display? If so, how?