ZXNet эхоконференция «code.zx»


тема: Sprinter programming...



от: Oleg Grigoriev
кому: Ivan Mak
дата: 18 Jul 1998

Пусть враги твои, Ivan, умрут без сыновей!

14-07-98 в 23:49:30 Ivan Mak ═> Oleg Grigoriev:

OG>> уже есть все необходимые драйвера... А под писишную клаву
OG>> есть?
IM> Писишная клава pаботает автоматом, как спектpумовская.

Hа писишной клаве кнопок малость поболе, чем на спектру-
мовской... А page down/up у вас в исдосе работают? А insert,
delete, home, end? Сканкод клава даёт? (или как его там) Если
да, то зачем мучиться через #fe? Да и драйвер будет поменьше
чем стандартый, наверное...

IM> Имеющиеся дpайвеpа под is-dos, это пpинтеp и pамдиск.

Рам диск кривой, ты сам сказал. И принтер тоже, если КИР не
ошибся.:) Значит под исдос нет _ни-че-го_.

IM> Остальные, как здесь говоpят,
IM> пишутся за пять минут.

Я говорил, что пишутся за час... А с поправкой на КР - за
день.

IM> Вот только я их писать не умею :( Если кто-то подскажет
IM> как, сам напишу.

Берем скудные доки, берем исдосный асм, голову не забыть. И
вперёд, на мины... :)

IM> Hужна инфа, как писать дpайвеpа под is-dos.

Чуть ниже.

IM> Особенно, по экpанным дpайвеpам.

Hичего не выйдет. Точнее выйдет, но не то, что надо. :)

IM>>> Под RAM кpивоватый из-за несоблюдения пpавил pаботы с биосом.
OG>> Кривоватый в смысле, что рам диски убиваются?

IM> Если их там больше опpеделенного объема.

А. Понятно. Блочник небось от АТМ был - метровый.

IM> Впpочем, пpи pаботе с is-dos эти pамдиски ни к селу ни к гоpоду. is-dos их
IM> не видит,

Было бы желание... У меня оно напрочь отсутствует, до сих
пор никак руки не дойдут переделать копировщики и дисковый
блочник для работы с винтом...

IM> а в TR-DOS из is-dos-а, вpоде, никто не ходит.

В смысле? #3d13 ? или #3d00/#3d03 ? Hикто.

IM>>> Кто его писал то ? :))
OG>> А действительно, кто? Hе я, это точно. =)

IM> Paul Falcon

А чё, хороший человек... был.

IM> Сделал это, самым натуpальным обpазом за _5_минут_!
IM> Потому и кpивость.

:) Кривость не от того, что он был написан за 5 минут, а от
того, что он памятью распоряжается единолично.

Инфа по структуре драйверов:

=====cut=====
4. РЕЗИДЕHТHЫЕ ПРОГРАММЫ

Резидентной программой в системе
IS-DOS называется программа, постоянно
находящаяся в специальной области памя-
ти и, поэтому, доступная для работы в
любое время без подгрузки ее с диска.

Работа с резидентной программой под-
разделяется на три этапа:

1. Установка (загрузка) в память с дис-
ка, настройка на адрес и инициализа-
ция.

2. Основная работа

3. Удаление программы из памяти

1-ый и 3-ий этапы осуществляются
командой set.com. Она же создает 18-бай-
товый канал, описывающий резидентную
программу.


Установленные (загруженные) рези-
дентные программы можно увидеть при по-
мощи программ show.com и eliminat.com.
Обращаться к резидентным программам мож-
но по именам из командной строки, ис-
пользуя встроенную команду DOS "@", на-
пример:

@date+3
или
@scan ch+ *.*

Последняя строка содержит сразу 2
имени резидентов. Это вызвано тем, что
некоторые резидентные программы предназ-
начены для работы в паре со специальными
служебными резидентами - scan.res и
univ.res. Эти служебные резиденты осу-
ществляют подбор файлов (по маске, от-
метке и т. п.) и передачу их в качестве
параметра резиденту, запускаемому в паре
с ними.

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

Резиденты, работающие в паре с рези-
дентами scan.res и univ.res обычно имеют
специальную защиту от прямого обращения
к ним через команду "@".

Структура резидентной программы:

****************************************
смещ. длина комментарий

0 2 Адрес процедуры инициализа-
ции. Она вызывается при пе-
ремещении (при этом в рег. A
подается FF) или удалении
(в рег. A подается FE) прог-
раммой SET.com. Если этот
адрес равен 0, то процедура
не вызывается. Эта программа
должна подключать, если это
необходимо, резидента к це-
почке прерываний или к дру-
гой програме, перехватывать
рестарты и восстанавливать
их.

2 2 Адрес главного входа, т.е.
процедуры запуска по имени
рестартами $exebat(#44) и
$run(#48) или по номеру ка-
нала рестартом $exeres(#53)
Если адрес равен 0, то за-
пускается с 4-го байта.

4 R Тело программы - собственно
машинный код

R+4 2 #FFFF - отделяет тело про-
граммы от последующей слу-
жебной информации

R+6 2n таблица настраиваемых адре-
сов - 1. Смещения от начала
вычисляются по LSA. Единица
вычитается для пущей просто-
ты настраивания таких команд
как: CALL, JP, LD HL,
LD A,(nn), наиболее часто
встречающихся в программе.


С появлением программ ассемблера и
сборщика (as.com и link.com) все заботы
о разделителе и таблице настраиваемых
адресов у программиста отпали. Чтобы
собрать резидентную задачу надо лишь за-
резервировать в начале файла 4 байта (2
слова) для адресов точек входа (см.
только что приведенную структуру) и от-
линковать объектный файл(ы) с ключом
/res. Hе забудьте лишь установить ORG
отличный от нуля, чтобы адрес #FFFF не
спутался с разделителем!

5. ДРАЙВЕРЫ УСТРОЙСТВ

Драйвер - это резидентная программа
специального назначения. Он обслуживает
физическое или логическое устройство од-
ного из трех типов:

1. Блочные устройства: файлы типа *.blk,
номера каналов драйверов F8..FF, номера
каналов устройств - 00..07

2. Символьные устройства вывода: файлы
типа *.typ и *.lpr, номера каналов драй-
веров F0..F7, номера каналов устройств -
08..0F

3. Cимвольные устройства ввода: файлы
типа *.key номера каналов драйверов
E8..EF, номера каналов устройств -
10..1F

Установленный в систему драйвер име-
ет только 8-буквенное имя (тип в канале
не хранится). typ от lpr можно отличить
по 0-му биту в 13-ом байте драйвера
(5-ый байт в векторе g_typ(#12)). В на-
чале каждого драйвера располагается век-
тор стандартной структуры:

****************************************
смещ. длина имя комментарий


0 2 INST Программа, инициализа-
ции вызываемая как и
для всех резидентов
программой SET.com, а
также при каждом пере-
ключении устройства,
обслуживаемого драйве-
ром. При этом в реги-
стре A подается номер
устройства

2 2 ENTRY1 1-ая точка входа

4 2 ENTRY2 2-ая точка входа

6 2 ENTRY3 3-я точка входа

8 8 служебная информация,
хранящаяся также в
описании канала ус-
тройства и в векторе
устройства - регистры
состояния, адреса бу-
феров и т. п.

16 ... тело драйвера


Точка входа INST может использо-
ваться для переключения драйвера на со-
ответствующее устройство (задействовано
в sys_driv и в драйверах винчестеров), а
также информирует драйвер (и резидент) о
том, что его передвинули или отключают.
Вся информация подается в регистре A:

A=0..7 - номер устройства, на которое
переключается драйвер

A=FE - драйвер (резидент) отключается,
т.е. будет снят или просто те-
кущее устройство скоро будет
сменено. Делается это на тот
случай если драйвер в рабочем
состоянии перехватывает обраще-
ния к какому-либо рестарту или
другому драйверу.

A=FF - драйвер (резидент) только что
передвинут.

Входы ENTRY1, 2, 3 соответствуют
группам системных рестартов IS-DOS:

****************************************
Драйвер ENTRY1 ENTRY2 ENTRY3

blk $read $write $binit
typ $type $tycpl $typos
key $key $kwait $ktest


Приложение: Структура драйверов
устройств IS-DOS

****************************************
blk - блочное устройство

0 2 INSTL - переключение на устр-во
или переинсталляция
(если значение равно 0,
то процедура не нужна)
2 2 BREAD ┐ точки входа
4 2 BWRIT │ для рестартов
6 2 BINIT ┘ (только для дисководов
со сменным носителем)
8 1 SCCSR - регистр состояния:

биты 0...2 - номер устройства для
кэш-памяти
бит 3 - 0 - драйвер с буфером
1 - драйвер без буфера
бит 4 - 0 - не выполнять
autoflush
1 - выполнять autoflush
при каждой модифи-
кации блоков в кэше
бит 5 - 0 - запрет чтения для
рестартов
1 - разрешение чтения
для рестартов
бит 6 - 0 - запрет записи для
рестартов
1 - разрешение записи
для рестартов
бит 7 - 0 - не использовать кэш
1 - использовать кэш

9 1 DRCSR - еще регистр состояния:

бит 0 - 0 - не выполнять запрос
по адресу QVST
(вектор g_cnfg сме-
щение +40) при об-
ращении к блочному
устройству
1 - выполнять запрос
бит 1 - флаг autoflush (сбрасы-
вается пользователем)
бит 2 - 0 - диск TR-DOS
1 - диск не TR-DOS
биты 3...6 - не используются
бит 7 - 0 - не обрабатывать
ошибки ($erdrv)
1 - обрабатывать ошибки

10 2 OFIM2 - смещение от начала
драйвера до кода IM2
в процедуре восстанов-
ления режима IM2 на вы-
ходе из драйвера.
Если значение равно 0,
то IM2 на выходе не
устанавливается
12 1 TPSYS - тип TR-DOS'а:
0 - 5.01
1 - 5.03 и выше)
14 2 TMBUF - адрес буфера драйвера,
объем буфера - 1Kb.

........

20 2 ..... - номер текущего сектора
в буфере драйвера

........

30 1 ..... - тип дисковода:

бит 0 - 0 - 40 дорожек
1 - 80 дорожек
бит 1 - 0 - односторонний
1 - двухсторонний

31 1 TMWT - задержка начала чтения
сектора
32 1 HTIME - время перемещения голо-
вок дисковода
33 1 ..... - тип диска:

бит 0 - 0 - 40 дорожек
1 - 80 дорожек
бит 1 - 0 - односторонний
1 - двухсторонний
34 1 ..... - размер сектора, значе-
ния этого байта:

1 - 256 байт
2 - 512 байт
4 - 1024 байта

35 1 ..... - количество секторов на
дорожке

36 16 ..... - таблица номеров секто-
ров на дорожке

Примечание: байты 8...15 хранятся также
в канале и в векторе блочного устрой-
ства. Байты 33...51 считываются с диска,
это не что иное, как байты 23...25 и
64...79 из нулевого блока описателя дис-
ка. Подробнее о дисках мы поговорим чуть
позже, при описании рестарта $binit.

****************************************
typ - устройство вывода на дисплей


0 2 ..... - как правило, не исполь-
зуется
2 2 TYPE ┐ точки входа для
4 2 TYCPL │ рестартов печати
6 2 TYPOS ┘ символов

8 1 ..... - ширина матрицы символов
в точках (6 для ty42 и
4 для ty64). Использу-
ется рестартами y___ и
n___ уровня WIN
9 4 ..... - зарезервировано
13 1 ..... - должен быть равен 0
(признак typ)
14 2 ..... - зарезервировано

16 2 GSZ размер знакогенератора
в байтах
18 GSZ собственно знакогенера-
тор драйвера

Примечание: байты 8...15 хранятся также
в канале и в векторе символьного устрой-
ства вывода. Байты, соответствующие за-
резервированным используются там для
хранения текущих координат печати и ад-
реса процедуры обработки ошибок сим-
вольного устройства вывода.

****************************************
lpr - устройство вывода на принтер


0 2 ..... - инициализация портов
принтера, если это не-
обходимо
2 2 ..... - процедура печати симво-
ла, поданного в рег. A,
4 9 ..... - зарезервировано
13 1 ..... - должен быть равен 1
(признак lpr)
14 2 ..... - зарезервировано


Примечание: байты 8...15 хранятся также
в канале и в векторе символьного устрой-
ства вывода.

****************************************
key:


0 2 ..... - как правило, не исполь-
зуется
2 2 TTYIN ┐ точки входа для
4 2 KWAIT │ рестартов ввода
6 2 KTEST ┘ с клавиатуры

8 1 K_CSR - регистр состояния:

бит 0 - 0 - строчные
1 - заглавные
бит 1 - 0 - латинские
1 - русские
бит 2 - 0 - текст
1 - псевдографика
бит 3 - 0 - разрешение kwait
1 - запрет kwait(1)
этот бит сбрасывается
сам при пустом буфере
9 1 M_CSR - маска разрешений смены
соответствующих битов
регистра K_CSR
1 - смена разрешена

10 1 KLAST - код последней нажатой
клавиши
11 1 REPD - интервал между первыми
двумя одинаковыми кла-
вишами (задержка авто-
повтора), значение по
умолчанию - 29
12 1 REPP - интервал между последу-
ющими одинаковыми кла-
вишами (частота авто-
повтора), значение по
умолчанию - 1
13 2 IKEYB - адрес процедуры опроса
клавиатуры
14 2 ..... - зарезервировано

16 2 KS - Размер таблицы кодов
клавиш
18 KS ..... - собственно таблица ко-
дов клавиш

............

KS+18 1 PNKEY - число нажатых клавиш
KS+19 1 - смещение в буфере кла-
виш до кода для TTYIN
(INC)
KS+20 32 ..... - буфер нажатых клавиш
(заполняется и опорож-
няется с помощью INC)
=====cut=====


С наилучшими пожеланиями, Олег aka Ruiner.




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

Похожие статьи:
Timex in Portugal
Софт - о Черном Вороне.
Печатается с продолж. - Как ломаются полуоси (окончание, часть 3).
Грустим - Есть еще кто нибудь на сетях или опять я сам с собою pазговаpивать буду.
Unusual - Литературная страничка на злобу дня.

В этот день...   29 марта