указание для программы ISR завершить
cli
int 21h ; запросить текущую программу ISR
mov lpPrevISR.LoWord,bx
mov lpPrevISR.HiWord,es ; сохранить ее
mov dx,OFFSET FIXED_TEXT:IntSvcRtn
push ds
mov ds,segFixed
assume ds:NOTHING
mov ax,2500h+INT_DEV
int 21h ; установить нашу программу ISR
pop ds
assume ds:DGroup
sti
mov dx,OFFSET DGroup:sdPrompt
mov ax,9
int 21h ; S)tart или Q)uit
ml1:
mov dl,0PFh
mov ah,6
int 21h ; читать с консоли, не ожидая
jz ml3
or al,40h
cmp al,'q'
je ml8 ; пропустить, если нажато "Q"
cmp al,'s'
jne ml3 ; пропустить, если не нажато "S"
cli
in al,PIC01 ; размаскировать прерывание
and al,NOT INT_MASK
out PIC01,al
sti
mov al,NOT FAKE_CTL_START
mov dx,FAKE_PORT
out dx,al ; начать ввод-вывод с устройства
ml3:
mov ax,dwCount1
cmp ax,dwCount2
je ml4 ; пропустить, если счетчик прерываний не изменился
mov dwCount2,ax
mov dx,OFFSET DGroup:sdDot
mov ah,9
int 21,h ;в противном случае выдать точку
ml4:
jmp ml1 ; цикл
ml8:
mov fStopping,1 ; указание для программы ISR завершить работу
mov dx,FAKE_PORT
ml9:
in al,dx
rcr al,1
jnc ml9 ; цикл, если занято
cli
in al,PIC01
or al,INT_MASK
out PIC01,al ; маскировать уровень прерывания
sti
push ds
lds dx,lpPrevISR
assume ds:NOTHING
mov ax,2500h+INT_DEV
int 21h ; восстановить предыдущую программу ISR
pop ds
assume ds:DGroup
mov ax,4C00h
int 21h ; выход
_TEXT ENDS
end_main
_____________________________________________________________________
Листинг 1. Программа dostest.asm
Драйвер устройства начинает работу с проверки старшего бита порта состояния, чтобы убедиться в наличии устройства. Затем он устанавливает связь с вектором прерывания MS-DOS для прерывания 11.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий