В Метеоре применяется почти такой же способ формирования цвета, как в контроллере цвета Специалиста, только разрешение экрана остается 256х192 для совместимости со старыми играми:
Отдельное ОЗУ в видеокарте Метеор. В режиме COLOR2 в качестве порта цвета используется переменная attr. Режим экрана с линейной адресацией также похож на адресацию Специалиста. При увеличении младшего адреса с 0 до 191 экран заполняется вертикальными столбиками из горизонтальных байтов. Для перехода к следующему столбику надо увеличить адрес старшего байта.КОНТРОЛЛЕР ЦВЕТА ДЛЯ ПК "СПЕЦИАЛИСТ_МХ" В состав компьютера был введён контроллер цвета, допускающий 16 цветов на точку при разрешении 384 х 256 точек и имеющий своё собственное ОЗУ. Появилась возможность создавать "цветные" программы.
Основным отличием данной версии от предыдущих является наличие собственного порта цвета, реализованного на регистрах D1, D2. Это существенно облегчило программную поддержку контроллера цвета. Код цвета записанный в контроллер постоянно хранится в нём. При записи информации в экранную область памяти, код цвета из регистров порта параллельно записываются в ОЗУ цвета на элементах D3...D10. При отображении информации на экране монитора, одновременно с извлечением из видео ОЗУ байта посылки (8 горизонтальных точек), из ОЗУ цвета извлекается код цвета и фиксируется в регистре D12. Далее, при выводе битов полок видеоизображения на экран, код цвета записывается в регистры D13, D14.
Если бы Синклер не добавил в атрибут бит FLASH, то у нас тоже было бы по 16 цветов для PAPER и INK, как в Специалисте. Но видимо, не подумали об этом тогда. А сейчас уже ничего не изменить - игры написаны под стандартный байт атрибута. Но в Метеоре мы можем использовать режим COLOR2P, где PAPER и INK круче, чем в Специалисте, по 8 бит на цвет !
---------- Post added at 06:20 ---------- Previous post was at 06:00 ----------
После RESETа все цвета стандартные, используются аппаратные палитры для совместимости. Для устранения клешинга атрибутов палитры загружать не надо. Если в игре нужно использовать свою палитру - ее можно загрузить в загрузчике. Естественно все данные игры лежат на диске и их в начале игры загружают в ОЗУ, только палитры в ОЗУ видеокарты. Палитра не занимает ОЗУ компьютера - она в ОЗУ видеокарты Метеор.
---------- Post added at 06:25 ---------- Previous post was at 06:20 ----------
В Спектуме 15 цветов из 16 возможных. Два одинаковых цвета 0 и 8. Видеокарта при записи в память слоя цвет 0 преобразовывает в 8. То есть получаются цвета 1-15. На мониторе при этом все цвета останутся стандартными.
---------- Post added at 06:40 ---------- Previous post was at 06:25 ----------
В режиме COLOR2P видеокарта Метеор получает байт, который Z80 записывает в область пикселов экрана. Если бит 0, то в ОЗУ видекарты записывается байт цвета для 0 бита, если 1 - записывется байт цвета для 1 бита. Цвета берутся из палитры для рисования с номером в переменной pl2. Один байт для цвета бита 0, другой для цвета бита 1. Это позволит перекрашивать игры в момент рисования на экран в требуемые цвета. Можно использовать одну палитру, постоянно меняя два байта для выбора цвета или в загрузчике игры загрузить несколько палитр, а в игре выбирать номер соответствующей палитры.[COLOR="Silver"]
Последний раз редактировалось zx-kit; 11.09.2015 в 04:36.
"L-256"
у Вектора еще была (есть) быстрая графика
http://emu80.org/dev/dev_v.html
в копилку идей, тс
схемотехнику при медленном проце
Спасибо, но в Векторе режимы не имеют особых преимуществ перед режимами Метеора:
Метеор не занимает основную память.В БПЭВМ "Вектор-06Ц" используется общая оперативная память для микропроцессора и контроллера графического дисплея объемом 64Кбайта. Объем экранного ОЗУ, при числе адресуемых точек изображения 256х256 и 16-и цветах, равен 32Кбайт.
В Метеоре 8 дополнительных слоев и у всех одинаковые адреса пикселей c 0000 или 4000.Для удобства описания экрана он делится на 4-е плоскости.
Таблица плоскостей экранного ОЗУ :
¦ Адресное ¦ Номер ¦
¦ пространство ¦ плоскости ¦
¦ E000-FFFF ¦ 0 ¦
¦ C000-DFFF ¦ 1 ¦
¦ A000-BFFF ¦ 2 ¦
¦ 8000-9FFF ¦ 3 ¦
В Метеоре также.Каждый байт плоскости соответствует сразу 8-и точкам, расположенным рядом на одной горизонтальной линии. Причем старший бит соответствует самой левой точке.
В Вектрое байты идут снизу-вверх. В Метеоре в линейном режиме L=0 - это верхний байт в столбике, L=191 - это нижний байт. Также как в Специалисте.Вся плоскость графического экрана состоит из 8-и точечных черточек. Самому младшему адресу "черточки" соответствует левая нижняя черточка. Следующая черточка расположена над ней и т.д. до самого верха (8000H-80FFH). Черточка с адресом 8100Н геометрически расположена правее черточки с адресом 8000Н. Адрес самой верхней правой черточки в этой плоскости - 9FFFH.
В Метеоре также - от 1 до 4 битов на точку.каждой геометрической точке экрана соответствует по одному биту в каждой из 4-х плоскостей. Эти четыре бита и определяют номер цвета 0-15
А вот над этим надо подумать. Как в Метеор на второй ступени расширения графических возможностей добавить аппаратный скроллинг.аппаратная поддержка вертикального сдвига отображаемой информации
Последний раз редактировалось zx-kit; 12.09.2015 в 07:11.
"L-256"
256 точек по-горизонтали это 32 столбика байтов с номерами 0-31 в старшем байте. Чтобы создать иллюзию сдвига экрана надо задавать смещение от 0 до 7. При 0 - смещения нет.
Скроллинг влево.
При смещении 1 бит D7 в левом байте не виден, зато появляется бит D7 в байте из столбика 32. Перед сдвигом фона влево надо заполнить дополнительный столбец 32 тайлами фона.
Скроллинг вправо.
Также предварительно заполняем тайлами 32 дополнительный столбец экрана.
Давайте, думать как сдвигать и заполнять экран, если смещение больше 7.
Последний раз редактировалось zx-kit; 12.09.2015 в 09:35.
"L-256"
Да и не надо двигать больше, чем на 8 пикселей за раз. Другое дело, что в расширенной адресации для дополнительного столбца место есть, а вот в стандартном режиме дополнительный столбец надо класть в атрибуты, пострадает графика стандартного слоя. Олсо сдвиги вверх и вниз тоже нужны. Предлагается двигать слои отдельно (например, завести байтовую переменную, включенные биты которой говорят какие слои сдвинутся следующей командой. Еще хочется циклический сдвиг - это позволит выделить слой под спрайт, вывести его один раз и двигать по экрану аппаратным скроллингом.
По-вертикали понятно тоже надо, там тоже есть запас 16 точек (при линейной адресации с адреса 0). Стандартный экран сдвигаться не будет. Если надо сдвиг подпрограмму рисования фона надо будет преобразовать в режим цвета COLOR2 и линейную адресацию.
Видеокарта будет сдвигать текущий слой. Надо графические переменные типа направление сдвига слоя shift_direct (LEFT, RIGHT, UP, DOWN), величину сдвига shift_value (1-8). Про циклический сдвиг не понятно. Может достаточно за 1 кадр сдвигать на 1-8 точек ?
Последний раз редактировалось zx-kit; 12.09.2015 в 10:10.
"L-256"
Я как представлю каким образом придётся переделывать к примеру Soldier of Fortune то что то аж голова болеть начинает.
Весь блок отображения надо менять ПОЛНОСТЬЮ, он однозначно будет увеличен в размере, как минимум раза в 2-3, время выполнения соответствующее. Ко всем спрайтам придётся дорисовывать цветовую маску которая в 2-3 раза больше самого спрайта, принцип хранения спрайтов естественно надо будет менять, размер будет увеличен как минимум в 3 раза. Безостановочный рекодинг цветов из байтового представления в битовое убьёт процессор на первой же трети экрана.
Не совсем понятен в какой части карты здесь идёт разгрузка процессора?
---------- Post added at 11:53 ---------- Previous post was at 11:50 ----------
Кстати, мне уже кажется что сам программный код управляющий этой карточкой будет на несколько килобайт, может как нибудь подменяющееся пзу с программным кодом? а то пихать в каждую игру драйвер как то не айс
---------- Post added at 12:30 ---------- Previous post was at 11:53 ----------
Эммм, а если вдруг потом загорится увеличить возможное разрешение, то я что то не понимаю как это предусмотреть программно без переделки части отображения, формат хранения пикселей очень неудачен для разрешения больше 256, это моё мнение, не берите в голову![]()
Если в игре нет масок у спрайтов - значит в ней нет и клешинга.
Нет никагого преобразования байтов в биты. Этим занимается карта. Процессор пишет байтами. Про причины ускорения и разгрузки процессора есть ссылка в 1 посту.Безостановочный рекодинг цветов из байтового представления в битовое убьёт процессор на первой же трети экрана.
Не совсем понятен в какой части карты здесь идёт разгрузка процессора?
Пзу убрать нельзя - оно нужно для старых игр. Да и что туда писать - какие драйвера ?Кстати, мне уже кажется что сам программный код управляющий этой карточкой будет на несколько килобайт, может как нибудь подменяющееся пзу с программным кодом? а то пихать в каждую игру драйвер как то не айсПро линейную адресацию экрана есть ссылка в 1 посту.
---------- Post added at 12:30 ---------- Previous post was at 11:53 ----------
Эммм, а если вдруг потом загорится увеличить возможное разрешение, то я что то не понимаю как это предусмотреть программно без переделки части отображения, формат хранения пикселей очень неудачен для разрешения больше 256, это моё мнение, не берите в голову![]()
"L-256"
Непонятные для меня моменты:
Если карта успевает отображать только 5 слоёв с прозрачностью, то какой смысл в 8 слоях?
Что подразумевается под прозрачностью, просто отсутствие пикселя на данном плане и оставленный пиксель с предыдущего плана или же настоящая прозрачность - цвет пикселя на данном плане интерполированный с цветами пикселей предыдущих планов
при переделке игре надо оставлять стандартный вывод в 16384 и добавлять вывод цветов в пзу или полностью делать заново и всё выводить в пзу? если по 1 варианту так это явное увеличение выполнения, а если по 2-му то какой тогда смысл оставлять такую "неудобную" работу с пикселями если всё равно придётся всё перелопачивать
скроллинг экрана надо будет делать по принципу 15 летней давности аля денди? мож у кого посвежей идея есть?
---------- Post added at 14:03 ---------- Previous post was at 13:59 ----------
; hl - адрес символа
ld de, x * 256 + y * 8
dup 8
ldi
dec e
ldi
edup
я не понимаю как мне вывести спрайт в координаты x=243, y=179
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)