Программирование на Ассемблере
Команда CHANGESTATE (код 14) возвращает нулевое значение, если в дисководе
присутствует диск. Иначе возвращается $FF.
Если диск не защищен от записи, то команда PROTSTATUS (код 15) возвращает
ноль. В противном случае возвращается значение $FF. Теперь поговорим о командах READ и WRITE. Для этих команд требуются
следующие параметры: адрес буфера ввода/вывода, количество байтов для
чтения/записи, а также начальное смещение на диске.
Поскольку trackdisk.device работает с целыми секторами (размер сектора =
512 байт), количество байтов для чтения/записи должно быть кратно числу 512.
Начальное смещение на диске задается в байтах. Таким образом, для первого
сектора этот параметр должен быть равен нулю, для второго - 512, и так
далее:
Смещение = (Номер_Сектора - 1) * 512. Вот пример программы, которая считывает первые два сектора диска в
некоторый буфер: test: ;(6.4.6C)
lea diskio(PC),A1
move #2,28(A1) ;команда READ
move.l #diskbuff,40(A1) ;адрес буфера
move.l #2*512,36(A1) ;количество байт для чтения
move.l #0*512,44(A1) ;начальное смещение на диске
move.l execbase,A6 ;базовый адрес exec.library
jsr SendIO(A6) ;посылаем команду на trackdisk Протестируйте этот фрагмент в отладчике, наблюдая за содержимым буфера
diskbuff. После выполнения SendIO в этот буфер считается с диска некоторая
служебная информация. Изменив параметр начального смещения (например, на
700*512), Вы сможете наблюдать содержимое секторов данных.
Для записи данных на диск используется команда WRITE, которая вызывается с
такими же параметрами, что и READ. Заметим, что при вызове WRITE данные
попадают на диск не сразу, так как trackdisk.device использует буферизацию
по записи. Реальная модификация трека происходит при переходе на другой
трек или при выполнении специальной команды - UPDATE (код 4). Команда FORMAT (код 11) также весьма интересна.
|