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

5 / 2 217

Разбиение винчестера на большое количество устройств в операционных системах iS-DOS и TASiS

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

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

Информация, изложенная в этой статье, касается как разбиения винчестера в iS-DOS, так и в TASiS. Порядок разбиения накопителя на устройства в этих системах одинаков, отличие состоит только в версиях используемых для этого программ.

Теория

Как известно, ОС iS-DOS (TASiS) может одновременно работать только с восемью устройствами, которые условно обозначаются буквами A-H (я не беру в расчёт древние до 1996 года версии iS-DOS, где можно было выбрать только 6 устройств):

Но не все доступные 8 устройств отдаются под винчестер - надо же и дисковод (или два дисковода) иметь, и RAM-диск... А если винчестер не один, то и для Slave-накопителя тоже что-то нужно выделить. В качестве примера я использую раскладку устройств у меня в системе (у вас она может быть совершенно другая, но надо же от чего-то отталкиваться в написании статьи):

Итого у меня для работы с Master-накопителем (а Master-накопитель, как правило, является основным для работы) остаётся 5 устройств.

Теперь пройдёмся по объёму устройств в iS-DOS. Размер устройства задаётся тремя байтами. Значит теоретически можно сделать устройство объёмом #FFFFFF байт или 65535 блоков. Однако из-за внутренних ограничений системы максимальный размер устройства можно установить равным 65528 блоков, что будет чуть менее чем 16МБ. Конечно, увеличить максимальный размер устройства в iS-DOS теоретически возможно, но практически это выльется в переписывание ядра системы и почти всех программ для неё, ибо придётся переходить к 4-х байтовому представлению объёма устройства. Кроме этого iS-DOS и так тормозит при просчёте бит-карты устройства на 16МБ, а на устройствах ещё большего размера мы получим жуткие тормоза. Этот вариант хотя и возможен, но, увы, сильно затратен.

Таким образом для доступных пяти устройств под винчестер мы можем получить 5*16=80МБ. С одной стороны для iS-DOS это много, с другой - мало, особенно если хранить на винчестере образы TR-DOS дисков и прочую вкусность. Всегда хочется, чтобы было места побольше. И это сделать-таки можно.

Но сначала надо понять разницу между логическим представлением устройств в системе iS-DOS и их реальным физическим расположением на носителе. Все 8 устройств, которые видны в системе - это логические устройства. Т.е. тот факт, что в системе диск E расположен после диска D, вовсе не означает, что на носителе (на винчестере) эти устройства будут точно так же располагаться друг за другом. Каждое из логических устройств может быть закреплено за каким угодно драйвером и располагаться где угодно (в случае винчестера). Конечно, есть некоторые ограничения, но они связаны с дисководами. Традиционно дисковод A будет работать с устройством A в системе, то же самое касается дисковода B. Т.е. дисковод B не получится поставить как устройство A в системе и наоборот - дисковод A не будет откликаться на устройств B системы. Но во всём остальном пользователь свободен в выборе как ему назначить устройства в системе.

Для лучшего понимания посмотрим как на винчестере физически могут быть размещены устройства:

В данном случае они размещены последовательно одно за другим. Конечно, их можно размещать с промежутками между устройствами, но тогда место на винчестере расходуется нерационально. В конечном итоге это дело пользователя.

Так вот, к логическим устройствам системы можно подключить физические устройства на винчестере в разном порядке. К примеру, вот устройства, подключенные по порядку:

Или так:

Или вообще так:

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

Если это ясно, то идём дальше. Возьмём конкретный случай: надо разбить винчестер на дофига устройств. Для упрощения будем делать все устройства одного объёма - по 65528 блоков, или, если округлить в большую (именно в большую!) сторону, то 16МБ. Графически это можно представить следующим образом:

В начале винчестера "забито" место для служебной области. Зачем она надо - будет ясно чуть ниже по тексту статьи. Пока что скажу, что она очень нужна :)

Под каждым устройством написан номер мегабайта относительно начала винчестера, с которого оно начинается. Список устройств можно продолжать и дальше, но для данного примера хватит и столько, сколько на рисунке.

Основная идея доступа к большому количеству дисков состоит в том, что в драйвере винчестера можно "на лету" менять параметры дисков. Т.е. можно для диска D установить параметры Device 0 винчестера, а если надо получить доступ к Device 1 на винчестере, то для того же диска D можно установить соответствующие параметры для Device 1. Точно так же можно переназначить параметры для любого другого логического устройства системы, лишь бы оно было "забито" за винчестером. Недостаток такого метода - одновременно будет видно столько устройств, сколько выделено для использования винчестера. В нашем случае - 5 устройств.

Практика

Теперь перейдём от теории к практике. На примере iS-DOS шаг за шагом я покажу как винчестер разбивается на 10 устройств по 16 мегабайт.

В качестве подопытного компа будет выступать KAY-1024 с дисководом и винчестером на 8 гигов:

Компьютер KAY-1024
Компьютер KAY-1024
Компьютер KAY-1024

Для работы понадобятся следующие драйвера и утилиты (на правой панели):

Имеется в виду, что эти утилиты и драйвера не входят в набор стандартных программ iS-DOS. Кроме них потребуется, естественно, системная дискета с iS-DOS. Все программы, изображённые на скриншоте, есть на этом сайте. Исключение составляет программа turbocon.com - это программа из комплекта TASiS, но будет работать в iS-DOS.

В случае, если вы будете разбивать винчестер в TASiS, нужно использовать программы с тем же самым названием, только версии для TASiS. Некоторые программы из показанных на скриншоте универсальны и будут работать в обеих системах.

Итак, программы скачаны с сайта и скопированы на дискету с iS-DOS в какой-нибудь каталог. Теперь можно непосредственно начинать работу...

Начнём с установки драйвера винчестера. Чтобы не получить ошибку 133 при установке драйвера перед началом установки удостоверимся, что в системе есть свободные устройства. Для этого запустим программу dev.com:

Как видно из моего случая, свободных устройств хоть пруд пруди - C,D,E,F,G,H. Устройство "A" "забито" под дисковод, а устройство "B" закреплено за драйвером RAM-диска (ed128ram.blk). Значит можно смело устанавливать драйвер для LBA винчестера (master-устройство) - lba_m.blk. После его установки снова зайдём в программу dev.com и переназначим устройства - отдадим винчестеру диски D-H, диск C отдадим драйверу RAM-диска, а диск B оставим свободным на всякий случай:

Теперь вспоминаем, как мы ранее условно "размечали" винчестер на устройства и считали номера начальных мегабайтов для каждого устройства. Эта информация нам сейчас понадобится, ибо мы будем настраивать драйвер винчестера, чтобы получить доступ к первым пяти устройствам на винчестере. Почему к пяти - а потому, что из 8-ми логических устройств, доступных в системе, мы 5 устройств отдали под винчестер, значит можем оперировать только этими логическими дисками.

Для настройки драйвера винчестера служит программа lba_tune.com. При её вызове сначала будет произведена автоидентификация master и slave устройств, и результаты предстанут в следующем виде:

На "мусор", который показан в параметрах slave-устройства, можете не обращать внимание, это у меня такой винчестер, который "мусорит" на шину при обращении к slave-устройству. Нас же интересует параметр "LBA" для Master Device. Если там стоит "CHS", то такой винчестер не годится для работы (ему место скорее в музее или в коллекции хлама, нам он не нужен).

Далее по нажатию Any key мы попадаем в главное меню программы, где можно указать для любого из восьми системных логических устройств настройку в виде номера начального мегабайта устройства на винчестере. Нас интересуют устройства D-H, посколько только при обращении к ним будет работать драйвер винчестера. Указываем по порядку значения начальных мегабайт для первых пяти устройств на винчестере:

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

Нулевой мегабайт не используется - он отдан под служебные цели системы. В нём будет располагаться загрузчик системы с винчестера и таблица устройств на винчестере, которую мы сейчас пытаемся сделать. На нули в устройствах A-C не обращайте внимания, они всё равно не относятся к драйверу винчестера, поэтому в них можно писать какие угодно значения без опаски.

Итак, значения написаны, сохраняем их через пункт "SAVE" и выходим в систему. Драйвер винчестера настроен на первые пять физических устройств. Однако от того, что мы указали драйверу, где будут располагаться устройства, сами устройства на винчестере не появятся. Их надо создать. Для этого используем программу create.com:

Настройки create.com для создания устройства можно брать такие, как на скриншоте. Имя устройства - как угодно, boot - обязательно ставить в "No boot", иначе программа не даст установить размер устройства 65528 блоков. Dir Size - лучше ставить чем больше. 16 блоков - это максимум. И параметр для Dir Size ставить Segmented. Подробности - в описании программы.

Итак, создаём 5 доступных устройств: Device 1 - Device 5. Теперь надо создать оставшиеся 5 устройств (мы в качестве примера предполагали 10 устройств). Для этого снова грузим программу lba_tune.com и для тех же логических дисков D-H устанавливаем номера начальных мегабайтов следующих пяти физических устройств на винчестере:

"Постойте", скажете вы, "а прежние устройства D-H, которые мы только что создали, куда денутся? Они же пропадут!". На самом деле всё не так. Я не зря вначале статьи распинался про отличия логических устройств от физических на винчестере. Созданные устройства никуда не пропали с винчестера, они там и остались. Они пропали только из поля зрения системы, ведь на их место в системе мы поставили пять новых устройств. А что поделаешь, если бы система позволяла видеть ОДНОВРЕМЕННО много устройств, то не было бы смысла писать эту статью и кучу программ :)

Продолжаем - сохраняем настройки драйвера и при помощи программы create.com создаём очередные пять устройств на винчестере - Device 6 - Device 10.

С созданием устройств покончено. Тяжело? Для поднятия настроения скажу, что вся эта рутина делается только один раз для нового винчестера. Больше создавать устройства не придётся.

Следующий этап - создание таблицы размещения устройства на винчестере и сохранение её в служебной области (0-й мегабайт винчестера). Делать почти ничего не придётся - для этой рутинной работы уже есть программа, назвается lba_scan.com. Запускаем её, выбираем из списка найденных драйверов драйвер master-винчестера, и начинается процесс сканирования накопителя. Программа перебирает мегабайт за мегабайтом и при обнаружении устройства iS-DOS помещает номер начального мегабайта этого устройства в таблицу. Так как мы знаем, что создали 10 устройств, то после нахождения 10-го устройства можно остановить процесс сканирования клавишей "пробел", после чего программа покажет нам созданную таблицу:

Всего программа может найти целых 125 устройств. По-моему этого вполне достаточно. Лично у меня так терпения не хватит разбивать винчестер на такое количество устройств.

Немного не в тему: если винчестер ранее уже был разбит на устройства iS-DOS, то программа может найти и те прежние устройства (особенно если они не располагались один в один на том же месте, где мы сейчас создали устройства). В этом нет ничего страшного, потом полученную в программе таблицу устройств можно отредактировать программой ch_tune.com, удалив из таблицы лишние устройства.

Таблицу найденных устройств необходимо сохранить на винчестере. Для этого надо нажать на кнопку "H".

Пока мы ещё не вышли из программы, надо решить ещё один очень важный вопрос. Надо определиться с начальными настройками драйвера винчестера. Имеется в виду, что надо установить начальную конфигурацию устройств в драйвере. Эта конфигурация будет доступна сразу же при загрузке системы. Можно сделать так, чтобы по умолчанию были доступны первые по порядку пять устройств винчестера. Напомню, что они будут закреплены за буквами устройств D-H. Для этого делаем так: устанавливаем курсор на нужное устройство (первым будет устройство "Device 1" и жмём на кнопку с цифрой, которая будет соответствовать месторасположению устройства в драйвере. Т.е. для устройства А жмём на кнопку 1, для устройства B - на кнопку 2, ... , для устройства H - на кнопку 8. Итак, для Device 1 жмём кнопку 4 (диск D), для Device 2 - кнопку 5 (диск E), ... , для Device 5 - кнопку 8 (диск H). В итоге получаем следующую конфигурацию драйвера:

Сохраним настройки в драйвере кнопкой "S" и выйдем из программы.

Очередной этап - выбор системного устройства. Мы ведь не будем каждый раз грузиться с дискетки, не так ли? Очевидно, что надо выбирать его из тех устройств, которые мы только что установили в настройках драйвера. Иначе при загрузке системы окажется, что системное устройство в данный момент недоступно. Из имеющихся доступных устройств Device 1 - Device 5 пусть в качестве системного будет Device 1, которое у нас при загрузке будет закреплено за диском D. Это я к тому, что в дальнейшей работе настройки драйвера для системного устройства (в нашем случае для диска D) трогать будет нельзя, ибо иначе системный диск "исчезнет" из системы с результатом в виде полной неработоспособности оной.

Теперь, когда с буквой системного диска мы определились, надо "забивать" его всяким барахлом. Начать можно с того, что скопируем на него всю информацию с загрузочной дискетки iS-DOS. Если кто не знает, то делается это при помощи программы coca.com. Обычно её вызов "забит" на кнопку "K" клавиатуры. Как ею пользоваться - читаем описание программы. Это тема не для этой статьи.

Итак, система скопирована. Делаем очередной важный шаг - уходим от использования дискеты, нечего тратить ресурс дисковода :) Для этого достаточно переназначить буквы для системного, текущего и быстрого устройств. Вызываем резидент gmen.res (его вызов как правило "забит" за клавишей 9) и ставим для устройств System, Quick и Current букву D:

После этой операции система по любому поводу будет обращаться вместо дискетки к устройству D. Можно полазить по диску и подивиться как всё быстро работает (это ж не головой дисковода по дискетке ездить туда-сюда). Однако эта красота доступна нам только до следующего сброса компьютера. Эту несправедливость надо устранить, а именно сделать так, чтобы компьютер мог грузиться уже с винчестера. Для этого тоже есть свои программы.

Для начала создадим где-нибудь отдельный каталог, куда будем копировать нужные для запуска системы файлы. Пусть он называется, к примеру, "LBA" (всё равно как вы его обзовёте - это никак не влияет на загрузку системы с винчестера). Скопируем туда следующие файлы: sv.com (он есть на системном диске iS-DOS), set_boot.com, turbocon.com и uniboot.sys. Затем файл uniboot.sys переименуйте в boot.sys. Сам же оригинал файла uniboot.sys сохраните где-нибудь, потому как после всех операций по загрузке системы с винчестера файл boot.sys будет недоступен для копирования! Ещё понадобится файл is_dos.rom. Его можно поискать в каталоге BOOT системного диска. Короче, думаю, что найдёте его. Теперь сохраним ядро системы в текущий каталог, вызвав утилиту sv.com, которую мы предварительно в текущий каталог уже скопировали. В итоге получим следующие файлы:

Далее процесс установки загрузки системы с винчестера будет разным для iS-DOS Classic, iS-DOS Chic и TASiS. Я не буду расписывать как и что делается в каждом случае, это тема для отдельной статьи (в конце-концов можно прочесть файл LBAboot.txt, который я поместил в архив с набором утилит для загрузки системы, там всё расписано). Я приведу пример загрузки iS-DOS Chic.

Для iS-DOS Chic необходимо проследить, чтобы файл is_dos.rom имел стартовый адрес #FFFF. Это проверяется программой rename.com (вызывается клавишей "6"). Вызываем rename.com для файла is_dos.rom, жмём на Symbol Shift + Space и вываливаемся в меню свойств файла. Там ищем параметр "Address:" и следим, чтобы он был FFFF (или 65535 для десятичной системы исчисления). Если не так, то меняем параметр на нужный и обязательно сохраняем изменения выбором пункта меню "Save":

Подготовка завершена. Теперь последовательно запускаем программы: turbocom.con и set_boot.com. Если не появилось никаких сообщений об ошибках, и цвет бордюра не становился зелёным или красным, то считаем, что операция проведена успешно. Теперь смело жмём на сброс и грузимся с винчестера через HDD boot:

Надеюсь, что всё получится нормально. К сказанному добавлю, что не на всяком компьютере можно грузиться прямо с винчестера. Мне точно известно, что это можно сделать на KAY-1024, АТМ-Турбо и с февраля 2014 года на ZX-Evolution (в прошивку добавлен загрузчик от KAY). Другие компьютеры пока пролетают :(

В принципе нет ничего сложного в том, чтобы сделать загрузку с винчестера в любом Спектруме. Для этого надо всего лишь иметь на борту контроллер винчестера по стандарту Nemo, а также надо "прошить" ПЗУ прошивкой от KAY. Для работы в iS-DOS Chic надо дополнительно иметь 1 МБ памяти, расширенной по стандарту KAY-1024 и возможность отключения ПЗУ с подстановкой вместо него 0-й страницы ОЗУ. Если это всё кажется нереально сложным, то в качестве примера такой адаптации можно посмотреть на Pentagon, который был специально доработан для такого применения.

И вот теперь мы подошли к финальной стадии - сейчас мы будем получать доступ к любому из 10 устройств на винчестере. Для этого служит программа change.com. Её вызов нужно закрепить за какой-нибудь клавишей, так будет гораздо удобнее, чем вызывать каждый раз программу из командной строки. Откроем в текстовом редакторе файл extkey.txt (он находится в каталоге SHELL) и "забьём" вызов change.com за какой-нибудь неиспользуемой кнопкой:

В моём случае я вызываю cnange.com клавишей "1". А то, что раньше было прописано на вызов клавишей "1", я удалил. Пусть к файлу change.com, естественно, у вас может быть вовсе не такой, как на скриншоте. Сохраняем изменённый файл и выходим.

Теперь всё готово для работы. Порядок вызова change.com следующий: переходим на диск, для которого мы хотим вызвать change.com. Конечно же, этот диск не должен быть системным (в нашем случае это диск D), иначе потеряем доступ к системе. Допустим, пусть будет диск Е. Переходим курсором на диск Е и жмём кнопку "1". Программа change.com выведет на экран список всех устройств на винчестере:

Выбираем из списка нужное и жмём ввод. Вместо устройства на диске Е мы получим выбранное из списка. Точно так же можно делать с любым логическим устройством, закреплённым за винчестером. Конечно же есть недостатки - то устройство, которое было закреплено за диском E, теперь стало недоступно. Но если оно сильно надо, то можно его закрепить за диском F, к примеру. Вспомните рисунки в начале статьи, где я показывал, что можно переназначать устойства как угодно. Думаю, разберетесь как этим всем пользоваться. Это не так уж и сложно.

Все те же операции можно делать со вторым винчестером, если поставить его как slave-устройство. У меня так и сделано. Его можно использовать для резервных копий важных данных. Но это уже другая история...

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