- •Управление оп компьютера.
- •Использование оперативной памяти под ms-dos. Высвобождение стандартной оперативной памяти.
- •Состав файла config.Sys
- •Emm386.Exe ram размер_памяти
- •Файл autoexec.Bat
- •Программирование операций с оп. Использование указателей.
- •Структура сегменту пам’яті
- •Адресация far
- •Адресация huge.
- •15.10Можно отнимать указатели huge один от другого, сравнивать их, чего не сделаешь с far. (Также можно отнимать и сравнивать указатели near).
- •Обращение к отдельным ячейкам оп.
- •Int *nPtr; - отведено место под указатель;
- •Непосредственная инициализация указателей. Обращение к ячейкам оп в пределах 1мб.
- •Программирование видеоадаптеров програмування відеоадаптерів Архітектура відеоадаптера
- •20.10Режимы работы видеоадаптеров
- •Vga (Video Graphic Array) – видеографический массив.
- •Видеоадаптеры svga (SuperVga)
- •Режимы работы видеоадаптеров svga по стандарту vesa
- •Int 10h ; прерывание для работы с видеосистемой.
- •Текстовый режим работы видеоадаптера.
- •Формат байтов символа
- •Мерцающий зеленый символ на красном фоне. Программирование непосредственной записи в видеобуфер.
- •2 4.10Видеоконтроллер в графическом режиме (например, cga № 4).
- •Т ехнология изменения цвета пиксела. П оследовательность действий.
Мерцающий зеленый символ на красном фоне. Программирование непосредственной записи в видеобуфер.
#include<graph.h>
void main ( )
{
char far *v_buf = (char far*) 0xb8000000L;
//(Начало видеобуфера в текстовом режиме).
_setvideomode(_TEXTC80); // режим № 3
403v_buf+ = (12*160)+(40<<1);
// Побитовое смещение на один разряд (40 << 1) эквивалентно умножению на 2.
*v_buf = ‘A’; // в ячейку со смещением (12*160 + 40*2) относительно начала видеобуфера записан ASCII-код буквы А, следовательно, изображение этой буквы появляется на пересечении строки № 13 и столбца № 41.
*(v_buf++) = 202; // задан атрибут.
_setvideomode(_DEFAULTMODE); // восстановление
// видеорежима по умолчанию.
}
2 4.10Видеоконтроллер в графическом режиме (например, cga № 4).
_ setvideomode(_MRES4COLOR) – установить 4-й графический режим (это 320х200 пикселов и 4 цвета).
SVGA видеоадаптер эмулирует этот режим.
Каждому пикселу соответствует часть байта. Каждый байт разделён на 4 части и каждому пикселу соответствует 2 бита.
Цвет с кодом 00 – цвет фона;
Цвет с кодом 01 – светло-голубой (Сyan);
Цвет с кодом 10 – малиновый (Маgenta);
Ц вет с кодом 11 – ярко-белый (brightWhite).
Четвёртый пиксел (пиксел № 3) формируется 1 и 2 битом каждого байта (младшими).
В 1 ряду: - 320 пикселов, 640 бит, 80 байт.
Мы не можем обратиться к отдельному биту (а если и сможем, то программа будет работать медленно).
Для формирования четных строк (нулевая – четная) нужно обращаться к видеостранице с начальным адресом В8000h.
(unsigned char _far*) 0xВ8000000L;
для нечетных – нужно добавлять 2000h.
Теперь необходимо рассчитать номер байта, куда будет записан код цвета пиксела.
В одном ряду 80 байт (320 пикселов); для определения номера байта (номера ячейки видеопамяти) нужно Х-координату пиксела разделить нацело на 4 и прибавить количество байт, соответствующих координате Y. При этом надо учесть, что координате Y == 0 соответствует первая строка (строка № 0) ячеек видеопамяти на странице № 0, а координате Y == 3 соответствует вторая строка (строка № 1) ячеек видеопамяти на странице № 1, имеющей смещение 2000h от начала видеобуфера, поэтому координату Y надо делить нацело на 2.
Номер байта при известных координатах X, Y определяется так:
N = 80 * Y/2 + X/4
– для четных Y;
и N = 80 * Y/2 + X/4 + 2000h
– для нечетных Y.
Если надо вывести 3 пиксел в 50 байте, то надо использовать сдвиг в 50-м байте, рассчитав остаток от деления номера пиксела на 4.
Т ехнология изменения цвета пиксела. П оследовательность действий.
1. Обращение к байту, где есть заменяемый пиксел, занесение этого байта во вспомогательный буфер размером 1 байт, а затем использование масок с применением операций конъюнкции, дизъюнкции и регистрового сдвига.
Необходимо взять маску: 11110011, –
и выполнить операцию логического умножения (логическое «И», конъюнкция) – для обнуления заменяемых разрядов.
2. Формирование маски:
mask1= C0h (11000000)
mask1>>=4==00001100 (сдвиг вправо на 4);
~(mask1)== 11110011 (инверсия).
00011111– вспомогательный буфер;
^
11110011 – маска
00010011 – сохранены все биты, кроме заменяемых.
3. 27.10Теперь необходимо сделать маску, у которой все биты – нулевые, кроме битов 3-го пиксела, которым придаём нужное значение (операцией логического сложения, "ИЛИ”, т.е. дизъюнкцией).
00010011 (рабочий байт)
V
00001000 (маска № 2)
00011011
Для подсчёта сдвига от начала байта необходимо номер пиксела разделить на 4, взять остаток и домножить его на 2.
mod 15/4==3;
При формировании маски № 1 для пиксела № 0 сдвиг от начала – 0;
для № 1 сдвиг – 2;
№ 2 – 4;
№ 3 – 6;
(в программе х=160, у=100);
Для 4 строки на (экране) на 1 видеостранице надо брать только 2-й ряд байтов, который начинается с B8050h.
(Побитовое умножение на 3 ~ делению по модулю 4).