Да какие уж там проценты - одного человека достаточно, например вот человек спрашивает как побыстрее линию нарисовать - http://zx-pk.ru/showpost.php?p=811234&postcount=43 - ему если дать аппаратную точку или линию, он глядишь и DOOM соберёт ))
Да какие уж там проценты - одного человека достаточно, например вот человек спрашивает как побыстрее линию нарисовать - http://zx-pk.ru/showpost.php?p=811234&postcount=43 - ему если дать аппаратную точку или линию, он глядишь и DOOM соберёт ))
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Скрытый текст
ZX Spectrum +2 +divIDE + BDI
Profi 1024k plus
Scorpion ZS-256 Turbo+
ZX Evolution rev.C2+NeoGS+SDCard HxC Floppy Emulator
ZX Evolution rev.C2+ZXM-SoundCard Extreme+ZXM-MoonSound
AVR ZX Spectrum V2.0
Орион 128[свернуть]
"лишь", хехе... они все рисуются одинаково, адреса-то совпадают для всех битпланов
и все команды жёстко синхронизированы, отличаются лишь данные в адресах
с такой схемой цвет без копии поменять (причём если на любой - только с белого)
можно через лишний and с цветомаской (для которой еще надо регистр выделить)
и таки в код программный лезть придётся при переделках
Прихожу без разрешения, сею смерть и разрушение...
Линии и буквы - это нужно. Но давайте все делать поэтапно. Добавим потом. Пока линии будем рисовать спрайтом с одной точкой, а буквы будут одного цвета. Давайте вернемся к выводу картинок в обычных играх. Например, мы хотим сделать новую игру "Диззи".
Когда Диззи переходит в другое место надо нарисовать картинку/фон, а потом Диззи. На приведенной картинке видно, что она рисуется из нескольких типов маленьких картинок-квадратиков размером 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 байт. Какой способ лучше ?
Последний раз редактировалось zx-kit; 21.06.2015 в 07:17.
"L-256"
Писать процеесором команды это тоже расход проца бесполезный, команды надо в памяти хранить и блок по смыслу аналогичный DMA их копирует в порты сам, как только завершилось выполнение предыдущей команды.
---------- Post added at 09:37 ---------- Previous post was at 09:32 ----------
глупости, аппаратную точку возможно даже дольше будет выводить чем програмную, так как надо кучу параметров настроить, записать их итд, адреса соседних точек обычно вообще элементарно вычисляются, а тут целая история буде
На скорую набросал вывод 640х480@60Hz 24bpp + текстовый режим 80x30 16 цветов вторым слоем.
Вложение 52627
640х480=921600 байт видео буфер, точки хранятся по три байта линейно как [RRRRRRRR,GGGGGGGG,BBBBBBBB],[RRRRRRRR,GGGGGGGG,BBBBBBBB]...
не знаю как вы себе видите аппаратную точку, но я делал так:
после записи старшего байта, через 2 такта точка уже нарисованаКод:;hl - x,y coord ld ($5c00),hl
мне кажется быстрее некуда )
кстати если делать точку для режима "байт на точку" то рисовать точку получится вообще за такт.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)