Продолжу свой неторопливый монолог )
Все в том исходнике очень непрямо, потому что после авторов прошивка кучу раз в разных местах патчилась разными людьми по принципу костыля. То есть делались некие заплатки под какие-то сложные случаи, из-за этого какие-то другие режимы работать переставали.
Собственно, методом костыля и глубоко не вникая эту прошивку можно подтянуть под свои нужды; часть параметров там правится прямо в описании (maindef.h, struct.h, pcb*.h), некоторые общие для всех режимов параметры можно принудительно выставить в функции инициализации (там в скелете любой программы для, наверное, любого контроллера, есть функция начальной инициализации и функция с "главным циклом"), например, я там выбираю источник VGA при включении, соотношение сторон 4:3, четкость =0.
Сам код я сейчас умышленно не привожу, это только создаст неразбериху. Когда отлажусь, выложу здесь все диффы вместе в комментариями, а пока только на пальцах расскажу суть того, что там можно "подкрутить".
Далее. Из сломанной функции подстройки контрастности, которая на ВГА рисовала мне "синеву", пришлось исключить вычисления, связанные с гамма-коррекцией, ибо они завязаны на целый набор слабопонятных параметров и странных таблиц, понять которые в нерабочем виде невозможно. Поэтому для ВГА были приняты те же простые и прозрачные формулы, что и для прочих режимов, это вернуло нормальный белый цвет - а всякие "карамельно-бежевые" и "вырви-глаз-синие" режимы на спеке не нужны, даже не могу придумать, где можно их использовать.
Еще один важный момент для Спека - правильные пропорции экрана. Достигаются корректировкой горизонтального пиксельклока, сделать это можно прямо из меню, но проблема в том, что сохранение в eeprom в этой прошивке работает как-то... в общем не работает оно. Починить не смог, а сброс на средние значения при пропадании сигнала или смене режима решил просто отключением автоподстройки клока и жестким прописанием нужного "среднего значения" IHTotal прямо в таблице режимов. Тогда нужный режим включается с нужными пропорциями и подстраивается только центровка.
Этим я добился идеальной правильной картинки пентагона с RGBI-VGA в режиме 60гц
А вот дальше танцы с бубном. Начал я тестить режим 50гц с RGBI-VGA. Он определялся то как 640x350_50Hz, то как 640x400_56Hz, то как 720x400_56Hz. Случайным образом. Это при том, что последних двух режимов на 56 гц НЕТ в таблице режимов.
Пропатчил первый режим, чтобы получить весь бордюр (верх и низ), а также правильные пропорции, после бубна он у меня вписался как 640х550_50Hz:
Но проблема в том, что включается он примерно один раз из пяти, откуда берутся левые режимы в других случаях - не пойму.Код://-------------------------------------------------- // Preset Modes //-------------------------------------------------- { // Mode 0 : 640 x 480 x 50 Hz 0 | _SYNC_HN_VN | _SYNC_HP_VN | _SYNC_HN_VP | _SYNC_HP_VP, // Polarity Flags, 640, 550, // InputWidth, InputHeight, 315, 500, // IHFreq in kHz, IVFreq in Hz, _HFREQ_TOLERANCE, _VFREQ_TOLERANCE, // IHFreqTolerance in kHz, IVFreqTolerance in Hz, 800, 525, // IHTotal, IVTotal, 144, 25, // IHStartPos, IVStartPos, },
Выстриг из таблицы все то, что касалось разрешений 640x400 и 720x400 - а они все равно включаются (
IgorR76, были ли проблемы включения "несуществующих" режимов кривой детекции ? Как их победить ?