Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
Помогите
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Помогите (Прочитано 7340 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Lenin90
Гость
Помогите
«
:
17-12-2004 16:44 »
Помогите пожайлуста с прямым отображением в видеобуфер, а то я читаю рассылку калашникова компилирую его пример(вывод символа на экран)
,а он проссто отжирает 100 процентов у проца и все.Я новичок так что объясните пожаста попроще
Записан
dimedrol
Помогающий
Offline
Помогите
«
Ответ #1 :
20-12-2004 12:06 »
Темный я человек, нельзя-ли поподробнее о чем ЭТО?
Записан
Как говориться, cемь бед - один Reset
RXL
Технический
Администратор
Offline
Пол:
Помогите
«
Ответ #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
Гость
Re: Помогите
«
Ответ #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
Гость
Re: Помогите
«
Ответ #4 :
05-04-2005 19:53 »
ошибка
screen(y)(x)
скобки поставь квадратные, а не круглые
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
Помогите
Загружается...