Аппаратное обеспечение персонального компьютера


           

если установлен, выводим его


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;


Содержание  Назад  Вперед