Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler, MASM, TASM

Войти
Регистрация
Восстановить пароль
 
 
xxXAKEPxx
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 149
#1

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

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

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

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

Вывод графики - Assembler
Помогите разобраться с алгоритмом программы или подскажите где можно почитать: ; Copper bars by Patch (hamell@rigel.cs.pdx.edu) ;...

работа с видеобуфером напрямую - Assembler
Доброго времени суток! Столкнулся с проблемой - взял пример из книги Марек "Ассемблер на примерах" ORG 100h ; directive...

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

TASM + VESA чтение и запись видеопамяти напрямую - Assembler
Столкнулся с проблемой: есть некоторое изображение представленное битами (14х20), его нужно вывести по заданным координатам. Режим 103h...

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

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

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

Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
Как используя только функционал процессора и BIOS выводить графику без обращения к каким-либо специальным API.
Функции BIOS недоступны из-под современных операционных систем.
0
xxXAKEPxx
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 149
10.02.2016, 19:59  [ТС] #3
Ответ понятен.
0
Hikari
Хитрая блондиночка $)
1450 / 958 / 285
Регистрация: 21.12.2015
Сообщений: 3,785
10.02.2016, 20:00 #4
Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
а лучше не зависимо от ОС
Ну так и используй 10-е прерывание. MS-DOS это 21-е прерывание, и к 10-му не имеет отношения.
Если из-под виндовса то придется писать драйвер. Простая Ring3 программа такое тебе не позволит (скорее всего).
0
xxXAKEPxx
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 149
10.02.2016, 20:03  [ТС] #5
То есть если загружается программа не из-под ОС, то я могу использовать 10-ое прерывание BIOS для вывода графики, верно?
0
quwy
Native x86
3323 / 2170 / 595
Регистрация: 13.02.2013
Сообщений: 7,230
10.02.2016, 20:08 #6
Прерывания BIOS доступны только из реального режима. В ОС защищенного режима для этого можно временно переключиться в реальный режим, однако:
1. Это очень медленно.
2. Это позволительно только драйверу режима ядра.
3. Уже работающий драйвер видеокарты может отреагировать на такое вмешательство крайне болезненно.
0
Constantin Cat
1024 / 701 / 231
Регистрация: 28.02.2015
Сообщений: 1,810
Завершенные тесты: 1
11.02.2016, 14:46 #7
Цитата Сообщение от quwy Посмотреть сообщение
В ОС защищенного режима для этого можно временно переключиться в реальный режим, однако:
ОСь защищенного режима не даст украсть у себя управление. Это такой клондайк для вредоносов.
0
shmkv
624 / 339 / 43
Регистрация: 21.07.2015
Сообщений: 995
13.02.2016, 00:55 #8
Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
То есть если загружается программа не из-под ОС, то я могу использовать 10-ое прерывание BIOS для вывода графики, верно?
Можешь. Графику можно (и лучше) выводить вообще без прерываний путем записи в видеопамять (метод будет работать в защищенном режиме). Свой драйвер GPU не осилишь.
0
murderer
3211 / 1434 / 78
Регистрация: 06.10.2010
Сообщений: 3,177
15.02.2016, 07:29 #9
Для начала нужно узнать в какой диапазон адресов спроецировалась видеопамять.
Вывод графики напрямую
Но это не самое сложное. На каком-то форуме читал, что в современных видеоадаптерах память проецируется не линейно. Например может быть так, что по смещению 0 будет спроецирован левый верхний пиксель, а по смещению 4 пиксель в центре экрана. По каким принципам это работает там так и не выяснили. Однако экспериментальным путём установили, что при инициализации режима в DirectDraw память проецируется по новой уже линейно.
0
murderer
3211 / 1434 / 78
Регистрация: 06.10.2010
Сообщений: 3,177
15.02.2016, 07:33 #10
Получение средствами DirectDraw прямого доступа к видеопамяти
0
shmkv
624 / 339 / 43
Регистрация: 21.07.2015
Сообщений: 995
15.02.2016, 13:48 #11
Цитата Сообщение от murderer Посмотреть сообщение
Для начала нужно узнать в какой диапазон адресов спроецировалась видеопамять.
Это можно узнать из VBE.
Цитата Сообщение от murderer Посмотреть сообщение
На каком-то форуме читал, что в современных видеоадаптерах память проецируется не линейно.
Это так. Но для совместимости пока не стартанули драйверы GPU она линейна.
Цитата Сообщение от murderer Посмотреть сообщение
По каким принципам это работает там так и не выяснили.
AGP/PCIE GART.
Цитата Сообщение от murderer Посмотреть сообщение
что при инициализации режима в DirectDraw память проецируется по новой уже линейно.
Во-первых ТС просит.
Цитата Сообщение от xxXAKEPxx Посмотреть сообщение
если загружается программа не из-под ОС
Во вторых по поводу того, что DirectDraw обяжет сделать память линейной - миф. Он может просто эмулировать видеопамять и периодически синхронизировать через тот же GART.
3
kolobok0
46 / 46 / 8
Регистрация: 24.01.2010
Сообщений: 225
16.02.2016, 11:54 #12
Если Вы собираетесь выводить графику без ОС, то да, Вы можете использовать биос для своих нужд. Но лучше отображать прямо в видеопамять видеокарты. Например вы выбросили свой код в адресное пространство писюка как полноценный аппаратный модуль (адреса от 640 до 1мбайта минус размер биоса, и воткнутых адаптеров в слоты). В этом нет ничего сложного. Тема отработана уже давно, надо читать книги про дос применительно к железу и азму.

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

(круглый)
0
Mikl___
Заблокирован
Автор FAQ
16.02.2016, 12:14 #13
kolobok0,
память видеоадаптера в реальном режиме начинается с 0A000h
0
quwy
Native x86
3323 / 2170 / 595
Регистрация: 13.02.2013
Сообщений: 7,230
16.02.2016, 12:36 #14
Начало памяти видеоадаптера в реальном режиме зависит от текущего видеорежима и номера активной сттраницы. В текстовом режиме это обычно B800h, а в графике очень неоднозначно. Для классического VGA 640x480x4 это обычно A000h, но если переключиться во что-нибудь более приличное, то адрес запросто может быть и другим. Узнать его можно у VESA BIOS (а заодно и способ организации, ибо далеко не всегда там попиксельный RGB/BGR).
0
Mikl___
Заблокирован
Автор FAQ
16.02.2016, 12:50 #15
quwy,
Цитата Сообщение от quwy Посмотреть сообщение
но если переключиться во что-нибудь более приличное
Цитата Сообщение от kolobok0 Посмотреть сообщение
память видеоадаптера в реальном режиме
и попробуйте установить графический режим (начало видеобуфера 0A000h) и вывести что нибудь 9 функцией прерывания 21h. О, чудо! Надпись появится на экране....
0
16.02.2016, 12:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 12:50
Привет! Вот еще темы с ответами:

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

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

Вывод 3D графики вручную - Графика и игры
Собственно вопрос. Посоветуйте литературу по этой теме. Вывод 3Д графики вручную. Без использования OpenGL и тому подобное. По пикселям.

Вывод графики в Image - Delphi БД
В программе нужно реализовать вывод изображений в Image. Названия указаны в таблице (тип поля String). Причем, каждой записи соответствуют...


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

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

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