Приложение 4
Структура тела дискового драйвера (sys_driv.blk)
|
Смеще-ние |
Имя |
Длина |
Комментарии |
|
0 |
INSTL |
2 |
Адрес процедуры инсталляции (если 0, то не нужна) |
|
2 |
BREAD |
2 |
Адрес процедуры чтения / dread (#0D) |
|
4 |
BWRIT |
2 |
Адрес процедуры записи / write (#0E) |
|
6 |
BINIT |
2 |
Адрес процедуры инициализации / binit (#0F) |
|
8 |
SCCSR |
1 |
Регистр состояния (см. ПРИЛОЖЕНИЕ 6) |
|
9 |
DRCSR |
1 |
Регистр состояния (см. ПРИЛОЖЕНИЕ 6) |
|
10 |
OFIM2 |
2 |
Смещение от начала драйвера до кода IM2 в процедуре восстановления режима IM2 на выходе из драйвера. Если значение равно #0000, то IM2 на выходе не устанавливается |
|
12 |
TPSYS |
1 |
тип TR-DOS'а (0/1) 0 - 5.01 1 - 5.03 и выше |
|
13 |
QRDWR |
1 |
Число попыток записи/чтения |
|
14 |
TMBUF |
2 |
Адрес буфера драйвера, объём буфера - 1 кБ |
|
… |
… |
… |
… |
|
20 |
|
2 |
Номер текущего сектора в буфере драйвера |
|
… |
… |
… |
… |
|
30 |
|
1 |
Тип дисковода. Биты (0/1): 0 - 40/80 дорожек 1 - 1/2 стороны |
|
31 |
TMWT |
1 |
Задержка начала чтения сектора |
|
32 |
HTIME |
1 |
Время перемещения головок дисковода |
|
33 |
|
1 |
Тип диска. Биты (0/1): 0 - 40/80 дорожек 1 - 1/2 стороны |
|
34 |
|
1 |
Размер сектора: 1/2/4: 256/512/1024 байт |
|
35 |
|
1 |
Количество секторов на дорожке |
|
36 |
|
16 |
Таблица номеров секторов на дорожке |
|
Байты 8..15(8) хранятся в канале и в векторе блочного устройства (см. ПРИЛОЖЕНИЯ 6,7) Байты 33..51 описывают диск и соответствуют байтам 23..25 и 64..79 в 0-ом блоке описателя устройства. $binit(#0F) сам настраивает драйвер на iSDOS-диск. Для настройки драйвера на нестандартную дискету (TR‑DOS, MS-DOS и т.п.) проинициализируйте эти байты. |
|||
Приложение 4а
Структура тела драйвера *.typ - устройства вывода на дисплей
|
Смещение |
Длина |
Имя |
Комментарий |
|
0 |
2 |
|
как правило, не используется |
|
2 |
2 |
TYPE |
точки входа для рестартов печати символов |
|
4 |
2 |
TYCPL |
|
|
6 |
2 |
TYPOS |
|
|
8 |
1 |
|
ширина матрицы символов в точках (6 для ty42 и 4 для ty64). Используется рестартами $y__ и $n__ уровня WIND.SYS |
|
9 |
4 |
|
зарезервировано |
|
13 |
1 |
|
должен быть равен 0 (признак typ) |
|
14 |
2 |
|
зарезервировано |
|
16 |
2 |
GSZ |
размер знакогенератора в байтах |
|
18 |
|
|
собственно, знакогенератор драйвера |
|
байты 8...15 хранятся также в канале и в векторе символьного устройства вывода. Байты, соответствующие зарезервированным используются там для хранения текущих координат печати и адреса процедуры обработки ошибок символьного устройства вывода. |
|||
Приложение 4б
Структура тела драйвера *lpr - устройства вывода на принтер
|
Смещение |
Длина |
Имя |
Комментарий |
|
0 |
2 |
|
инициализация портов принтера, если это необходимо |
|
2 |
2 |
|
процедура печати символа, поданного в регистре A |
|
4 |
9 |
|
зарезервировано |
|
13 |
1 |
|
должен быть равен 1 (признак *.lpr) |
|
14 |
2 |
|
зарезервировано |
|
байты 8...15 хранятся также в канале и в векторе символьного устройства вывода. |
|||
Приложение 4в
Структура тела драйвера *key:
|
Смещение |
Длина |
Имя |
Комментарий |
|
0 |
2 |
|
как правило, не используется |
|
2 |
2 |
TTYIN |
точки входа для рестартов ввода с клавиатуры |
|
4 |
2 |
KWAIT |
|
|
6 |
2 |
KTEST |
|
|
8 |
1 |
K_CSR |
регистр состояния, биты (0/1): 0 - строчные/ЗАГЛАВНЫЕ 1 - lat/рус 2 - текст/псевдографика 3 - разрешение/запрет kwait. Этот бит сбрасывается сам при пустом буфере |
|
9 |
1 |
M_CSR |
маска разрешения смены соответствующих битов регистра K_CSR (1 - смена разрешена) |
|
10 |
1 |
K_LAST |
код последней нажатой клавиши |
|
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 |
|
KS+20 |
32 |
|
буфер нажатых клавиш (заполняется и опорожняется с помощью INC) |