ZX-Spectrum & TR-DOS для пользователей и программистов 1994 г.

Драйвер дисковых операций - общие сведения. Описание функций.


ДРАЙВЕР ДИСКОВЫХ ОПЕРАЦИЙ

Как было показано, средств ОС TR-DOS не совсем достаточно для
полного использования возможностей, предоставляемых микроконтролле-
ром КР1818ВГ93. Даже применяя средства интерпретатора системных фун-
кций, не всегда удается добиться желаемых результатов. Жестко заданный
формат физического дика не дает возможности переносить данные между
ZX Spectum и другими компьютерами, такими как Robotron или IBM.

С целью устранения этих недостатков автором была разработана
программа, выполняющая функции Базовой Системы ввода/вывода (BIOS)
для дисковых накопителей. В дальнейшем будем называть эту программу
драйвером* дисковых операций.

Общие сведения

Драйвер предназначен для автономного использования в программах,
работающих на совместимых с Sinclair ZX Spectrum компьютерах и напи-
санных на ассемблере или языках, трансляторы с которых имеют возмож-
ность стыковки с ассемблером. Компьютеры должны быть оборудованы
интерфейсом Beta Disk.

При первом обращении к драйверу происходит анализ номера версии
ОС, а также устанавливается область системных переменных TR-DOS,

Работа драйвера происходит по возможности автономно. Так он при-
меняет свой собственный стек, не используя из стека вызвавшей программы
ни одной ячейки. В драйвере используются регистры основного набора AF,
HL, DE и ВС. Работа подпрограмм драйвера происходит при выключенных
прерываниях, однако после завершения режим работы прерываний восста-
навливается.

Описание функций

Как и интерпретатор системных функций, драйвер разбит на не-
сколько функционально законченных подпрограмм, доступ к которым осу-
ществляется через единую точку входа. Номер подпрограммы (код функции)
передается в регистре С» параметры передаются через другие регистры, либо
через память.

0 RESEETC

Сброс контроллера (и установка магнитных головок выбранного диско-
вода в начальное положение). Работу с дисководом рекомендуется начи -
нать с этой функции.

1 CHDRV

вх: А [0...3] — номер дисковода.

Выбор текущего дисковода, все последующие операции будут происхо-
дить с выбранным дисководом. Физически дисковод выбирается при
выполнении функций 2, 5,..8, 10...14. Функции 2, 5...8, кроме того, могут
определять спецификацию дисковода при первом к нему обращении.
Скорость перемещения головки дисковода не определяется и устанавли-
вается максимальной (#03).

*) С несущественными изменениями этот драйвер вошел составной частью
в базовое программное обеспечение компьютера Scorpion ZS 256.

2 MPOS8T

вх: D [0...х] — номер логического трека.

Позиционирование на заданный логический трек. При выполнении этой
функции читается и проверяется номер дорожки, на которой находится
магнитная головка.

3 IGNORE

Игнорирование ошибки и продолжение выполнения функции 5 (или 6).

4 RETRY

Повторить в случае ошибки функцию 5 (или 6).

5 READGR

вх: D [0...х] — номер логического трека (первого обрабатываемого секто-
ра);

Е [0...х] — номер первого обрабатываемого сектора;
HL — адрес буфера;
В — количество секторов в операции.

Чтение группы секторов, расположенных подряд, начиная с указанного
регистрами D и Е, в буфер, заданный регистром HL. Количество секторов
задается в регистре В. Эта функция аналогична такой же в интерпрета-
торе системных функций. В случае возникновения ошибки чтения,
можно воспользоваться функциями 3 или 4. Функция 4 повторит считы-
вание сбойного сектора, а выполнение 3 функции игнорирует ошибку,
при этом в буфере будет пропущено столько байтов, сколько занимает
сбойный сектор.

6 WRITGR

вх: как у функции 5.

Запись группы секторов, расположенных подряд, начиная с указанного
регистрами D и Е, из буфера, заданного регистром HL. Количество
секторов задается в регистре В.

7 IDENT

Идентификация диска. По этой команде производится комплексный тест
дискеты, в процессе которого проверяется тип записи (частотная модуля-
ция или модифицированная частотная модуляция), количество исполь-
зуемых сторон дискеты (только при неформатированной верхней стороне
для одностороннего диска), количество рабочих дорожек (40/80) (только,
если нет старой разметки на 80), размер сектора (128/256/512/1024
байтов). Эти параметры используются в дальнейшем всеми функциями,
оперирующими с логическими величинами (2, 3...6). Посмотреть и/или
изменить код спецификации диска можно также с помощью функции 15.

8 TR_DOS

Идентификация диска для TR-DOS, аналогично функции #18 интерпре-
татора системных функций. Перед вызовом необходимо установить ра-
бочий буфер, размером не менее 256 байтов, используя функцию 9.

9 SETWRK

вх: HL — адрес рабочего буфера.

Установка рабочего буфера размером 256 байт для функции 8.

10 SCANSEC

вх: HL — адрес таблицы;

вых: таблица заголовков секторов, находящихся на дорожке.
Сканирование дорожки. Операция выполняется для той дорожки на
которую установлена головка дисковода (либо после функции 2, либо
после функции 14). В результате выполнения в памяти строится таблица
расположения секторов на дорожке начиная от индексного маркера. Эта
таблица (или аналогичная ей) является входной для последующих функ-
ций.

На каждый сектор в таблице отводится 5 байтов (см. табл. 19).

Байта +1...+4 извлекаются непосредственно из адресных маркеров
секторов,

11 FORMAT

вх: HL — адрес таблицы секторов;

DE — адрес рабочего буфера;

В — физический тип записи (FM/MFM).

Форматирование дорожки, на которой находится магнитная головка
дисковода. Форматирование производится согласно таблице секторов.
Непосредственно перед форматированием в рабочем буфере (адрес ко-
торого задается в DE) строится полная копия дорожки и, следовательно,
его размер должен быть не менее 6-7К. Тип физической записи задается
4 битом регистра В, таким образом: #00 соответствует режиму частотной
модуляции (FM), а #20 — модифицированной частотной модуляции
(MFM).

При построении дорожки учитывается идентификационный байт из
таблицы расположения секторов. При значении #FD в заголовок сектора
записывается номер дорожки, на которой находится магнитная головка
дисковода. При остальных значениях идентификационного байта пара-
метры из таблицы непосредственно переносятся в заголовок сектора,
никаких проверок на их корректность не производится (в том числе и на
размер сектора). Размер сектора выбирается согласно байту +4 (элементу
таблицы расположения секторов), заполняется сектор константой #FF.

12 FJtEAD

вх: HL — адрес таблицы секторов;
DE — адрес буфера дорожки.

Чтение дорожки. Порядок считывания определяется содержимым табли-
цы расположения секторов. Считанные сектора помещаются в буфер
дорожки, никаких разделителей между ними не ставится. Сектора со
значением идентификационного байта #FF или #FC не считываются, но
в буфере для них пропускается соответствующее длине (байт +4) место.
Если сектор не может быть считан, то соответствующий идентификатор
в таблице заменяется на #FD. Идентификатор успешно считанного
сектора заменяется на #FC, а по окончании операции все идентифика-
торы #FC автоматически переводятся в #00.

13 F_WRITE

вх: HL — адрес таблицы секторов;
DE — адрес буфера дорожки.

Последовательная запись. Порядок считывания определяется содержи-
мым таблицы расположения секторов. Сектора, для которых значение
идентификационного байта #FF или #FC не записываются, а в буфере
пропускается соответствующее длине такого сектора (байт +4) место.
Если сектор не может быть записан, то соответствующий идентификатор
в таблице заменяется на #FD. По окончании записи все идентификаторы
#FC автоматически переводятся в #00.

14 M_P0SF

вх: D — номер физической дорожки [0...х];
А — номер стороны (0 — нижняя, 1 — верхняя).

Физическое позиционирование на трек, номер которого задан в регистре
D. Не проверяется, на какой дорожке действительно находится магнитная
головка дисковода.

II ERRES

вх: HL — адрес таблицы секторов;
Е — заменяемый идентификатор;
D — устанавливаемый идентификатор.

Замена идентификаторов в таблице расположения секторов. Все иденти-
фикационные байты, совпадающие с заданным в регистре Е, заменяются

на указанный в регистре D.

и D1S1XT

вх: А — спецификация диска (см. табл. 20);

В — режим: #FF — установка, любое другое значение — чтение.
Чтение/установка спецификации дискеты (для каждого дисковода пре-
дусмотрена своя спецификация). Спецификация устанавливается также
функцией 7 (и 8).

17 DRVEXT

вых: А — код спецификации дисковода (см. табл. 21).
Чтение кода спецификации дисковода. Спецификация дисковода опре-
деляется и заносится в специальную ячейку внутри драйвера при выпол-
нении теста, который проводится при первом обращении к дисководу
функциями 2, 5...8. Функции 10.. 14 тест не выполняют.

18 SLTAHL

вых: HL — адрес таблицы конечных секторов.

Выдает адрес внутренней таблицы драйвера, в которой указывается
количество секторов на дорожке. Первые четыре байта для режима
частотной модуляции, последние для модифицированной частотной
модуляции. Первый байт в каждой четверке содержит количество секто-
ров при длине одного сектора равной 128 байтам, второй — при 256,
третий — при 512 и четвертый при 1024-байтовом секторе.

Эта таблица используется при пересчете номера дорожки в функциях 5
и 8.

19 TIMSUB

вх: В — байт установки time-out;
вых: HL — адрес процедуры time-out.

Установка режима time-out (тайм аут) для счетчика включения двигателя
дисковода.

Функции 2...8, 10...14 в начале работы включают двигатель дисково-
да. При этом отрабатывается задержка на время раскрутки двигателя. Если
для какого-либо дисковода включен режим time-out, то драйвер для последу-
ющих операций в состоянии определить время, в течении которого задержку
можно не делать, это существенно сокращает время работы. Для обеспечения
режима time-out необходимо каждые 1/50 сек, то есть раз в прерывание
вызывать специальную подпрограмму, адрес которой выдается в регистро-
вой паре HL. Вместо нее можно вызывать функцию 19 с обнуленным
регистром В. у

Сообщении об ошибках

При вызове любой функции драйвера специальная внутренняя пере-
менная, расположенная в третьем байте от начала драйвера (63003) получает
значение #FF. Если после выполнения функции ее значение не изменяется,
значит операция прошла успешно. В противном случае, в этой ячейке
возвращается код ошибки.

1 нет готовности (диск не крутится или его нет);

2 попытка записи на защищенную дискету (функции 6 и 13);

3 во время выполнения функции была нажата клавиша Break;

4 ошибка при чтении или записи сектора функциями 5 или 6, можно
воспользоваться функциями 3 или 4;

5 ошибка позиционирования (не соответствует номер дорожки);

6 ошибка позиционирования (не считался адресный маркер дорожки);

8 ошибка позиционирования, несоответствие типов (попытка использовать
8 0 -дорожечный диск на 40-дорожечном дисководе или двухсторонний
диск на одностороннем дисководе);

9 неформатированная дискета (функции 7, 8);

16 дискета не соответствует формату TR-DOS по физическим параметрам:
размер сектора, плотность записи, либо нет кода идентификатора — #10
в 9-ом секторе по смещению #Е7 (функция 8);

17 несовпадение кода типа дискеты TR-DOS реальному формату;

18 не открыт рабочий буфер (функция В);

20 были ошибки при чтении/записи дорожки (функции 12, 13).




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Анонс! - Замечательное событие - поездка на автомобиле почти в другой конец России.
Приколы - Рассказ: Дзен-Буддизм. Стихотворение: Купание мадам.
Программистам - Слияние картинок, инвертирование экрана, сдвиг влево на один пиксел, сдвиг вправо на один пиксел.
НА-ЧАЛО - Hello, wild spekk user!!! Чё дeлaeш? Я вoт вступлeниe тут щaс пишу...
TOP TEN - Десяточка лучших игр.

В этот день...   21 ноября