Soviet Union ZX Spectrum CommunityВоскресенье, 24.11.2024, 22:45
Вы вошли как Гость | Группа "Гости" | RSS
 [ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Разработка схемы видео-адаптера для ZX-Spectrum
HazarДата: Пятница, 31.07.2015, 03:20 | Сообщение # 61
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline


Менеджер памяти
Прикрепления: 9797254.gif (74.0 Kb) · 6487888.gif (36.1 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Суббота, 01.08.2015, 02:13
 
HazarДата: Вторник, 04.08.2015, 03:04 | Сообщение # 62
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline


Прикрепления: 3368665.gif (36.0 Kb) · 3930420.gif (37.3 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Вторник, 04.08.2015, 03:07
 
HazarДата: Среда, 05.08.2015, 03:07 | Сообщение # 63
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Формирователь атрибутов для стандартного режима с увеличенным
“цветовым разрешением” атрибута ( 8*8 точек) при режиме развертки 1024*768 .

Предлагаемая схема раскладки атрибутов позволяет также расширить количество
Отображаемых цветов до (6 bit) на каждый цвет, но требуется использование
Параллельного включения 3 микросхем памяти ( K6R4008V1D) или 2 (K6R4016V1D).
При сохранении предлагаемой раскладки адресного пространства атрибутов.
При использовании одной микросхемы С 8 битной организации удается получить только стандартное количество цветов
2 бита на каждый цвет (включая цвет paper).
В схеме видео-адаптера предполагается использовать независимые счетчики для
Формирователя атрибутов что дает некоторые преимущества (по сравнению со схемами
где формирование адресного пространства пикселов и атрибутов совместное).
Одним из таких преимуществ является произвольное изменение размера или координат
выводимого атрибута, а также получение смешанных атрибутов с других независимых источников.

Прикрепления: 5393205.gif (66.1 Kb)


Spectrum жив в нашей душе навсегда
 
HazarДата: Понедельник, 21.12.2015, 15:07 | Сообщение # 64
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Реализация декодера для портовых расширений.  (с использованием индивидуального слота для видеоадаптера)
Принцип работы -декодер на логике производит предварительную выборку И дешифрацию диапазона адресов 16384-23296
(адресной шины процессора Z80) ,После чего полученный сигнал выборки объединяется по логике ИЛИ (OR) С сигналом IORQ
процессора ,Полученный сигнал Arb_iorq1 Заводится отдельной  линией на слот видеоадаптера, устройство позволяет
использовать любой номер порта в диапазоне 16384 - 23296  без конфликтов со стандартными портами  Speccy. При условии
использования в компьютере арбитра портов рассмотренном в теме    zx.clan.su/forum/7-150-1

Прикрепления: 4958388.gif (55.9 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Понедельник, 21.12.2015, 15:11
 
HazarДата: Понедельник, 21.12.2015, 15:37 | Сообщение # 65
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Обновление схемы видеоконтроллера  (1024*768    ~60 Hz  XGA)

Устройство предназначено для генерации сигналов синхронизации мониторов и формирователем адресного  пространства экрана.
Схема формирует строчный синхронизирующий импульс (ССИ),строчный гасящий (СГИ), Кадровый синхронизирующий импульс (КСИ),
кадровый гасящий(КГИ) а также Импульсы горизонтального Border .

Схема использует 2 внешние задающие  частоты ~4 mHZ   ~8 mHZ заведенных на тактовые Входа счетчиков,  для некоторых мониторов
может потребоваться дополнительно подбор Внешних частот   (4, 8mHz) для формирования правильного отношения сторон (4 - 3)  .



Набор элементов Quartus
Прикрепления: 4358402.gif (24.9 Kb) · __Quartus.zip (149.8 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Понедельник, 21.12.2015, 16:27
 
HazarДата: Воскресенье, 06.11.2016, 22:10 | Сообщение # 66
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Проблема смешивания цвета INK , PAPER и BORDER.
Обычно в стандартных схемах атрибутного вывода в спектрумах применяли
Мультиплексоры кп11 или кп12,14 при этом вывод цвета чернил и бумаги
разделялся во времени (в каждый момент времени выводился либо цвет чернил
либо бумаги) . В качестве управляющего сигнала для мультиплексоров служил
пиксельный видео-поток , сформированный сдвиговым регистром
при наличии логической «1» в видео-потоке отображался цвет INK а при «0»
цвет PAPER . Данное решение удобно использовать при небольшом количестве
цветов , при расширении количества цветов (256 индексный код ) требуются
довольно сложные ключевые схемы с не менее сложной предварительной
дешифрацией (выборкой каналов) . Тем не менее существует более простое
решение за счет применения аналогового мультиплексора который работает
с малыми уровнями сигналов (0,7 ….2 в) и имеет согласованный выход для
подключения непосредственно к мониторам.
Прикрепления: 3975225.gif (44.8 Kb)


Spectrum жив в нашей душе навсегда
 
Black_CatДата: Воскресенье, 06.11.2016, 22:37 | Сообщение # 67
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Ну, насамделе, обычно всёж коммутируют мультиплексорами цифру, которая затем уже поступает на ЦАПы :)

"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Понедельник, 07.11.2016, 19:18 | Сообщение # 68
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Преобразования индексного цвета

можно конечно и цифру с коммутировать если средства позволяют ,
только вот как коммутировать к примеру 65536 color ?
Прикрепления: 0094145.jpg (192.2 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Понедельник, 07.11.2016, 19:27
 
Black_CatДата: Вторник, 08.11.2016, 13:41 | Сообщение # 69
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
65536 color это RGB 565, т.е. два ЦАПа с 5 разрядной мультиплексируемой шиной и один с шестиразрядной. При этом Спековский IRGB представляется в виде пяти, или шестиразрядного фиксированного кода. Цифровое мультиплексирование обычно применяется в ПЛИС.

"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Вторник, 08.11.2016, 15:42 | Сообщение # 70
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Что то по моему о разных вещах говорим, 65536 color в цифровом представлении это 16 линий (2 байта), допустим 16 бит это цвет INK
но еще есть PAPER (допустим сделаем 8 бит для него), что еще есть атрибут яркости и бордер (8 цветов)
всю эту кучу надо смешивать обязательно в цифровом виде?

Аналоговые микросхемы ничуть не хуже PLIS в некоторых случаях даже лучше (по быстродействию ничуть не уступают цифровым микросхемам).
К тому-же не будете же вы PLIS напрямую к монитору цеплять , все равно на выход ставят или транзисторы или какие-нибудь буферные микросхемы с большой нагрузочной способностью.
**************************************************************************************
Перекодирование цветов INK до 64 цветов (для стандартного режима) с помощью битов "PAPER"

Прикрепления: 3538140.gif (64.3 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Среда, 09.11.2016, 23:34
 
Black_CatДата: Вторник, 08.11.2016, 15:54 | Сообщение # 71
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Два байта делишь на три цвета, получаешь 5+6+5 для 64к цветов.

"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Среда, 09.11.2016, 03:08 | Сообщение # 72
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Сделал индекс всего цветового спектра на 256 цветов с двумя уровнями яркости , визуально видно что 256 цветов не хватает .
Если же разбить всю палитру На 2 или лучше 3 фрагмента то смотрится еще более менее, а 655536 цветов Результат должен быть еще лучше
притом палитру похоже можно сделать фиксированной. Сделать такой хитрый цветовой дешифратор с индексным представлением , тогда
отпадает необходимость хранить в памяти адаптера пикселы и атрибуты отдельно так как цветовой индекс уже содержит все цвета.

2 в 16 степени это не то же самое что (B 2^5)+(G 2^5)+(R 2^6)= 128 цветов
Так получается из-за того что цвета изолированы друг от друга, цифровые
мультиплексоры не смешивают амплитуды сигналов, а при аналоговом
Смешивании как раз бы получилось 65536 ,но есть и недостаток основные цвета влияют
друг на друга !

может я конечно и не прав но монитор не отображает весь спектр цветов. из за близкого расположения пикселов основные цвета смешиваются
в разных пропорциях

декодер индексного цвета на vhdl , как работает не проверял
до паяльника руки пока не доходят

Прикрепления: palitra_256_ind.zip (148.6 Kb) · Decoder.zip (4.8 Kb) · 7433231.gif (15.8 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Среда, 09.11.2016, 23:38
 
HazarДата: Пятница, 11.11.2016, 01:53 | Сообщение # 73
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Формирователь сигнала Flash
Схема разработана в связи с изменением в проекте метода вывода
Атрибутов и пикселов, в совмещенный формат (ATR+PIXELS) с индексной
Кодировкой цвета.



исследования смесителей на мультиплексорах
Прикрепления: _MUX.zip (261.5 Kb) · 4972967.gif (8.7 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Пятница, 11.11.2016, 13:27
 
Black_CatДата: Воскресенье, 13.11.2016, 01:48 | Сообщение # 74
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Hazar ()
2 в 16 степени это не то же самое что (B 2^5)+(G 2^5)+(R 2^6)= 128 цветов


:) и с какого перепою ты их плюсуешь? :)


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Понедельник, 14.11.2016, 03:40 | Сообщение # 75
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Цитата Black_Cat ()
и с какого перепою ты их плюсуешь? :)


Да без бутылки не разобраться (интуиция против разума)
Цвета конечно смешиваются (умножаются) если все 16 бит одномоментно
Присутствуют и подаются на ЦАП , но мультиплексоры коммутируют цвета во
Времени так что количество разрядов уменьшается вдвое.


Spectrum жив в нашей душе навсегда
 
Black_CatДата: Понедельник, 14.11.2016, 13:57 | Сообщение # 76
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Мультиплексоры коммутируют токо видеопотоки: бордюр/экран, стандартный экран 16 color/расширенный экран 64k color (если ты его хочешь). Нет никакого уменьшения разрядности, ты путаешься.

"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Понедельник, 14.11.2016, 22:02 | Сообщение # 77
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
PAPER / INK Коммутируют

Знакогенератор часть 2

Символьная Графика пользователя (UDG) .

В верхних областях памяти компьютера, начиная с адреса 65368 и по адрес 65535 находится область UDG-графики (графики пользователя). Она занимает 168 байт, каждый символ занимает 8 байтов, таким образом можно задать только 21 символ.

На клавиатуре компьютера эти символы "привязаны" к клавишам от A до U в алфавитном порядке и выдаются на экран когда компьютер находится в графическом режиме, Этот режим обычно применяют когда нужно печатать на экране не стандартные символы или используют для добавления национальных
шрифтов.

Обращение процессора к этой области можно интерпретировать с некоторыми оговорками как символьный режим для печати текста на экране.

И соответственно сформировать управляющий сигнал для манипуляций
С символьными данными с которыми в текущий момент времени работает процессор.



Нестандартные наборы и расширенные графические режимы.

Графический режим - 512x192 применялся на не которых клонах ZX для печати ,большего количества
символов в строке ( 85) при этом использовали символы с нестандартным размером 6x8 точек

Для идентификации этого режима можно использовать сервисный ROM с загруженным шрифтом
пользователя, таким образом при текущей печати символа блок знакогенератора сможет произвести
сравнение данных (содержимого памяти ZX Spectrum с данными расположенными в ROM (6x8) x XX. )

Для хранения символьных данных проще всего использовать “виртуальный ROM”
Который физически расположен в FPGA (напр. м.с. EP2C8Q208C7).

Код шаблон на VHDL для описания ROM
*****************************************************
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity ROM is

port (
cl : in std_logic;
rd : in std_logic;
address : in std_logic_vector(6 downto 0);
data_out: out std_logic_vector(15 downto 0));

end ROM;

architecture behav of ROM is
type ROM_array is array (0 to 95)
of std_logic_vector(15 downto 0);

constant content: ROM_array := (

0 => "0000000000000000", -- данные символов 16x16
1 => "0000111111000000",
2 => "0000000011100000",
-----------------------------------------------------
13 => "0000000000001101",
14 => "0000000000001110",
1535 => "0000000000001111",

others => "0000000000000000");

begin
process(cl, rd)
begin

if(cl = '1' ) then
elsif (cl'event and cl = '1') then

if rd = '1' then -- данные идут по фронту

data_out <= content(to_integer (unsigned (address)));
else
data_out <= "0000000000000000";

end if;
end if;
end process;
end behav;
*********************************************************************
Прикрепления: 1346657.gif (59.2 Kb) · 8789156.gif (12.6 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Понедельник, 14.11.2016, 22:05
 
HazarДата: Понедельник, 14.11.2016, 23:19 | Сообщение # 78
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Наборы шрифтов и псевдографики различных размеров для прошивок.
8x8. 8x16. 16x16. 16x24. 24x32. 32x32. (character set ,roms HEX format)
Прикрепления: Symbols.zip (33.8 Kb) · character_set.zip (53.2 Kb)


Spectrum жив в нашей душе навсегда
 
HazarДата: Среда, 16.11.2016, 22:04 | Сообщение # 79
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Знакогенератор  часть 3
 Делаем прошивку  из графических файлов. 
В части№2 я выложил пример кода на VHDL для описания ROM  который несмотряна своюПростоту  все же имеет недостаток  а именно двоичное представление данных для описываемых символов, что при большом объеме ROM становится слишком долго набирать весь набор символов (а у нас их 96 ) . Существуете ще другой вариант воспользоваться встроенным в Quartus2 мастером  “MegaWizard”Который  может создать компонент ROM самостоятельно. Проблема вся в том где взять HEX файл в формате  intel, требуемый  для загрузки в ROM. Если в распоряжении разработчика есть Только графические файлы символов требуемых размеров 16x16  16x24  24x32  и.др. Для работы с файлами символов  понадобится универсальный конвертор например (winhex) С помощью этой программы можно работать как с текстовыми форматами(ASC)  так и с  бинарными  включая HEX формат .   Редактировать же сами символы можно в любом графическом редакторе например на ZX Spectrum можно использовать программу “DoubleFont Editor”  которая позволяет редактировать символы 16x16 точек.  Полученные графические файлы нужно сконвертировать в формат WBM (в негативном цвете) этот формат  сохраняет графику в бинарном виде(HEX)и ничег окроме своего заголовка размером в 4 байта и данных графики не содержит. Далее с помощью Winhex можно вырезать ( меню прог.команда cut) ненужные заголовки .  Полученные таким образом файлы нужно соединить в один,  что можно сделать в файловом менеджере,и наконец   сконвертировать объединенный  файл программой “winhex”  в формат  Intel  hex.   Теперь  можно использовать полученный файл  в проекте Quartus 2.
Прикрепления: _16x16.zip (44.8 Kb) · 9277437.gif (34.3 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Среда, 16.11.2016, 22:07
 
HazarДата: Понедельник, 21.11.2016, 22:26 | Сообщение # 80
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Метод разделения переднего и заднего планов а также устранения “клэшинга”
С помощью отслеживания кодов команд CALL .

Для начала я подобрал рабочий пример процедуры на ассемблере, из разбора которого И появилась эта новая идея
Пример из книги как написать игру для ZX Spectrum:

На рис. показана часть игрового пространства, состоящего из протяженного пейзажа и микроавтобуса, проезжающего мимо домов. На переднем плане мелькают дорожные фонари. Выехав за пределы города, автомобиль останавливается на пару секунд, а затем начинает свое движение с исходной точки трассы. Просмотрев этот мультфильм несколько раз, вы обнаружите, что дома появляются не каким-то случайным образом, а занимают строго определенное положение на пути следования автомобиля. То есть в программе создается вполне конкретный пейзаж и каждый момент времени на экране виден только небольшой его фрагмент.



Рис Вывод изображения из дополнительного экрана. Поясним, как это достигается. В блоке данных, описывающих пейзаж (в программе он обозначен меткой D_LAND), указывается положение каждого дома (или другого объекта) на трассе, протяженность дома, его «удаленность» от дороги и адрес другого блока, задающего его внешний вид. Программа просматривает данные пейзажа и, исходя из положения автомобиля (он всегда выводится в центре окна), выбирает только те дома, которые целиком или частично попадают в окно экрана, то есть если правый угол дома не выходит за левую границу и левый - за правую, а остальные пропускает. После этого начинается вывод объектов в дополнительный экран: сначала дома, затем рисуется дальний тротуар, автомобиль, ближний тротуар и, наконец, фонари. Как только построение закончено, окно дополнительного экрана переносится в физический видеобуфер и тем самым изображение становится видимым.
Так как объем памяти ограничен, в программе заданы только два типа зданий, а протяженность пейзажа измеряется в 200 знакомест.
Процедура ПЗУ, находящаяся по адресу 8020, служит для проверки нажатия клавиши Break (Caps Shift/Space). Подпрограмма не требует никаких входных параметров и сообщает о том, что Break нажата установкой на выходе флага переноса. В противном случае выполняется условие NC.

ORG 60000 ; Адрес ( виртуального) экрана = #8000

V_OFFS EQU #40 ;старший байт смещения адреса ; «виртуального» экрана относительно начального адреса физического экрана

LD A,69
LD (23693),A
XOR A
CALL 8859
CALL 3435
LD A,2
CALL 5633 ;здесь необходима только для правильного вывода атрибутов основного экрана

MAIN LD A,2 ; Инициализация переменных
LD (X_LAMP),A
LD HL,0
LD (X_LAND),HL
CALL FRAME ;рамка вокруг окна
MAIN1 CALL CLS_V ;очистка « виртуального » экрана

Формирование игрового поля в «виртуального» экране

CALL LAND ;вывод заднего плана (дома)
CALL LINE1 ;рисование дальнего тротуара
CALL PUTCAR ;автомобиль
CALL LINE2 ;ближний тротуар
CALL LAMPS ;фонари
-------------------------------------
CALL PUTVRT ;вывод окна виртуального экрана на физический

CALL 8020 ;проверка нажатия клавиши Break
RET NC ;выход из программы, если нажата
LD HL,(X_LAND) ;изменение координаты автомобиля
INC HL
LD (X_LAND),HL
LD DE,200 ;если пройдено расстояние
AND A ; меньше 200 знакомест,
SBC HL,DE
JR NZ,MAIN1 ; то движение продолжается
LD BC,100 ;иначе - пауза 2 сек.
CALL 7997
JR MAIN ; и переход к началу пути.

Из анализа кода программы видно что все объекты строятся последовательным выполнением Подпрограмм (CALL LAND, CALL LINE1 …) теперь если адрес каждой
Подпрограммы сохранить в специальном буфере (внутренняя память плис). То можно получить управляющие сигналы для построения и выделения памяти
Для каждого слоя, при таком методе становится неважно где передний фон Или задний, достаточно зафиксировать очередность выполнения команд CALL
Последняя подпрограмма будет выведена как передний фон автоматически.

Конечно в реальной игре количество команд CALL может быть очень большим, но ведь ничто не мешает сделать отсев лишних команд используя проверки
Дополнительных признаков (пример: если в течении построения кадра очередная. Подпрограмма ни отправила в область экрана ни одного байта, то её можно смело
исключить из списка). Таким образом можно сохранить несколько экранов в не зависимой памяти, а при выводе изображения смешивать экраны в нужном порядке при этом можно использовать цепочку элементов AND / OR . При этом Экраны содержащие одни нули игнорируются так как очистка экрана производится
стандартными методами в основной памяти видеоадаптера.
Прикрепления: 4888157.gif (135.3 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Вторник, 22.11.2016, 15:26
 
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:

Copyright MyCorp © 2006Сайт управляется системой uCoz