POP DI | |
POP ES | |
RET |
MOV CX, 32 | ; Установка начального значения счетчика | |
LEA SI, _PARAM.LINTN | ; Устанавливаем указатель списка | |
MOV AL, 60H | ; Задаем начальный номер прерывания | |
CHOICE: | CMP BYTE PTR [SI], 0 | |
JNE SETDRV | ||
INC AL | ||
LOOP CHOICE |
SETDRV: | MOV AH, 35H | |
INT 21H | ||
MOV _PARAM.HANDLER.OFFS,BX | ; Определяем адрес драйвера | |
MOV _PARAM.HANDLER.SEGM, ES |
PUSH DS | ||
POP ES | ||
MOV CX, EADDR_LEN | ||
MOV SI, OFFSET ETHER_ADDR | ||
MOV DI, OFFSET ETHER_BDCST | ||
REPE CMPSB | ||
JE GET_MODE | ; Адрес не определен |
MOV AH, 25 | ; Записываем ethernet-адрес | |
MOV DI, offset ETHER_ADDR | ||
MOV CX, EADDR_LEN | ||
call int_pkt | ||
MOV _PARAM.ER_CODE, DX | ; Устанавливаем код ошибки | |
JMP OKAY |
MOV SAFE, DS | ; Спасаем DS | |
PUSH DS | ||
MOV AH, 2 | ; Открываем доступ пакетам | |
MOV AL, 1 | ; Класс интерфейса | |
MOV BX, -1 | ; Тип интерфейса | |
MOV DL, 0 | ; Номер интерфейса | |
MOV CX, 2 | ; Используем длину type = 2 | |
MOV SI, OFFSET BOGUS_TYPE | ||
PUSH CS | ; ES:DI -> Receiver. | |
POP ES | ||
MOV DI, OFFSET RECEIVER | ||
call INT_PKT | ||
JNC $_$ | ||
MOV _PARAM.ER_CODE, DX | ; Устанавливаем код ошибки | |
$_$: | MOV _PARAM.HANDLES, AX | ; Записываем указатель-Handle |
MOV AH, 6 | ; Определяем ethernet-адрес интерфейса | |
PUSH DS | ||
POP ES | ||
MOV DI, offset _PARAM.ETHER_ADR | ||
MOV CX, EADDR_LEN | ||
MOV BX, _PARAM.HANDLES | ||
call int_pkt | ||
JNC NOBAD | ||
MOV _PARAM.ER_CODE, 273 | ; Ошибка при определении Ethernet-адреса | |
POP DS | ||
JMP OKAY |