home *** CD-ROM | disk | FTP | other *** search
- ;****************************************************************************
- ;* *
- ;* HITEST.ASM - Chip Anderson *
- ;* *
- ;* DOS XMS Driver Testing Program *
- ;* *
- ;* Used to verify the functionality of any DOS XMS Driver. *
- ;* *
- ;****************************************************************************
-
- name Test
- title 'DOS XMS Test Program'
-
- code segment byte public 'CODE'
-
- assume cs:code, ds:code, es:code
-
- org 100h
-
- main proc near
-
- mov ah,9h
- mov dx,offset SignOn
- int 21h
-
- ; Is an XMS Driver installed?
- mov ax,4300h
- int 2Fh
- cmp al,80h
- je HMMIn
- mov ah,9h
- mov dx,offset AintThere
- int 21h
- int 20h ; Terminate
-
- HMMIn: mov ah,9h
- mov dx,offset FoundOne
- int 21h
-
- ; Get the HMM's control entry point
- mov ax,4310h
- int 2Fh
- mov word ptr cs:[HMMEntryPt][0],bx
- mov word ptr cs:[HMMEntryPt][2],es
-
- ; Get the HMM's version number
- mov ax,0
- call cs:[HMMEntryPt]
-
- push bx ; Save driver internal number
- call PrintAX
-
- mov ah,9h
- mov dx,offset InternalVer
- int 21h
-
- pop ax ; Restore driver internal number
-
- call PrintAX
-
-
- ;*------------------------------------------------------------------*
- ;* Basic Function Check *
- ;*------------------------------------------------------------------*
-
- StartTesting:
- xor bx,bx
- push cs
- pop es
- mov si,offset rgbCommands
- cloop: mov bl,byte ptr es:[si]
- cmp bl,'$'
- je exit
-
- ; Print the command being executed
- mov ch,bl
- shl bx,1
- mov dx,[rgszCommands+bx]
- mov ah,9h
- int 21h
-
- cmp ch,cmdDivider
- je isnop
-
- push bx
- mov ah,ch
- mov dx,8192
- call cs:[HMMEntryPt]
- pop bx
-
- ; Print the result
- or ax,ax
- jz Fail
- mov dx,offset Success
- jmp short PrintIt
- Fail: mov dx,offset Failure
- PrintIt:mov ah,9
- int 21h
-
- ; Now print the state of the A20 Line
- mov dx,offset A20Msg
- int 21h
- mov ah,7h
- call cs:[HMMEntryPt]
- or ax,ax
- jz NoA20
- mov dx,offset A20On
- jmp short PrntIt2
- NoA20: mov dx,offset A20Off
- PrntIt2:mov ah,9h
- int 21h
-
- isnop: inc si
- jmp cloop
-
- exit: ; Now do the extended memory test
- mov dx,[rgszCommands+16]
- mov ah,9h
- int 21h
- mov ah,08h
- call cs:[HMMEntryPt]
- call PrintAX
-
- ; Allocate alot of stuff
- mov dx,[rgszCommands+18]
- mov ah,9h
- int 21h
- mov dx,100h
- mov ah,09h
- call cs:[HMMEntryPt]
- push dx
- push dx
- call PrintAX
- pop ax
- call PrintAX
-
- mov dx,[rgszCommands+16]
- mov ah,9h
- int 21h
- mov ah,08h
- call cs:[HMMEntryPt]
- call PrintAX
-
- mov dx,[rgszCommands+20]
- mov ah,9h
- int 21h
- pop dx
- mov ah,10
- call cs:[HMMEntryPt]
- call PrintAX
-
- mov dx,[rgszCommands+16]
- mov ah,9h
- int 21h
- mov ah,08h
- call cs:[HMMEntryPt]
- call PrintAX
-
- ret
-
- main endp
-
-
- PrintAX proc near
- ; Print it
- mov bx,ax
- mov ch,4
- HexLoop:mov cl,4
- rol bx,cl
- mov al,bl
- and al,0Fh
- add al,30h
- cmp al,3Ah
- jl Output
- add al,07h
- Output: mov dl,al
- mov ah,02h
- int 21h
- dec ch
- jnz HexLoop
- ret
-
- PrintAX endp
-
- ;*--------------------------------------------------------------------------*
- ;* Data Area *
- ;*--------------------------------------------------------------------------*
-
- cmdVersion equ 0
- cmdRequest equ 1
- cmdRelease equ 2
- cmdGEnable equ 3
- cmdGDisable equ 4
- cmdTEnable equ 5
- cmdTDisable equ 6
- cmdA20Query equ 7
- cmdExtQuery equ 8
- cmdExtAlloc equ 9
- cmdExtFree equ 10
- cmdDivider equ 11
-
- rgbCommands db cmdDivider
-
- ; Normal High Memory Area Test
- db cmdRequest, cmdRelease, cmdDivider
-
- ; Nested High Memory Area Test
- db cmdRequest, cmdRequest, cmdRelease, cmdRelease, cmdDivider
- db cmdDivider
-
- ; Global vs Local A20 Test
- db cmdGEnable
- db cmdTEnable, cmdTDisable
- db cmdGDisable, cmdDivider
-
- ; Local vs Global A20 Test
- db cmdTEnable
- db cmdGEnable, cmdGDisable
- db cmdTDisable, cmdDivider
-
- db '$'
-
- rgszCommands dw szVer
- dw szHighReq
- dw szHighRel
- dw szGEnable
- dw szGDisable
- dw szTEnable
- dw szTDisable
- dw szTestA20
- dw szExtQuery
- dw szExtAlloc
- dw szExtFree
- dw szDivider
-
- szVer db 13,10,'Version: $'
- szHighReq db 13,10,'Request High Memory Area: $'
- szHighRel db 13,10,'Release High Memory Area: $'
- szGEnable db 13,10,'Globally Enable A20 Line: $'
- szGDisable db 13,10,'Globally Disable A20 Line: $'
- szTEnable db 13,10,'Temp. Enable A20 Line: $'
- szTDisable db 13,10,'Temp. Disable A20 Line: $'
- szTestA20 db 13,10,'See if the A20 Line is On: $'
- szExtQuery db 13,10,'Extended Memory Free: $'
- szExtAlloc db 13,10,'Allocating 100K: $'
- szExtFree db 13,10,'Freeing it: $'
- szDivider db 13,10,'------------------------------------------------------$'
-
- Success db 'Succeeded$'
- Failure db 'Failed $'
-
- A20Msg db ' - A20 Line is $'
- A20On db 'On$'
- A20Off db 'Off$'
-
- SignOn db 13,10,'High Memory Manager Test Program 2.0 - 7/05/88'
- db 13,10,'Copyright 1988, Microsoft Corp.'
- db 13,10,'$'
-
- FoundOne db 13,10,'High Memory Manager is Installed - Version $'
- InternalVer db 13,10,' Internal Version $'
- AintThere db 13,10,'High Memory Manager not Installed.$'
-
- HMMEntryPt dd ?
-
- code ends
-
- end main
-