home *** CD-ROM | disk | FTP | other *** search
- #include <dos.h>
- #include <stdio.h>
- void
- expanded_memory(void)
- {
- union REGS r;
- struct SREGS sr;
- char far *ptr;
- static char mgr_name[] = {"EMMXXXX0"};
- int i;
-
- r.h.al = 0x67; // this is the EMM manager interrupt
- r.h.ah = 0x35; // get the address of the interrupt
- intdosx(&r,&r,&sr);
-
- // Now, ES:BX points to EMM handler address, and
- // ES:0000 points to base of the EMM. The EMM name is at offset 0x0A
-
- FP_SEG(ptr) = sr.es;
- FP_OFF(ptr) = 0x0A;
-
- for (i=0;i<8;i++)
- {
- if ( *(ptr+i) != mgr_name[i])
- {
- printf("\nNo EXPANDED memory present\n");
- return;
- }
- }
-
- // expanded memory is present (at least, there's an expanded memory manager).
-
- r.h.ah = 0x46; // get EMM manager version number
- int86(0x67,&r,&r);
-
- if (!r.h.ah)
- ptr = "active";
- else
- ptr = "inactive";
-
- printf("\nEXPANDED memory is present, version %x.%x, and the manager is %s.\n",
- (r.h.al & 0x00F0)>>4,(r.h.al & 0x000F),ptr);
-
- r.h.ah = 0x41; // get page frame address
- int86(0x67,&r,&r);
- printf(" EMS page frame located at %Xh.\n",r.x.bx);
-
- r.h.ah = 0x42;
- int86(0x67,&r,&r);
-
- printf(" %dK bytes total expanded memory. %dK bytes available.\n",
- r.x.dx*16, r.x.bx*16);
- }
-