4054

Написание программы для работы с видеопамятью

Лабораторная работа

Информатика, кибернетика и программирование

Постановка задачи Написать программу, которая будет работать с видеопамятью. Можно выполнить любое из приведенных ниже заданий. Независимо от конкретного задания программа должна работать резидентно. Текст, присутствовавший на экране до запуска п...

Русский

2012-11-12

73.5 KB

22 чел.

1. Постановка задачи

Написать программу, которая будет работать с видеопамятью. Можно выполнить любое из приведенных ниже заданий. Независимо от конкретного задания программа должна работать резидентно. Текст, присутствовавший на экране до запуска программы, не должен портиться никаким образом.

В программе следует использовать два обработчика прерываний – прерываний таймера и прерываний клавиатуры. Прерывания таймера регламентируют скорость перемещения объекта, причем параметр, характеризующий величину скорости, необходимо задавать с клавиатуры при запуске программы. Информация о параметре, задающем скорость движения, должна выводиться на экран при запуске программы без параметров.

В случае смещения строк на экране (нажатие клавиши ENTER) не должно происходить никаких нежелательных эффектов – раздвоения картинки, дублирования строк или их частей…

Вариант 5(1) «Свободное движение»:

Черный (или цветной) квадратик (или иной объект) «летает» по экрану, содержащему некоторый текст, и отражается от границ экрана. Движение продолжается до нажатия клавиши <Esc> или некоторой нестандартной комбинации клавиш.

 

2. Входные данные программы.

В качестве параметра командной строки в программу передаётся скорость движения объекта. Если программа запущена без параметров, то используется стандартное значение, установленное в программе.

3. Описание основных переменных и подпрограмм.

Константы.

Symbol – вид символов (Char), из которых состоит движущийся объект;

Color – цвет этих символов.

Переменные

Scr – массив для доступа к видеопамяти;

OldHandler, OldHandler2 – старые обработчики прерываний таймера и клавиатуры;

Speed – скорость движения объекта;

t – счётчик времени таймера;

X, Y – текущее положение объекта (координаты левого символа);

dx, dy – приращение значений для координат X, Y при движении объекта;

t1, t2 – символы экрана, закрытые движущимся объектом.

Процедуры.

Handler – обработчик прерываний таймера;

Handler2 – обработчик прерываний клавиатуры.

4. Алгоритм решения задачи

  1.  Проверка параметра командной строки и установка скорости движения объекта в соответствии с параметром (или его отсутствием).
  2.  Инициализация переменных начальными значениями.
  3.  Установка своих обработчиков прерываний таймера и клавиатуры.
  4.  Движение объекта с помощью обработчика прерываний таймера по истечении времени, зависящего от установленной скорости движения. При смещении объекта проверяется возможность сдвинуть объект при текущих значениях приращений dx, dy. Если это невозможно, то вычисляются новые значения приращений. После этого из t1 и t2 восстанавливаются символы, закрытые объектом, потом в t1 и t2 делаются копии символов с новыми координатами, и отображается сам объект на новом месте.
  5.  Обработчик прерываний клавиатуры проверяет, нажата ли клавиша «Ввод» в 25-й строке, и если нажата, то корректирует текущие координаты объекта и косвенно вызывает его смещение.

Движущийся объект представляет собой две жёлтые рядом расположенные звезды.

5. Исходный код программы.

program lab5;

{$M $1000, 0, 0}

{$R+ $S+}

uses

 Crt, Dos;

const

 Color = Yellow;

 Symbol = '*';

var

 Scr: Array[1..25, 1..80] of Record

   Symbol: Char;

   Attr: Byte

 end Absolute $B800:$0000;

 OldHandler, OldHandler2: Procedure;

 Speed, t: Word;

 dx, dy: Shortint;

 X, Y: Integer;

 t1, t2: Record

   Symbol: Char;

   Attr: Byte;

 end;

{$F+}

procedure Handler; Interrupt;

begin

 Inc(t);

 if t > 20 div Speed then begin

   t := 0;

   Scr[Y, X].Symbol := t1.Symbol;

   Scr[Y, X].Attr := t1.Attr;

   Scr[Y, X + 1].Symbol := t2.Symbol;

   Scr[Y, X + 1].Attr := t2.Attr;

   while (X + dx > 79) or (X + dx < 1) or (Y + dy > 25) or (Y + dy < 1) do begin

     case Random(4) of

       0: dx := -1;

       1: dx := 1;

       2: dx := 2;

       3: dx := -2;

     end;

     case Random(4) of

       0: dy := -1;

       1: dy := 1;

       2: dy := 2;

       3: dy := -2;

     end;

   end;

   X := X + dx;

   Y := Y + dy;

   t1.Symbol := Scr[Y, X].Symbol;

   t1.Attr := Scr[Y, X].Attr;

   t2.Symbol := Scr[Y, X + 1].Symbol;

   t2.Attr := Scr[Y, X + 1].Attr;

   Scr[Y, X].Symbol := Symbol;

   Scr[Y, X].Attr := Color;

   Scr[Y, X + 1].Symbol := Symbol;

   Scr[Y, X + 1].Attr := Color;

 end;

 Inline($9C);

 OldHandler;

end;

{$F-}

{$F+}

procedure Handler2; Interrupt;

begin

 if (Port[$60] = $1C) and (WhereY = 25) then begin

   Dec(Y);

   t := High(t);

 end;

 Inline($9C);

 OldHandler2;

end;

{$F-}

var

 i, C1, C2: Integer;

begin

 Val(ParamStr(1), Speed, C1);

 if ParamCount = 0 then

   Speed := 7

 else if (C1 <> 0) or (Speed < 1) or (Speed > 20) then begin

   WriteLn('Неправильно заданы параметры.');

   WriteLn('Должен быть один параметр - скорость движения объекта (1..20)');

   ReadKey;

   Halt;

 end;

 t := 0;

 dx := 0;

 dy := 1;

 X := 30;

 Y := 15;

 t1.Symbol := Scr[Y, X].Symbol;

 t1.Attr := Scr[Y, X].Attr;

 t2.Symbol := Scr[Y, X + 1].Symbol;

 t2.Attr := Scr[Y, X + 1].Attr;

 if WhereY = 25 then Dec(Y);

 Randomize;

 GetIntVec($9, @OldHandler2);

 SetIntVec($9, Addr(Handler2));

 GetIntVec($8, @OldHandler);

 SetIntVec($8, Addr(Handler));

 Keep(0);

end.

6. Результаты работы программы

м

7. Ответы на контрольные вопросы

  1.  Вопрос: Какова структура видеопамяти в текстовом режиме?

Ответ: Для представления одного знакоместа отводится два байта: первый байт хранит отображаемый символ, второй – его цветовые атрибуты. В итоге в текстовом режиме для хранения образа всего экрана используется 80252 = 4000 байт. Адрес начала видеопамяти в общем пространстве оперативной памяти компьютера равен $B800:$0000 для всех текстовых режимов (кроме режима Mono).

  1.  Вопрос: Как удобно организовать обращение к любой точке экрана?

Ответ: Описать как массив и использовать прямую адресацию:

var Scr: Array[1..25, 1..80] of Record

     Symbol: Char;

     Attr: Byte;

   end Absolute $B800:$0000;

Тогда к любой точке экрана можно обращаться как к элементу массива.

  1.  Вопрос: Каким образом можно изменить цвет выводимого символа? Цвет фона?

Ответ: Менять атрибуты. Цвет выводимого символа меняется через поле Attr, описанного выше массива, а для изменения цвета фона в массив нужно добавить ещё одно измерение.

  1.  Вопрос: Какие действия необходимо предпринять для восстановления прежнего состояния экрана после каких-то его изменений?

Ответ: Нужно заранее делать копию массива Scr (либо части этого массива, которую нужно потом восстановить), и потом из копии восстанавливать.


 

А также другие работы, которые могут Вас заинтересовать

34316. Пути рационального использования природного сырья 22.5 KB
  Пути рационального использования природного сырья Известно что экономика производства зависит от характера использования сырья. Наиболее важными из них являются: правильный выбор сырья комплексная его переработка повторное использование высококачественная первичная обработка и обогащение максимальное использование отходов производства. Выбор сырья определяет тип применяемого технологического оборудования характер технологии длительность производственного цикла и влияет на многие техникоэкономические показатели работы предприятий....
34317. Методы обогащения сырьевых материалов 24 KB
  Методы обогащения сырьевых материалов Качество сырья состав и свва в значительной степени характеризуют техникохимические показатели производства. Оно выражается содержанием полезных элементов в руде либо другом виде сырья. Известны такие методы обогащения сырья как физические механический термический электромагнитный метод гравитационного обогащения и др. применение более чистого концентрированного сырья позволяет получить качественную продукцию которая обладает более высокой стоимостью.
34318. Обогащение сырьевых материалов методами флотации и выщелачивания 24 KB
  Обогащение сырьевых материалов методами флотации и выщелачивания Наиболее широко применимы такие методы обогащения как флотация и выщелачивание. Скорость выщелачивания зависит от структуры степени пористости размера пор обрабатываемого материала. Чем выше содержание растворимой фазы и крупнее поры тем быстрее идет процесс выщелачивания. На процесс выщелачивания влияет также тонона измельчения.
34319. Концентрирование сырьевых материалов и выделение полезного компонента методом выпаривания, кристаллизации, фильтрации 24 KB
  Выпаривание метод выделения растворителей из раствора. Пути возможной экономии тепла комбинированные выходные установки сочетание более концентрированного раствора с низкой энергопотребляемостью при удалении растворителя. Процесс выпаривания состоит из двух стадий: 1 удаление основного количества воды 2 выпаривание самого концентрированного раствора. Кристаллизация образование новой твердой фазы из раствора расплава.
34320. Утилизация отходов как основа безотходных и малоотходных технологий 22.5 KB
  Важно максимально использовать отходы тогда снижается использование материалов и расход энергии. Эти предприятия можно будет закрыть если мы научимся использовать отходы. Отходы изношенной футеровки при кладке печей. Отходы микробиологической промышленности: основной лигнин до 1 т в год.
34321. Отходы химической промышленности и способы их утилизации 21.5 KB
  Отработанные масла используют для производства бетонов битума т. Также используется для производства гипсокартонных листов для изоляции. Основной проблемой переработки отходов калийного производства является переработка природного сырья сильвинита KCLNCLнерастворимый осадок KCL полезный компонент который используется в качестве удобрения. Утилизация галита: закладка шахтного производства готовиться суспензия галит вода её под давлением в 20 атмосфер закачивают в место выработки.
34322. Отходы деревообрабатывающей и гидролизной промышленности и способы их утилизации 24.5 KB
  Переработка леса – это не только переработка древесины как сырья: технологии рубок транспортировка хранение древесины лесопиление т. В результате неправильной эксплуатации леса может усилиться эрозия увеличиться заиление водных объектов нарушиться гидрологический режим что приведет в свою очередь к усилению паводков нехватке воды и деградации водных экосистем произойдет сокращение генетических ресурсов обострятся социальноэкономические проблемы. Вторичные леса то есть леса появившиеся на месте вырубленных первичных лесов...
34323. Влияние промышленных и бытовых отходов на экономию 24.5 KB
  продукты отходы пром. По физическому состоянию отходы делятся на 3 группы: при сжигании твердого топлива золы из неоплавленных. Отходы легкоплавкие до 1000 градусов среднеплавкие 10001300 и тугоплавкие 1300 и более. Отходы используют как пластифицирующие добавки в битумное прово что увеличивает прочность материала в 2 р.
34324. Вторичное сырье и его классификация 24.5 KB
  продукты отходы пром. По физическому состоянию отходы делятся на 3 группы: при сжигании твердого топлива золы из неоплавленных. Отходы легкоплавкие до 1000 градусов среднеплавкие 1001300 и тугоплавкие 1300л более. Отходы используют как пластифицирующие добавки в битумное прово что увеличивает прочность материала в 2 р.