Системные переменные 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 байтов.