В итоге проб и ошибок УДАЛОСЬ ЧАСТИЧНО сделать прошивку ХЛ8 под тайминги пентагона. А именно - 320 строк вместо 312 и 80 строк (вместо 64) бордюра до экрана (все при RG0=1 - все параметры, относящиеся к расширенным режимам я не тронул. Точнее трогал, но тогда "съезжала" адресация расположения букв в символьном режиме - она жёстко привязана к адресам счетчика ВНЕ прошивки ХЛки, и если там "съезжает" количество строк бордюра, съезжает и адрес вывода первой строки символов и далее, что выяснено опытным путём).
Далее получилось так, что той адренсации, что была подведена к ПЛМ, не хватало для пентагоновской развертки. Изначально сигналы V7 и V6 через элемент ИЛИ смешиваются и идут к ПЛМ уже в виде сигнала VV. А для адресации не 84, а 80 строк бордюра нужны РАЗДЕЛЬНЫЕ адреса V7 и V6.
В итоге я решил отогнуть две ноги у ПЛМ - одна нога (и так не идущая вовне) - ликвидировать "внутренний" сигнал Z1 (неиспользуемая нога 16(13) - здесь и далее нумерация ног дана для "широкой" микуросхемы DIP24, а рядом в скобках - для "узкой" DIP20) и использовать его для дополнительного сигнала V7, а вместо VV, который тоже надо отогнуть (нога 18(15)) - взять сигнал V6. Сигналы V6 и V7 берутся, соответственно, с платы - с D63.10 и D63.9 соответственно.
Плюс я убрал формирование сигнала Z (Z2 в исходниках), так как он в современных модификациях АТМ2+ просто ненужный рудимент. Таким образом, ногу с ним 14(11) тоже можно отогнуть.
Таким образом, планировалось, что всего с напайкой двух проводков можно будет получить пентагоновскую развертку. Правда, действительность оказалась чуть сложней -
Для формирования сигнала бордюра HE в новом варианте и для расширенной графики (RG0=0) и для ZX-графики (RG0=1) элементарно не хватило строчек в исходниках (т.е. вариантов комбинаций). Как было выяснено опытным путем при попытках компиляции, их может быть не более ВОСЬМИ, а по факту, не более СЕМИ, так как первая строчка ообычно предзадане -
HE CS - trueВ итоге я снова перелопатил исходники - вернул сингал Z2, но сделал его внутренним (формируется внутри, но используется другими элементами как входящий), каким был ранее Z1.
Но так как Z2 висел ранее на выходе D7 (который вместе с D0 в отличие от сигналов D1-D6 не могут быть переориентированы на вход), я переместил его вместо сигнала бордюра HE (D5 - нога 17(14)), а
HE поменял на прежнее место
Z2 - ногу 14(11).
В этой конфигурации места хватило и новая прошивка скомпилировалась. И заставить ее работать можно при помощи ЧЕТЫРЁХ отогнутых ножек ПЛМ и ТРЁХ навесных проводов.
Два из них - ранее упомянутые синалы V6 и V7 (ноги 18(15) и 16(13)) идущие на D63.10 и D63.9 соответственно.
Далее отгибаем ногу 17(14) - ранее с нее шел сигнал бордюра HE, а теперь - ставший внутренним (и значит ненужный вовне) сигнал Z2.
И отгибаем ногу 14(11) - ранее это был сигнал Z2, а теперь - новый сигнал бордюра HE. Его мы ТРЕТЬИМ проводком припаивает туда, куда он должен идти от ПЛМки - к D14.14.
И получаем работающую ГОРИЗОНТАЛЬНУЮ (это важно для дальнейшего описания) развертку Пентагона в режиме ZX-экрана и кучу дёмок, просмотром мультиколоров которых можно наслаждаться. Например
OSCOSS, которая раньше вообще ругалась, что "у вас не Пентагон" и отказывалась запускаться. Перелопаченные исходники теперь выглядят так:
====================================
#include "cp7_1.dsc"
RG0 CS = false
V6 CS = false
V7 CS = false
VS CS = true
VS = v8 ~v7 v6
VS = ~v2 ~v3 ~v7 ~v6 ~v4 ~v5 ~v8
BL CS = true
BL = ~h4 ~h5 h6 rg0
BL = ~b3 ~b2 h4 ~h5 h6 rg0
BL = b3 ~h4 ~h5 h6 ~rg0
BL = ~b3 h4 ~h5 h6 ~rg0
BL = b3 ~b2 h4 ~h5 h6 ~rg0
BL = ~v6 ~v7 v4 v5 v8
BL = ~v6 ~v7 ~v4 ~v5 ~v8
HS CS = true
HS = ~h6
HS = ~b3 ~h4 ~h5 h6 ~rg0
HS = b3 ~h4 ~h5 h6 rg0
HS = h4 ~h5 h6
HS = h5 h6
Z2 CS = true
Z2 = ~rg0 ~v8 ~v7 ~v6 ~v5
Z2 = ~rg0 ~v8 ~v7 ~v6 v5 ~v4
Z2 = ~rg0 ~v8 ~v7 ~v6 v5 v4 ~v3
Z2 = ~rg0 v8 ~v7 ~v6
HE CS = true
HE = h4 h5 ~h6 rg0
HE = ~h5 h6
HE = rg0 ~v8 ~v7 ~v6
HE = rg0 ~v8 ~v7 v6 ~v5 ~v4
HE = rg0 v8 ~v7 ~v6 ~v5 v4
HE = rg0 v8 ~v7 ~v6 v5
HE = ~z2
//HE = ~v8 ~v7 ~v6 ~v5 ~v4 ~v3 v2 h6 ~h5 ~h4 b3 b2 rg0
====================================И прилагаемый по "инклюду" файл
"cp7_1.dsc" с описанием ножек (там тоже есть изменения, так как мы поменяли местами Z2 и HE и заменили VV на V6 и Z1 на V7 -
====================================
// inputs
#define h6 1>
#define b2 2> // 2 input or 1 output
#define h5 3>
#define bl 4>2
#define h4 5>
#define hs 6>3
#define b3 7>
#define rg0 8>4
#define v4 9>
#define v6 10>5
#define v3 11>
#define z2 12>6
#define v2 13>
#define v7 14>7
#define v5 15>
#define v8 16>
// outputs
#define VS >1
#define BL >2
#define HS >3
#define RG0 >4
#define V6 >5
#define Z2 >6
#define V7 >7
#define HE >8
====================================Жирным и подчеркнутым я выделил те места, которые нам понадобятся ниже.
Но вот позже, при тестировании на разных демках, оказалось, что совместимость, увы неполная, и неполная она в плане горизонтальной синхронизации.
Вот что показывает, например, демка
RAGE:
И тут для меня все оказалось гораздо сложней и запутанней и требуется помощь уважаемой аудитории.
Для начала прошу (кто не в курсе), ознакомиться с разбором оригинальной прошивки ПЛМ 1556ХЛ8 для АТМ2+от камрада
KALDYH вот тут:
https://zx-pk.ru/threads/8208-vopros-po ... page3.htmlКонкретнее всего меня напрягла вот эта его фраза:
Исходя из его рассчетов (еще раз параллельно смотрим его разбор по ссылке) и в Пентагоне, и в АТМ строка имеет одинаковую длину 224 такта, но немного отличается:
Пенгагон:
32 такта (каждый такт - 2 пикселя) - гашение, 36 тактов бордюр, 128 тактов ZX-экран, 28 тактов бордюр - а далее - сигнал строчной синхронизации.
АТМ:
40 тактов - гашение 24(+4=28) - бордюр, 128 тактов - ZX-экран, 32(-4=28) бордюр, а затем - строчная синхронизация (тоже до конца не понял, как она формируется в конце и понимает, что 224 такта прошли - а это важно для понимания всего процесса в целом).
В целом по сумме гашение+первый бордюр и в пентагоне и в АТМ = 68 тактов, но есть различие в длительности самих этих двух компонентов.
При этом измерения (буквально линейкой) показали, что бордюр перед ZX-экраном имеет размер в 7 знакомест (28 тактов!), а на скриншоте в демки RAGE видно, что горизонтальная рассинхронизация между Пентагоном и АТМ составляет ТРИ знакоместа, (т.е. разница в 12 тактов - как если бы у пентагона было бы 36 тактов бордюра, а у АТМ - уже не 24, а 28 тактов.
Т.е. формула "24+4" и в конце "32-4" играет новыми красками.
Сам KALDYH по ссылке на ZX-PK.RU пишет:
| | |
| Quote: Референсные параметры экрана Пентагона (не помню откуда мной взято): 32 такта - импульс гашения по строкам, 36 тактов - бордюр от гашения до экрана, 128 тактов - экран, 28 тактов - бордюр до строчного синхроимпульса, в сумме 224 такта. У ATM, получается, так: 40 тактов - гашение, 28 (24+4 задержки) - бордюр до экрана, 128 - экран, 28 (32-4 задержки) - бордюр до импульса синхронизации. Отличия, как видим, минимальны, и касаются они только длительности гасящего импульса - у ATM он чуть длиннее. | |
| | |
При этом, если я правильно прочитал исходники, бордюр там все-таки выставлен на "24":
h6 - 32 такта, h5 - 16 тактов, h4 - 8 тактов, b3 - 4 такта, b2 - 2 такта
HE = h4 h5 ~h6 rg0 - xx011xxx = 24 (и до 39)
HE = ~h5 h6 - видимо, второй бордюр перед синхрой - xx10xxxx = 32 (и до 47) Возникают сразу несколько вопросов по поводу того, как переделывать все "под пентагон":
1) сделать гашение 32 из 40, а бордюр синхронно увеличить с 24 до 32.
Тогда слева и в АТМ и в Пентагоне бордюр будет по 8 знакомест. Но вот в
RAGE останется разница в одно знакоместо.
2) Сделать гашение в АТМ 28, а бордюр 36 (а гашение уже не 32, а 28 соответствено). Тогда в АТМ слева от экрана бордюр будет иметь ширину 9 знакомест (против 8 у Пентагона), а вот в демке RAGE вертикальные черты будут совпадать (возможно расхождение в один пиксель, как писал KALDYH - но об этом далее).
Это приемлемо - теоретически, только в очень-очень редких случаях в отдельных мультиколорах (не бордюрных) по краям будут небольшие "мерцания" (как сейчас есть при текущих расхождениях в горихонтальной синхре). Но это, повторюсь, приемлемо.
Тут возникает куча других вопросов:
Вот берем коды сигнала гашения:
BL = ~h4 ~h5 h6 rg0 - xx100xxx = 32 (до 39)
BL = ~b3 ~b2 h4 ~h5 h6 rg0 - xx10100x = 40 (до 41) Получается гашение, которое должно идти первые 40 тактов, идет только с 32 по 40 такт? Или я не прав? А что находится с 0 до 31 такт? Эти такты отданы на откуп сигналу строчной синхронизации, или я просто что-то не так понимаю? А если понимаю так, то получается, что если мы будем править гашение, значит надо вносить измененим и в исходники формирования сигнала строчной синхры, меняя ее длительность? Или я опять что-то не так понимаю? Например, если таким образом нашение станет короче синхры (28 против 32) - что будет?
Также, если мы будм делать не 24, а 28 тактов бордюра, то надо задействовать сигнал B2.
А тут уже совсем пока что для меня начинаются джунгли. Вроде бы бордюр должен останавливать отсчет адресов. Значит сингал B2 нельзя использовать? А значит строчная синхронизация в АТМ невозможна? Как будет "обрезаться" второй бордюр справа?
В общем, вопросы, вопросы...
Ну и опять возвращаемся к пресловутой задержке бордюра в "одно знакоместа (4 такта) и один пиксель). Я пока не вкурил
по схеме АТМ - где это и как (и какие именно счетчики останавливаются).
Большая просьба помочь со всем этим разобраться. Сейчас мы стоим В ОДНОМ ШАГЕ от того, чтобы АТМ получил полную (или почти полную) Пентагоновскую развертку. Надо дорасколоть этот орешек.
В приведенных мной исходниках жирным выделены те строчки, которые относятся к горизонтальной синхре, а подчеркнуты те, которые относятся к ZX-экрану и планируются к изменению.
P.S. И да. Просьба разъяснить это строчку в исходниках:
//HE = ~v8 ~v7 ~v6 ~v5 ~v4 ~v3 v2 h6 ~h5 ~h4 b3 b2 rg0Это просто "закомментированный чертами // сингал HE, или наоборот - это инвертированный HE?