Орион-128/Радио 08,09-91/Графический редактор PENX

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: В. СУГОНЯКО, В. САФРОНОВ

Источник: http://retro.h1.ru/Orion/Penx/Penx1.php

Графический редактор PENX является средством, позволяющим создавать монохромные и цветные графические образы, хранить их в виде библиотеки стандартных файлов, редактировать. Цветовой режим, используемый графическим редактором, — 16-цветный (режим 2).

Областью применения PENX может стать создание различных схем, таблиц, графиков, рисунков, предназначенных для вывода на печать, графических фрагментов (спрайтов) для использования их во всех видах прикладных и игровых программ, а также разработка динамичных рекламных и учебных роликов, заставок.

Редактор рассчитан на работу с операционной системой ORDOS (версия не ниже 2.4) на ПРК «ОРИОН» с минимальным объемом ОЗУ 128К.

УСТАНОВКА ПРОГРАММЫ

Для того чтобы включить программу графического редактора в нашу библиотеку, вам необходимо ввести коды, приведенные в табл.1 (поблочные контрольные суммы приведены в табл.2), начиная с нулевого адреса ОЗУ и, также как мы это делали раньше, сохранить программу на квазидиске директивой «S» операционной системы:

B>S PENX , 1FEF [ВК],

а затем записать ее на магнитную ленту с помощью программы обмена с магнитофоном «СН$».

КОНТРОЛЬНЫЕ СУММЫ

0000 — 00FF 6327
0100 — 01FF FBA2
0200 — 02FF AF5F
0300 — 03PF 0BA4
0400 — 04FF 3A9C
0500 — 05FF 9F54
0600 — 06FF 50E2
0700 — 07FF EDA5
0800 — 08FF D4E9
0900 — 09FF 9587
0A00 — 0AFF 15CF
0B00 — 0BFF 8D6B
0C00 — 0CFF FDC1
0D00 — 0DPF B570
0E00 — 0EPF 41A8
0F00 — 0FFF 64D6
1000 — 10FF B3FA
1100 — 11FF 5C08
1200 — 12FF 5DF6
1300 — 13PF 05C8
1400 — 14FF 86E8
1500 — 15FF A0FB
1600 — 16FF D879
1700 — 17FP 0875
1800 — 18FF P040
1900 — 19FF E342
1A00 — IAFF 50F2
1B00 — 1BFF IFCC
1C00 — 1CFF F64D
1D00 — 1DFF 6DCF
1E00 — 1EFF FE9E
1F00 — 1FFF 620C

Имя программы — «PENX$» не является зарезервированным, то есть так же, как «BASIC$» и все другие имена, которые мы присваиваем нашим программам, может быть изменено. Однако, учитывая тот факт, что операционная система допускает такой механизм выполнения программ, при котором одна программа вызывает следующую, пользуясь ее стандартным именем, а также во избежание путаницы при ссылках на программы, мы советуем все же использовать предлагаемые имена.

НАЧАЛО РАБОТЫ

Графический редактор работает с цветной экранной графикой, поэтому, также как и «BASIC$», накладывает ограничения на размер заполненной файлами области квазидиска. Эти ограничения еще более жесткое, чем для программы «BASIC$»: дополнительная страница памяти (квазидиск) должна быть заполнена не более чем до адреса 7FFFH, вся область с адреса 8000Н должна оставаться свободной. Обусловлено это тем, что программа использует две экранные области — 8000H-AFFFH и 0С000Н-0EFFFH. Если это условие не соблюдено, то, также как и при попытке некорректного запуска программы «BASIC$», будет выведено сообщение «ДИСК!» и управление вернется к ОС. Кроме того, при работе с программой «PENX$» надо учитывать, что результаты работы программы записываются в виде файлов на квазидиск, и для них тоже надо оставить место.

После загрузки программы «PENX$» директивой «L» на экране появляется заставка, содержащая информацию о программе и короткое сообщение-запрос в нижней строке экрана: «F1/…?», означающее, что далее вы можете нажать либо клавишу F1, либо любую другую.

При нажатии F1 редактор переходит в режим переназначения управляющих клавиш. Если вам по каким-либо причинам неудобно пользоваться теми клавишами управления, которые устанавливаются автоматически при загрузке программы, вы можете выбрать другие. Нажатие вместо F1 любой другой клавиши приведет к началу работы с графическим редактором. Если при вызове программы «PENX$» удерживать нажатой любую клавишу (можно просто несколько дольше удерживать нажатой клавишу ВК при выполнении директивы «L»), то все установочные процедуры блокируются и редактор сразу переходит в рабочий режим.

ПОРЯДОК РАБОТЫ

Для управления редактором необходимо всего 10 клавиш: 8 из них используются для перемещения по экрану графического курсора — пера и 2 — для перемещения светящегося указателя в меню. В том варианте программы, который вам предлагается, управление осуществляется с помощью малой клавиатуры (стандарт РК-86), так как это показано на рис.1. Несмотря на несоответствие обозначений на клавишах их назначению, такое расположение клавиш наиболее удобно — после небольшой практики вы сможете работать не глядя на клавиатуру, и работа в этом случае напоминает работу с джойстиком. Конечно, если у вас клавиатура другого типа, вам, возможно, придется переназначить клавиши управления.

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

Меню редактора двух видов горизонтальные и вертикальные. В горизонтальном меню выполнение функции, написанной в каждой графе, происходит сразу же при установке на данную графу указателя: например, «рисовать» сразу включает режим рисования, «стирать» — стирания, «меню» — происходит переход в другое меню.

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

Основное меню включает в себя следующие функции:

ДОС
ЦВТН./МНХР.
АВТОЗАПИСЬ
КООРД.
ДУГА
ОКРУЖНОСТЬ
линия
КЛАВИАТУРА
СЕТКА
ОКНО
РИСУНОК

Рассмотрим более подробно каждую из них.

РИСУНОК

Работа в этом режиме не требует особых пояснений и напоминает обычную работу с карандашом и ластиком на листе бумаги. Из режима РИСУНОК можно перейти в следующее меню — ЛИНЗА, вызывающее 8-кратное увеличение того места рисунка, в котором в данный момент находится перо. В правой части экрана в то же время можно наблюдать фрагмент экрана без увеличения, причем место, увеличиваемое линзой, выделяется пунктирной рамкой.

В каждом меню есть позиция с надписью МЕНЮ или ВЫХОД. Установив указатель в это положение, вы переходите в предыдущее меню. Так, из режима ЛИНЗА можно вернуться обратно в режим РИСУНОК, а из РИСУНКА — в основное меню.

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

Наибольшую сложность при работе с редактором может вызвать цвет. Для окрашивания рисунков необходимо помнить, что все точки одной горизонтальной строки экрана разбиты на «байты» (которые действительно соответствуют байтам экранного ОЗУ) по 8 точек в каждом, и отсчет точек ведется от левого края строки. Число от О до 7 в нижней левой части экрана показывает, на какой по счету точке в «байте» находится графический курсор. Это число можно определить, как горизонтальную координату курсора по модулю 8. Все точки в «байте» могут быть окрашены только в два из 15 возможных цветов — цвет фона и цвет переднего плана. Фоновые точки в линзе изображаются окаймленным квадратом, точки переднего плана — полностью закрашенными. В режимах РИСОВАТЬ и СТИРАТЬ при движении курсора происходит перекрашивание всех точек «байта» в последний выбранный цвет, фон при этом остается неизменным, таким же, как и в первоначальном рисунке. После выбора другого фона наоборот — точки изображения не меняются и сохраняют свой первоначальный цвет, а точки фона перекрашиваются во всем «байте» в выбранный. Таким образом, создание сложно окрашенных красочных рисунков требует некоторых навыков и предварительного «просчета» расположения рисунка и его частей.

ОКНО

Режим ОКНО — наиболее мощный и чаще всего используемый инструмент в редакторе. Обычно в режимах РИСУНОК, ОКРУЖНОСТЬ и пр. Создаются заготовки для будущего графического образа или объекта (например, схемы), затем, используя ОКНО, делают основную часть работы — размножают и расставляют на свои места повторяющиеся элементы, отрезки линий, надписи и пр.

Включив режим ОКНО, вы увидите прямоугольник, ограничивающий некоторую часть экрана. Именно эта область экрана и считается окном (включая точки, принадлежащие границе). Окно можно перемещать по экрану в любом направлении, изменять его размеры. Выбрав необходимое положение окна на экране и его размер, вы можете перейти в следующее меню (оно обозначается как ДОП. МЕНЮ). Используя функции, перечисленные в этом дополнительном меню, можно проделать с изображением в окне следующие процедуры:

  • ДВ.ФРАГМ. — перемещать монохромное изображение по экрану и если надо, то размножить его;
  • НЕГАТИВ — проинвертировать изображение внутри окна;
  • ЗЕРКАЛО 1 — получить зеркальное отображение (перевернутое по вертикали);ЗЕРКАЛО 2 — получить зеркальное отображение (перевернутое по горизонтали);
  • СТЕРЕТЬ — стереть изображение внутри окна:
  • ОКР.ИЗОБ. — окрасить точки переднего плана в один из 15 цветов, атрибуты фона при этом не меняются;
  • ОКР.ФОН — изменить цвет фоновых точек, цвет точек переднего плана остается прежним.

В этом же меню находятся функции работы с квазидиском:

  • УНИЧТ.СПР. — уничтожить графический файл (спрайт) на квазидиске (директива, аналогичная директиве Е операционной системы);
  • СОХР.СПР. — создать на квазидиске графический файл;
  • ЧИТ.МНХР — считать с диска графический файл и вывести на экран (только передний план, то есть монохромное изображение):
  • ЧИТ.ЦВТН — считать с диска графический файл и вывести на экран передний план вместе с атрибутами цвета.

Графические файлы должны обязательно иметь имя, включающее в себя стандартное расширение «.PC». По этому расширению программа опознает «свои» файлы и включает их в каталог. При создании новых файлов им автоматически присваивается имя 1р4N.PC, где N — порядковый номер. По окончании работы с редактором вы можете переименовать эти файлы по своему усмотрению, обязательно лишь сохранить расширение, например, «FIG1.PC».

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

Так же, как и в режиме РИСУНОК, наибольшие проблемы, скорее всего, вызовет работа с цветными картинками. Если для монохромных изображений можно выбирать произвольный размер окна и как угодно перемещать их по экрану, то для цветных ограничения, накладываемые «байтовой» структурой экрана, создают определенные сложности. Для облегчения работы при всех манипуляциях с окнами в левом нижнем углу экрана выводятся две цифры от 0 до 7 — они показывают положение в «байте» соответственно левой и правой вертикальных границ окна. Оптимальное, с точки зрения работы с цветными картинками, сочетание этих цифр 07. Если это условие не соблюдается, то возможно несколько некорректное выполнение некоторых функций, впрочем, совершенно не нарушающих работу редактора. Так, функции ОКРАСИШЬ ИЗОБРАЖЕНИЕ и ОКРАСИТЬ ФОН окрасят чуть большую площадь — до ближайших значений 0 влево и 7 вправо, выполнение функции ЧИТАТЬ ЦВЕТНОЕ вызовет несовмещение изображения и его цветовых атрибутов, однако небольшим смещением изображения относительно цвета это легко поправить.

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

СЕТКА

Режим СЕТКА является вспомогательной функцией. Пользуясь ею, можно вывести на экран координатную сетку с шагом 8 на 8 точек. Повторным выполнением этой функции координатная сетка выключается.

КЛАВИАТУРА

Режим позволяет делать текстовые надписи стандартным шрифтом, при этом все клавиши соответствуют своему обычному назначению, кроме клавиши стирания экрана. Нажатием на эту клавишу происходит возврат в основное меню. Если до начала работы с графическим редактором обслуживание дисплея переключено на другой драйвер (переключаемый вход драйвера дисплея OF3CDH), то надписи будут делаться тем шрифтом, который выводит он. Кроме того, есть возможность воспользоваться другим шрифтом благодаря замен штатного знакогенератора (напомним, знакогенератор располагается в адресах OFOOOH — OF2FFH).

ЛИНИЯ

В этом режиме на экране присутствуют два графических курсора: перо и крест. При рисовании линии они определяют ее концевые точки. Проведение линий с помощью этой функции (а также при рисовании окружностей и дуг) точки рисуемой фигуры выводятся на экран по алгоритму «исключающего или», то есть там, где изображение есть, оно стирается, где его нет — появляется. Это обстоятельство можно использовать для исправления ошибочных построений: неправильно проведенную линию легко можно стереть, проведя по ней линию еще раз; это свойство касается также дуг и окружностей.

ОКРУЖНОСТЬ

Установите центр окружности (обозначается на экране крестом), перейдите на функцию ОКРУЖНОСТЬ и нажимайте любую клавишу, кроме клавиши СТИРАНИЕ ЭКРАНА, — окружность будет увеличиваться. При нажатии клавиши СТИРАНИЯ ЭКРАНА — уменьшаться.

ДУГА

Для проведения дуги установите крест в центр воображаемой окружности, которой будет принадлежать дуга. Перо поставьте в точку начала дуги. Установив эти точки, перейдите на функцию ДУГА, нажмите и держите в нажатом состоянии любую клавишу — дуга будет строиться от начальной точки в направлении против часовой стрелки. Из-за ограниченных вычислительных возможностей редактора не стоит пытаться получить дуги очень большого радиуса.

КООРДИНАТЫ

При выполнении этой функции в режимах РИСУНОК и ЛИНЗА в левом нижнем углу экрана индицируются десятичные координаты по осям Х и Y графического курсора. Индикация отключается повторным выполнением функции.

АВТОЗАПИСЬ

Все ваши действия при работе с графическим редактором могут быть записаны в специально отведенный для этой цели буфер и потом повторены самой программой PENX$ автоматическом режиме. Размеры буфера ограничены (может быть записано только около 15ОО различных действий). Запись действий начинает вестись всегда, начиная с момента запуска редактора. Сигналом того, что буфер исчерпан и запись больше не ведется, служит появление в основном меню символа «+» перед директивной АВТОЗАПИСЬ. Для перехода в режим автоматического выполнения служит функция ПОВТОР. Запись ваших действий может быть, также как и спрайт, оформлена в виде файла и записана на диск. Файлу при этом присваивается имя PGMP.

Режим АВТОЗАПИСЬ является более демонстрационным, чем рабочим, однако пользуясь им, вы можете сделать, например, «мультик» для детей или динамичный учебный ролик, не прибегая при этом ни к каким другим языкам и средствам программирования. Для того чтобы научиться пользоваться этим режимом, вам надо учесть следующее: перед тем, как начать создание ролика, убедитесь в том, что на квазидиске есть достаточно места для сохранения файла PGMP и необходимых графических фрагментов, в противном случае ваши усилия могут пропасть даром. Заблаговременно создайте редактором необходимые для вашего ролика спрайты, сохраните их на диске.

После того, как это сделано, перезапустите программу PENX$ снова и, пользуясь ранее созданными образами и добавляя по мере надобности новые графические элементы, реализуйте сценарий вашего ролика. Старайтесь действовать при этом по возможности оптимально, то есть без лишних и ошибочных действий, так как отредактировать запись нельзя. По окончании работы сохраните на диске файл PGMP. Таким образом, результатом вашей работы будет пакет файлов, состоящий из файла PGMP и нескольких графических файлов *.рс.

Необходимо помнить, что при запуске программы в режиме автоматического повтора файлы *.рс должны присутствовать на диске в том же количестве, что и до начала создания ролика, кроме того, порядок их следования на диске также должен быть сохранен (имена при этом не имеют значения, единственное условие — наличие в имени расширения .РС). Несоблюдение этих условий приведет к некорректному выполнению «ролика».

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

ЦВТН./МНХР.

Включение и выключение цвета. При переходе в режим МОНОХРОМ все функции работы с цветом графического редактора продолжают действовать, отключается только цветной вывод на дисплей.

ДОС

Окончание работы с программой и передача управления ORDOS. При выполнении происходит очистка экрана, максимальный размер квазидиска устанавливается равным 0EFFFH.

В. САФРОНОВ, В. СУГОНЯКО

Московская обл.


Отсканировано с журнала Радио № 8 1991 г.

Отредактировано Лесных Ю. 2001 г.

Дополнение

Остановимся на нескольких моментах, связанных с установкой программы PENX$ на ваш компьютер. Несмотря на то что переназначение управляющих клавиш можно сделать непосредственно при запуске программы, довольно неудобно будет делать это каждый раз, если ваша клавиатура отличается от клавиатуры «Радио-86РК». Переназначить клавиши управления можно непосредственно заменой кодов в программе. Коды управляющих клавиш занимают в программе PENX$ десять ячеек, начиная с ячейки с адресом 000ЗН и по ячейку 000СН включительно. Заметим, что большинство программ для ОРИОНА рассчитаны на работу под операционной системой ORDOS и при загрузке программ с диска и запуске они чаще всего производят изменение каких-либо ячеек непосредственно в самих себе, а оригинал всегда хранится в неизменном виде на диске. Поэтому запустить программу, потом выйти из нее и сохранить директивой S область памяти, где располагается программа вместо оригинала, нельзя. Если вы решите заменить коды управляющих клавиш, вам надо будет сделать эти изменения либо до набора кодов программы, либо непосредственно в файле.

Произвести изменения в файле можно, пользуясь программой М128$, а директивой FILE DUMP определить адреса модифицируемых ячеек на диске. Полный формат этой команды будет выглядеть так:

FILE DUMP В: PENX$ [ВК].

Затем, узнав по каким адресам дополнительной страницы (квазидиска) расположены ячейки, требующие модификации, выполняют директиву MODIFY <АДРЕС>, 1 [ВК) и вводят новые значения.

ПРЕДСТАВЛЕНИЕ ГРАФИЧЕСКИХ ОБРАЗОВ В ПРК «ОРИОН-128»

Создание образов-картинок с помощью программы PENX не является самоцелью. Созданные графическим редактором спрайты нужны для их дальнейшего использования в самых различных областях приложения ПРК. Однако, если вы просмотрите коды, записанные в созданный редактором файл, вряд ли вы сможете увидеть в, них что-то напоминающее то, что вы рисовали. Для того чтобы иметь возможность в полной мере использовать графические объекты, постараемся разобраться как можно более подробно, что же представляет собой созданный редактором спрайт и какие преобразования происходят с картинкой при записи ее на диск в виде стандартного файла ORDOS, заметим, что информация, которую мы даем ниже, предназначена для тех пользователей ПРК ОРИОН, которые достаточно хорошо представляют себе структуру памяти ПРК и, кроме того, имеют навыки в программировании на языке АССЕМБЛЕРа.

Наличие промежуточного этапа — хранения развернутого массива в буфере обусловлено тем, что многие операции, например создание перемещающихся по экрану образов или преобразование изображения в инверсное, невозможно проделать с упакованной информацией. С другой стороны, развернутый графический массив обычно занимает большой объем ОЗУ, и упаковка таких массивов совершенно необходима при одновременной работе с несколькими образами.

При упаковке для записи на диск сформированный массив обрабатывается следующим образом: сначала (теперь уже первыми) записываются 2 байта начального адреса буфера — Х2 и X1, затем размеры (это делается затем, чтобы программа распаковки могла сразу определить, куда распаковывать массив, если он распаковывается в буфер, либо «знала» размеры картинки при распаковке непосредственно на экран). Далее идет собственно упаковка по следующей схеме: если подряд друг за другом следуют несколько одинаковых байтов, записывается байт, в котором старший бит равен 1, а 7 младших бит определяют количество одинаковых (от 1 до 128). Далее записывается само значение повторяющегося байта. Если же в массиве имеется серия различных байтов, то записывается байт со старшим битом, равным 0, и 7-ю битами, представляющими собой длину (опять же от 1 до 128) серии, и далее сама серия байтов. После этого операция повторяется, и так до тех пор, пока не будет исчерпан весь буфер. Распаковка массива проделывается в обратном порядке, причем сделать это можно несколькими способами, в зависимости от того, как и для каких целей используется спрайт. В табл.2 приведена в качестве примера программа, которая работает следующим образом: ищет на диске В файл с именем RIS1.PC, распаковывает его в буфер, а затем выводит на экран.

Однако для прикладных программ чаще всего нужна такая схема: поиск файла по имени, распаковка и вывод. Несколько упакованных спрайтов, например, могут быть объединены в один информационный блок и в таком виде включены непосредственно в программу. В этом случае в подпрограмме распаковки можно исключить все команды работы с диском, и сама подпрограмма будет начинаться не с метки UNPACK, а с метки UNPCK1, кроме того, команды «CALL RDISK» (чтение байта с диска по адресу, задаваемому регистровой парой HL) нужно будет везде заменить на команды MOV А, М. Может быть и так, что для ваших целей не, нужен вывод на экран атрибутов цвета, а необходимо вывести только черно-белое изображение. В этом случае часть программы, отмеченную как «вывод на экран атрибутов цвета», надо заменить на два вложенных «холостых» цикла по счетчикам, задаваемым регистрами В и С, с тем, чтобы пропустить блок атрибутов и вычислить начало собственно изображения. Еще один вариант — распаковка с непосредственным выводом на экран, минуя буфер спрайтов. При таком выводе вместо команд, помеченных в листинге программы комментарием «пропустить 2 байта (размеры)», нужно будет как раз прочитать эти значения размеров картинки и использовать их в качестве счетчиков. Подпрограмма UNPACK при этом довольно существенно усложнится из-за большого количества счетчиков.

В. САФРОНОВ, В. СУГОНЯКО

Московская обл.

Отсканировано с журнала Радио № 9 1991 г.

Отредактировано Лесных Ю. 2001 г.