1

Тема: Разделение памяти между процессором и видеоконтроллером

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

2

Re: Разделение памяти между процессором и видеоконтроллером

Если бы процессор останавливался, то тогда прощай совместимость с Apple на уровне дискового контроллера.
"Главный" тут - тактовый генератор процессора. Такт ЦП делится на два "окна" по 500 нс. В пределах одного окна в память лазит ЦП, в пределах второго - ДК.

В Apple ДК и ЦП работают синхронно - ДК данные нужны раз в 1 мкс, и никаких коллизий нет.

У Агата ДК и ЦП работают асинхронно. Чтобы у ДК Агата данные всегда были в тот момент, когда они ему нужны, используются два буфера: буфер адреса и буфер данных.

Когда ДК Агата формирует адрес, он запоминается в буфере адреса и во время отведенного ДК "окна" происходит обращение. Данные записываются в буфер и там ждут момента, когда они понадобятся ДК.

Кстати, у семерки и девятки эта буферизация отличается.

3

Re: Разделение памяти между процессором и видеоконтроллером

Спасибо, понятно!
А в чём отличия в буферизации семёрки и девятки? Схемно или алгоритмически?

4

Re: Разделение памяти между процессором и видеоконтроллером

Дополню.
Регистр адреса упреждающего чтения ДК: D74, D75.
Регистр буфера данных упреждающего чтения ДК: D49, D50.
В зависимости от режима работы ДК (Агат/Яблочко) используются разные мультиплексоры старших адресов видеопамяти D28 и D29.
Регенерация идет силами ДК.
Это по девятке.

Турбо АГАТ-9/16 (65C802 CPU, 2.8 Маха), MSX2 Yamaha YIS503IIIR.

5

Re: Разделение памяти между процессором и видеоконтроллером

С семеркой там вообще беспредел :) Отдельного регистра адреса нет, поэтому ДК может сменить адрес прямо во время обращения к памяти. Вплоть до того, что по сигналу RAS в ОЗУ будет передано значение адреса до инкремента, а по CAS - после. Но ДК, несмотря на это безобразие, работает.

Тут используется тот факт, что данные ДК нужны реже, чем происходят циклы чтения. В текстовом режиме - раз в 1,33 мкс. Поэтому, даже если при первом обращении к ОЗУ прочиталась фигня, к моменту второго обращения (через 1 мкс) адрес еще не изменится и данные будут получены правильные.

У такой схемы, правда, есть побочный эффект: у ДК остается мало времени на обработку данных, если понадобилось второе чтение - меньше 330 нс. Думаю, что именно поэтому в качестве знакогенератора нельзя было использовать К573РФ с циклом чтения 450 нс, которые встречаются в массе других компьютеров. Тут нужна именно К556РТ с циклом чтения 50-80 нс. Похоже, по этой же причине в плате знакогенератора использовали 531 серию в мультиплексоре адреса - наносекунды экономили.

6

Re: Разделение памяти между процессором и видеоконтроллером

Спасибо! Скорее всего, в реплике придётся реализовать аналогичный алгоритм разделения памяти, двупортовку использовать не получится, как бы приятно это не было...

7

Re: Разделение памяти между процессором и видеоконтроллером

А видеовыхлоп будешь делать на VGA? С утроением строк? Тогда и ДК должен втрое быстрее получать данные... А втиснется ли в 500 нс?

Турбо АГАТ-9/16 (65C802 CPU, 2.8 Маха), MSX2 Yamaha YIS503IIIR.

8 Отредактировано AlexBel (23-10-2019 14:23)

Re: Разделение памяти между процессором и видеоконтроллером

Да, выход будет на VGA/DVI, но без скандаблера. Будет использован видеобуфер на 8 килобайт (двупортовая память - один порт на запись, один - на чтение), в который будет копироваться информация из текущей видеостраницы. А уже из этого буфера будет работать видеоконтроллер, формируя картинку, соответствующую видеорежиму. Т.е. видеоконтроллер будет работать сам по себе, процессор - сам по себе.
Задача - обеспечить временное разделение памяти между обращениями процессора, копированием в буфер и регенерацией, потому, как SDRAM. Вчера уже делал наброски времянок - ох и тяжкая это работа :)
Картинка будет в честном 1024х768 (утроение по вертикали и учетверение по горизонтали). Сам видеоконтроллер уже отлажен и хорошо работает:
http://forum.agatcomp.ru//viewtopic.php?pid=2892#p2892
http://forum.agatcomp.ru//viewtopic.php?id=223
Хотел реализовать проект полностью двупортовой памяти, чтобы избежать временного разделения, но не хватает копыт на FPGA. Придётся использовать SDRAM и буфер...

9

Re: Разделение памяти между процессором и видеоконтроллером

AlexBel пишет:

Да, выход будет на VGA/DVI,

На каком чипе-драйвере планируешь делать?

Турбо АГАТ-9/16 (65C802 CPU, 2.8 Маха), MSX2 Yamaha YIS503IIIR.

10 Отредактировано AlexBel (24-10-2019 07:35)

Re: Разделение памяти между процессором и видеоконтроллером

LeoN пишет:
AlexBel пишет:

Да, выход будет на VGA/DVI,

На каком чипе-драйвере планируешь делать?

Без драйверов - только резисторы и ESD-защита. Я думал использовать сериализатор TDMS и даже купил его, но ресурсов Cyclone IV вполне достаточно для работы с HDMI напрямую. VGA придётся подключать туда же, куда и HDMI или использовать конвертер HDMI>VGA из-за нехватки пинов.

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=661&download=1

Некоторые идеи я взял из этого проекта: https://github.com/mvvproject/ReVerSE-U16

Post's attachments

Attachment icon DVI.JPG 130.87 kb, 96 downloads since 2019-10-24 

11 Отредактировано AlexBel (29-10-2019 09:15)

Re: Разделение памяти между процессором и видеоконтроллером

В дополнение - концепция очередной раз изменилась. Всё же будет и двупортовая статическая память и VGA и HDMI. Решил использовать бережно хранящийся Cyclone II аж о 240 ногах - тут хватит и на память, и на видео (4 бита на цвет), и на шину расширения, и на всё остальное. Конечно, Cyclone II не потянет HDMI, но можно использовать либо сериализатор, либо конвертер VGA > HDMI. Скорее всего, использую второй вариант, уже присмотрел конвертер на "Али": https://ru.aliexpress.com/item/32880559 … b201603_52

P.S. Забавные переводы на "Али". "Ранкман VGA мужчин и женщин" - звучит, как название какого-то приспособления из секс-шопа :)

12 Отредактировано LeoN (29-10-2019 23:39)

Re: Разделение памяти между процессором и видеоконтроллером

AlexBel пишет:

Всё же будет и двупортовая статическая память и VGA и HDMI.

"Верной дорогой идёшь, товарищ!" ;)
А сама двухпортовка-то у тебя есть? Какая?

AlexBel пишет:

Конечно, Cyclone II не потянет HDMI, но можно использовать либо сериализатор, либо конвертер VGA > HDMI. Скорее всего, использую второй вариант

Ну зачем лишние преобразования?.. И ног достаточно, и для ВГА все равно ЦАПить надо паралельную шину цвета (а затем обратно преобразовывать), а это неизбежно потеря какчества... Почему не хочешь в цифре (DVI/HDMI) плюс бонусом/резервом VGA? Какой профит?

Турбо АГАТ-9/16 (65C802 CPU, 2.8 Маха), MSX2 Yamaha YIS503IIIR.

13 Отредактировано AlexBel (30-10-2019 10:41)

Re: Разделение памяти между процессором и видеоконтроллером

Двупортовка CY7C028V-15AI, у меня с ней на девборде реплика уже давно вовсю работает (кажется, я фотографии выкладывал).
Я не думаю, что эти преобразования сильно скажутся на изображении. Я посмотрел в тырнете фотографии работы этого конвертера - картинка хорошая, даже на высоких разрешениях. А у меня - 1024х768 и ниже. Да и сами преобразования... Адаптер разрешения не меняет, только цифрует видеосигнал и последовательным кодом гонит на дисплей. И изменение разрешения происходит уже в самом дисплее при масштабировании под разрешение матрицы, независимо от того, каким методом получена картинка - цифрой или аналогом. Так что единственное место, где может возникнуть потеря качества, это АЦП в адаптере. Но я думаю, что при глубине цвета 12бит (у меня 4 бита на цвет) это вряд-ли скажется. Да и то - это так, на всякий случай, реально не думаю, что будет использоваться более 2 бит на цвет.
В качестве основного выхода мне нужен VGA просто потому, что я для подобных дел купил старенький дисплей со сторонами 5:4, у которого только VGA. Я понимаю, что VGA - архаика, но раз уж у меня такой дисплей, то и выход пусть будет таким.
Впрочем, возможно, сериализатор для HDMI тоже будет на плате - работа над схемой и разводкой ещё в процессе.

14 Отредактировано LeoN (30-10-2019 14:52)

Re: Разделение памяти между процессором и видеоконтроллером

AlexBel пишет:

Двупортовка CY7C028V-15AI

Ясно, спасибо.

AlexBel пишет:

(кажется, я фотографии выкладывал).

Вроде как нет...

AlexBel пишет:

что я для подобных дел купил старенький дисплей со сторонами 5:4, у которого только VGA.

Это что же получается: 4:3 растр 1024х768 будет растягиваться монитором до его нативного 5:4 растра 1280х1024... Это еще искажение с размыливанием!
Монитор для этого нужен пятнашка или NEC MultiSync - у меня двадцатка (LCD2080UX+), он реально умеет 4:3 1024х768 в центре казать (а также и мылить на весь экран 1600х1200). Предполагаю, что и другие неки мультисинки также смогут...

AlexBel пишет:

Впрочем, возможно, сериализатор для HDMI тоже будет на плате

Какая то существенная разница есть между DVI и HDMI?

Турбо АГАТ-9/16 (65C802 CPU, 2.8 Маха), MSX2 Yamaha YIS503IIIR.

15

Re: Разделение памяти между процессором и видеоконтроллером

LeoN пишет:
AlexBel пишет:

(кажется, я фотографии выкладывал).

Вроде как нет...

Странно, не могу найти. Может, удалил... Собственно, там мало интересного - девборда Altera DE1 с дополнительной платкой с двупортовкой и процессором 65С816.


LeoN пишет:
AlexBel пишет:

что я для подобных дел купил старенький дисплей со сторонами 5:4, у которого только VGA.

Это что же получается: 4:3 растр 1024х768 будет растягиваться монитором до его нативного 5:4 растра 1280х1024... Это еще искажение с размыливанием!
Монитор для этого нужен пятнашка или NEC MultiSync - у меня двадцатка (LCD2080UX+), он реально умеет 4:3 1024х768 в центре казать (а также и мылить на весь экран 1600х1200). Предполагаю, что и другие неки мультисинки также смогут...

Это самое искажение с размыливанием будет и при работе через VGA и через HDMI. Ну, а монитор с нативным разрешением 1024х768 лично я искать не вижу никакого смысла. Небольшие герметрические искажения при масштабировании 4:3 на 5:4 - полнейшая ерунда и на картинку особого влияния не оказывает, особенно, если учесть, что каждый пиксель "Агата" увеличен в 4 раза по горизонтали и в 3 раза по вертикали.
А если нужен настоящий ужас, можно использовать "Электроника 32ВТЦ" - вот где тёплое и ламповое мыльное изображение и правильные пропорции :) :)

LeoN пишет:
AlexBel пишет:

Впрочем, возможно, сериализатор для HDMI тоже будет на плате

Какая то существенная разница есть между DVI и HDMI?

HDMI позволяет передавать звук и разъём HDMI меньше по размеру, чем DVI. Других отличий (для меня) в данном случае нет.