Разница между VGA и SVGA-программированием в C и Assembly

Я начинаю изучать низкоуровневое графическое программирование, используя c со встроенной сборкой. Я нашел хорошие ресурсы о том, как делать программирование VGA, но мне нужно узнать о SVGA. Я не могу найти так много ресурсов о SVGA, и я до сих пор не понимаю, в чем разница между ними обоими.

Мои вопросы:

Может кто-нибудь помочь мне узнать разницу между VGA и SVGA? Помогут ли мне ресурсы по программированию VGA начать программирование графики с SVGA? Есть ли хорошие ресурсы для изучения программирования SVGA с помощью ассемблера, которыми вы, ребята, можете поделиться?

большое спасибо

2 ответа

Решение

VGA = массив видео графики. SVGA = Super Video Graphics Array. VGA = 640 x 480 пикселей (изначально в 4 цветах). SVGA = 800 х 600 пикселей.

Поскольку вы не указываете какую-либо целевую архитектуру, я предполагаю, что архитектура является общей.

Если вы собираетесь выполнять низкоуровневое программирование на C, просто выделите большой буфер (ширина * высота * bitsPerPixel / 8) байтов, где width будет 640, высота будет 480 для VGA. Последний, bitsPerPixel будет на ваш выбор. Это основы того, как "кадровый буфер" обычно располагается в памяти. Вы можете читать / записывать RGB или индексированные пиксели как угодно внутри этого буфера.

Работа с ним на ассемблере ничем не отличается от того, как он обрабатывается на C или любом другом языке.

С другой стороны, если вы хотите реализовать видеоинтерфейс в реальном времени на микроконтроллере, я изменю свой ответ.

VGA была специфической видеокартой (разработанной IBM). Из-за производителей клонов он стал стандартом де-факто, и большинство видеокарт все еще способны поддерживать аппаратный интерфейс древней карты VGA (для целей обратной совместимости).

SVGA - это общий термин, используемый для описания "лучше, чем VGA". Нет стандартного (де-факто или иного) для этих карт; и 20 разных "SVGA" карт будут иметь 20 совершенно разных аппаратных интерфейсов, разрешений и функций; без какой-либо совместимости между ними (кроме устаревшей VGA для обратной совместимости).

Когда кто-то говорит о "программировании SVGA", он может иметь в виду одну из двух совершенно разных вещей - либо написание кода для одной конкретной карты SVGA (которая не будет / не может работать для любых других карт SVGA); или (более вероятно) написание кода, который опирается на расширения VBE.

Обратите внимание, что расширения VBE представляют собой программный интерфейс /API, который можно использовать для определения того, какие режимы видео поддерживает карта, для настройки режимов видео и для настройки буфера кадров. Обычно он встроен в ПЗУ видеокарты и существует для того, чтобы программное обеспечение могло использовать общий API вместо поддержки множества различных аппаратных интерфейсов.

Другие вопросы по тегам