ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »