Энтузиаст взломал VBIOS на древней видеокарте S3, чтобы сделать чёрный цвет по-настоящему чёрным
S3 Virge и фальшивый черный: честный разбор старого бага, который исправляли через VBIOS
В середине 90-х видеокарта S3 Virge DX 4MB была хитом. Но у нее была странность: черный цвет на экране был не черным, а темно-серым. И это не баг — производитель намеренно осветлял черный. Зачем? Чтобы соответствовать стандарту NTSC для телевещания. Но для пользователей ЭЛТ-мониторов это выглядело как грязь. Недавно энтузиаст разобрался в механизме и исправил прошивку. Расскажу, в чем суть и как это работает.
Что такое pedestal bit и почему он делал черный серым
В аналоговом телевидении NTSC (США, Япония) черный цвет передают не с нулевым уровнем сигнала, а с небольшим смещением — так называемый «пьедестал» (pedestal). Это нужно, чтобы синхроимпульсы не путались с черным. Разработчики S3 перенесли эту логику в видеокарту. Они добавили в VBIOS один бит, который при инициализации поднимал уровень черного на несколько значений яркости. Конкретно — в прошивке был записан байт со значением 0x3F (шестнадцатеричное). После сброса нужного бита он превращался в 0x1F. Но бит все равно оставался установленным, и черный становился серым.
«Намеренное искажение цвета ради совместимости с телестандартом — классический пример того, как железные ограничения влияют на пользовательский опыт. Жаль, что тогда инженеры не дали возможности отключить эту функцию через драйвер».
Как энтузиаст нашел и отключил этот бит
Задача казалась простой: найти в VBIOS код, который пишет значение в регистр 0x3C4. Но VBIOS — это зашитый ассемблерный код без комментариев. Энтузиаст использовал отладчик и отслеживал обращения к адресу 0x3C4. Он перебирал значения, пока черный не стал настоящим. Оказалось, бит номер 5 (из восьми) отвечает за подъем. После изменения единственного байта в образе прошивки с 0x20 на 0x00 черный стал черным. Но пришлось пересчитать контрольную сумму — иначе видеокарта отказалась бы принимать измененный VBIOS. Старая контрольная сумма была 0x77, новая — 0x97.
Пошаговый совет: как самостоятельно исправить VBIOS старой видеокарты
Шаг 1. Сделайте дамп VBIOS с помощью утилиты типа flashrom или NVflash (для S3 свои).
Шаг 2. Откройте образ в HEX-редакторе. Найдите все байты 0x20 в коде инициализации (обычно это первые несколько килобайт).
Шаг 3. Для S3 Virge ищите запись по адресу, связанному с регистром 0x3C4. Меняйте 0x20 на 0x00.
Шаг 4. Пересчитайте контрольную сумму (сумма всех байт образа по модулю 256 должна быть равна 0x00 — для некоторых карт).
Шаг 5. Прошейте измененный образ в микросхему (обычно использовался программатор или простая замена чипа).
Личное наблюдение автора
Я сам работал с ЭЛТ-мониторами и часто замечал, что темные сцены в играх выглядят «замыленными». Думал, это особенность трубок. Оказалось — видеокарта вставляла искусственный серый фон. После чтения этого разбора я проверил свою старую S3 Trio — та же история. Интересно, сколько багов мы принимали за норму просто потому, что не знали, какую кнопку нажать?
Таблица: что меняется в VBIOS
| Параметр | До исправления | После |
|---|---|---|
| Значение регистра 0x3C4 | 0x20 (установлен pedestal bit) | 0x00 (бит сброшен) |
| Уровень черного (RGB) | 16,16,16 (темно-серый) | 0,0,0 (черный) |
| Контрольная сумма VBIOS | 0x77 | 0x97 |
| Совместимость с NTSC | да (черный сдвинут) | нет (чистый черный) |
Резюме от автора
Исправление S3 Virge — не просто ностальгический хак. Это пример того, как аппаратные компромиссы прошлого мешают современному использованию ретро-железа. Если у вас завалялась старая видеокарта — проверьте, не портит ли она черный цвет. А главное — не бойтесь копаться в VBIOS. Иногда одна правка в шестнадцатеричном коде превращает мыльный серый в настоящую глубину.













