Основы работы с графическим экраном |
Главная / ЭКВМ / Программы / Примеры |
Описание вида экрана приведено для неинверсного ЖКИ: "чёрный" цвет подразумевает, что бит буфера графического экрана установлен в единицу, "белый" цвет - установлен в ноль. Каждый бит соответствует одной точке изображения (пикселю). В реальности цвет может различаться в зависимости от конструкции индикатора, цвета подсветки и т.д. Приведённые иллюстрации традиционно имитируют жёлто-зелёную подсветку индикатора для вывода "белого" фона, а также наличие неиспользуемой видимой области по краям графического экрана. Порядок действийДля использования графического экрана ЭКВМ требуется выполнить ряд действий:
Инициализация графического экрана, изменение параметров выводаИнициализация графического экрана выполняется записью целого числа от 0 до 3 в регистр функции R9010. Результат при записи числа:
Использование чисел 0 и 1 не рекомендуется, они оставлены для совместимости с ранними версиями ПО ЭКВМ. При их использовании следует самостоятельно записать необходимые значения во все регистры, соответствующие параметрам вывода. Число 2 - наиболее часто употребляемый параметр, который выполняет "сброс экрана", то есть установку белого фона и удаление всех ранее выведенных объектов. Запись числа 3 очищает экран, окрашивая его в чёрный цвет, кроме того, автоматически устанавливает атрибут инверсного вывода (рисование белым цветом по умолчанию). При записи чисел 2 и 3 автоматически заполняются регистры:
Если для работы требуются другие значения параметров графического вывода, их следует изменить отдельно - после инициализации экрана. Одной из типичных ошибок является отсутствие инициализации графического экрана в начале программы. После включения ЭКВМ не очищает содержимое буфера и оно оказывается заполнено "мусором", на фоне которого выводимые объекты могут потеряться.
Установка координат выводаГрафический экран ЭКВМ имеет 128 точек по горизонтали и 64 точки по вертикали. Начало координат расположено в левом верхнем углу индикатора. Числовые значения горизонтальной координаты возрастают слева-направо (от 0 до 127), вертикальной - сверху-вниз (от 0 до 63). Для установки координат вывода следует занести значение вертикальной координаты начальной позиции вывода объекта (Y0) в регистр Y стека, горизонтальной координаты (X0) - в регистр X стека. После этого записать указанные значения в регистр функции R9000 командой "РР П 9000". Функция R9000 переносит значения из обоих регистров стека одновременно - для установки вертикальной и горизонтальной координаты достаточно одного вызова функции. Например, для установки координат X0=63, Y0=31 (вблизи от центра экрана) требуется ввести команды: "31", "B↑", "63", "РР П 9000". Порядок ввода связан с особенностями стека - первое число вводится в RX и поднимается в RY командой "B↑", второе число вводится в RX. Начальные координаты отрезка - это координаты первой (начальной) точки. Для других объектов (изображений, прямоугольников, текста) - координаты верхнего левого угла. При выводе графического объекта значение начальных координат не изменяется. Перед выводом каждого следующего объекта координаты следует задавать заново. Единственное исключение - вывод чисел, текста и отдельных символов. При выводе очередного символа вертикальная координата Y0 не изменяется, а горизонтальная X0 автоматически увеличивается на ширину выведенного символа сложенную со значением параметра "расстояние между символами" (R9002). Между символами на экран выводится пустой прямоугольник. Таким образом, после вывода очередного символа координата X0 указывает на место вывода следующего. Точка выводится непосредственно в указанную позицию, для вывода точки изменять значение начальных координат не требуется. Вывод объектаВывод точки (R9011)Точка выводится при помощи регистра функции R9011. Перед этим в регистр стека X записывается горизонтальная координата точки, в регистр Y - вертикальная. При обращении к функции учитываются атрибуты вывода из R9001. При записанном нуле - точка имеет "чёрный" цвет, при атрибуте 4 - "белый". В примерах экран очищен командами "2", "РР П 9010" - нулевые атрибуты в R9001 устанавливаются автоматически.
Вывод линии (R9012)Координаты начала отрезка определяются содержимым регистра R9000. Координаты конца передаются через стек, так же, как и для точки. Для рисования "чёрным" цветом устанавливаются нулевые атрибуты в R9001. Для примера рассмотрим вывод равностороннего треугольника. Его высота относится к длине стороны, как √3/2.
Вывод прямоугольника (R9013)Координаты верхнего левого угла прямоугольника определяются содержимым R9000. Через регистры стека передаётся длина стороны прямоугольника по соответствующей координате. Во избежание ошибок следует обратить внимание, что передаётся размер прямоугольника, а не координаты противоположного угла. Для вывода "чёрного" прямоугольника атрибуты (R9001) должны быть равными нулю.
Вывод рамки (R9014)Рамка - это четыре отрезка, составляющие границу прямоугольника. Вывод рамки не отличается от вывода прямоугольника, только обращение происходит к регистру функции R9014.
Другие объектыКроме указанных графических объектов, в ЭКВМ на уровне регистров функций поддерживается вывод изображений, текста и отдельных символов, а также чисел в различных форматах. Поскольку каждая из групп функций имеет свои особенности, они будут рассмотрены по отдельности. Вывод на индикаторВывод графического экрана на индикатор ЭКВМ выполняется командой "К ГРФ" ("K GRPH" в латинской транскрипции). Введённая вручную (в автоматическом режиме калькулятора) команда выведет содержимое графического экрана, которое будет присутствовать на индикаторе до нажатия любой клавиши. Но не имеет смысла ставить эту команду последней в программе, поскольку останов программы немедленно переключит экран на вывод содержимого стека. Поэтому, в зависимости от назначения программы, можно поступить различными способами, к примеру:
Очевидно, что первые два способа подходят для вывода содержимого только одного экрана, а последние такого ограничения не имеют, но чуть более сложны в реализации. Здесь способы организации задержек и выхода при помощи таймера и клавиатуры рассматриваться не будут. Использование атрибутов выводаРанее упоминались только два значения атрибутов вывода (R9001). Нулевое значение, которое выводит объект без изменений, и значение 4, которое инвертирует его перед выводом, позволяя рисовать "белым" по "чёрному". Другие значения позволяют проводить логические операции с выводимыми объектами. Нижеприведённая программа предварительно создаёт фон, состоящий из вертикальных линий и чёрного квадрата левее и выше центра экрана. Затем изменяет атрибуты на заданное пользователем значение и дополнительно выводит графический объект, состоящий из горизонтальных линий. Результаты представлены в таблице. Значение атрибутов вывода от 0 до 7 следует ввести в регистр стека X перед запуском программы.
Программа primgraph1.mkp (192 байта, КС 17848/98)
Перед запуском в регистр стека X записывается значение атрибутов вывода от 0 до 7. Выход из программы выполняется нажатием клавиши "С/П". Несложно заметить, что основная программа занимает 62 байта. Остальные 130 байт - изображение размером 32x32 точки, состоящее из горизонтальных линий. Текст программы primgraph1.mkl для кросс-компилятора: .CHARSET 1251 ; Файл primgraph1 ; Лицензия GPL 2+ ; НПП "СЕМИКО", г. Новосибирск, 2013 ; mail@semico.ru .ORG 0 ; Начало программы MA ; сохранение введённых атрибутов 1 MC M4 63 MB M0 2 PP M 9010 ; очистка экрана ; вывод вертикальных полос A1: 0 ENT RM4 PP M 9000 ; начальные координаты RMB RMC ; эквивалентно "63 ENT 1" PP M 9013 ; вертикальный прямоугольник 63x1 KRM4 KRM4 ; увеличение координаты X0 на 2 FL0 A1 ; цикл по R0 ; вывод квадрата 8 ENT 40 PP M 9000 32 ENT PP M 9013 ; изменение атрибутов RMA PP M 9001 ; вывод графического образа PIC 23 ENT 55 PP M 9000 .NUM PIC PP M 9015 ; вывод графического экрана на индикатор K GRPH ; бесконечный цикл A2: GOTO A2 ; команда "С/П" отсутствует ; завершение программы выполняется вручную ; графический образ - горизонтальные полосы PIC: .DB 32,32 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .DB 85,85,85,85 .ENDP |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |