Аппаратное обеспечение IBM PC


         

Теперь приведем пример программы, использующей


END
Теперь приведем пример программы, использующей область HMA для выполнения процедуры генерации звукового сигнала. Программа получает доступ к области HMA, копирует в нее процедуру генерации звукового сигнала и вызывает эту процедуру с помощью межсегментной команды call:
include sysp.inc
.MODEL tiny DOSSEG .STACK 100h
.DATA
msg DB 13,10,"Работа в области HMA", 13, 10 DB "Copyright ©Frolov A.,1991",13,10,13,10 DB "$"
noHMM DB 13,10,"Драйвер HIMEM.SYS " DB "не установлен", 13, 10, "$" yesHMM DB 13,10,"Драйвер HIMEM.SYS установлен, ","$" errmsg DB 13,10,"Ошибка с кодом ", "$" okmsg DB 13,10,"Успех!!!", "$" hmareq DB 13,10,"Запрашиваем область HMA", "$" hmarel DB 13,10,"Освобождаем область HMA", "$" enA20 DB 13,10,"Открываем линию A20", "$" dsA20 DB 13,10,"Закрываем линию A20", "$"
HMMEntry dd ?
HMAStart dd ?
.CODE .STARTUP
mov ah, 9h ; Выводим заголовок mov dx, OFFSET msg int 21h
; Проверяем, установлен ли драйвер HIMEM.SYS
mov ax, 4300h int 2fh cmp al, 80h je HMM_installed
; Если не установлен, выводим сообщение и завершаем ; работу программы
mov ah, 9h mov dx, OFFSET noHMM int 21h jmp terminate
HMM_installed:
mov ah, 9h mov dx, OFFSET yesHMM int 21h
; Получаем адрес управляющей функции драйвера
mov ax, 4310h int 2fh mov word ptr cs:[HMMEntry][0], bx mov word ptr cs:[HMMEntry][2], es
; Запрашиваем область HMA
mov ah, 9h mov dx, OFFSET hmareq int 21h
mov ax,0100h mov dx,0ffffh call cs:[HMMEntry] or ax, ax jnz hmareq_ok jmp error
hmareq_ok: mov ah, 9h mov dx, OFFSET okmsg int 21h
; Открываем линию A20
mov ah, 9h mov dx, OFFSET enA20 int 21h
mov ax,0300h call cs:[HMMEntry] or ax, ax jnz enA20_ok jmp error
enA20_ok: mov ah, 9h mov dx, OFFSET okmsg int 21h
; Записываем в двойное слово HMAStart ; адрес начала облсти HMA
mov word ptr cs:[HMAStart][0], 0010h mov word ptr cs:[HMAStart][2], 0ffffh

Содержание  Назад  Вперед