home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / HARDWARE / SHOW285.ZIP / EXPMEM.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-07  |  1.3 KB  |  54 lines

  1. #include <dos.h>
  2. #include <stdio.h>
  3. void
  4. expanded_memory(void)
  5.    {
  6.    union REGS r;
  7.    struct SREGS sr;
  8.    char far *ptr;
  9.    static char mgr_name[] = {"EMMXXXX0"};
  10.    int i;
  11.    
  12.    r.h.al = 0x67;     // this is the EMM manager interrupt
  13.    r.h.ah = 0x35;     // get the address of the interrupt
  14.    intdosx(&r,&r,&sr);
  15.    
  16.    // Now, ES:BX points to EMM handler address, and
  17.    // ES:0000 points to base of the EMM.  The EMM name is at offset 0x0A
  18.    
  19.    FP_SEG(ptr) = sr.es;
  20.    FP_OFF(ptr) = 0x0A;
  21.    
  22.   for (i=0;i<8;i++)
  23.      {
  24.      if ( *(ptr+i) != mgr_name[i])
  25.         {
  26.         printf("\nNo EXPANDED memory present\n");
  27.         return;
  28.         }
  29.      }
  30.   
  31.   // expanded memory is present (at least, there's an expanded memory manager).
  32.   
  33.   r.h.ah = 0x46;   // get EMM manager version number
  34.   int86(0x67,&r,&r);
  35.   
  36.   if (!r.h.ah) 
  37.      ptr = "active";
  38.    else
  39.      ptr = "inactive";
  40.      
  41.   printf("\nEXPANDED memory is present, version %x.%x, and the manager is %s.\n",
  42.      (r.h.al & 0x00F0)>>4,(r.h.al & 0x000F),ptr);
  43.   
  44.   r.h.ah = 0x41;      // get page frame address
  45.   int86(0x67,&r,&r);
  46.   printf("   EMS page frame located at %Xh.\n",r.x.bx);
  47.   
  48.   r.h.ah = 0x42;
  49.   int86(0x67,&r,&r);
  50.   
  51.   printf("   %dK bytes total expanded memory.  %dK bytes available.\n",
  52.      r.x.dx*16, r.x.bx*16);
  53.    }
  54.