Buzz #17
10 апреля 1999

Hard Life - О создании новой DOS для Speccy.

(C) Alex Kerman/Global Corp.

                      Hard Life Project

       В последнее время я все чаще и чаще сталкиваюсь с пробле-
мой,  которая  наверняка знакома всем синклеристам: куда перепи-
сать новые программы? Можно конечно, стереть какие-нибудь старые
игрушки или системки с диска, чтобы затем переписать туда новье,
можно  также  купить еще одну коробку дисков и на месяц забыть о
такого рода проблемах. Но гораздо лучше было-бы, если бы на ста-
рый  добрый  SPECCY  можно  было бы поставить винчестер. Преиму-
щества  жесткого  диска перед дискетами очевидны: намного меньше
стоимость одного мегабайта (и с увеличением емкости HDD эта раз-
ница  растет),  более  быстрый доступ к информации, да и в конце
концов  можно отсортировать файлы по темам и держать их в разных
каталогах. К тому же, имея винчестер, больше не придется  рыться
в дискетах, чтобы найти нужный файл. Если приходит новье,то дос-
таточно просто скопировать его на винчестер, при этом не задумы-
ваясь,  где  взять  диски  или на каком диске есть еще свободные
сектора.
       Но,  как  оказалось, одного желания иметь винчестер мало.
Нужна  еще  хорошая дисковая операционная система, которая могла
бы  работать с винчестером. Есть два решения этой проблемы. Пер-
вое решение заключается в том, чтобы эмулировать TR-DOS диски на
винчестере,  в  таком  случае  около  половины  (а  может быть и
больше) программ будут запускаться с HDD. В принципе, так сдела-
но на SCORPION'е, но мне такое решение не нравится по нескольким
причинам:  во-первых,  очень  глупо эмулировать TR-DOS, которая,
фактически сама является эмуляцией ленты, во-вторых, можно сразу
забыть про подкаталоги, в-третьих, имеет  большие ограничения на
размер  файла,  размер диска, количество файлов на диске, в-чет-
вертых, для переключения дисков нужно выходить  в теневой  мони-
тор, что мне кажется очень  неудобным. Можно  назвать еще  много
недостатков такого решения, но мне кажется, что хватит  и  этих,
чтобы понять, что запуск  программ с винчестера без переделки не
стоит таких жертв.
       Итак,  вариант  второй: раз уж мы решили, что программы с
винчестера запускаться не будут, то можно отойти от всех ограни-
чений TR-DOS и сделать принципиально новую DOS, "заточенную" под
SPECTRUM. Конечно, можно сделать DOS совместимой с MS-DOS,  кое-
какие  преимущества  это  дает, но MS-DOS очень медленна, чтобы,
например,  создать  файл,  придется прошарить весь FAT в поисках
свободного  кластера, а 16-битный FAT занимает на диске ни много
ни  мало - 128 килобайт. К тому же при загрузке файла тоже необ-
ходимо  постоянно  обращаться к FAT, чтобы загрузить файл по ку-
сочкам,  раскиданным по всему диску (кстати, это тоже резко сни-
жает  скорость работы, в ходе экспериментов выяснилось, что неп-
рерывное  пространство мой 126-мегабайтный Maxtor читает со ско-
ростью  104  кб/с, а выбранные случайным образом сектора со ско-
ростью  26.8  кб/с. Эксперимент проводился на Profi 5.03 с вклю-
ченным турбо.
       Сейчас я работаю над созданием DOS, которая ориентирована
на максимальную скорость работы с файлами и наилучшее удобство в
работе. Постараюсь поподробнее рассказать о своей задумке, может
быть это Вас заинтересует.
       Я  решил  сделать  файлы  непрерывными, чтобы ускорить их
загрузку/выгрузку  а также с целью упрощения файловой системы на
диске.  Главной  особенеостью  DOS  является  таблица свободного
пространства,  которая содержит данные о том какие сектора диска
заняты,  а какие свободны. В чем же преимущества таблицы свобод-
ного пространства (ТСП) перед, например, bitmap свободных секто-
ров?  Во-первых размером. ТСП - это массив описателей свободного
пространства, т.е. содержит описатели, которые указывают, откуда
начинается  свободное  пространство,  и какой имеет размер. Если
половина  диска  забита  вплотную,  без промежутков, файлами, то
тогда  ТСП  имеет  всего лишь одну пометку, которая указывает на
свободное  пространство,  начинающееся после последнего файла, и
имеющего  длину,  равную объему диска минус суммарный объем всех
файлов   и   каталогов  на  диске.  Длина  описателя  свободного
пространства  равна семи байтам, значит в одном секторе 512 байт
помещается 73 таких описателя, что как мне кажется вполне доста-
точно  (у  меня  на  IS-DOS диске никогда не бывает больше шести
непрерывных  участков  свободного пространства). Допустим, что у
меня  на  120-мегабайтном винчестере скопилось две тысячи файлов
так,  что  между  каждыми двумя соседними файлами есть свободное
пространство, тогда нам потребуется ТСП размером 2000/73=28 сек-
торов,  т.е. 14 килобайт. Осталось только придумать как запихать
таким  образом  две  тысячи  файлов на винт. Впрочем выход есть:
нужно  переписать  на  винчестер  четыре тысячи файлов и удалить
каждый второй файл...
       Есть  и  другие  преимущества ТСП перед другими файловыми
системами, как напшимер, отсутствие необходимости разбивать диск
на  кластеры  и  возможность  работы с физическими координатами.
Размер  же табгицы в DOS считается по формуле один сектор на че-
тыре мегабайта пространства, но не менее 16 секторов. Для гибко-
го диска 800 килобайт (10 секторов на дорожке по 512 байт), таб-
лица всегда равна четырем секторам. Вообще-то размер таблицы для
быстродействия  никакого  значения не имеет, т.к. работа ведется
только с теми секторами ТСП, в которых есть описатели свободного
пространства, т.е. если на диске пятьдесят непрерывных свободных
участков, то DOS работает только с одним сектором ТСП не зависи-
мо от размера таблицы. Если размер таблицы в конце концов сильно
вырос,  тогда можно диск уплотнить. В таком случае ТСП будет со-
держать  один-единственный  описатель сколь угодно долгое время,
пока  не будет удален какой-нибудь файл на диске. ТСП также поз-
воляет обходить плохие сектора на диске.
       При работе DOS использует только физические координаты на
диске  (cylinder,  head, sector), что также увеличивает скорость
работы  с  файлами  за счет отсутствия подпрограммы, переводящей
логические  координаты  в физические. Физические координаты (ФК)
везде представлены в виде четырех байт (первые два байта - номер
дорожки,  сначала младший байт, затем старший, третий байт - но-
мер  головки, четвертый - номер сектора). Внутри DOS для задания
ФК используются регистры DE:BC, где DE - дорожка, C - головка, B
- сектор.
       Описатель свободного пространства состоит из четырех байт
ФК и трехбайтной длины свободного пространства, значит свободное
пространство, а также и объем винчестера может быть равен макси-
мум 16777216 секторам или восьми гигабайтам.
       Разумеется  DOS  будет иметь систему подкаталогов, т.к. я
думаю,  что нельзя считать полноценной файловую систему не имею-
щую подкаталогов. Решено было ограничить количество файлов в ка-
талоге  до 512. Это ограничение введено для программ, работающих
с  каталогом, чтобы можно было отвести под каталог буфер опреде-
ленного  размера. Ограничение количества файлов, точнее описате-
лей  файлов и каталогов не связано с ограничениями файловой сис-
темы, с таким же успехом можно было бы ограничить их числом 1024
или 65536.
       Описатель  файла  состоит  из двадцати четырех байт, куда
входит  восьмисимвольное имя и трехсимвольное расширение, данные
о длине файла в секторах и отдельно в байтах, ФК файла и данные,
необходимые  для архивного хранения TR-DOS программ на винчесте-
ре. Описатель каталога также имеет длину 24 байта и начинается с
идентификатора  #FF,  чтобы легче было его отличить от описателя
файла.  После  идентификатора идет имя каталога, состоящее из 12
символов.  Почему  из двенадцати? Потому что при выводе на экран
каталога  имя  файла  тоже  имеет 12 символов (8 символов имени,
точка и три символа расширения).
       В имени/расширении файла/каталога запрещены символы с ко-
дом  меньше  32  или  равным  255,  а  также  пробел  и  символы
"*","?","\","/",".". Остальные символы разрешены,включая русские
буквы по стандарту альтернативного ASCII.
       Размер  файла ограничен шестнадцатибитной длиной в секто-
рах,  это значит, что максимальная длина файла равна 32 мегабай-
та.
       Если  описатель файла/подкаталога занимает 24 байта, то в
одном  секторе каталога помещается 21 описатель, а чтобы размес-
тить  512  описателей,  необходим  каталог размером 25 секторов,
т.е. 12.5 кБ! По-моему, слишком расточительно выделять по 12 ки-
лобайт на каждый каталог, особенно на гибком диске. Чтобы потери
были  не  такими  большими,  я ввел такую систему каталогов: при
создании  каталога под него отводится четыре сектора (на 84 опи-
сателя),  а  при  переполнении к каталогу добавляются еще четыре
сектора  продолжения,  причем  продолжение  каталога может нахо-
диться где угодно, вне зависимости от расположения каталога. Та-
ким  образом,  если действительно ограничение на 512 описателей,
то  каталог может состоять из семи частей. Получается, что ката-
логи имеют сегментированную структуру, но на практике количество
описателей   очень   редко   больше   84,   поэтому  подавляющее
большинство каталогов все-таки непрерывно. Следует отметить, что
координаты  продолжения  каталога размещаются в предыдущей части
каталога,  значит какой-либо дополнительной таблицы расположения
частей каталога не существует.
       При  выделении дискового пространства (создание файла/ка-
талога,  продолжение  каталога),  в ТСП ищется первый подходящий
описатель свободного пространства, если описатель найден, то DOS
все  равно  просматривает до конца данный сектор ТСП с целью на-
хождения  меньшего по объему требуемого свободного пространства.
Если найденное свободное пространство равно по длине  требуемому
объему, то описатель удаляется, сектор сдвигается, а затем сдви-
гается  и  вся остальная часть ТСП, где есть описатели. Сдвигать
таблицу приходится и при освобождении дискового пространства (у-
даление файла/каталога), чтобы сохранить порядок описателей, ко-
торые  должны  обязательно  должны  быть отсортированы в порядке
возрастания их ФК.
       DOS будет располагаться в ПЗУ вместо BASIC 128. При стар-
те  компьютера на экран будет выводиться меню содержащее следую-
щие  пункты: TR-DOS, COMMAND LINE, BASIC 48, BASIC 48+128K. Воз-
можно,  удастся  вставить  в  16  килобайт  кроме DOS еще и тест
компьютера,  тогда к меню добавится еще один пункт. Одновременно
с появлением меню происходит опрос винчестера на готовность, ес-
ли не была нажата какая-либо клавиша. Если винчестер готов к ра-
боте,  тогда  считывается  первый сектор нулевой головки нулевой
дорожки, из которого копируются в системные переменные необходи-
мые  данные  (ФК ТСП, ФК корневого каталога, количество дорожек,
головок  и  секторов  винчестера, длина ТСП в секторах). Если на
этом  секторе  нет идентификатора DOS или байт разрешения автос-
тарта  равен  нулю,  тогда автостарта не происходит. Сам процесс
автостарта еще не до конца продуман - может быть будет грузиться
и   обрабатываться   autoexec.bat,  а  может  будет  запускаться
start.exe или gc.com.
       Конечно,  немаловажным  моментом  является  переделка су-
ществующих  программ  под DOS. С обыкновенными загрузчиками дело
обстоит  просто:  в  DOS для этой цели предусмотрено посекторное
чтение файла, установка смещения в файле, открытие нового файла.
Если  не хочется писать .exe загрузчик в ассемблере, можно напи-
сать  текстовый  bat-файл,  который  можно  будет скомпилировать
вместе со всеми указанными в bat'нике файлами в один exe-файл.
       Если  программа  работает с файлами на диске, тогда пере-
делки  могут  быть  весьма значительными. Для работы с каталогом
предусмотрены  посекторное  чтение каталога и поиск описателя по
маске.  Например, ассемблер задает маску "*.asm", затем вызывает
функцию  DOS  "поиск файла с начала каталога", копирует имя фай-
ла/каталога,  затем  вызывает  функцию "поиск следующего файла",
снова  копирует себе в буфер имя, и так далее до ошибки "файл не
найден"  (#0F). При создании файла, если встретился файл с таким
же именем, DOS стирает существующий файл и создает новый. Если у
создающегося  файла  и у существующего одинаковая длина в секто-
рах,  то  просто  открывается существующий файл и корректируется
длина в байтах.
       При  создании  загрузчиков  и программ под DOS необходимо
учитывать,  что в памяти по адресу #5B00 находятся системные пе-
ременные DOS. Сейчас переменные занимают около 70 байт, но когда
DOS будет готова, они будут занимать порядка 100 байт. Следом за
переменными  обычно  располагается  буфер  для дисковых операций
длиной 512 байт, который при надобности можно расположить по лю-
бому  адресу  в  ОЗУ, причем совсем даже не обязательно кратному
256. Впрочем для посекторной загрузки этот буфер не требуется.
       Функции  DOS будут вызываться командой RST, а в аккумуля-
торе  (или в другом каком-либо регистре - пока еще не совсем яс-
но) должен находиться номер вызываемой подфункции. При операциях
с  именем  файла/каталога  вызывающая программа должна указывать
адрес  имени в HL, причем имя может находиться даже в буфере для
дисковых операций. Все функции DOS возвращают в аккумуляторе код
ошибки  (если  A=0 то ошибки нет). Возможно, потом я предусмотрю
одновременную  работу  с  двумя файлами, но можно обойтись и без
этого,  если иметь две копии переменных. При обращении к первому
файлу  предварительно  скопировать на место первый блок перемен-
ных,  а  при  обращении ко второму - второй. Таким образом можно
открыть неограниченное количество файлов и работать с ними.
       В  ПЗУ  по  адресу #3800 будет зашит шрифт 4x8 в экранном
формате,  стандарт  -  альтернативный  ASCII. Этим шрифтом будет
пользоваться DOS при работе с командной строкой и при выводе на-
чального  меню.  Также  в ПЗУ будут находиться набор подпрограмм
для печати строк, символов и чисел.
       Вот  вроде бы я и закончил краткое описание DOS. Если Вас
заинтересовал  этот  проект  и  Вы готовы поддержать его или Вам
что-либо  не  понравилось  или Вы хотите что-нибудь дополнить Вы
можете напасать мне письмо по нижеприведенному адресу или позво-
нить по телефону. Если же никого не заинтересует этот проект, то
продолжать  мне  работу не имеет смысла, так что пишите - судьба
проекта в ВАШИХ руках.

       309530 г.Старый Оскол м-он "Юность"
       д.5 кв.12 Косареву Андрею
       т. (0725) 25-54-43




Другие статьи номера:

AGA - Графический редактор 3 color'ных скринов AGA v1.0.

ASCII графика - Как просматривать ASCII? Как научиться ASCII. Существуют ли вспомогательные программы для ASCII.

BLOB the COP - Текст из внутренностей игры фирмы Players для хаккеров.

C.Expirience - Cheat к игре Space Crusade.

DOS PRO - Самые быстрые процедуры работы с диском: чтение/запись секторов без контроля и с контролем ошибок, чтение секторов с контролем на исправность чтения, чтение/запись секторов с контролем в прерываниях, зажигание/гашение лампочки дисковода, раскручивание и торможение диска, сброс ВГ13, позиционирование на 0 трек, защита от Magic Button, гашение лампочки дисковода, проверка какой текущий, контроль наличия диска в дисководе.

Eternal News - новости от Ковровских спектрумистов (Ash, Proxima, EI)

GOURAUD - Ликбез в области 3D-shading (алгоритм заливки грани методом GOURAUD).

Hard Life - О создании новой DOS для Speccy.

HDD Autodetect - FDD & HDD loader.

Heroes of M&M II - Презентация игры: Heroes of might & magic II.

MMA в Коврове - Великий и ужасный в городе, где никогда не делали ковры.

Modern Word - Описание текстового редактора Modern Word v1.3

Parties?! - FunTop'99 vs Chaos Construction'99: Точка зрения.

Program BOX - Новый необычный boot - Program BOX v2.0.

Rants & Raves - Как проехать на электричке по поддельным билетам.

Switch 3.5' - Как юзать 3.5 привод после его подключения.

Всяко разно - Выписки из книги рекордов Гиннеса.

Всяко разно - Ультросовременная сказочка про почти конец света.

Жизьтянка - Жизненные проблемы SPY.

Контакты - координаты для связи.

Кризис - Рассказик в стиле игрового мира из ним.

Обзор игрушек - Обзор игровых программ: Figus, Зеркало, Iron Man, Gyron Atrium, Homer Simpson in Russia, Головобол, Monster Land, Devil's course, Astro Ball, Net Walk, Nexus.

Обзор системок - Обзор системных программ: Text Maker v0.12c, Excess Sample Editor v1.4, Best View v2.6, DOS2DOS COPYv2.0, Excess Deluxe Paint v1.0 demo, Laser Compact v5.0, Consul Commander v3.33, DCM Protection KIT v4.1b, Modern Word v1.3, E-Mage Work Statio, PKZIP.

От авторов - Об изменениях в оболочке газеты.

Про Крузю - Новелла к игре "Бегство на Хархан".

Реклама - Реклама и объявления...

Точка зрения - О написании Softа для Спектрума.

Авторы газеты


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Scenergy - новое в облочке журнала.
Обратная связь - контакты редакции.
Оттяг - Илья Ханонович Штейнер: реальный бред реального человека из СССР.

В этот день...   22 ноября