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


 

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

27241. Виведіть рівновагу конкурентної фірми в короткому періоді при загальному та граничному підходах. За яких умов конкурентна фірма максимізує прибуток 33.33 KB
  Максимізація прибуткуконкурентною фірмою Мета фірми максимізація прибутку. Максимізація прибутку це максимізація різниці між валовим доходом і валовими витратами: ТК ТС. Передбачається що фірма враховує зміни величини витрат у процесі випуску продукції і вибирає той його обсяг який дасть максимум прибутку що і буде відповідати максимальній різниці ТR ТС. Основні підходидо визначеннямаксимізаціі прибутку Сукупнийаналіз використовує зіставлення сукупних величин.
27242. Проаналізуйте наступні варіанти вибору конкурентною фірмою оптимального випуску та оптимальної ціни: а) максимізації прибутку; б) мінімізації збитків; в) випадок незбитковості 32.41 KB
  Якщо ціна не менше від середніх змінних витрат Р =АVС то фірма повинна виробляти оптимальний рівень випуску. графік Максимізації прибутку конкурентною фірмою Максимізація прибутку досягається коли відрізок між TR і ТС найбільший відрізок АВ TR TC обсяг випуску Q. Точки С і D – точки критичного обсягу випуску продукції коли ТС = TR.
27243. Виведіть рівновагу на ринку досконалої конкуренції в довгому періоді. Яка умова цієї рівноваги? Як співвідносяться досконала конкуренція та ефективність 31.98 KB
  Вільний вхід і вихід з галузі; 5. Якщо умови діяльності несприятливі для фірми то вона може піти з ринку галузіДосконала конкуренція припускає рівний доступ всіх фірм до ресурсів у тому числі і до технологічної інформації. Тому в довгостроковому періоді кожна фірма може вибрати і реалізувати найефектніший варіант виробництва внаслідок чого криві загальних витрат всіх фірм однієї галузі буде ідентичний і можна говорити що в довгостроковому періоді галузь складається з однакових або типових фірм. Довгострокова крива галузі в цьому...
27244. Охарактеризуйте ознаки і причини існування монополії. Визначте ціну і обсяг виробництва в умовах чистої монополії 15.67 KB
  Визначте ціну і обсяг виробництва в умовах чистої монополії Економічна монополія є найпоширенішою. Коли монополіст вирішує підвищите ціну продукту йому нема чого турбуватися про конкурентів які знизивши ціну можуть захопити більшу частину ринку. Але це не означає що монополіст може призначати ціну яку він захоче. Призначаючи ціну нижче ціниконкуруючих фірм той або інший продавець може розраховувати на деякийзбільшення обсягу продажів.
27245. Як співвідноситься монополістична конкуренція з монополією та досконалою конкуренцією? Охарактеризуйте монополістичну конкуренцію і покажіть, як визначаються ціна та обсяг виробництва в умовах монополістичної конкуренції 18.2 KB
  монополі сти чно конкурентні фірми випускають подібні товари які мають багато замінників то попит на продукт кожної фірми є еластичний і подібно до монополії фірма займається пошуком оптимальної ціни і обсягу виробництва продукту які забезпечують їй максимальний прибуток Досконала конкуренція форма організації ринку яка передбачає конкуренцію великої кількості продавців і покупців і при цьому змагання між суб´єктами господарювання з метою отримання завдяки власним досягненням переваг над іншими суб´єктами господарювання відбувається...
27246. Визначте характер попиту на ресурси. Розкрийте механізм розподілу доходів у відповідності з теорією граничної продуктивності 24.8 KB
  Визначте характер попиту на ресурси. Попит на ресурси на відміну від попиту на споживчі блага пов'язаний з виробництвом яке здійснює конкретне підприємство фірма. Оскільки метою підприємства є максимізація прибутку то нею визначається й обсяг попиту на ресурси. Для розуміння процесу формування попиту на ресурси необхідно враховувати два моменти: 1 попит на ресурси залежить від попиту на економічні блага вироблені з цих ресурсів тобто попит на ресурси має похідний характер від попиту на продукти; 2 ціни на ресурси залежать від типу...
27247. Механізм ціноутворення на ринку праці. Проаналізуйте модель монопсонії і наведіть приклади монопсонічного ринку з української дійсності. Охарактеризуйте форми і системи заробітної плати 27.01 KB
  График спроса на труд монопсониста это снижающаяся часть кривой предельной доходности труда D = MRPL. Для получения максимальной прибыли монопсонист должен нанять такое количество рабочих при котором предельная доходность труда равна предельным издержкам труда MRPL = MRCL Для получения максимальной прибыли монопсонист должен нанять такое количество рабочих при котором предельная доходность труда равна предельным издержкам труда MRPL = MRCL. Однако монопсонист не будет устанавливать рабочим ставку заработной платы соответствующую...
27249. Проаналізуйте концепції еластичності попиту та пропозиції. Як їх можна застосувати на практиці 32.51 KB
  Як їх можна застосувати на практиці Эластичность спроса или предложения вычисляется как отношение процентного изменения величины спроса предложения к процентному изменению какойлибо детерминанты. производная функции спроса или предложения по цене; рыночная цена; величина спроса или предложения при данной цене основные свойства эластичности: Эластичность это безмерная величина значение которой не зависит от того в каких единицах мы измеряем объем цены или какиелибо другие параметры. Эластичность взаимно обратных функций ...