Разница между 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 вместо поддержки множества различных аппаратных интерфейсов.