from: KVAZAR/RUSH,GOMEL (0232) 498-371
то: ZX-LEGION,MINSK
-----------------------
Данная статья была написана Павлом Гу-
левичем, на основе своего личного опыта, и
изначально предназначалась для брестской
газеты "ЕСНО". Поскольку издатели послед-
ней не проявляют никаких признаков жизни,
было решено опубликовать ее в новом бело-
русском журнале "ZX-ELEMENT".
О ПРОПОРЦИОНАЛЬНОЙ ПЕЧАТИ
ГРАФИКИ НА ПРИНТЕРЕ
(размышления на тему 5-го режима графики
в СМ-6337 и возможно других)
----------------------------------------
© П.Гулевич
При печати графических картинок, в
большинстве программ я сталкивался с тем,
что получаемая на бумаге копия вытянута по
вертикали, и отношение сторон составляло
явно не 1.33, как на экране Спектрума, хо-
тя, естественно, количество точек на бума-
ге было как и на экране. Такие картинки
мне настолько не нравились, что некоторое
время я печатал только тексты, решив, что
все дело в моем старом принтере. Но теперь
я решил эту проблему и в любой момент с
помощью Magic-а своего Скорпиона могу по-
лучить на бумаге копию любого фрагмента
программы, причем без искажений.
Сначала я подозревал свой уже не новый
принтер, думая что у него что-то с шагови-
ками, или неправильно отрабатываются ко-
манды в перепаянной схеме. Но после того,
как ко мне в руки попали некоторые картин-
ки, с такими же дефектами, напечатанные на
других принтерах я, полазив по справочни-
кам, понял что почти во всех программах
(ArtStudio, Screen Print, The Artist...),
что-то неладно с процедурой печати.
Просматривая драйвера принтера разных
программ стало ясно, что все попавшие мне
под руку утилиты с драйверами печати гра-
фики используют ESC-ы: K,L,У, которые дают
соответственно 480, 960, 990 точек на 8-ми
дюймовую строку, что несоответствует вер-
тикальной плотности иголок на голове прин-
тера. И только в одном из Спектрофонов мне
попалась информация, где упоминался другой
способ вывода графики:
ESC * m c1 c2 ...
где: m - код режима; с1,с2 - число байт
графики. Всего описано 8 режимов графики,
обеспечивающих вывод точек с горизонталь-
ной плотностью от 480 до 1152 (dp8i).
Кстати последний режим 7 для 1152, на 6337
не работает. Два байта с1 и с2 задают чис-
ло байт, подаваемых на принтер до перевода
строки, что соответствует количеству точек
по горизонтали (если печатать битовой мат-
рицей то это 256 байт, т.е. ESC * m 0,1).
Непосредственно после этой команды на ПУ
нужно послать последовательность байтов
графики.
Причем, если при этом поставить m=5,
то используется горизонтальная плотность
576 точек на 8-дюймов, что в точности со-
ответствует вертикальной. Однако меня уди-
вило то, что почти все программисты писав-
шие процедуры побитового вывода экрана на
принтер, использовали команду: ESC K c1,
которая производит печать с плотностью
480, что соответствует 0-му режиму при
универсальном способе задания режима печа-
ти через ESC * и, поэтому картинка полу-
чалась вытянутой.
Складывалось такое впечатление, что
люди писавшие эти драйвера не имели доста-
точной информации по системе команд прин-
тера. Тем более, что описания метода выво-
да графики с непосредственным указанием
режима я так и не нашел в IBM-ском Tech
help-e ни по XT ни по AT, объемом 2,5 Мбт,
где дано описание всей аппаратной поддерж-
ки и описание портов IBM РС/AT. И даже в
"Библии по техническому обеспечению IBM"
Уинна Роша, где приведен самый полный по
моему мнению список команд принтеров всех
систем, в том числе описан и метод печати
графики с использованием команды ESC *,
указали все почти все режимы, в том числе
и для 24-игольчатых принтеров, но ни слова
не сказано ни про 5-й режим, наиболее под-
ходящий для печати картинок, ни про 7-й,
который ровно в два раза плотнее пятого и
мог бы позволить печатать на той же площа-
ди бумаги, но с градациями яркости. (Одна-
ко градации яркости ArtStudio, переделан-
ный мною получает в том же 5-ом режиме с
увеличением площади картинки в 4 раза и
делая ее такого же размера, как и изобра-
жение на стандартном мониторе).
И хотя команда печати с непосредствен-
ным указанием режима на 1 байт длиннее,
чем команда задающая конкретно режим 480,
замена вполне возможна. Так без особых
проблем я произвел замену в процедуре пе-
чати редактора ArtStudio-256 (для ZS Scor-
pion). Для этого нужно заменить коды уп-
равления печатью, расположенные в файле
'studiomc', в области адреса #7С40 (ниже
его). Изменение других редакторов и может
быть других версий ArtStudio потребует
произвести поиск в коде программ последо-
вательностей: #1В,#4В; #1В,#4С; #1В,#59; и
замены их на код: #1В,#2A,#05. Таким обра-
зом мне даже удалось изменить процедуру
печати теневика Скорпа:
___
8-банка: /
EOOD 06 20 1В 2A 05 00 03 00_| не пытайся
Е015 03 1В 41 08 00 00 00 00_| изменять
____/
Введя от руки это, включи принтер и из
любого BASICa (128/48) пошли на него:
LPRINT CHR$ ... 27,65,8 (межстрочное).
После этого до выключения принтера или
компа (reset-можно), печать графики будет
производиться как надо. Только тексты пе-
чатаемые из монитора сожмутся по вертика-
ли, так как между строками почти не будет
промежутка, но это даже экономит бумагу.
После всех проделанных изменений пе-
чать в измененном редакторе производится
без искажений, с соотношением сторон полу-
ченной картинки: 87/65=1.33, что соответ-
ствует 256х192. А при печати окружности,
она теперь не выглядит овалом.
дифицировать под этот режим. Постарайтесь,
однако, при внесении изменений в код прог-
раммы не повредить что-нибудь, что может
повредить работе утилиты, т.к. дополни-
тельный байт в новой команде, иногда может
оказаться недопустимым, и изменять такие
подозрительные байты нежелательно. Тем же,
кто сам пишет процедуры печати графики -
советую использовать только 5-ый режим.
Я не очень разбираюсь в других принте-
рах, и поэтому допускаю, что отказ от ис-
пользования 5-го режима вызван тем, что он
не отрабатывается некоторыми другими моде-
лями печатающих устройств. Но это мало-
вероятно, и даже если это и так, ничего не
стоит внести меню настройки программы вы-
бор режима печати графики, так как выбира-
ются типы шрифтов в текстовых редакторах.
-------------
Спасибо, Павел за такую подробную и
обстоятельную рекомендацию. Я думаю, что
для многих пользователей, столкнувшихся с
подобной проблемой твоя статья будет очень
актуальна.
Уважаемые читатели, сообщайте в редак-
цию о Ваших открытиях и наблюдениях, при-
сылайте письма, звоните, вместе мы всегда
сможем решить любую проблему, какой-бы она
трудной не казалась.
До встречи в следующих выпусках.
------------------------------------------
Other articles: