cmp word ptr ds:[6ch],00b0h ;есть переход через сутки?
jne New08Time ;нет, переход
mov byte ptr ds:[70h],1 ;полночь
mov word ptr ds:[6ch],0 ;новый счетчик времени
mov word ptr ds:[6eh],0
New08Time :
pop ds
mov al,20h ;пошлем контроллеру EOI
out 20h,al
jmp short $+2
pop ax
Iret
New08 endp
;Передача данных в контроллер
;Вход: AH - байт для передачи
;Выход: CF=0 – успешно, CF=1 - неуспешно
OutFDC proc
push ax ;запомним регистры
push bx
push ex
push dx
mov FDCErrCode,0 ;сбросим код ошибки
; ждем готовность контроллера к приему
mov dx,3f4h ;адрес статус регистра
mov bl,2 ;счетчик циклов
хог сх,сх ;каждый цикл
OutFDC1 :
in al,dx ;прочитаем статус регистр
and al,0c0h ;выделим направление и
;состояние передачи данных
cmp al,80h ;контроллер готов принять
;данные?
je OutFDC2 ;да, передадим данные
loop OutFDC1 ;ждем состояние
dec bl ;уменьшим счетчик повторов
jnz OutFDC1 ;ждем состояние
mov FDCErrCode,FDCTimeFail ;не готов принять данные
;за полный цикл
stc ;укажем ошибку
jmp short OutFDCRet ;на выход
; передадим байт в контроллер
OutFDC2 :
inc dx ;адрес регистра данных
mov al,ah ;данные в AL
out dx,al ;передадим
jmp short $+2
; подождем время восстановления
mov bх,29 ;время ожидания в циклах
;таймера не менее 23 мкс
call WaitTimer2 ;ждем не менее 23 мкс
clc ;все в порядке
OutFDCRet:
call TestEOIMCA ;проверим ЕOI для МСА
pop dx ;восстановим регистры
pop ex
pop bx
pop ax
ret
OutFDC endp
; Прием данных из контроллера
; Выход: CF=0 - успешно, CF=1 - неуспешно
InFDC proc
push ax ;запомним регистры
push bx
push cx
push dx
push di
mov di,offset FDCResult ;адрес для данных от
;контроллера
mov FDCErrCode,0 ;сбросим.код ошибки
mov dx,3f4h ;адрес статус-регистра
mov bh,7 ;максимальное количество
;данных из контроллера
InFDC0 :
mov bl,2 ;количество циклов ожидания
;данных
xor cx,cx ;каждый цикл
InFDCI :
in al,dx ;читаем статус-регистр
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.