≡ Передовица » Макулатура » ИиО » Ещё раз об образах
Ещё раз об образах (N1/1993)
Автор рассказывает о собственном редакторе образов (тех, что выводятся операторами DRAW и XDRAW), но не приводит его исходника и даже своих координат.
А.Новиков. 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 нежелательны, так как вызывают искажение цветов. * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |