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-го режима вызван тем, что он не отрабатывается некоторыми другими моде- лями печатающих устройств. Но это мало- вероятно, и даже если это и так, ничего не стоит внести меню настройки программы вы- бор режима печати графики, так как выбира- ются типы шрифтов в текстовых редакторах. ------------- Спасибо, Павел за такую подробную и обстоятельную рекомендацию. Я думаю, что для многих пользователей, столкнувшихся с подобной проблемой твоя статья будет очень актуальна. Уважаемые читатели, сообщайте в редак- цию о Ваших открытиях и наблюдениях, при- сылайте письма, звоните, вместе мы всегда сможем решить любую проблему, какой-бы она трудной не казалась. До встречи в следующих выпусках. ------------------------------------------