Форумы Modlabs.net: Исходный код драйверов VooDoo - Форумы Modlabs.net

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Исходный код драйверов VooDoo

#1 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 271
  • Регистрация: 18 Декабрь 08

Отправлено 02 Февраль 2010 - 00:54

Насколько я понимаю, существует множество версий драйверов от любителей. Но при этом сама 3dfx коды драйвера не открывала (?).
Т.е., драйвера кому-то удалось среверсить или доработка функционала идет за счет бинарных патчей к оригинальным? Чьих-либо исходников хотя бы каком-нибудь виде не нашел, может быть плохо искал. Может кто-нить пролить свет на эту тему?
0

#2 Пользователь офлайн   White 

  • Белый человер
  • PipPipPipPipPipPipPip
  • Группа: Главный Администратор
  • Сообщений: 12 292
  • Регистрация: 16 Июль 05

Отправлено 02 Февраль 2010 - 02:10

На это пролить свет может только Rainbow

добавлено спустя: 0 часов 1 минут 1 секунд

Я нашё только вот что: http://www.tomshardware.co.uk/forum/75127-...e-code-released

http://www.warp2search.net/contentteller/n...code_leaks.html
0

#3 Пользователь офлайн   ps2 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 49
  • Регистрация: 26 Октябрь 06

Отправлено 02 Февраль 2010 - 12:17

Да, была "утечка" исходников. А поскольку всё произошло лишь через несколько лет (в 2003) после поглощения 3dfx, то правообладатели закрыли на это глаза. Распространяемый файл назывался "3dfx_source_code.rar", весил порядка 40 метров и содержал исходники дров (включая глайд и OpenGL ICD) на любой вкус и цвет, а также заметку о том кто и с какой целью выложил его. Тем не менее, большинство ссылок уже давно стали битыми, но появились и рабочие :gigi: [1]. Возможно этот архив слегка отличается от оригинала.

Кстати, задолго до этого (в 1999) 3dfx опубликовала глайд для линукса в виде open source проекта. Позже этот код использовался в некоторых wrapper'ах, а также был портирован обратно на винду и вырос в GlideXP.

Комментарий:
Скорее всего SFFT (да и другие разработчики) использовал код 3dfx для своих релизов дров. Остаётся непонятным почему никто из них не опубликовал свои исходники. Опасаются того, что уличат в использовании "утёкшего" кода? Вряд ли - ведь можно просто выложить патч к оригинальным текстам... Но, наверное, никто в этом не заинтересован. Таким образом, если кто-то в будущем захочет улучшить дрова для вудушек, то ему придётся начинать с нуля (с кода 3dfx), а можно было бы сразу взять за основу последние дрова от SFFT...

Призыв:
Если вы разрабатываете что-то связанное с 3dfx (glide, дровами, биосами, ...) - делайте свои исходники открытыми! Энтузиастов 3dfx осталось мало (а программистов среди них ещё меньше), так что отбросьте мысли о коммерческой тайне своего драгоценного кода и нереальных прибылях :gigi:. Кто-нибудь обязательно возьмёт ваш код за основу своего проекта, улучшит его и опубликует, как и вы когда-то сделали.

[1] http://3dfxbios.stan...source_code.rar
0

#4 Пользователь офлайн   crapty 

  • crapty
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 374
  • Регистрация: 26 Октябрь 09

Отправлено 02 Февраль 2010 - 19:24

Кстати на каком языке там написаны дрова? Просто 40 метров качать просто так не охота...
0

#5 Пользователь офлайн   saso 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 71
  • Регистрация: 31 Март 07

Отправлено 02 Февраль 2010 - 20:56

Просмотр сообщенияcrapty (2.2.2010, 19:24) писал:

Кстати на каком языке там написаны дрова?

На английском.
0

#6 Пользователь офлайн   crapty 

  • crapty
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 374
  • Регистрация: 26 Октябрь 09

Отправлено 02 Февраль 2010 - 21:31

Просмотр сообщенияsaso (2.2.2010, 20:56) писал:

На английском.

На каком языке программирования?
0

#7 Пользователь офлайн   ps2 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 49
  • Регистрация: 26 Октябрь 06

Отправлено 02 Февраль 2010 - 21:40

crapty, ну конечно же на Си, и немного на ассемблере.
0

#8 Пользователь офлайн   saso 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 71
  • Регистрация: 31 Март 07

Отправлено 02 Февраль 2010 - 21:59

Просмотр сообщенияcrapty (2.2.2010, 21:31) писал:

На каком языке программирования?

microsoft visual c++
0

#9 Пользователь офлайн   max1024 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Участник клуба Voodoo Masters
  • Сообщений: 514
  • Регистрация: 16 Февраль 03

Отправлено 02 Февраль 2010 - 22:10

Цитата

На это пролить свет может только Rainbow

подождем его, может прольет "свет" на ситуацию :)
0

#10 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 271
  • Регистрация: 18 Декабрь 08

Отправлено 03 Февраль 2010 - 21:39

Отлично, спасибо большое.

Скачал 40 метровый файл, внутри много исходного кода различных утилит и тестов, непосредственно к драйверам не относящимся. Также много скомпилированных экзешников и прочих материалов (например .max, судя по всему от 3дстудии). Пакет скорее всего сформирован из разных; скажем, в корне есть ридми, где написано, что это глайд диагностикс кит и что драйверов тут нет. Также лежат штуки, относящиеся к СДК, но .sys файлы (как бы драйверы) тоже есть. Есть и исходные тексты, судя по названию и содержанию которых, представляют собой части драйвера, обрабатывающие DirectDraw и OpenGL.

Как нибудь скачаю ДДК, настрою среду сборки и попробую собрать что-нить совместимое с моим 2003 сервером или хотя бы с 2000/98.
Мэйкфайлы в папках как для вин, так и для юникс/линукс.
0

#11 Пользователь офлайн   max1024 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Участник клуба Voodoo Masters
  • Сообщений: 514
  • Регистрация: 16 Февраль 03

Отправлено 04 Февраль 2010 - 21:37

dE fENDER
Удачи, надеюсь у тебя все получится и ты поведаешь нам о результатах :shuffle:
0

#12 Пользователь офлайн   White 

  • Белый человер
  • PipPipPipPipPipPipPip
  • Группа: Главный Администратор
  • Сообщений: 12 292
  • Регистрация: 16 Июль 05

Отправлено 04 Февраль 2010 - 23:42

Я жду не дождусь результатов!
0

#13 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 271
  • Регистрация: 18 Декабрь 08

Отправлено 06 Февраль 2010 - 02:37

Хорошо, особенно если людям интересно, то расскажу про результаты, которых добился:

Система: Voodoo 5 PCI Mac с перешитым PC-биосом, Windows 2003 Server R2 Enterprise Edition x86 En Free Build (обычная 32-разрядная английская пользовательская сборка).
Используемое ПО: Драйвер SFFT 1.5, Windows IFS Kit and DDK 3790, Visual Studio 2008.
Цель: скомпилировать минипорт 3dfxvsm.sys и драйвер дисплея 3dfxvs.dll; заменить их в драйвере SFFT 1.5 и убедиться в работоспособности.

Требуемый исходный код драйвера для Windows 2000 находится в файле 3dfx_source_code.rar на пути \H5\W2K. Содержимое этой папки я распаковываю в c:\3dfx

Насчет среды "microsoft visual c++" и драйверов. Ее можно заставить компилировать драйверы, но с побочными эффектами. В последний раз, когда я ее пытался использовать для этого, выходило следующее: драйверы компилировались и запускались без ошибок, но при работе вели себя очень странно, пропуская команды от управляющих приложений, либо вообще игнорируя их. При этом тот же исходный код, собранный в среде ДДК вел себя корректно и имел меньший размер. Насколько мне известно, среду Visual C++ для разработки драйверов из профессиональных организаций не использует никто. Утилиты пользовательского режима, наоборот, пишут именно на ней. В этом пакете исходных кодов также можно найти файлы проектов Visual C++ с расширениями .dsp и .dsw.
Учитывая это, в этот раз я даже не пытался настроить студию, а сразу решил воспользовался средой ДДК.
Ставлю ДДК. Использую для этой цели "Windows IFS Kit and DDK 3790". Это - версия ДДК для разработчиков файловых систем, предназначенная для первой сборки 2003 сервера без сервиспаков.
Устанавливаю его в папку C:\WINDDK.

В меню Пуск выбираю Development Kits\Windows IFS Kit and DDK 3790\Build Environments\Windows Server 2003\Windows Server 2003 Free Build Environment. Появляется консольное окно. Ввожу команду cl, чтобы проверить версию компилятора. Выдается:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.2179 for 80x86

Запускаю командную строку Visual Studio 2008, чтобы убедиться, что компиляторы разные. Консоль среды студии выдает:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86

Сначала собираю минипорт. В консольном окне среды ДДК перехожу в папку c:\3dfx\Src\Video\Miniport\H5. Выполняю команду make. Выдаются сообщения о ходе компиляции вылазит первая ошибка:
c:\3dfx\Src\Video\Inc\VIDEO.H(126) : error C2220: warning treated as error - no object file generated

после этого идет еще несколько, но с ними позже (есть правило - всегда разбирайся только с первой ошибкой, остальные могли возникнуть из-за нее). Смысл сообщения: файл заголовка почему-то не создает объектный файл. Да он и не должен этого делать, но кто-то его попросил. Также заметно, что включена опция "Расценивать каждое предупреждение как ошибку". В принципе, так и надо делать, особенно для драйверов, но здесь для устранения надо очень глубоко копать. А 7.5 МБ исходных кодов (6 в драйвере, 1.5 в минипорте) - это даже не "Война и мир". Не буду углубляться, просто вырублю все предупреждения. В файле c:\3dfx\Src\Video\Miniport\H5\SOURCES комментирую 37 строку и отключаю вывод ошибок устанавливая ключ /W0 в добавленной 38 строке:
34: !IFNDEF MSC_WARNING_LEVEL
35: MSC_WARNING_LEVEL=/W3
36: !ENDIF
37: #MSC_WARNING_LEVEL=$(MSC_WARNING_LEVEL) /WX
38: MSC_WARNING_LEVEL=/W0

Выполняю make. Вылазит следующее сообщение, говорящее о том, что мэйкфайл ДДК был пересобран, но для компиляции нужно попробовать make еще раз:
Rebuilding objfre_wnet_x86\_objects.mac from .\sources .\i386\sources.
objfre_wnet_x86\_objects.mac was rebuilt, please reinvoke NMAKE
NMAKE :  U1077: 'md' : return code '0x1'

Это предупреждение будет появлятся и в дальнейшем, каждый раз надо просто повторять команду make. Еще раз запускаю make. Ошибка:
c:\3dfx\Src\Video\Miniport\H5\KMVT.C(1942) : error C4296: '>=' : expression is always true

После чтения кода драйвера и определений ДДК выясняется, что в файле KMVT.C с непонятной целью был переопределен макрос NTSTATUS, который в обычных условиях заменяется на знаковый тип LONG, но в 38 строке этого файла он был переопределен на беззнаковый DWORD. В 1942 строке макрос NT_SUCCESS проверяет свой параметр, приводя его к типу NTSTATUS и сравнивая его с нулем при помощи оператора >=. Компилятор обнаруживает, что беззнаковый тип всегда соответствует этому условию и дает ошибку, говоря о бессмысленности проверки. С некоторых пор 4296 уже не предупреждение, а ошибка.
Здесь есть много путей устранения. Можно просто отключить эту ошибку, как я сделал ниже, при сборке основного драйвера. Но можно и исправить, вернув правильное определения NTSTATUS. Я не буду трогать переопределение вверху, т.к. в середине файла возможно есть код, подразумевающий, что NTSTATUS беззнаковый (м.б. в какой-то момент программисту не хватило 2 миллиардов положительных значений и он увеличил максимум до 4). Перед 1942 строкой вставляю еще одну:
#define NTSTATUS LONG
	if (!NT_SUCCESS(status)) {
		  status = ERROR_DEV_NOT_EXIST;
		  return status;
	}else {
		status = 1;
		return status;
	}

Теперь выдается следующее:
'rebase' is not recognized as an internal or external command, operable program or batch file.

Это дело нам знакомо. Ребэйз задает адрес загрузки модуля в память. Наверно, во времена w2kddk она входила в его состав, но потом ее выкинули, как и много других полезных вещей. Достану ее из Windows SDK 6.0A, входящего в комплект Visual Studio 2008. Программа находится в C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin. Переношу в папку C:\WINDDK\3790\bin\x86, где в ДДК лежат утилиты для сборки х86 драйверов.

Внесу изменения в rc-файл, содержащий строки, отображаемые при просмотре свойств драйвера. Нужно, чтобы убедиться, что используется именно мой драйвер. Меняю 36 строку файла VOODOO3.RC:
#define VER_COMPANYNAME_STR		"Build by dE fENDER. 05.02.2010"

Выполняю make. Ошибок нет. Однако есть небольшой секрет. Если сборка проводилась путем отлаживания единичных ошибок, то успешное выполнение команды make здесь не создаст итоговый файл C:\3dfx\Src\Video\Miniport\H5\objfre_wnet_x86\i386\sys\3dfxvsm.sys. Вместо этого он будет находится уровнем выше и далеко не факт, что его код именно тот, что требуется. Поэтому перед финальным выполнением команды make я удалю папку objfre_wnet_x86 со всем содержимым. Теперь выполняю команду make и после успешной компиляции получаю требуемый файл C:\3dfx\Src\Video\Miniport\H5\objfre_wnet_x86\i386\sys\3dfxvsm.sys.
Теперь сборка основного драйвера.
В консольном окне ДДК перехожу в папку c:\3dfx\Src\Video\Displays\H5 и выполняю команду make. Первая ошибка:
c:\3dfx\Src\Video\Displays\H5\ENABLE.C(381) : error C2065: 'DDI_DRIVER_VERSION' : undeclared identifier

Смотрим код (в комментарии упоминается про Вистлер (т.е. Windows XP)). Ищем строку DDI_DRIVER_VERSION в папке с DDK, она обнаруживается в файле winddi, в комментарии, где сказано, что это определение было убрано и надо явно указывать то, которое поддерживается. Возьмем для него DDI_DRIVER_VERSION_NT5. Открываем файл c:\3dfx\Src\Video\Displays\H5\ENABLE.C и в 379 строке вносим следующие изменения:
	// DDI version this driver was targeted for is passed back to engine.
	// Future graphic's engine may break calls down to old driver format.

#define DDI_DRIVER_VERSION DDI_DRIVER_VERSION_NT5

	if (cj >= sizeof(ULONG))
#ifndef MS_VIEW
		pded->iDriverVersion = DDI_DRIVER_VERSION;
#else
		// Report new DDI_DRIVER_VERSION for Whistler
		pded->iDriverVersion = DDI_DRIVER_VERSION_NT5_01;
#endif

Опять make в консоли окружения ДДК. Предыдущая ошибка исчезла, теперь имеем:
c:\3dfx\Src\Video\Displays\H5\D3INIT.C(1068) : error C4296: '<' : expression is always false

и аналогичные в файле D3RSTATE.C. Ошибка означает, что как и в минипорте делается попытка проверить допущение, что беззнаковая переменная может быть меньше нуля. Я просто отключу эту проверку. Для этого в начало файла D3GLOBAL.H вставлю строку:
#pragma warning( disable : 4296 )

Опять make. Теперь выдается:
axtrik.obj : fatal error LNK1164: section 0x1 alignment (4096) greater than /ALIGN value

Ищем /ALIGN. Не находим. В консольном выводе видно строку
-align:0x40 /stub:c:\WINDDK\3790\lib\wnet\stub512.com

Скорее всего, непорядок. В msdn говорится, что выравнивание должно быть степенью двойки и по умолчанию задано как 4096. Изучаю файлы, в конце-концов в файле SOURCE нахожу:
DRIVER_ALIGNMENT=0x40

Увеличиваю до:
DRIVER_ALIGNMENT=0x1000

Перед финальной сборкой также вношу изменения в файл RES.RC, изменяя 53 строку:
#define VER_COMPANYNAME_STR		 "Build by dE fENDER. 05.02.2010"

Ошибок больше нет. Но как и в случае с минипортом, перед финальной сборкой надо удалить папку C:\3dfx\Src\Video\Displays\H5\objfre_wnet_x86 со всем содержимым. После выполнения make создается требуемый файл C:\3dfx\Src\Video\Displays\H5\objfre_wnet_x86\i386\dll\3dfxvs.dll
Выполняю проверку. В драйвере SFFT заменяю файлы 3dfxvs.dll и 3dfxvsm.sys. Выбираю видеокарту в менеджере устройств и путем выполнения "Update Driver" устанавливаю обновленный драйвер:
Windows Update? "No, not this time." <Next>
What do you want? "Install from a list or specific location" <Next>
Please choose your search "Don't search. I will choose the driver to install" <Next>
Select the device driver <Have Disk>
Copy from: <C:\SFFT>
Show compatible hardware "3dfx Voodoo Series" <Next>
Могут спросить заменять ли драйверы - Да.
<Finish>
перезагрузка

Примечание: при первой попытке я не выбирал "Have disk", а просто указал поиск в папке с SFFT драйвером. При этом у меня стоял Amigamerlin. После перезагрузки можно было наблюдать, что драйвер обновился до SFFT, за исключением минипорта, который остался Amigamerlin'овским.

После перезагрузки захожу в менеджер устройств и удостоверяюсь, что используются именно мои сборки:
Прикрепленный файл  scr1.jpg (182,33К)
Количество загрузок:: 21

3dfx Tool на моей системе не устанавливаются, поэтому настройка затруднена. Никаких отличий от SFFT или Amigamerlin замечено не было. Ошибки на любых версиях драйверов одинаковы:
1. Невозможна одновременная работа с GeForce GTX 280. Причем если раньше на ХР одна из карт просто переходила в режим VGA, то теперь происходит зависание при загрузке или отсутствие сигнала на обоих видеокартах.
2. Очень медленная работа с полупрозрачными объектами. Наиболее заметно это проявляется в следующем: открываю Мой Компьютер, распахиваю его на весь экран и пытаюсь выделить все в окне. Перерисовка полупрозрачного прямоугольника при максимальном размере занимает несколько секунд.

Хотел приложить исходный и скомпилированный код, но загрузка архивов запрещена. М.б. потом доработаю весь код, чтобы избавиться от зависимости к SFFT и выложу все на SourceForge. А пока сниму Voodoo и заброшу ее опять на год в ящик.
0

#14 Пользователь офлайн   ps2 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 49
  • Регистрация: 26 Октябрь 06

Отправлено 06 Февраль 2010 - 11:36

Ого! Спасибо за подробный отчёт! :)

Просмотр сообщенияdE fENDER (6.2.2010, 4:37) писал:

Очень медленная работа с полупрозрачными объектами
Наблюдал подобный эффект при работе Voodoo3 с драйверами Amigamerlin.

Просмотр сообщенияdE fENDER (6.2.2010, 4:37) писал:

Хотел приложить исходный и скомпилированный код, но загрузка архивов запрещена.
Пожалуйста, выложите на какой-нибудь файлообменник. Или запостите тут патч к исходникам. Не хотелось бы по невнимательности допустить те ошибки, с которыми вы уже справились.

Просмотр сообщенияdE fENDER (6.2.2010, 4:37) писал:

М.б. потом доработаю весь код, чтобы избавиться от зависимости к SFFT и выложу все на SourceForge.
Вот это было бы супер!
0

#15 Пользователь офлайн   White 

  • Белый человер
  • PipPipPipPipPipPipPip
  • Группа: Главный Администратор
  • Сообщений: 12 292
  • Регистрация: 16 Июль 05

Отправлено 06 Февраль 2010 - 13:03

dE fENDER,отличный отчёт! Благодарю за проделанную работу. Если можно, вышли мне в почту (white ____@ _____modlabs.net) всё, что нужно выложить и я загружу это в файловый архив modlabs.
0

#16 Пользователь офлайн   dE fENDER 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 271
  • Регистрация: 18 Декабрь 08

Отправлено 06 Февраль 2010 - 13:11

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

Доработанный исходный код (1.69 МБ)
Скомпилированные файлы (211 КБ)
0

#17 Пользователь офлайн   White 

  • Белый человер
  • PipPipPipPipPipPipPip
  • Группа: Главный Администратор
  • Сообщений: 12 292
  • Регистрация: 16 Июль 05

Отправлено 06 Февраль 2010 - 13:22

Спасибо! Начинаю собирать файловый архив 3dfx. Прошу всех неравнодушных помочь.\
0

#18 Пользователь офлайн   White 

  • Белый человер
  • PipPipPipPipPipPipPip
  • Группа: Главный Администратор
  • Сообщений: 12 292
  • Регистрация: 16 Июль 05

Отправлено 04 Февраль 2022 - 15:07

Друзья, есть ли в нашем форуме кто-то, кто в состоянии помочь с исправлением ошибок в драйвере 3dfx?
0

#19 Пользователь офлайн   zx-c64 

  • Главный по разработке
  • PipPipPipPipPipPipPip
  • Группа: R&D команда
  • Сообщений: 827
  • Регистрация: 26 Апрель 14

Отправлено 04 Февраль 2022 - 16:23

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

#20 Пользователь офлайн   White 

  • Белый человер
  • PipPipPipPipPipPipPip
  • Группа: Главный Администратор
  • Сообщений: 12 292
  • Регистрация: 16 Июль 05

Отправлено 04 Февраль 2022 - 18:16

Если мне кто-нибудь объяснил бы, как это делается, я бы в высоком качестве смог транслировать экран.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 members, 1 guests, 0 anonymous users