Directory System for TR-DOS
Документация на систему
=======================
Этот документ предназначен для программистов, желающих
поддержать систему каталогов для TR-DOS в своих программах.
Возможности системы
===================
Directory System (DS) представляет из себя надстройку над
популярной системой TR-DOS, и снимает ограничение на отсутствие
в TR-DOS каталогов. DS позволяет хранить на стандартном диске
системы TR-DOS до 128 файлов и одновременно до 128 каталогов,
включая корневой каталог. Каталоги могут иметь любую степень
вложенности, а так же любое содержимое. В одной директории может
располагаться до 127 каталогов и до 128 файлов. DS находится в
свободных секторах нулевой дорожки и не использует для своих
целей другого дискового пространства.
Совместимость
=============
DS полностью совместима с большинством программного
обеспечения и самой системой TR-DOS. Это значит, что любая
программа, не поддерживающая DS увидит все файлы, находящиеся на
диске, в том числе и находящиеся в каталогах, сами же каталоги
видны не будут. Это же касается стандартных команд TR-DOS LIST и
CAT. Можно копировать, стирать и переименовывать файлы на диске
с DS любыми коммандерами, а также стандартными командами TR-DOS
COPY, ERASE и NEW. В этом случае при переименовании файла, его
расположение в каталоге не изменится, а при создании или
копировании файла, новый файл будет помещен в корневой каталог.
Ограничения
===========
Ограничения использования другого программного обеспечения
совместно с DS связано прежде всего с использованием свободных
секторов нулевой дорожки. Поэтому конфликты могут возникнуть
лишь с теми программами, которые используют эти сектора. Хотя,
например, теневой сервис-монитор компьютера Scorpion может
хранить свои настройки на дискете с DS без конфликта с системой
до тех пор, пока количество каталогов не будет превышать 115.
Запись программ на диск с DS при помощи кнопки MAGIC уничтожит
систему, тем не менее, часть информации можно будет
восстановить.
Еще одно ограничение на систему накладывают стандартная
команда TR-DOS MOVE и уплотнение диска обычными коммандерами. В
этом случае будет нарушена сортировка файлов по каталогам. Для
уплотнения диска необходимо пользоваться программами,
поддерживающими DS и учитывающими ее особенности.
Возможности по восстановлению системы
=====================================
При повреждении системы, но не полном ее уничтожении
(должен быть не тронутым как минимум 10 сектор нулевой дорожки),
система частично может быть восстановлена. А именно, сохранится
сортировка всех файлов по каталогам, а также сортировка первых
117 каталогов.
Детальное описание системы
==========================
Система начинается в начале 10-го сектора сразу же за
системным сектором (сдвиг указан относительно начала 10 сектора
нулевой дорожки):
Дескриптор системы. 11 байт:
+ [#00], + [#01] CRC системы, обсчитываются байты с +[#02]
до + [N*#0B+#10B], где N -
порядковый номер последнего заданного
каталога;
+ [#02]... + [#07] сигнатура "DirSys" - идентификатор системы;
+ [#08] сигнатура "1" - целая часть номера версии
системы;
+ [#09], + [#0А] сигнатура "00" - дробная часть номера версии
системы;
Текущая версия системы 1.00
Таблица размещения файлов и каталогов. 256 байт:
+ [#0B] порядковый номер каталога, к которому принадлежит
0-ой файл;
+ [#0С] порядковый номер каталога, к которому принадлежит
1-ый файл;
...
+ [#89] порядковый номер каталога, к которому принадлежит
126-ой файл;
+ [#8A] порядковый номер каталога, к которому принадлежит
127-ой файл;
+ [#8B] порядковый номер каталога, к которому принадлежит
1-ый каталог;
+ [#8C] порядковый номер каталога, к которому принадлежит
2-ой каталог;
...
+ [#108] порядковый номер каталога, к которому принадлежит
126-ой каталог;
+ [#109] порядковый номер каталога, к которому принадлежит
127-ой каталог;
+ [#10А] #00 - байт зарезервирован;
Список имен каталогов. Размер варьирует:
+ [#10B]... + [#115] 11 символов - имя 1-го каталога;
+ [#116]... + [#120] 11 символов - имя 2-го каталога;
...
+ [N*#0B+#100]... + [N*#0B+#10A] 11 символов - имя
последнего, заданного каталога с порядковым
номером N;
+ [N*#0B+#10B] #00 - конец системы.
Размер списка имен каталогов зависит от количества заданных
каталогов. Минимальный размер - 1 байт, при отсутствии каталогов
на диске (единственный нулевой байт указывает на конец системы).
Максимальный размер - 1398 байт, при 127 заданных каталогах плюс
один нулевой байт указатель конца системы.
Порядковые номера каталогов нигде явно не заданы, а опре-
деляются простым счетом по порядку: от 1-го до 127-го. Корневой
каталог имеет порядковый номер 0.
Система инициализируется путем записи в 10 и 11 сектора
нулевой дорожки (сразу после системного сектора)
последовательности байт: #19, #D0, "DirSys100", 257 байт нулей.
Имена каталогов должны содержать символы с кодами ASCII от
#20 до #7F (в соответствующем plag-in'е by HalfElf для FAR
Manager'a на PC, в именах каталогов разрешено использование
русских символов в DOS-кодировке, это было согласовано с автором
DirSys). Если первый символ имени каталога равен коду #01, такой
каталог считается удаленным. Незначащие символы имени каталога
заполняются кодом ASCII #20 (пробел). Например, имя каталога "My
Dir", будет задана в списке имен каталогов как
последовательность байт: #4D #79 #20 #44 #69 #72 #20 #20 #20 #20
#20.
При уплотнении диска для освобождения диска от удаленных
файлов и каталогов необходимо провести уплотнение файлов как
обычно, затем произвести уплотнение списка имен каталогов, затем
провести пересчет и соответствующую коррекцию таблицы
расположения файлов и каталогов.
В своем минимуме DS занимает два сектора и при этом может
хранить полную информацию о 22 каталогах. Дальнейшее увеличение
количества каталогов вызовет увеличение числа секторов,
занимаемых системой.
Наличие системы на диске определяется по наличию в 10
секторе нулевой дорожки сигнатуры "DirSys" со сдвигом он начала
сектора +02. Целостность системы проверяется по совпадению
рассчитанной CRC с записанной CRC в самом начале 10 сектора.
После каждого изменения, затрагивающего DS (перемещение
файла или каталога в другой каталог, создание нового каталога,
переименование или удаление каталога, уплотнение системы)
необходимо скорректировать и записать CRC. CRC рассчитывается
начиная от 2 байта начала системы и до последнего символа
последнего заданного каталога включительно. Нулевой байт
идентификатор конца системы при подсчете CRC не учитывается.
CRC подсчитывается следующей программой:
;Входные параметры:
;HL - начальный адрес блока
;DE - конечный адрес блока
;Выходные данные:
;BC - контрольная сумма блока
CRC PUSH HL
INC DE
LD BC,#0000
CRC1 PUSH DE
LD A,C
XOR (HL)
LD E,A
PUSH BC
PUSH HL
LD BC,#0000
LD D,#08
CRC2 PUSH BC
LD A,C
RRA
LD A,B
RRA
LD B,A
LD A,C
RRA
LD C,A
POP HL
LD A,E
XOR L
AND 1
JR Z,CRC3
LD A,B
XOR #A0
LD B,A
LD A,C
XOR #01
LD C,A
CRC3 LD A,E
RRCA
AND #7F
LD E,A
DEC D
JR NZ,CRC2
POP HL
POP DE
LD A,D
XOR C
LD C,A
LD A,E
XOR B
LD B,A
INC HL
POP DE
LD A,H
CP D
JR NZ,CRC1
LD A,L
CP E
JR NZ,CRC1
DEC DE
POP HL
RET
Значение, возвращаемое в регистре B, сравнивается с байтом со
смещением + [#00], а возвращаемое в регистре C - + [#01].
Координаты автора
=================
По всем вопросам, возникшим по описанной системе,
обращайтесь по следующим координатам:
mailto:
[email protected]
https://zx-pk.ru/threads/5998 (обсуждение на форуме "Speccy ─
наш выбор!")
----------------------------------------------------------------
(С) 2000 Станислав Юдин aka CityAceE
(С) 2000 Дмитрий Пьянков
(С) 2000 SIMM
[свернуть]