Графические возможности БК0010 на аппаратном уровне (подключение мониторов, разнообразные технические средства) в совокупности с программным общением с графикой на уровне АССЕМБЛЕРа и с богатым набором существующих сервисных графических программ - необходимый электронный инструментарий программиста.
А.М. Надежин
Графические средства БК0010
Несомненно, БК0010(-01) сейчас является самым распространённым и доступным домашним компьютером в нашей стране. Ведь он единственный из бытовых компьютеров (не считая довольно дорогих УК-НЦ и МС-1502), который оснащён 16-разрядным микропроцессором.
Пользователей привлекают в БК и его графические средства. БК0010 имеет четырёхцветную графику с достаточно большим разрешением, что приближает его по графическим возможностям к IBM PC с графическим контроллером CGA компьютера IBM PC.
Графический экран БК имеет формат 512x256 точек в чёрно-белом режиме и 256x256 точек в цветном режиме. Большая скорость вывода на экран и удобство работы с графикой достигнуто за счёт использования в качестве видеопамяти части ОЗУ, расположенного в основном адресном пространстве процессора. В цветном режиме возможно отображение четырёх цветов (чёрный, красный, зелёный, синий) или трёх градаций яркости на чёрно-белом мониторе.
Для подключения монитора у БК имеется два разъёма "ТВ" и "ЦТВ”. На первом формируется чёрно-белый полный видеосигнал, на втором - три цветовых видеосигнала "R","G","B" и синхросмесь. Удовлетворительное качество отображения графической информации в формате 512x256, и текста в формате 64 символа в строке возможно только при подключении чёрно-белого монитора к разъёму "ТВ". Это связано с тем, что цветной и чёрно-белый режимы работы экрана переключаются не программно, а чисто аппаратно. Для этого подключают монитор к одному из разъёмов "ТВ" либо "ЦТВ". Поэтому для получения удовлетворительного качества изображения в чёрно-белом режиме на цветном мониторе можно подключить один из его цветовых каналов к выходу "ТВ". Лучше всего подключить зелёный канал, так как этот цвет наиболее приятен для глаз. Для того, чтобы цветной монитор мог работать с БК и в цветном, и в монохромном режиме можно собрать простейшую схему, приведённую на рис. 1. В качестве переключателя режима можно использовать кнопочный переключатель типа П2К с фиксацией в нажатом положении.
Рис. 1
Рис. 2
У владельцев чёрно-белых мониторов возникает другая проблема - в цветном режиме синий и зелёный цвета отображаются одинаково, поэтому некоторые детали цветного изображения практически неразличимы. Для решения этой проблемы можно собрать схему, приведённую на рис. 2. В нижнем по схеме положении переключателя чёрно-белый монитор работает в псевдоцветном режиме, когда на экране цвета отображаются четырьмя градациями яркости. Нужный уровень яркости для каждого цвета, а также устойчивость синхронизации можно установить подбором соответствующих резисторов. В этой схеме предусмотрена возможность переключения на обычный чёрно-белый режим из-за того, что мелкий шрифт в псевдоцветном режиме плохо различим.
Теперь поговорим о графических возможностях БК с точки зрения программиста, работающего на языке ассемблера. У БК существует регистр, управляющий работой экрана, в описании он называется регистром смещения. Восьмеричный адрес этого регистра 177664. Девятый разряд регистра управляет режимом отображения на экране (в описании - режим расширенной памяти). При записи в этот разряд "1" в адресном пространстве компьютера экран занимает восьмеричные адреса 40000-77777; при записи "0" адреса 70000-77777, в этом режиме работает 1/4 часть экрана и адреса 40000 - 67777 предоставлены пользователю. Первые восемь разрядов регистра смещения управляют работой аппаратного скроллера. С помощью этих разрядов можно заставить БК сдвигать вверх или вниз изображение, находящееся на экране. При сдвиге вниз всё изображение сдвигается, а последняя строка изображения становится первой, аналогично при сдвиге вверх первая строка станет последней. По значению младшего байта регистра смещения устанавливается, с какого адреса экранного ОЗУ, будет осуществляться вывод на экран. В исходном состоянии в регистр записывается число 1330, при этом адресу 40000 соответствует левый верхний угол экрана. Каждая строка экрана представляется 64 байтами.
С точки зрения программиста существуют два режима работы с экраном: чёрно-белый (512x256) и цветной (256x256). В режиме 512x256 точка кодируется одним битом, причём младшему биту соответствует самая левая точка из восьми, представляемых байтом. Таким образом, чтобы загорелась крайняя левая верхняя точка на экране нужно записать по адресу 40000 байт 1, а байт 200 записанный по этому адресу вызовет появление в первой строке экрана восьмой точки слева. Девятой же точке в первой строке будет соответствовать байт 1, записанный по адресу 40001.
В цветном режиме каждая точка кодируется двумя битами, в которых задаётся один из четырёх возможных цветов.
В драйвере ТВ-монитора БК имеются два системных прерывания ЕМТ 30 и ЕМТ 32, предназначенные для рисования на экране точки и отрезка, однако почти всегда предпочтительней работать непосредственно с экранным ОЗУ, так как упомянутые функции драйвера ТВ-монитора работают очень медленно. Существует также режим "текстовой графики", управляемый выдаваемыми на экран с помощью ЕМТ16 или ЕМТ20 управляющими кодами. К сожалению этот режим практически не приемлем из- за большого объёма памяти, расходуемого на хранение управляющих кодов, неудобства кодирования графических изображений и малой скорости вывода на экран.
Необходимо отметить, что для серьёзного использования графических возможностей недостаточно знания принципов организации графики БК, нужны ещё и сервисные программы. Точно так же, как и для программирования на ассемблере недостаточно знания машинных кодов - нужна ещё программа-транслятор (хотя есть ещё люди, программирующие непосредственно в машинных кодах, и рисующие картинки на бумаге в клеточку с последующим ручным переводом их в восьмеричные числа).
За семь лет существования БК создано большое количество программ, облегчающих жизнь программисту, работающему с графикой. Первой такой программой был графический редактор О. Туйкина ГРЕД0, написанный в марте 1987 года и позволяющий с помощью "линзы" (увеличенного участка изображения) создавать изображения и записывать их на магнитофон в удобном формате, в последующем ставшем для БК стандартом (первое слово содержит количество байт в строке, второе слово - количество строк, далее следуют графические данные построчно). После ГРЕД0 было создано большое количество графических редакторов, позволяющих в удобной форме создавать и редактировать графические изображения. Для создания мелких изображений (например, спрайтов в игровых программах) наиболее удобны графические редакторы московского программиста А.В. Бакерина - GREDIT (V003) и MULTIPAINT, созданные осенью 1988 года. Половину экрана во время работы этих программ занимает графическая линза, в которой в увеличенном виде воспроизводится участок экрана вокруг курсора. Степень увеличения линзы может изменяться. Редакторы позволяют:
- работать в чёрно-белом и в цветном режимах, кроме того MULTIPAINT имеет восьмицветный режим работы при котором дополнительные цвета формируются из сочетания основных;
- рисовать линии, прямоугольники, заливать замкнутые участки;
- хранить в буфере до девяти изображений одновременно;
- инвертировать изображение, переворачивать его по осям X и Y;
- выводить на экран текст с помощью знакогенератора ПЗУ монитора и внутреннего знакогенератора, шрифты которого можно редактировать и хранить на магнитной ленте в виде отдельного файла;
- считывать и записывать изображения в стандартном формате редактора ГРЕД0.
Рис. З
В 1989 году А.В. Бакериным был создан ныне весьма популярный графический редактор БК-PAINT, предназначенный в основном не для программистов, а для простых пользователей БК. Вид экрана при работе редактора, основные режимы его работы и типы шрифтов показаны на рис. 3. Существуют три модификации редактора: P1.0К, Р1.0М и P1.0J, управляемые соответственно клавиатурой, мышью и джойстиком. Для класса КУВТ-86 существует версия редактора PAINT BIN, распространяемая в пакете "Альтернатива" барнаульской фирмой АЛТ, поддерживающая работу с локальной сетью и имеющая универсальное управление (мышь или клавиатура). По идеологии редактор близок к графическим редакторам IBM-совместимых машин - редактор не имеет каких-либо команд набираемых с клавиатуры, а управляется с помощью пиктограмм и "выпадающих" меню. Редактор имеет 24 псевдоцвета, 4 толщины линий, 2 типа шрифта при 9 размерах каждого типа, 20 типов кистей. Основные режимы редактора:
- линза - при нахождении курсора в определенной, заранее установленной части изображения на экране появляется лупа с изображением, увеличенным в 2 раза;
- мусорная корзина - отмена промежуточной фазы команды;
- ножницы - перенос или удаление части изображения;
- копирование - дублирование части изображения,
- звездочка - размазывание изображения;
- буква "А" - печать текста;
- ведро - закрашивание замкнутой области;
- пульверизатор - "напыление" точек;
- кисть - рисование установленной кистью;
- карандаш - рисование установленной толщиной линии белым цветом;
- ластик - стирание части изображение;
- ломаная - рисование линий, конец которых является началом для последующих;
- вертикальная или горизонтальная линия;
- пустой прямоугольник;
- закрашенный прямоугольник;
- окружность;
- круг;
- установка толщины линии;
- установка текущего цвета;
- установка шага перемещения курсора от мыши;
- чтение файла;
- запись файла;
- чтение спецалфавита;
- инверсия изображения;
- печать изображения;
- очистка экрана;
- выход из редактора;
- установка типа кисти;
- установка типа шрифта и его размера.
Предусмотрена печать изображения на принтере, совместимом с robotron СМ 6329. Однако у этого редактора есть несколько существенных недостатков: отсутствие цветного режима работы, некорректная программа печати, искажающая соотношение сторон изображения, неудобный и нестандартный формат хранения изображения на магнитной ленте (рисунок записывается в пять последовательно идущих файлов), нерациональное использование кнопок мыши (кнопки задублированы).
Далее будут кратко описаны достоинства отдельных графических редакторов:
- графический редактор москвича В. Савина ГРАФРЕД имеет линзу размером во весь экран;
- графический редактор ленинградца В. Маркова SCREDIT позволяет производить с изображениями сложные математические преобразования - масштабирование, изменение цвета, поворот;
- редактор казанского программиста Н.М. Саттарова GRAF1;2 (кстати говоря, подробно описанный самим автором в восьмом номере "Вычислительной техники" за этот год) позволяет создавать библиотеку графических элементов и выводить их под одним из четырех углов с изменением масштаба, что удобно при рисовании электрических схем (схемы этой статьи созданы с помощью редактора GRAF1;2).
Дополнительное преимущество редактора GRAF1;2 в очень компактном формате хранения изображений (в памяти и на МЛ хранятся не сами изображения, а способы их построения). По идеологии редактор GRAF1;2 близок к графическому редактору GRAF Д. Муратова, работающему на ДВК-3.
Отдельную группу составляют программы, позволяющие найти в готовых программах закодированные графические изображения и отредактировать их (SCOPE (SG-EDITOR) АВНсогр.) или записать их в файл в стандартном формате, который можно отредактировать например с помощью редактора MULTIPAINT и вставить обратно в программу (FINDER москвича М.Л. Лифанцева).
Существуют также и другие программы работы с графикой:
- программа КОМР2 В.А. Бабкина позволяет сжимать графические изображения, создавая таблицу повторяющихся элементов изображения и записывать их на магнитофон в виде файла содержащего упакованное изображение и подпрограмму ее распаковки. Сжатие может достигать 75%;
- программа GRAFIX, написанная автором этой статьи позволяет во время работы других программ распечатывать графический экран на принтере, совместимом с robotron СМ 6329.