1

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

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

2

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

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

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

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

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

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

3

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

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

4

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

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

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

5

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

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

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

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

6

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

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

7

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

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

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

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, 5 Махов, dual-port SRAM).

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, 276 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, 5 Махов, dual-port SRAM).

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, 5 Махов, dual-port SRAM).

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. Других отличий (для меня) в данном случае нет.

16 Отредактировано AlexBel (26-11-2019 20:11)

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

Получил заказанные конвертеры VGA > HDMI. Опробовал на разрешении 1024х768 с масштабированием на телевизоре с нативным разрешением 1920х1080. Сравнивал отображение одной и той же картинки на дисплее ноутбука на родном разрешении и через конвертер. Если смотреть одновременно, то видно, что у картинки через конвертер более... сухие, что ли, цвета. Для того, чтобы смотреть через это дело "Агат" или что-то подобное с 1-3 бита на цвет, по мне, так качества выше крыши. Звук заводится через отдельный вход.
Фотографии с дисплеев не вижу смысла делать - по ним разницу не увидишь.

17

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

> А если нужен настоящий ужас, можно использовать "Электроника 32ВТЦ" - вот где тёплое и ламповое мыльное изображение и правильные пропорции :) :)

Зря вы так... Я сидел и за "Юностью-404" и за "32втц" и за "колокольчиком", а ещё подключал агат к примерно 23-дюймовому телеку с ч-б кинескопом (напрямую, в видеоканал) и за моником из состава дисплея 15ИЭ - тоже напрямки зацепленному на RGB-агата (с переключателем - оттенки зелёного или строгий монохром).

Так вот:
- Юность 404 так бешенно "дискретизировала" картинку, что режим 64x32 был на грани читаемости. Там же цветной кинек с не шибко большим разрешением. Сидишь перед экраном в полуметре и видишь все палочки-колбочки кинескопа. А букв уже не видишь.
В 32x32 буквы были видны, но даже 128x128 графика - точки уже состояли из конкретных "пикселей". Ни один современный LCD, со всякими цифровыми интерполяциями скалера и внешними конверторами агат->svga не может так изгадить картинку, как "тёплая ламповая" "Юность".

А, да: 64x32 на белом фоне ещё можно было разобрать. 64x32 на чёрном фоне тупо выглядел как созвездия мутного неба - вроде точки отдельные видны, но как их собрать в буквы - оставалось догадываться. Возможно, можно было сделать картинку получше, подкрутив яркость-контрастность, но тогда остальные режимы слепили глаза.

Не исключаю, что на той Юности ещё и сведение пушек было настроено не до конца, но тогда ещё я в такие дебри не лазил.
Тут вопрос ещё в том, можно ли их было настроить лучше ?

- 32втц имел физическое разрешение раза в 2-3 выше. На нём отдельные пиксели были видны, но 64x32 читался без большого напряжения глаз. Но тут как раз белый фон в этом режиме заметно напрягал глаза, я предпочитал работать на чёрном фоне, даже
под эту задачку слегка патчил текстовый редактор "Школьницы".

- И только монохромные кинеки давали нормальную картинку. Телек с большой диагналью был хорош, но сидеть от него надо было в 1-1.5 метрах. Что не всегда было возможно из-за ограничения стола. Колокольчик был тоже неплох. 15иэ был лучшим, там можно было так подстроить фокус, что были видны даже отдельные строки растра. Но у него был косяк, который я так и не смог вылечить - иногда подёргивалась кадровая синхра и картинка плавно подёргивалась вверх-вниз.

Всякие современные скалеры-конверторы дают итог, субьективно, где-то на уровне чуть лучшем чем 32втц, может быть на уровне Колокольчика, только с цветом. Но до 15иэ недотягивают.

18

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

32ВТЦ202 имел трубку повышенной чёткости, но даже на ней 256х256 и 32х32 были плохо читаемы, а 512х256 и 64х32 уж тем более. А на 101/201 - так вообще №;%:?*...
Более-менее нормальное изображение было на 6105, но полосы обратного хода луча очень портили картинку.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

19 Отредактировано AlexBel (27-11-2019 14:30)

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

Voldemar0 пишет:

Зря вы так...

Так я же излагаю своё субъективное мнение, никому его не навязываю. Я очень хорошо помню, как болели глаза от 32ВТЦ даже с новым, щелевым, кинескопом. Всё расплывалось перед глазами, если вглядываться. Играть можно было, но текст, особенно мелкий - ужас. И сравнить было с чем: цветной дисплей от КУВТ "Ямаха" - просто сказка! Пиксель к пикселю, картинка чёткая - я к этому дисплею подключал разные компьютеры.
А вот "колокольчик" - да, прекрасные, хоть и чёрно-белые, трубки. Изображение отличное, чёткость замечательная. Я эти дисплеи переделывал под VGA - большинство отлично работали, требовалось только подобрать режимы. Помню, когда-то неплохо на этом заработал...
А конвертеры VGA > HDMI - что увидел, то и написал, тоже субъективно. Да, на полноцветке (32 бита) разница есть (+ сравнивал разные дисплеи, на которых картинка изначально отличается), но сравнивать с 32ВТЦ я не не стал бы даже за километр. А если сравнивать, то ставить в равные условия - подать через конвертер такую же картинку, как на 32ВТЦ и сравнить - что тогда будет?

20 Отредактировано garnizon (27-11-2019 16:03)

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

Подтверждаю, у колокольчиков отличное изображение. Причем даже на бОльших чем у агата разрешениях (ес184х и прочие искры) все в порядке.

http://agatcomp.ru/Images/new_monic/MC6105_3.jpg

Крупно:
http://agatcomp.ru/Images/new_monic/MC6105_3.jpg

21 Отредактировано AlexBel (27-11-2019 16:55)

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

Мне удавалось выжать не только 640х480, но и 800х600. Правда, больше в порядке эксперимента, реально в то время необходимости в таком разрешении не было. Качество было уже не то, яркость, да и размер по горизонтали не удавалось сделать нормальным, но, всё же, читабельную картинку получить удавалось. Задел у этого монитора хороший.
Кстати, когда сделались доступными и дешёвыми EGA-мониторы, я начал переделывать под VGA их, правда, приходилось дорабатывать не только строчную развёртку, но и видеоканал. Но дело того стоило - некоторые мониторы работали не хуже, чем VGA-шные. А устанавливая модуль цветности МЦ-31.1 (с сабмодулем PAL) и усилитель с небольшим динамиком, можно было получить прекрасный по качеству видеомонитор - с видеомагнитофонами работало "на ура", картинка была замечательная. Купить небольшой цветной телевизор такого размера с такой картинкой было просто невозможно. Ну, во  всяком случае тогда и у нас в городе :) Кстати, видеомагнитофон с установленным сверху таким монитором выглядел очень впечатляюще, особенно, если выкрасить корпус в чёрный цвет. Да и практично - "шар" позволял легко менять угол поворота и наклона.
Извиняюсь за многословие, воспоминания нахлынули... :)

22

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

garnizon пишет:

Подтверждаю, у колокольчиков отличное изображение. Причем даже на бОльших чем у агата разрешениях (ес184х и прочие искры) все в порядке.

Spoiler

http://agatcomp.ru/Images/new_monic/MC6105_3.jpg

Крупно:
http://agatcomp.ru/Images/new_monic/MC6105_3.jpg

И никакого обратного хода ;)

23

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

Voldemar0 пишет:

Я сидел и за "Юностью-404" и за "32втц" и за "колокольчиком", а ещё подключал агат к примерно 23-дюймовому телеку с ч-б кинескопом (напрямую, в видеоканал)

У нас в школе была сборная солянка из мониторов: и "Юности" и "Шилялисы" и "Электроники ВТЦ", только, кажется, не 201-е, а еще 101-е. 64x32 на всех читать можно было с трудом. У некоторых мониторов сведение лучей у края экрана было такое, что даже в 32x32 буквы "троились".

А вот когда дома к ламповому "Рекорду В312" с диагональю 50 см цеплял "Агат" и "Правец", тут четкость была просто супер.

Насчет четкости: обычные кинескопы 32ЛК1Ц-1 и 32ЛК2Ц судя по справочнику должны давать четкость 300 линий по вертикали и горизонтали в центре экрана, сведение лучей внутри круга 0,75 от высоты экрана - 0,8 мм. То есть, хорошо отрегулированные "Юность" или "Шилялис" режим 256x256 показывать должны довольно прилично. Но, это, понятное дело, не про школьные мониторы, которые двигают, за ручки крутят, стучат по корпусу, когда один из цветов отвалится :)

24 Отредактировано Voldemar0 (28-11-2019 07:57)

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

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

PS Я тоже обратного хода не встречал на мониках в нормальных режимах. Разве что если сильно выкрутить регулировки.
Вероятно, это всё же поломка.

2AlexBel:
я че-то подумал: ты вот возишся с дисплейным контроллером на матрице и хочешь сделать его на собственной памяти.
А может таким макаром сделать отдельный ДК, который будет работать параллельно с основным ?
Т.е. просто периферийный модуль: воткнул его в агат и у него выход на svga/hdmi и он просто повторяет всю логику штатного ДК, кроме рефреша ОЗУ и работает параллельно с основным. Просто сигнал гонит на свой интерфейс со своими частотами и прочим.

Тут видиться целых три возможности:
1) Можно такую штуку использовать по прямому назначению: рисовать чистую картинку на LCD. Причем сразу на два монитора - на телек и на svga/hdmi.
2) Можно такой штукой тестить комп или использовать его если выхлоп штатного ДК накрылся. Т.е. он ещё рефреш памяти делает, а больше ничего.
3) Если схема хорошо зайдёт, то можно на её основе сделать реплику ячейки 121 на новый лад.

У тебя же почти всё есть для этого - оформить только в виде автономной схемы.

25

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

Voldemar0 пишет:

А может таким макаром сделать отдельный ДК, который будет работать параллельно с основным ?
Т.е. просто периферийный модуль: воткнул его в агат и у него выход на svga/hdmi и он просто повторяет всю логику штатного ДК, кроме рефреша ОЗУ и работает параллельно с основным. Просто сигнал гонит на свой интерфейс со своими частотами и прочим.

Не только почти всё готово - я планировал сделать такое устройство. Полностью автономное, с собственной памятью, оно бы только отлавливало факт записи в служебные регистры и память. Память - двупортовая, видеовыход можно строить, как угодно. Правда, есть ещё вопрос синхронизации для совмещённого режима, но лично мне он не нужен. Конечно, планировал реализовать 121-ю ячейку. Но устройство так и осталось "на бумаге" за ненадобностью, так как я занялся разработкой "Агата" целиком на современной базе.

Кстати, уже позже я узнал, что нечто подобное сделали для ZX-Spectrum - к нему подключается "малина" в качестве дополнительного и независимого видеоконтроллера с HDMI. Разница в том, что вся логика сделана программно, но основной принцип тот же.