home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 November / VPR9811A.BIN / BENCH / CWSDPMI2 / CWSDPMI2.LZH / SRC.LZH / VCPI.ASM < prev    next >
Assembly Source File  |  1996-06-15  |  4KB  |  225 lines

  1. ; Copyright (C) 1995,1996 CW Sandmann (sandmann@clio.rice.edu) 1206 Braelinn, Sugarland, TX 77479
  2. ; Copyright (C) Aug 5th 1991 Y.Shibata
  3.     title    vcpi
  4.     include segdefs.inc
  5.     include vcpi.inc
  6.  
  7.     start_data16
  8. emm_handle    dw    0
  9. emm_name    db    "EMMXXXX0",0
  10.     end_data16
  11.  
  12.     start_code16
  13.  
  14. ; Check for Int 67 hooked; destroys ax,bx,es; returns zero flag if not OK
  15.  
  16. check67    proc    near
  17.     mov    ax,3500h+EMS_REQ    ;Check for valid INT handler
  18.     int    21h
  19.     mov    ax,es
  20.     or    ax,bx
  21.     ret
  22. check67    endp
  23.  
  24.  
  25. ;  EMM handle allocation - recommended by vcpi document
  26. ;
  27. ; void ems_init(void)
  28.  
  29.     public    _ems_init
  30. _ems_init    proc    near
  31.     mov    dx,offset DGROUP:emm_name
  32.     mov    ax,3d00h        ;Open Handle
  33.     int    21h
  34.     jc    short no_ems
  35.     mov    bx,ax
  36.     mov    ah,3eh            ;Close Handle
  37.     int    21h
  38.     call    check67            ;Double check; might be file
  39.     jz    short no_ems
  40.     mov    bx,1
  41.     mov    ah,43h            ;Allocate Pages(1 Page Only)
  42.     int    EMS_REQ
  43.     cmp    ah,0
  44.     jne    short no_ems
  45.     mov    emm_handle,dx        ;Save to deallocate later
  46. no_ems:
  47.     ret
  48. _ems_init    endp
  49.  
  50. ;  EMS Page Deallocated
  51. ;
  52. ;void ems_free(void)
  53.  
  54.     public    _ems_free
  55. _ems_free    proc    near
  56.     call    check67
  57.     jz    short no_ems
  58.  
  59.     mov    dx,emm_handle        ;EMS_Handle
  60.     or    dx,dx
  61.     jz    short no_ems        ;never allocated
  62.     mov    ah,45h            ;Deallocate Pages
  63.     int    EMS_REQ
  64.     ret
  65. _ems_free    endp
  66.  
  67. ;  VCPI Installed Check
  68. ;
  69. ;word16    vcpi_present(void)
  70. ;
  71. ;result    -1:VCPI Installed 0:VCPI Not Installed
  72.  
  73.     public    _vcpi_present
  74. _vcpi_present    proc    near
  75.     call    check67
  76.     jz    no_ems            ; also leaves ax zero for return
  77.  
  78.     mov    ax,VCPI_PRESENT        ;VCPI Present
  79.     int    VCPI_REQ
  80.     sub    ah,1
  81.     sbb    ax,ax            ;ah = 0 -> AX = -1
  82.     ret
  83. _vcpi_present    endp
  84.  
  85. ;  VCPI Get Interface
  86. ;
  87. ;word32    get_interface(word32 far *page_table,GDT_S *gdt)
  88. ;
  89.     public    _get_interface
  90. _get_interface    proc    near
  91.     push    bp
  92.     mov    bp,sp
  93.     push    si
  94.     push    di
  95.  
  96.     push    es
  97.     mov    si,[bp+8]        ;DS:SI = &GDT[g_vcpicode]
  98.     les    di,[bp+4]        ;ES:DI = Page Table (DI = 0)
  99.     mov    ax,VCPI_INTERFACE
  100.     int    VCPI_REQ
  101.     mov    eax,ebx
  102.     shld    edx,eax,16        ;DX:AX = EBX
  103.     pop    es
  104.  
  105.     pop    di
  106.     pop    si
  107.     pop    bp
  108.     ret    
  109. _get_interface    endp
  110.  
  111. ;  VCPI Maximum page number
  112. ;
  113. ;word16    vcpi_maxpage(void)
  114. ;
  115. ;result    max returnable page number
  116.  
  117.     public    _vcpi_maxpage
  118. _vcpi_maxpage    proc    near
  119.     mov    ax,VCPI_MAX_PHYMEMADR
  120.     int    VCPI_REQ
  121.     shr    edx,12
  122.     mov    ax,dx
  123.     ret
  124. _vcpi_maxpage    endp
  125.  
  126. ;  VCPI Unallocated Page count
  127. ;
  128. ;word16    vcpi_capacity(void)
  129. ;
  130. ;result    Free VCPI Memory(Pages)
  131.  
  132.     public    _vcpi_capacity
  133. _vcpi_capacity    proc    near
  134.     mov    ax,VCPI_MEM_CAPACITY
  135.     int    VCPI_REQ
  136.     mov    ax,dx            ;Cut Upper16Bit(CAUTION!!)
  137.     ret
  138. _vcpi_capacity    endp
  139.  
  140. ;  VCPI Memory Allocate
  141. ;
  142. ;word16    vcpi_alloc(void)
  143. ;
  144. ;result    Allocate Page No.
  145.  
  146.     public    _vcpi_alloc
  147. _vcpi_alloc    proc    near
  148.     mov    ax,VCPI_ALLOC_PAGE
  149.     int    VCPI_REQ
  150.     test    ah,ah
  151.     je    short vcpi_alloc_success
  152.     xor    ax,ax            ;Error result = 0
  153.     ret
  154. vcpi_alloc_success:
  155.     shr    edx,12
  156.     mov    ax,dx            ;Cut Upper16Bit (CAUTION!!)
  157.     ret
  158. _vcpi_alloc    endp
  159.  
  160. ;  VCPI Memory Deallocate
  161. ;
  162. ;void    vcpi_free(word16 page_number)
  163.  
  164.     public    _vcpi_free
  165. _vcpi_free    proc    near
  166.     push    bp
  167.     mov    bp,sp
  168.  
  169.     movzx    edx,word ptr 4[bp]
  170.     sal    edx,12            ;Address = Page_number * 4KB
  171.     mov    ax,VCPI_FREE_PAGE
  172.     int    VCPI_REQ
  173.  
  174.     pop    bp
  175.     ret
  176. _vcpi_free    endp
  177.  
  178. ;  VCPI Get PIC Vector
  179. ;
  180. ;word16    vcpi_get_pic(void)
  181. ;
  182. ;Result MASTER PIC Vector No.(IRQ0)
  183.  
  184.     public    _vcpi_get_pic
  185. _vcpi_get_pic    proc    near
  186.     mov    ax,VCPI_GET_PIC_VECTOR
  187.     int    VCPI_REQ
  188.     mov    ax,bx            ;MASTER PIC Vector
  189.     ret
  190. _vcpi_get_pic    endp
  191.  
  192. ;  VCPI Get PIC Vector
  193. ;
  194. ;word16    vcpi_get_secpic(void)
  195. ;
  196. ;Result SLAVE PIC Vector No.(IRQ0)
  197.  
  198.     public    _vcpi_get_secpic
  199. _vcpi_get_secpic    proc    near
  200.     mov    ax,VCPI_GET_PIC_VECTOR
  201.     int    VCPI_REQ
  202.     mov    ax,cx            ;SLAVE PIC Vector
  203.     ret
  204. _vcpi_get_secpic    endp
  205.  
  206. ;  VCPI Set PIC Vector
  207. ;
  208. ;void    vcpi_set_pics(word16 master_pic, word16 slave_pic)
  209.  
  210.     public    _vcpi_set_pics
  211. _vcpi_set_pics    proc    near
  212.     push    bp
  213.     mov    bp,sp
  214.     mov    bx,4[bp]        ;MASTER PIC Vector
  215.     mov    cx,6[bp]        ;SLAVE PIC Vector
  216.     mov    ax,VCPI_SET_PIC_VECTOR
  217.     int    VCPI_REQ
  218.     pop    bp
  219.     ret
  220. _vcpi_set_pics    endp
  221.  
  222.     end_code16
  223.  
  224.     end
  225.