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

mov                               byte ptr ds:[si+1],0                ;поверхность 0

mov                               byte ptr ds:[si+2],al               ; номер сектора

mov                               byte ptr ds:[si+3],2                ; код длины сектора

loop                               PrepForFormat        ; заполним таблицу для секторов

установим головки для форматирования цилиндра 1; для цилиндра 1 и дискеты 360/1.2 необходимо реально установиться на цилиндр 2

 


cli

mov                               ah,0fh                         ;команда SEEK

mov                               FDCOpCode,0fh        ;запомним код команды SEEK

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

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

sub                                ah,ah                           ;устройство 0 голова 0

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

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

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

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

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

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

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

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

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

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

call                                Sansl ;опросим прерывание

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

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

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

test                                ah,00100000b             ;операция завершена?

jz                                   FatalErr                      ;нет, ошибка

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

test                                ah,11000000b             ;успешно?

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

cmp                               ST1,2                          ;подходящий цилиндр?

jne                                 FatalErr                      ;нет, ошибка

; успешно сделали: подождем успокоения головок (для привода 1.2 время

; успокоения составляет 15 мс)

mov                               bx,18750      ;время успокоения в циклах таймерa

;15000 мкс/0.8 мкс

call                                WaitTimer2 ;подождем

 


;форматируем цилиндр

 


; установить DMA на таблицу формата

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

add                                di,4   ;начало таблицы формата

mov                               сх,9*4          ;длина таблицы формата

;9 секторов * описатель сектора (4 байта)

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

call                                SetDMA       ;иницируем DMA

mov                               FDCOpCode,04dh   ;запомним код команды Format

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

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

mov                               ah,04dh           ;команда форматирования

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

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

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

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

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

mov                               сх,4                 ;количество данных в заголовке

;таблицы форматa

mov                               si,WorkOff   ;заголовок таблицы формата