Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите  (Прочитано 6766 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Lenin90
Гость
« : 17-12-2004 16:44 » 

Помогите пожайлуста с прямым отображением в видеобуфер, а то я читаю рассылку калашникова компилирую его пример(вывод символа на экран)
,а он проссто отжирает 100 процентов у проца и все.Я новичок так что объясните пожаста попроще
Записан
dimedrol
Помогающий

ru
Offline Offline

« Ответ #1 : 20-12-2004 12:06 » 

Темный я человек, нельзя-ли поподробнее о чем ЭТО?
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 20-12-2004 17:53 » 

Все очень просто. Расскажу кратко - остальное сами можете без труда найти в инете.

В DOS-е есть возможность напрямую писать в буфер кадра (framebuffer), как в текстовых, так и в графических VGA режимах. Управление режимами осуществляется посредством интерфейса Video BIOS int 10h. Номер ф-ии передается в al, аргументы - в прочих регистрах. Через этот же вызов можно достучаться до Vesa BIOS Extension (VBE) и программировать SVGA режимы, но для доступа к буферу потребуется защищенный режим, т.к. он находится за пределами 1-но мегабайтного адресного пространства.

В текстовых режимах буфер находится по адресу B800:0000. Структура строчная, элементы строки состоят из двух байт: кода символа и цветовых атрибутов. Длина отображаемой части: число_строк*число_столбцов*2. Символы преобразуются в изображение посредством загружаемых знакогенераторов (шрифтов, фонтов). Типичный для DOS режим: 3 (80х25, цветной).

В графических режимах из диапазона 4-13 буфер распологается по адресу B800:0000. В графических режимах 14-19 буфер распологается по адресу A000:0000.
Описание режимов и структуру памяти (тем более, что там полно сложностей - тут книгу надо) можно опять же найти в сети. Остановлюсь только на режиме 19 (13h) - он намного проще в программировании и имеет 256 цветов палитры. Каждый цвет палитры может быть настроен независимо от остальных. Компоненты R, G и B имеют длину по 6 бит. Разрешение экрана: 320х200. Структура строчная. Строки идут друг за другом. Каждая точка экрана - 1 байт. Размер кадра: 320*200=64000 байт. Адрес точки в сегменте A000 вычисляется по след. формуле: addr=y*200+x. Точка отсчета - верхний левый угол. Х растет вправо, а Y вниз. Существенный недостаток: аспектное отношение экрана не 1.333, а 1.6.

Все VGA режимы, кроме 13h, имеют несколько страниц (число зависит от режима), которые можно переключать. Это используется для того, чтобы пользователь не увидел перерисовки экрана: пока он видит один готовый кадр, готовится другой. В режиме 13h страница только одна.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
p0et
Гость
« Ответ #3 : 05-04-2005 19:50 » 

мда RXL очень классно все объяснил, хотя держи пример на си

struct my_char{
  unsigned char ch, attr;
};

my_char *screen;
screen = (my_char*)0xB8000000;
// clear screen
int x,y;
for( y = 0; y < 25; y++)
  for( x = 0; x < 80; x++)
  {
     screen[y]
  • .ch = '_';          // возможно x,y местами нужно поменять - попробуй
     screen[y]
  • .attr = 0x0F;
  }
« Последнее редактирование: 20-12-2007 18:42 от Алексей1153++ » Записан
p0et
Гость
« Ответ #4 : 05-04-2005 19:53 » 

ошибка
 screen(y)(x)
 скобки поставь квадратные, а не круглые
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines