Вот я нашел код, который должен переключать VGA режимы через порты, но так как я в си не силен меня сильно смущают фразы типа "typedef unsigned long dword" Прошу помочь перевести все это дело на FASM, ну или хотя бы верхнюю часть этого кода.
typedef -- это определение типа, то же самое, что type в Паскале. В данном случае это значит, что dword -- это тип unsigned long, т.е. 4-байтовый беззнаковый целый (обычное двойное слово). Byte и word -- тоже абсолютно стандартные (байт и слово, т.е. 2 байта). Пы.Сы. А Си знать надо в любом случае, на чём бы реально не работал. Как-никак, стандарт-с. Я вот пишу на асме и на Дельфи, Си ненавижу всеми фибрами души (и всем прочим, чем можно ненавидеть), но понимать его понимаю, при необходимости и пишу -- но не по доброй воле, конечно
В общем так: VGA у меня получилось сменить режим - изменил разрешение по вертикали на 480. Потом выложу код, когда до конца разберусь с этим Вот такой вопрос - VGA поддерживает невысокое разрешение, хотелось бы использовать более высокое а найти документацию весьма проблематично VGA более менее нормально описано на codenet.ru Если кто нибудь интересовался этой темой прошу поделиться информацией.
Ну тогда читай про SVGA - там нормальная смена режима на то, что хочешь, без портов. Через прерывание. Есть прекрасное описание спецификации SVGA, на английском. Гуглится на раз. Забегая вперед (поскольку сменить разрешение через прерывание - это очевидно, но не использовано ТС): нет, без прерываний нельзя, поскольку порты у каждой железяки разные. Есть только стандартные режимы, и стандартные порты, через которые возможно не все - только до 640х480х16 цветов - долгое время это было режимом по умолчанию в Windows, и только ХР научилась устанавливать 800х600 для любых адаптеров, без каких-либо дополнительных драйверов. Забегая еще вперед (поскольку тема в разделе OS.KERNEL): да нет же, черт возьми, если ты пишешь свою ос, то сначала вызови прерывания SVGA и установи нужное разрешение, а потом переходи в защищенный режим. ЗЫ: и про порты можно прочитать, если порыться на сайте Intel, были мануалы по 815 чипсету, и по графике в том числе. Учитывая, что на большинстве адаптеров устанавливается 800*600, и в том числе - на интеловском интегрированном, какая-то часть документации достаточно универсальна.
Да ничего пока особенного - просто переключить режим на графический с высоким разрешением, а там посмотрю) ЗЫ вот интеловская документация: http://intellinuxgraphics.org/Vol_1a_G45_core_updated.pdf - часть 1я http://intellinuxgraphics.org/Vol_1b_G45_core.pdf - часть 2я ЗЗЫ есть следующие видеокарты: GeForce 260GTX GeForce 8600GT Intel GMA 950
Прерывание BIOS тоже ведь написано Есть OpenBIOS, но там кода много, разбираться надо http://www.openfirmware.info/OpenBIOS
Treant 1. Интеловская документация только для интеловских карт. 2. На GeForce ты документацию не найдёшь вообще, а там всё по другому. 3. Гиблая это идея, даже если твой код будет работать на одной карте nVidia, не факт что будет работать на другой.
Спасибо, начал разбираться с этим Скачал прошивку VideoBIOS для своей 8600GT, буду ковырять... Если кому нужно прошивки VideoBIOS тут: http://www.techpowerup.com/vgabios/
AMD-ATI открыла документацию http://www.x.org/docs/AMD/ http://developer.amd.com/documentation/guides/Pages/default.aspx#open_gpu На NVidia нету открытой документации зато есть полученная различными путями http://nouveau.freedesktop.org/wiki/ А также несколько исходников от самой NVidea, с последующими дороботками линукс сообществом. http://cgit.freedesktop.org/xorg/driver/xf86-video-nv/tree/src Интел http://intellinuxgraphics.org/documentation.html Старая видюшка от интел i740 ftp://download.intel.com/support/graphics/intel740/29061902.pdf VIA тоже открыла документацию http://www.x.org/docs/via/ Очень старая видюшка от CHIP, но зато хорошая в качестве справки по VGA http://sunsite.rediris.es/pub/mirror/intel/graphics/mobilegraphics/datashts/010179001.pdf
qqwe На nouveau собрана различная документация по Нвидеа в том числе и 3D. И там же есть драйвер от энтузиастов, но насколько рабочий я не проверял. Но пишут что у кого-то работает. По поводу АТИ начиная с R300 - 2002 год Radeon 9500. В документе "R5xx Family 3D Programming Guide" также указанны отличия R3xx-R5xx Так что вроде бы не только последнии.
Вот тут в процессе наткнулся вот на что проверка некоторого байта на первый бит, если он 0 , то продолжать, если нет - выход, но перед этим: Во 2м байте содержится размер модуля в секторах, я не понимаю зачем его обнулять, что это дает? Мб возможность загружать в этот сегмент другой модуль BIOS В общем хотелось бы услышать кто что думает
Только что получилось что то сделать хо-хо Скопировал часть кода из прошивки. Что произошло пока не понял но было вот что: Я в PM, текстовый режим 40x25 Нажимаю Enter - черный экран через секунду тот же текст на экране но на одну позицию вниз сместился Пока код не смотрел, так наобум скопировал первый попавшийся фрагмент, показавшийся рабочим. Прежде при попытках на этой GeForce8600GT либо перезагрузка, либо черный экран получался Буду дальше разбираться...
Вот код, который разрешает VGA: Мне непонятно in al, dx - зачем нужно. На codenet написано только про out, про in не упомянуто Пробовал убрать этот in - ничего не изменилось После выполнения этого кода al сразу перезаписывается на 1, то есть нигде не участвует. Подскажите пожалуйста что этот in может делать.
Treant Я не знаю, откуда вы взяли приведенный код, но выглядит он бредово. Классическая схема обычно такова: ... mov dx, port in al, dx or/and/xor al, mask out dx, al ... Здесь логика такая: порты, особенно видеоадаптера, в основном управляются побитно. Если сдуру записать то, что в голову взбредет, все глюкнет. Значит, сначала надо прочитать то, что было, потом выставить или обнулить те биты, какие нам надо, и записать назад в порт. Это было во-первых. Во-вторых, нигде нет начальной инициализации AL. XOR AL, 1 вовсе не выставляет значение AL в 1 - и даже не устанавливает нулевой бит в 1. Это ИНВЕРТИРУЕТ 0-й бит, то есть то, что запишется в порт, зависит от предыдущего значения AL, которое нигде в коде не указано... Ну и в третьих... Сильно подозреваю, что этот код ВООБЩЕ бессмысленен - там и так стоит 1 в 0-м бите, если вы проверите В любом случае, не понимаю, зачем что-то писать в этот порт для установки режима?
Да вызова функции стоит xor al, al после входа в функцию xor al 1 даст 00000001b в al дальше в порт - если у них там ни еще фигня какаято на этом порту - то разрешить VGA потом из порта непонятно зачем выход из процедуры - вход в другую и сразу mov al, 1, то есть считанное из порта воообще не играет никакой роли вот я тут подумал, что может быть in al, dx после out'а указывает что то типа "применить включение/выключение VGA" - такое вообще бывает?
Похоже in в порту 3c3h все таки что то значит - вот следущий кусок кода: Здесь сперва в порт 3с2h кладется 1 А дальше - снова эта фигня - in в порт 3c3h и al снова не сохраняется, так как дальше идет popa Помогите хоть чем нибудь, а то я уже голову об это сломал((
Treant Навскидку примера не приведу, но вроде видел такие у-ва которые нужно _читать_ (просто прочесть и все). Результат чтения можно проверять, но может быть что даже проверки не нужно. Например (могу ошибаццо) при чтении порта 378h при установленном обработчке #SMI будет возникать это прерывание.