ResNum db 0 ;номер сектора
ResSize db 0 ;код длины сектора
FDCResultLen equ $-FDCResult ; длина поля результата
FDCOpCode db 0 ;код команды контроллера
FDCErrCode db 0 ;код ошибки
FDCOutAreaLen equ $-FDCResult ; длина поля
; значения в поле FDCErrCode
FDCTimeOut equ 1 ; нет прерывания
FDCTimeFail equ 2 ;не ответил за положенное время
FDCBadData equ 3 ; остались данные в контроллере
FDCComErr equ 4 ; другая ошибка
; области сохранения прерываний
Save08 label dword ;прерывание от таймера
Save08Off dw 0 ;смещение
Save08Seg dw 0 ;сегмент
Save0E label dword ;прерывание от контроллера
;гибких дисков
Save0Eoff dw 0 ;смещение
Save0Eseg dw 0 ;сегмент
IntFlags db 0 ;признаки прерываний
IntPres equ 80h ;есть прерывание от контроллера
IntMCA equ 40h ;требуется команда завершения
;прерывания для шины МСА
PresMCA equ 20h ;шина МСА установлена
ResultOut label byte ;сообщение о результате
db ‘ST0’
FirstOut db ‘ ‘
ToMakeSkipLen db 0dh,0ah
db ‘ST1’
SkipOverTitle equ $-ToMakeSkipLen ;длина до следующей
;переменной
db ‘ ‘,0dh,0ah,’ST2 ‘
db ‘ ‘,0dh,0ah,’C ‘
db ‘ ‘,0dh,0ah,’H ‘
db ‘ ‘,0dh,0ah,’R ‘
db ‘ ‘,0dh,0ah,’N ‘
db ‘ ‘,0dh,0ah,’OP ‘
db ‘ ‘,0dh,0ah,’Res ‘,’ ‘,0dh,0ah,’$’
GoodMsg db ‘Успешное завершение’,0dh,0ah,’$’
BadMsg db 'Неуспешное завершение',0dh,0ah,’$’
RtCounter dw 0 ; счетчик интервалов таймерa
;основная процедура
main proc
push cs ; установим адрасацию
pop ds
; проверим наличие шины МСА (микроканап)
mov ah,0c0h ; получить характеристики машины
int 15h
jc NоnМСА ; нет микроканала
;ES:BX- указывают на список характеристик машины: бит 1
;байта по смещению 5 содержит признак наличия микроканала
test byte ptr es:[bx][5],00000010b ;есть микроканал ?
jz NonMCA ; нет, выход
or IntFlags,PresMCA ; установим признак
;наличия MCA
; определим адрес начала буфера в пределах страницы DMA
NonМСА :
mov ax,offset WorkArea ; смещение рабочей области
mov bx,cs ; сегмент для определения составляющей смещения
mov cl,4
shi bx,cl ; составляющая смещения в сегменте
add bx,ax ; полное смещение
jc WorkNotCross ; переехали страницу - не беспокоимся
mov cx,bx ; запомним полное смещение
add bx,512*3-1 ; размер буфера для трех секторов
jnc WorkNotCrost ; не пересекли страницу
sub ax,ex ; добавим к смещению сколько до пересечения
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.