home *** CD-ROM | disk | FTP | other *** search
- .model large,pascal
-
- include ems.inc
-
- .code EMS_TEXT
-
-
-
- ;WARNING: This function will destroy AX and can not be used
- ;WARNING: for any EMM function that returns a value in AL.
-
- public __ErrEmsCall
- __ErrEmsCall proc near
-
- assume ds:nothing
-
- int 67h
- xchg al,ah ;AL = Error code
- cbw ;AH = 00 or FF
- or ax,ax ;Any error
- jz Exit ;Brif not, return errNoError = 0
- add ax,errEmsBase-0FF80h ;Map to ERR value
- Exit:
- ret
-
- __ErrEmsCall endp
-
-
-
- ;BOOL PUBLIC __FEmsCheckInstalled(void);
-
- EmsDeviceName db 'EMMXXXX0'
-
- public __FEmsCheckInstalled
- __FEmsCheckInstalled proc uses si di
-
- assume ds:@data
-
- mov ax,3567h ;Get interrupt 67h
- int 21h
-
- mov di,000Ah ;ES:DI -> Device name
- mov si,OFFSET cs:EmsDeviceName
- push cs
- pop ds ;DS:SI -> Expected device name
- mov cx,4
- repe cmpsw ;Compare the names
- push ss ;Restore DS = DGROUP
- pop ds
- jnz NoEms ;Brif device name mismatch, no ems
-
- mov ah,46h ;Get Version
- int 67h
- or ah,ah ;Any error
- jnz NoEms ;Brif so. Pretend no EMS.
-
- cmp al,40h ;LIM 4.0 or better?
- jae Exit ;Brif so, AX != 0. Returning TRUE
-
- NoEms:
- xor ax,ax ;Return FALSE
-
- Exit:
- ret
-
- __FEmsCheckInstalled endp
-
- end