Russian Hamradio :: Драйвер печати D100 для IBM PC.
Сайт радиолюбителей Республики Коми.

: главная: странички:

Драйвер печати D100 для IBM PC.

Данная статья предназначена для тех, кто имеет в своем распоряжении принтер типа D-100 (СМ-6325, ЕС-7189) и хотел бы использовать его совместно с компьютером типа IBM/PC. Как известно компьютеры IBM/PC используемые в русскоязычных странах имеют альтернативную кодировку символов для вывода текстовой информации.

Однако принтеры типа D-100 не поддерживают данную кодировку и при выводе на печать текста, в котором присутствуют символы с кодом от 128 до 255 будут не правильно отображаться. Для решения данной проблемы существует два подхода.

Первый из них заключается в замене внутренних "прошивок" принтера, в которых хранятся коды управляющей программы и знакогенератор. Данный способ является кардинальным, поскольку практически превращает принтер в совместимый с IBM/PC. Однако этот способ требует от пользователя определенных знаний, умений и оборудования, для того что бы считать "прошивки" принтера, дизассемблировать их, исправить программу, странслировать и запрограммировать новые "прошивки".

Для тех, кто намерен воспользоваться именно этим способом, предлагаю прочесть статью [1], в которой подробно описывается способ замены внутренних "прошивок" принтера и даже приводится фрагмент кодов нового знакогенератора. Однако статья не позволяет полностью превратить принтер в совместимый с IBM, поскольку там не приведены коды для новой программы, без чего не удастся печатать графику как например на Epson совместимых принтерах. Возможно, кто-то из читателей уже выполнил этот нелегкий труд и опубликует его в одном из очередных номеров журнала, однако я пока такой публикации не встречал.

Второй подход заключается в загрузке в компьютер драйверов, которые подменяют прерывания обработки печатающих устройств и автоматически перекодируют символы вывода так, что бы при выводе на печать все символы отображались правильно. Недостатком данного способа является то, что при загрузке в память компьютера драйвер "отбирает" немного оперативной памяти и то, что при выводе на печать будут напечатаны только те символы, которые присутствуют в знакогенераторе принтера.

Например, если принтер имеет кодировку КОИ-8, то все латинские и русские символы будут напечатаны правильно, а некоторые символы псевдографики могут отсутствовать. Однако есть и большое преимущество данного метода.

Во первых он позволяет решить проблему практически без усилий даже новичкам и не требует особых знаний. Во вторых этот способ позволяет адаптировать к компьютеру любой принтер и при этом не требуется разбираться в "прошивках" и программах самого принтера.

Ниже я привожу текст собственной программы написанной на языке "Assembler-86", которая позволяет использовать принтер типа D-100 для печати текстовых документов при подключении к компьютеру типа IBM/PC.

=======================================================================

Текст программы-драйвера "cm_6325.asm" для принтера D-100.

CSEG SEGMENT PARA PUBLIC 'CODE'

ASSUME CS:CSEG,DS:CSEG

ORG 100H

START: JMP INIT ;Переход в начало программы

COPYRIGHT: DB ' (C) Copyright Valpa O.D. Miass 1994 '

;------ Новый обработчик прерывания INT17H -------------------------

NEW17 PROC FAR

CMP AH,00 ;Если функция печати AL=ASCII, AH=00

JNZ METOLD ; на старое прерывание

CMP AL,080h ;Код ASCII из первой половины

JB METOLD ; на старое прерывание

;В остальных случаях

PUSH DS ;Запомним сегмент данных

SUB AL,80h ;Переходим во вторую половину таблицы

LEA BX,TABL_KOR ;ASCII кодов

PUSH CS ;Определим

POP DS ;сегмент данных

XLAT ;Перекодируем ASCII код

POP DS ;Вспомним сегмент данных

METOLD: DB 0EAH ; код команды JMP FAR

OLD17SM DW ? ; смещение перехода на старое прерывание

OLD17SG DW ? ; сегмент перехода на старое прерывание

;Таблица перекодировки второй половины кодов

TABL_KOR:

DB 0E1h,0E2h,0F7h,0E7h,0E4h,0E5h,0F6h,0Fah ;А Б В Г Д Е Ж З

DB 0E9h,0EAh,0EBh,0ECh,0EDh,0EEh,0EFh,0F0h ;И Й К Л М Н О П

DB 0F2h,0F3h,0F4h,0F5h,0E6h,0E8h,0E3h,0FEh ;Р С Т У Ф Х Ц Ч

DB 0FBh,0FDh,0F8h,0F9h,0F8h,0FCh,0E0h,0F1h ;Ш Щ Ъ Ы Ь Э Ю Я

DB 0C1h,0C2h,0D7h,0C7h,0C4h,0C5h,0D6h,0DAh ;а б в г д е ж з

DB 0C9h,0CAh,0CBh,0CCh,0CDh,0CEh,0CFh,0D0h ;и й к л м н о п

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

DB 0D2h,0D3h,0D4h,0D5h,0C6h,0C8h,0C3h,0DEh ;р с т у ф х ц ч

DB 0DBh,0DDh,0DFh,0D9h,0D8h,0DCh,0C0h,0D1h ;ш щ ъ ы ь э ю я

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

DB 020h,020h,020h,020h,020h,020h,020h,020h ; псевдографика

NEW17 ENDP

INIT:

PUSH ES ;Сохраним ES

MOV AX,3517H ;Получить адрес вектора INT 17h

INT 21H ; через прер. 21h (BX=смещ. ES=сегм.)

MOV CS:[WORD PTR OLD17SM],BX ;Занести смещ. по адр. OLD17SM 013Bh

MOV CS:[WORD PTR OLD17SG],ES ;Занести сегм. по адр. OLD17SG 013Dh

POP ES ;Вспомним ES

CLI ;Запретить прерывания

PUSH DS ;Сохраним ES

MOV AX,2517H ;Установить новое прерывание INT 17H

MOV DX,OFFSET NEW17 ; по адр. (DS=CS):(DX=NEW17)

INT 21H ; через INT 21H

POP DS ;Вспомним ES

STI ;Разрешить прерывания

MOV DX,OFFSET INIT ;Задать смещение от PSP

INT 27H ; и остаться резидентной по INT 27H

CSEG ENDS

END START

=======================================================================

Для пользования этой программой необходимо ввести ее текст в компьютер, выполнить компиляцию с помощью любого транслятора "Assembler-86" и получить исполняемый файл с расширением "com". В этом Вам может оказать помощь литература [2].

Если Вы не имеете возможности странслировать программу, можете с помощью бинарного редактора ввести ниже приведенные коды в файл и назначить ему имя с расширением "com", например "cm_6325.com".

=======================================================================

Коды программы-драйвера "cm_6325.com" для принтера D-100.

000000: E9 C7 00 20 28 43 29 20 43 6F 70 79 72 69 67 68 ... (C) Copyrigh

000010: 74 20 56 61 6C 70 61 20 4F 2E 44 2E 20 4D 69 61 t Valpa O.D. Mia

000020: 73 73 20 31 39 39 34 20 80 FC 00 75 05 9C E8 06 ss 1994 ...u....

000030: 00 9D EA 00 00 00 00 3C 80 7D 01 C3 53 1E 0E 1F .......<.}..S...

000040: 8D 1E 4A 01 2C 80 D7 1F 5B C3 E1 E2 F7 E7 E4 E5 ..J.,...[.......

000050: F6 FA E9 EA EB EC ED EE EF F0 F2 F3 F4 F5 E6 E8 ................

000060: E3 FE FB FD F8 F9 F8 FC E0 F1 C1 C2 D7 C7 C4 C5 ................

000070: D6 DA C9 CA CB CC CD CE CF D0 20 20 20 20 20 20 ..........

000080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

000090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

0000A0: 20 20 20 20 20 20 20 20 20 20 D2 D3 D4 D5 C6 C8 ......

0000B0: C3 DE DB DD DF D9 D8 DC C0 D1 20 20 20 20 20 20 ..........

0000C0: 20 20 20 20 20 20 20 20 20 20 06 B8 17 35 CD 21 ...5.!

0000D0: 2E 89 1E 33 01 2E 8C 06 35 01 07 FA B8 17 25 BA ...3....5.....%.

0000E0: 28 01 CD 21 FB BA CA 01 CD 27 (..!.....'

=======================================================================

Далее этот файл запускается и все. Теперь вы можете печатать любой текст. Для удобства пользования программой, я предлагаю поместить строку ее запуска в файл автозагрузки "autoexec.bat", при этом после включения Вашего компьютера данная программы сама загрузится, и Вы можете смело работать с принтером весь рабочий сеанс.

Данная программа-драйвер использует в памяти всего-навсего 720 байт и остается резидентной после запуска, "безболезненно" подменяя прерывание 17 DOS. Для тех читателей кто хотел бы иметь аналогичный драйвер для другого печатающего устройства, я с удовольствием могу помочь.

Скачать программу перекодировки написанную на языке "Assembler-86" - zip 4,11kb.

О. Вальпа sandh@yandex.ru

/www.sandh.narod.ru

Литература:

1. Палло К. Принтер D-100 и его особенности. - Радиолюбитель. Ваш компьютер, 1998, N2, с.24.

2. Питер Абель Язык ассемблера для IBM PC и программирования. -М.:Высшая школа, 1992.

Rambler's Top100
Rambler's Top100 Рейтинг ресурсов УралWeb
Copyright © Russian HamRadio