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


 

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

39023. Понятие индустриального проектирования 231.5 KB
  Ключевые аспекты технологии индустриального проектирования: Реорганизация реинжиниринг бизнеспроцессов; Моделирование предметной проблемной области; Средства автоматизированного проектирования ИС CSEсредства; Возможность применения типовых решений типовое проектирование. Понятие и виды бизнеспроцессов Определение. Под бизнеспроцессом БП будем понимать совокупность взаимосвязанных операций работ по изготовлению готовой продукции или выполнению услуг на основе потребления ресурсов. Основные черты бизнеспроцессов: Все...
39024. Автоматизированное проектирование ИС (CASE-технология) 76 KB
  Изначально CSEсредства были ориентированы на разработку ПО. Сейчас чаще всего под такими средствами подразумевают любые средства проектирования ИС и или моделирования предметной области. CSEсредства охватывают все стадии ЖЦ ИС анализ проектирование разработка сопровождение. Инструментальные средства – CSEсредства.
39025. Типовое проектирование ИС 58 KB
  Сущность: Является одной из разновидностей индустриального проектирования. Содержание: Процесс проектирования ИС состоит из следующих основных этапов: Разбиение проекта информационной системы на отдельные составляющие компоненты. Основная цель применения ТПР – уменьшение трудоемкости и стоимости проектирования и или разработки ИС.
39026. Основные понятия технологии проектирования информационных систем 66 KB
  Основные понятия технологии проектирования информационных систем Понятие и сущность проектирования ИС Определение Проектирование от лат. Обладает возможностью последовательной детализации и конкретизации могут быть выделены стадии этапы проектирования. Предполагает возможность частичной автоматизации Традиционные виды проектирования: архитектурностроительное машиностроительное технологическое. Проектирование информационных систем – сравнительно новый вид проектирования.
39027. Жизненный цикл информационных систем 92 KB
  Поэтому с точки зрения проектирования ИС имеет смысл говорить о модели жизненного цикла. Модель жизненного цикла ИС – это модель создания и использования ИС отражающая ее различные состояния начиная с момента возникновения необходимости в данном комплексе средств и заканчивая моментом его полного выхода из употребления у пользователей. Вопрос к семинарскому занятию: можно ли назвать моделью жизненного цикла такую модель которая бы охватывала не все возможные состояния ИС а только некоторую их часть. Модель жизненного цикла и технология...
39028. Каноническое проектирование информационных систем 126 KB
  В зависимости от сложности объекта автоматизации и набора задач требующих решения при создании конкретной ИС стадии и этапы работ могут иметь различную трудоемкость. Формирование требований к ИС включает в себя следующие этапы: Обследование объекта и обоснование необходимости создания ИС; Формирование требований пользователя к ИС; Оформление отчёта о выполненной работе и заявки на разработку ИС тактикотехнического задания Обследование объекта автоматизации ОА – важнейшая составляющая предпроектной стадии. Обследование объекта...
39029. Проектирование информационного обеспечения ИС 188 KB
  Информационное обеспечение совокупность единой системы классификации и кодирования информации унифицированных систем документации схем информационных потоков циркулирующих в организации а также методология построения баз данных. Понятие и виды информационного обеспечения Информационное обеспечение ИС является средством для решения следующих задач: однозначного и экономичного представления информации в системе на основе кодирования объектов; организации процедур анализа и обработки информации с учетом характера связей между...
39030. Базовые технологии доступа к БД в Borland C++ Builder 159 KB
  Указания к выполнению лабораторной работы Процессор баз данных Borlnd Dtbse Engine – не единственный механизм организации доступа к данным в БДприложениях. Важным примером таких разработок является технология ODBC которая на сегодняшний день стала фактическим отраслевым стандартом работы с базами данных из клиентских приложений. Аббревиатура ODBC расшифровывается как Open DtBse Connectivity что можно перевести как открытая система связи с базами данных. В системе взаимодействия приложений с базами данных посредством ODBC принято...
39031. Базовые технологии доступа к БД в Borland C++ Builder. Лабораторная работа 125.5 KB
  Указания к выполнению лабораторной работы Ранее уже говорилось что наборы данных представляют собой группы записей переданных из базы данных в приложения для просмотра и редактирования. Каждый набор данных инкапсулирован в специальном компоненте доступа к данным. Основные свойства и методы базового класса наборов данных TDtSet уже были рассмотрены нами ранее.