;границы страницы
WorkNotCross:
mov WorkOff, ax ; запомним смещение
; установимобработчики прерываний
sub ax,ax ; адресация векторов прерываний
mov es, ax
; запомним адреса обработчиков
mov ax,word ptr еs:[08h*4]; ; смещение для таймера
mov bx,word ptr es:[08h*4+2] ; сегмент для таймара
mov cx,word ptr es:[0eh*4] ; смещение для гибкого диска
mov dx,word ptr es:[0eh*4+2] ; сегмент для гибкого диска.
mov Save08Off,ax ;запомним смещение для таймера
mov Save08Seg,bx ;запомним сегмент для таймерa
mov Save0Eoff,cx ;запомним смещениедля гибкого диска
mov Save0Eseg,dx ;запомним сегмент для гибкого дискa
cli ;установим новые вeкторы
mov word ptr es:[08h*4],offset New08
mov word ptr es:[08h*4][2],сs
mov word ptr es:[0eh*4],offset New0E
mov word ptr es:[0eh*4][2],cs
sti
push cs ; адресация пo ES
pop es
;установим скорость передачи данных для дискеты
mov al,1 ; скорость передачи дaнных 300
mov dx,03f7h ; регистр скорости
out dx.al ; установим скорость
jmp ehort $+2
;выполним начальный программный сброс контроллера
mov FDCOpCode,0 ; выполняем сброс
cli ; закрываем маски сначала сброс
mov 1,00011000b ;разрешение DMA-прерываний сброс
;контроллера
;включить мотор устройства 0
;выбрать устройство 0
mov dx,03f2h ;регистр управления
out dx,al ;передадим данные в контроллер
jmp short $+2
mov bx,29 ;время ожидания в циклах
;таймера не менее 23 мкс
call WaitTimer2 ;ждем не менее 23 мкс
mov al,00011100b ;разрешение DMA-прерываний
;работа контроллера
;включить мотор устройства 0
;выбрать устройство 0
out dx,al ;передадим данные в контроллер
jmp short $+2
and IntFlags,255-IntPres-IntMCA ;сбросим состояние
;прерывания
sti ;откроем маски
call WaitInt ;ждем прерывание
jc FatalErr ;не дождались
;снимем прерывание и проверим завершение для 4-х устройств
mov сх,4 ;от четырех устройств
mov dl,11000000b ;маска статуса прерывания
ResetSens: call Sensl ;снимем состояние прерывания
jc FatalErr ;неуспешно
mov ah,ST0 ;статус регистр
cmp ah,dl ;сброс завершен?
jne FatalErr ;нет , что-то другое
inc dl ;следующее устройство
loop ResetSens ;повторим снятие состояния
;ждем раскрутки мотора
mov cx,1000/55 ;время раскрутки мотора
call WaitTime ;ждем
;выполним команду Specify
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.