PDA

Просмотр полной версии : Тайминги Pentagon-128



Mick
12.09.2011, 19:28
Короче опять я возвращаюсь к напечатанному. Очень хочется все же понять как формируются эти тайминги. То что давали ссылку http://www.zx.pk.ru/showpost.php?p=413916&postcount=126 там есть инфа не совчем корректна. Если брать эмулятор, то там написано что до начала видимой части 17989 тактов, будем считать 17988 - по крайней мере разницы не почуствовал в эмуле, а в статье указано что 17920 и если подставить это значение в эмулятор, то картинка разваливается.

17920 тактов получается если чисто идут 80 линий * 224такта = 17920, а это возможно если кадровые счетчики тактируются по сбросу строчных счетчиков, т.е. на 56 байте (32 байта видимая + 24 бордер и невидимая часть). Теперь как же получить эти заветные 17988 тактов, я понимаю лишь так. Остаются те же самые 80 линий * 224 такта = 17920 такта и еще получаются лишние 68 такта. Если их поделить на 4, то получим 17 байт. Чтобы их получить, нужно кадровые счетчики тактировать строчным синхроимпульсом. Насколько понял, синхроимпульс появляется на 56 - 17 = 39 байте.
Только вот я так разложил, но дема с парусом всеравно некорректно показывает.
Так, кто нибудь может объяснить мне на пальцах как правильно получить пентагоновские тайминги. Или тут схемотехники чисто теоретические.? :mad:

solegstar
12.09.2011, 19:48
на сайте fan`a http://sblive.narod.ru/ZX-Spectrum/Pentagon128k/Pentagon128k.htm есть картинко с названиями сигналов по схеме и их осцилограммами, может поможет...

Mick
12.09.2011, 20:30
на сайте fan`a http://sblive.narod.ru/ZX-Spectrum/Pentagon128k/Pentagon128k.htm есть картинко с названиями сигналов по схеме и их осцилограммами, может поможет...

Ну вот бы еще сам fan объяснил что к чему было бы круто.

Ewgeny7
12.09.2011, 20:53
http://www.worldofspectrum.org/rusfaq/index.html

Mick
12.09.2011, 21:02
http://www.worldofspectrum.org/rusfaq/index.html

Жень, в первом посте я уже написал про эту ссылку. В этом толмуте неправильно указаны такты 17920, когда надо пулучить 17988.
Это проверяется легко в эмуляторе на примере парус демы.

Ewgeny7
12.09.2011, 22:51
Жень, в первом посте я уже написал про эту ссылку
Извини, не фкурил сразу :(

Mick
16.09.2011, 19:59
Короче, иследую причину развала картинки парус демы от VNN с пентагоновской разверткой на своем втором Фениксе, удалось выяснить, вернее допер в конце концов. Так как развертка формируется VGA без скандаблера, то каждая линия повторяетсядва раза. А это значит что линий у на не 320 а 640 и экран естественно состоит не из 192 а из 384 линий. Ну естсественно для нас юзеров останутся все теже 192 линии. И естественно теперь строка одна длится не 224 такта, а 112 тактов. Вот поэтому картинка на бордере показывается не так как ожидаешь.

Так что для VGA спектрумов, не использующих скандаблеры - бордер будет показываться не корректно. Чтобы корректо показывался надо бордер отрисовывать кратно 112 тактам. Как бы это засинхронизовать пока даже не знаю.

Для проверки своей теории надо cпросить VNN предмет коррекции свой демы кратно 112 тактам.

Titus
16.09.2011, 20:13
Получается, что встроенный в Феникс (а я так понял, что он там встроенный) формирователь VGA-сигнала не совсем корректный для мультиколоров.

Mick
16.09.2011, 20:39
Получается, что встроенный в Феникс (а я так понял, что он там встроенный) формирователь VGA-сигнала не совсем корректный для мультиколоров.

Это в втором Фениксе так получается. В первом там обычный выход на телевизор. Вот как скорректировать пока ума не приложу.

Black_Cat
16.09.2011, 21:43
для VGA спектрумов, не использующих скандаблерыправильнее такие устройства называть конвертерами, а скандаблер это совсем другое.


Как бы это засинхронизовать пока даже не знаю.имхо правильней либо отказаться от всех программных видеоэффектов, либо от такого способа VGA развёртки, и сделать просто хорошую турбу вместо VGA

zx-kit
16.09.2011, 23:45
Это в втором Фениксе так получается. В первом там обычный выход на телевизор. Вот как скорректировать пока ума не приложу.
Без буфера строки не обойтись. Нужно запоминать целую строку с частотой пикселов для телевизора в буфер, а потом два раза выводить на VGA с удвоенной частотой пикселов (http://www.zx.pk.ru/showpost.php?p=208743&postcount=27). Тогда эффекты на бордере будет видно. На видеокарте ведь есть память. Подумайте - как туда же и два буфера строки уместить ?

Можно во время активной части экрана делать как раньше - выводить сразу из памяти. А запоминать в буфере только информацию c бордера. При этом не надо будет считывать цвета из памяти экрана. На бордере Pentagona информация меняется также с другой частотой, то есть частота пикселов на бордере в два раза меньше частоты пикcелов активной части экрана (http://zx.pk.ru/showpost.php?p=214978&postcount=81).

Возможно это и позволит все скорректировать как надо.

Titus
17.09.2011, 02:52
правильнее такие устройства называть конвертерами, а скандаблер это совсем другое.

имхо правильней либо отказаться от всех программных видеоэффектов, либо от такого способа VGA развёртки, и сделать просто хорошую турбу вместо VGA

Проясните, чем отличаются скандаблеры от конвертеров.

Как можно отказаться от программных видеоэффектов, если подавляющее большинство программ было написано ДО создания новых клонов, и микроскопическое количество программ будет написано после.

Mick
17.09.2011, 09:45
Без буфера строки не обойтись. Нужно запоминать целую строку с частотой пикселов для телевизора в буфер

Механизм я понимаю, но хотелось обойтись без него - не получилось. Буду думать каким образом добавить пару буферов на комп, либо отказаться от VGA выхода пока. Но сам факт работы VGA развертки в спектруме установлен. :)

---------- Post added at 09:45 ---------- Previous post was at 09:24 ----------



Можно во время активной части экрана делать как раньше - выводить сразу из памяти. А запоминать в буфере только информацию c бордера. При этом не надо будет считывать цвета из памяти экрана. На бордере Pentagona информация меняется также с другой частотой, то есть частота пикселов на бордере в два раза меньше частоты пикcелов активной части экрана (http://zx.pk.ru/showpost.php?p=214978&postcount=81).



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

Titus
17.09.2011, 12:28
Тут мысля пришла из твоей идеи. Бордер можно записывать в промежуточный буфер-регистр и обновлять его через строку, тем самым бордерные эффекты могут и нормально выводится. Т.е. по крайней мере памяти под бордер не нужно. Надо будет попробовать эту мысль. :v2_conf2:
Как можно бордюр записать в регистр? Можно записать одну линию бордюра в буфер. Но это не менее 64 точек. 32 слева, и 32 справа. Да и бумага тоже может измениться, значит всю линию из 448 точек надо запоминать.

Mick
17.09.2011, 12:40
Как можно бордюр записать в регистр? Можно записать одну линию бордюра в буфер. Но это не менее 64 точек. 32 слева, и 32 справа. Да и бумага тоже может измениться, значит всю линию из 448 точек надо запоминать.

Да, что то я глупость сморозил. Полюбому два буфера надо делать на две строки.

Titus
17.09.2011, 12:47
Да, что то я глупость сморозил. Полюбому два буфера надо делать на две строки.
Зачем на 2? На одну строчку.
При выводе четных строчек, выводить, как есть, при этом запоминая все 448 точек (можно 384 видимых) в буфере, по 4 бита на точку, т.к. всего 16 цветов. А при выводе нечетных строчек, выводить этот буфер.

---------- Post added at 12:47 ---------- Previous post was at 12:45 ----------

Можно даже придумать режим, где нечетные строчки не выводятся, чтобы сымитировать сканлайны, для тех, кто их любит. Или же выводятся в половинчатой яркости.

Mick
17.09.2011, 12:56
Зачем на 2? На одну строчку.
При выводе четных строчек, выводить, как есть, при этом запоминая все 448 точек (можно 384 видимых) в буфере, по 4 бита на точку, т.к. всего 16 цветов. А при выводе нечетных строчек, выводить этот буфер.

Сейчас помыслю как это реализовать в железе.

Black_Cat
17.09.2011, 21:04
чем отличаются скандаблеры от конвертеровответ в названии - скандаблер, т.е. удвоитель строк. Скандаблер - это собственное имя самого примитивного конвертера, имеющего буфер на одну TV строку, и умеющего конвертировать TV в один VGA режим. Конвертерами же называют более сложные преобразователи, имеющие буфер на один или более TV экранов, и умеющие конвертировать TV в один или более VGA режимов. Например ZST производит TV to VGA конвертеры.

Titus
17.09.2011, 21:09
Значит применительно к нашему случаю правильно назвать его скандаблер)

Black_Cat
17.09.2011, 21:46
Значит применительно к нашему случаю правильно назвать его скандаблер) нет, скандаблер - это очень маленькая часть конверторов, а в Спектрумах в основном используются не скандаблеры, а именно конверторы с памятью на весь экран
Так что для VGA спектрумов, не использующих скандаблеры - бордер будет показываться не корректно.У Mick'а же вообще не конвертер, а компьютер с VGA развёрткой, так что в нашем случае правильней называть вещи своими именами :) .

Mick
17.09.2011, 21:54
Mick'а же вообще не конвертер, а компьютер с VGA развёрткой, так что в нашем случае правильней называть вещи своими именами :) .

Ну развертка разверткой, но для корректного отображения мультиколора необходимо добавить буфер на одну строку как предложил Titus
Если сохранять 4 бита, то можно попробовать на отечественной памяти КР132РУ14 с организацией 1Кх4.

Titus
17.09.2011, 22:06
Ну развертка разверткой, но для корректного отображения мультиколора необходимо добавить буфер на одну строку как предложил Titus
Если сохранять 4 бита, то можно попробовать на отечественной памяти КР132РУ14 с организацией 1Кх4.
Кстати, совсем забыл. Если это у нас VGA-развертка, где строчная 30кГц, а не PAL, где 15кГц, то надо немножко иначе делать, чем я предложил. Один узел будет записывать строчку PAL-развертки (бордюр + экран + бордюр) в 384-пиксельный буфер, а параллельно из другого 384-пискельного буфера будет по два раза с частотой 30кгц выводится предыдущая строчка. Таким образом, строка в буфере будет формироваться с пиксельклоком 7МГц, синхронно с обновлением экранной области процессором и обновлением бордюра, а уже из этого буфера с пиксельклоком 14МГц все будет выводиться на экран, с двухкратным повторением. Отсюда имеем как минимум два 384-ниббловых буфера.

Black_Cat
17.09.2011, 22:09
но для корректного отображения мультиколора необходимо добавить буфер на одну строку как предложил Titus даже в этом случае у тебя будет не конвертер, а компьютер с VGA развёрткой и теневым буфером для борюра :)

---------- Post added at 22:09 ---------- Previous post was at 22:07 ----------


Если это у нас VGA-развертка, где строчная 30кГц, а не PAL, где 15кГц, то надо немножко иначе делать, чем я предложил. Один узел будет записывать строчку PAL-развертки (бордюр + экран + бордюр)нахрена такой огород? достаточно и одного бордюра

Titus
17.09.2011, 22:12
нахрена такой огород? достаточно и одного бордюра
Каким образом его достаточно, если в процессе вывода одной строки, бумага и аттрибуты в экранной области могут меняться?

Black_Cat
18.09.2011, 16:06
Каким образом его достаточно, если в процессе вывода одной строки, бумага и аттрибуты в экранной области могут меняться? там своя память для этого есть :)

---------- Post added at 16:06 ---------- Previous post was at 16:03 ----------


Если сохранять 4 бита, то можно попробовать на отечественной памяти КР132РУ14 с организацией 1Кх4а оно будет успевать и писать и читать, или придётся две штуки вешать?

Titus
18.09.2011, 17:17
там своя память для этого есть

Ну, если есть, то пожалуйста. Я с фениксом не знаком. Думал, что только основная память там есть, и все.

Mick
18.09.2011, 17:19
а оно будет успевать и писать и читать, или придётся две штуки вешать?


Я тут по другому придумал, чтобы как раз на быстродействие памяти не закладываться. Смысл такой эту память ставим между основной и выходными регистрами (сдвига пиксельного и атрибутного) через мультиплексоры. Когда идет обращение процессора, то из памяти буфера идет чтение, а во время обращения к видеочасти идет запись в буфер. Тем самым практически изменения незначительны и памяти всего используется 256 байт. Кстати записыавать в видеобуфер можно по нечетным строкам, а после сброса нечетной строки менять местами буферы.

На вопрос почему 256 байт, 1 строка это 64 байта (наших как бы 56 но для кратности адресов проще так) видеопикселей + 64 байт атрибуты. И столько же занимает дополнительный буфер. Когда заканчивается видимая часть, то в память пишется значение бордера.

Короче надо будет схемку накидать, но вроде достаточно просто получается.

---------- Post added at 17:19 ---------- Previous post was at 17:18 ----------


Ну, если есть, то пожалуйста. Я с фениксом не знаком. Думал, что только основная память там есть, и все.

Там память для палитры есть, так что она для этих целей не особо годится.

Black_Cat
18.09.2011, 18:06
Я тут по другому придумал, чтобы как раз на быстродействие памяти не закладываться. Смысл такой эту память ставим между основной и выходными регистрами (сдвига пиксельного и атрибутного) через мультиплексоры. Когда идет обращение процессора, то из памяти буфера идет чтение, а во время обращения к видеочасти идет запись в буфер.Более понятно это звучит так: в цикле процессорного доступа к основному ОЗУ Спектрума, мы пишем в теневое ОЗУ по адресу, задаваемому в соответствии с TV развёрткой, текущее значение регистра бордюра, а в цикле когда сканер имеет доступ к ОЗУ - читаем из теневого ОЗУ по адресу, задаваемому в соответствии с VGA развёрткой сохранённое значение регистра бордюра. Соответственно надо на теневую память свой мультиплексор адресов и некий переключатель шины данных между портом бордюра, мультиплексором видеовывода бордюра и теневым ОЗУ бордюра.

Titus
18.09.2011, 18:07
Там память для палитры есть, так что она для этих целей не особо годится.
Тогда опять возвращаюсь к своему посту номе 22, иначе совместимости с мульиколорами Пентагона ждать бесполезно.

Black_Cat
18.09.2011, 18:15
почему 256 байт, 1 строка это 64 байта (наших как бы 56 но для кратности адресов проще так) видеопикселей + 64 байт атрибуты. И столько же занимает дополнительный буфер. Когда заканчивается видимая часть, то в память пишется значение бордерачёт ты тут намудрил.. нахрена нам ещё пиксели? они всегда одинаковы будут. Пишем в теневое ОЗУ токо значение бордюра, т.е. 3 бита порта #FE, которые потом подаём заместо атрибутов на мультиплексор видеоформирователя.

---------- Post added at 18:15 ---------- Previous post was at 18:14 ----------


Тогда опять возвращаюсь к своему посту номе 22, иначе совместимости с мульиколорами Пентагона ждать бесполезно

Titus, ты что-то недопонимаешь в работе Спектрума

Titus
18.09.2011, 19:02
Titus, ты что-то недопонимаешь в работе Спектрума
Я тебе задал конкретный вопрос, на который четкого ответа не получил. С бордюром все понятно, хранить его пиксели в специальном буфере. А вот бумага и аттрибуты - ты предлагаешь их НЕ буферизировать, а читать два раза подряд из экранной области для четной и нечетных строчек? Я правильно понимаю?

Black_Cat
18.09.2011, 19:08
А вот бумага и аттрибуты - ты предлагаешь их НЕ буферизировать, а читать два раза подряд из экранной области для четной и нечетных строчек? Я правильно понимаю? да, это VGA сканер будет делать и так, и дублировать это в теневом ОЗУ не имеет смысла - бесполезное усложнение схемы

Titus
18.09.2011, 19:16
да, это VGA сканер будет делать и так, и дублировать это в теневом ОЗУ не имеет смысла - бесполезное усложнение схемы
Если подходить так, то за время между выводом четной и нечетной строчки, содержимое экранной области может измениться. Это раз. И два, оно может измениться и в течение вывода одной строчки. Но, если в режиме PAL это и есть штатный подход к мультиколорам - менять, скажем, содержимое аттрибутов синхронно с выводом на экран, то в режиме VGA, когда скорость чтения из видеопамяти удваивается, ввиду удвоенной частоты строчной развертки, изменение программой содержимого видеопамяти будет не синхронно с линейным выводом текущей строчки.

Black_Cat
18.09.2011, 19:41
в режиме VGA, когда скорость чтения из видеопамяти удваивается, ввиду удвоенной частоты строчной развертки, изменение программой содержимого видеопамяти будет не синхронно с линейным выводом текущей строчки. ну да, будет рассинхронизация между бордюром и экраном на одну TV строку, что в общем и не заметно. Зато схема упрощается. А Mick как раз предлагает писать и экранную строку, тогда надо иметь более сложную схему коммутации и писать пиксели и для бордюра тоже.

Titus
18.09.2011, 19:46
ну да, будет рассинхронизация между бордюром и экраном на одну TV строку, что в общем и не заметно. Зато схема упрощается.
Я не совсем это имел ввиду. Самое главное было понять, хотите ли вы сделать полную совместимость по мультиколорам с пентагоном, или нет. Понял, что нет. Тогда пожалуйста, используйте упрощенные схемы.

Mick
18.09.2011, 20:17
Тогда опять возвращаюсь к своему посту номе 22, иначе совместимости с мульиколорами Пентагона ждать бесполезно.

Палитра отключаемая, т.е. основной режим обычный спековский, а если хочется цветастости, то просто подключаем палитру.

---------- Post added at 20:15 ---------- Previous post was at 20:13 ----------


ну да, будет рассинхронизация между бордюром и экраном на одну TV строку, что в общем и не заметно.
Поверь очень заметно когда идет борде мультиколорный или сложный. Например парус дема от VNN там бордер просто разваливается из-за того что сторка унас кратна 112 тактам, а у спека все расчитывают из 224 тактов.

---------- Post added at 20:17 ---------- Previous post was at 20:15 ----------


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

Если не полную совместимость, то и нефига вообще буферы лепить, ибо и так работает. А новые бордеры можно писать из расчета 112 тактов :)
Но хочется все таки совместимости :)

Black_Cat
18.09.2011, 20:24
Самое главное было понять, хотите ли вы сделать полную совместимость по мультиколорам с пентагоном, или нет

В предложенном Mick'ом варианте предполагается полная совместимость с мультиколором Феникса :) ..если ему хватит логических ячеек :v2_devil:

Mick
18.09.2011, 20:26
Более понятно это звучит так: в цикле процессорного доступа к основному ОЗУ Спектрума, мы пишем в теневое ОЗУ по адресу, задаваемому в соответствии с TV развёрткой, текущее значение регистра бордюра, а в цикле когда сканер имеет доступ к ОЗУ - читаем из теневого ОЗУ по адресу, задаваемому в соответствии с VGA развёрткой сохранённое значение регистра бордюра. Соответственно надо на теневую память свой мультиплексор адресов и некий переключатель шины данных между портом бордюра, мультиплексором видеовывода бордюра и теневым ОЗУ бордюра.


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

Ставим два мультиплексора КП11. На вход мультиплексора подаем шину данных основного ОЗУ и бордер. Переключаем это все сигналом бордера, а сигнал разрешения выходов( чтобы не влиять на чтение из памяти) сигналом доступа процессор/синхрогенератор.

Короче накидаю схему станет все понятнее. Там не так уж сложно получается.

---------- Post added at 20:26 ---------- Previous post was at 20:25 ----------


В предложенном Mick'ом варианте предполагается полная совместимость с мультиколором Феникса :) ..если ему хватит логических ячеек :v2_devil:

В компьютере не хватит точно, там я на макетке добавлю схемку - она же все же ревизия 0. :)

Mick
19.09.2011, 21:43
Вставил кусок схемы в свой комп. Логика размещена в CPLD-шке, а сами буферы и мультиплексоры изображены здесь.

Шина MD0...MD7 - это шина основного ОЗУ, VD0...VD7 - соответсвенно шина видеобуфера. К шине видеобуфера также подключается сдвиговый регистр и регистр цвета.

Сигнал H1(1,75МГц) рулит переключением видео/атрибуты, не путать с H2(875КГц) как обычно в нормальной развертке. В VGA развертке все частоты естественно выше в 2 раза

http://s50.radikal.ru/i130/1109/94/931a7813c7fa.jpg

Mick
23.09.2011, 19:51
Сегодня попробовал сей вариант на работе. Давно уже не мгтфил. Вобщем идея работает, но с бордером я что то накосячил и посему оценить на сколько эта идея правдободобна не скажу. Буду разбираться уже в понедельник. Но одно скажу, наша КР132РУ14 осилила строку спековского экрана :)

Mick
26.09.2011, 20:00
Сегодня разобрался с бордером. Вобщем идея работает, разваливание на полоски пропало. Но теперь осталось правильно узнать - как же правильно сформировать развертку пятногона. Не попадаю я чтобы парус дема правильно показывала. Кто нибудь может наконец рассказать как же этот пятногон показывает?