Министерство образования и науки российской федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования "Южный федеральный университет" Факультет автоматики и вычислительной техники Кафедра вычислительной техники _________________________________________________________________ ____________________________________________________ ___________________________________________ Лабораторная работа №3 По курсу: Интерфейсы периферийных устройств На тему: Байт атрибута Выполнили: студенты гр. А-39 Айрапетян А. В. Бутенко Д.А. Терекян А.А. Проверил: Авдеев В.А. Таганрог 2013 г. Формулировка задания: Минимальный по объему вариант включает по одной вершине каждого уровня. Возможно включение нескольких вершин одного уровня в задание, что определяет более сложный вариант. Вариант задания: Инструкция по применению: Нажатием на comboBox'ы, пользователь выбирает цвет текста/фона, яркость цвета текста и будет ли мигать текст. Внешний вид программы: Основные сведения: После загрузки компьютера дисплей начинает работать в текстовом режиме. В этом режиме видеобуфер хранит код символа и код атрибута. Младшие четыре разряда кода атрибута определяют цвет символа (биты I, R, G и B, где I - интенсивность свечения). Старшие четыре разряда задают цвет фона (биты I/B, R, G и B, где I/B - интенсивность или мигание символа), программируются битом 5 регистра управления режимом (порта 3D8h). Используя 3 основных цвета R, G и B, можно получить 8 цветовых комбинаций. Управляя еще и интенсивностью (I) свечения, образуют 16 цветовых комбинаций с помощью кода IRGB. В табл. 8.2 представлено базовое кодирование цветов (палитра цветов). Таблица 8.2. Номер цвета4-битный кодНазвание цвета IRGB 00000Черный10001Синий20010Зеленый30011Голубой40100Красный50101Вишневый60110Коричневый70111Белый81000Серый91001Ярко-синий101010Ярко-зеленый111011Ярко-голубой121100Ярко-красный131101Ярко-вишневый141110Желтый151111Ярко-белый В адаптере CGA байт атрибута непосредственно управляет выбором цветов символа и фона, а в адаптере EGA каждые четыре бита атрибута используются как индекс для выбора одного из шестнадцати режимов палитры, 6-разрядный код Rr Gg Bb которого поступает в монитор. В этом коде для каждого цвета применяются два бита (00 - цвет выключен, 01 - слабый цвет, 10 - обычный и 11 - яркий). Такое кодирование увеличивает число цветов до 64. Адаптер VGA содержит дополнительно 256 18-разрядных регистров цвета ЦАП, выбор каждого из которых осуществляется 8-разрядным кодом, причем младшие 6 или 4 бита считываются из регистра палитры, используемого также в EGA, а старшие 2 или 4 бита берутся из регистра выбора цвета. Объединением битов (6 и 2, 4 и 4) управляет бит 7 регистра управления режимом. Каждый 18-разрядный регистр цвета ЦАП содержит три 6-разрядных поля R, G и B, которые соответственно поступают на ЦАП R, ЦАП G и ЦАП B, аналоговые сигналы которых передаются в монитор. Этапы дешифрирования битов атрибута в VGA показаны на рис. 8.3. Рис. 8.3. Этапы дешифрации битов атрибута В адаптерах MDA и CGA символы хранятся в последовательных ячейках видеобуфера, которые отображаются на прямоугольные координаты экрана (рис. 8.4). Рис. 8.4. Отображение видеобуфера на экране В видеобуфере в младшем байте с четным (меньшим) адресом хранится код символа, а в старшем байте с нечетным (большим) адресом - код атрибута. Схема отображения кода символа на экран имеет следующий вид: Код символа ® ПЗУ (знакогенератор) ® сдвиговый регистр ® экран. На экран в символьную позицию построчно отображается матрично-пиксельное изображение символа (рис. 8.5). Рис. 8.5. Матрично-пиксельное изображение символа Видеобуфер адаптеров EGA и VGA содержит четыре параллельных банка памяти (0 - 3), начальный адрес которых B800:0000h или A000:0000h, причем отображаемые на экране данные хранятся в банках 0 и 1, а в банке 2 - таблицы шрифтов знакогенератора. Байты символов с четными адресами размещаются в банке 0, а байты атрибутов с нечетными адресами - в банке 1. Управление обращением к банкам 0 и 1 управляет контроллер ЭЛТ. Ниже представлено интерфейсное окно модели, демонстрирующее выбор из таблицы символов соответствующего знака и отображение увеличенного его графического изображения с указанием ASCII-кода. API- функции работы с байт атрибутом: ForeColor - Получает или задает основной цвет текста. public virtual Color ForeColor { get; set; } BackColor - Получает или задает цвет фона для текста. public virtual Color BackColor { get; set; } Font - Возвращает или задает шрифт текста, отображаемого элементом управления. public virtual Font Font { get; set; } Листинг файла Form1.cs: #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; bool matrix[16][8] = {0}; TColor colorText = clBlack; //Цвет текста TColor colorFont = clWhite; //Цвет фона bool flag = false; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){ } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender){ matrix[4][3] = 1; matrix[4][4] = 1; for(int i=6; i<10;i++){ matrix[i][1] = 1; matrix[i][6] = 1;} matrix[5][2] = 1; matrix[5][5] = 1; matrix[10][2] = 1; matrix[10][5] = 1; matrix[11][3] = 1; matrix[11][4] = 1; } //--------------------------------------------------------------------------- void __fastcall TForm1::SwitchColor(TObject *Sender){ int ColorCount = 0; if (CheckBox2->Checked) ColorCount += 4; if (CheckBox3->Checked) ColorCount += 2; if (CheckBox4->Checked) ColorCount += 1; switch(ColorCount){ case 0: colorFont = clBlack; break; case 1: colorFont = clBlue; break; case 2: colorFont = clGreen; break; case 3: colorFont = clSkyBlue; break; case 4: colorFont = clMaroon; break; case 5: colorFont = clPurple; break; case 6: colorFont = clOlive; break; case 7: colorFont = clWhite; break; default: colorFont = clWhite; } ColorCount = 0; if (CheckBox8->Checked) ColorCount += 8; if (CheckBox5->Checked) ColorCount += 4; if (CheckBox6->Checked) ColorCount += 2; if (CheckBox7->Checked) ColorCount += 1; switch(ColorCount){ case 0: colorText = clBlack; break; case 1: colorText = clBlue; break; case 2: colorText = clGreen; break; case 3: colorText = clSkyBlue; break; case 4: colorText = clMaroon; break; case 5: colorText = clPurple; break; case 6: colorText = clOlive; break; case 7: colorText = clWhite; break; case 8: colorText = clGray; break; case 9: colorText = clHotLight; break; case 10: colorText = clLime; break; case 11: colorText = clHighlight; break; case 12: colorText = clRed; break; case 13: colorText = clFuchsia; break; case 14: colorText = clYellow; break; case 15: colorText = clCream; break; default: colorText = clBlack; } } void __fastcall TForm1::FormPaint(TObject *Sender){ SwitchColor(Sender); if(flag) colorText = colorFont; for(int i=0; i<16; i++) for(int j=0; j<8; j++) if(matrix[i][j] == 1){ DrawGrid1->Canvas->Brush->Color = colorText; DrawGrid1->Canvas->FillRect(DrawGrid1->CellRect(j,i)); } else { DrawGrid1->Canvas->Brush->Color = colorFont; DrawGrid1->Canvas->FillRect(DrawGrid1->CellRect(j,i)); } } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox1Click(TObject *Sender){ Timer1->Enabled = !Timer1->Enabled; } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox8Click(TObject *Sender){ FormPaint(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox2Click(TObject *Sender){ FormPaint(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox3Click(TObject *Sender){ FormPaint(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox4Click(TObject *Sender){ FormPaint(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox5Click(TObject *Sender){ FormPaint(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox6Click(TObject *Sender){ FormPaint(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::CheckBox7Click(TObject *Sender){ FormPaint(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender){ FormPaint(Sender); Timer2->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender){ flag = !flag; FormPaint(Sender); } Вывод: В лабораторной работе мы изучили байт атрибута и его параметры.
1/--страниц