DPRINT.COM OS-DOS V3.60 Орион-128, CP/M-80
Драйвер печати DPRINT.COM, CP/M-80 Орион Софт OS-DOS V3.60
Продаю платы и наборы микросхем, куплю микросхемы
Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем. Читайте про пакет Атлас. Также дискеты можно отформатировать из под ORDOS пакетом программ Атлас.
Дискеты должны быть отформатированы в OS DOS (CP/M-80) программой FORMAT.COM и на дискету записана система OS DOS V3.60 программой SYS.COM или SG360.COM
Руководство системного программиста OS DOS ORION-SOFT
ДРАЙВЕР ПЕЧАТИ "DPRINT.COM" для OS-DOS V3.60
Драйвер DPRINT.COM предназначен для вывода символа на печатающее
EPSON-совместимое устройство с протоколом "CENTRONICS". Драйвер при
инициализации переназначает векторы переходов в теле BIOS - LIST
(Bios+0FH) и LISTST (Bios+2DH) в дисковой операционной системе OS-DOS
V3.60 фирмы "Orionsoft". Печатающее устройство (принтер) должно
обеспечивать работу с Альтернативной кодировкой IBM PC,которая выбрана
нами как наиболее распространенная в зарубежных и отечественных
принтерах последних лет выпуска. Если же у Вас антикварный (без
альтернативной кодировки) принтер, то Вам необходимо поправить таблицу
перекодировки символов в драйвере (см. ниже) в соответствии с той
кодировкой, которую воспринимает Ваш принтер.Коренным решением проблемы
может быть перепрограммирование ПЗУ принтера на альтернативную
кодировку, но это не всегда возможно.
Драйвер позволяет выводить на принтер псевдографику из кодировки КОИ8, а
также подключать драйвер к системе еще до включения принтера или его
подключения к компьютеру.
Драйвер загружается как обычный .СОМ-файл. После вывода титульной
заставки драйвер запрашивает ввести тип кодировки в виде одной из цифр:
0 - альтернативная кодировка, 7 - вывод в кодировке КОИ-7H0/1, 8 - вывод
в кодировке КОИ-8.Здесь имеется ввиду кодировка той текстовой
информации, которую Вы хотите вывести на принтер, и подразумевается, что
принтер во всех случаях работает в альтернативной кодировке. Внимание!
При необходимости вывести из OS-DOS V3.60 на печать какую-либо
графическую информацию (например, из спец. программы графической печати)
задавать драйверу перекодировку нельзя, иначе информация будет полностью
искажена. В этом случае драйверу надо указать тип кодировки -
альтернативную (т.е. ввести символ "0") для исключения преобразования
печатаемых данных.
Возможен и второй вариант загрузки - указать ключ кодировки в командной
строке:
А>DPRINT /8
Это позволяет включать загрузку драйвера в состав файла AUTOEXEC.BAT или
просто ВАТ-файла.
Следует иметь ввиду, что все выше сказанное, относится к ситуации, когда
принтер имеет (и устанавливает при включении) знакогенератор с
альтернативной кодировкой. Различные совковые принтеры могут иметь
знакогенераторы со всевозможными "левыми" кодировками, поэтому, как и
говорилось выше, для работы с ними следует поправить таблицу
перекодировки в драйвере (таблица осуществляет перевод символов с кодами
от 080H до 0FFH из полной версии (с псевдографикой) кодировки КОИ-8 в
альтернативную.
Если Ваш принтер работает только в КОИ-7 - загружайте драйвер с ключем
/0. В этом случае драйвер DPRINT не производит с символом каких-либо
преобразований. Можно лишь сожалеть, но работать с большими и маленькими
буквами латинского и русского алфавитов в этом случае не возможно. Не
забывайте только перед распечаткой текстов перекодировывать их в КОИ-7,
если текст не в этой кодировке.
Учитывая, что наши пользователи имеют самый разношерстный парк
принтеров, мы не можем приложить к пакету драйверы на все случаи жизни.
Поэтому далее приводим исходные тексты драйвера. Листинги снабжены
достаточными комментариями для понимания структуры драйвера и алгоритма
его работы. Попутно этот исходный текст наглядно илюстрирует подключение
к системе внешнего драйвера.
Мы не можем предугадать, какие трансформации Вы предпримете с исходным
вариантом драйвера, с тем, чтобы решить свои проблемы. Поэтому коротко
расскажем как ассемблируется исходный вариант драйвера.
Итак:
- текстовым редактором в OS-DOS извлеките из данного файла (см. ниже)
исходный текст всего драйвера. Модифицировав программу для имеющегося у
Вас принтера и интерфейса, запишите отредактированный файл на диск. Для
трансляции исходного текста в выполняемый файл следует использовать
ассемблер М80 и сборщик L80. Введите в OS-DOS командную строку:
A>M80 =DPRINT.ASM (запуск ассемблера, DPRINT.ASM - имя Вашего
отредактированного файла)
Если при ассемблировании не будет найдено ошибок, ассемблер выведет
сообщение No Fatal error(s) и выйдет в OS-DOS.
После этого надо ввести следующую команду:
A>L80 DPRINT.REL,DPRINT.COM/N/E (запуск сборщика L80)
Когда сборщик завершит работу и передаст управление OS-DOS, на диске
окажется файл DPRINT.COM - готовый драйвер печати. Чтобы тут же его
проверить - запустите драйвер:
A>DPRINT /8 (если предполагается печатать в КОИ-8, иначе /0 -
Alt-вывода)
Если драйвер определил готовность принтера - будет выведен повторно
промпт OS-DOS без каких-либо сообщений, в противном случае - "Принтер не
готов !!". Это может означать, что принтер не включен, другой тип
интерфейса или другая схема подключения принтера к порту. Однако в любом
случае драйвер будет инсталлирован в систему - т.е. можно и потом
включить принтер и начать печать.
Далее введите директиву OS-DOS - DIR. Перед тем, как нажать клавишу [ВК]
- введите CTRL (УС,СУ и т.д.)+Р. Принтер должен распечатать каталог
дискеты параллельно с выводом его на экран. Проверить драйвер с другой
кодировкой можно при выполнении директивы OS-DOS - TYPE.
Выключается эхо-печать повторным вводом CTRL+P или перезапуском ("теплый
старт" - F4, CTRL+C) OS-DOS.
Несколько замечаний.
1. Программы M80.COM и L80.COM - ассемблер и сборщик фирмы "Microsoft"
для CP/M. Находятся на дистрибутивной дискете ОС OS-DOS V3.60.
2. При адаптации драйвера для конкретного принтера необходимо следить,
чтобы переносимая часть драйвера от метки PRINT и до конца (до ENDC:)
объемом не превосходила 3FFH, иначе
драйвер выйдет за отведенные пределы (от 0B000H до 0B3FFH), чего
допустить нельзя.
И еще. К нам приходят письма наших клиентов с недоумениями
неработоспособности принтера, подключенного к компьютеру, или точнее,
принтер печатает, но не так, как Вам хотелось бы (например, вместо
русских букв выводятся латинские или знаки национальных алфавитов,
псевдографика и т.д.)
Поэтому в который раз считаем необходимым повторить, что для нормальной
печати КОДИРОВКА ВЫВОДИМОГО ТЕКСТА И КОДИРОВКА, В КОТОРОЙ ФУНКЦИОНИРУЕТ
ПРИНТЕР, ДОЛЖНЫ СОВПАДАТЬ. Так что если Ваш принтер печатает
неправильно, проверьте, в какой кодировке Вы выводите текст, и на какую
кодировку настроен принтер. При этом следует пользоваться таблицами
кодировок, приводимыми в описании к принтеру, а не формально названиями
кодировок, которые могут именоваться по-разному в различных принтерах
(например, в руководстве к принтеру D100M/PC альтернативная кодировка
непонятно почему называется "Орел").
Кроме того, нужно учесть,что принтер может поддерживать нужную Вам
кодировку, но не устанавливаться в работу с ней при его включении
(например СМ6337 Орловского завода. Это существенно, т.к. в этом случае
Вам необходимо в драйвер DPRINT вставить команды инициализации нужной
кодировки в принтере (обычно сразу после программирования порта
КР580ВВ55 и считывания статуса готовности принтера). Такими командами,
как правило, являются ESC-коды управления, описание которых весьма
подробно излагается в руководстве к принтеру.
;
; ====== ORIONSOFT =====
;
; ДРАЙВЕР ПЕЧАТИ
; Автор: В.Сугоняко.
; Доработан: А.Грачев г.Москва
; 13.05.95
;=======================
;
; Строки, помеченные комментарием
;
; ;НЕ ИЗМЕНЯТЬ
;
; желательно не трогать !!!
; (информация для ассемблера)
;=======================
;
; Адреса регистров ВВ55:
;
PPA EQU 0F600H
PPB EQU 0F601H
PPC EQU 0F602H
PPU EQU 0F603H
;
FBDOS EQU 5 ;ВЫЗОВ ФУНКЦИЙ BDOS
;
.8080 ;НЕ ИЗМЕНЯТХ
ASEG ;НЕ ИЗМЕНЯТХ
ORG 100H ;НЕ ИЗМЕНЯТХ
;
START: LXI SP,START ;УСТ. АДРЕС СТЕКA
MVI C,0CH ;ПРОВЕР.КОРРЕКТНОСТИ
CALL FBDOS ; СР/М-80
MOV A,L
CPI 22H ;ЭТО СР/М 2.2?
JNZ ERVER
MOV A,C ;ДОП.ПРОВЕРКА:
CPI 36H ;ЭТО - OS-DOS V3.6X?
JNZ ERVER
LHLD 5DH ;ЕСТХ ЛИ КЛЮЧИ:
MOV A,L
CPI '/' ; САМ ПРИЗНАК КЛЮЧА?
JNZ DR00 ; ЕСЛИ НЕТ-РУЧНОЙ ВВОД
MOV A,H
JMP DR01
;
DR00: LXI D,TBTYT ; ЗАСТАВКА
MVI C,9
CALL FBDOS ; ВЫВОД НА ЭКРАН
MVI C,1
CALL FBDOS ; ЖДАТХ ВВОДА С КЛАВИАТУРЫ
DR01: CPI '0' ; РЕЖИМ: "ПРОЗРАЧНЫЙ" (ALT)?
JZ DR1
CPI '7' ; КОИ-7H01 ?
JZ DR1
CPI '8' ; КОИ-8 ?
JNZ HELP
DR1: ANI 0FH
STA FLAG+1-PRINT+LPTPL ;КОРРЕКЦИЯ DUMP LPT
LXI H,MEM3 ;ОТКУДА БРАТХ
LXI D,TRANSF ;КУДА ЗАСЫЛАТХ
MVI B,ENDP3-TRANSF ;КОЛИЧЕСТВО БАЙТ
CALL LDIRX ;ПЕРЕСЛАТХ ПОДПРОГРАММУ TRANSFER В 0F373H
LXI H,LPTPL ;ОТКУДА БРАТХ
LXI D,PRINT ;КУДА ПЕРЕСЫЛАТХ
LXI B,ENDC-PRINT ;КОЛИЧЕСТВО БАЙТ
CALL TRANSF ;ПЕРЕСЛАТХ РЕЗИДЕНТ ДРАЙВЕРА В 0-Ю СТРАНИЦУ
LXI H,MEM1 ;ОТКУДА БРАТХ
LXI D,PROC1 ;КУДА ПЕРЕСЫЛАТХ
MVI B,ENDP1-PROC1 ;КОЛИЧЕСТВО БАЙТ
CALL LDIRX ;ПЕРЕСЛАТХ ВСПОМОГАТЕЛХНУЮ ПОДПРОГРАММУ
LXI H,MEM2 ;ОТКУДА БРАТХ
LXI D,PROC2 ;КУДА ПЕРЕСЫЛАТХ
MVI B,ENDP2-PROC2 ;КОЛИЧЕСТВО БАЙТ
CALL LDIRX ;ПЕРЕСЛАТХ ВСПОМОГАТЕЛХНУЮ ПОДПРОГРАММУ
LXI H,PROC1 ;ИЗМЕНИТХ ВЕКТОРА ПЕРЕХОДОВ
SHLD 0F32AH ;В ТАБЛИЦЕ ДЛЯ ПЕЧАТИ СИМВОЛА
LXI H,PROC2 ;И ОПРОСА ГОТОВНОСТИ ПРИНТЕРА
SHLD 0F32DH ;НА АДРЕСА ДОП. ПОДПРОГРАММ
;--------------------------
; Далее - П/П работы с
; интерфейсом "Centronics"
;
; Заменить для других
; интерфейсов.
;
; Программирование ВВ55 и чтение статуса.
;-------------------------
;
MVI A,98H ;ПРОГРАММИР.ПОРТ
STA PPU
XRA A
STA PPC ; STROBE В 1
STTM: DCR A ; ЗАДЕРЖКА
JNZ STTM
STTM2: LDA PPC ;ЧИТАТЬ СИГНАЛ УПРАВЛЕНИЯ
ANI 80H ; ПРИНТЕР ГОТОВ?
;
;-------------------------
;
JNZ 0 ; A=/= 0 - ПРИНТЕР ГОТОВ,
; ВОЗВРАТ В СИСТЕМУ
LXI D,TBRDY ; A=0 - "ПРИНТЕР НЕ ГОТОВ"
MVI C,9
CALL FBDOS ; ВЫВОД СООБЩЕНИЯ
JMP 0 ; ВОЗВРАТ В СИСТЕМУ
;
LDIRX: MOV A,M ;ПЕРЕНОС БЛОКА ПАМЯТИ
STAX D ;КОЛИЧЕСТВО БАЙТ В "B"
INX H
INX D
DCR B
JNZ LDIRX
RET
;
MEM1:
.PHASE 0F3F3H ;НЕ ИЗМЕНЯТЬ
;
PROC1: XRA A ;П/П ДЛЯ ВЫЗОВА STATUS'А ПРИНТЕРА
OUT 0F9H ;С ПЕРЕКЛЮЧЕНИЕМ СТРАНИЦ
CALL STATUS ;(Т.К. ВЫЗОВ ИЗ СТРАНИЦЫ 1,
PUSH PSW ; А САМ ДРАЙВЕР В СТРАНИЦЕ 0)
MVI A,1
OUT 0F9H
POP PSW
RET
ENDP1:
;
.DEPHASE ;НЕ ИЗМЕНЯТЬ
MEM2:
.PHASE 0F315H ;НЕ ИЗМЕНЯТЬ
;
PROC2: XRA A ;П/П ДЛЯ ОБРАЩЕНИЯ К PRINT
OUT 0F9H ;С ПЕРЕКЛЮЧЕНИЕМ СТРАНИЦ
CALL PRINT
MVI A,1
OUT 0F9H
RET
ENDP2:
;
.DEPHASE ;НЕ ИЗМЕНЯТЬ
MEM3:
.PHASE 0F373H ;НЕ ИЗМЕНЯТЬ
;
TRANSF: PUSH B
MOV C,M ;ПЕРЕСЫЛКА БЛОКА ИЗ СТРАНИЦЫ 1
XRA A ;В СТРАНИЦУ 0
OUT 0F9H
MOV A,C
STAX D
INX H
INX D
MVI A,1
OUT 0F9H
POP BC
DCX B
MOV A,B
ORA C
JNZ TRANSF
RET
ENDP3:
;
.DEPHASE ;НЕ ИЗМЕНЯТЬ
;
TBRDY: DB 0DH,0AH
DB ' Принтер не готов !!',0DH,0AH,24H
;
TBTYT: DB 0DH,0AH
DB '*********************************',0AH,0DH
DB '* Д р а й в е р п е ч а т и *',0AH,0DH
DB '* OS-DOS BIOS Release 3.6X *',0AH,0DH
DB '* "O R I O N S O F T" *',0AH,0DH
DB '* 13.05.95 *',0AH,0DH
DB '*********************************',0AH,0DH,0AH
DB 'Alt/Кои-7H01/Кои-8/Hlp - (0/7/8/H) :$'
;
HELP: LXI D,TBHLP ;ПЕЧАТЬ СООБЩЕНИЯ
HLP1: MVI C,9
CALL FBDOS
JMP 0
;
TBHLP: DB 0DH,0AH
DB 'Вызов программы:',0DH,0AH
DB ' A>DPRINT /K',0DH,0AH
DB ' где: K = 0 - ALT',0DH,0AH
DB ' 7 - КОИ-7',0DH,0AH
DB ' 8 - КОИ-8',0DH,0AH
DB ' H - HELP',0DH,0AH
DB '$'
;
ERVER: LXI D,TBVER
JMP HLP1
;
TBVER: DB 0DH,0AH
DB ' USE THIS PROGRAM ONLY',0DH,0AH
DB ' UNDER OS-DOS V3.6X',0DH,0AH,24H
;
;---------------------------------------
;
LPTPL:
.PHASE 0B000H ;НЕ ИЗМЕНЯТЬ - АДРЕС РАЗМЕЩЕНИЯ
; ;РЕЗИДЕНТА ДРАЙВЕРА В 0-Й СТРАНИЦЕ
;---------------------
; LPT
; Интерфейс:
; "Centronics"
;
; "Orionsoft" 1995
;
;=====================
;
PRINT: JMP WPRINT
;
;--------------------------
; Далее - П/П работы с
; интерфейсом "Centronics"
;
; Заменить для других
; интерфейсов.
;
; Считывание статуса готовности.
;-------------------------
;
STATUS: LDA PPC ;ЧИТ.ПОРТ УПРАВЛЕНИЯ
ANI 80H ; A=0 - НЕ ГОТОВ
RZ
ORI 0FFH ; A=0FFH - ГОТОВ
RET
;
;-----------------------------------
; ПЕЧАТХ СИМВОЛА ИЗ "C" :
;
WPRINT: PUSH H ; СОХРАНИТХ ВСЕ РЕГИСТРЫ
PUSH D
PUSH B
PUSH PSW
FLAG: MVI A,0 ; A=0 -ПРЯМОЙ ВЫВОД - ALT
ANA A ; A=7 -КОДИРОВКА - КОИ7
JZ PRT ; А=? -КОДИРОВКА - КОИ8
CPI 7
MOV A,C
JZ KOI7
KOI8: LXI H,TAB8 ;ТАБЛИЦА ПЕРЕКОДИРОВКИ КОИ8 В ALT
CPI 80H
JC PRT
SUI 80H
JMP GETCHAR
;
KOI7: ANI 7FH ;ПРЕОБРАЗОВАТЬ КОИ7H01 В КОИ8
CPI 60H
JC PRT
ORI 80H
JMP KOI8
;
GETCHAR:MVI D,0
MOV E,A
DAD D ;ВЫЧИСЛИТЬ СИМВОЛ В ТАБЛИЦЕ
MOV C,M
;
PRT: CALL STATUS ; ПРИНТЕР ГОТОВ?
JZ PRT ; НЕТ, ЖДАТХ
;
;--------------------------
; Далее - П/П работы с
; интерфейсом "Centronics"
;
; Заменить для других
; интерфейсов.
;
; В регистре "C" - символ для вывода.
;-------------------------
;
MOV A,C
CMA
STA PPB ; SAVE DATA
MVI A,1 ; STROBE - 0
STA PPC
XRA A ; STROBE - 1
STA PPC
;
;---------------------------
;
WP_END: POP PSW ;ВЫХОД ИЗ П/ПРОГРАММЫ
POP B ;С ВОССТАНОВЛЕНИЕМ ВСЕХ РЕГИСТРОВ
POP D
POP H
RET
;
; ТАБЛИЦА ПЕРЕКОДИРОВКИ
; ПОД АЛЬТЕРНАТИВНУЮ КОДИРОВКУ
; ПРИНТЕРА (KOI8 -> ALT)
;
TAB8: DB 0C0H,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C7H,0C8H
DB 0C9H,0CAH,0CBH,0CCH,0CDH,0CEH,0CFH,0D0H,0D1H
DB 0D2H,0D3H,0D4H,0D5H,0D6H,0D7H,0D8H,0D9H,0DAH
DB 0DBH,0DCH,0DDH,0DEH,0DFH,0F0H,0F1H,0F2H,0F3H
DB 0F4H,0F5H,0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH
DB 0FDH,0FEH,0FFH,0B0H,0B1H,0B2H,0B3H,0B4H,0B5H
DB 0B6H,0B7H,0B8H,0B9H,0BAH,0BBH,0BCH,0BDH,0BEH,0BFH
DB 0EEH,0A0H,0A1H,0E6H,0A4H,0A5H,0E4H,0A3H,0E5H
DB 0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH,0AFH,0EFH
DB 0E0H,0E1H,0E2H,0E3H,0A6H,0A2H,0ECH,0EBH,0A7H
DB 0E8H,0EDH,0E9H,0E7H,0EAH,9EH,80H,81H,96H,84H
DB 85H,94H,83H,95H,88H,89H,8AH,8BH,8CH,8DH,8EH,8FH
DB 9FH,90H,91H,92H,93H,86H,82H,9CH,9BH,87H,98H,9DH
DB 99H,97H,9AH
;
ENDC:
.DEPHASE ;НЕ ИЗМЕНЯТЬ
END ;НЕ ИЗМЕНЯТЬ
;
BH,87H,98H,9DH
Руководство системного программиста OS DOS ORION-SOFT
На предыдущую страницу На главную страницу На следующую страницу