Creating your own extension to the glcd library makes it easy.
class GlcdEx : public glcd{
public:
void DrawBitmapFar( uint_farptr_t bitmap, uint8_t x, uint8_t y, uint8_t color= BLACK ){
uint8_t width, height;
uint8_t i, j;
width = pgm_read_byte_far(bitmap++);
height = pgm_read_byte_far(bitmap++);
#ifdef BITMAP_FIX
if( (y & 7) || (height & 7))
{
this->FillRect(x, y, width, height, WHITE);
}
#endif
for(j = 0; j < height / 8; j++) {
glcd_Device::GotoXY(x, y + (j*8) );
for(i = 0; i < width; i++) {
uint8_t displayData = pgm_read_byte_far(bitmap++);
if(color == BLACK)
this->WriteData(displayData);
else
this->WriteData(~displayData);
}
}
}
};
GlcdEx GLCDEX;
byte data0[] PROGMEM = { 3,3,1,2,3,4,5,6,7,8,9 };
byte data1[] PROGMEM = { 3,3,1,2,3,4,5,6,7,8,9 };
byte data2[] PROGMEM_FAR = { 3,3,1,2,3,4,5,6,7,8,9 };
void setup() {
GLCDEX.Init();
GLCDEX.DrawBitmap( data0, 0, 0 );
GLCDEX.DrawBitmap( data1, 0, 3 );
GLCDEX.DrawBitmapFar( GET_FAR_ADDRESS( data2 ), 0, 6 );
}
void loop() {}