;**************************************************************
;***    EMS580.ASM                                          ***
;***                                                        ***
;***    function  EMS_Ems.getAddrsMappable40(               ***
;***              var buffer:     EMS_MappablePagesInfoArr; ***
;***              var num_entries: Word)                    ***
;***              : Boolean;                                ***
;***                                                        ***
;***    Returns, in the buffer specified a list of the      ***
;***    pages in memory which can be mapped. These include  ***
;***    pages in the middle of the 640K area so caution     ***
;***    must be exercised in mapping them.                  ***
;***                                                        ***
;***    Returns 0 if no error or an error code.             ***
;***                                                        ***
;***    (Ems Version 4.0)                                   ***
;**************************************************************

        .model  large,pascal   

        include emsdefs.asm 

        extrn   errno:WORD  

;
;   Define entry point
;
        public  EMS_Ems@getAddrsMappable40

        .code

EMS_Ems@getAddrsMappable40 proc buffer:Far Ptr Byte, num_entries:Far Ptr Word, self:DWord

        push    di                      ; Save di

        les     di,buffer               ; Get the buffer address into ES:DI

        mov     ax,GetAddrsMappable40   ; Make the EMS call
        int     Ems           

        or      ah,ah                   ; Set flags
        jnz     error

        les     bx,num_entries          ; Return number of pages
        mov     word ptr es:[bx],cx

        xor     ax,ax                   ; return OK
        pop     di                      ; restore di
        ret         

error:
        pop     di                      ; restore di

        mov     al,ah                   ; AL gets error code
        xor     ah,ah                   ; Zero extend
        mov     errno,ax                ; Save in errno too
        ret

EMS_Ems@getAddrsMappable40 endp         ; End of procedure

        end                             ; End of source file


