Oh, I see the problem. In disp_flush
you get an area and buffer. Your task is to copy the buffer to the area. The data to copy will be at beginning of the buffer.
Take look at Drawing part of the documentation and the example disp_flush function.
Now I see the problem with your disp_flush
too. Instead of
vram_data_write(gbuf[(unsigned int) row * HW_COLUMNS + (unsigned int) col], TRUE);
try
/*At the beginning of `disp_flush`*/
uint8_t * buf8 = (uint8_t *) color_p;
/*In the loop*/
vram_data_write(*buf8, TRUE);
buf8++;