home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / msj / msjv3_1 / lim4 / savscr.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-03-02  |  3.3 KB  |  97 lines

  1. /*
  2. Microsoft Systems Journal
  3. Volume 3; Issue 1; January, 1988
  4.  
  5. Code Listings For:
  6.  
  7.     LIM 4 Programs
  8.     pp. 67-80
  9.  
  10. Author(s): Marion Hansen and John Driscoll
  11. Title:     LIM 4.0: A Definition For the Next Generation of Expanded Memory
  12.  
  13.  
  14.  
  15. Figure 2
  16. ========
  17.  
  18. */
  19.  
  20. /* THIS IS THE MAIN PROGRAM FOR SAVSCR */
  21.  
  22. #include <c:\msc\include\dos.h>
  23. #include <c:\msc\include\memory.h>
  24. #include <c:\msc\include\stdio.h>
  25. #include <c:\emm\demo\emm.h>
  26.  
  27. /* set up size and base of video ram */
  28. #define VIDEO_RAM_SIZE 4000
  29. #define VIDEO_RAM_BASE 0XB8000000
  30. union REGS    inregs,    outregs;
  31. struct SREGS     segregs ;
  32.  
  33. char far *video_ram_ptr =  {VIDEO_RAM_BASE}; /* video start 
  34.                         address (CGA) */
  35. unsigned long int video_ram_size ={4000};    /* bytes in video ram */
  36. unsigned int emm_handle ;                    /* emm handle */
  37. char emm_device_name[] = "EMMXXXX0";         /* Device Nmae of EMM */
  38. char emm_handle_name[8] ="shared" ;          /* name for handle to 
  39.                         be shared */
  40. char far *emm_ptr;                           /* pointer to page 
  41.                                                 frame */
  42. char far *(*page_ptr) ;                      /* pointer to page in 
  43.                         the frame */
  44. int pages_needed = 4;
  45. struct log_phys {
  46.   int log_page_number;
  47.   int phys_page_number;
  48.        } current_pages [4] ;
  49. struct log_phys far *map_unmap_ptr ;
  50. int  result ;         /* result passed back from function calls */
  51.  
  52. main ()
  53. {
  54.    /***************************************************************/
  55.    /* Check for a expanded memory manager of 4.0 or greater.      */
  56.    /***************************************************************/
  57.  
  58.    check_emm_version_number();
  59.    
  60.    /***************************************************************/
  61.    /* Cet four pages of expanded memory.                          */
  62.    /***************************************************************/
  63.    result = get_expanded_memory(&emm_ptr, pages_needed, 
  64.         &emm_handle, emm_handle_name);
  65.    if (result != 0) exit(1);
  66.    
  67.    /***************************************************************/
  68.    /* Map in needed pages                                         */
  69.    /***************************************************************/
  70.  
  71.    result = map_unmap_multiple_pages (current_pages, emm_handle, 1);
  72.  
  73.    /***************************************************************/
  74.    /* Copy video screen to logical page 0.                        */
  75.    /***************************************************************/
  76.  
  77.    move_exchg_to_expanded(MOVE_MEMORY_REGION, /* Move to */
  78.                           video_ram_ptr,      /* conventional RAM */
  79.                           emm_handle,         /* handle number*/
  80.                           0,                  /* to physical page */
  81.                           video_ram_size);    /* the number bytes */
  82.    
  83.    /* make a null video screen at logical page 1 */
  84.    
  85. page_ptr = (emm_ptr + 0x4000);
  86. memset (page_ptr, 0, VIDEO_RAM_SIZE);
  87.  
  88.    /***************************************************************/
  89.    /* Unmap all of the pages so that they are proteced.           */
  90.    /***************************************************************/
  91.  
  92.    result = map_unmap_multiple_pages (current_pages, emm_handle, 0);
  93.  
  94.    /* exit to Dos */
  95.    
  96. }/*
  97.