Вот это больше всего не понятно, прокомментируйте, если не сложно:
linepos = y*30+x; // Присвоение байту "linepos" значения выражения "y*30+x" Где берутся значения для "x" и "y"