Содержимое и количество блоков произвольное. Там могут быть разные команды. Одного блока недостаточно. Например, в одном блоке надо нарисовать фон. А в другом несколько спрайтов движущихся объектов. А кол-во объектов все время разное. Поэтому после всех команд для рисования спрайтов ставим признак END. И видеокарта перейдет к следущему блоку команд.
Да, надо добавить параметр длины номера тайлов/спрайтов.Номера тайлов сразу двух байтные делать.
(Либо же переключатель где-то иметь (1 или 2 байта на номер тайла).)
---------- Post added at 12:56 ---------- Previous post was at 12:41 ----------
Я также предполагал, что мы рисуем фон тайлами и движущиеся объектами одинаковым образом, указывая координаты на экране, прямоугольные размеры объектов и номера. Но посчитали, что при малых размерах тайлов 8х8 и большом экране 320х240 надо каждый кадр пересылать 1200 тайлов. Предложили в новых играх использовать спрайты покрупнее, но для адаптации старых игр размер тайлов/спрайтов желательно оставить старыми.
Хотя Z80 справился бы, желательно, чтобы в играх, где это возможно, видеокарта сама брала номера тайлов из таблицы в памяти.
После изображения фона надо изобразить спрайты движущихся объектов, Z80 может подождать видеокарту. Но лучше писать все команды с координатами и номерами не в видеокарту, а в область памяти, откуда видеокарта потом их сама заберет. Поэтому появилась идея деления всех команд на блоки. Т.е. надо обеспечить обработку команд из памяти. Может быть тогда непосредственная запись некоторых команд в регистры видеокарты будет и не нужна.
Для параметров типа координат используются последние записанные данные (они запоминаются внутри видеокатры). Для выполнения команд служит сигнал записи в определенные адреса - адреса регистров видеокарты. Для передаче параметров и команд видеокарте выделяется область в адресном пространстве Z80 размером 256 байт. Старший байт этой области я предлагал расположить фиксированно в области атрибутов, так как в новом режиме атрибуты свободны в любой игре. Но поступило предложение настраивать старший байт этой облати. Естественно, его надо будет где-нибудь найти в старой игре или выделить в новой.Извините, я не совсем понял принцип работы новой видеокарты.
В программе мы поместили данные в адрес памяти, который служит кодом команды. А как видеокарта определяет, что это новые данные, по факту произведённой записи в память?
Таким образом, видеокарта имеет 256 входных регистров, в которые мы можем записывать по адресам ПЗУ или ОЗУ (зависит от выбора старшего байта). После включения нового режима видеокарта отслеживает эти адреса и записывает в регистры данные. Некоторые регистры, например, адреса, координаты, цвето точки объеденены по два. После записи в некоторые регистры параметра запускают выполнение команд видеокатры.
Smalovsky,А какие ориентировочно числа в играх: размер экрана в точках, количество тайлов по-горизонтали, вертикали, размеры тайлов и спрайтов? Как задаются указатели на спрайты (может нам тоже пригодятся)? Сохраняется ли фон перед печатью спрайтов? Какого типа игры и их аналоги среди игр для ZX Spectrum?





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