Все функции реализуются с помощью обращения к драйверу с набором определенных параметров. При этом значение регистра AH определяет тип запроса. Каждому типу используемого сетевого протокола, с которым работает интерфейс, ставится в соответствие целочисленный указатель (handle), получаемый с помощью процедуры access_type. Выполнимость драйвером тех или иных операций может быть выяснена с помощью запроса driver_info.
При работе с драйвером следует проявлять осторожность и спасать нужные вам регистры. Следует также помнить, что порядок байтов в PC и в некоторых сетях, включая Ethernet, не совпадает. Описание основных запросов, посылаемых пакетному драйверу:
1. Получение информации о типе и функциональных возможностях драйвера
driver_info AH == 1,
AL == 255 (код запроса)
public
_driver_info
_driver_info
proc near
mov AX, 1FFH
; ah=1, al=255
call int_pkt
; обращение к драйверу
jnc lv
mov AX, seg _PARAM.ER_CODE
mov DS, AX
mov _PARAM.ER_CODE, 272
; Устанавливаем код "Нет инф. о драйвере"
lv:
ret
_driver_info
endp
int_pkt:
; Подпрограмма обращения к драйверу
push ds
push es
pushf
cli
call _param.Handler
; адрес _param.Handler должен быть определен раньше
pop es
pop ds
ret
Целочисленный указатель (handle) должен быть занесен в регистр BX (для старых драйверов). В случае ошибки устанавливается флаг carry, а код ошибки заносится в регистр DH. Сообщение BAD_HANDLE (неверный указатель) возможно только для старых драйверов. При благополучном исполнении флаг carry равен нулю, а в регистры будет занесены следующие параметры:
BX |
версия; |
CH |
класс; |
CL |
номер; |
DX |
тип; |
DS:SI |
указывают на строку имени драйвера; |
AL |
функциональные возможности. |
AL = 1 |
гарантируется выполнение базовых функций; |
= 2 |
обеспечено выполнение базового и расширенного набора функций; |
= 5 |
выполняется базовый и экстра-набор функций; |
= 6 |
выполним полный набор функций; |
= 255 |
драйвер не установлен. |