Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+Лабораторная№13 .doc
Скачиваний:
31
Добавлен:
27.10.2018
Размер:
138.24 Кб
Скачать

Виклик функцій драйвера.

Для виклику функцій драйвера додаткової пам'яті програма повинна завантажити код функції в регістр AH, код підфункції (зазвичай 0) в регістр AL, і потім викликати переривання INT 67h.

Після повернення з переривання в регістр AH буде записано слово стану. При успішному виконанні функції воно дорівнює 0.

Стандартні функції emm

Стандартні функції - це невелика підмножина функцій EMM, необхідна для роботи звичайних прикладних програм (не резидентних і не драйверів). Усі ці функції підтримуються EMM версії 3.2.

Отримати багатство emm

На вході: AX = 4000h.

На виході: AH = байт стану EMM.

Ця функція використовується для перевірки стану драйвера EMM. Вона повинна використовуватися тільки після того, як програма переконалася в наявності драйвера EMM.

Для отримання стану EMM використовуйте наступну функцію:

/*

*.Name ems_stat

*.Title Визначення стану драйвера EMS

*.Descr Ця функція повертає байт стану

* драйвера EMS

*.Proto char ems_stat(void);

*

*.Params Не використовуються

*

*.Return Байт стану драйвера EMS

*

*.Sample ems_test.c

*/

#include <stdio.h>

#include <dos.h>

#include "sysp.h"

char ems_stat(void){

union REGS reg;

struct SREGS sreg;

reg.x.ax = 0x4000;

int86(0x67, &reg, &reg);

return(reg.h.ah);

}

Отримати сегмент вікна

На вході: AX = 4100h.

На виході: AH = байт стану EMM;

BX = сегмент вікна для доступу до логічних

сторінкам додаткової пам'яті.

Функція дозволяє отримати сегмент 64-кілобайтного вікна, використовуваного драйвером EMS для доступу до логічних сторінок розширеної пам'яті.

/*

*.Name ems_fram

*.Title Визначення сегменту вікна доступу

*

*.Descr Ця функція повертає сегментну адресу

* вікна, яке використовується для доступу до

* додатковій пам'яті.

*.Proto char ems_fram(unsigned *frame);

*.Params unsigned *frame - Покажчик на змінну

* у яку буде записаний сегментний

* адреса вікна доступу.

*.Return Сосотояние EMM.

*.Sample ems_test.c

*/

#include <stdio.h>

#include <dos.h>

#include "sysp.h"

char ems_fram(unsigned *frame){

union REGS reg;

struct SREGS sreg;

reg.x.ax = 0x4100;

int86(0x67, &reg, &reg);

*frame = reg.x.bx;

return(reg.h.ah);

}

Отримати розмір доступної пам'яті ems

На вході: AX = 4200h.

На виході: AH = байт стану EMM;

DX = загальна кількість 16-кілобайтних

сторінок EMS в системі;

BX = число доступних нині

сторінок EMS.

Ця функція дозволяє вам отримати інформацію про наявність і доступність сторінок додаткової пам'яті.

/*

*.Name ems_page

*.Title Визначення кількості сторінок EMS

*

*.Descr Ця функція призначена для визначення

* загальної кількості сторінок EMS і кількості

* сторінок, доступних нині.

*.Proto char ems_page(unsigned *total, unsigned *free);

*.Params unsigned *total - покажчик на змінну

* у яку буде записано загальну кількість

* сторінок пам'яті EMS;

* unsigned *free - покажчик на змінну

* у яку буде записано кількість

* доступних сторінок пам'яті EMS;

*.Return Сосотояние EMM.

*.Sample ems_test.c

*/

#include <stdio.h>

#include <dos.h>

#include "sysp.h"

char ems_page(unsigned *total, unsigned *free){

union REGS reg;

reg.x.ax = 0x4200;

int86(0x67, &reg, &reg);

*total = reg.x.dx;

*free = reg.x.bx;

return(reg.h.ah);

}