** Сайт посвящённый ПЭВМ АГАТ **
А.Новиков. Cтудент III курса МПИ. Группа сайта просит вас связаться с нами! (ЗАЧЕМ ЭТО?)
В журнале ИНФО N 3-4 за 1992 г. был опубликован редактор для создания графических образов на ПЭВМ "Агат". Мной был разработан собственный редактор образов. В отличие от уже опубликованного, он рассчитан на более квалифицированного пользователя, позволяет упростить его работу и сократить затраты памяти и время вывода образа на экран.
Сеанс работы с редактором выглядит так.
При запуске, после завершения редактором подготовительных операций, он высвечивает заставку. Начало работы происходит после нажатия любой клавиши.
На экране появляются синие квадраты, символизирующие узловые точки будущего образа. В центре экрана мигает курсор. Редактор находится в режиме свободных перемещений, в котором запоминание вводимых команд не производится. Пользователь может нарисовать задуманный образ, опробовать методы его обхода. В этом режиме можно не бояться делать ошибки - они никак не отразятся на готовой продукции. Этот режим также может использоваться при создании образа для перехода от одной его части к другой, если какая-либо его часть не помещается на экране и изображена отдельно.
Управление курсором:
стрелки - перемещение со следом;
2,4,5,6 (боковые) - перемещение без следа;
‹РЕД› - циклическая смена режимов СВОБ. ПЕРЕМЕЩЕНИЕ/ВВОД.
Для окончания работы с этим режимом курсор приводится в ту точку, с которой вы хотите начать (или продолжить) обрисовку образа, и нажать ‹РЕД›.
Основной режим - режим ВВОДА образа. В этом режиме все действия пользователя записываются в память в формате графического образа. Управление курсором осуществляется так же, как и в предыдущем режиме. В нижней строке экрана, помимо относительных координат курсора, выводятся поля байта: A, B и C. Именно наличие контроля этих полей позволяет оператору сэкономить память. Дело в том, что как поля, так и перемещения не совсем равнозначны между собой. На них распространяются 3 ограничения:
1) В поле C не может быть введено "перемещение со следом".
2) Байт должен быть "закрыт", то есть его последнее рабочее поле не должно содержать "перемещение вверх без следа".
3) В случае невозможности (или ненужности) использования последних одного или двух полей (C или BC в силу п. 1 и 2), они должны быть сделаны нерабочими. Для этого достаточно в соответствующем поле нажать ‹ВВОД› (но не в поле A, так как это приведёт к завершению ввода образа).
Эти ограничения продиктованы особенностями интерпретатора языка BASIC и рассматриваются подробнее в ИНФО N 3-4 1992 и в описании ПЭВМ "Агат" Фг.00003-01 33 02. Редактор учитывает вышеизложенные ограничения и защищает работу пользователя от возможных ошибок. Приведу пример:
Пример 1. Пусть необходимо создать образ, изображённый на рис.1, и курсор находится в нижнем квадрате. Если редактор не контролирует поля байта, то пользователь создаст образ и займёт 6 байтов.
Если же редактор сообщает пользователю, какое поле сейчас вводится, то последний может изменить последовательность перемещений и уложиться в 5 байтов.
После ВВОДА в поле A образ считается законченным. Программа переходит к режиму просмотра. Теперь пользователь видит образ таким, каким он будет после "вживления" в ту программу, для которой он создавался. Стрелками вверх/вниз изменяется масштаб; стрелками вправо/влево - поворот образа; РЕД - переход к последнему режиму - режиму выдачи результата.
В этом режиме программа сообщает адреса памяти, в которые загружены коды образа для возможной записи их в виде B-файла, и выводит эти коды на экран в форме, удобной для макроассемблирования. В приведённом выше примере на экране появится сообщение:
ВАШ ОБРАЗ ЗАГРУЖЕН В ЯЧЕЙКИ $3000.$3004 И КОДИРУЕТСЯ ТАК: !$CE0180400
Теперь можно загрузить программу, для которой создавался этот образ (или набрать NEW, если её ещё нет), и ввести в неё строки кодов образа, пронумеровав их. Это может выглядеть так:
10 BUFOBR=$1800: KOLVO=1 20 * $Е8: ! = BUFOBR ! : 30 * BUFOBR : ! = KOLVO ! $0400 90 REM ДАЛЕЕ CAM ОБРАЗ 100 ! $DCE0180400 990 ! : 1000 HGR= 2: COLOR= 15 1010 ROT= 0: SCALE= 1 1020 DRAW 1 AT 127,127
Здесь: BUFOBR - буфер образов - место в памяти, куда образы будут загружены; KOLVO - количество образов.
В строке 10 устанавливаются буфер образов и их количество; в 20 - интерпретатор настраивается на таблицу образов; в 30 - в таблицу заносятся количество образов и KOLVO раз смещение начала каждого образа относительно BUFOBR (разность между BUFOBR и адресом начала соответствующего образа). В строках 100-980 записываются коды образа (если их несколько, то образы записываются один за другим, начало каждого отмечается меткой для вычисления смещения - см. программу 2). Строки 1000-1020 отвечают за вывод первого образа в центре экрана.
Эта программа является схемой наиболее простого и удобного оперирования образами.
Система управления образами работает только на графике высокого разрешения (HGP). Однако её можно применять и для графики среднего разрешения (MGP), хотя это и уменьшает гибкость системы. При этом образ описывается в представлении HGP с учётом цвета будущего фона (машина не знает о том, что работает с цветной графикой и выводит якобы на HGP совокупность точек, которая при рассмотрении с MGP образует задуманный цветной образ). Приведу пример.
Пример 2. На MGP необходимо изобразить рис.2а. Преобразуем его для HGP (если хотите увидеть это преобразование на машине, нарисуйте цветное изображение в графическом редакторе (например, GREDIT), а затем нажмите ‹СБРУПР›, x$C723, ‹ВВОД›). В результате получим рис.2б). Преобразовав при помощи редактора чёрно-белое изображение в последовательность кодов образа, встроим её в программу. Инициализировав MGP, воспользуемся операторами DRAW или XDRAW. Учтите, что, для того чтобы изображение оказалось в координатах (X, Y), его следует заказать в координатах (X*4+A, Y*2+B), где параметр A (0-3) следует подобрать экспериментально (он зависит от положения начальной точки обхода образа и постоянен для данного образа). Параметр X=(X AND 127), а B=(X AND 128)/128. Ниже привожу программу использования образов на MGP:
10 BUFOBR = $1800: KOLVO = 3 20 * $E8: ! = BUFOBR ! : 30 * BUFOBR: ! = KOLVO ! = T1 - BUFOBR ! = T2 - BUFOBR ! = T3 - BUFOBR 40 K = 1 90 REM ДАЛЕЕ САМ ОБРАЗ 100 ! T1:$0D0D0D161F1F1F56 110 ! $DFFB1BDF13B29292 120 ! $924A694820604821 130 ! $602068094D6989B2 140 ! $DADBDB134D8A1606 150 ! $00 160 ! T2:$4929690D161F1F1F 170 ! $56DFFB1BDF938D4A 180 ! $4D2160494A094DB1 190 ! $DB92DA121616C4C0 200 ! $C0E3D8B316DF9304 210 ! $00 220 ! T3:$0D0D0D161F1F1F8E 230 ! $16DFFB9B6A49494D 240 ! $6909DFDBDB12164D 250 ! $F99BFA1BDF934D49 260 ! $094D910700 990 ! : 1000 MGR= 2: COLOR= 9: PLOT 0,73 TO 127,73: COLOR= 15 1010 ROT= 0: SCALE= 1 1020 FOR B = 0 TO 1: FOR I = 1 TO 252 STEP 4 1030 K = K + 1: IF K=4 THEN K = 1 1050 XDRAW K AT I,126+B 1060 FOR T = 1 TO 100: NEXT 1070 XDRAW K AT I,126+B 1090 NEXT I,B
В заключение отмечу, что поворот и масштабирование образа на MGP нежелательны, так как вызывают искажение цветов.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *