Spectrum-совместимые компьютеры «Байт»,«Байт-01» и прочие раритеты

3 / 347

Проблемы с совместимостью различных версий систем iS-DOS на файловом уровне

Предполагаю, что пользователь знает хотя бы в минимальном объёме как пользоваться системой iS-DOS (TASiS). Если нет - читайте умные книжки по iS-DOS (они в интернете есть), статьи по использованию iS-DOS в первых номерах журнала ZX-Format, или на худой конец изучите хелпы ко всем программам системы, их пишут не для красоты!

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

В системе iS-DOS нет чёткой классификации по версиям (версии Chic и Classic сюда не относятся, это по сути разные системы). Принятая нумерация версий скорее условность. Правильнее будет различать системы по дате трансляции ядра системы (файл is_dos.sys). Суть в том, что всеми делами заправляет ядро системы, поэтому нам нужно только оно. Дату трансляции ядра можно посмотреть в программе show.com. Эта программа есть на любом системном диске iS-DOS в каталоге UTIL:

Дата трансляции ядра этой системы 14.10.1999г.

С датой трансляции ядра системы разобрались. Это я к тому, что для определения понятий "старая" и "новая" системы надо сравнивать их по дате. Теперь перехожу к конкретным примерам несовместимости.

Пример №1 - На новой системе пытаемся прочитать дискету со старой системой

Как проявляется: при попытке прочитать из-под более новой системы дискету с более старой системой появляется ошибка №9 ("не iS-DOS диск") и вслед за ней ошибка №87 ("нет устройства").

 

Суть несовместимости: в системе iS-DOS для идентификации, что это устройство именно iS-DOS, служат три байта по смещению +10(dec) от начала самого первого блока на устройстве. Эти байты имеют текстовое значение "DSK". При попытке чтения диска система считывает первый блок и проверяет эти байты на соответствие сигнатуре "DSK". Если там нет требуемых значений, то появляется та самая ошибка №9.

Видно, что по смещению +10(dec) находится "DSK":

Так вот, до 22.01.1997 всё так и было, как описано выше. Однако с указанной даты формат первого блока несколько изменился. Разработчики решили увеличить длину имени устройства с 8 до 11 символов. А так как имя устройства находится в том же первом блоке устройства и как раз перед сигнатурой "DSK", то дополнительные 3 символа имени "налезли" на "DSK". Поэтому сигнатуру сместили на три байта вперёд - по смещению +13(dec), что мы и видим на "новых" системах:

Эта беда решаема. В старой системе после сигнатуры "DSK" зарезервировано целых 5 байт для различных целей. В новой системе три байта из этих пяти заняла перенесенная сигнатура "DSK". Необходимо через дисковый доктор добавить в первый блок устройства старой системы на своё место сигнатуру "DSK", и после этого диск будет читаться в новых системах. Для этого потребуется программа demon.com. Она есть на любой дискете с базовым комплектом iS-DOS. Загружаем программу, нажимаем последовательно два раза CS+C и попадаем в меню выбора устройства:

Выбираем дисковод, куда вставлен диск со старой системой. Система, естественно, не найдёт там устройства iS-DOS, но у дискового доктора есть хорошее свойство - он позволяет читать блоки устройств не iS-DOS, поэтому с легкостью прочтёт нужный блок. Программа выведет меню для уточнения правильности определения формата устройства:

Ничего не меняем и выбираем пункт меню "продолжить". Программа прочитает первый блок устройства:

Нам нужно по смещению +13(dec) вписать сигнатуру "DSK" (подробности работы с программой я описывать не стану - на это есть подробный help к программе, где и без меня красочно расписано как менять байты на диске):

Не забываем сохранить изменения на устройстве:

Выходим из программы, перечитываем диск со старым устройством - и диск распознаётся!

Пример №2 - Снова на новой системе работаем с каталогами старой системы

Гораздо более серьёзен другой аспект несовместимости. Речь идёт о строении каталогов. С 24.12.1996г изменён стандарт описания каталога - уровень вложенности каталога перенесён из 16-го байта описателя файла в 23-й байт, потому что вообще-то 16-й байт является старшим байтом длины файла, и размещение там байта уровня вложенности не есть хорошо. В принципе можно всё оставить как есть, но лучше не нужно.

Подручными средствами эту проблему решить сложно, но создатели системы пошли навстречу пользователю - написали утилиту new_cats.com. Она сканирует диск и правит описатели каталогов на новый стандарт. При её помощи можно привести в порядок каталоги на диске со "старой" системой. Программа new_cats.com есть на всех дисках с "новой" системой, находится в каталоге SHELL.

 

Естественно, это касается только тех случаев, когда действительно надо работать с диском со старой системой. Специально переводить все "старые" диски на новый формат каталогов не следует, пусть для истории остаётся всё как есть.

Пример №3 - На старой системе пытаемся прочитать дискету со новой системой

Во-первых, "старая" система не найдёт на дискете с "новой" на своём месте сигнатуру "DSK", и ругается ошибками №9 и №87. Тут проблема, обратная описанной ранее. Для её решения делаем то же самое, что и в первом пункте, только сигнатуру "DSK" вставляем по смещению +10(dec) от начала блока. Придётся пожертвовать последними тремя символами (из 11) имени диска - вместо них будет "DSK". Но это не страшно.

А вот из-за изменённого строения каталогов старая система не сможет работать с каталогами новой системы. Для систем от 25.12.1995г мы получим ошибку 223 при открытии каталога от "новой" системы, а для ещё более старых версий системы будем наблюдать забавные глюки.

Сия проблема нерешаема. Единственно, что могу посоветовать - не пользоваться старыми версиями систем iS-DOS. Им место в архиве, для истории. Лучше работать на новых версиях. Там и глюков меньше будет.