;--------------------------------------------------- ; HMA.ASM ; ; Programm zur Veranschaulichung der HMA-Funktionen ; des Microsoft Himem.sys Drivers. ; ; Datum: 06.06.89 ; Autor: J”rg Matthaei ;--------------------------------------------------- ; Macros display macro string lea dx,string mov ah,09 int 21h endm cseg segment 'code' assume cs:cseg,ds:cseg,es:cseg org 80h parms equ this byte org 100h begin: mov ax,4300h int 2Fh ; ist ein HMA Treiber instaliert ? cmp al,80h jz hmada display msgnohma ; nein ! fin: mov ah,4Ch ; Programmende int 21h ; ja hole Einsprungadresse fr HMA- hmada: push es ; Funktionen. mov ax,4310h int 2Fh mov word ptr[hmaofs],bx ; speichere Einsprungadressen mov word ptr[hmaseg],es pop es cmp byte ptr [parms],0 ; prfe auf Parameter jne anf0 display msgsyntx ; Anzeige von gltigen Parametern jmp fin anf0: cmp byte ptr [parms+3],'a' ; verzweige je nach Parametern je alloc cmp byte ptr [parms+3],'f' je free cmp byte ptr [parms+3],'s' je status jmp fin ; Die Funktion alloc reserviert 64KB HMA alloc: mov dx,0FFFFh ; reserviere FFFF Bytes HMA mov ah,01 call dword ptr hmaofs dec ax jz enab_himem ; HMA reseviert display msgused ; Reservierung nicht m”glich ! jmp fin enab_himem: mov ah,03 ; A20 global erm”glichen call dword ptr hmaofs display msgresv jmp fin ; Die Funktion free gibt den mit alloc reservierten ; HMA Bereich wieder frei free: mov ah,04 ; A20 global sperren call dword ptr hmaofs mov ah,02 ; HMA freigeben call dword ptr hmaofs display msgfree jmp fin ; Die Funktion status versucht HMA anzufordern, ; gelingt dies gibt sie die Meldung HMA wird nicht benutzt aus. ; Ist eine Reservierung nicht m”glich, so ist der HMA Bereich ; bereits von einem anderen Programm benutzt. status: mov dx,0FFFFh ; versuche FFFFh Bytes mov ah,01 ; HMA anzufordern call dword ptr hmaofs dec ax jz stat1 display msgused ; HMA bereits genutzt jmp fin stat1: mov ah,02 ; von Funktion status reservierte call dword ptr hmaofs ; HMA wieder freigeben display msgnouse jmp fin hmaofs dw 0 ; HMA-DRIVER OFFSET hmaseg dw 0 ; HMA-DRIVER SEGMENT msgnohma db 13,10,'Himem Driver ist nicht installiert',13,10,'$' msgnouse db 13,10,'HMA wird nicht benutzt',13,10,'$' msgresv db 13,10,'64KB HMA sind reserviert.',13,10,'$' msgused db 13,10,'HMA wird schon benutzt',13,10,'$' msgfree db 13,10,'HMA wieder freigegeben.',13,10,'$' msgsyntx db 13,10,'Die Syntax fr HMA lautet :',13,10 db 'hma /a fr anfordern von 64KB HMA',13,10 db 'hma /f fr freigeben von belegter HMA',13,10 db 'hma /s fr Status HMA',13,10,'$' cseg ends end begin