Техника - молодёжи 1991-04, страница 50

Техника - молодёжи 1991-04, страница 50

Чертежник без диплома

Клуб электронных игр

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

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

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

<48

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

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

Что для этого нужно?

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

тальная полоска из восьми пикселей иллюстрирует тот факт, что в соответствующую ячейку видеопамяти записано двоичное число 11111111, то есть 255, а пунктир из четырех точек задается числом 10101010, или 170. Сложнее картина при многоцветной палитре: при этом одни биты отвечают за порядок размещения пикселей, другие — за цвет их «чернил», что при неизменном объеме видеопамяти уменьшает разрешение.

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

Строки растра: ~ L1 _ L2 L3 ~ L4 " L5 ~ L6 " L7 L8

Данные Эля принтера: 00880088 81111188 11111118 18888818...