Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.59
Liricnet
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 55
#1

Прямой доступ к видео памяти - C++

12.02.2011, 11:41. Просмотров 4729. Ответов 12
Метки нет (Все метки)

Здравствуйте, подскажите как организовать прямой доступ к видео памяти на современно VGA/DVI видео адаптере.
В Книги Шилдта есть указания как сделать это,но на старых видео адаптерах. Там указанно что надо создать указатель на область памяти 0xB0000000 - если монохромный видео адаптер, или на область - 0xB8000000 - если это EGA или CGA адаптер.
Но книга 1989 года издания, как реализовать это в современных условиях.
P.S: я пишу консольное приложения, до для разработки и управление интерфейсом мне необходим доступ в видеопамяти.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
12.02.2011, 13:32     Прямой доступ к видео памяти #2
Делал такие вещи на АСМе, по книге где-то того же времени (даже наверное раньше)), все получилось)

Цитата Сообщение от Liricnet Посмотреть сообщение
В Книги Шилдта есть указания как сделать это,но на старых видео адаптерах. Там указанно что надо создать указатель на область памяти 0xB0000000 - если монохромный видео адаптер, или на область - 0xB8000000 - если это EGA или CGA адаптер.
А что за книга? Давно хотел узнать, как в языках С/С++ можно указателю принудительно константное значение присвоить, сам пробовал - не компилировалось(
Liricnet
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 55
12.02.2011, 13:41  [ТС]     Прямой доступ к видео памяти #3
Г. Шилдт "С для профессиональных программистов"
Просто у меня курсовая по ЯВУ, а конкретно С/С++
я поэтому хотел бы узнать как это на языке Си реализовать...
Iron Bug
22 / 22 / 0
Регистрация: 06.12.2010
Сообщений: 125
12.02.2011, 13:47     Прямой доступ к видео памяти #4
в 89-м году был DOS. современные системы не дают доступа напрямую к памяти других приложений (см. изоляция процессов) и к портам ввода-вывода (уровень ядра системы). так что реализовать можно только через обращения к драйверу, в зависимости от системы.
да и вообще, если не секрет, зачем доступ напрямую, если есть множество библиотек для работы с графикой?
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
12.02.2011, 13:51     Прямой доступ к видео памяти #5
Iron Bug, возможно сделать именно через адреса. Просто современные ОС естетвенно тебя не пустят туда, куда не просят, но они поймут, что тебе нужно и будет с эмулированно обращение к адресу. Хотя в действительности конечно же итог работы программы будет достигнут другим путем, но это уже программисту знать не обязательно (я вот, если честно не знаю, только догадываюсь))
Iron Bug
22 / 22 / 0
Регистрация: 06.12.2010
Сообщений: 125
12.02.2011, 15:06     Прямой доступ к видео памяти #6
насколько мне известно, начиная с Win2K все эти лазейки прикрыты. и надёжно. и к портам уже давно никто не лазит.
пишите драйвер - тогда пожалуйста. с уровня ядра можно и напрямую.
Liricnet
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 55
13.02.2011, 18:50  [ТС]     Прямой доступ к видео памяти #7
А еще варианты как можно изменить выведенное на экране изображение/текст/псевдографику не используя функцию очистки экрана? Какие winAPI функции предусмотрены? и какие библиотеки требуются?
Подскажите плиз, а то каждый раз при изменение использовать windows("cls") или clrscr(); как то слишком грубо и неприятно для глаз...
Iron Bug
22 / 22 / 0
Регистрация: 06.12.2010
Сообщений: 125
13.02.2011, 22:42     Прямой доступ к видео памяти #8
ну, вариантов-то много. про API навскидку не скажу. нет у меня дома венды, чтобы посмотреть. а так, есть DirectDraw и если требуется работа с изображением на экране, то лучше копать в эту сторону. но это, опять же, смотря какая задача. а то из пушки по воробьям не очень эффективно.
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
14.02.2011, 11:46     Прямой доступ к видео памяти #9
В 1990 (ДОС еще) написал
C
1
 char far *vidmem = (char far *) 0xB000000;;
и делал там, что хотел.
С тех пор прошло много виндов, программы прекрасно работают как в полноэкранном режиме, так и в окне. Видимо, эмулируется досовская видеопамять, и эмулируется правильно.

Добавлено через 2 минуты
Цитата Сообщение от Liricnet Посмотреть сообщение
А еще варианты как можно изменить выведенное на экране изображение/текст/псевдографику не используя функцию очистки экрана? Какие winAPI функции предусмотрены? и какие библиотеки требуются?
Подскажите плиз, а то каждый раз при изменение использовать windows("cls") или clrscr(); как то слишком грубо и неприятно для глаз...
Пиши спокойно по указанному адресу. Только не забудь, что на символ там 2 байта - символ и цветовой атрибут.
А вот кто бы мне сказал как цвет курсора изменить?

Добавлено через 7 минут
ЗЫ. Если интересно, могу скинуть досовский редактор с исходниками. А то как-то жалко, такая вещь пропадает!
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
14.02.2011, 14:15     Прямой доступ к видео памяти #10
Цитата Сообщение от Day Посмотреть сообщение
Видимо, эмулируется досовская видеопамять, и эмулируется правильно.
Так и есть) Когда начинал на АСМе под ДОС писать, читал лит-ру на эту тему, все эмулируется, даже прерывания.
Liricnet
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 55
14.02.2011, 20:37  [ТС]     Прямой доступ к видео памяти #11
а какой компилятор лучше использовать? просто мне MS Visual Studio говорит что-то типа неверный адресс =(((
vital792
1989 / 1261 / 57
Регистрация: 05.06.2010
Сообщений: 2,213
14.02.2011, 21:00     Прямой доступ к видео памяти #12
Цитата Сообщение от Liricnet Посмотреть сообщение
а какой компилятор лучше использовать? просто мне MS Visual Studio говорит что-то типа неверный адресс =(((
все что было сказано выше компилируется под дос, но работает и под виндой. В MS Visual Studio нельзя скомпилировать программу под дос, придется поискать старый досовский компилятор, что то типа turbo C. Только вот зачем это в винде, где есть тот же DirectX например?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2011, 21:34     Прямой доступ к видео памяти
Еще ссылки по теме:
Доступ к произвольному адресу памяти C++
Доступ к vector<pair<.>> как к памяти C++
Доступ к области памяти из другого класса C++
C++ Как дать доступ к разделенной памяти для пользовательских программ из сервиса
C++ MFC проект! Отрисовка прямой по уравнению прямой Visual C++

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

Или воспользуйтесь поиском по форуму:
Байт
Эксперт C
15639 / 9981 / 1499
Регистрация: 24.12.2010
Сообщений: 18,749
14.02.2011, 21:34     Прямой доступ к видео памяти #13
Цитата Сообщение от Liricnet Посмотреть сообщение
а какой компилятор лучше использовать? просто мне MS Visual Studio говорит что-то типа неверный адресс =(((
Из архаики могу посоветовать Borland C 2.0 или 3.1.
Yandex
Объявления
14.02.2011, 21:34     Прямой доступ к видео памяти
Ответ Создать тему
Опции темы

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