ДИСКИ И ДИСКОВОДЫ
Чаще всего с контроллером BETA используется 5.25 дисковод двойной плотности. Дисководы высокой плотности (1.2, 1.44MB) использовать не имеет смысла, т.к. данный режим не поддерживается. Если у Вас применяется 40-дорожечный дисковод, у Вас будут проблемы с перезаписью, при обмене программами, т.к. 80-дорожечные диски на таком дисководе не читаются, а 40-дорожечные на 80-дорожечном - читаются, но не пишутся. Напомню, что режим "40" на 80-дорожечном дисководе не обеспечивает стандартную 40-дорожечную запись (см. фирменную инструкцию)!
Дисковод с двойной плотностью называют 80-дорожечным, хотя практически он обеспечивает доступ к 84...86 дорожкам (в зависимости от конкретного дисковода и дискеты). В нумерации дорожек имеется некоторая путаница, так как иногда используются номера цилиндров (пар дорожек, 0.85) и номер стороны (0,1; 0-верхняя), а иногда - сквозная нумерация (0.171; четные номера - верхние). При использовании TR-DOS встречаются оба варианта. Доступ к дорожкам 80.85 возможен при вызове процедур из ПЗУ; стандартными командами DOS он не поддерживается.
TR-DOS дает 16 секторов на дорожке и 256 байтов в секторе. Уменьшенный (в MS-DOS, например, сектор=512) размер сектора имеет преимущество при хранении большого числа коротких файлов, т.к. более экономно расходуется дисковое пространство (если файл имеет, к примеру, длину всего 1 байт, на диске он все равно займет целый сектор). Кроме того, при использовании файлов произвольного доступа увеличивается скорость операций.
Сказанное дает возможность подсчитать количество секторов и вместимость форматированного диска (учитывая, что TR-DOS использует внешнюю [0] дорожку для хранения системной информации о диске):
40 дорожек односторонний = 38*16 = 624 сектора *256=156 KB 40 дорожек двухсторонний = 79*16 = 1264 сектора *256=316 KB 80 дорожек односторонний = 79*16 = 1264 сектора *256=316 KB 80 дорожек двухсторонний = 159*16 = 2544 сектора *256=636 KB 86 дорожек (максим. кол.) = 171*16 = 2736 сектора *256=684 KB
Это означает, что на 1 дорожке помещается 4 KB, или 4 сектора на 1 KB. Таким образом, разделив количество свободных секторов на 4, можно узнать, сколько килобайт свободного пространства осталось на диске (напомню, 1KB=1024 байт).
TR-DOS использует двойную плотность записи, поэтому получаем 80 дорожек и 16 секторов по 256 байт на дорожке.
СТРУКТУРА ДИСКЕТЫ TR-DOS
Вся служебная информация о дискете размещается на нулевой дорожке. Первые восемь секторов (№ 0...7) содержат каталог файлов, следующий сектор - № 8 - системный, в нем записаны ее параметры. С дорожки номер 1 начинается основное пространство дискеты, где собственно и хранятся файлы. Как видите, организация диска очень проста, по сравнению с MS-DOS, поэтому и возникают сложности с удалением файлов, требуется уплотнение дискового пространства командой MOVE.
Сектора нулевой дорожки с номерами от 9 по 15 обычно не используются и при помощи рассмотренных ниже процедур DOS в них можно разместить какую-либо собственную информацию. Существует, например, оригинальный "boot", занимающий в основной области диска всего один сектор, который при записи размещает свои коды в свободных секторах нулевой дорожки (автор Ю. Власов). Однако, пользуясь этими секторами, не записывайте на такой диск при помощи "Magic" - данная процедура испортит сектора с номерами 10, 11 о "Magic" см. далее).
Процедура удаления файла заключается в замене первого байта его имени кодом 01, после чего, файл считается удаленным и не отображается в каталоге. Вся информация на дискете сохраняется, пока не будет выполнена команда MOVE. Если удален файл в конце каталога, первый байт имени может получить нулевое значение (признак свободного пространства).
Для файлов типа "DATA", поле длины (Length) также представляет собой длину массива (переменной), а поле адреса (Start)-начальный адрес этого массива в момент записи, с учетом 257-байтного сдвига на величину буфера обмена (см. далее). Для дисковых файлов (#), поле длины содержит длину заполненной части блока, от 0 до 4096 (напомню, что эти файлы записываются блоками по 4096 байт, т.е. 16 секторов, под одинаковым именем). Старший байт поля адреса для дискового файла равен 32, а младший - номеру блока в файле (0, 1, 2,.), что в каталоге отображается как 8192, 8193, 8194.
На дискете заголовки файлов записаны в первых 8 секторах (с номерами от 0 до 7) нулевой дорожки. Кроме того, следует заметить, что порядковый номер заголовка файла в каталоге имеет следующее свойство: старшая половита байта соответствует номеру сектора, в котором записан заголовок, а младшая - номеру заголовка в секторе. Это бывает полезно при работе с диском.
Как видим, номер строки автостарта BASIC- программы не входит в данные заголовка. Он записывается вместе с программой, 5 байт после конца программы или области переменных, если они есть - в поле ELINE: после разделителя полей #80 следует байт #AA и 2 байта номера строки (младший, старший). В отличие от кассеты, автостарт с нулевой строки не выполняется.
Поле "число секторов" используется при копировании файла, а поле "длина файла" - при его загрузке. Обнулив число секторов, можно сделать файл некопируемым (хотя эта защита так же легко и снимается).
Каталог дискеты вмещает максимум 128 файлов, считая и стертые; а так как подкаталоги в TR-DOS не создаются, то при большом числе коротких файлов каталог переполняется, и часть пространства на дискете остается неиспользованной.
СТРУКТУРА СИСТЕМНОГО СЕКТОРА
Системную информацию о дискете содержит 8-й сектор нулевой дорожки, точнее, конец этого сектора, начиная с 225-го байта:
ИМЯ |
АДРЕС |
НАЗНАЧЕНИЕ |
BUFF_ADR |
0 |
#00 |
#5025 |
Начало системного сектора, загруженного в динамически выделяемый буфер для дисковых операций. |
DCU_SEC |
223
224 |
#DF |
|
Слово. Содержит число секторов на диске, расформатированном при помощи DCU (вначале равно значению в #E5). На диске расформатированом TR-DOS равно 0. |
FR_S_NEXT |
225 |
#E1 |
#5E06 |
Байт. Номер следующего свободного сектора. Инициализируется нулем. |
FR_T_NEXT |
226 |
#E2 |
#5E07 |
Байт. Номер следующей свободной дорожки. Инициализируется единицей. |
TYPE DISC |
227 |
#E3 |
#5E08 |
Байт. Тип дискеты: #16 - 80 track, 2 side #17 - 40 track, 2 side #18 - 80 track, 1 side #19 - 40 track, 1 side |
N_FILES |
228 |
#E4 |
#5E09 |
Байт. Количество файлов на диске, включая удаленные. Инициализируется нулем. |
N_FRE_SEC |
229
230 |
#E5 |
#5E0A |
Слово. Количество свободных секторов.
Инициализируется в зависимости от типа диска:
#09F0 - 80 track, 2 side
#04F0 - 40 track, 2 side
#04F0 - 80 track, 1 side
#0270 - 40 track, 1 side
При форматировании программой DCU на максимальное число дорожек: #0A70 - 84 track, 2 side #0AB0 - 86 track, 2 side |
MAIN_BYTE |
231 |
#E7 |
#5E0C |
Байт. Количество секторов на дорожке. Должно быть #10, иначе диск признается неформатированным. |
ZERO |
232 |
#E8 |
|
Два байта нулей. |
BLANK9 |
234 |
#EA |
|
9 байтов пробелов (код #20). |
ZERO |
243 |
#F3 |
|
1 нулевой байт. |
N_DEL_FIL |
244 |
#F4 |
#5E19 |
Байт. Количество удаленных файлов. Инициализируется нулем. |
DISC TITL |
245 |
#F5 |
#5E1A |
Поле из 8 байт. Имя диска после форматирования. |
ZERO |
253 |
#FD |
|
3 байта нулей. Конец главного сектора. |
* ПРИМЕЧАНИЕ: адрес дан от начала сектора в десятичном и HEX виде, а также во временном буфере DOS, начиная с 23845 (#5D25), куда считывается системный сектор, что
необходимо при анализе ПЗУ. Для шестнадцатеричного представления вместо стандартной записи, скажем, 5D25h, используется более привычная для пользователей SPECTRUMa - #5D25.
ЗАМЕЧАНИЯ О ДРУГИХ ВЕРСИЯХ TR-DOS
Версия 5.03 TR-DOS является более быстрой. Особенно это заметно при выполнении команд LIST, MOVE, COPY B. Однако для повышения быстродействия пришлось отказаться от тестирования дисководов, в связи, с чем некоторые старые типы дисководов с низкой скоростью перемещения головки с этой версией работать не будут. На уровне команд отличий между версиями нет, однако структура ПЗУ версий 5.01 и 5.03 сильно отличается; 5.04 по адресам более похожа на 5.03. Далее, в основном речь идет о версии 5.01, которая используется автором; некоторые сведения о 5.03 приводятся из литературы (например, сборник "ZX-Ревю" № 1 за 93 г). Хотелось бы подчеркнуть, что автор не является экспертом по всем версиям TR-DOS. В основном приведенная информация достоверна и для других версий, хотя не исключены и какие-то отличия.