ZX-Forum №1 1993 г.

Система IS-DOS - Опыт программирования в операционной системе iS-DOS (Пример написания драйвера принтера).


Опыт программирования в операционной системе iS-DOS. © Михаил Головин, 1994.

Пример написания драйвера принтера.

В данной статье разбирается построение драйвера печати принтера для компьютера PROFI типа ZX-SPECTRUM. Прочитав эту статью и исправив соответствующим образом листинг программы, Вы сможете "оживить" свой принтер в операционной системе iS-DOS и, тем самым, сможете в полной мере воспользоваться любым программным продуктом работающим с принтером.

По своей структуре драйверы делятся на два типа: так называемые драйверы блочных и драйверы символьных устройств. К первым, например, относится драйвер электронного диска для машин с памятью больше 48Кб (ed_80ips.blk, pr384ips.blk ...). Драйверы символьных устройств -это, например, драйверы принтеров (*.lpr), а также драйверы клавиатуры (ttyin.key, ttyin_mh.key, ttyin48.key.).

По своим функциям каждый тип драйверов подразделяется на драйверы ввода и драйверы вывода информации. Рассматриваемый в данной статье драйвер - это символьный драйвер вывода. В его функции входит принятие от программы байта данных и посылка его на символьное устройство вывода, в данном случае на принтер.

Обычно в драйвере символьного устройства вывода присутствуют:

1. Вектор символьного устройства вывода, в котором определяется основная "стратегия" данного устройства.

2. Программное тело драйвера, в котором определяются основные процедуры, ответственные за вывод.

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

Благодаря наличию этих трёх составляющих, написание драйвера не составит для Вас особого труда. Обратимся к конкретной программе, листинг которой приведен ниже. В данной программе были использованы следующие обозначения: L???? - адресная метка или метка данных;

MEM?? - метка используемая для настройки абсолютных адресов программы. При написании программы драйвера принтера использовались: iS-Edit (редактор), а также пакет программ MONS & GENS (дисковые версии).

Вы набираете текст данной программы в iS-Editor^), используя все его возможности для редактирования, соблюдая только одно условие: два пробела в начале каждой строки. Затем копируете текстовый файл с программой на TR-DOS диск, загружаете GENS и текстовый файл с программой и сразу же за ним специально созданный файл. Этот файл создается следующим образом:

В GENS^) создается текст, содержащий одну строку, например: "10 ;";

Далее этот текст пишется на TR-DOS-диск, например: "p10,10,END".

После загрузки в GENS двух файлов у образовавшегося текстового файла удаляется последняя строка. Затем идёт обычное ассемблирование с записью результатов на TR-DOS-диск. Теперь осталось перезагрузить компьютер и считать на iS-DOS-диск файл, который мы получили в процессе ассемблирования на TR-DOS-диске. С помощью такой технологии можно писать любые программы для iS-DOS, а не только драйверы для принтеров.

Р^. В связи с поступлением в продажу мощной системы программирования - макроассемблера iS-DOS (диск № 17 "Slot" Co., Ltd), в дальнейших материалах обязательно будут рассмотрены его возможности и особенности использования, а также техника программирования непосредственно в самой системе iS-DOS.

; eprof.lpr (Драйвер печати) ; 02.02.94 23:56

; Адрес

загрузки:

50000/#C350

ORG

50000

; Вектор

символьного устройства

вывода

MEM00

EQU

$-1

DEFW

LC3CE

;

Адрес ПП инициализации

MEM01

EQU

$-1

DEFW

LC37D

;

Адрес ПП вывода символа

MEM02

EQU

$-1

DEFW

LC3BF

;

Адрес ПП инверсия режима вывода

MEM03

EQU

$-1

DEFW

LC3BF

;

Адрес ПП установки координат

DEFB

#03

;

Длина курсора текущего драйвера

DEFW

#0000

;

Текущие логические координаты печати

DEFW

#0000

;

Текущие физические координаты печати

DEFB

#01

;

Тип устройства (0-экран/1-принтер)

DEFW

#0000

;

Адрес программы обработки ошибок

LC360

PUSH

BC

PUSH

DE

PUSH

HL

LD

BC,#0006

ADD

HL, BC

MEM04

CALL

LC372

POP

HL

POP

DE

POP

BC

DI

RET

NC

POP

HL

JR

LC3B8

LC372

EI

PUSH

AF

LD

C, #08

RST

#10

;

Ожидание состояния клавиатуры

;

с не нажатыми клавишами.

POP

AF

LD

E,(HL)

INC

HL

; ПП выв LC37D

MEM05 MEM06

LD EX JP

ода симво PUSH LD RST

EXX

POP

CP

JR

BIT

JR

CALL

RET

CALL

D, (HL) DE, HL (HL)

ла ^^'код сим! AF

C, #12 #10

AF #0D

NZ,LC396 0,(HL) Z,LC396 LC396 C

LC3BF

о ;

; ;

ла")

Возврат вектора символьного устройства вывода.

Переход, если не конец строки (HL)= 0-экран/1-принтер Переход, если вывод на принтер Иначе, вывести символ на принтер вернутся, если нажат <BREAK>

LD

A, #0A

JR

LC396

; Послать символ "LF"

LC396

LD

E, A

LD

A, #0F

OUT

(#3F) , A

DI

LC39C

CALL

#1F54

; Проверка нажатия клавиши <BREAK>

JR

NC,MEM07

; Переход, если нажат <BREAK>

IN

A, (#5F)

RLA

JR

C,LC39C

; Цикл: пока нет готовности принтера

LD

A, E

OUT

(#3F) , A

LD

A, #0E

OUT

(#5F) , A

LC3AD

CALL

#1F54

; Проверка нажатия клавиши <BREAK>

JR

NC,MEM08

; Переход, если нажат <BREAK>

IN

A, (#5F)

RLA

JR

NC,LC3AD

; Цикл: пока нет готовности принтера

LC3B7

XOR

A

LC3B8

LD

E, #0F

LD

C, #5F

OUT

(C) , E

EI

LC3BF

RET

LC3C0

LD

A, #96

JR

LC360

MEM07

CALL

LC3C0

JR

LC39C

MEM08

CALL

LC3C0

; ПП иниц LC3CE

; Область

; *** Кон

JR

даализаци] INC RET LD OUT JR адресов DEFW DEFW DEFW DEFW 1ец прогр,

LC3AD и принтера A Z

A, #88 (#7F) ,A LC3B7 настройки #FFFF

MEM00,MEM01 MEM04,MEM05 MEM08 аммы ***

; Настройка порта Ввода/Вывода

; Маркер начала области . ,MEM02,MEM03 >,MEM06,MEM07




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Разное - DOOМ!
Свиток - описание игры Empire 128.
Реклама - Все рекламные объявления печатаются бесплатно!
HINTS! - Сборник паролей к играм STEG , BATTLE COMMAND , PRINCE of PERSIA.
Guide - Формат модуля Pro Tracker v3.x

В этот день...   20 апреля