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 (либо части этого массива, которую нужно потом восстановить), и потом из копии восстанавливать.


 

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

81038. Азиатско-Тихоокеанское экономическое сотрудничество (АТЭС). Евразийское экономическое сообщество (ЕврАзЭс). Ассоциация государств Юго-Восточной Азии. (АСЕАН) 39.91 KB
  АСЕАН. Задачи Завершение оформления в полном объёме режима свободной торговли формирование общего таможенного тарифа и единой системы мер нетарифного регулирования Обеспечение свободы движения капитала Формирование общего финансового рынка Согласование принципов и условий перехода на единую валюту в рамках ЕврАзЭС Установление общих правил торговли товарами и услугами и их доступа на внутренние рынки Создание общей унифицированной системы таможенного регулирования Разработка и реализация межгосударственных целевых программ Создание...
81039. Внешняя политика США 1991-2000 годах 39.62 KB
  На фоне разнообразных и зачастую противоречивых тенденций в американской политической и научной элите в 1990-е гг. формировалась внешняя политика. Ее целью, как и целью внешней политики любой страны, являлось формирование оптимального внешнеполитического курса
81040. Внешняя политика США 2000-2011 годах 41.12 KB
  Власть Буша пришла к власти в тот период когда в американском истэблишменте и обществе утвердилось мнение о мировом лидерстве США. Основным внешнеполитическим тезисом американских политиков стало утверждение о том что беспрецедентная мощь Соединенных Штатов...
81041. Проблема мировой политики (Международная безопасность и ее военные аспекты, Проблемы конфликтов, Проблема права в МО) 44.98 KB
  Проблема мирового права. Наличие международного права позволяет уменьшить неопределенность в межгосударственных отношениях стабилизирует их. Источниками международного права стали следующие: Международный обычай признанный как норма цивилизационных отношений.
81042. Внешняя политика РФ в 1990-е годы 39.71 KB
  Предстояло добиться признания России в качестве правопреемницы бывшего Советского Союза в ООН а также помощи западных стран в проведении курса реформ. Важная роль отводилась внешней торговле России с зарубежными странами. началось дипломатическое признание России.
81043. Внешняя политика РФ в начале 21-го века 39.4 KB
  Изменение ситуации в мире приводит к возникновению нескольких исторических вызовов России что диктует необходимость скорректировать ее политику. Там где позволяют условия в Белоруссии и возможно в Армении России следует содействовать относительно безболезненной смене правящих режимов предоставляя при этом соответствующие гарантии. Что делать Требовать включения в НАТО самой России Это наверное малореалистично к тому же может препятствовать необходимому усилению азиатского вектора отечественной политики. Несмотря на все имеющиеся...
81044. Образование СНГ. Становление отношений РФ со странами СНГ 43.13 KB
  Становление отношений РФ со странами СНГ Содру́жество Незави́симых Госуда́рств СНГ региональная международная организация международный договор призванная регулировать отношения сотрудничества между странами ранее входившими в состав СССР. СНГ не является надгосударственным образованием и функционирует на добровольной основе. СНГ было основано главами БССР РСФСР и Украины путём подписания 8 декабря 1991 года в Вискулях Беловежская пуща под Брестом Беларусь Соглашения о создании Содружества Независимых Государств известно в СМИ...
81045. Интеграционные процессы в странах СНГ 44.53 KB
  После получения независимости страны СНГ при наличии разности видения перспектив и возможностей строят рыночную экономику и демократические государства. Национальная идея как основа государственности получила закрепление в преамбуле многих конституций стран СНГ. В процессе жизнедеятельности страны СНГ прошли сложный путь само индетификации определения целей прерогатив развития.
81046. Этапы эволюции ЕС. Правовая основа ЕС 48.21 KB
  Хартию основных социальных прав трудящихся призванную сделать более гармоничными индивидуальные и коллективные права трудящихся и закрепить уже завоеванные права. Европейское право является самостоятельной правовой системой находящейся на стыке национального права государств-членов ЕС и права международного. К функциональным принципам относятся принцип верховенства права и принцип прямого действия. Принцип верховенства права ЕС означает приоритет норм права ЕС над нормами национального...