Системное программное обеспечение. Рощин А.В. - 149 стр.

UptoLike

Составители: 

149
; назначены только для символьных устройств.
; Команды 12 (IOCTL-вывод), 13 (открытия устройства) и 14
; (закрытия устройства) не обрабатываются в данном драйвере
; Команда 10: Состояние вывода
output_status: jmp done ; Выйти с уст. битом "сделано"
; Команда 11: Очистка вывода
output_ckear: jmp done ; Выйти с уст. битом "сделано"
; Команда 12: IOCTL-вывод
ioctl_output: jmp unknown ; Выйти с уст. битом "ошибка"
; Команда 13: Открытие
open: jmp done ; Выйти с уст. битом "сделано"
; Команда 14: Закрытие
close: jmp done ; Выйти с уст. битом "сделано"
; Команда 15: Сменный носитель
; Драйвер по номеру устройства в группе, полученному от DOS,
; должен установить бит "занято" в слове состояния заголовка
; запроса в 1, если носитель не сменный, или в 0, если носи-
; тель сменный. в RAM-диске носитель несменный, поэтому сле-
; дует установить этот бит в 1.
removable: mov es:[bx].rh_status,200h ; Установка бита "занято"
jmp done ; Выйти с уст. битом "сделано"
; Команда 16: Вывод по занятости
; Это команда для символьных устройств. Данный драйвер должен
; установить бит 2ошибка" и код ошибки 3 (неизвестная команда)
output_busy: jmp unknown ; Выйти с уст. битом "ошибка"
; Выход по ошибке
unknow: or es:[bx].rh_status,8003h ; Уст. бита и кода ош.
jmp done ; Выйти с уст. битом "сделано"
; Обычный выход
done: or es:[bx].rh_status,100h ; Уст. бит "сделано"
pop si
pop di
pop dx
pop cx
pop bx
pop ax
pop es
pop ds
ret ; Возврат в DOS
; Конец программы
end_of_program:
; Выравнивание начало RAM-диска на границу параграфа
if ($-start_address)mod 16 (если не 0)
org ($-start_address)+(16-($-atart_address)mod 16)
endif
start_disk equ $
; Процедура initial помещается в начало RAM-диска, т.к.
; она выполняется единственный раз в команде нициализа-
; ции, после чего ее можно стереть.
initial proc near ; Вывод сообщения на консоль
                                         149



; назначены только для символьных устройств.
; Команды 12 (IOCTL-вывод), 13 (открытия устройства) и 14
; (закрытия устройства) не обрабатываются в данном драйвере
; Команда 10: Состояние вывода
output_status:         jmp done ; Выйти с уст. битом "сделано"
; Команда 11: Очистка вывода
output_ckear:          jmp done ; Выйти с уст. битом "сделано"
; Команда 12: IOCTL-вывод
ioctl_output:          jmp unknown         ; Выйти с уст. битом "ошибка"
; Команда 13: Открытие
open:           jmp done ; Выйти с уст. битом "сделано"
; Команда 14: Закрытие
close:          jmp done ; Выйти с уст. битом "сделано"
; Команда 15: Сменный носитель
; Драйвер по номеру устройства в группе, полученному от DOS,
; должен установить бит "занято" в слове состояния заголовка
; запроса в 1, если носитель не сменный, или в 0, если носи-
; тель сменный. в RAM-диске носитель несменный, поэтому сле-
; дует установить этот бит в 1.
removable: mov es:[bx].rh_status,200h             ; Установка бита "занято"
                jmp done             ; Выйти с уст. битом "сделано"
; Команда 16: Вывод по занятости
; Это команда для символьных устройств. Данный драйвер должен
; установить бит 2ошибка" и код ошибки 3 (неизвестная команда)
output_busy:           jmp unknown         ; Выйти с уст. битом "ошибка"
; Выход по ошибке
unknow:         or     es:[bx].rh_status,8003h ; Уст. бита и кода ош.
                jmp done                          ; Выйти с уст. битом "сделано"
; Обычный выход
done:           or     es:[bx].rh_status,100h     ; Уст. бит "сделано"
                pop si
                pop di
                pop dx
                pop cx
                pop bx
                pop ax
                pop es
                pop ds
                ret                  ; Возврат в DOS
; Конец программы
end_of_program:
; Выравнивание начало RAM-диска на границу параграфа
        if ($-start_address)mod 16 (если не 0)
          org ($-start_address)+(16-($-atart_address)mod 16)
        endif
start_disk      equ $
; Процедура initial помещается в начало RAM-диска, т.к.
; она выполняется единственный раз в команде нициализа-
; ции, после чего ее можно стереть.
initial proc near             ; Вывод сообщения на консоль