Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
1

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

18.07.2013, 17:10. Просмотров 5195. Ответов 11
Метки нет (Все метки)

Требуется написать программу, которая будет напрямую обращаться в видеопамяти. Описание:

Реализовать функцию, принимающую три параметра - цвет фона, цвет тона и код символа и производящую заполнение этим символом всего экрана. Реализовать функцию очистки экрана с использованием созданной функции.

Для заполнения видеопамяти воспользуйтесь указателем на беззнаковый символ.
Для присвоения ему значения 0хВ8000000 необходимо осуществить явное преобразование типов. Непосредственное значение 0хВ8000000 имеет тип int. Следует сначала привести тип этого значения к void* а затем - к unsigned char* для того, чтобы присовение стало возможным.
Для обращения к различным байтам видеопамяти воспользуйтесь этим указателем.
Видеопамять организована следующим образом: байт по адресу 0хВ8000000 содержит код символа в левом верхнем углу экрана. Следующий за ним байт содержит цвет фона и цвет тона этого символа. В старшей половине этого байта содержится цвет фона, в младшей - цвет тона.

Коды некоторых цветов: 0х0 - черный, 0х7 - серый, 0хf - белый

При выполенини работы производите периодическое сохранение программы, так как некорректная работа с памятью может привести к ошибке ЭВМ и потере данных в оперативной памяти.

КОД, КОТОРЫЙ НЕ РАБОТАЕТ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(void)
{
    
    char *p =  (char *)((void *)0xB8000000);
        
    for(int i = 1; i <= 20; i++){
        *p = '8';
        p++;
        *p = 0;
        p++;
    }
    
 
    return 0;
}
Добавлено через 1 минуту
Доступно ли прямое обращение к памяти в Windows 7 в режиме user mode?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2013, 17:10
Ответы с готовыми решениями:

Прямой доступ к переменным
Доброго времени суток, форумчане. Сразу оговорю, что название темы может не совсем корректно...

Прямой доступ к видео памяти
Здравствуйте, подскажите как организовать прямой доступ к видео памяти на современно VGA/DVI видео...

вопрос по си-подключение видеопамяти
в проге-заготовке вот строка far*p=(char far *)MK_FP(0xB800,0x0000) прога-текстовой...

Прямой доступ к видеопамяти
Здраствуйте уважаемы программеры! У меня к вам огромная просьба не могу написать казалось бы...

11
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.07.2013, 17:12 2
Что значит "не работает"?

Добавлено через 1 минуту
Цитата Сообщение от bgm123 Посмотреть сообщение
Доступно ли прямое обращение к памяти в Windows 7 в режиме user mode?
Не доступно. Используй эмулятор MSDOS - либо DosBox, либо к.-л. другую виртуальную машину.....
0
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:14  [ТС] 3
Цитата Сообщение от CheshireCat Посмотреть сообщение
Не доступно. Используй эмулятор MSDOS - либо DosBox, либо к.-л. другую виртуальную машину.
А можно как то переключиться в динамическом режиме в kernel mode?

Добавлено через 1 минуту
Т.е. я правильно понял, что для того, чтобы сделать скриншот, нужен либо драйвер, либо системные вызовы?
0
Модератор
Эксперт по электронике
8275 / 6134 / 822
Регистрация: 14.02.2011
Сообщений: 21,334
18.07.2013, 17:16 4
Цитата Сообщение от bgm123 Посмотреть сообщение
Доступно ли прямое обращение к памяти в Windows 7 в режиме user mode?
ты это лет так на 30 опоздал
во времена Доса такое было возможно
а теперь где она эта видеопамять ?
в видеокартах по гектару и больше может стоять
Цитата Сообщение от bgm123 Посмотреть сообщение
char *p = *(char *)((void *)0xB8000000);
этим ты старательно лезешь в систему, ну и получаешь по рукам
и откуда ты взял этот адрес?
такой помню 0xA800:0x8000 и такой 0xB000:0000
а 32битных не припомню
так что только через DirectX, и то это будет не реальная память а проекция её на твое адресное пространство

Добавлено через 48 секунд
Цитата Сообщение от bgm123 Посмотреть сообщение
Т.е. я правильно понял, что для того, чтобы сделать скриншот, нужен либо драйвер, либо системные вызовы?
BitBlt еще никто не отменял
1
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:20  [ТС] 5
Где в современных ОС хранится изображение? В озу?
0
Модератор
Эксперт по электронике
8275 / 6134 / 822
Регистрация: 14.02.2011
Сообщений: 21,334
18.07.2013, 17:22 6
Цитата Сообщение от bgm123 Посмотреть сообщение
Где в современных ОС хранится изображение?
что есть изображение?
Цитата Сообщение от bgm123 Посмотреть сообщение
В озу?
и в ОЗУ и в видеопамяти и на диске если место мало
конкретно изображение чего
0
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.07.2013, 17:25 7
Цитата Сообщение от ValeryS Посмотреть сообщение
и откуда ты взял этот адрес?
такой помню 0xA800:0x8000 и такой 0xB000:0000
а 32битных не припомню
Во времена MSDOS, мир праху ее, именно так и нужно было адресовать 0xB000:0x0000. Компилятор (тот же Турбо Си) аккуратно преобразовывал 0xB0000000 в пару сегмент:смещение.
Но теперь да, подобные штуки остались только в истории - лет 30 назад.....
0
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:28  [ТС] 8
Цитата Сообщение от ValeryS Посмотреть сообщение
конкретно изображение чего
картинки на мониторе
0
Модератор
Эксперт по электронике
8275 / 6134 / 822
Регистрация: 14.02.2011
Сообщений: 21,334
18.07.2013, 17:32 9

Не по теме:

Цитата Сообщение от CheshireCat Посмотреть сообщение
Компилятор (тот же Турбо Си) аккуратно преобразовывал 0xB0000000 в пару сегмент:смещение.
Может быть
давно было не помню, да и писал в основном тогда на ассемблере
но я писал всегда так сегмент:смешение



Добавлено через 2 минуты
Цитата Сообщение от bgm123 Посмотреть сообщение
картинки на мониторе
ядро собирает картинки со всех программ компонует их и хранит внутри себя выдавая на видеокарту по мере необходимости, а может сразу компоновать в видеопамяти зависит от железа и драйверов
ты конкретно что хочешь сделать?
рисовать на десктопе? экран сохранить?
1
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:40  [ТС] 10
То есть, если я правильно понял, надо глядеть в сторону kernel mode?
0
397 / 353 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
18.07.2013, 17:43 11
Цитата Сообщение от bgm123 Посмотреть сообщение
То есть, если я правильно понял, надо глядеть в сторону kernel mode?
лучше ненадо
0
Ушел с форума
Эксперт С++
16406 / 7381 / 1184
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
18.07.2013, 17:54 12
Цитата Сообщение от bgm123 Посмотреть сообщение
То есть, если я правильно понял, надо глядеть в сторону kernel mode?
Раньше в ядре Windows были некоторые документированные возможности работать с
содержимым дисплея. Потом из-за DRM их стали целенаправлено вырезать (чтобы
нельзя было грабить защищенный медиа-контент), а в Windows 8 вообще убрали.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2013, 17:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Прямой доступ к видеопамяти в DirectХ 9
Есть ли возможность обратится напрямую к вторичной поверхности (задний буфер) в DirectХ 9. Такая...

Прямой доступ к видеопамяти в режиме VESA
Если у кого-то есть код программы вывода на экран точки, графика, линии и т. д. в режиме VESA на...

Вывод строки используя прямой доступ к видеопамяти
CSEG segment org 100h begin: mov ax,dx mov es,ax mov al, 02h mov ah, 00h int 10h ...

Доступ к видеопамяти
Здравствуйте! Подскажите, как можно средствами C# получить доступ к содержимому видеопамяти (чтение...


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

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

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