Скачиваний:
43
Добавлен:
01.05.2014
Размер:
348.67 Кб
Скачать

IpxRelinquishControl

На входе:

BX

=

0Ah.

На выходе:

Регистры не используются.

Если ваша программа не использует ESR, она, очевидно, должна в цикле опрашивать поле InUse блока ECB, для которого выполняется ожидание завершения процесса приема или передачи пакета. Однако для правильной работы драйвера IPX в цикл ожидания необходимо вставлять вызов функции IPXRelinquishControl. Эта функция выделяет драйверу IPX процессорное время, необходимое для его правильной работы.

IpxDisconnectFromTaget

На входе:

BX

=

0Bh.

ES:SI

=

Указатель на структуру, содержащую сетевой адрес станции:

struct NetworkAddress {

unsigned char Network[4];

unsigned char Node[6];

unsigned char Socket[2];

};

На выходе:

Регистры не используются.

Эта функция используется программой для того, чтобы сообщить сетевому коммуникационному драйверу, что она (программа) больше не будет посылать пакеты на указанную станцию. Соответствующий драйвер освобождает виртуальный канал на уровне платы сетевого адаптера для указанного сетевого адреса.

Функцию IPXDisconnectFromTaget нельзя вызывать из программы ESR.

Функции aes

Если вашей программе требуется измерять временные интервалы, она может воспользоваться асинхронным планировщиком событий AES, реализованным в рамках драйвера IPX.

Для функций AES можно использовать тот же формат ECB, что и для функций IPX. Однако поля используются немного по-другому:

struct AES_ECB {

void far* Link;

void (far *ESRAddress)();

unsigned char InUse;

unsigned char AESWorkspace[5];

};

Поле AESWorkspace используется планировщиком AES. Назначение остальных полей полностью аналогично соответствующим полям обычного ECB.

IpxScheduleIpxEvent

На входе:

BX

= 05h.

AX

=Время задержки в тиках таймера.

ES:SI

=Указатель на блок ECB.

На выходе:

Регистры не используются.

Функция IPXScheduleIPXEvent немедленно возвращает управление вызвавшей ее программе. После истечения временного интервала, заданного в регистре AX, поле InUse блока ECB, адрес которого задавался при вызове этой функции, сбрасывается в ноль. После этого вызывается программа ESR, если она была задана для данного ECB.

Обычно функция IPXScheduleIPXEvent используется внутри ESR, для того чтобы отложить на некоторое время обработку принятого пакета.

IpxGetIntervalMarker

На входе:

BX

=

08h.

На выходе:

AX

=

Интервальный маркер.

Эта функция может использоваться для измерения временных интервалов в пределах примерно одного часа.

Возвращаемое значение - интервальный маркер - это значение, лежащее в интервале от 0000h до FFFFh и представляющее собой время в тиках таймера (следуют с интервалом примерно 1/18 секунды).

Для того, чтобы измерить время между двумя событиями, программа вызывает функцию IPXGetIntervalMarker два раза. Разность между полученными значениями является интервалом между событиями в тиках таймера.

Отметим, что вместо использования этой функции можно опрашивать значение двойного слова в области данных BIOS по адресу 0000h:046Ch. В этом слове хранится счетчик тиков таймера, значение которого обновляется каждые 55 миллисекунд.