Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
 
xxXAKEPxx
2 / 2 / 2
Регистрация: 30.01.2013
Сообщений: 149
#1

Вывод графики напрямую - Assembler

10.02.2016, 19:51. Просмотров 1340. Ответов 25
Метки нет (Все метки)

Добрый день.
Как реализовать вывод графики напрямую на видеокарту/видеоадаптер (в видеопамять).
Нашёл такую статью: http://www.quadrathell.cn.ua/publ/15-1-0-116.
Но там описан метод для MS-DOS. Мне же нужно выводить графику на Windows, а лучше не зависимо от ОС.
Знаю, что BIOS предоставляет упрощённый интерфейс взаимодействия с устройствами компьютера, в том числе и с видеоадаптером. Как используя только функционал процессора и BIOS выводить графику без обращения к каким-либо специальным API.

Заранее спасибо.
http://www.cyberforum.ru/assembler/thread203749.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2016, 19:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывод графики напрямую (Assembler):

Работа с видеопамятью напрямую
Есть ли какой-нибудь способ управлять мерцанием символа, не устанавливая...

работа с видеобуфером напрямую
Доброго времени суток! Столкнулся с проблемой - взял пример из книги Марек...

TASM + VESA чтение и запись видеопамяти напрямую
Столкнулся с проблемой: есть некоторое изображение представленное битами...

При обращении напрямую к видеопамяти, вывести изображение
Кто может помочь с решением задачи на Ассемблере, откликнитесь пожалуйста!

Вывод графики напрямую без посредников...
Собственно сабж... Вообще меня OpenGL всегда устраивал (имхо лучший вариант...

25
quwy
Native x86
3333 / 2180 / 649
Регистрация: 13.02.2013
Сообщений: 7,239
10.02.2016, 19:56 #2
Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
Но там описан метод для MS-DOS. Мне же нужно выводить графику на Windows, а лучше не зависимо от ОС.
Под Windows не выйдет (разве что вы свой драйвер видеокарты напишите).

Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
Как используя только функционал процессора и BIOS выводить графику без обращения к каким-либо специальным API.
Функции BIOS недоступны из-под современных операционных систем.
0
xxXAKEPxx
2 / 2 / 2
Регистрация: 30.01.2013
Сообщений: 149
10.02.2016, 19:59  [ТС] #3
Ответ понятен.
0
Hikari
Хитрая блондиночка $)
1451 / 960 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
10.02.2016, 20:00 #4
Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
а лучше не зависимо от ОС
Ну так и используй 10-е прерывание. MS-DOS это 21-е прерывание, и к 10-му не имеет отношения.
Если из-под виндовса то придется писать драйвер. Простая Ring3 программа такое тебе не позволит (скорее всего).
0
xxXAKEPxx
2 / 2 / 2
Регистрация: 30.01.2013
Сообщений: 149
10.02.2016, 20:03  [ТС] #5
То есть если загружается программа не из-под ОС, то я могу использовать 10-ое прерывание BIOS для вывода графики, верно?
0
quwy
Native x86
3333 / 2180 / 649
Регистрация: 13.02.2013
Сообщений: 7,239
10.02.2016, 20:08 #6
Прерывания BIOS доступны только из реального режима. В ОС защищенного режима для этого можно временно переключиться в реальный режим, однако:
1. Это очень медленно.
2. Это позволительно только драйверу режима ядра.
3. Уже работающий драйвер видеокарты может отреагировать на такое вмешательство крайне болезненно.
0
Constantin Cat
1628 / 940 / 356
Регистрация: 28.02.2015
Сообщений: 2,185
Завершенные тесты: 1
11.02.2016, 14:46 #7
Цитата Сообщение от quwy Посмотреть сообщение
В ОС защищенного режима для этого можно временно переключиться в реальный режим, однако:
ОСь защищенного режима не даст украсть у себя управление. Это такой клондайк для вредоносов.
0
shmkv
652 / 371 / 57
Регистрация: 21.07.2015
Сообщений: 1,059
13.02.2016, 00:55 #8
Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
То есть если загружается программа не из-под ОС, то я могу использовать 10-ое прерывание BIOS для вывода графики, верно?
Можешь. Графику можно (и лучше) выводить вообще без прерываний путем записи в видеопамять (метод будет работать в защищенном режиме). Свой драйвер GPU не осилишь.
0
murderer
3314 / 1461 / 133
Регистрация: 06.10.2010
Сообщений: 3,215
15.02.2016, 07:29 #9
Для начала нужно узнать в какой диапазон адресов спроецировалась видеопамять.
Вывод графики напрямую
Но это не самое сложное. На каком-то форуме читал, что в современных видеоадаптерах память проецируется не линейно. Например может быть так, что по смещению 0 будет спроецирован левый верхний пиксель, а по смещению 4 пиксель в центре экрана. По каким принципам это работает там так и не выяснили. Однако экспериментальным путём установили, что при инициализации режима в DirectDraw память проецируется по новой уже линейно.
0
murderer
3314 / 1461 / 133
Регистрация: 06.10.2010
Сообщений: 3,215
15.02.2016, 07:33 #10
Получение средствами DirectDraw прямого доступа к видеопамяти
0
shmkv
652 / 371 / 57
Регистрация: 21.07.2015
Сообщений: 1,059
15.02.2016, 13:48 #11
Цитата Сообщение от murderer Посмотреть сообщение
Для начала нужно узнать в какой диапазон адресов спроецировалась видеопамять.
Это можно узнать из VBE.
Цитата Сообщение от murderer Посмотреть сообщение
На каком-то форуме читал, что в современных видеоадаптерах память проецируется не линейно.
Это так. Но для совместимости пока не стартанули драйверы GPU она линейна.
Цитата Сообщение от murderer Посмотреть сообщение
По каким принципам это работает там так и не выяснили.
AGP/PCIE GART.
Цитата Сообщение от murderer Посмотреть сообщение
что при инициализации режима в DirectDraw память проецируется по новой уже линейно.
Во-первых ТС просит.
Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
если загружается программа не из-под ОС
Во вторых по поводу того, что DirectDraw обяжет сделать память линейной - миф. Он может просто эмулировать видеопамять и периодически синхронизировать через тот же GART.
3
kolobok0
46 / 46 / 9
Регистрация: 24.01.2010
Сообщений: 225
16.02.2016, 11:54 #12
Если Вы собираетесь выводить графику без ОС, то да, Вы можете использовать биос для своих нужд. Но лучше отображать прямо в видеопамять видеокарты. Например вы выбросили свой код в адресное пространство писюка как полноценный аппаратный модуль (адреса от 640 до 1мбайта минус размер биоса, и воткнутых адаптеров в слоты). В этом нет ничего сложного. Тема отработана уже давно, надо читать книги про дос применительно к железу и азму.

память видеоадаптера в реальном режиме линейна. начинается обычно для с B000h или B800h адреса сегмента. и первым делом достаточно прочитать один из первых байтиков, инвертировать его и попытаться сравнить после записи. Так Вы узнаете начало этой памяти.

(круглый)
0
Mikl___
Автор FAQ
11369 / 5912 / 534
Регистрация: 11.11.2010
Сообщений: 10,933
16.02.2016, 12:14 #13
kolobok0,
память видеоадаптера в реальном режиме начинается с 0A000h
0
quwy
Native x86
3333 / 2180 / 649
Регистрация: 13.02.2013
Сообщений: 7,239
16.02.2016, 12:36 #14
Начало памяти видеоадаптера в реальном режиме зависит от текущего видеорежима и номера активной сттраницы. В текстовом режиме это обычно B800h, а в графике очень неоднозначно. Для классического VGA 640x480x4 это обычно A000h, но если переключиться во что-нибудь более приличное, то адрес запросто может быть и другим. Узнать его можно у VESA BIOS (а заодно и способ организации, ибо далеко не всегда там попиксельный RGB/BGR).
0
Mikl___
Автор FAQ
11369 / 5912 / 534
Регистрация: 11.11.2010
Сообщений: 10,933
16.02.2016, 12:50 #15
quwy,
Цитата Сообщение от quwy Посмотреть сообщение
но если переключиться во что-нибудь более приличное
Цитата Сообщение от kolobok0 Посмотреть сообщение
память видеоадаптера в реальном режиме
и попробуйте установить графический режим (начало видеобуфера 0A000h) и вывести что нибудь 9 функцией прерывания 21h. О, чудо! Надпись появится на экране....
0
kolobok0
46 / 46 / 9
Регистрация: 24.01.2010
Сообщений: 225
16.02.2016, 12:51 #16
Начало памяти видеоадаптера зависит от режима его работы.
для текстового режима начало памяти B800h или B000h (VGA/EGA)
данный режим остаётся по умолчанию после отработки кода аппаратуры(находящегося в пзу видеоадаптера) - управление ему передаётся из биоса, после нахождения заголовка и совпадения црц из области пзу.

Если мы переводим в графический режим - то да, адрес памяти будет меняться в зависимости от режима и типа видео адаптера (EGA, VGA, CGA, mono и т.п.).

(круглый)
0
Mikl___
Автор FAQ
11369 / 5912 / 534
Регистрация: 11.11.2010
Сообщений: 10,933
16.02.2016, 12:58 #17
kolobok0,
Цитата Сообщение от kolobok0 Посмотреть сообщение
адрес (начала видео-)памяти будет меняться в зависимости от режима и типа видео адаптера (EGA, VGA, CGA, mono и т.п.)
Да, ну?
А как насчет совместимости программ?
1
Constantin Cat
1628 / 940 / 356
Регистрация: 28.02.2015
Сообщений: 2,185
Завершенные тесты: 1
16.02.2016, 12:59 #18
Цитата Сообщение от kolobok0 Посмотреть сообщение
Начало памяти видеоадаптера зависит от режима его работы.

То, что память не используется адаптером в данный момент, ещё не значит, что эта область памяти не выделена адаптеру.
2
Миниатюры
Вывод графики напрямую  
kolobok0
46 / 46 / 9
Регистрация: 24.01.2010
Сообщений: 225
16.02.2016, 13:07 #19
У Вас вызывает трудности осязания, что видимость аппаратуры может зависеть от включения-отключения пинов на шине адресации?
Так это всё азы электроники. Обычно палы раньше ставили. Или на рассыпухе. Сейчас это плисины обычно решают.

Или я не так Вас понял?

По поводу дедовского метода обнаружения памяти - то практически все 99% вирусов(да и обычных программ известных и менее известных брэндов) так делали. Даже вызов биоса - было не всегда правильно дёргать.

(круглый)
ЗЫ
Отвечу как один профессор математики, по памяти читающий лекции по вышке.
- "Кто не верит, пусть проверит."
0
Constantin Cat
1628 / 940 / 356
Регистрация: 28.02.2015
Сообщений: 2,185
Завершенные тесты: 1
16.02.2016, 13:24 #20
kolobok0,
Для адаптера выделена память с 0A0000h до 0BFFFFh.
Что адаптер с ней делает, это не наше дело. Что он там себе закачивает и с каких адресов - безразлично. У него свои мозги есть, вот пусть они и думают.
1
16.02.2016, 13:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 13:24
Привет! Вот еще темы с решениями:

Как описать вывод документа напрямую на принтер
Будьте добры, подскажите мне как написать скрипт на РНР или HTML, чтоб страница...

Вывод текста по точкам напрямую в видеопамять в графическом режиме
Здравствуйте. Написал такую программу для вывода с помощью битовых карт текста....

Вывод графики
В общем, сам в шоке, что над такой ерундой заморочился, но никак не получается....

Вывод текста и графики
Помогите пожалуйст: Написать, с использованием функций API, программу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru