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

TR-DOS для программистов - системные переменные TR-DOS. Элемент каталога.


Системные переменные TR-DOS

При установке TR-DOS (точка входа 15649) в оперативной памяти с
адреса 23734* создается область для хранения системных переменных опе-
рационной системы длиной 112 байт. Большая часть ячеек этой области
используется системой для внутренних нужд и интереса для программистов
не представляет. Но иногда, особенно при программировании на ассембле-
ре, использовать некоторые ячейки не только полезно, но и обязательно.
Информация, относящаяся к таким ячейкам, как правило, расположена
непосредственно в том же месте, где описываются соответствующие функ-
ции. Сведения о большинстве ячеек системных переменных TR-DOS сведены
в таблицу и помещены в главе «Системные переменные».

В области переменных хранятся жизненно важные для системы дан-
ные, поэтому при работе с TR-DOS всегда сохраняйте эту область памяти
неизменной. Некоторые программы (игры, часть системных программ)
используют для своих данных то же место в оперативной памяти, в этом
случае необходимо сохранить переменные где-либо, а перед каждым вызовом
функций системы восстанавливать их значения.

Планирование дискового пространства

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

*) Непосредственно за системными переменными Бейсика.

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

Для хранения информации на дискетах TR-DOS размечает дискеты
на 40, ВО или 160 дорожек, в зависимости от типа дискеты и дисковода.
Каждая дорожка содержит 16 секторов по 256 байт в каждом. Здесь речь идет
о логическом формате дискеты, он отличается от физического тем, что дорож-
ки не разделяются на верхнюю и нижнюю, а имеют сквозную нумерацию,
которая (как и физическая) начинается с 0. Для односторонних дискет
физическая нумерация дорожек совпадает с логической, для двухсторонних
же она отличается. Нулевой логической дорожке соответствует нулевая
нижняя физическая, первой логической —- нулевая верхняя физическая,
третьей логической — первая нижняя физическая и т. д. Таким образом,
двухсторонняя дискета размеченная на 40 дорожек, будет иметь 80 логиче-
ских, столько же сколько и 80 дорожечная, но односторонняя. Заметим, что
нулевая логическая дорожка для всех разметок находится на одном и том же
месте. Есть отличие и в нумерации секторов. Для логического формата счет
начинается с 0, а для физического — с 1.

Для файлов TR-DOS использует все дисковое пространство кроме
нулевой дорожки. Для файла отводится непрерывная область, начинающа-
яся с любого сектора на какой-либо дорожке, и продолжающаяся в сторону
увеличения номеров секторов и дорожек. Файлу всегда отводится целое
число секторов, даже если длина файла не кратна величине сектора (т. е.
256 байт), остаток в этом случае не используется.

Следовательно, зная номер первого сектора и дорожки, а также длину
файла, можно однозначно определить его местоположение на дискете. Такая
информация хранится на дискете в определенном месте — области каталога,
под которую выделены первые 9 секторов на нулевой дорожке. Первые 8
секторов этой области хранят информацию непосредственно о файлах, а
девятый сектор, называемый служебным — информацию о дискете в целом.
Остальные сектора нулевой дорожки не используются. Точнее, не использу-
ются только последние пять секторов. Десятый и одиннадцатый сектора
предназначены для промежуточного хранения информации при сохранении
и восстановлении копии памяти кнопкой MAGIC и командой GO ТО.

Элемент каталога

Каждому файлу в области каталога ставится в соответствие так назы-
ваемый элемент каталога, равный 16 байтам. Таким образом, на одной
дискете, независимо от объема, может быть записано до 128 файлов. В табл. 8
приведен формат элемента каталога. Этих данных вполне достаточно для
описания любого возможного файла.

Элементы каталога расположены в том порядке, в каком хранятся
файлы. Если этот порядок нарушить, то TR-DOS будет правильно считывать
информацию, но в некоторых случаях при записи файлов возможны сбои.

Байт со смещением #00 используется ОС для задания специальных
атрибутов файлу, связанному с данным элементом каталога,, Для реально
существующего файла этот байт содержит первый символ его имени. При
удалении файла, например командой ERASE, в этот байт записывается 1.

Непосредственно
за последним эле*
ментом каталога
должен стоять ну-
левой байт. По
значению этого
байта некоторые
команды TR-DOS
определяют раз-
мер каталога (на-
пример, CAT и
LIST). Однако ко-
манды, выполня-
ющие загрузку
файлов, просмат-
ривают все эле
менты каталога,
вне зависимости

от значения байта #00. Этим часто пользуются при защите содержимого
каталога дискет от просмотра, устанавливая первый байт какого-нибудь
элемента каталога в 0.

Параметры Start и Length принимают различные значения в зависи-
мости от типа файла (табл. 9). Их значения можно увидеть, выполнив
оператор UST,

Последние три байта в элементе каталога отвечают за физическое
расположение файла на диске. Байты #0Е и #0F указывают на начало файла,
а байт #0D содержит объем файла в секторах. Можно отметить некоторую
избыточность этой информации. Как уже было сказано, последовательность
расположения: файлов на дискете соответствует расположению элементов
каталога. При этом файлы строго следуют один за другим — «дырок» между
ними нет. Таким образом, для нахождения местоположения файла можно
воспользоваться двумя способами. Во-первых, взять из элемента каталога
начало файла, тогда объем будет равен разности начала следующего файла
и те»гуйего. Во-вторых, сложив объемы всех файлов, расположенных до
текущего, однозначно определяется начало файла.

- _^_Служебный сектор

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

Таблица 10. Формат служебного сектора,

Таблица 10. Формат служебного сектора,

Смещение от
начала сектора

Длина

Значение

#00

1

Байт 0

#01

224

Не используется (заполнено байтом 0)

#Е1

1

Номер первого незанятого сектора на дискете

#Е2

1

Номер дорожки первого незанятого сектора

#ЕЗ

1

Тип дискеты

#Е4

1

Количество файлов на дискете

#Е5

2

Количество свободных секторов

#Е 7

1

Идентификационный код TR-DOS (#10)

#Е8

2

Не используется (заполнено байтом 0)

#ЕА

9

Не используется (заполнено байтом 32)

#F3

1

Не используется (заполнено байтом 0)

#F4

1

Количество удаленных файлов

#F5

8

Название дискеты

#FD

В

Не. используется (заполнено байтом 0)

Как видно из таблицы, в служебном секторе системой используются
лишь несколько байт, значения остальных не важно. Исключение составляет
байт со смещением #00. Его значение всегда должно быть нулевым.

Два байта #Е1 и #Е2 указывают начало свободной области на
дискете. При создании файла их содержимое переписывается в байты #0Е
и #0F элемента каталога. Объем свободной области хранится в двух байтах
со смещением #Е5.

Байт #ЕЗ содержит тип дискеты, который зависит от применяемого
дисковода. Перед любой операцией с дискетой система «настраивается»,
считывая служебный сектор и проверяя значение этого байта (см. табл. 11).

Два байта в служебном секторе отведено для хранения информации
о количестве файлов на дискете. В байт со смещением #Е4 записано число
реальных элементов каталога, т.е. действительно связанных с файлами. Байт
#F4 хранит число удаленных файлов. Узнать число файлов можно, вычтя
значение байта #F4 из значения байта #Е4.

При создании нового файла значение байта #Е4 увеличивается на
единицу. Когда же происходит удаление файла, возможны два варианта.
Первый, более простой — если удаляется последний файл на дискете. В этом
случае из байта #Е4 вычитается единица, а в первый байт, связанного с
файлом элемента каталога, записывается 0. При этом область, занимаемая
файлом, освобождается, и восстановить такой файл можно только в том
случае, если на дискету не было
сделано последующих записей.
Если же удаляется не последний
файл, то единица будет добавле-
на в байт со смещением #F4, а
в первый байт связанного эле-
мента каталога запишется 1. Фи-
зического удаления не произой-
дет, и файл по-прежнему будет
занимать место на дискете. Не

Таблица 11. Байт настройки на дискету.

Таблица 11. Байт настройки на дискету.

Значение

Тип дискеты

#16

80-дорожечная

#17

40-дорожечная

#18

80-дорожечная

#19

40-дорожечная

увеличится, естественно, и объем свободной области. Вернуть такой файл
просто — необходимо восстановить первый байт элемента каталога (не забыв
уменьшить на 1 байт по смещению #F4), но сделать это можно только до
выполнения команды MOVE, поскольку эта команда уничтожит все удален-
ные файлы, последовательно перезаписав на их место существующие.

Кш идентификации дискеты служит байт со смещением #Е7. Неко-
торые ОС имеют сходный физический формат. Чтобы отличить «свои»
дискеты от «чужих» TR-DOS каждый раз проверяет этот байт.

Заданное в команде FORMAT имя диска хранится в служебном секторе
со смещения #F5. Имя дополняется справа символами пробела до 8 байтов.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Советы экспертов - Castle Master.
Charts - лучшие: Organizer, Musician, Coder, Cracking group, Scener, Group, Demo, Mazazine, Party.
Сладкие - ДРАМА13.
minskzxnet - поинтовка (воспоминания пьяной женщины).
Авторы - Кто это сделал?

В этот день...   25 апреля