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

cld

FormatTableHeadar:

lodsb                                                                            ;байт из заголовка

mov                               ah,al                                       ;для передачи в контроллер

call                                OutFDC                                  ;передадим в контроллер

jc                                   FatalErr                                  ;неуспешно

loop                               FormatTableHeader               ;повторим для всех параметров

;формата

and                                IntFlags,255-IntPres-IntMCA         ;сбросим состояние прерывания

sti                                  ;откроем маски

call                                WaitInt         ;ждем прерывание

jc                                   FatalErr        ;не дождались

;получим результат

call                                InFDC                           ;прочитаем данные из FDC

jc                                   FatalErr                        ;неуспешно

mov                               ah,ST0                          ;регистр состояния 0

and                                ah,11000000b               ;выделим состояние завершения

or                                  ah,ah                             ;успешно?

jnz                                 FatalErr                        ;нет ошибка

 


запишем два сектора, начиная с сектора 1

 


;заполним буфер значениями для записи

mov                               ax,055aah     ;значение для записи в два сектора

mov                               сх,512

mov                               di,WorkOff ;адрес области записи

cld

rep                                 stosw            ;заполним область записи

;установить DMA на рабочую область

mov                               di,WorkOff                          ;смещение рабочей области

mov                               сх,512*2                              ;длина двух секторов

mov                               al,04Ah                                ;код оперции DMA - передаем в FDC

call                                SetDMA                               ;иницируем DМА

mov                               FDCOpCode,045h               ;запомним код команды Запись

; передадим все команды записи

cli                                                         ;закроем маски

mov                               ah,045h           ;команда записи

call                                OutFDC          ;передадим в контроллер

jc                                   FatalErr          ; неуспешно

sub                                ah,ah               ;накопитель 0 поверхность 0

call                                OutFDC          ;передадим в контроллер

jc                                   FatalErr          ;неуспешно

; перешлем данные сектора

mov                               ah,1                   ;цилиндр 1

call                                OutFDC            ;передадим в контроллер

jc                                   FatalErr             ;неуспешно

mov                               ah,0                   ;поверхность 0

call                                OutFDC            ;передадим в контроллер

jc                                   FatalErr             ;неуспешно

mov                               ah,1                   ;сектор 1

call                                OutFDC            ;передадим в контроллер

jc                                   FatalErr             ;неуспешно

mov                               ah,2                   ;код длины 2

call                                OutFDC            ;передадим в контроллер

jc                                   FatalErr             ;неуспешно

mov                               ah,9                   ;количество секторов 9

call                                OutFDC            ;передадим в контроллер

jc                                   FatalErr             ;неуспешно

mov                               ah,02Ah            ;GAP чтения/записи