Программирование на Ассемблере
Начнем с самой простой команды - с команды управления
мотором дисковода, которую мы уже использовали выше. Номер команды (в нашем
случае 9) указывается в специальном поле структуры ввода/вывода (28-й и
29-й байты).
Параметром команды управления мотором является длинное слово (смещение 36),
которое определяет конкретное действие (0 - выключить, 1 - включить). Приведем список основных команд trackdisk.device: Nо. Название Назначение
------------------------------------------------------------------
2 READ чтение одного или нескольких секторов
3 WRITE запись секторов
4 UPDATE обновление буфера трека
5 CLEAR очистка буфера трека
9 MOTOR включение/выключение мотора дисковода
10 SEEK поиск трека
11 FORMAT форматирование трека
12 REMOVE команда инициализации; выполняется
при смене диска
13 CHANGENUM запрос числа перестановок диска
14 CHANGESTATE проверка наличия диска в дисководе
15 PROTSTATUS проверка флага защиты от записи
Рассмотрим подробнее последние три команды. Эти команды используются для
различного рода проверок состояния диска и возвращают результат в
специальном поле (смещение 32) структуры ввода/вывода. В приведенном выше
примере мы сохраняем значение этого поля в D7, что дает возможность
наблюдать результаты работы команд trackdisk.device в окне AssemPro.
Вот образец программы для передачи рассмотренных команд устройству
trackdisk.device: test: ;(6.5.6B)
lea diskio(PC),A1 ;адрес структуры ввода/вывода
move #13,28(A1) ;номер команды (к примеру, 13)
move.l execbase,A6 ;база exec.library
jsr SendIO(A6) ;посылаем команду Команда CHANGENUM (код 13) возвращает количество \"манипуляций\" с диском:
если Вы удалите диск из дисковода и затем вставите его обратно, то
значение, возвращаемое командой CHANGENUM, увеличится на два (!).
|