Что же делать владельцам Live! предыдущих поколений?
Меня, пользователя Sound Blaster Live! CT4830 OEM, такое положение вещей совсем не устраивало. Если все карты основаны на одном и том же звуковом процессоре EMU10K1, то зачем покупать новую модель на том же самом чипе? Ведь ограничение возможностей карты чисто программное. В свое время я обнаружил, что данные, специфичные для каждой конкретной модели Live!, хранятся в небольшой 8-выводной микросхеме ППЗУ (EEPROM 93c46). Эта микросхема является электрически стираемым программируемым ПЗУ с последовательным доступом и организацией данных 64 бит х 16, т.е. общей емкостью 128 байт. На картах Live! эта микросхема расположена между чипом EMU10K1 и боковым торцом платы, как показано красным кружком на рисунке.
В этой микросхеме хранится вся необходимая для функционирования PCI-устройства информация, включая идентификаторы производителя, класс и подкласс устройства. Программное обеспечение Live!Ware различает модели карт Live! по информации, хранящейся именно в этой микросхеме.
Для того чтобы "обмануть" Live!Ware и обеспечить поддержку 5.1-систем на старых моделях Live!, нужно перепрограммировать эту микросхему. К сожалению, потребуется отпаять ее с платы (по крайней мере, способ чисто программного апгрейда пока никому не известен).
Ниже приведено содержимое EEPROM 93c46 для карты Sound Blaster Live! CT4830 OEM.
Попробуем его расшифровать. Мне очень помогла утилита WPCREDIT, позволяющая просматривать параметры PCI-устройств, установленных в системе. Как выяснилось, плата Live! представляет собой два устройства: аудиоконтроллер и устройство ввода (джойстик).
- 00h: (слово 16 бит). Назначение неизвестно. Должно быть равно 0003h.
- 02h: (байт 8 бит). Подкласс (Sub class) устройства. Равен 01h (аудиоконтроллер).
- 03h: (байт 8 бит). Базовый класс (Base class) устройства. Равен 04h (мультимедиа-контроллер).
- 04h: (слово 16 бит). Идентификатор производителя подсистемы (Subsystem vendor ID). Равен 1102h (Creative).
- 06h: (слово 16 бит). Идентификатор подсистемы (Subsystem ID).
Для CT4830 OEM равен 8027h (аудиоконтроллер). - 08h: (байт 8 бит). Параметр устройства PCI "Minimum grant". Должен быть равен 02h.
- 09h: (байт 8 бит). Параметр устройства PCI "Maximum latency". Должен быть равен 14h.
- 0ah: (слово 16 бит). Назначение неизвестно. Должно быть равно 0000h.
- 0ch: (байт 8 бит). Подкласс (Sub class) устройства. Равен 80h (Other controller).
- 0dh: (байт 8 бит). Базовый класс (Base class) устройства. Равен 09h (устройство ввода).
- 0eh: (слово 16 бит). Идентификатор производителя подсистемы (Subsystem vendor ID). Равен 1102h (Creative).
- 10h: (слово 16 бит). Идентификатор подсистемы (Subsystem ID). Для всех Live! равен 0020h (устройство ввода).
- 12h: (18 байт). Назначение неизвестно. Все равны 00h.
- 24h: (76 байт). Назначение неизвестно. Все равны ffh.
В ходе экспериментов было установлено, что модели Live! различаются между собой только кодом идентификатора подсистемы (Subsystem ID), относящимся к основному аудиоконтроллеру. Ниже приведено соответствие моделей и кодов Subsystem ID, позаимствованное из INF-файлов различных версий драйверов для Live!.
Версии "Value":
CT4670 - SBLive! Value(PCI\VEN_1102&DEV_0002&SUBSYS_00201102)
CT4780 - SBLive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80221102)
CT4830 - SBLive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80261102)
CT4831 - SBLive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80311102)
CT4832 - SBLive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80271102)
CT4850 - SBLive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80511102)
CT4870 - SBLive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80281102)
CT4871 - SBLive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80321102)
SB0060 - SBlive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80611102)
SB0101 - SBlive! Value (PCI\VEN_1102&DEV_0002&SUBSYS_80691102)
Полные версии:
CT4620 - SBLive! (PCI\VEN_1102&DEV_0002&SUBSYS_00211102)
CT4760 - SBLive! (PCI\VEN_1102&DEV_0002&SUBSYS_80401102)
SB0103 - SBLive! series (PCI\VEN_1102&DEV_0002&SUBSYS_806A1102)
SB0105 - SBlive! series (PCI\VEN_1102&DEV_0002&SUBSYS_806B1102)
Карты Live!, интегрированные на материнские платы:
SBLive motherboard (PCI\VEN_1102&DEV_0002&SUBSYS_002F1102)
SBLive motherboard (PCI\VEN_1102&DEV_0002&SUBSYS_80251102)
SBLive motherboard (PCI\VEN_1102&DEV_0002&SUBSYS_80631102)
Экзотическая OEM-версия:
CT4790 - SB PCI512 (PCI\VEN_1102&DEV_0002&SUBSYS_80231102)
Знаменитая карта E-MU Audio Production Studio:
EMU APS (PCI\VEN_1102&DEV_0002&SUBSYS_40011102)
Для того чтобы узнать идентификатор кода подсистемы вашей карты Live!, не обязательно отпаивать и считывать EEPROM. :) Достаточно воспользоваться утилитой WPCREDIT либо посмотреть значение ключей реестра \HKLM\System\CurrentControlSet\Enum\PCI для Windows 2000 или \HKLM\Enum\PCI для Windows 9x. Нас интересует ключ, начинающийся с VEN_1102&DEV_0002&SUBSYS_xxxxxxx. По номеру SUBSYS (который состоит из Subsystem ID и Subsystem Vendor ID, равный 1102h, Creative) и приведенной выше таблице можно точно определить имеющуюся модель Live!. Например, моя карточка CT4830 OEM имеет Subsystem ID 8027h, что соответствует модели CT4832, а не CT4830, как указано на плате.
Таким образом, чтобы обеспечить поддержку 5.1-систем на "старых" Live!, необходимо изменить Subsystem ID (слово 16 бит) по смещению 06h в прошивке EEPROM Live! на Subsystem ID модели, поддерживающей такую конфигурацию (например, SB0060, Subsystem ID равен 8061h).