ВУЗ:
Составители:
54
; регистры данных (GS не трогать!)
xor AX,AX
mov ES,AX
mov FS,AX
; Возврат в реальный режим,
; прерывания снова разрешены
in AL,CMOS_ADDR
and AL,07Fh
or AL,CH
out CMOS_ADDR,AL
popf
ret
ENDP SetLAddrModeForGS
;****************************************
;* Разрешить работу с памятью выше 1 Мб *
;****************************************
PROC Enable_A20 near
call Wait8042BufferEmpty
mov AL,0D1h ;команда управления линией A20
out 64h,AL
call Wait8042BufferEmpty
mov AL,0DFh ;разрешить работу линии
out 60h,AL
call Wait8042BufferEmpty
ret
ENDP Enable_A20
;***********************************************
;* ОЖИДАНИЕ ОЧИСТКИ ВХОДНОГО БУФЕРА I8042 *
;* При выходе из процедуры: *
;* флаг ZF установлен - нормальное завершение, *
;* флаг ZF сброшен - ошибка тайм-аута. *
;***********************************************
proc Wait8042BufferEmpty near
push CX
mov CX,0FFFFh ;задать число циклов
@@kb: in AL,64h ;получить статус
test AL,10b ;буфер i8042 свободен?
loopnz @@kb ;если нет, то цикл
pop CX
; (если при выходе сброшен флаг ZF - ошибка)
ret
endp Wait8042BufferEmpty
ENDS
; регистры данных (GS не трогать!)
xor AX,AX
mov ES,AX
mov FS,AX
; Возврат в реальный режим,
; прерывания снова разрешены
in AL,CMOS_ADDR
and AL,07Fh
or AL,CH
out CMOS_ADDR,AL
popf
ret
ENDP SetLAddrModeForGS
;****************************************
;* Разрешить работу с памятью выше 1 Мб *
;****************************************
PROC Enable_A20 near
call Wait8042BufferEmpty
mov AL,0D1h ;команда управления линией A20
out 64h,AL
call Wait8042BufferEmpty
mov AL,0DFh ;разрешить работу линии
out 60h,AL
call Wait8042BufferEmpty
ret
ENDP Enable_A20
;***********************************************
;* ОЖИДАНИЕ ОЧИСТКИ ВХОДНОГО БУФЕРА I8042 *
;* При выходе из процедуры: *
;* флаг ZF установлен - нормальное завершение, *
;* флаг ZF сброшен - ошибка тайм-аута. *
;***********************************************
proc Wait8042BufferEmpty near
push CX
mov CX,0FFFFh ;задать число циклов
@@kb: in AL,64h ;получить статус
test AL,10b ;буфер i8042 свободен?
loopnz @@kb ;если нет, то цикл
pop CX
; (если при выходе сброшен флаг ZF - ошибка)
ret
endp Wait8042BufferEmpty
ENDS
54
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »
