Ниже приведен пример программы, реализующей некоторые из описанных запросов.
.MODEL |
small |
|
PUBLIC |
_INFACE |
|
VERSION |
EQU |
1 |
EXTRN |
_PARAM:BYTE |
|
EXTRN |
_Q:BYTE |
.DATA
INCLUDE |
DEF.ASM |
; Определения некоторых констант |
||
P_LIST |
STRUC |
|||
LINTN |
DB |
32 dup(0) |
; Список активных номеров прерываний |
|
HANDLES |
DW |
? |
||
HANDLEP |
DW |
? |
||
ER_CODE |
DW |
? |
||
ERNUM |
DW |
? |
; Код ошибки |
|
HANDLER |
DD |
? |
||
MODE |
DW |
? |
; Текущий режим приема пакетов |
|
MLIST |
DB |
0,0,0,0,0,0 |
; Список допустимых режимов; 1 => имеется |
|
PKT_IN |
DW |
?,? |
; Диагностический массив |
|
pkt_out |
DW |
?,? |
||
byte_in |
DW |
?,? |
||
byt_out |
DW |
?,? |
||
err_in |
DW |
?,? |
||
err_out |
DW |
?,? |
||
pk_drop |
DW |
?,? |
||
L1 |
DW |
0 |
; Версия драйвера |
|
L2 |
DW |
0 |
; класс/номер |
|
L3 |
DW |
0 |
; Тип |
|
L4 |
DW |
0 |
; Функция |
|
_NAME |
DB |
0,0,0,0,0,0,0,0,0,0 |
; Имя интерфейса |
|
ETHER_ADR |
DB |
ADDR_LEN dup(-1) |
; Ethernet-адрес |
|
S_ADR |
DB |
EADDR_LEN+5 dup(-1) |
; Ethernet-адрес получателя |
|
D_ADR |
DB |
EADDR_LEN+5 dup(-1) |
; Ethernet-адрес отправителя |
|
P_LIST |
ENDS |
QUEUE |
STRUC |
||
Leng |
DW |
15000,? |
; Длина очереди |
Tail |
DW |
? |
; Смещение последнего элемента очереди |
Head |
DW |
? |
; Смещение первого элемента очереди |
_end |
DW |
? |
; Указатель на конец очереди |
p_len |
DW |
? |
; Длина пакета |
P_start |
DW |
? |
; Указатель на текущий пакет = Q_head - Q_begin +2 |
NEW |
DB |
0 |
; Флаг нового пакета |
Line |
DB |
? |
; Строка экрана |
Npacks |
DD |
0 |
; Счетчик принятых пакетов |
B |
DW |
? |
; смещение Q_beg |
Point |
DW |
380 dup(?) |
|
Beg |
DB |
31000 dup(?) |
; Пакетный буфер |
QUEUE |
ENDS |
ether_bdcst |
DB |
EADDR_LEN dup(-1) |
; Широковещательный адрес Ethernet, заполненный -1. |
ether_addr |
DB |
EADDR_LEN dup(-1) |
|
bogus_type |
DB |
0,0; |
|
signature |
DB |
'PKT DRVR',0 |
; Сигнатура пакетного драйвера |
signature_len |
equ |
$-signature |
|
SAFE |
DW |
? |
|
DFLAG |
DB |
0 |