КР
.docxБЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет ФКСиС
Специальность ПОИТ
Индивидуальная практическая работа
по дисциплине «Аппаратное обеспечение компьютерной техники»
тема: «Исследование возможностей управления форматом кадра
контроллера видеотерминала»
Вариант 5
Выполнил студент: Бордон Е.С.
группа 991051
Зачетная книжка № 99105004
Минск 2020
Введение:
Регистр с индексом 13:
Логическая ширина экрана (OFR). Регистр может быть использован для отображения большего, чем обычно, количества символов в строке. Например, для перевода видеоадаптера в режим отображения 132 симвов в строке.
Регистр с индексом С:
Регистр старшего байта начального адреса (Start Address Register - SAR, high byte) .
Регистры SAR содержат адрес данных видеопамяти, которые будут отображаться в верхнем левом углу экрана дисплея. Регистры начального адреса можно использовать для перемещения изображения по экрану (панорамирования) и для переключения активной страницы памяти.
Для того чтобы использовать регистр для переключения страниц видеопамяти, в данный регистр надо записать желаемое смещение страницы на экране, относительно начала видеопамяти.
Регистр с индексом D:
Младший байт начального адреса (Start address Register - SAR, low byte)
Чтобы использовать регистры для переключения страниц видеопамяти, в данные регистры надо записать смещение страницы, которую вы желаете отобразить на экране, относительно начала видеопамяти.
Изменения в данных регистрах производятся на одну единицу в большую или меньшую сторону.
Программа написана в Turbo Pascal (With DOSBox).
Листинг программы:
program IPR;
uses CRT;
var
reg,regOut,initial:integer;
opt:char;
Procedure Reg13;
var
key:char;
begin
clrscr;
{print value of register 13}
port[$3d4]:=$13;
reg:=port[$3d5];
initial:=port[$3d5];
writeln('Register 13 has value = ',reg);
{change value of register 13}
key:='a';
repeat
writeln('To increase value of register 13 enter m');
writeln('To decrease value of register 13 enter l');
writeln('To go to main menu enter b');
readln(key);
clrscr;
case key of
'm': begin
reg:=reg+1;
port[$3d4]:=$13;
port[$3d5]:=reg;
port[$3d4]:=$13;
regOut:=port[$3d5];
writeln;
writeln('Register 13 has value =',regOut);
end;
'l': begin
reg:=reg-1;
port[$3d4]:=$13;
port[$3d5]:=reg;
port[$3d4]:=$13;
regOut:=port[$3d5];
writeln;
writeln('Register 13 has value =',regOut);
end;
end;
until key='b';
port[$3d4]:=$13;
port[$3d5]:=initial; {return initial value of register 13}
end;
Procedure RegC;
var
key:char;
begin
clrscr;
{print value of register C}
port[$3d4]:=$c;
reg:=port[$3d5];
initial:=port[$3d5];
writeln('Register C matters = ',reg);
{change value of register C}
key:='a';
repeat
writeln('To increase the value of register C enter m');
writeln('To decrease the value of register C enter l');
writeln('To go to the main menu, enter b');
readln(key);
clrscr;
case key of
'm': begin
reg:=reg+1;
port[$3d4]:=$c;
port[$3d5]:=reg;
port[$3d4]:=$c;
regOut:=port[$3d5];
writeln;
writeln('Register C matters =',regOut);
end;
'l': begin
reg:=reg-1;
port[$3d4]:=$c;
port[$3d5]:=reg;
port[$3d4]:=$c;
regOut:=port[$3d5];
writeln;
writeln('Register C matters =',regOut);
end;
end;
until key='b';
port[$3d4]:=$c;
port[$3d5]:=initial; {return initial value of register C}
end;
Procedure RegD;
var
key:char;
begin
clrscr;
{print value of register D}
port[$3d4]:=$d;
reg:=port[$3d5];
initial:=port[$3d5];
writeln('Register D matters = ',reg);
{change value of register D}
key:='a';
repeat
writeln('To increase the value of register D enter m');
writeln('To decrease the value of register D enter l');
writeln('To go to the main menu, enter b');
readln(key);
clrscr;
case key of
'm': begin
reg:=reg+1;
port[$3d4]:=$d;
port[$3d5]:=reg;
port[$3d4]:=$d;
regOut:=port[$3d5];
writeln;
writeln('Register D matters =',regOut);
end;
'l': begin
reg:=reg-1;
port[$3d4]:=$d;
port[$3d5]:=reg;
port[$3d4]:=$d;
regOut:=port[$3d5];
writeln;
writeln('Register D matters =',regOut);
end;
end;
until key='b';
port[$3d4]:=$d;
port[$3d5]:=initial; {return initial value of register D}
end;
begin
clrscr;
repeat
writeln('Select register number, press Enter');
writeln('1 - 13');
writeln('2 - C');
writeln('3 - D');
writeln('Exit - enter 0');
readln(opt);
case opt of
'1': Reg13;
'2': RegC;
'3': RegD;
Else
writeln('Invalid registration number');
end;
until opt='0';
end.
Результат работы программы:
Главное меню:
Регистр 13 по умолчанию:
Регистр 13 на единицу больше:
Регистр 13 на единицу меньше:
Регистр C по умолчанию:
Регистр C на единицу больше:
Регистр C на единицу меньше:
Регистр D по умолчанию:
Регистр D на единицу больше:
Регистр D на единицу меньше: