Создание TSR программ в операционной системе MS DOS, страница 10

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                                     ;читаем статус-регистр