![]() |
![]() ![]() |
![]() |
Dark |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: ![]() ![]() ![]() |
Приветствую вас, тут я буду рассказывать об основах программирования графики 24 бит. Возможно, я также сподвигнусь написать игрушку, пока что - первоначально в планах наподобии King Bounty =) [в 24 битах... круто =) ]
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: ![]() ![]() ![]() |
Введение.
Видеорежимы direct color были введены начиная со стандарта VESA 1.2 Главное отличие этих режимов от режимов VESA 256 цветов - это то, что они не используют палитру. Это избавляет от манипуляций с регистрами видеокарточки, и при добавлении новых рисунков на экран можно не бояться порчи изображения в целом. Код точки 24 бита занимает 32 бита, кроме базовых цветов (RGB) в него входит пустой байт Разряды 24-31 16-23 9-15 0-8 ------------------------------------------------------------------------------------------- |резервный| Красный | Зеленый | Синий | | байт | цвет | цвет | цвет | ------------------------------------------------------------------------------------------- Стоит напомнить =), что в силу архитектуры Intel двойное слово хранится задом наперед - т.е. 1вым будет синий цвет, и т.д. Недостатки режима 24 бита: 1. трехбайтный код не обрабатывается командами процессора, поэтому приходиться разбивать на 2 действия - вывод байта и вывод слова. 2. Размер сегмента кратен двойке - поэтому в него не помещается целое количество трехбайтовых точек. У одной из них [первой или последней] будет искажение - т.е. надо проверять сколько до конца сегмента надеюсь =) понятно... -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: ![]() ![]() ![]() |
Все программы, которые я пишу, я буду писать либо в Turbo Assembler, либо в TP
Первым делом - установка режима. VESA режимы, котрые нам подходят [24/32 bit] Код режима Разрешение экрана размер строки(в байтах) 10Fh 320*200 960/1280 112h 640*480 1290/2560 115р 800*600 2400/3200 118h 1024*768 3072/4096 11Bh 1280*1024 3840/5120 Я все время буду работать с режимом 800*600. Ну начнем мы с информационных функций: 1. Запрос общих данных 4F00h Входные данные ES:DI адрес(указатель) массива на 256 байт, который будет заполняться информацией о видеокарте. Первые 20 байт заполняются следующими данными: СМЕЩЕНИЕ ПО МАССИВУ РАЗМЕР(байт) ДАННЫЕ 00h 4 'VESA' 04h 2 версия VESA 06h 4 адрес строки фирмы-изготовителя 0Ah 4 СпецСвойства 0Eh 4 Адрес начала списка информации о поддерживаемых режимах 12H 2 Объем памяти видеокарточки (в блоках по 64 Кб) - Версия VESA, указывается номер версии и ее редакция. Записана в виде 0102 для VESA 1.2 - Строка фирмы-изготовителя. Коды формата ASII, строка заканчивется 0 (стандарт ASIIZ) - Спецсвойста я описывать не буду, либо опишу потом - они пока что интереса не представляют. - Признаком конца списка режимов является код 0FFFFh Анализ Спецсвойст и списка видеорежимов не очень целесообразен. Остальные байты в резерве. простейшая програмка, выводящая всю информацию, получаемую этим прерыванием:
Обратите внимание - первая строка - в виде билеберды потому что функции BIOS и DOS работают ТОЛЬКО с ASCII строками, поэтому мне пришлось написать дополнительно функцию, преобразующую слово в BCD слово, а затем BCD слово в символ. Если кто то знает более легкий путь, пусть сообщит сюда, мне. Следующая фаза - получение информации о режиме. О ней в другом выпуске. Мне интересны любые вопросы и коментарии, которые вы можете предложить. |Пытался запихнуть в архив - не удалось, форум не хочет его грузить =( попытаюсь ночью -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
FreeMan |
![]()
Сообщение
#4
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
Неоптимально.... Посмотреть хотя бы на то, что везде через es работа. Это, вроде, + такт и + байт(не проверял). надо через ds. А так не присматривался. Посмотрю, тогда напишу больше.
-------------------- бб
|
Dark |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: ![]() ![]() ![]() |
Если бы пригляделся - увидел бы что ds используется одновременно с es
или ты про что то другое? -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
FreeMan |
![]()
Сообщение
#6
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так блин я ж и говорю. замени lodsw, поставь через es, а всё остальное через ds imho будет оптимальнее + у тебя она что в tiny не влазит? пихай все переменные в секцию кода.
используй неиспользуемую часть переменной buffer. -------------------- бб
|
Dark |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: ![]() ![]() ![]() |
![]() Я ж не учу оптимизированности... Хотя, ты прав, она не помешает Но иногда - оптимизированность мешает пониманию... -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
![]() ![]() |
![]() |
Текстовая версия | 12.09.2024 14:17 |