- •Лабораторна робота №13.
- •Теоретичні відомості.
- •Перевірка підключення драйвера.
- •Виклик функцій драйвера.
- •Стандартні функції emm
- •Отримати багатство emm
- •Отримати сегмент вікна
- •Отримати розмір доступної пам'яті ems
- •Відкрити індекс emm
- •Відобразити пам'ять
- •Закрити індекс emm
- •Отримати номер версії emm
- •Програма, використовуюча ems
- •Коди помилок
- •Індивідуальне завдання.
Виклик функцій драйвера.
Для виклику функцій драйвера додаткової пам'яті програма повинна завантажити код функції в регістр 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, ®, ®);
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, ®, ®);
*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, ®, ®);
*total = reg.x.dx;
*free = reg.x.bx;
return(reg.h.ah);
}