если установлен, выводим его
extern long XMM_RequestUMB(unsigned);
extern long XMM_ReleaseUMB(unsigned);
void error(char *msg, long rc);
int main(void)
{
long ver, rc, handle;
static char testmsg[] = "Тестовое сообщение";
char buf[80];
char far *ptr;
int i;
struct XMM_Move move_d;
// Проверяем, установлен ли драйвер HIMEM.SYS,
// если установлен, выводим его версию
if (XMM_Installed())
{
printf("\nHIMEM.SYS installed");
ver = XMM_Version();
printf("\nver XMM: %4X,%4x",
(short)ver, (short)(ver >> 16));
}
else
{
printf("\nHIMEM.SYS not found");
exit(-1);
}
// Запрашиваем управление областью HMA
rc = XMM_RequestHMA(0xffff);
if(rc)
error("Request HMA error",rc);
else
{
// Открываем линию A20
rc = XMM_GlobalEnableA20();
if(rc)
error("Open A20 error",rc);
// Копируем тестовое сообщение сначала из
// стандартной памяти в область HMA,
// затем обратно в стандартную память
FP_SEG(ptr) = 0xffff;
FP_OFF(ptr) = 0x0010;
for(i=0; testmsg[i] != 0; i++)
ptr[i] = testmsg[i];
for(i=0; ptr[i] != 0; i++)
buf[i] = ptr[i];
buf[i] = 0;
// Выводим сообщение для проверки
printf("\n%s",buf);
// Закрываем линию A20 и отдаем системе область HMA
rc = XMM_GlobalDisableA20();
if(rc)
error("Close A20 eror",rc);
rc = XMM_ReleaseHMA();
if(rc)
error("Free HMA error",rc);
}
// Получаем блок EMB размером в 1 Кбайт
handle = XMM_AllocateExtended(1);
if(handle < 0)
error("Request XMB error",handle);
// Копируем тестовое сообщение сначала из
// стандартной памяти в блок EMB,
// затем обратно в стандартную память
move_d.Length = strlen(testmsg) + 1;
move_d.SourceHandle = 0;
Содержание Назад Вперед