- •Лабораторна робота №13.
- •Теоретичні відомості.
- •Перевірка підключення драйвера.
- •Виклик функцій драйвера.
- •Стандартні функції emm
- •Отримати багатство emm
- •Отримати сегмент вікна
- •Отримати розмір доступної пам'яті ems
- •Відкрити індекс emm
- •Відобразити пам'ять
- •Закрити індекс emm
- •Отримати номер версії emm
- •Програма, використовуюча ems
- •Коди помилок
- •Індивідуальне завдання.
Відкрити індекс emm
На вході: AX = 4300h;
BX = потрібна в цьому пулі кількість
логічних сторінок.
На виході: AH = байт стану EMM;
DX = індекс пулу EMS, він використовуватиметься
у операціях з пулом логічних сторінок.
Ця функція дозволяє замовити пул логічних сторінок (тобто деяку сукупність логічних сторінок додаткової пам'яті). Отриманому пулу надається індекс (handle), який вказує на пул і використовується в усіх операціях з пулом.
/*
*.Name ems_open
*.Title Відкриття індексу пулу сторінок EMS
*.Descr Ця функція відкриває індекс пулу сторінок
* EMS, роблячи доступними логічні сторінки
* додатковій пам'яті.
*.Proto int ems_open(int n_pages, int *handle);
*.Params int n_pages - кількість необхідних логічних
* сторінок;
* int *handle - покажчик на слово, в яке
* буде записаний індекс отриманого пулу.
*.Return Байт стану драйвера EMS
*.Sample ems_test.c
*/
#include <stdio.h>
#include <dos.h>
#include "sysp.h"
int ems_open(int n_pages, int *handle){
union REGS reg;
reg.x.ax = 0x4300;
reg.x.bx = n_pages;
int86(0x67, ®, ®);
*handle = reg.x.dx;
return(reg.h.ah);
}
Відобразити пам'ять
На вході: AH = 44h;
AL = номер фізичної сторінки вікна доступу
(від 0 до 3);
BX = номер логічної сторінки з числа
сторінок (, що знаходяться в кулі, від 0 до n - 1,
де n - кількість логічних сторінок
у кулі);
для версії EMS 4.0 завдання значення
00FFFFh призводить до заборони відображення
фізичних сторінок пулу, для дозволу
їх відображення необхідно викликати цю
функцію ще раз, вказавши правильний
номер сторінки;
DX = індекс EMM, отриманий від функції 43h.
На виході: AH = байт стану EMM.
Функція виконує відображення (прив'язку) однієї з логічних сторінок пулу до одного їх чотирьох 16-кілобайтних сегментів вікна перегляду, тобто до фізичних сторінок.
/*
*.Name ems_map
*.Title Відобразити пам'ять EMS
*
*.Descr Ця функція відображує логічні сторінки
* пулу додаткової пам'яті на фізичні.
*.Proto int ems_map(int phys_page, int log_page
* int handle);
*.Params int phys_pages - номер фізичної сторінки
* вікна доступу (від 0 до 3), на яку необхідно
* відобразити логічну сторінку пулу;
* int_log_page - номер логічної сторінки пулу;
* int *handle - індекс отриманого пулу;
*.Return Байт стану драйвера EMS
*.Sample ems_test.c
*/
#include <stdio.h>
#include <dos.h>
#include "sysp.h"
int ems_map(int phys_page, int log_page, int handle){
union REGS reg;
reg.h.ah = 0x44;
reg.h.al = phys_page;
reg.x.bx = log_page;
reg.x.dx = handle;
int86(0x67, ®, ®);
return(reg.h.ah);
}