Подключение ZX Spectrum к современным мониторам через вход VGA - тема непростая. Потому что нельзя просто так взять и отнести колечко к Ородруину подсоединить видеовыход обычного Спектрума через кабель VGA к любому монитору. А почему? Поглядим для наглядности на типичную схему распиновку штекера VGA:
Что мы тут видим? 1, 2, 3 пины - это сигналы R, G, B, которые отвечают за цвет изображения. 4, 11, 12, 15 -это бывшие ID монитора и они нас не иннтересуют вообще (а современные SDA и SDL в частности). А вот 13 и 14 - это горизонтальная (строчная) и вертикальная (кадровая) синхронизация соответственно. Ну а остальное - земля (кроме 9 пина - там может быть +5 вольт).
Ну а какие варианты видеовыхода есть у ZX Spectrum? Телевизионный высокочастотный выход - можно сразу отбросить, даже не потому что у него всего одна жила, которая может сразу выдавать цветной сигнал (зачастую вообще Ч/Б) и аудио, а просто потому что качество сигнала настолько отвратительное, что о выводе его на современную LCD-матрицу и даже на приличный ЭЛТ-монитор даже не стоит и говорить, нежели и пытаться. Композитный выход? Ну практически тоже самое что и предыдущий вариант, отличается только низкочастотностью и отсутствием звука. В оба этих видеосигнала входят сигналы яркости, цвета и синхронизации (вертикальной и горизонтальной) с разной модуляцией. Понятно, что если нам надо выделить из него сигналы отдельных цветов + сигналы синхронизации (для VGA), то для этого нужно отдельное устройство демодуляции. А оно нам надо?
У большинства же "нормальных" Спектрумов видеосигнал выдаётся формата RGBS, где R, G, B - это сигналы красного, зеленого и синего цвета соответственно, а S - это сигнал синхронизации, сложенный одновременно как из частот кадровой, так и из строчной развертки (с разными длинами импульса). Причем сигнал синхронизации может ещё содержать цветовые компоненты (чтобы выдавать как композитный сигнал). Вроде бы неплохо - хотя бы сигналы цветности есть отдельно, но опять же - элементарно разделить синхру на VSYNC и HSYNC для входа VGA не получится - опять нужно отдельное устройство.
Как видно из вышеуказанного, если не брать некоторые современные модели (ZX Evolution, ZXUNO. ZXDOS), которые сразу имеют на борту VGA выход, то подключить провод VGA к обычному Спектруму не представляется таким уж простым делом. Сразу возникнет вопрос - а откуда брать эти самые HSYNC и VSYNC? Теоретически, если синхросмесь достаточно "чистая", то вместо строчной синхронизации можно подсунуть её, а про кадровую забыть - и некоторые устройства это проглотят и что-то внятное смогут отобразить (но не факт!). Я такую синхру видел только на современных клонах, а там и так с VGA всё неплохо. То есть просто сварганить простой переходник с RGBS на VGA не получится. Нужно отдельное внешнее устройство, которое фактически будет выполнять функции полноценного телевизора. Я уже писал про подобное решение в статье про подключение ZX Spectrum +2 к монитору.
Получается что сначала мы сигнал RGBS с видеовыхода ZX Spectrum через SCART втыкаем в коробочку с платой полноценного ТВ, а эта коробочка уже имеет выход HDMI, который, в свою очередь, другой коробочкой конвертируется в VGA. Если честно, решение хотя и рабочее, но так себе: во-первых, куча кабелей (многие из которых длинные и жесткие), во-вторых, отдельная коробочка требует отдельного питания. Зато не надо вторгаться во внутренности Спектрума.
Но для любителей покопаться в кишочках есть и обходной вариант - брать сигналы кадровой и строчной синхронизации с платы, с входов соответствующих микросхем, которые знаимаются формированием выходного видеосигнала. Для этого требуется совсем немного - схемы компьютера, понимания этой схемы и наличия на этой самой схеме этих сигналов. И если с первыми двумя проблемами ещё как-то можно разобраться, то третья не всегда решается. А не решается потому что многие модели оригинальных ZX Spectrum и наши отечественные спектрум-совместимые компьютеры используют специфические микросхемы ULA (или БМК в отечественном варианте), а значит формирование сигнала синхронизации может происходить внутри этого чипа, т.е. и строчный и кадровый сигналы синхронизации могут возникать там внутри и там же и оставаться, не имея выходов на ножки микросхемы. Вот, например, тот же упоминавшийся ZX Spectrum +2 имеет именно такую особенность:
По куску схемы видно, что из микросхемы ULA выходит только общий сигнал синхронизации, который и приходит на микросхему TEA 2000. Таким образом, сигнал строчной синхронизации просто неоткуда брать. Поэтому тут даже вариант с выводом отдельных сигналов HSYNC и VSYNC не подходит.
Но есть же Спектрумы с "нормальной" (на микросхемах элементарной логики) реализацией видеовыхода? Конечно есть! Особенно их много на постсоветском пространстве, ибо тут копировали оригинальный ZX Spectrum кто во что горазд, а микросхему ULA заменяли грозьями широкодоступных отечественных микросхем. Поэтому выловить в подобных устройствах что строчную, что кадровую развертку было проще простого (особенно, если была схема). Взять тот же широко известный Пентагон: там эти сигналы можно было взять с 1 и 2 входа микросхемы DD6.
Поэтому возникает вопрос: а что - так можно было? Взять с платы все сигналы, которые нужны для видевхода VGA и подать их в монитор? К сожалению, не всё так просто, как хотелось бы. Частота строчной развертки в ZX Spectrum равна 15,625 кГц и это не та частота, которую поддерживают большинство мониторов что тогда, что сейчас. Им более привычны частоты 31-135 кГц, что несколько выше, чем 15 кГц. На самом деле и тогда и сейчас есть подобные мониторы (их ещё иногда обозначают MultiSync), но надо внимательно читать все технические характеристики, чтобы гарантированно попасть в такой. Я вот правда и не искал, а случайно оказалось что мой 25" монитор IIyama ProLite тянет любые частоты, которые я ему выдавал, что с ZX Evolution, что с других Спектрумов. но это, наверное, исключение, потому как все остальные что у меня есть в этом плане были весьма капризными. Многие даже не переваривали низкую (ниже 51 Гц) кадровую развертку и могли работать только от 60 Гц и выше. Так что тут как повезёт (скорее нет, чем да).
Матрица с "народным" контроллером
Поэтому, когда я захотел к своему будущему моноблоку, основанному на плате Дельта-С 02, подыскивал небольшой монитор, чтобы его приделать на крышку корпуса, и таким образом объединить их в одно целое, то искал я монитор и с композитным и VGA входом:
Я уже понимал, что отдельная железяка для конвертации сигнала не может быть снаружи моноблока, который надо переносить, поэтому рассчитывал либо на композит (у меня в корпус уже был добавлен PAL-кодер), либо на плату скан-даблера, сигнал с которой поймет VGA-вход этого монитора. Речь про подобные устройства:
В него передаются сигналы RGB, яркости, кадровой и строчной развертки, частота в 14 МГц и эта плата на чипе Altera сама отрисовывает картинку для выдачи её с параметрами "съедобными" для VGA входа монитора. И если нам нужно получить с нашего Спектрума изображение через VGA (т.е. иметь возможность подключить его к практически любому монитору или телевизору), а в самом Спектруме у нас есть откуда взять все нужные сигналы - то решение отличное. Вопрос будет только в настройках самой прошивки данного устройства - переварит ли оно сигналы вашего Спектрума. И когда я убедился в том, что композитный сигнал на моём маленьком LCD-мониторе даёт качество очень так cебе, да причем ещё и экран сдвинут вниз (и это не поправить настройками), а после долгого использования ещё и следы мерцающие на экране остаются, то я уже почти решился на покупку скандаблера для VGA, чтобы встроить его в мой моноблок.
Однако, когда я попытался подключить данный монитор к ZX Evolution, я обнаружил, что картинку он отображает только начиная с 60 Hz - никакие другие режимы он не держит. Это меня насторожило - а что если и VGA-скандаблер не сможет адекватно переделать частоту моего Спектрума в 60 герц? Тут я уже начал ковыряться в этом самом мониторе, чтобы понять, что же он из себя представляет и в итоге обнаружил, что основан он на контроллере, который имеет обозначение 2AV-1VGA-1HDMI-TTL-50PIN--LVDS-ACC PCB800099-V.9 и часто фигурирует просто под названием "народный контроллер" из-за своей популярности в широких народных массах. К нему можно подключить практически любую (на самом деле не совсем) матрицу через LVDS и TTL интерфейсы, надо только подобрать нужный кабель LVDS (например, с помощью такого сайта).
Сначала я накопал информацию о нём на форуме автомобилистов-компьютерщиков www.PCCar.ru. И хотя изначально я там искал там информацию по схеме - думал, может там есть возможность и сигнал RGB заводить как со скарта (и этого я там не нашел), но где-то ближе к концу темы кто-то начал что-то писать про подключение к разным ретро девайсам, в том числе и к Спектруму. И дальнейшие мои поиски привели меня уже на тему уже форуме ZX-PK.ru, в которой обсуждалось уже что-то прям совсем по интересующей меня теме и эту тему я стал копать уже совсем усердно. Самое интересное - это то, что изначальную прошивку для этого контроллера где-то получили в исходных кодах и умельцы уже сделали специальную обрезанную, исключительно для ретро-компов. И спецпрограммку для удобного определения параметров матрицы и видеорежимов. И только я начал подумывать о переходе к экспериментам, как один товарищ (Wally) выложил ролик как раз на эту тему, в котором он не только рассказывает, но и и показывает, как оно настраивается и работает. А ведь по старинной поговорке - лучше один раз увидеть, чем сто раз услышать:
При этом, что меня особенно заинтриговало, это то, что у него тоже была синяя плата, а ведь после чтения форумов я уже знал, что это вторая ревизия, отличающаяся от первой (зеленой), и что не факт, что прошивки от зеленой подойдут к синей. Вроде бы внешне синяя отличалась только гребенкой для выбора разрешения матрицы, но кто его знает насколько оно совместимо в принципе.
После этого видео я, конечно, решил всё это повторить и тоже попытался получить доступ к флешке на плате: но что я только не делал с проводками и LPT - ничего толком не работало.
Максимум чего я добился, это какого-то определения того, что это вообще какой-то Unknown chip. Я даже купил пачку чипов Winbound 25x40... Убил кучу времени, но в итоге всё равно пришлось купить программатор для этих чипов:
Вот программатор у меня всё сразу определил - и чип на плате и те чипы, которые я на Алиэкпресс заказывал. Оказалось, кстати, что они совсем разных типов (и даже размеров): на моей плате стоял чип ZB25VQ40, а купил я W25X40AV. При этом та прошивка, которую я слил с ZB25VQ40 хотя и записывалась в W25X40AV, но выдывала только желтое поле на экран. Насколько я понял, там ещё какая-то область с доп.данными должна быть для конфигурации прошивки. По крайней мере, мне её так NeoProgrammer показывал:
На W25X40AV NeoProgrammer мне такую область не показывал и я так и не разобрался - это от чипа зависит или можно это как-то в программе задать.
Но вот та прищепка - я б не рекомендовал её к использованию - на плате она крайне плохо контачится к ножкам, а если начинать её шевелить, то велик риск убить сам программатор (у меня это так и получилось, когда я уже после запайки чипа на плату решил сэкономить время). Поэтому чип с платы контроллера я выпаял, припаял его на переходную платку, а на плату контроллера проводками засадил переходник на этот переходник - и уже мог экспериментировать с прошивками:
И вы думаете, что мои мытарства закончились? Как бы не так, всё только начиналось. Те варианты прошивок, которые выкладывал автор видео мне не подошли: после прошивки экран вообще не работал. Тут я, конечно, загрустил, но на форуме нашёл оригинальную прошивку для "зеленой" платы - залил её - и она вполне себе запустилась! То есть прошивка от "зеленой" подходит и для "синей" платы! Тут я и понял, что всё впереди :) Сначала надо было определить те параметры, с которыми стартовала бы моя матрица, и для этого мне потребовалось переключать каждый параметр по одному, заливать флешку, вставлять её в устройство и тестировать. В итоге после десятков проб у меня матрица отобразила желанное сообщение о том, что она ждет VGA-сигнала. На этом моменте я понял, что победа впереди. Для моей матрицы настройки были такие:
Поскольку у меня матрица к контроллеру подключена по TTL интерфейсу, первые две галки в Panel style у меня выключены. Без включенного TTL DCLK ничего вообще не заводилось. В Panel Config мне пришлось включить галки DISP_MSB/LSB_SWAP и DISP_RED/BLUE_SWAP - без первого было что-то странное на экране, а без второго - были перепутаны цвета. Ну а цифровые параметры были взяты от изначальной прошивки. Конечно, все эти параметры можно было бы взять из даташита матрицы - но где ж его взять? На ней самой написано слишком много букв и цифр (CCB0702IH50RI-271C), но слишком мало для её идентификации. Поэтому возможен был толко путь "тыка".
Настройка прошивки под ZX Evolution
Но и после включения матрицы надо было ещё и хоть как-то вывести сигнал от Спектрума. Я начал эксперименты с ZX Evolution, поскольку у этого компьютера ТВ-сигнал, как и VGA, выдается прямо в стандартный VGA-выход и обычным кабелем можно подключить к контроллеру и вывести сигнал. Для этого я начал менять параметры вкладки MODE000 конфигуратора прошивки и практически сразу добился нормального результата для ТВ-режима с таймингами Спектрума 128 Кб: картинка выводилась и я её даже смог отцентровать с обрезанием части ненужного бордюра вверху и внизу. Потом осталось только "выровнять" по пикселам матрицы это изображение и снова его отцентровать, это я делал по инструкции с форума ZX-PK.ru. Это делается достаточно просто - сначала регулируем параметр IHTotal (Input Horizontal Total Length) для "растягивания/сжимания" изображения добиваясь того чтобы пикселы матрицы начали "попадать" под пиксели Спектрума, а потом сдвигаем изображение (оно же у нас съедет куда-то вбок) с помощью корректции параметра IHStartPos (Input Horizontal Start Position). На это ушло всего-то десяток перепрошивок флешки :)
А вот дальше я решил проэкспериментировать - а можно ли в одну прошивку затолкать все варианты, которые может выдать ZX Evolution? Всего их 8: 4 режима таймингов: 48, 128, Pentagon, 60Hz и 2 режима вывода: ТВ и VGA. На форуме ZX-PK.ru была выложена прошивка, в которой вместо трёх изначальных режимов было семь и я решил попробовать - а будет ли всё это добро сталибильно работать? Надо понимать, что в этой прошивке для ретро-ПК было обрезано многое и всё переключение режимов по сути сводилось к изначальному выбору из встроенных в прошивку и подходящих для данного сигнала. При этом, возможно, имеет значение порядок режима, поэтому установив первым максимально широкий диапазон значений - можно было получить гарантированное срабатывание этого самого первого режима. Поэтому надо было тщательно подойти к настройки параметров этих самых режимов.
Для каждого режима VGA я выставил параметр Input Horiz Freq в значение 31.5 kHz. Для ТВ-сигнала значение задал в 15.6 kHz. Для 60 герцового сигнала значение параметра Input Vert Freq выставил в 60 Hz. А вот со значением для остальных режимов пришлось повозиться. Для таймингов 48 Кб Спектрума значение я поставил чуть больше 50 Гц, для 128 - чуть меньше 50 Гц, а для Пентагона - чуть ниже 49. Значение толерантности строчной развертки (Horiz Freq Tolerance) выставил на 1 кГц (это особо не имеет значения), а вот толерантность кадровой (Vert Freq Tolerance) в 0.1 Гц - вот это имеет принципиальное значение при очень близких частотах к 50 Гц. Значения Input Horizontal Width, Input Horizontal Total Length, Input Vertical Height, Input Vertical Total Length пришлось выставлять на глаз учитывая необходимость выравнивания пикселей. Понятно было только то, что для ТВ режима значения "вертикальных" параметров будут в два раза ниже, чем для VGA. Позицию экрана по вертикали выравнивал параметром Input Vertical Start Pos, ну а значение параметра Input Horizontal Start Pos помогало выровнять экран по гозризонтали после выравнивания пикселей.
Вот что у меня получилось в конфигураторе:
Параметры для ТВ-режимов я смог уверенно выставить для срабатывания для всех таймингов: 48, 128, Pentagon, 60Hz. А вот с VGA-режимами поучилось только частично. Для развертки близкой к 50 герцам почему-то всё время срабатывал только первый из режимов VGA - остальные игнорировались. Как только я не пытался играть с толерантностью и подбирать с точностью до десятых эту самую частоту - ничего не помогало. В итоге я забросил идею настроить все VGA-режимы и оставил только 128 и 60 Hz (ещё можно было добавить только один режим, но Пентагон у меня никак не получался). Таким образом, режимы 48 и Пентагона в VGA оказались немного сдвинуты на матрице, а режимы для 60Hz оказались чуть-чуть за экраном. Зато все ТВ-режимы отлично работали!
И все режимы я выровнял по матрице, так что картинка с ZX Evolution получилась очень приятная. C одной стороны, никакого мыла, кривого выравнивания шрифтов и всякого прочего присущего выводу картинки на LCD-монитор с неродным разрешением для ZX Spectrum. С другой стороны, отсутствовала та самая излишняя пикселизация, которая бесит всех тех, кто пользуется эмуляторами (как там только с этим не борятся, но получается у всех плохо). Пиксели у меня получились четкими, но как бы округленькими, не режущими глаз. Картинка выдаётся на монитор ровно с теми же частотами, с которыми она идёт со Спектрума, то есть никаких преобразований нет и матрица отрабатывает изображение точно так как ей и выдают. Я бы сказал что картинка очень похожа на очень качественный ЭЛТ-монитор или телевизор, причем ещё и без всяких геометрических искажений на краях, которые так часто себя проявляют даже на хороших представителях данного рода устройств.
Изображение с VGA выглядит почётче, чем с TV-режимов, ну это так и должно быть. При сравнении один-в-один видно, что ТВ слегка мылит изображение в целом (сказывается в два раза более низкая строчная развертка). Самого чёткого изображения мне удалось добиться при 60 Hz в VGA-режиме. Там прямо пиксели матрицы были видны:
Я снял дополнительно видеоролик с демонстрацией всех режимов ZX Evolution с переключением между ними:
Выкладываю свою версию прошивки для моей матрицы 1024 на 600. Для иных версий матриц, а уж тем паче других разрешений, всё придётся делать по новой... Поэтому выкладываю ещё и программу-конфигуратор v.0.9 от valerium.
Итого
Итак, резюмируем: использование "народной" прошивки позволяет получить качественную картинку практически на любой ЖК-матрице. Безусловно, для этого надо помучится с конфигурацией этой самой прошивки: "попасть" в параметры самой матрицы, а потом ещё и выставить все нужные видеорежимы. Теоретически, наверное, можно было бы настроить прошивку под всевозможные разрешения и править только параметры матрицы. Но остальные Спектрумы вряд ли будут нормально работать со стандартными таймингами оригинала, например, моя Дельта С выдаёт сдвинутое изображение, при этом и выравнивание пикеселей для неё тоже надо отдельно делать. То есть нет и не может быть с подобной прошивкой лёгкой прогулки: мол, взял, залил и пользуешься. Скорее всего, надо будет упорно подбирать параметры матрицы, а затем и видеорежима для каждого отдельного устройства. Я сомневаюсь, что вообще можно придумать аналог режима подстройки для ЖК-мониторов: слишком всё тонко надо подстраивать и результат этой самой подстройки будет не ахти (что мы и видим при использовании ЖК с неродным разрешением видеовхода). Зато если приложить некоторые усилия, то результат будет просто отличным: пиксели ровные, немножко округленькие, картинка без всяких искажений, шрифты чёткие, всё работает именно так, как и подразумевает само устройство, а не через цепочку преобразований. Вообщем, картинка вылядит очень похоже на подключение Спектрума напрямую к ЭЛТ-телевизору через SCART, но всё-таки к ЖК-матрице (не у всех есть ЭЛТ-телевизор или место для него). Так что я рекомендую этот способ вывода видеоизображения для всех тех, кто может выпаять и вапять обратно SMD-чип с 8 ножками :)