div.main {margin-left: 20pt; margin-right: 20pt}Программное включение функций Quadro на GeForce.
Совсем недавно, в 1997 году, никто и не
подозревал, что практически неизвестная тогда корпорация NVIDIA
пойдёт так далеко. Чип Riva128, с которым она вошла на рынок игровых
3D акселераторов, похоже, не воспринимался тогда её конкурентами
всерьёз. И зря…. Сейчас NVIDIA прочно обосновалась на рынке
графических технологий, пытаясь занять всё новые и новые ниши.
Практически «раздавив» всех конкурентов среди производителей игровых
ускорителей, NVIDIA постепенно охватывает рынок графических
акселераторов для мобильных компьютеров, производит чипы для игровых
приставок и даже поставляет их для платформы Macintosh. Естественно,
что не обошелся без внимания и рынок профессиональных OpenGL
ускорителей, ориентированных в первую очередь на САПР. Для этого
сегмента рынка позиционируются чипы Quadro, Quadro2 MXR и Quadro2
Pro. Не так давно были анонсированы и два новых профессиональных
решения от NVIDIA - Quadro DDC и Quadro2 EX. Видимо, корпорация не
отступает от своих принципов и пытается занять все ценовые категории
данного сегмента рынка. Чип Quadro DDC базируется на ядре GeForce3 и
призван занять наивысшую ценовую ступень. Последний же основан на
ядре GeForce2 MX и, скорее всего, станет самым дешёвым
профессиональным чипом для малоимущих клиентов.
Однако, выход на рынок Quadro, первого
из профессиональных графических укорителей от NVIDIA, породил массу
слухов и догадок. Слишком уж коротким был период времени между
анонсом GeForce256 и Quadro. За такое время практически нереально
сделать серьезный редизайн чипа, поэтому многие задались вопросом: а
не подсовывают ли нам под маркой Quadro слегка подретушированный
GeForce256 по более чем двукратной цене? Тесты Quadro в
профессиональных приложениях вроде бы опровергают это: чип
действительно опережает GeForce256, порой даже многократно. Однако,
исследования, проведённые tnaw_xtennis,
подтвердили все опасения покупателей: после простейшей операции с
удалением пары резисторов на плате (она соответствует элементарному
изменению идентификатора устройства) любой GeForce превращается в
Quadro и догоняет его по производительности в профессиональных
приложениях. Таким образом, становится ясно, что на профессиональных
платах от NVIDIA установлены такие же точно чипы GeForce256,
GeForce2 MX и GeForce2 GTS, как и на их более дешевых собратьях,
предназначенных для игрового сегмента рынка. Единственными отличиями
Quadro являются повышенные тактовые частоты чипа и видеопамяти,
объём набортной видеопамяти и идентификатор устройства. Именно по
нему OpenGL драйвер и распознаёт Quadro и просто не использует
некоторые аппаратные возможности чипа на игровых картах.
Давайте посмотрим, какие именно
аппаратные возможности своих чипов NVIDIA считает ненужными для
игровых ускорителей и блокирует их на картах класса
GeForce:
Аппаратное ускорение линий по
умолчанию отключено на GeForce2 MX и GeForce2 GTS. Отключение этой
аппаратной возможности приводит к значительному падению
производительности при отображении каркасных моделей объектов (а
именно этот режим и используется в большинстве профессиональных
САПР-приложений). Справедливости ради стоит отметить, что аппаратное
ускорение линий на GeForce2 MX и GeForce2 GTS можно включить и через
реестр с помощью ключа OGL_NV15Alines, который может принимать
следующие значения:
0 Аппаратное ускорение линий
включается только на Quadro2 MXR и Quadro2 Pro (значение по
умолчанию)
1 Аппаратное ускорение линий
всегда выключено
2 Аппаратное ускорение линий
всегда включено
Если Вы не хотите редактировать реестр
напрямую, то можете использовать утилиту RivaTuner для включения аппаратного ускорения
линий.
Аппаратное сглаживание
линий/точек поддерживают карты Quadro и Quadro2 Pro. Некоторые
приложения, например Pro/DESIGNER, позволяют включить сглаживание
линий при отображении каркасных моделей. В этом случае карты на
базе Quadro и Quadro2 Pro демонстрируют многократную разницу в
производительности по сравнению с GeForce256 и GeForce2
GTS.
Двустороннее освещение также
используется в некоторых профессиональных графических пакетах. По
умолчанию OpenGL драйвер использует одностороннее освещение и
рассчитывает освещённость только лицевой грани полигонов. При
использовании двустороннего освещения освещённость нелицевой грани
полигонов рассчитывается путём реверсирования нормали.
Общий внеэкранный буфер и буфер
глубин используется многими профессиональными OpenGL
ускорителями. Он помогает расходовать видеопамять более эффективно
в приложениях, которые одновременно работают с большим количеством
окон. Все карты линейки Quadro также обладают возможностью
использования общего внеэкранного буфера и буфера
глубин.
Пользовательские отсекающие
плоскости позволяют «клиппировать» геометрию и используются
некоторыми САПР приложениями как сечения для того, чтобы показать
внутреннюю структуру объекта.
Поддержка дополнительных
пиксельных форматов позволяет картам линейки Quadro
использовать оверлеи и стереорежимы.
Помимо всего вышесказанного,
необходимо отметить, что, скорее всего, NVIDIA OpenGL ICD
использует разный код, и, соответственно, разные стратегии
оптимизации для карт на базе Quadro и GeForce. ICD содержит
множество недокументированных ключей реестра (OGL_App_SoftImage,
OGL_App_SupportBits, OGL_ApplicationKey и т.д.), предназначенных
для оптимизации драйвера под различные профессиональные
приложения: SoftImage 3D, 3D Studio Max, Maya, Lightwave и т.д.
Все эти ключи сгруппированы в пресеты, доступные из панели
настроек драйвера.
Бесспорно, перспектива переделки
GeForce в Quadro очень заманчива. К сожалению, предложенная
tnaw_xtennis процедура сопряжена с потерей гарантии на
видеоадаптер, что делает её неприменимой для большого количества
пользователей. Поэтому я и заинтересовался возможностью
программного включения функций Quadro на GeForce. Эту идею я
вынашивал достаточно давно, но перспектива полного изучения кода
OpenGL драйвера меня не очень прельщала, поэтому я отложил её до
лучших времён.
Вспомнить о программном включении
функций Quadro помог случай: готовя к выпуску давно ожидаемую вами
статью «Detonator: взгляд изнутри», я просматривал код OpenGL
драйвера и изучал алгоритмы обработки некоторых
недокументированных ключей реестра. Моё внимание привлёк код,
связанный с обработкой ключа OGL_ForceGeForce, который
предназначен для отключения профессиональных возможностей Quadro и
превращения данной карты в обыкновенный ускоритель игрового
класса. Меня заинтересовало то, каким образом Quadro превращается
в GeForce с помощью данного ключа. Оказалось, что вся модификация
сводится к тривиальной маскировке некоторых бит во внутренней
переменной – предположительно, регистре свойств OpenGL драйвера. В
том, что это действительно регистр со свойствами, я убедился,
увидев код обработки ключа OGL_NV15Alines, – включение аппаратного
ускорения линий также сводилось к сбросу одного из битов данного
регистра. Позже выяснилось, что биты, ответственные за включение
аппаратного сглаживания линий/точек, также находятся в этом
регистре. Я проверил свои догадки несложной процедурой – после
небольшой обработки ключ OGL_ForceGeForce уже не маскировал биты
регистра свойств, а загружал в него непосредственное значение из
реестра. В ходе экспериментов с различными значениями данного
ключа мне удалось заставить OpenGL драйвер распознать мою GeForce2
GTS как Quadro2 Pro и значительно увеличить производительность в
тесте SPECViewPerf 6.1.2. Я не буду утомлять вас остальными
техническими деталями, касающимися поиска и расшифровки регистров
свойств разных Quadro плат, а также решения некоторых других
побочных проблем. Скажу только, что в результате проведённых
исследований мне удалось жёстко прошить значение регистра свойств
Quadro2 Pro, что дало возможность использования всех возможностей
этой карты на GeForce2 GTS. Я уже предвижу нетерпение читателей,
поэтому перехожу от теории к практике – давайте поговорим о том,
как заставить драйвер использовать возможности Quadro на любой
карте класса GeForce.
Для проверки своего открытия на
других картах класса GeForce я разработал специальную тестовую
программу SoftQuadro.
Эта тестовая программа включает в
себя шесть патчей и может форсировать свойства Quadro, Quadro2 MXR
или Quadro2 Pro в драйверах под Windows9x либо Windows2000.
Напомню, что каждый из этих патчей заставляет драйвер игнорировать
формирование внутреннего регистра свойств и использовать
форсированное значение этого регистра вне зависимости от типа
видеоадаптера. В оригинальных Detonator’ах это значение
формируется ядром драйвера дисплея по идентификатору устройства и
используется панелью настроек и OpenGL драйвером для блокирования
некоторых аппаратных возможностей на картах класса
GeForce.
Хотя программа и использует при
форсировании свойств Quadro универсальный сценарий, я не могу
гарантировать, что данный метод будет нормально работать на всех
версиях Detonator’ов. Лучше не пытаться повторить мои эксперименты
с SoftQuadro, если BSOD вгоняет Вас в ступор или, тем более, если
Вы не знаете, что это такое. Также не советую пользоваться этой
утилитой тем, кто не знает, что такое Safe mode. Если Вы уверены,
что сможете переустановить драйвер в случае неудачной загрузки
операционной системы, то лучше просто прочитайте внимательно
следующие инструкции перед использованием SoftQuadro:
Распакуйте дистрибутив драйверов в
отдельную папку. Поскольку SoftQuadro изменяет ядро драйвера
дисплея (nvcore.vxd для Windows9x или nv4_mini.sys для
Windows2000), загружаемое в момент запуска операционной системы,
Вы не сможете модифицировать уже установленные драйвера. Поэтому
форсирование необходимо произвести до инсталляции.
Выберите требуемый сценарий (т.е.
операционную систему и адаптер, свойства которого будут
форсированы) и нажмите кнопку «Continue». SoftQuadro предложит
Вам указать местоположение требуемого файла (nvcore.vxd либо
nv4_mini.sys, в зависимости от выбранной операционной системы) и
попытается включить функции Quadro. Результаты работы программы
будут отображены в логе.
Установите теперь тестовый
Quadro-драйвер и перезагрузите систему.
Если Вы пользуетесь Windows 2000, то
можете после установки драйвера скопировать файл NvWSApps.cfg из
дистрибутива драйверов в системную директорию Windows. Этот файл
содержит пресеты для многих профессиональных приложений (3D
Studio Max, AutoCAD, Lightwave, Maya и т.д.). Для того, чтобы
активизировать их в панели настроек драйвера, добавьте в реестр
следующий ключ:
[HKEY_LOCAL_MACHINESOFTWARENVIDIA
Corporation
GlobalNVTweakOemConfigurations]
"ControlsOverride"=dword:00000001
Эти же действия выполняются файлом
nv4_disp.inf при установке драйвера на настоящие Quadro платы. Вы
также можете внести элементарные изменения в этот файл до
установки драйвера, чтобы не выполнять эти действия вручную. Для
этого Вам придется найти в этом файле секцию, используемую Вашим
видеоадаптером, и заменить её с nv4 на nv4_WSApps. Пример такой
замены для GeForce2 GTS показан ниже:
Содержимое nv4_disp.inf до
замены:
%NVidia.Nv15%& = nv4,
PCIVEN_10DE&DEV_0150 %NVidia.Nv15DDR% = nv4,
PCIVEN_10DE&DEV_0151 %NVidia.Nv15BR% = nv4,
PCIVEN_10DE&DEV_0152 %NVidia.Nv15GL% = nv4_WSApps,
PCIVEN_10DE&DEV_0153 %NVidia.Nv20% = nv4,
PCIVEN_10DE&DEV_0200
Содержимое nv4_disp.inf после
замены:
%NVidia.Nv15% = nv4_WSApps,
PCIVEN_10DE&DEV_0150 %NVidia.Nv15DDR% = nv4,
PCIVEN_10DE&DEV_0151 %NVidia.Nv15BR% = nv4,
PCIVEN_10DE&DEV_0152 %NVidia.Nv15GL% = nv4_WSApps,
PCIVEN_10DE&DEV_0153 %NVidia.Nv20% = nv4,
PCIVEN_10DE&DEV_0200
Итак, после того, как тестовый
драйвер установлен, нам остаётся только проверить его. Первым
индикатором успешности переделки GeForce в Quadro служит загрузка
операционной системы. Если во время неё “окошки” не
поприветствовали Вас радостной синей улыбкой, то всё наверняка
прошло успешно. Проверьте свойства OpenGL драйвера с помощью любой
тестовой программы, например, GLInfo. Если её не оказалось под рукой, то
можете использовать игру, которая наверняка есть на винчестере у
каждого уважающего себя геймера – речь, конечно же, идёт о Quake
III. Она также позволяет посмотреть информацию об OpenGL драйвере
(пункт Driver info в меню System).
Если в графе renderer Вы не увидели
заветное слово Quadro, убедитесь, что в реестре отсутствует ключ
OGL_ForceGeForce (ForceGeForce для Window9x) либо он равен нулю.
Сделать это можно с помощью regedit либо встроенного в RivaTuner редактора реестра. Если данный ключ
содержит ненулевое значение, удалите его и перезапустите тестовое
приложение.
После того, как мы разобрались с
форсированием свойств Quadro, можно перейти к тому, из-за чего,
собственно, эта процедура и затеивалась, – к тестированию
производительности нашей псевдо-Quadro карты в профессиональных
OpenGL приложениях. Поведение Quadro в играх нас интересует в
меньшей степени, однако и ему мы уделим немного внимания чуть
позже.
Поскольку многие профессиональные
графические приложения изначально рассчитаны на платформу NT,
NVIDIA OpenGL ICD драйвер под Windows 2000 имеет больше
возможностей, чем под Windows 9x. Именно поэтому все тесты
поводились на операционной системе Windows 2000
Professional.
В тестировании сравнивается
производительность драйвера Detonator 12.40 - стандартного и
модифицированного с помощью утилиты SoftQuadro. Так как на
GeForce2 GTS по умолчанию выключено аппаратное ускорение линий, то
для сравнения также приведены результаты тестирования
оригинального драйвера с включенным через реестр ускорением линий
(включение производилось с помощью RivaTuner). Это было сделано для того, чтобы
убедиться в том, что разница в производительности между
стандартным и модифицированным драйвером обусловлена не только
отсутствием этой аппаратной возможности у GeForce2 GTS. Для
тестирования использовался OpenGL бенчмарк SPECViewPerf 6.1.2, ставший де-факто в сравнении
производительности профессиональных OpenGL ускорителей. Он состоит
из шести отдельных модулей, каждый из которых представляет собой
набор тестов, созданный независимой группой разработчиков
программного обеспечения. Каждый модуль использует систему
визуализации, максимально приближенную к тому или иному
профессиональному графическому приложению.
Тестирование производилось на
следующей системе:
Процессор |
Celeron
566@875 |
Оперативная
память |
256Мб памяти PC133
(CAS3) |
Материнская
плата |
ASUS P3V4X (VIA
Apollo Pro 133A) |
Видеокарта |
ASUS V7700 Pure 32Mb
AGP (GeForce2 GTS) |
Перед запуском тестов на рабочем
столе устанавливалось разрешение 1024x768x16, а в OpenGL драйвере
отключалась синхронизация с вертикальной развёрткой
монитора.
Общие результаты SPECViewPerf 6.1.2
вполне соответствуют пресс-релизам и рекламным заявлениям NVIDIA –
производительность Quadro2 Pro в среднем в 2-3 раза выше, чем у
GeForce2 GTS. Разница лишь в том, что в роли профессионального
ускорителя Quadro2 Pro выступает почти втрое более дешевый
GeForce2 GTS с программно разблокированными профессиональными
возможностями. Производительность GeForce2 GTS с включенным
аппаратным ускорением линий, как и следовало ожидать, выше, чем у
стандартного драйвера, но ниже, чем у модифицированного с помощью
SoftQuadro. Исключение составляет только модуль DRV-07, о котором
мы поговорим немного позже.
Давайте рассмотрим каждый тестовый
модуль SPECViewPerf в отдельности и попробуем выяснить, чем именно
обусловлена разница в производительности в каждом из
тестов.
Модуль AWadvs-04 предназначен для
оценки производительности в продуктах от Alias/Wavefront. Он
включает в себя одиннадцать тестов, использующих различные виды
проецирования, методы затенения и текстурирования.
Мы не будем детально рассматривать
все тесты, поскольку их суммарное количество во всех модулях
превышает 50. Остановимся только на наиболее интересных и
показательных. Обратите внимание на результаты третьего и
четвёртого тестов AWadvs-04: они используют каркасный рендеринг, и
именно этим и объясняется почти десятикратная разница в
производительности между стандартным и модифицированным драйвером.
Однако, даже после включения аппаратного ускорения линий, GeForce2
GTS с форсированными свойствами Quadro2 Pro демонстрирует примерно
десятипроцентное превосходство в скорости, причём в тестах,
которые не используют специфичных для Quadro аппаратных
возможностей. Этот факт наводит на мысли о том, что для Quadro
плат ICD драйвер использует альтернативную стратегию
оптимизации.
Модуль DRV-07 позволяет оценить
производительность OpenGL драйвера в программном пакете
DesignReview от Intergraph Corporation, который предназначен для
дизайна и трёхмерного моделирования сложных заводских конструкций.
Все объекты в DesignReview хранятся в виде высокоуровневых
примитивов, которые динамически тесселируются во время рендеринга.
Аналогичный формат представления данных используется и в DRV-07.
Данный модуль состоит из пяти тестов, каждый из которых
соответствует одному из режимов визуализации в
DesignReview.
Все тесты данной группы используют
при рендеринге линии, поэтому включение их аппаратного ускорения
заметно повышает производительность. Особенно сильно это видно в
двух последних тестах, отображающих все объекты в виде каркасных
моделей. Однако результаты DRV-07 несколько удивляют: после
форсирования свойств Quadro2 Pro производительность незначительно
падает. GeForce2 GTS с включенным аппаратным ускорением линий -
абсолютный лидер во всех тестах этой группы, везде опережающий
Quadro2 Pro на несколько процентов. Найти разумное объяснение
отставанию Quadro2 Pro в этой группе тестов я не могу. Возможно,
это объясняется различными стратегиями оптимизации драйвера для
карт линеек GeForce и Quadro.
Модуль DX-06 имитирует систему
визуализации, используемую в программном пакете IBM Visualization
Data Explorer, предназначенном для анализа и отображения научной
информации. В DX-06 входят десять тестов, в каждом из которых
моделируются и визуализируются траектории частиц в векторном
поле.
Группа тестов DX-06 использует при
рендеринге как непосредственные вызовы команд OpenGL (так
называемый непосредственный режим или immediate mode), так и
списки команд (display lists в терминологии этого API). Списки
команд используются в тестах №3, №5 и №10, остальные тесты
работают в непосредственном режиме рендеринга. Результаты
показывают, что Quadro2 Pro работает в непосредственном режиме в
среднем на 30% быстрее, чем GeForce2 GTS. Объяснить это можно
только различными стратегиями оптимизации драйвера для игровых и
профессиональных ускорителей. В искусственное замедление драйвера
на игровых картах верить не хочется, но и такую возможность я тоже
не исключаю.
Немного удивляют результаты теста
№8, использующего двустороннее освещение. Производительность
GeForce2 GTS абсолютно не отличается от Quadro2 Pro, хотя
двустороннее освещение и является одной из отличительных
особенностей последнего. После недолгих экспериментов со сценарием
данного теста мне удалось выяснить, что при использовании списков
команд (по умолчанию тест работает в непосредственном режиме)
разница между GeForce2 GTS и Quadro2 Pro становится значительно
заметнее. В силу необъяснимых причин Quadro2 Pro не даёт никакого
выигрыша при использовании двустороннего освещения в immediate
mode.
Light-04 позволяет оценить
производительность в пакете Lightscape от Discreet Logic,
предназначенном для высококачественной визуализации и расчёта
реалистичного освещения с помощью технологии radiosity.
Результаты этого теста не
представляют особого интереса, поскольку они схожи с AWadvs-04 и
DX-06. Первое место занимает модифицированный драйвер, за ним идёт
GeForce2 GTS с включенным аппаратным ускорением линий. На
последнем месте GeForce2 GTS со стандартным драйвером. В тестах №2
и №4 он идёт вровень с соперником, в остальных – отстаёт от него
из-за использования каркасного рендеринга.
MedMCAD-01 - это единственный
модуль, предоставленный не сторонними разработчиками программного
обеспечения, а самими авторами SPECViewPerf. Группа тестов
MedMCAD-01 предназначена для того, чтобы оценить
производительность в графических пакетах, работающих с моделями
средней полигональной сложности в непосредственном режиме
(например Pro/Engineer, Catia, Solidworks и т.д). Все двенадцать
тестов данной группы используют при рендеринге непосредственный
режим и массивы вершин (vertex arrays).
Более чем семикратная разница в
производительности в тестах №6 и №10 объясняется тем, что в них
используются пользовательские отсекающие плоскости. Именно эта
заблокированная на GeForce2 GTS аппаратная возможность и позволяет
Quadro2 Pro получить такой гигантский выигрыш в
производительности. Однако, в остальных тестах результат
аналогичен DRV-07 - Quadro2 Pro немного проигрывает GeForce2 GTS с
включенным аппаратным ускорением линий. Немного
поэкспериментировав со скриптом MedMCAD-01, я смог выяснить, что
если в данных тестах не использовать массивы вершин, то Quadro2
Pro значительно опережает соперников. Аналогичная картина
наблюдается и в DRV-07 – отказ от использования vertex arrays
приводит к появлению значительного разрыва между Quadro2 Pro и
GeForce2 GTS. По-видимому, Quadro2 Pro работает с массивами вершин
немного медленнее, чем GeForce2 GTS, из-за альтернативной
оптимизации драйвера.
Модуль ProCDRS-03 предназначен для
моделирования и оценки производительности системы визуализации,
используемой в профессиональном пакете Pro/DESIGNER от Parametric
Technology Corporation. ProCDRS-03 включает в себя десять тестов,
каждый из которых соответствует одному из режимов визуализации
этого графического пакета. Первые два теста используют каркасный
рендеринг со сглаживанием линий, поскольку именно этот режим
включен в Pro/DESIGNER по умолчанию. Остальные тесты используют
различные режимы затенения и текстурирования, а также двустороннее
освещение.
Почти трёхкратная разница в
производительности между Quadro2 Pro и GeForce2 GTS в ProCDRS-03
обусловлена использованием аппаратного сглаживания линий в двух
первых тестах и применением двустороннего освещения в остальных
восьми. Напомню, что драйвер блокирует поддержку этих аппаратных
возможностей на GeForce2 GTS.
Как мы видим, Quadro может дать
реальный (а при некоторых условиях многократный) выигрыш в
производительности в профессиональных графических приложениях.
Однако, процент пользователей, использующих 3D акселератор в
рабочих целях, ничтожно мал. Для большей части людей, читающих эту
статью, 3D ускоритель – это, прежде всего, устройство, позволяющее
комфортно играть в компьютерные игры. Поэтому я не могу обойти
вниманием и игровые тесты, хотя и уделю им гораздо меньше времени,
чем профессиональным.
Давайте посмотрим на
производительность псевдо-Quadro2 Pro в играх. В качестве тестов
использовались Quake 3 v1.16n и MDK 2 v1.0. Оба приложения
тестировались на настройках, соответствующих максимальному
качеству изображения.
Результаты, полученные в Quake 3 и
MDK 2, окончательно убеждают в том, что для акселераторов
различного класса Detonator использует разный код,
оптимизированный под разные задачи: Quadro2 Pro отстаёт от
GeForce2 GTS примерно на 10% во всех тестах во всех разрешениях.
Аналогичный результат дают и другие игровые приложения. К радости
любителей игр, производительность можно вернуть на своё законное
место с помощью ключа OGL_ForceGeForce, получив, таким образом,
возможность как играть, так и работать на картах класса
Quadro.
Итак, подведём итог. Модификация
GeForce в Quadro вряд ли нужна хардкорным геймерам. А вот тем, кто
использует компьютер не только для игр, стоит подумать о
превращении своего адаптера в Quadro. Единственной причиной, по
которой я считаю целесообразной покупку настоящего Quadro (или, по
крайней мере, его “изготовление” с помощью метода tnaw_xtennis), является
использование программного обеспечения от ELSA – эксклюзивного
изготовителя плат на базе этих чипов. Программисты ELSA
действительно хорошо потрудились, создав и оптимизировав свой
собственный драйвер ELSA MAXtreme для 3D Studio MAX, AutoCAD
драйвер ELSA POWERdraft и другое специализированное программное
обеспечение. Так что, если учитывать то, что помимо карты от ELSA
Вы приобретаете и высококлассное программное обеспечение, то её
цена вполне оправдана. Не просите меня выпустить патчи для
драйверов ELSA – я не буду этого делать, т.к. уважаю труд других
программистов, поскольку сам таковым являюсь.
Николайчук Алексей a.k.a.
Unwinder (AlexUnwinder@mail.ru)
|