📂 Документ: orion128-soft-cpm80-v360-dprint_clean.html


 

DPRINT.COM OS-DOS V3.60 Орион-128, CP/M-80

Драйвер печати DPRINT.COM, CP/M-80 Орион Софт OS-DOS V3.60

Продаю платы и наборы микросхем, куплю микросхемы

Все версии CP/M-80

Все версии ORDOS

 Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем.  Читайте про пакет Атлас. Также дискеты можно отформатировать из под 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

    

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу