Линии и буквы - это нужно. Но давайте все делать поэтапно. Добавим потом. Пока линии будем рисовать спрайтом с одной точкой, а буквы будут одного цвета. Давайте вернемся к выводу картинок в обычных играх. Например, мы хотим сделать новую игру "Диззи".
Когда Диззи переходит в другое место надо нарисовать картинку/фон, а потом Диззи. На приведенной картинке видно, что она рисуется из нескольких типов маленьких картинок-квадратиков размером 8х8 точек. Их называют тайлами. Нарисуем на черновике область размером 32х24 клетки и пронумеруем каждую клетку номером тайла. Теперь нам надо изобразить эти тайлы на экране.
Начнем заполнение экрана с левого верхнего угла. Установим координаты Y=0, X=0. Далее укажем размеры тайла LY=8, LX=8, количестов тайлов в строке К = 32. Потом подаем команду PRINT, 32 номера тайлов. Видеокарта принимает поток данных и записывает в буфер команд. И постепенно начинает по номеру и размеру тайла высчитывать адрес в буфере спрайтов, адрес на экране, копировать по 8 точек за раз. Короче - заниматься своими делами.
А в это время Z80 меняет координаты на Y=8, X=0, команду PRINT, другие 32 номера тайлов. Так мы зарисуем тайлами весь экран.
Теперь нам надо нарисовать Диззи. Он у нас размером 20х15 точек. Значит LY=20, LX=15. Далее координаты, например, Y=152, X=201. Спрайт один, значит К=1. Далее команду PRINT, номер спрайта Диззи.
И все. Как видите, все просто и быстро.
Спрайт с номером 0 не копируется - только пропускается место размером со спрайт. Это почти как пробел в тексте, только картинка под ним не будет затираться. Это позволит выводить тайлы и спрайты с промежутками. Например, когда нужно наложить сверху второй план: редкие камешки, кустики, травинки, деревья и т.п. объекты.
Нужно определиться с количеством байтов на каждый параметр. LY, LX, К - по одному байту, Y, X, N - по два (YH, YL, XH, XL, NH, NL). Тут все понятно.
Но нужно проработать эффективную систему для записи команд в видеокарту. Мы можем выделить 256 разных адресов для разных команд или подавать их все через один адрес, чередую КОМАНДУ и ДАННЫЕ или передавать КОМАНДЫ и ДАННЫЕ с помощью команды LDIR через область 256/512 байт. Какой способ лучше ?





Ответить с цитированием