А у меня вот тоже проблемы с видеоконтроллером. Сначала сделал с разрешением 640х480, как наиболее стандартный. Потом обнаружил, что 480 не очень хорошо делится на 25 (строк в текстовом режиме). Далее вспомнил, что стандартный текстовый режим DOS был 640х400.
Думал, что переделка займет 5 минут. Строчная синхронизация у этих режимов одинаковая, кадровая - естественно, частота другая, да и полярность кадрового импульса положительная вместо отрицательной.
Переделал, включил - картинка быстро плывет вверх. Мониторы (один довольно древний, второй - совсем современный) определяют режим как 720х400, хотя даже по осциллографу вроде синхронизация четко отвечает режиму 640х400.
Перепробовал все, что пришло в голову - ноль результата. Может, кто скажет что-нибудь умное ? И вообще, кто в курсе - монитор режим исключительно по синхронизации определяет, или еще как-то RGB и Blank для этого использует (хотя понимаю, что говорю глупости) ?
Дело в том, что я информации общего плана за последние пару часов перечитал уже дикое количество, но никаких мыслей новых, что еще попробовать, так и не появилось...
Так, а сейчас я офигел конкретно... Опять запустил работающий режим 640х480, но добавил смену полярности кадрового синхроимпульса с помощью переключателя на отладочной плате. Появилась картинка, щелкнул переключателем, картинка исчезла. Но только на секунду или две, потом появилась опять !!! Я даже осциллографом посмотрел, чтобы быть уверенным, что полярность меняется.
Короче, ЖК монитору фирмы Acer 2005 г.в. все равно, в какой полярности приходит кадровый синхроимпульс (строчный еще не пробовал), он все равно четко опознает режим, просто задумавшись на пару секунд.
newold86 wrote:Дело в том, что я информации общего плана за последние пару часов перечитал уже дикое количество, но никаких мыслей новых, что еще попробовать, так и не появилось...
Ну частоты померь частотометром - если дисплей определяет режим неправильно, значит есть причина...
Я тут за главного - если что шлите мыло на me собака shaos точка net
LCD мониторы развёртку определяют не по полярностям, а сравнивают с внутренней эталонной. Ищи монитор типа Samsung 3Ne, тот точно определяет по полярностям.
Кстати, 640х400 режима нет в стандарте, есть 640х350, есть 720х400. Текстовый режим VGA - 720х400 (матрица символа 9х16, Fh=31,469 kHz, Fv=70,087 Hz, полярности Sh=Negative,Sv=positive).
640x350 унаследован от EGA с матрицей символа 8х14.
jdigreze wrote:Кстати, 640х400 режима нет в стандарте
Как так нет? Ведь достаточно в Гугле набрать vga timing 640 400, выпадет куча результатов. Даже утверждается, что именно этот режим включался при загрузке DOS...
Хотя я готов поверить - ничего другого уже не остается...
А какая разница для монитора сколько пикселов в строке? Главное чтобы времена синхроимпульсов и кол-во строк совпадало, а сама строка - по сути аналоговая в VGA, нет?...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Shaos wrote:А какая разница для монитора сколько пикселов в строке? Главное чтобы времена синхроимпульсов и кол-во строк совпадало, а сама строка - по сути аналоговая в VGA, нет?...
Блин, ну и почему я сам о таких элементарных вещах не подумал ??? Наверное, немного больше спать нужно...
newold86 wrote:Как так нет? Ведь достаточно в Гугле набрать vga timing 640 400, выпадет куча результатов. Даже утверждается, что именно этот режим включался при загрузке DOS...
Хотя я готов поверить - ничего другого уже не остается...
Ну сам посчитай 80х9=720, 25х16=400. Это и есть стандартный текстовый экран. А так да, количество пикселей по горизонтали пофиг, лишь бы в тайминги укладывался.
Вместо того, чтобы добавить клавиатуру, погрузился в видеоадаптер - интереснее
Вот еще обнаружил, тоже добавило к списку задач:
The width of CGA, EGA, MCGA, and VGA text characters is 8 pixels. In the case of VGA however, 9 pixels are actually used for displaying the characters. The 9th pixel is appended to the right end of each pixel row. If the character being displayed has an ASCII code ranging from 192 to 223 and the 8th pixel in a given pixel row is on, the 9th pixel in that row will be on also. If the 8th pixel in the row is off or the ASCII code for the character is not in the range 192 to 223, the 9th pixel will not be turned on.
Вроде почти разобрался с видео - оказывается, у меня синхронизация абсолютно нормально работает, это просто текст действительно бежал по экрану из-за неправильной переделки контроллера на другое разрешение (я наплодил кучу счетчиков, взаимоотношения между которыми уже сам перестал понимать).
Вот думаю - сделать нормальный VGA-шный текстовый режим полностью заново, оставить нынешний - для тестовых целей вполне годится, или вообще ну его все нафиг ?