Быть или не быть VGA-видеокарте на советских микросхемах?!
Всё же быть! Представляю Вашему вниманию VGA-видеокарту:
Разрешение 256 х 128 пикселей, 256 цветов, 2 страницы видеопамяти и все это на 60 микросхемах. Общий объем видеопамяти 64 Кб.
Микросхемы использованы советского производства, хотя некоторые уже российского, но ведь технологии все равно тех времен, значит этим можно пренебречь. Эта видеокарта разрабатывалась для ЭВМ «Таймыр-2», который метит в книгу «рекордов Гиннесса» как самый затянувшийся проект.))) На самом деле видеокарте все равно с кем в связке работать, поэтому к ней можно подключить любой «камень». Главное, чтобы пинов хватило. А их надо ни много ни мало — 15 штук (8-и битная шина данных, 5 команд, такт и сигнал видимого окна).
Организация цвета происходит одним байтом, в котором отведены 3 бита под красный, 3 под зеленый и 2 под синий.
Команды:
Передать координаты Х
Передать координаты Y
Установить пиксель нужного цвета по заранее переданным координатам и увеличить координату Х на 1. Если Х стал больше 255, то Х становится равным 0, а координата Y увеличивается на единицу. Если Y стал больше 127, то пиксель рисуется уже на странице №2.
Получить содержимое пикселя по заранее переданным координатам и увеличить координату Х на 1. Если Х стал больше 255, то Х становится равным 0, а координата Y увеличивается на единицу. Если Y стал больше 127, то пиксель берётся уже с страницы №2.
Смена видимой страницы.
Принципиальная схема очень большая, поэтому для детального рассмотрения рекомендую ее скачать по ссылке: Яндекс Диск. или GitHub.
Краткое описание работы:
Так как используется видеорежим 640х480 пикселей, 60 Гц. Нужно тактировать схему с частотой 25,175 МГц. Но у данной видеокарты разрешение 256х128, а это значит, что 1 пиксель нужно растянуть по ширине и высоте. Для этого необходимо уменьшить кварц на половину, то есть нужен 12,5875 МГц. Но тут возникла проблема: мне не удалось найти советский кварцевый резонатор на 12,5875 МГц. или на 25,175 МГц, поэтому пришлось выкручиваться кварцем на 12,5 МГц. Это конечно не Фэн-шуй, но монитор худо-бедно принимает такие отклонения. Генератор собранном на микросхеме К155ЛН1 (U56). Далее тактовый импульс поступает на узел формирования строчного синхроимпульса и видимости окна по горизонтали (U57-U59, U41-U45, U51-U55). С микросхемы К155ТМ2 (U60) выходят два сигнала: нога 6 – отображение окна картинки по горизонтали, нога 8 строчный синхроимпульс. При окончании строки с микросхемы К155ЛА3 (U45, 6 нога) подается сигнал для перехода на следующую строку на узел формирования кадрового синхроимпульса и видимости окна по вертикали (U46-48, U49, U50, U27, U28, U30-U35). С микросхемы К155ТМ2 (U29) выходят два сигнала: нога 6 – отображение окна картинки по вертикали и на выход «разрешить», нога 8 кадровый синхроимпульс. Выход «разрешить» нужен для того, чтобы сообщать микроконтроллеру, что видеокарта может безболезненно записывать/считывать видеопамять. Можно конечно игнорировать этот сигнал, но тогда в момент обращения к видеопамяти на экране монитора будут возникать артефакты. Хотя это дает прирост скорости, потому что процесс чтения/записи происходит даже когда луч рисует картинку в видимой части экрана. Проще говоря сигнал «разрешить» = LOW с 145 строки до 401 строки (видимая область экрана), все остальное время сигнал «разрешить» = HIGH.
Счетчики К155ИЕ7(U18-U21) перебирают адреса видеопамяти. На выходе счетчиков добавлены регистры КР580ИР82 (U12, U13), которые используются не по назначению, а просто для создания Z – состояния. Дешифратор К155ИД10 (U14) в зависимости от адреса включает в работу необходимую микросхему видеопамяти КР537РУ17 (U1-U8). Данные с видеопамяти попадают на регистр КР580ИР82 (U9) на выходе которого находится R2R – ЦАП (цифро-аналоговый преобразователь), который и формирует насыщенность цветов.
Регистр КР580ИР82 (U11) открывается, когда необходимо считать содержимое видеопамяти. Регистр КР580ИР82 (U10) открывается, когда необходимо записать в видеопамять. Все остальное время эти регистры в Z- состоянии.
Счетчики К155ИЕ7 (U23-U26) необходимы для установки адреса видеопамяти, с которой будут производиться действия чтения или записи. Счётчик К155ИЕ7 (U23) дополнительно принимает участие при смене видимой страницы. Из которого берутся 0-й и 1-й бит для установки триггера страницы К155ТМ2 (U22). Регистры КР580ИР82 (U16, U17) создают Z-состояние между счетчиками и шиной адресации видеопамяти.
На этом краткое описание заканчивается.
ссылки на документацию:
Комментарии (62)
vicsoftware
30.06.2024 11:35+10Только это всего лишь 50% от VGA. VGA - это как минимум 320х200
PNP80 Автор
30.06.2024 11:35+2Замечание принято. В свое оправдание скажу, что я, как человек не образованный, ориентировался в большей степени на мониторы с интерфейсом VGA, чем на полноценный стандарт.
checkpoint
30.06.2024 11:35+6Коротко. По делу. Но есть вопросы:
Какова максимальная скорость обмена ЦПУ с видеопамятью ?
Как Вам удалось раскочегарить микросхемы серии К155 до 12.5 МГц ? Если не ошибаюсь, там время задержки распростаренения 100нс и на 10МГц они уже начинают лагать. Этот же вопрос по микросхеме статической памяти КР537РУ17, по даташиту у нее время доступа - 130нс, а у Вас выборка из памяти каждые 80нс.
PNP80 Автор
30.06.2024 11:35+4Затруднюсь полноценно ответить на Ваш вопрос, но попробую как получится. Если пройтись по 155 серии: К155ЛН1, К155ЛА8, и т.д. –грубо 22нс, К155ТМ2-грубо 40нс ну и остальные в том же духе. На счет КР537РУ17 у нее не 130нс, а не более 130нс. Минимальный порог остается тайной, но как показала практика – всё работает.
PNP80 Автор
30.06.2024 11:35На счет скорости обмена ЦПУ с видеопамятью полноценных тестов не проводил, так как эта видюха разрабатывалась для самодельной ЭВМ, которая производительностью не блещет, поэтому я не видел необходимость в таких тестах.
checkpoint
30.06.2024 11:35Цель разработки понятна, поэтому и возник вопрос. Если более конкретно, то сколько времени займёт отрисовка текста на полный экран ? С какой частотой кадров его можно будет прокручивать/пролистывать. В Вашем демо видеоролике с какой частотой Ардуина шлёт команды в видеоадаптер ? Это предел или можно быстрее ?
Я сейчас занимаюсь чем-то подобным, но на ПЛИС. Без аппаратного знакогенератора как-то у меня всё не весело выходит. :)
PNP80 Автор
30.06.2024 11:35В видео на 1:41 ардуино затирает мусор видеопамяти темно-красным цветом. Здесь используется вся мощь ардуинки + мои кривые руки программиста). Съемка в реальном времени. Там происходит передача координат по Х=0, координат по Y=0, а дальше просто цвет пикселя, цвет пикселя и т.д., так сказать пакетный режим. Я уверен, что можно еще быстрее.
Картинки выводятся медленно, потому что скорость передачи UART= 115200
checkpoint
30.06.2024 11:35Картинки выводятся медленно, потому что скорость передачи UART= 115200
Ну так отключите UART на время отрисовки. :) Видно что рисует очень медленно и должно быть существенно быстрее.
PNP80 Автор
30.06.2024 11:35Текущая видеокарта является доработкой этой VGA видеокарта для Arduino NANO блин, опять VGA))) Исходники если надо предоставлю. Возможно это Вам поможет.
checkpoint
30.06.2024 11:35А вот еще вопрос. Как происходит разделение доступа к видеопамяти ? У кого приоритет больше, у схемы формирования видеосигнала или у шины взаимодействия с ЦПУ ? Я смотрю на схему, и пока не могу понять, что произойдет если они одновременно будут адресовать видеопамять.
PNP80 Автор
30.06.2024 11:35+1Приоритет больше у взаимодействия с ЦПУ. Поэтому можно писать/читать даже в процессе формирования видео сигнала, но как писалось в статье: на экране будут возникать артефакты. Чтобы этого не происходило необходимо обращаться к данным по сигналу пина «разрешить»
checkpoint
30.06.2024 11:35Ок, спасибо. Я как-то пролетел мимо этого предложения и сразу пошел изучать схему. :-)
PNP80 Автор
30.06.2024 11:35Если детально, то если подать на вход «Пиксель» LOW, то пройдя через инвертор U38:F сигнал примет значение HIGH. Далее он идет на 2ИЛИ U39:А. На выходе получается HIGH, который подается на вход ОЕ регистров U12, U13, которые закрываются (Z - состояние) и больше не производится адресация видеопамяти.
qw1
30.06.2024 11:35+10Заголовок вводит в заблуждение. VGA-видеокарта подразумевает, что будут реализованы програмные спецификации VGA - текстовый режим, программируемый знакогенератор и несколько графических режимов, и всё это управляется через стандартные VGA-порты.
А тут представлена видеокарта с несовместимым ни с чем стандартом программирования, но с VGA-выходом.checkpoint
30.06.2024 11:35+13Тут имеется некая двузначность терминологии. Есть VGA видеодаптер который вставляется в слот ISA у IBM PC совместимых машин, со своими портами, видеорежимами и т.д. И есть видео интерфейс VGA - электрическая спецификация на подключение аналогово видеомонитора. Автору наверное следовало бы указать в заголовке на то, что это "видеоадаптер с VGA интерфейсом для микроконтроллера или 8-ми битной ЭВМ". Как-то так.
frt123
30.06.2024 11:35+2Если кварцевый резонатор (точнее говоря, поверхность контактов на кристалле) потереть стирательной резинкой, то его частота немного повышается. Если натереть грифелем, то частота немного снижается.
zatim
30.06.2024 11:35+3Намного вероятнее будет необратимо повредить кристалл при разборке корпуса резонатора. Нет необходимости столь точно выдерживать частоту, аналоговые стандарты допускают большой разбег. А современные жк мониторы и вовсе сожрут все, что им подашь, лишь бы укладывалось в допустимый диапазон.
Moog_Prodigy
30.06.2024 11:35+2Есть другой дедовский способ изменять частоту кварца. Вокруг кварца наматывается нихром, вся конструкция теплоизолируется, городится терморегулятор с обратной связью по частоте. Я не помню подробностей, при нагреве в какую сторону уходит частота, но я точно встречал это в одной из старых книг. И было реализовано это в каком-то промышленном частотомере. Именно термостатирование кварца. Грелось оно в нормальном режиме примерно до 55 градусов. Т.е. кварц брали не тот который надо, а чуть меньше из стандартных рядов.
qw1
30.06.2024 11:35+2Любопытно. Если есть эталон частоты, более точный чем кварц, то зачем сам кварц? А если нет такого такого эталона, откуда мы узнаём, что частота уходит и надо корректировать?
frt123
30.06.2024 11:35+1частота кварца это не скорость света в вакууме и зависит от физических параметров кристалла. Рискну предположить, что в данном случае кристалл нагревали превентивно до того, как весь корпус устройства не прогреется нитями накала ламп, но это только предположение.
qw1
30.06.2024 11:35+2Понял. Кварц греем до известной температуры, чтобы не зависеть от температуры в комнате. Меня сбило
терморегулятор с обратной связью по частоте
AKudinov
30.06.2024 11:35+3Опорный термостатированный генератор "Гиацинт". Знакомая штука, ага. Кварц внутри термостата, и всё. На передней панели частотомера был отдельный индикатор работы термостата, и он работал всегда, пока прибор к сети подключен, независимо от того, включен тумблер питания или нет.
Сейчас такие штуки тоже в ходу. Только стали значительно меньше в размера. Зовутся OCXO (Oven-Controlled Crystal Oscillator).
engine9
30.06.2024 11:35ООС по частоте? Но ведь тогда нужен еще эталон. Может быть просто по термодатчику на поверхности?
checkpoint
30.06.2024 11:35+4На ютубе есть видео от 1943 года на котором показан весь процесс изготовления кварцевых резонаторов, от полевого шпата до калиброванного компонента. Там как раз есть и про натирание граней и про облучение рентгеном (если слегка перетёрли). Видео умопомрачительное с точки зрения количества применявшегося тогда ручного труда.
Изготовление кварцевых резонаторов, 1943 г.
sappience
30.06.2024 11:35+3Какого еще полевого шпата? В фильме упоминается raw crystal или rock crystal, т.е. горный хрусталь. Он же природный кристаллический кварц. А полевой шпат это алюмосиликаты, их там целая группа.
anonymous
30.06.2024 11:35НЛО прилетело и опубликовало эту надпись здесь
Zara6502
30.06.2024 11:35+4сколько ненависти и пафоса, но вы, мсье, сели в лужу. VGA это только 640х480 и уж тем более видеокарты того времени не занимались рисованием примитивов ни в каком виде.
anonymous
30.06.2024 11:35НЛО прилетело и опубликовало эту надпись здесь
Zara6502
30.06.2024 11:35Ну не первую в мире, но у меня есть парочка VGA из 80-х для ISA шины.
Ты о каком времени говоришь?
А причем тут время, есть стандарт.
Поищи по инету лузер фотку и увидишь что о никакой рассыпухе и речи не может быть
А я где-то пишу что-то про какую-то "рассыпуху"?
Ах да, забыл, тебя тогда и в планах небыло.
Когда я родился Стив Джобс еще даже в АТАРИ не трудоустроился и его Apple даже в планах не было и до первой VGA еще было как до пингвинов пешком.
Zara6502
30.06.2024 11:35+12автор: имхо не гоже в/к называть VGA лишь на основа коннектора для вывода картинки. Конечно не обязательно поддерживать все режимы, но 320х200(240)х256 и/или 640х480х16 всё же должны присутствовать. Как легко посчитать для таких режимов уже нужно 320х200х1=64000 байт или 640х480х0.5=153600 байт.
vicsoftware
30.06.2024 11:35320x240x256 - это ж слоёный режим, если мне память не изменяет (ModeX). Там на одной реализации регистров замучаешься.
Zara6502
30.06.2024 11:35+1это просто пример того какие разрешения були популярны для VGA, в играх 320х200х256, 320х240х256 по большей части.
еще не забываем что VGA это не только разрешение, это еще и аппаратные вещи, куча функций биос.
shkal
30.06.2024 11:35Это нестандартный режим VGA, требовал прямого программирования регистров контроллера, но был очень удобен поскольку аспект пиксела 1:1. Был описан в журнале доктор Доббс, я на основе этой статьи писал библиотечку на асме для вывода примитивов
sami777
30.06.2024 11:35+1Вопрос от "непотемщика"! А поставить делитель частоты (например всего один тригер) между генератором на 25,175 МГц и тем, чем вам нужно? Вы же все равно все на рассыпухе и самостоятельно делаете.
PNP80 Автор
30.06.2024 11:35Можно было, но это плюс корпус микросхемы и кварц буржуинский. Отечественного кварца на такую частоту мне раздобыть неудалось
hw_store
30.06.2024 11:35А примерно такую же, но только для ввода сигнала SDI в PCI Express (или в QSPI) сможете?
NutsUnderline
30.06.2024 11:35PCI Express (или в QSPI)
Это вроде все таки немножко разные материи. Но в любом случае для такого очень неплохо бы иметь СВЧ осциллограф так как речь идет на гигагерцы и схемотехнику на FPGA а никак не на мелкой логике
hw_store
30.06.2024 11:35не, ну понятно, что на 155 серии не соберёшь... даже на 100й/500й. Даже на 74HC.
NutsUnderline
30.06.2024 11:35так вот и непонятно а чем blackMagic не угодил то?
hw_store
30.06.2024 11:35тем что мы его не производим... ну и сложен в закупке и потенциально в техподдержке
AlexandreFrolov
Еще студентом делал нечто подобное для формирования видеосигнала на черно-белом телевизоре, чтобы использовать его как консоль для компьютера на базе Intel 8080 (КР580ИК80). Очень много микросхем и проводов МГТФ, но было весело!
NutsUnderline
ВГ75 говорят была в дефиците
tonyk_av
Так он был символьным, а тут графика, 256х128.
w0lf
ВГ75 может не только в символьном режиме работать. Вот тут https://zx-pk.ru/threads/26455-chto-maksimum-mozhno-vyzhat-iz-kr580vg75-intel-8275-obsuzhdenie/page54.html народ развлекался с VGA-картой на двух ВГ75.
checkpoint
Замечу, что у первых IBM PC был видеоадаптер IBM Color/Graphics Adapter, в народе известный как CGA. Этот адаптер строился вокруг микросхемы MC6845 - недовидеопроцессора для отображения текста. Тем не менее, за счет манипуляции с банками видеопамяти, видеоадаптер CGA умел отображать графику в трех видеорежимах: 640x200 (два цвета), 320x200 (четыре цвета) и 160x100 (16 цветов). Для того времени это было вполне стандартным решением. Наверняка с КР580ВГ75, которая была аналогом Intel 8275, можно проделывать аналогичные фокусы.
vanxant
Строго говоря, CGA был блатной опцией. В базовой конфигурации шёл монохромный MDA (только текст, 40х25 или 80х25 знакомест), и к нему монохромный (чёрно-зелёный) монитор.
checkpoint
Всё верно, и в MDA тоже был MC6845. Адаптер CGA появился чуть позже чем MDA и быстро вытеснил адаптер MDA, так как пользователи хотели играть в игры, а за те деньги что IBM просила за PC c MDA это было невозможно. Более того, к MDA требовался отдельный монитор, это делало систему еще более дорогой. В CGA присутствовало два видеовыхода: RGBI для монитора с прямым управлением ЭЛТ и разъём с композитным NTSC сигналом, что позволяло подключать PC к телевизору как и другие ПЭВМ того времени. RGBI давал более высокое качество картинки, а NTSC позволял смешивать цвета (артифактинг), что было прикольно для игр.
На Википедии пишут, что некоторое время MDA и CGA устанавливался вместе в одну машину, но я таких машин не встречал и честно говоря не понимаю зачем это могло быть нужным (первый IBM PC я увидел в 1989-м, тогда уже во всю были EGA и немного CGA). Пишут, что якобы у MDA качество изображения было выше чем у CGA, но не ясно на каком типе монитора сравнивают, RGBI или NTSC.
w0lf
"Пишут, что якобы у MDA качество изображения было выше чем у CGA, но не ясно на каком типе монитора сравнивают, RGBI или NTSC. " - Как работавший с тем и другим отмечу, что это верно для для RGBI-монитора. Долго работать с текстом в разрешении 640х200 на 15 кГц строчной развертки очень утомительно. С MDA 640х348 на 18 кГц гораздо приятнее, пиксели почти в 2 раза меньше, за счёт чего картинка более четкая. У меня правда был не MDA а Hercules, он ещё и одноцветную графику в таком разрешении выдавать мог.
AlexandreFrolov
Отлаживал и доделывал опять же студентом графическую плату для символьного терминала Videoton VT-340. Там было много динамической памяти К565РУ1. Очень помогал многоканальный логический анализатор. Очень интересно было со всем этим возиться
AVKinc
И она умела только в текстовый режим.
AlexandreFrolov
Тогда вообще-то все было трудно раздобыть
hw_store
Это было большим шагом вперёд по сравнению, например, со знакогенератором терминала ВТА2000 - один из двух вентиляторов заклинило, ПЗУшки перегрелись и погорели. А между прочим, на этих терминалах работала целая "Сирена-2" и много кто ещё