Инструменты пользователя

Инструменты сайта


msx:floppy_disk_filesystem_structure:010

Назад к обзоруСледующая страницаПоследняя страница

I. Дискеты и их характеристики

FIXME


…описание России, в котором поверхностный
автор-француз пишет, что сидел под тенью
величественной клюквы.

Толковый словарь русского языка
(под ред. Д.Н.Ушакова, т.1. С.1379)

I.1. Устройство гибкого магнитного диска


Изучай все не ради тщеславия, а ради
практической пользы.

Г.К.Лихтенберг. Афоризмы

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

Сегодня невозможно представить себе работу на компьютере без этой небольшой круглой пластины из специального гибкого пластика, покрытого магнитным слоем. А ведь история этого носителя информации началась сравнительно недавно. Первые дискеты появились в начале 7O-х годов и в связи со своими многочисленными достоинствами начали быстро вытеснять другие методы регистрации компьютерной информации.

До эпохи гибких дисков безраздельно царили магнитные ленты, имевшие один крупный недостаток, — большое время доступа к информации. Проблема быстрого доступа к нужным данным хорошо знакома каждому, кто имел дело с двумя устройствами: магнитофоном и его противоположностью в рассматриваемом аспекте — граммофоном. Именно идеей структуры грампластинок воспользовались создатели дисководов и самих гибких дисков.

В дисководе дискета вращается со скоростью 300-360 оборотов в минуту, а головка чтения /записи перемещается в радиальном направлении. В совокупности это позволяет почти немедленно достичь любой точки на рабочей поверхности диска!

Всюду далее слова: «диск» , «дискета» , «микро-дискета» и «флоппи–диск» мы будем рассматривать как синонимы.

Кратко рассмотрим, что собой представляет дискета.

Дискета — круглый «кусок» гибкого пластика, покрытый магнитным окислом, напоминающим покрытие других известных магнитных носителей, например, магнитных лент. Магнитные диски, использующиеся на больших компьютерах, изготавливаются из жестких металлических пластин, а для микродискет используются гибкие пластиковые кружки, что и дало им популярное название «гибкие» или «флоппи–диски». То, что эти диски были сделаны гибкими, значительно уменьшило вероятность их повреждения при обращении с ними и это в значительной мере определило их успех.

Гибкие диски выпускаются главным образом двух размеров: диаметром 5.25 дюйма (около 13 см) и 3.5 дюйма (около 9 см). В компьютерах старых типов встречаются 8-дюймовые дискеты (около 20см). В некоторых компьютерах (в том числе Amstrad и Spectrum) применяются дискеты диаметром 3 дюйма, на выставках и ярмарках можно встретить дискеты диаметром 2 и 2.5 дюйма. В зависимости от качества магнитного слоя (основой которого является окись железа) данные могут записываться с одной или с обеих сторон диска. Это зависит также от типа НГМД (накопителя на гибких магнитных дисках), установленного в компьютере. От конструкции драйвера зависит также количество записываемой на дискету информации (двухсторонний флоппи-диск 3.5 дюйма может содержать до 1.44 Мбайт информации, т.е. около 720 машинописных страниц).

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

Квадратный предохранительный конверт имеет три отверстия, каждое из которых имеет свое собственное назначение.

  • Первое отверстие (в центре дискеты) предназначено для захвата диска приводом дисковода. Через это отверстие механизм дисковода захватывает гибкий диск, чтобы привести его во вращение.
  • Второе отверстие в предохранительном конверте представляет собой продолговатую прорезь, закрытую металлической шторкой, через которую осуществляется доступ к дискете головок чтения/записи. Через эту прорезь происходит процесс чтения и записи информации.
  • Третье отверстие — квадратная прорезь в углу корпуса дискеты — служит в качестве признака защиты от записи. Практически все магнитные носители используют те или иные признаки защиты от записи.

Если эта прорезь открыта, то дискета защищена от записи, если же она закрыта, то на эту дискету запись разрешена.

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

Пластиковый диск покрыт магнитным слоем толщиной 2.2–2.9 микрометра. Он помещен между двумя слоями мягкой прокладки, по скользит во время вращения, и вместе с ними вложен в жесткий конверт. Отверстие для головки закрыто специальным щитком, а маркер защиты от записи встроен в конверт. Открытое отверстие маркера блокирует запись.

Продолжительность работы дисков в значительной степени зависит от нашей осторожности и правильного использования. Главные враги дисков — это грязь и пыль, а также табачный дым. За 2–3 года в дисководе может накопиться столько пыли, что нормальные диски перестанут читаться. Такое положение можно исправить только разобрав и вычистив дисковод (эта операция выполняется мастером). Для поддержания чистоты головок дисковода и продления жизни дисков применяются специальные чистящие диски. Они покрыты материалом, который снимает с головок эксплуатационные загрязнения. Очистку стоит производить 3-4 раза в месяц.

Записанную на диске информацию можно утратить, даже не заметив этого, если дискета будет подвергнута воздействию магнитного поля трансформаторы, телефоны, телевизоры, электродвигатели). Следует соблюдать осторожность, проходя через металлоискатели в аэропортах. В этом случае постарайтесь передать дискеты на ручной контроль.

Предлагаем несколько полезных советов:

  1. в дискетах не предусмотрена идеальная защита записанных на них данных: защитные конверты рассчитаны только на предохранение поверхности носителей от повреждений на коротком пути от «дискотеки» до дисковода.

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

  2. для защиты файлов, сохраненных на дискете, позаботьтесь о создании копий файлов на другой дискете или на магнитной ленте;
  3. создайте архив файлов и снабжайте дискеты архива этикетками;
  4. защищайте Ваши программы от неосторожного обращения путем установки переключателя защиты от записи на дискете.

Правильно эксплуатируемый диск выдерживает несколько миллионов проходов головки по дорожке, что означает несколько месяцев непрерывной работы на одной дорожке, а ведь таких дорожек на дискете 80! Дискеты высокого качества известных и опытных изготовителей гарантируют в сред﹣ нем 70 млн. проходов головки по дорожке, что на практике сводится к более чем 20–летней интенсивной эксплуатации. Таким образом, вероятнее ожидать аварии головки или других механизмов драйвера. Практика показывает, что иногда дискеты имеют повреждения, и чаще всего это случается с безымянными изделиями, т.е. с дешевыми дисками неизвестных фирм. Давно известно, что экономить на носителях информации не следует, и надо покупать только высококачественные изделия (таких фирм, как SONY, BASF, JVC, Atari, IBM, Kodak).

Во время записи головка намагничивает микроскопические частички железа магнитного слоя и они приобретают одинаковую полярность. Для записи одного бита намагничивается отрезок дорожки длиной 0.004 мм и глубиной 0.015 мм. Такой магнитный бит сохраняет стабильность практически вечно, хотя теоретически можно представить себе изменения, вызванные неожиданной дестабилизацией магнитного поля Земли.

Способ записи данных на дискете зависит от вида дисковода, от его контроллера, а также от операционной системы, под контролем которой работает ЭВМ. Что же это такое — контроллер НГМД?

Это способ записи на дискету двоичного кода. Опишем два самых распространенных способа записи: FM (frequency modulated) и MFM (modified frequency modulated).

В записи FM соседние биты данных всегда отделены импульсом синхронизации. Благодаря этому снижаются требования к качеству магнитного носителя. К сожалению, снижается и объем хранимой на нем информации. Такой способ записи называют одинарной плотностью записи.

Удвоение этого объема возможно при записи MFM, где импульс синхронизации записывается на диск только тогда, когда два бита данных подряд имеют нулевое значение. Именно этот контроллер используется в стандарте MSX, а также на других распространенных компьютерах: IBM PC, Amstrad, Atari ST. Этот способ записи называют двойной плотностью записи. Ясно, что плотность записи полностью зависит от типа контроллера, применяемого в дисководе. Существует еще один способ записи (учетверенная плотность) — GCR (Group Code Recording). Он позволяет еще более увеличить плотность записи и применяется в драйверах для домашних компьютеров фирмы Commodore.

Дискеты бывают двух типов — односторонние и двухсторонние, хотя и в том и в другом случае магнитный слой есть на обеих сторонах дисков! Чем же они отличаются? Как правило, технология изготовления дискет предусматривает проверку качества магнитного слоя. Дискеты, контроль которых с обеих сторон показал полное отсутствие ошибок, именуется двухсторонними, а те дискеты, у которых ошибок не имеет только одна сторона, — односторонними. Естественно, что односторонние дискеты дешевле двухсторонних. Поэтому программисты в целях экономии иногда используют их как двухсторонние — записывают информацию с обеих сторон. В таких случаях необходимо воспользоваться специальными программами обнаружения и изоляции дефектных участков диска, потому как при записи или считывании информации возможно появление непредсказуемых ошибок. Для персональных компьютеров «YAMAHA» такими программами являются VFY.COM и DSKVER.COM.

Работая с дискетами, операционная система оперирует элементарными единицами информации на носителе: треками, кластерами, секторами и блоками.

Данные на дискете размещаются по дорожкам (трекам).

Трек («track» — «дорожка») — это замкнутая окружность на поверхности дискеты, расположенная на определенном расстоянии от центрального отверстия.

Вся поверхность дискеты разбита на секторы («sector»), причем геометрическое понятие «сектор» отличается от понятия, принятого в вычислительной технике. Сектор на диске — это участок дорожки. Трек содержит 16 или 18 секторов — в зависимости от типа контроллера. Кластер («cluster» — «связка», «гроздь») состоит из двух секторов. Такая единица информации введена для удобства работы операционной системы с областью данных дискеты.

На двухсторонней дискете содержатся: 80 (&H50) треков; на каждом треке по 9 кластеров; кластер занимает 1 кБ памяти и состоит из двух секторов по 512 байт в каждом.

Сектор представляет собой основную единицу хранения информации на дискете. Вне зависимости от типа носителя, сектор имеет объем 512 байт.

При чтении или записи дисковод считывает (записывает) всегда целый сектор, независимо от объема запрашиваемой информации!

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

На двухсторонней дискете (720 кБ):
2CAh - 1 = 713 кластеров (с номерами 2(!),3,…,714), 59Eh = 1438 секторов

Взгляните на следующую табличку:

Тип дискеты Обозначения типа
односторонние,
одинарной плотности
SS — «Single Syded»
SD — «Single Density»
односторонние,
двойной плотности
SS — «Single Syded»
DD — «Double Density»
двухсторонние,
двойной плотности
DS — «Double Syded»
DD — «Double Density»
двухсторонние,
учетверенной плотности
DS — «Double Syded»
HD — «High Density»

Односторонность и двухсторонность свидетельствует о том, имеет ли дисковод одну или две магнитные головки, которые обеспечивают запись и считывание информации с одной или двух сторон гибкого диска. Эта характеристика зависит и от качества магнитного слоя дискеты.

Важной характеристикой дискеты является плотность записи. Стандартные односторонние дискеты имеют плотность записи, называемую двойной, что позволяет записывать и считывать 40 треков данных на поверхности дискеты. Другой использующийся формат называется учетверенной плотностью, что на том же пространстве позволяет иметь 80 треков.

На дискете плотность записи обычно обозначается числом треков на дюйм: 135 TPI (TPI — «Tracks per Inch»), что соответствует примерно 110 дорожкам на поверхности дискеты (∅3.5").

Напомним, что дюйм условно обозначается двойным штрихом " и равен примерно 25.4 мм.

Приведем некоторые характеристики дискеты MF2-DD (двухсторонней, двойной плотности):

  1. 1) емкость:
    • 1 МБайт у неформатированной дискеты;
    • 720 кБайт у дискеты, форматированной как двухсторонняя;
    • 360 кБайт у дискеты, форматированной как односторонняя;
  2. 2) плотность при записи — 8717 бит/дюйм;
  3. 3) плотность треков — 135 треков/дюйм;
  4. 4) среднее время доступа — 95 ms;
  5. 5) время перехода между треками — 6 ms;
  6. 6) максимальное количество файлов — 112.

На практике используются четыре основных формата дискеты.

Различие между форматами определяется:

  • числом используемых сторон диска (одно- или двухсторонний диск) и
  • числом кластеров, приходящихся на трек (8 или 9 кластеров на трек).

Форматирование дискеты — это подготовка носителя к работе с данным типом драйверов т.е. магнитная разметка секторов, а также запись на диск (в нулевой сектор) программы загрузки операционной системы. Эта операция выполняется для того, чтобы при работе с диском магнитная головка смогла определится в пространстве и начать считывание нужного сектора.

Если Вы вставите новую неoтформатированную дискету в дисковод и попытаетесь что–нубудь записать на нее или хотя бы примените команду «DIR», то получите сообщение о том, что в дисководе нет диска (Not ready error reading drive A). Генерация этого сообщения произошла при попытке головки драйвера сориентироваться, — после того, как она не нашла магнитную разметку секторов.

Параметры форматирования, зависящие от:

  • типа драйвера: плотность записи и число кластеров в треке;
  • технологии производства дискет: число сторон на диске и плотность записи информации (треков на дюйм).


Для гауссовой строгости мы не имеем времени, господа.

Взгляните на приведенную ниже таблицу (учтите, что скорее всего Ваши дискеты относятся к типу 2DD с идентификатором носителя — F9).

Идентификатор носителя F8 F9 FA FB FC FD FE FF
Способ записиMFMMFMFMFM Информация
отсутствует !
Тип носителя1DD2DD1DD2DD
Байтов в секторе512512512512
Треков на сторону4040202080808080
Сторон на дискете12121212
Файлов на дискете1121121121126411264112
Количество FAT22222222
Секторов в FAT23122211
Кластеров в треке99889988
Секторов в кластере22221212

I.2. Схема хранения данных на дискете

                               Золотое правило Мэрфи: у каждого облада﹣
                               теля золота - свои правила.
                                                            Закон Мэрфи

   Опишем схему хранения данных, используемую в MSX-DOS:
   1) для хранения данных используются стандартные 512-байтные сектора;
   2) никакие сектора или области на дискете не резервируются;
   3) распределение секторов данных  и объединение секторов, образующих
файл данных, выполняется независимо от обслуживания самих секторов дан﹣
ных, с помощью механизма, получившего название
\/T0/1
             ▁——————————————————————————————————————————▚
             ▕        Таблица Размещения Файлов         ▕
             ▕ (ТРФ или FAT — "Files Allocation Table") ▕
             ▇——————————————————————————————————————————▔

\/T1/1-
   4) каждая дискета имеет  каталог,  который служит  для учета файлов,
хранящихся на дискете.
   Описанная схема хранения  данных предполагает  существование ▇четырех
различных  типов секторов,  один  из которых используется  для хранения
данных, а три других имеют специальное назначение.
   Любая дискета имеет ▇программу загрузки операционной системы,▁ записы﹣
вающуюся в самом первом секторе дискеты (▇нулевом секторе▁),  который на﹣
зывается ▇загрузочным сектором (англ. — "boot sector")▁.
   Программа загрузки  всегда записывается  в загрузочный  сектор любой
форматируемой дискеты независимо от того,  будет ли данная дискета ког﹣
да-нибудь  использоваться  для запуска операционной  системы.  Сектор с
программой загрузки  и запуска системы представляет собой ▧пeрвый▁ специ﹣
альный тип сектора в MSX-DOS.
   ▧Второй▁  специальный  тип сектора используется  для хранения  Таблицы
Размещения Файлов (FAT). FAT занимает два или три (в зависимости от па﹣
раметров форматирования) сектора, непосредственно следующих за сектором
с программой загрузки.  Таблица Размещения Файлов служит  для индикации
занятости секторов данных на дискете.
   ▧Третий▁ и последний специальный тип сектора используется для хранения
▇каталога▁ ("Directory", директории, Справочник) дискеты.  Каталог распо﹣
лагается вслед за  Таблицей Размещения Файлов  и занимает ▇семь▁ секторов
на дискете.
   Эти сектора специального назначения занимают ⁃двенадцать  первых сек﹣
⁃торов односторонней дискеты▁  или ⁃четырнадцать - двухсторонней▁.  Все ос﹣
тальные сектора ("Data Area") используются для хранения ▇данных.
   Каталог и Таблица Размещения Файлов располагаются  в начале дискеты.
На первый взгляд это представляется оптимальным размещением. Однако при
доступе  к файлу операционная система MSX-DOS сначала должна найти эле﹣
мент этого файла в каталоге, а потом обратиться собственно  к данным на
носителе.  В среднем,  расстояние между каталогом  и файлом  на дискете
составляет 20 треков, то есть, практически половину дискеты.  Перемеще﹣
ние головок чтения-записи  в дисководе является самой  медленной опера﹣
цией.  Так что расстояние  между каталогом  и самим файлом  может иметь
важное значение с точки зрения временных характеристик работы.
   Если бы каталог располагался  в середине дискеты, то среднее рассто﹣
яние до секторов данных уменьшилось бы вдвое, т.е. до 10 треков. С дру﹣
гой стороны,  работа с пространством данных,  состоящим  из двух частей
(по обе стороны от каталога) будет значительно сложнее.  Для операцион﹣
ных систем персональных компьютеров выгода от размещения каталога в се﹣
редине  дискеты слишком мала,  чтобы браться  за разрешение возникающих
при этом дополнительных проблем.
   Итак, область памяти на диске распределена следующим образом:
\/T0/1
     ▁———————————————▏———————————————————————————————————————————▚
     ▕  Загрузочный  ▕          Информация о дискете и           ▕
     ▕    сектор     ▕      программа, запускающая MSX-DOS       ▕
     ▕("boot sector")▕                                           ▕
     ⁃——————————————————————————————————————————————————————————
     ▕ Таблица Разме-▕                                           ▕
     ▕ щения Файлов  ▕  Информация о занятости кластеров дискеты ▕
     ▕    ("FAT")    ▕                                           ▕
     ⁃——————————————————————————————————————————————————————————
     ▕    Каталог    ▕           Информация о файлах             ▕
     ▕ ("Directory") ▕                                           ▕
     ⁃——————————————————————————————————————————————————————————
     ▕ Область данных▕ Область для размещения содержимого файлов ▕
     ▕ ("Data Area") ▕                                           ▕
     ▇———————————————▞———————————————————————————————————————————▔

\/T1/1-
   Приведем схему расположения и нумерации секторов для:
\/T0/1
▁————————————————————————————————————————————————————————————————————▚
▕                                                                    ▕
▕  a) ▇одностороннего диска▁:                                          ▕
▕                                                                    ▕
▕           ▁————————▏————————▏————————▏————————▏————————▚           ▕
▕           ▕0 сектор▕1 сектор▕2 сектор▕3 сектор▕4 сектор▕           ▕
▕           ▇——▲—————▞————————▞————————▞————————▞————————▔           ▕
▕              ▕     ▕◀——————FAT —————▶▕◀—— Копия FAT ——▶▕           ▕
▕              ▕                                                     ▕
▕          Загрузочный сектор ("Boot sector")                        ▕
▕                                                                    ▕
▕                                                                    ▕
▕  ▁————————▏————————▏————————▏————————▏————————▏————————▏————————▚  ▕
▕  ▕5 сектор▕6 сектор▕7 сектор▕8 сектор▕9 сектор▕A сектор▕B сектор▕  ▕
▕  ▇————————▞————————▞————————▞————————▞————————▞————————▞————————▔  ▕
▕  ▕◀—————————————————— Каталог ("Directory") ———————————————————▶▕  ▕
▕                                                                    ▕
▕                                                                    ▕
▕  ▁————————▏————————▏————————▏————————▏—————————▏—————————▏——————▚  ▕
▕  ▕C сектор▕D сектор▕E сектор▕F сектор▕10 сектор▕11 сектор▕  ... ▕  ▕
▕  ⁃————————▞————————————————▞—————————————————▞———————————————  ▕
▕  ▕    2-й кластер  ▕   3-й кластер   ▕    4-й кластер    ▕  ... ▕  ▕
▕  ▇—————————————————▞—————————————————▞———————————————————▞——————▔  ▕
▕  ▕◀——————————————— Область данных ("Data Area") ———————————————▶▕  ▕
▕                                                                    ▕
⁃————————————————————————————————————————————————————————————————————
▕                                                                    ▕
▕  b) ▇двухстороннего диска:▁                                          ▕
▕                                                                    ▕
▕  ▁————————▏————————▏————————▏————————▏————————▏————————▏————————▚  ▕
▕  ▕0 сектор▕1 сектор▕2 сектор▕3 сектор▕4 сектор▕5 сектор▕6 сектор▕  ▕
▕  ▇——▲—————▞————————▞————————▞————————▞————————▞————————▞————————▔  ▕
▕     ▕     ▕◀————————— FAT ——————————▶▕◀—————— Копия FAT ———————▶▕  ▕
▕     ▕                                                              ▕
▕ Загрузочный сектор ("Boot sector")                                 ▕
▕                                                                    ▕
▕                                                                    ▕
▕  ▁————————▏————————▏————————▏————————▏————————▏————————▏————————▚  ▕
▕  ▕7 сектор▕8 сектор▕9 сектор▕A сектор▕B сектор▕C сектор▕D сектор▕  ▕
▕  ▇————————▞————————▞————————▞————————▞————————▞————————▞————————▔  ▕
▕  ▕◀——————————————————— Каталог ("Directory") ——————————————————▶▕  ▕
▕                                                                    ▕
▕                                                                    ▕
▕  ▁————————▏————————▏—————————▏—————————▏—————————▏—————————▏————▚  ▕
▕  ▕E сектор▕F сектор▕10 сектор▕11 сектор▕12 сектор▕13 сектор▕ ...▕  ▕
▕  ⁃————————▞—————————————————▞——————————————————▞—————————————  ▕
▕  ▕    2-й кластер  ▕    3-й кластер    ▕    4-й кластер    ▕ ...▕  ▕
▕  ▇—————————————————▞———————————————————▞———————————————————▞————▔  ▕
▕  ▕◀——————————————— Область данных ("Data Area") ———————————————▶▕  ▕
▕                                                                    ▕
▇————————————————————————————————————————————————————————————————————▔

\/T1/1-
 ▇Обратите внимание, что первый кластер области данных имеет номер 002!

I.2.1. Нулевой сектор

                                Я хорошо понимаю, что читателю не очень
                             нужно все это знать, но мне-то очень нужно
                             рассказать об этом.
                                                          Жан Жак Руссо

   Часть содержимого нулевого сектора занимает  такая информация о дис﹣
кете, которая ▇не изменяется в процессе работы с дискетой.
   Содержимое нулевого сектора приведено на схеме:
\/T0/1
         ▁—————————————▚
   00h   ▕ E9h или 0EBh▕
         ⁃—————————————
01h - 09h▕ —Х—Х—Х—Х—Х— ▕ ◀——— Служебная информация
         ⁃——————▏——————
 0Bh,0Ch ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Количество байтов в секторе
         ⁃——————▞——————
   0Dh   ▕             ▕ ◀——— Количество секторов в кластере
         ⁃——————▏——————
 0Eh,0Fh ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Количество неиспользованых секторов
         ⁃——————▞——————
   10h   ▕             ▕ ◀——— Количество Таблиц Расположения Файлов
         ⁃——————▏——————
 11h,12h ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Максимальное количество файлов
         ⁃————————————
 13h,14h ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Количество секторов на дискете
         ⁃——————▞——————
   15h   ▕             ▕ ◀——— Идентификатор носителя
         ⁃——————▏——————
 16h,17h ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Количество секторов в FAT
         ⁃————————————
         ⁃————————————
 18h,19h ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Количество секторов в треке
         ⁃————————————
 1Ah,1Bh ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Количество сторон диска
         ⁃————————————
 1Ch,1Dh ▕ ▧▧▧▧ ▕ ▧▧▧▧ ▕ ◀——— Количество "спрятанных" секторов
         ⁃——————▞——————              (⁃для MS-DOS▁)
   1Eh   ▕             ▕
         ⁃—————————————                   ▚
1Fh - 22h▕ ED 53 59 C0 ▕ ◀——— LD (C059),DE ▕
         ⁃—————————————                   ▕
   ...   ▕     ...     ▕         ...       ▕
         ⁃—————————————                   ▕
   A9h   ▕      0A     ▕ ◀——— LD A,(BC)    ⁃ Программа-загрузчик
         ⁃—————————————                   ▕   системного Файла
   AAh   ▕      00     ▕ ◀——— NOP          ▕
         ⁃—————————————                   ▕
   ABh   ▕      00     ▕ ◀——— NOP          ▕
         ⁃—————————————                   ▔
ACh - B6h▕ MSXDOS  SYS ▕ ◀——— Имя системного файла
         ⁃—————————————      (по умолчанию MSXDOS.SYS)
   ...   ▕      Не     ▕
   ...   ▕ используется▕
         ⁃—————————————
   1FFh  ▕      00     ▕
         ▇—————————————▔
\/T1/1-

                                  Что может быть честнее и благороднее,
                               как научить других тому, что сам наилуч﹣
                               шим образом знаешь.
                                                             Квинтилиан

   Приведем пример использования дискового пространства  в "личных" це﹣
лях.
   Программа-загрузчик MSX-DOS загружается в RАM с адреса C000h.  Когда
она "отработает" (система загрузится), в программе загрузки  происходит
переход по адресу 100h  (здесь находится загруженная система).  Если мы
выполним в данном месте переход не по адресу 100h, а, например,по адре﹣
су C0D0h,  где расположена первая половина нулевого сектора,  Вы можете
еще до запуска  MSX-DOS "что-нибудь" сделать: отключиться от сети, зап﹣
ретить прерывания по таймеру,  вывести какое-нибудь сообщение на экран,
а потом выполнить переход по адресу 100h.
   Вторая половина нулевого сектора находится где-то  в RАM.  Так как в
первой половине  этого сектора мало места,  то Вашу  программу придется
разместить и во второй половине. Поэтому проще  в первой половине допи﹣
сать  программу-загрузчик так,  чтобы она загружала весь Boot sector по
какому-либо известному адресу,  а затем выполнить переход  на адрес, по
которому расположена вторая половина сектора.
   В —boot-секторе▁ байты с номерами  53h, 54h и 55h нужно изменить: C3h,
00h, 01h (JP 100h) на C3h, D0h, C0h (JP C0D0h),  а с адреса D0h размес﹣
тить программу:
\/T0/1
▁—————▏————————————————————————————————————————————————————▏——————————▚
▕Адрес▕       Программа на Ассемблере с комментариями      ▕   Коды   ▕
⁃———————————————————————————————————————————————————————————————————
▕0D0h:▕ LD   DE,D000h ;   Установка нового                 ▕ 11 00 D0 ▕
▕     ▕ LD   C,1Ah    ; адреса передачи                    ▕ 0E 1A    ▕
▕     ▕ CALL F37Dh    ; boot-сектора.                      ▕ CD 7D F3 ▕
▕     ▕ LD   HL,100h  ;   Загрузка одного сектора          ▕ 21 00 01 ▕
▕     ▕ LD   DE,0     ; (с номером 0) с диска,             ▕ 11 00 00 ▕
▕     ▕ LD   C,2Fh    ; находящегося в дисководе "А".      ▕ 0E 2F    ▕
▕     ▕ CALL F37Dh    ;                                    ▕ CD 7D F3 ▕
▕     ▕ JP   D100h    ; Переход на адрес Вашей программы.  ▕ C3 00 D1 ▕
▕     ▕   ...                                              ▕          ▕
▕100h:▕               ; Здесь располагается Ваша программа.▕          ▕
▕     ▕   ...                                              ▕          ▕
▕1FDh:▕ JP   100h     ; Переход на адрес прогр. MSXDOS.SYS.▕ C3 00 01 ▕
▇—————▞————————————————————————————————————————————————————▞——————————▔

\/T1/1-
   ▧Обратите внимание▁: ▇функции BDOS вызываются командой CALL F37Dh, т.к.
▇программа загрузки работает в рабочей области слота "BASIC" ▏(слот 0)▇.
   Примечание.▁  Как только Вы начинаете работать с дискетой в системную
область слота 3-2  помещается информация о дискете, которая ▇может изме▁﹣
▇няться в процессе работы с дискетой.
\/T0/1
      ▁————————————————————————————————————————————————————————▚
      ▕              Эта информация называется DPB             ▕
      ▕  ("Drive Parameter Block"-"Блок Параметров Носителя")  ▕
      ▇————————————————————————————————————————————————————————▔

\/T1/1-

   Кратко опишем:
   α) ▇содержимое DPB (21 байт):
\/T0/1
         ▁—————————————▚
    00h  ▕      00     ▕ ◀——— Номер дисковода
         ⁃—————————————
    01h  ▕      F9     ▕ ◀——— Идентификатор носителя
         ⁃——————▏——————
  02h,03h▕  00  ▕  02  ▕ ◀——— Размер сектора
         ⁃——————▞——————
    04h  ▕      0F     ▕ ◀——— Маска каталога = Размер сектора/32-1
         ⁃—————————————
    05h  ▕      04     ▕ ◀——— Сдвиг каталога = Количество единичных
         ⁃—————————————                     битов в Маске каталога
    06h  ▕      01     ▕ ◀——— Маска кластера = (Сектор/Кластер) - 1
         ⁃—————————————
    07h  ▕      02     ▕ ◀——— Сдвиг кластера = 1 + Количество единичных
         ⁃——————▏——————                         битов в Маске кластера
  08h,09h▕  01  ▕  00  ▕ ◀——— Первый сектор FAT
         ⁃——————▞——————
    0Ah  ▕      02     ▕ ◀——— Количество FAT
         ⁃—————————————
    0Bh  ▕      70     ▕ ◀——— Количество файлов (70h=112)
         ⁃——————▏——————
  0Ch,0Dh▕  0E  ▕  00  ▕ ◀——— Первый сектор Области данных (Data Area)
         ⁃————————————
  0Eh,0Fh▕  CA  ▕  02  ▕ ◀——— Количество кластеров + 1
         ⁃——————▞——————
    10h  ▕      03     ▕ ◀——— Количество секторов в FAT
         ⁃——————▏——————
  11h,12h▕  07  ▕  00  ▕ ◀——— Первый сектор каталога
         ⁃————————————
  13h,14h▕  95  ▕  E5  ▕ ◀——— Адрес FAT ⁃в памяти
         ▇——————▞——————▔

\/T1/1-

   β) ▇размещение DPB:
\/T0/1
         ▁—————————————————▏—————————————————————————————————▚
         ▕ Адреса в рабочей▕   Назначение (или содержимое)   ▕
         ▕области слота 3-2▕                                 ▕
         ⁃——————————————————————————————————————————————————
         ▕   F195 ÷ F1A9   ▕       DPB дисковода "A"         ▕
         ▕   F1AA ÷ F1BE   ▕       DPB дисковода "B"         ▕
         ▕                 ▕                                 ▕
         ▕       F1BF      ▕               0                 ▕
         ▕       F1C0      ▕               0                 ▕
         ▕       F1C1      ▕ Текущий дисковод (0 соотв. "А") ▕
         ▕       F1C2      ▕    Текущий трек (дисковод A)    ▕
         ▕       F1C3      ▕    Текущий трек (дисковод B)    ▕
         ▕       F1C4      ▕   Протокол текущего дисковода   ▕
         ▕       F1C5      ▕         Трек (разметка)         ▕
         ▕       F1C6      ▕  Тип носителя (форматирование)  ▕
         ▕       F1C7      ▕   Число дисководов в системе    ▕
         ▕       F1C8      ▕               0                 ▕
         ▕                 ▕                                 ▕
         ▕   F161 ÷ F175   ▕       DPB дисковода "C"         ▕
         ▕   F176 ÷ F18A   ▕       DPB дисковода "D"         ▕
         ▕                 ▕                                 ▕
         ▕   F18B ÷ F194   ▕ Аналогично байтам  F1BF ÷ F1C8  ▕
         ▕                 ▕                                 ▕
         ⁃——————————————————————————————————————————————————
         ▕                 ▕                                 ▕
         ▕   E595 ÷ EB94   ▕ Копия Таблицы размещения файлов ▕
         ▕                 ▕                                 ▕
         ▕   EB95 ÷ ED94   ▕  Копия сектора каталога, содер﹣ ▕
         ▕                 ▕ жащего последний упомянутый Ва﹣ ▕
         ▕                 ▕ ми файл                         ▕
         ▕                 ▕                                 ▕
         ▇—————————————————▞—————————————————————————————————▔

Как спасти только что уничтоженный текстовый файл

                             От упырей и призраков, от длинноногих бес﹣
                             тий и тварей, налетающих  по ночам, Госпо﹣
                             ди, избави нас.
                                           Древняя корнуоллская молитва
                                           
                               Слухи о моей смерти сильно преувеличены.
                                                              Марк Твен

   Прежде, чем  начать восстановление, уберите дискету(ы) из дисковода,
попробуйте  спокойно вдохнуть  и выдохнуть  несколько  раз, отойдите на
пятнадцать минут (опытные данные) от компьютера. Выпейте чашечку чая, а
лучше крепкого кофе. Далее, возьмите в руки настоящее руководство и ...
   Для спасения Вашей информации есть ▇два▁ способа.
   ▇Первый:▁ "листать" область данных диска, разыскивая кластеры с данны﹣
ми, относящимися  к "убитому" файлу и копировать эти кластеры на другой
диск. Этот способ отнимает довольно много времени, вероятно будет нару﹣
шена структура файла ( изменен порядок расположения  кластеров, относя﹣
щихся к данному), но скорее всего Вы спасете ▇весь▁ файл, без потерь.
   ▇Второй:▁ по начальному кластеру файла в режиме  FAT Fixer  определить
номера кластеров,  имеющих вместо ссылки на некоторую ячейку  в FAT код
000 и просто восстановить ▇ссылки▁ на последующие кластеры файла (при си﹣
туации, когда  на протяжении большого промежутка времени  Вы не удаляли
ни одного файла, т.е. есть гарантия, что  в FAT не было пробелов  в за﹣
полненной части области данных).  Используя этот способ,  Вы сэкономите
время, но при невнимательной работе потеряете часть файла.

   Вначале изложим подробно ▇первый▁  из них, простой,  но очень трудоем﹣
кий, который мы разобъем на этапы.

   ▏Первый этап.
   1) Загрузить программу Disk Fixer.
   2) Вставить в дисковод "A" дискету с восстанавливаемым файлом.
      Вставить в дисковод "В" дискету, на которую  Вы будете записывать
нужную Вам информацию (перед этим откройте диск на запись).
   3) В режиме  DISK FIXER необходимо изменить объем буфера  с 512 байт
(1 сектор) на 1 Кбайт (1 кластер) командой [S]cale (режим [C]luster) .
   4) Перейти  на дисковод "В"  (команда: dri[V]e ,[B]).  В системе FAT
FIXER загрузить ТРФ  (команды: [F]AT, [R]ead)  и определить первый ▇сво▁﹣
▇бодный▁ кластер  в конце Таблицы  ("прыгнуть"  на ячейку  с номером  2C9
и, двигаясь ▇вверх и▁ ▇влево▁ установить курсор  на последнюю позицию с со﹣
держимым 000).
   Записать на бумаге номер этого кластера.
   5) Вновь вернуться на дисковод "А" (команда: dri[V]e ,"А").
   6) Загрузить кластер с номером 002 (команда: [R]ead, 002).

   ▏Второй этап.
   Просмотреть каждый кластер, определяя, относится ли он  к утерянному
файлу или нет.
   Если ▇нет▁, то просмотреть следующий кластер (клавиша [F2]).
   Если ▇да▁, то записать кластер на другой диск и прочитать новый коман﹣
дами:                     dri[V]e , [B] ;
       [W]rite , <номер пустого кластера на диске в дисководе "В">;
                          dri[V]e , [A] ;
       [R]ead , <номер следующего кластера на диске в дисководе "А">.
   Это очень неприятно - запоминать (или записывать)  номера кластеров,
с которыми работаешь, но если уж убиваешь файл, думай о последствиях!

   ▏Третий этап.
   После того,  как Вам покажется, что файл уже полностью восстановлен,
нужно в директории диска "В" создать новый файл. Для этого войти в сис﹣
тему FAT FIXER ( команды: [F]AT , [R]ead ) и вспомнить номер последнего
кластера, в который был записан кусок восстановленной информации (ника﹣
ких клавиш нажимать не надо!).  Затем "прыгнуть" на ячейку с этим номе﹣
ром (команда: [L], <номер>)  и установить признак конца файла (команда:
[TAB]).
   Заметим, что если кластер является  последним в файле, то в пеозиции
курсора будет находиться знак "$$$".

   ▏Четвертый этап.
   Итак, Вы имеете перед собой цепочку  кодов "000",  заключенную между
двумя кодами "$$$".  Заполняйте это пространство ссылками  на следующие
кластеры. Данная процедура выполняется так:
   1) устанавливаете курсор на первый код "000" в цепочке и смотрите на
раздел "ENTRY" в верхней части экрана. Там будет указан номер ячейки, в
которой находится курсор;
   2) прибавьте  к полученному числу (в шестнадцатеричной системе) еди﹣
ницу и запишите результат  в ячейку (команда: [CR] + <результат>).  Это
действие повторяйте, пока не иссякнут нули в цепочке кодов.

   ▏Пятый этап▁ (последний аккорд!).
   Войти  в режим редактирования  в системе  DIRECTORY FIXER  (команды:
dri[V]e, "B"; [D]irectory; [R]ead; [CR]),  на чистом месте в графе имен
файлов  вписать имя  Вашего файла,  а в следующей графе - номер первого
свободного кластера,о котором говорилось при изложении четвертого пунк﹣
та первого этапа.  О дате и времени последнего изменения файла не стоит
беспокоиться, но объем файла необходимо указать обязательно!
   Объем вычисляется по следующей формуле:
                      1024∙(Nlast + 1 - Nfirst) ,
где Nlast  - номер последнего записанного на диск кластера,
    Nfirst - номер первого свободного кластера на диске в дисководе "B"
(см. четвертый пункт первого этапа).
   Полученное натуральное число надо перевести в шестнадцатеричную сис﹣
тему счисления.

   ▏Шестой этап.
   Вписав все данные о файле, "сбросить" их на диск
       (команды:  [ESC]; [W]rite; [ESC]; [F]AT; [W]rite).
   Выйти из программы Disk Fixer (команда: [E]xit , [Y]es , [Y]es).

   Дошедшему до конца - ⁃браво!▁ Остается лишь проверить, удались ли Ваши
манипуляции, или все надо начинать с начала. Загрузите полученный текст
в текстовый редактор и внимательно просмотрите его...

   ▏Примечание.
   Можно, конечно, писать файл и на тот же диск,  но при этом возникает
опасность погубить окончание файла, если ячейки FAT, относящиеся к "не﹣
винно убиенному" файлу были последними в FAT.

   Переходим  к описанию ▇второго▁, более интеллектуального способа. Ана﹣
логично  предыдущему изложению разобъем  последовательность действий на
ряд этапов.

   ▏Первый этап.
   1) Загрузить программу Disk Fixer.
   2) Вставить диск с восстанавливаемым файлом в дисковод "А".
   3) В системe DIRECTORY FIXER найти имя уничтоженного Вами файла (оно
будет содержать вместо первого символа знак "*"). Это можно осуществить
командами:
       [D]irectory, [R]ead; поиск — клавишами управления курсором.
   4) В графе, следующей за той, где указано имя файла, посмотрите точ﹣
ку входа в ТРФ (номер первого кластера файла). В последней графе найди﹣
те объем файла. Теперь рассчитайте число кластеров в файле по формуле:
              Число_кластеров = 1 + Объем_файла div #400
и переведите полученный результат  в десятичную систему.  Номер первого
кластера и число кластеров записать или запомнить.
   5) Восстановить  имя файла, вписав  на место знака "*" первый символ
имени (или любой другой, кроме символа "Е" русского алфавита) при помо﹣
щи команд: [CR], <нужный символ>, [ESC]; [W]rite .

   ▏Второй этап.
   1) Загрузить систему FAT FIXER (команды: [ESC]; [F]AT, [R]ead).
   2) "Прыгнуть"  в ячейку с номером первого кластера "погибшего" файла
командой:             [L], <Номер ячейки>.
   3) Передвигая курсор по экрану,  посмотреть номер следующей "пустой"
ячейки (с кодом "000").  Вписать ее номер  в предыдущую "пустую" ячейку
командами:       [CR], <номер кластера>, [ESC].
   Этими манипуляциями Вы восстановите одну ссылку,  принадлежащую уте﹣
рянному файлу. Продолжайте в том же духе, попутно считая каждую восста﹣
новленную ссылку. Когда их число достигнет величины
                  Число_кластеров_в_файле_без_единицы ,
в следующей ячейке  ( содержащей нулевой код )  поставьте признак конца
файла командой:          [CR], [TAB], [ESC].

   ▏Третий этап.
   Записать восстановленную ТРФ на диск при помощи команды
                           [W]rite, [Y]es ,
и с радостью выйти из программы  Disk Fixer  командами:
                     [ESC]; [E]xit, [Y]es, [Y]es.

   Вздохните свободно: если никаких сбоев не было,  то ваш файл спасен!
Загрузите его в текстовый редактор и внимательно просмотрите.  Запишите
текст на диск снова (желательно под другим именем).


   ▏Примечания :
   α) проблема восстановления файлов значительно усложняется, если было
уничтожено несколько файлов; и еще больше,  если среди нескольких унич﹣
тоженных файлов надо восстановить один самый нужный. В этом случае при﹣
дется восстанавливать все файлы в один большой, затем  указывать  общий
объем файла, а потом в текстовом редакторе отбрасывать "все лишнее";
   β) следует помнить, что в тексте может встретиться  код ASCII симво﹣
ла,  обозначающего конец текстового файла (1Ah).  Поэтому после восста﹣
новления Таблицы Размещения Файлов в режиме DISK FIXER надо просмотреть
содержимое всех  восстановленных кластеров  и заменить  все коды 1Аh на
код 20h (соответствует символу "Пробел").

I.2.2. Таблица Размещения Файлов

                              — Как Вы считаете, следует писать — сэнд﹣
                              вич или сандвич?
                              — Да зачем нам вообще этот иноземный тер﹣
                              мин,  если существует  прекрасное русское
                              слово — "бутерброд"?
                                                      Народный фольклор

   Для двухстороннего диска в секторах с номерами  1÷3 и 4÷6 содержится
Таблица Размещения Файлов (FAT-"File Allocation Table"),▁ в которой рас﹣
полагается информация о размещении файлов на дискете. 
   Сектора 1÷3  и сектора 4÷6 - это две  копии  одной и той же  Таблицы
Размещения Файлов. 
\/T0/1
   ▁————————▏————————▏————————▏————————▏————————▏————————▏————————▚
   ▕0 сектор▕1 сектор▕2 сектор▕3 сектор▕4 сектор▕5 сектор▕6 сектор▕
   ▇——▲—————▞————————▞————————▞————————▞————————▞————————▞————————▔
      ▕     ▕◀————————— FAT ——————————▶▕◀—————— Копия FAT ———————▶▕
      ▕
\/T1/1-
  Загрузочный сектор ("Boot sector")

   Если же диск отформатирован как ▇односторонний▁ ("Single"), то FAT за﹣
нимает уже не 3, а 2 сектора, и размещается в секторах 1÷2, а копия - в
секторах 3÷4. 
\/T0/1
            ▁————————▏————————▏————————▏————————▏————————▚
            ▕0 сектор▕1 сектор▕2 сектор▕3 сектор▕4 сектор▕
            ▇——▲—————▞————————▞————————▞————————▞————————▔
               ▕     ▕◀————— FAT —————▶▕◀—— Копия FAT ——▶▕
               ▕
\/T1/1-
           Загрузочный сектор ("Boot sector")

   Предполагается,  что копии  Таблицы  Размещения  Файлов  должны быть
идентичными.  Хранение двух экземпляров Таблицы Размещения Файлов пред﹣
ставляет собой простую предосторожность, связанную  с большой важностью
информации,  содержащейся  в таблице.  Восстановление поврежденной  FAT
представляет собой непростую задачу. 
   Для Таблицы Размещения Файлов выделено 4 (или 6) секторов не столько
для того, чтобы хранить две копии,  сколько для обеспечения возможности
увеличения этой Таблицы в будущем. 
   Основной принцип▁ организации Таблицы Размещения Файлов заключается в
создании таблицы, каждый элемент которой соответствует одному кластеру.
Элементы таблицы содержат признаки занятости кластера▁.
   Доступные▁  (свободные) элементы таблицы  содержат  нулевые▁ значения.
Участки пространства на дискете, принадлежащие одному файлу,  связаны в
цепочку▁. Опишем организацию этой цепочки.
   Во-первых,  определенный элемент Справочника▁ файла  (см. ниже раздел
I.2.3) содержит номер элемента  в Таблице Размещения Файла, который со﹣
ответствует первому из кластеров, выделенных для файла.
   Во-вторых,  каждый элемент  Таблицы Размещения Файлов содержит номер
следующего▁ кластера файла и так далее, пока не будет достигнут  послед﹣
ний кластер файла.
   В-третьих, в последнем элементе Таблицы Размещения Файлов для данно﹣
го файла находится признак конца файла▁.

                            Некий поэт спросил, нравится ли Шамфору на﹣
                            писанное им двустишье. "Очень,- заявил Шам﹣
                            фор,- только нельзя ли его сократить?"
                                         С.Шамфор. Характеры и анекдоты

   Нумерация элементов  Таблицы Размещения Файлов  начинается с 2.  Это
означает, что первые два элемента Таблицы Размещения Файлов (с номерами
0 и 1) не используются для хранения информации о размещении данных. Они
зарезервированы  для хранения очень важной информации — ▇сведений о фор▁﹣
\/T0/1
▇мате дискеты▁. 
                  ▁———————————————————————————————————▚
                  ▕   Код формата хранится в первом▁   ▕
                  ▕  байте Таблицы Размещения Файлов▁  ▕
                  ▇———————————————————————————————————▔

\/T1/1-
   Теперь можно подробно  рассмотреть  ▇кодировку▁  информации  в Таблице
Размещения Файлов. Вам, конечно уже известно, что на двухсторонней дис﹣
кете для Области данных отведено 713 кластеров.
   Элемент  Таблицы  Размещения  Файлов  должен позволять хранить номер
другого элемента Таблицы (▇номер кластера▁, а максимальный номер, который
может храниться в одном байте равен всего 0FFh=255, следовательно, дли﹣
на элемента Таблицы должна быть ▇больше▁ одного байта. 
   С другой стороны,  если бы длина элемента  Таблицы Размещения Файлов
была равна ▇двум▁ байтам (максимальный номер,  который может  храниться в
двух байтах равен 0FFFFh = 65535), то с учетом того, что FAT занимает 3
сектора на дискете (3∙512 = 1536 байт), мы получим, что можно закодиро﹣
вать 1536/2=768 кластерoв, что вполне достаточно для этого типа дискет,
но на поиск нужной ячейки будет уходить  в два раза больше времени, чем
при однобайтном кодировании. Истина, как всегда, находится посредине!
   Для решения этой  проблемы была  разработана довольно  сложная схема
представления элементов FAT в виде ▇трех▁ шестнадцатеричных цифр, занима﹣
ющих ▇полтора байта▁  (12 двоичных разрядов)  на дискете.  Всего же таким
способом можно закодировать 1024 кластера.
\/T0/1
    ▁——————————▏——————————▏——————————▏——————————▏—————▏—————————————▚
    ▕ 0-й байт ▕ 1-й байт ▕ 2-й байт ▕ 3-й байт ▕ ... ▕ 1535-й байт ▕
    ▕    FAT   ▕    FAT   ▕    FAT   ▕    FAT   ▕     ▕     FAT     ▕
    ▇——————————▞——————————▞——————————▞——————————▞—————▞—————————————▔
    ▇————————————————————————————————▔
       Информация о формате дискеты

\/T1/1-
   Схема хранения чисел  в виде полуторабайтных кодов выглядит довольно
странно  для программиста,  хотя использование этого факта  на машинном
языке реализуется очень просто.
   Последовательные элементы  Таблицы Размещения Файлов  разбиваются на
пары,  объединяющие два полуторабайтовых значения  в последовательность
из трех байтов для каждой пары.
   Для получения значения, хранящегося в  элементе  Таблицы  Размещения
Файлов с номером X, нужно выполнить следующие действия:
   1) умножить X на 1.5 (для этого выполняется умножение на 3 с  после﹣
дующим делением на 2), прибавить 3 и найти целую часть полученного зна﹣
\/T0/1
чения:
                           M := [X∙1.5+3]

\/T1/1-
   2) байты с адресами M и M+1 можно теперь загрузить в шестнадцатибит﹣
ный  регистр микропроцессора  (кто  не знает ассемблера микропроцессора
Z80 - не бойтесь: это не больно!).  Теперь  в регистре находится четыре
шестнадцатеричных цифры, а необходимы только ▇три▁ из них.
   Если номер элемента Таблицы Размещения Файлов нечетный, то нужно от﹣
бросить ▇последнюю▁ цифру, а если он четный - то ▇первую.

\/T0/1
   Старший бит ——▚                           ▁——— Младший бит
    (номер 7)    ▼                           ▼     (номер 0)
                ▁————————————————————————————————▚
   3-й байт FAT ▕ 07  06  05  04  03  02  01  00 ▕
                ⁃————————————————▚               ▕◀———  0-й элемент FAT
   4-й байт FAT ▕ 03  02  01  00 ▕11  10  09  08 ▕
                ▕                ▇———————————————
   5-й байт FAT ▕ 11  10  09  08  07  06  05  04 ▕◀———  1-й элемент FAT
                ⁃————————————————————————————————
   6-й байт FAT ▕ 07  06  05  04  03  02  01  00 ▕
                ⁃————————————————▚               ▕◀———  2-й элемент FAT
   7-й байт FAT ▕                ▕11  10  09  08 ▕
                ▕                ▇———————————————
       ...      ▕               ...              ▕          ...
                ⁃————————————————▚               ▕
1534-й байт FAT ▕ 03  02  01  00 ▕               ▕
                ▕                ▇———————————————
1535-й байт FAT ▕ 11  10  09  08  07  06  05  04 ▕◀— 1021-й элемент FAT
                ▇————————————————————————————————▔

\/T1/1-
   Элементы FAT с содержимым 2CBh÷FFFh обозначают особые типы  зарезер▁﹣
вированных▁ кластеров, например, EEEh в MSX-DOS используется для выделе﹣
ния кластеров с дефектными секторами.  Дело  в том,  что на поверхности
дискеты могут встречаться участки  с дефектами магнитного покрытия, ко﹣
торые нельзя эффективно использовать для хранения данных.
   В организации Таблицы Размещения Файлов могут возникать определенные
дефекты.  Два наиболее заметных дефекта — это "беспризорные" кластеры▁ и
перекрещивающиеся файлы▁.
   Если элемент Таблицы содержит значение, указывающее, что элемент ис﹣
пользуется (значение не равно нулю) и,  в то же время,  этот элемент не
входит  ни в одну  из цепочек определения  размещения  файлов, то такой
элемент  Таблицы  Размещения Файлов  становится  как бы "беспризорным"▁.
"Беспризорные" кластеры чаще всего возникают, когда программы  начинают
создавать файл (так что для него выделяются кластеры),  но не закрывают
его,  вследствие чего  не завершается создание элемента Справочника для
данного файла.
   Во втором случае, может случиться так, что две (или более) различные
цепочки,  определяющие размещение файлов, приводят  к одному  и тому же
кластеру. Такие файлы называются перекрещивающимися▁.
   Если "беспризорные" кластеры встречаются достаточно часто, то перек﹣
рещивающиеся  файлы возникают очень редко.  Если такая  ситуация все же
Вам встретится,  нужно скопировать каждый  из файлов  на другую дискету
для последующего восстановления (если оно потребуется). После этого ко﹣
пии всех файлов будут содержать информацию из общих секторов,  хотя она
может принадлежать только одному из них.
   При работе MSX-DOS в памяти хранится копия Таблицы Размещения Файлов
для каждого используемого дисковода (см. раздел I.2.1). Когда в Таблице
производится какое-либо изменение, оно записывается в обе копии на дис﹣
кете. При новом обращении  к дискете MSX-DOS считывает Таблицу Размеще﹣
ния Файлов, чтобы установить формат дискеты.

Как уберечь диск от случайных уничтожений файлов


                                  Чем незначительнее изменение проекта,
                                  тем разрушительнее его последствия.
                                                            Закон Мэрфи

I.2.2. Как уберечь диск от случайных уничтожений файлов

                                   Наиболее полезны те  советы, которым
                                   легко следовать.
                                                               Вовенарг

   Вся информация о содержимом дискеты хранится  в двух специальных об﹣
ластях: в Таблице Размещения Файлов и в Справочнике диска. Если в конце
напряженного рабочего дня позаботиться о сохранении такой ценной инфор﹣
мации,  то на следующий день  Вы не слишком  разочаруетесь, когда вдруг
произойдет сбой в системе или "упадет" напряжение в сети в момент, ког﹣
да Вы только начали  записывать измененный текст.  Пропадет труд только
одного дня. Остальное можно будет восстановить, затратив минимум време﹣
ни.
\/T0/1
    ▁————————————————————————————————————————————————————————————▚
    ▕  Идея состоит в том, чтобы  сектора с  номерами 004 ÷ 00D  ▕
    ▕  (копии FAT и Справочник) копировать в зарезервированную   ▕
    ▕       каким-либо образом область (объемом 5 Кбайт).        ▕
    ▇————————————————————————————————————————————————————————————▔

\/T1/1-
   Трудность заключается в следующем: необходимо "скрыть" этот объем от
операционной системы. Такой "фокус" можно осуществить двумя способами:
   1) создать  на дискете  с помощью текстового  редактора  файл в 5120
байт, "скрыть" его от системы  (установить  в байте атрибутов файла код
02, запрещающий MSX-DOS работать с данным файлом).
\/T0/1
▁—————————————————————————————————————————————————————————————————————▚
▕"Скрытый" файл невозможно уничтожить средствами операционной системы!▕
▇—————————————————————————————————————————————————————————————————————▔

\/T1/1-
   2) проставить коды, обозначающие "плохие" кластеры в любом свободном
месте  Таблицы Размещения Файлов (лучше - в самом ее конце); операцион﹣
ная система не будет пытаться  ни записать,  ни прочитать  эти кластеры
(информация же в кластерах сохраняется!).
   "Фокус" номер ▇два▁ мы считаем наиболее удачным,  так как в нем не ис﹣
пользуется Справочник, т.е. вероятность возникновения ошибок при работе
с диском практически равна нулю (чем проще конструкция, тем меньше сбо﹣

I.2.3. Справочник дискеты

                            ... старейшим из дошедших до нас каталогов
                           признается список литературных произведений
                           на шумерской глиняной плитке, относящийся к
                           2ООО г. до н.э.
                             Михайлов А.Н.,Черный А.Ч.,Гиляревский Р.С.

   Справочник▁ (каталог, директория, оглавление) дискеты содержит список
всех файлов, находящихся на дискете.  Элементы справочника содержат всю
необходимую информацию о файле,  за исключением информации о размещении
файла (которая хранится в Таблице Размещения Файлов).
   Справочник располагается
\/T0/1
          ▁————————————————————————————————————————————————————▚
          ▕  α) в секторах 07h ÷ 0Dh, если диск ▇двухсторонний,▁ ▕
          ▕  β) в секторах 05h ÷ 0Bh, если диск ▇односторонний.▁ ▕
          ▇————————————————————————————————————————————————————▔
\/T1/1-
или более подробно для ▇односторонней▁ дискеты:
\/T0/1
   ▁————————▏————————▏————————▏————————▏————————▏————————▏————————▚
   ▕5 сектор▕6 сектор▕7 сектор▕8 сектор▕9 сектор▕A сектор▕B сектор▕
   ▇————————▞————————▞————————▞————————▞————————▞————————▞————————▔
   ▕◀————————————————— Справочник ("Directory") —————————————————▶▕

\/T1/1-
и для ▇двухсторонней▁ дискеты:
\/T0/1
▁————————▏————————▏————————▏————————▏————————▏————————▏————————▚
▕7 сектор▕8 сектор▕9 сектор▕A сектор▕B сектор▕C сектор▕D сектор▕
▇————————▞————————▞————————▞————————▞————————▞————————▞————————▔
▕◀————————————————— Справочник ("Directory") —————————————————▶▕

\/T1/1-
   Каждый элемент  Справочника имеет длину  32 байта.  Следовательно, в
512-байтном секторе помещается ровно 16 элементов Справочника.  На дис﹣
кете выделено  7 секторов для  Справочника,  что позволяет  хранить 112
элементов (7∙512/32 = 112).
   Каждый элемент Справочника состоит из восьми полей следующего назна﹣
чения:
\/T0/1
            Первое поле
          ▁————————————▚ ▚
  0-й байт▕ ▧▧▧▧▧▧▧▧▧▧ ▕ ▕
          ⁃———————————— ▕
  1-й байт▕ ▧▧▧▧▧▧▧▧▧▧ ▕ ▕      Имя файла (8 символов)
          ⁃———————————— ▕ ◀—— (если некоторый символ отсутствует,то он
   ...    ▕     ...    ▕ ▕      заменяется кодом 20h)
          ⁃———————————— ▕
  7-й байт▕ ▧▧▧▧▧▧▧▧▧▧ ▕ ▕
          ▇————————————▔ ▔
            Второе поле
          ▁————————————▚ ▚
  8-й байт▕ ▨▨▨▨▨▨▨▨▨▨ ▕ ▕
          ⁃———————————— ▕      Расширение имени файла
  9-й байт▕ ▨▨▨▨▨▨▨▨▨▨ ▕ ⁃ ◀—— (если некоторый символ отсутствует,то он
          ⁃———————————— ▕      заменяется кодом 20h)
 10-й байт▕ ▨▨▨▨▨▨▨▨▨▨ ▕ ▕
          ▇————————————▔ ▔
            Третье поле
          ▁————————————▚
 11-й байт▕  ▕   ◀——  Байт атрибутов файла
          ▇————————————▔
          Четвертое поле
          ▁————————————▚ ▚
 12-й байт▕ :::::::::: ▕ ▕
          ⁃———————————— ▕
 13-й байт▕ :::::::::: ▕ ▕
          ⁃———————————— ⁃ ◀——  Зарезервированное поле
    ...   ▕     ...    ▕ ▕
          ⁃———————————— ▕
 21-й байт▕ :::::::::: ▕ ▕
          ▇————————————▔ ▔
            Пятое поле
          ▁————————————▚ ▚
 22-й байт▕ ░░░░░░░░░░ ▕ ▕
          ⁃———————————— ⁃ ◀——  Время создания файла
 23-й байт▕ ░░░░░░░░░░ ▕ ▕
          ▇————————————▔ ▔
            Шестое поле
          ▁————————————▚ ▚
 24-й байт▕ ▧▧▧▧▧▧▧▧▧▧ ▕ ▕
          ⁃———————————— ⁃ ◀——  Дата создания файла
 25-й байт▕ ▧▧▧▧▧▧▧▧▧▧ ▕ ▕
          ▇————————————▔ ▔
           Седьмое поле
          ▁————————————▚ ▚
 26-й байт▕ ▨▨▨▨▨▨▨▨▨▨ ▕ ▕      Ссылка на первый кластер, в котором на﹣
          ⁃———————————— ⁃ ◀——  ходится файл (в 26-ом байте - младший
 27-й байт▕ ▨▨▨▨▨▨▨▨▨▨ ▕ ▕      байт адреса, в 27-ом байте - старший
          ▇————————————▔ ▔      байт)
           Восьмое поле
          ▁————————————▚ ▚
 28-й байт▕ ********** ▕ ▕
          ⁃———————————— ▕
 29-й байт▕ ********** ▕ ▕
          ⁃———————————— ⁃◀———  Размер файла (в байтах)
 30-й байт▕ ********** ▕ ▕
          ⁃———————————— ▕
 31-й байт▕ ********** ▕ ▕ ◀——  Старший байт размера файла
          ▇————————————▔ ▔
\/T1/1-

                               Помните, что для человека звук его имени
                               самый сладкий  и самый важный звук в че﹣
                               ловеческой речи.
                                                              Д.Карнеги

   Имя файла▁.  Это поле имеет длину 8 байт  и содержит имя файла.  Если
длина имени меньше восьми символов,  то недостающие  символы заменяются
символом "Пробел" (код 20h).
   Если ▇первый байт имени файла▁  содержит число  E5h,  то это означает,
что файл,  которому соответствует этот элемент Справочника, уже уничто﹣
жен,  т.е. после уничтожения файла первый символ имени файла заменяется
шестнадцатеричным кодом E5.  ▇Вся информация в элементе каталога, за ис▁﹣
▇ключением первого символа имени, сохраняется.
   Расширение▁. Это поле имеет длину три байта. Оно содержит  расширение
имени файла. Как и в случае с самим именем,  короткое расширение допол﹣
няется символами "Пробел".  Если файл не имеет расширения,  то это поле
содержит три символа "Пробел".
   Атрибут▁. Это поле состоит из ▇одного▁ байта.  Поле атрибута в основном
используется  для установления признака  "скрытого" файла,  т.е. такого
файла,  имя которого  не обнаруживается обычными  программами работы со
Справочниками.
   В операционной системе MSX-DOS биты байта  атрибутов несут следующую
нагрузку:
\/T0/1
▁—————————————————————————————————————————————————————————————————————▚
▕                                                                     ▕
▕                      7 6 5 4 3 2 1 0                                ▕
▕                                                                     ▕
▕      Старший бит ——▶ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ◀—— Младший бит                ▕
▕                      ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲                                ▕
▕                      ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕                                ▕
▕ Бит защиты от чтения ▔ ▕ ▕ ▕ ▕ ▕ ▕ ▇ Резервированный бит            ▕
▕  Резервированный бит ——▔ ▕ ▕ ▕ ▕ ▇— "Скрытый" файл, защищен от ко﹣  ▕
▕                          ▕ ▕ ▕ ▕   манды просмотра каталога         ▕
▕          Архивный файл ——▔ ▕ ▕ ▇—— Системный файл с особым доступом ▕
▕              Подкаталог ———▔ ▇——— Метка тома                        ▕
▕                                                                     ▕
▇—————————————————————————————————————————————————————————————————————▔
\/T1/1-

   ⁃Бит 0▁ в системе MSX-DOS зарезервирован.
   ⁃Биты 1-й и 2-й▁ служат для индикации атрибутов "скрытого"  и "систем﹣
ного" файла.  ▇Первый▁ бит байта атрибутов, установленный в 1, определяет
"скрытый" файл, а ▇второй▁ бит, установленный в 1, — системный файл.
   Таким образом,
"видимый" файл будет иметь нулевой байт атрибута            (00000000),
для "скрытого" файла байт атрибута содержит значение 2      (00000010),
для системного файла байт атрибута содержит значение 4      (00000100),
а для "скрытого" системного файла байт атрибута содержит значение  6
                                                            (00000110).
   Хотя обработка  системного  атрибута  осуществляется  независимо  от
скрытого,  оба этих атрибута  практически  совпадают  по своему функци﹣
ональному назначению.  При использовании любого  из них файл становится
"невидимым".
    Если ⁃бит 1▁ или ⁃бит 2▁ равен 1,  то файл  исчезает  из каталога.  Его
нельзя ни стереть, ни прочитать, т.к. при всяком обращении  к нему опе﹣
рационная система сообщает:  "File not found" .
   ⁃Бит 3▁ (содержимое байта атрибутов: 00001000) указывает,  что элемент
Справочника содержит метку тома. Сама метка хранится в полях имени фай﹣
ла и расширения, которые воспринимаются в этом случае как одно целое.
    Если бит 3 равен 1,  то файл  исчезает  из каталога.  Его нельзя ни
стереть, ни прочитать, т.к. при всяком обращении к нему говорится:
                          "File not found"
   В операционной системе  MS-DOS  ⁃бит 4▁  (содержимое  байта атрибутов:
00010000) используется для указания элементов Справочника, соответству﹣
ющих Справочникам нижнего уровня.  Поскольку Справочники нижнего уровня
хранятся на диске подобно обычным файлам данных, им необходим собствен﹣
ный элемент  в корневом Справочнике.  В этом элементе  используются все
поля,кроме размера файла,  в данном случае равного нулю. Действительный
размер файла  Справочника нижнего уровня  легко  определяется  из соот﹣
ветствующей последовательности в Таблице Размещения Файлов.
   В операционной системе MSX-DOS равенство  бита 4 единице  приводит к
тому,  что при просмотре каталога  командой DIR,  Вы увидите  на экране
слово <DIR>  в том месте каталога,  где должна находиться информация об
объеме файла. Это означает, что этот файл - теперь не файл вовсе, а имя
некоторого ▇подкаталога▁.
   ⁃Бит 5▁ (содержимое байта атрибутов: 00100000) предусмотрен для облег﹣
чения создания резервных копий файлов  на ▇жестких▁ дисках. ▇Для файлов на
▇гибких дисках этот атрибут бесполезен▁.
   ⁃Бит 6▁ зарезервирован в системе MSX-DOS.
   Если ⁃бит 7▁ равен 1, то файл становится нечитаемым (например,  Вы  не
сможете загрузить его в текстовый редактор и т.д.).
   Зарезервированное поле▁. Это поле зарезервировано для возможного  ис﹣
пользования в будущем. Любые ▇новые▁ операции над Справочником файлов мо﹣
гут использовать это поле.  Эти байты имеют  значение 00.  Любые другие
значения этого поля указывают на какой-либо вариант его использования.


                                         Счастливые часов не наблюдают.
                                             А.С.Грибоедов. Горе от ума

   Время▁. Это поле имеет длину два байта в формате шестнадцатиразрядно﹣
го целого числа без знака.  В этом поле хранится время создания или мо﹣
дификации файла.
   Большинство операций, использующих это поле, таких как операция рас﹣
печатки содержимого Справочника (DIR),  выдают время с точностью до ми﹣
нут, хотя число, хранящееся  в поле времени, позволяет определить время
с точностью до двух секунд.
   Код времени,  хранящийся  как шестнадцатиразрядное  целое число  без
знака, вычисляется по следующей формуле:
\/T0/1
              ▁—————————————————————————————————————————▚
              ▕  Время = Часы∙2048+Минуты∙32+Секунды/2  ▕
              ▇—————————————————————————————————————————▔

             23-й байт                           22-й байт
 ▁———▏———▏———▏———▏———▏———▏———▏———▚   ▁———▏———▏———▏———▏———▏———▏———▏———▚
 ▕ h4▕ h3▕ h2▕ h1▕ h0▕ m5▕ m4▕ m3▕   ▕ m2▕ m1▕ m0▕ s4▕ s3▕ s2▕ s1▕ s0▕
 ▇———▞———▞———▞———▞———▞———▞———▞———▔   ▇———▞———▞———▞———▞———▞———▞———▞———▔
\/T1/1-
 ▇—————————▏—————————▞—————————————▏—————————————▞—————————▏—————————▔
       Часы (0÷23)           Минуты (0÷59)          Секунды/2 (0÷29)

                                                    Все врут календари.
                                             А.С.Грибоедов. Горе от ума

   Дата▁. Это поле состоит из двух байтов.  Как и время, даты хранятся в
виде целого шестнадцатиразрядного числа без знака,  которое вычисляется
\/T0/1
по формуле:
               ▁———————————————————————————————————————▚
               ▕  Дата = (Год-1980)∙512+Месяц∙32+День  ▕
               ▇———————————————————————————————————————▔

\/T1/1-
   Диапазон значений лет составляет  от 1980  до 2079,  причем хранятся
они в виде относительных величин от 0 до 99.  Хотя формат позволяет за﹣
давать относительный номер года 127 (что соответствует 2107 году), опе﹣
рационная система  MSX-DOS позволяет работать с годами только  до 2079.
Никто, правда, не ожидает, что MSX-DOS будет использоваться так долго!

             25-й байт                           24-й байт
\/T0/1
 ▁———▏———▏———▏———▏———▏———▏———▏———▚   ▁———▏———▏———▏———▏———▏———▏———▏———▚
 ▕ y6▕ y5▕ y4▕ y3▕ y2▕ y1▕ y0▕ m3▕   ▕ m2▕ m1▕ m0▕ d4▕ d3▕ d2▕ d1▕ d0▕
 ▇———▞———▞———▞———▞———▞———▞———▞———▔   ▇———▞———▞———▞———▞———▞———▞———▞———▔
\/T1/1-
 ▇———————————————▏———————————▞—————————▏—————————▞—————————▏—————————▔
            Годы (0÷99)           Месяцы (1÷12)        Дни (1÷31)

   Как формат, так  и размещение  полей даты  и времени подобраны таким
образом, чтобы вместе они образовывали единое четырехбайтовое поле, ко﹣
торое можно использовать  в операциях сравнения.  Достаточно просто из﹣
влекать компоненты даты и времени из соответствующих полей  и вычислять
их разность.
   Например, для разделения даты  на составные части можно использовать
следующие формулы, записанные на языке программирования Pascal:
\/T0/1
              ▁————————————————————————————————————————▚
              ▕    Год:=1980+поле_даты div 512         ▕
              ▕    Месяц:=(поле_даты mod 512) div 32   ▕
              ▕    День := поле_даты mod 32            ▕
              ▇————————————————————————————————————————▔

\/T1/1-
   Номер начального кластера▁. Это двухбайтовое поле содержит шестнадца﹣
тиразрядное число, являющееся смещением до начальной точки файла в Таб﹣
лице Размещения Файлов.
   Размер файла▁. Это поле состоит из четырех байтов. Размер файла зада﹣
ется  в байтах  и хранится  в формате четырехбайтового целого числа без
знака.  Размер файла не всегда указывает точное число байтов.  Для всех
файлов это поле должно соответствовать размеру файла в секторах.
   Для программных файлов, представленных в виде "COM"-файла и для фай﹣
лов, созданных из данных фиксированной длины, только поле размера файла
позволяет точно определить, где находится конец данных. Для этих файлов
значение в поле размера файла хранится с точностью до байта. 
   Для файлов некоторых других форматов такая точность не обязательна и
размер файла,  указанный  в соответствующем  поле,  может отличаться от
действительного.  Наиболее часто  это случается  с текстовыми  файлами.
Текстовые файлы  в кодах ASCII имеют маркер (признак) конца файла, хра﹣
нящийся в самом файле, который фиксирует точный конец данных.

Примеры, взятые из жизни

                                        Опыт увеличивает нашу мудрость,
                                        но не уменьшает нашей глупости.
                                                          Джош Биллингс
                          Пример номер один

   Приведем один простой ▏пример из жизни.
   Опишем ситуацию: в дисководе "А" находится закрытый  на запись диск.
В дисководе "B" - диск  с разрешенной записью.  В командной строке была
допущена ошибка вида:
     A>copy con batch.bat
(перед именем "batch.bat" не было указано имя дисковода "В").
   С  консоли  создали  некоторый  текстовый  файл  и  нажали   клавиши
"ctrl"+"z".  Естественно,  что операционная система попыталась записать
эту информацию на дискету,  находящуюся  в дисководе "А" и в результате
сообщила:
     Write protect error writing drive A:
     Abort, Retry, Ignore?   .
   Оператор поменял диски местами  ( что категорически  запрещается де﹣
лать — сейчас поймете, почему) и нажал клавишу "R".  В результате этого
"запрещенного" приема  все текстовые файлы потеряли:  кто - начало, кто
окончание.  Возникла паника,  так как диск содержал уникальную информа﹣
цию.
   А случилось вот что: операционная система считала ТРФ  в оперативную
память и произвела необходимые изменения.  Затем начала поиск того сек﹣
тора каталога,  в который можно было бы вписать новое  имя создаваемого
файла. Номер этого сектора оказался равным 9.  Он был загружен в опера﹣
тивную память компьютера и MSX-DOS вписала все необходимые данные в ко﹣
пию сектора. И только после этого была сделана попытка записать файл на
диск. Диск оказался защищенным от записи. Программа выдала сообщение об
ошибке.  После перестановки дисков  со стороны  операционной системы не
было предринято никаких попыток заново загрузить  FAT и Справочник, она
сразу (о ужас!)  записала все данные  на дискету.  FAT  перестала соот﹣
ветствовать реальному расположению файов на диске.
   Но все было легко восстановить по двум причинам:
   ▇во-первых,▁ до "гибели" файлы на дискете были расположены в идеальном
порядке, т.е. не было ни одного "скачка" в ссылках;
   ▇во-вторых,▁ заполненная часть Справочника диска располагалась  в двух
секторах (7 и 8), а измененный сектор имел номер 9, а это означает, что
вся информация о началах файлов сохранилась.
   Итак,началось восстанавление "погибшей" информации. Вначале мы очис﹣
тили ТРФ  и записали строгую цепочку  последовательных ссылок от начала
FAT и до конца последнего файла. Конец последнего файла нашли по следу﹣
ющей формуле:
   Номер_первого_кластера_последнего_файла + (Его_объем div 400h) + 1 ,
(все вычисления производятся в шестнадцатеричной системе).
   Распечатали  оглавление диска  (этого можно не делать)  и установили
признаки концов файлов в соответствии с каталогом по формуле:
            Последний_кластер_файла = Начальный_кластер - 1 .
Естественно, что начальный_кластер — это ▇первый кластер ▏следующего▁ ▏фай﹣
▏ла!▁  Потом освободили Справочник от бесполезной информации, находящейся
в 9-м секторе и записали оглавление и ТРФ на дискету.
   На этом восстановление  уникальной информации  благополучно заверши﹣
лось.


\/FE
         А теперь(специально для любителей попрограммировать на языке MSX-BASIC)
       покажем, как хранится  на диске файл с программой, а потом приведем пример
             восстановления такого файла. Сначала — необходимое введение...
\/FN

      ⁃Таблица програмных команд (PIT — Program Instruction Table)▁
   PIT — это место в оперативной памяти компьютера, где  хранится  Ваша
программа, преобразованная BASIC-системой во внутренний код.  Следующая
табличка представляет собой карту памяти слота 0 (слот "BASIC"), в  ко﹣
тором все изменения, редактирование и запуск программ производятся  под
управлением интерпретатора языка. 
\/T0/1
     0000h ▏————————————————————————————————————————————————▚
           ▕▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▕
           ▕▧▧▧▧▧▧▧▧▧  ROM (Интерпретатор MSX-BASIC) ▧▧▧▧▧▧▧▕
           ▕▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▕
     8000h ————————————————————————————————————————————————
           ▕            Программа на языке BASIC            ▕
           ▕        ("Program Instruction Table", PIT)      ▕
           ⁃————————————————————————————————————————————————
           ▕      Простые переменные ("Variable Table")     ▕
           ⁃————————————————————————————————————————————————
           ▕        Массивы ("Array Variable Table")        ▕
           ⁃————————————————————————————————————————————————
           ▕         Свободная область ("Free Area")        ▕
           ⁃————————————————————————————————————————————————
           ▕              Стек ("Stack Area")               ▕
           ⁃————————————————————————————————————————————————
           ▕   Строковая область ("Character String Area")  ▕
           ⁃————————————————————————————————————————————————
           ▕ Блок управления файлами ("Files Control Block")▕
     F380h ————————————————————————————————————————————————▕
           ▕                Рабочая область                 ▕
           ▕    (системные переменные и таблица ловушек)    ▕
     FFFFh ▞————————————————————————————————————————————————▔

\/T1/1-
   Таблица PIT обычно начинается по  адресу  &H8000.  Однако  ее  можно
"сдвинуть", изменив значение системной переменной TXTTAB в таблице сис﹣
темных переменных. Для помещения PIT с адреса &HА000 достаточно  выпол﹣
нить следующую программу: 
   5 'Адрес &HА001, находящийся  в двух ячейках  с номерами,  начиная с
&hF676, определяет место, с которого начнется текст программы.
   10 POKE &HF676,&H01  'Заполнение младшего байта слова TXTTAB
   20 POKE &HF677,&HA0  'Заполнение старшего байта слова TXTTAB
   30 POKE &HA000,0     'Первый байт PIT(&HA000) должен быть нулевым!
   40 NEW               'Стираем данную программу!
   Напомним Вам, что адрес &HА001 ( как и любой другой! ) размещается в
двух байтах так:
\/T0/1
              Адрес   ——▶   &HF676    &HF677  ◀——   Адрес
          младшего байта      ▕         ▕       старшего байта
                        ▁—————▕—————————▕————▚
          Содержимое    ▕ ▁———▼——▚  ▁———▼——▚ ▕     Содержимое
           младшего  ◀————— &Н01 ▕  ▕ &HА0 —————▶   старшего
            байта       ▕ ▇——————▔  ▇——————▔ ▕       байта
                        ▇————————————————————▔

\/T1/1-
   Очевидно, что  в результате этих "манипуляций" размер  свободной об﹣
ласти уменьшится  на &H2000 байтов  (&HA000-&H8000=&H2000),  и область,
расположенная между &H8000 и началом PIT, будет защищена от "вторжения"
программ на MSX-BASIC. Ясно, что величина PIT зависит от размера текста
программы. После выполнения данной программы нажмите кнопку сброса "RE﹣
SET". А теперь мы поведаем  Вам о том, как хранится программа, написан﹣
ная на языке BASIC в PIT.
\/T0/1
▁—————————————————————————————————————————————————————————————————————▚
▕ Все строки программы на MSX-BASIC начинаются с 2-байтного указателя.▁▕
▕   За этим указателем идут два байта, содержащие номер строки.▁       ▕
▕   Затем идет текст строки с▁ последующим нулевым байтом.▁             ▕
▕   За последней строкой следуют два▁ дополнительных нулевых байта▁, ад﹣▕
▕ рес которых находится в указателе последней строки программы.       ▕
▕   Цифры и зарезервированные служебные слова записываются во внутрен﹣▕
▕ нем коде (один или два байта на слово, цифру).                      ▕
▕   Для остального текста используется код ASCII.                     ▕
▇—————————————————————————————————————————————————————————————————————▔

\/T1/1-
   Введем в память следующую короткую программу:
               10 B=5
               20 END
   Теперь прочитаем,  что же реально содержится  в PIT, используя в не﹣
посредственном режиме команду  PRINT HEX$(PEEK(A)) , где значение пере﹣
менной А (адреса) изменяется от &H8000 до &H8010.
   Вы обнаружите:
\/T0/1
▁———————————▏—————————————▏———————————————————————————————————————————▚
▕ Значение А▕HEX$(PEEK(A))▕          юКомментарии▁           ▕
⁃———————————————————————————————————————————————————————————————————
▕    8000   ▕      0      ▕      Первый байт PIT всегда нулевой       ▕
⁃———————————————————————————————————————————————————————————————————
▕∙∙  8001 ∙∙▕     09      ▕     Ссылка на начало следующей строки     ▕
▕∙∙  8002 ∙∙▕     80      ▕ (указатель следующей строки находится по  ▕
▕∙∙∙∙∙∙∙∙∙∙∙▕             ▕             адресу &Н8009)                ▕
⁃———————————————————————————————————————————————————————————————————
▕    8003   ▕      А      ▕     "Визуальный" номер первой строки      ▕
▕    8004   ▕      0      ▕               &H000А = 10                 ▕
⁃———————————————————————————————————————————————————————————————————
▕    8005   ▕     42      ▕   Шестнадцатеричный код ASCII буквы "B"   ▕
▕    8006   ▕     EF      ▕      Внутренний код знака равенства       ▕
▕    8007   ▕     16      ▕         Внутренний код цифры 5            ▕
▕    8008   ▕      0      ▕          Конец первой строки              ▕
⁃———————————————————————————————————————————————————————————————————
▕∙∙  8009 ∙∙▕     0F      ▕     Ссылка на начало следующей строки     ▕
▕∙∙  800A ∙∙▕     80      ▕ (указатель следующей строки находится по  ▕
▕∙∙∙∙∙∙∙∙∙∙∙▕             ▕             адресу &Н800F)                ▕
⁃———————————————————————————————————————————————————————————————————
▕    800B   ▕     14      ▕     "Визуальный" номер первой строки      ▕
▕    800C   ▕     00      ▕               &H0014 = 20                 ▕
⁃———————————————————————————————————————————————————————————————————
▕    800D   ▕     81      ▕       Внутренний код оператора END        ▕
▕    800Е   ▕     00      ▕            Конец второй строки            ▕
⁃———————————————————————————————————————————————————————————————————
▕    800F   ▕      0      ▕              Конец программы              ▕
▕    8010   ▕      0      ▕                                           ▕
▇———————————▞—————————————▞———————————————————————————————————————————▔

\/T1/1-
   Теперь, надеемся, Вам стало ясно, как можно изменить программу с по﹣
мощью оператора POKE. 
   Попробуйте выполнить следующее:
      POKE &H8005,&H41   '41 - шестнадцатеричный код ASCII буквы "A"
      POKE &H8007,&H17   '17 — внутренний код цифры "6"

   А теперь наберите команду LIST, затем нажмите клавишу◀—▔ и ...:
                              10 A=6
                              20 END
  Теперь Вам ясно, что "инструкции"  PEEK и POKE  таят  в себе поистине
безграничные возможности.  По существу, они позволяют нам распоряжаться
памятью компьютера по своему усмотрению.
   Например, они позволяют нам  при желании  подшутить над компьютером:
если известно,  где хранится  программа,  то мы можем  сделать так, что
после одной из строк программы окажется строка с меньшим номером.
   Пусть исходная программа имеет вид:
                               10 PRINT 4
                               20 PRINT 2
   Вам, конечно, уже известно, что строки программы на языке  MSX-BASIC
начинаются с двухбайтного указателя,  за которым следуют два байта, со﹣
держащие номер строки. Поэтому вначале выполним команду:
               PRINT HEX$(PEEK(&H8002));" ";HEX$(PEEK(&H8001))
               80 9
               Ok
   Таким образом,  указатель следующей (с номером 20) строки располага﹣
ется в ячейках с адресами &H8009 и &H800A, а, следовательно, номер вто﹣
рой строки находится в ячейках с адресами &H800B и &H800C .
   Проверим этот факт:
  PRINT HEX$(PEEK(&H800C));" ";HEX$(PEEK(&H800B))     ▁——▶  PRINT &H14
  0 14    ————————————————————————————————————————————▔      20
  Ok                                                        Ok
  А теперь:              POKE &H800B,1
                         Ok
                         list
                         10 PRINT 4
                         1 PRINT 2
                         Ok
   Программа действует, но строку с номером 1 нельзя ни стереть, ни ис﹣
править. Вы можете написать еще одну 1-ю строку и даже новую 20-ю стро﹣
ку! 
   Однако  не пытайтесь изменять  с помощью оператора POKE длину строки
или путать указатели: результат будет катaстрофическим!
   Ну а если Вы нечаянно нажали  RESET, - не спешите  отчаиваться! Вашу
программу еще можно спасти.  Это очень легко сделать,  набрав ту же ко﹣
манду
                              POKE &H8001,1
а затем                       auto          .
На экране появятся строки:    10*
                              20*             и так далее ...
   Строки с "*" - спасенные. Теперь достаточно "скомандовать":  LIST
и... о, чудо! Но это еще не все! Оказывается, спасены и все строки меж﹣
ду теми, номера которых не делятся нацело на 10!
   Если же Вы захотите защитить свою программу от запуска(команды RUN),
то примените в непосредственном режиме команду:
                              POKE &H8000,1
                              Ok
(разумеется, Ваша программа должна располагаться с адреса &H8000).
   По команде 'SAVE' компьютер выполняет следующие простые действия...
\/T0/1
    ▁—————————————————————————————————————————————————————————————▚
    ▕     Программа сохраняется в файле на диске таким образом:   ▕
    ▕  α) значение первого байта файла устанавливается в &HFF и   ▕
    ▕  β) текст программы во внутреннем представлении копируется  ▕
    ▕   из PIT на дискету.                                        ▕
    ▇—————————————————————————————————————————————————————————————▔
\/T1/1-

   Надеемся, что эти примеры немного  развлекли Вас и переходим  к цели
нашего повествования...


                            Пример номер два

   На диске находилась сложная программа, сохраненная во внутреннем ко﹣
де. Однажды "Некто" под тем же именем сохранил пустую программу.  Копии
большой программы не было, и по этому ее нужно было восстановить во что
бы то ни стало.
   При просмотре диска мы обнаружили некоторые интересные вещи:
   1) объем файла стал равным трем байтам (содежимое: FF,00,00);
   2) за этими тремя байтами следовали еще 253 неизвестных байта;
   3) остальная информация сохранилась полностью, восстановления требо﹣
вали только FAT и директории.
   Программу можно было попытаться спасти,но вызывал затруднения следу﹣
ющий нюанс: содержимое "испорченного" сектора будет "портить" всю прог﹣
рамму;  при использовании команды LIST  на экране  может появиться все,
что угодно, но только не Ваша программа!
   Как избежать этого? Логично было бы вручную исправить начальный сек﹣
тор файла таким образом, чтобы не потерять  ни одной ссылки,  ни одного
байта из оставшейся части программы.
   Восстановление началось  с того,  что мы определили цепочку ссылок в
FAT, вписали прежний размер файла в каталог и сохранили все это на дис﹣
ке. Затем необходимо было чем-то заполнить первые 256 байт, чтобы потом
эту программу можно было загрузить в BASIC-системе. Помня, что в строке
может быть  не более 255 символов,  мы сделали 2 строчки,  заполнили их
кодами &HF1 (внутренний код символа "+") и расставили ссылки  на следу﹣
ющие строки.  Весь сектор (256 байт)  был заполнен примерно таким обра﹣
зом:
\/T0/1
        ▁————————————▏————————————————————————————————————————▚
        ▕ Адрес байта▕         юСодержимое▁           ▕
        ⁃————————————————————————————————————————————————————
        ▕     000    ▕   FF    — первый стандартный для       ▕
        ▕            ▕           файлов на BASIC байт         ▕
        ⁃————————————————————————————————————————————————————
        ▕     001    ▕   05    ▚ 8105 — адрес след. строки    ▕
        ▕     002    ▕   81    ▔                              ▕
        ⁃————————————————————————————————————————————————————
        ▕     003    ▕   01    ▚ 0001 — номер строки          ▕
        ▕     004    ▕   00    ▔                              ▕
        ⁃————————————————————————————————————————————————————
        ▕     005    ▕   F1    ▚                              ▕
        ▕            ▕         ▕                              ▕
        ▕     ∙∙∙    ▕  ∙∙∙    ▕ строка из 255 символов "+"   ▕
        ▕            ▕         ▕                              ▕
        ▕     103    ▕   F1    ▔                              ▕
        ▕     104    ▕   00    — конец строки                 ▕
        ⁃————————————————————————————————————————————————————
        ▕     105    ▕   FC    ▚ 81FC — адрес след. строки    ▕
        ▕     106    ▕   81    ▔                              ▕
        ⁃————————————————————————————————————————————————————
        ▕     107    ▕   02    ▚ 0002 — номер строки          ▕
        ▕     108    ▕   00    ▔                              ▕
        ⁃————————————————————————————————————————————————————
        ▕     109    ▕   F1    ▚                              ▕
        ▕            ▕         ▕                              ▕
        ▕     ∙∙∙    ▕  ∙∙∙    ▕ строка из 242 символов "+"   ▕
        ▕            ▕         ▕                              ▕
        ▕     1FA    ▕   F1    ▔                              ▕
        ▕     1FB    ▕   00    — конец строки                 ▕
        ⁃————————————————————————————————————————————————————
        ▕     1FC    ▕   ??    ▚ 82?? — неизвестный адрес     ▕
        ▕     1FD    ▕   82    ▔ след. строки (его определяют ▕
        ▕            ▕           по содержимому 2-го сектора) ▕
        ⁃————————————————————————————————————————————————————
        ▕     1FE    ▕   03    ▚ 0003 — номер строки          ▕
        ▕     1FF    ▕   00    ▔                              ▕
        ▇————————————▞————————————————————————————————————————▔

\/T1/1-
   Обратите внимание на тот факт,  что адресу 1FC должна  лежать ссылка
на существующую строку программы, поэтому перед тем, как заполнить этот
байт,  Вы  должны  внимательно  просмотреть  начало  следующего сектора
(приблизительно 252 байта)  и найти адрес (в разделе ENTRY) байта, сто﹣
ящего перед байтом с содержимым 82h!
   Только после  этого можно  загружать программу  в BASIC и, уничтожив
две первые строки, вспоминать, каким было начало Вашей программы!

I.2.4. Область данных на дискете. Размещение файлов

                                Если Вы не тот, кто наверху, значит, Вы
                                тот, кто внизу.
                                                          Стивен Поттер

   Область данных (область для хранения содержимого файлов) расположена
сразу после Справочника:
   α) с сектора 0Eh, если диск ▇двухсторонний,
   β) с сектора 0Ch, если диск ▇односторонний.
\/T0/1
▁——————————————————————————————————————————————————————————————————————▚
▕ При форматировании в Область данных записываются символы с кодом E5h.▕
▇——————————————————————————————————————————————————————————————————————▔

\/T1/1-
   Следует отметить, что в этой области диска элементарной единицей ко﹣
личества информации является ▇кластер▁ (совокупность двух секторов). Опе﹣
рационная система работает с кластером как с неразрывным целым. Отсюда,
в частности, следует, что файл занимает на диске участок памяти, размер
которого ▇всегда▁ кратен 1024 байтам.
   Кластеры нумеруются следующим образом:
\/T0/1
 ▁—————————————————▏———————▏———————▏———————▏—————▏—————————▏—————————▚
 ▕ Номера секторов ▕0Ch÷0Dh▕0Eh÷0Fh▕10h÷11h▕ ... ▕59Bh÷59Ch▕59Dh÷59Eh▕
 ⁃—————————————————————————————————————————————————————————————
 ▕  Номер кластера ▕  02h  ▕  03h  ▕  04h  ▕ ... ▕   712h  ▕   713h  ▕
 ▇—————————————————▞———————▞———————▞———————▞—————▞—————————▞—————————▔

\/T1/1-
   Номер первого кластера  с содержимым  файла находится  в Справочнике
диска. Ссылки на остальные кластеры находятся в Таблице Размещения Фай﹣
лов.
   Работая  с Таблицей Размещения Файлов можно легко восстановить файл,
стертый командой DEL или любой аналогичной командой, т.к. при уничтоже﹣
нии файла происходит следующее: 
   1) код первого символа имени файла устанавливается равным E5h;
   2) стирается (обнуляется) вся информация  в FAT, относящаяся к этому
файлу, а место в ней освобождается для информации о новом файле;
   3) информация из "стертого" файла сохраняется на дискете до тех пор,
пока на дискету не будет записан новый файл. И до тех пор, пока на диск
не записан новый файл,  старый файл  ▇можно восстановить▁ (если, конечно,
Вы знаете, в каких кластерах он размещался до "стирания"!).
   Теперь мы можем рассмотреть метод выделения кластеров для файлов.
   При записи на дискету данных  из файла для них  по одному выделяются
кластеры дискеты.  Когда необходим очередной кластер для данных, то вы﹣
бирается  доступный кластер  с наименьшим номером.  Такая простая схема
используется как  при создании файла, так и при его  "удлинении" (путем
добавления данных в конец файла).
   Операционная система  MSX-DOS  выделяет место  на дискете  по одному
кластеру, когда в этом есть необходимость, не заботясь о том, чтобы все
данные файла хранились в одной непрерывной области диска. При разработ﹣
ке любой схемы распределения дискового пространства  в любой операцион﹣
ной системе приходится выбирать между свободным выделением пространства
по одному кластеру  (в результате файл может оказаться "размазанным" по
всей дискете), и выделением места большими непрерывными сегментами, что
усложняет задачу управления пространством на дискете. Операционная сис﹣
тема MSX-DOS использует более простой первый метод.
   Если дискета пуста, то все доступное на ней место представляет собой
одну большую "чистую" область. Когда файлы копируются на такую дискету,
они оформляются  в виде удобно размещенных ▇непрерывных▁ сегментов диско﹣
вого пространства.  Но впоследствии,  если файлы будут "удлиняться", то
дополнительное место будет выделяться в первых свободных кластерах, ко﹣
торые могут находиться в ▇любом месте дискеты.
   Когда файлы копируются на новую дискету  и не изменяются программис﹣
том, их размещение на диске остается экономичным. Но если создаются или
удаляются какие-либо данные,  то использование места  на дискете стано﹣
вится  весьма запутанным.  Это очень часто происходит,  когда программа
создает одновременно два файла.  Если файлы  увеличиваются параллельно,
то их расположение на дискете обязательно будет перемежающимся.
   Итак, при распределении пространства на дискете операционная система
MSX-DOS равномерно использует все пространство и не требует Вашего вме﹣
шательства.  Однако все эти преимущества достигаются  ценой "размазыва﹣
ния" файлов по дискете.  Из-за этого может увеличиться  время доступа к
файлу, поскольку магнитная головка чтения-записи должна перемещаться по
всей дискете  для поиска нужных треков.  Поскольку обращения  к дискете
являются наиболее медленными операциями  и основными факторами, ограни﹣
чивающими производительность компьютера,  такое размещение файлов может
породить проблемы, хотя обычно этого не случается.
   По этой причине необходимо  уделять внимание  потенциальной проблеме
фрагментации пространства, занимаемого файлами на дискете. В тех случа﹣
ях, когда фрагментация файлов покажется  Вам нежелательной,  скопируйте
файл на новую дискету.  Это же полезно делать,  если Вам покажется, что
дисковод слишком долго выполняет поиск треков при чтении файла.
   При копировании файлов  на новую дискету  можно  заодно  улучшить их
последовательность,  разместив  в начале часто использующиеся файлы или
переставив их в таком порядке, в каком Вам хотелось бы их видеть в рас﹣
печатке содержимого дискеты.
   Теперь мы расскажем Вам о структуре текстовых файлов.
   ▇Текстовый файл в коде ASCII▁ - это наиболее  часто  использующийся  и
один из самых важных форматов для файлов данных,  размещаемых на диске﹣
тах. Такие файлы содержат обычную алфавитную информацию, тексты или от﹣
четы, состоящие из алфавитных символов.
   ▇Большинство текстовых редакторов  используют текстовый  формат▁. Тек﹣
стовый формат используется  для хранения исходного текста программ (ис﹣
ходной, нетранслировавшейся версии). Практически все языковые процессо﹣
ры (такие, как интерпретатор языка BASIC,  компилятор языка  Pascal или
Макроассемблер) ожидают ввода файла в текстовом формате.
   ▇Вообще говоря, имеется три различных категории кодов ASCII  и две из
▇них будут нас интересовать▁.
   Одна▁ категория используется  для кодировки данных, таких  как буквы,
цифры и знаки пунктуации.
\/T0/1
▁———▏—————▚———▏—————▚———▏—————▚———▏—————▚———▏—————▚———▏—————▚———▏—————▚
▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕
⁃————————————————————————————————————————————————————————
▕ 32▕SPACE▕ 55▕  7  ▕ 78▕  N  ▕101▕  e  ▕124▕  |  ▕211▕  с  ▕234▕  Й  ▕
▕ 33▕  !  ▕ 56▕  8  ▕ 79▕  O  ▕102▕  f  ▕125▕  }  ▕212▕  т  ▕235▕  К  ▕
▕ 34▕  "  ▕ 57▕  9  ▕ 80▕  P  ▕103▕  g  ▕126▕  ~  ▕213▕  у  ▕236▕  Л  ▕
▕ 35▕  #  ▕ 58▕  :  ▕ 81▕  Q  ▕104▕  h  ▕191▕  ¤  ▕214▕  ж  ▕237▕  М  ▕
▕ 36▕  $  ▕ 59▕  ;  ▕ 82▕  R  ▕105▕  i  ▕192▕  ю  ▕215▕  в  ▕238▕  Н  ▕
▕ 37▕  %  ▕ 60▕  <  ▕ 83▕  S  ▕106▕  j  ▕193▕  а  ▕216▕  ь  ▕239▕  О  ▕
▕ 38▕  &  ▕ 61▕  =  ▕ 84▕  T  ▕107▕  k  ▕194▕  б  ▕217▕  ы  ▕240▕  П  ▕
▕ 39▕  '  ▕ 62▕  >  ▕ 85▕  U  ▕108▕  l  ▕195▕  ц  ▕218▕  з  ▕241▕  Я  ▕
▕ 40▕  (  ▕ 63▕  ?  ▕ 86▕  V  ▕109▕  m  ▕196▕  д  ▕219▕  ш  ▕242▕  Р  ▕
▕ 41▕  )  ▕ 64▕  @  ▕ 87▕  W  ▕110▕  n  ▕197▕  е  ▕220▕  э  ▕243▕  С  ▕
▕ 42▕  *  ▕ 65▕  A  ▕ 88▕  X  ▕111▕  o  ▕198▕  ф  ▕221▕  щ  ▕244▕  Т  ▕
▕ 43▕  +  ▕ 66▕  B  ▕ 89▕  Y  ▕112▕  p  ▕199▕  г  ▕222▕  ч  ▕245▕  У  ▕
▕ 44▕  ,  ▕ 67▕  C  ▕ 90▕  Z  ▕113▕  q  ▕200▕  х  ▕223▕  ъ  ▕246▕  Ж  ▕
▕ 45▕  -  ▕ 68▕  D  ▕ 91▕  [  ▕114▕  r  ▕201▕  и  ▕224▕  Ю  ▕247▕  В  ▕
▕ 46▕  .  ▕ 69▕  E  ▕ 92▕  \  ▕115▕  s  ▕202▕  й  ▕225▕  А  ▕248▕  Ь  ▕
▕ 47▕  /  ▕ 70▕  F  ▕ 93▕  ]  ▕116▕  t  ▕203▕  к  ▕226▕  Б  ▕249▕  Ы  ▕
▕ 48▕  O  ▕ 71▕  G  ▕ 94▕  ^  ▕117▕  u  ▕204▕  л  ▕227▕  Ц  ▕250▕  З  ▕
▕ 49▕  1  ▕ 72▕  H  ▕ 95▕  _  ▕118▕  v  ▕205▕  м  ▕228▕  Д  ▕251▕  Ш  ▕
▕ 50▕  2  ▕ 73▕  I  ▕ 96▕  `  ▕119▕  w  ▕206▕  н  ▕229▕  Е  ▕252▕  Э  ▕
▕ 51▕  3  ▕ 74▕  J  ▕ 97▕  a  ▕120▕  x  ▕207▕  о  ▕230▕  Ф  ▕253▕  Щ  ▕
▕ 52▕  4  ▕ 75▕  K  ▕ 98▕  b  ▕121▕  y  ▕208▕  п  ▕231▕  Г  ▕254▕  Ч  ▕
▕ 53▕  5  ▕ 76▕  L  ▕ 99▕  c  ▕122▕  z  ▕209▕  я  ▕232▕  Х  ▕———▞—————▔
▕ 54▕  6  ▕ 77▕  M  ▕100▕  d  ▕123▕  {  ▕210▕  р  ▕233▕  И  ▕
▇———▞—————▔———▞—————▔———▞—————▔———▞—————▔———▞—————▔———▞—————▔
\/T1/1-

   Вторая▁ категория используется для форматирования,  т.е. для указания
места, где заканчивается одна строка  и начинается другая; эти коды ис﹣
пользуются не только для управления форматом печати,  но и для структу﹣
рирования файлов.
   И, наконец, третья▁ категория служит  для управления передачей данных
и никак не связана с форматом текстовых файлов.
   Символы ASCII  двух специальных категорий — форматирующие  и символы
связи, — имеют коды от 0 до 31 и 127.
\/T0/1
  ▁—————▏———————————————▏—————▏———————————————▏—————▏———————————————▚
  ▕ Код ▕  Клавиша (и)  ▕ Код ▕  Клавиша (и)  ▕ Код ▕  Клавиша (и)  ▕
  ⁃————————————————————————————————————————————————————————————
  ▕   0 ▕    CTRL+@     ▕  11 ▕   CLS/HOME    ▕  22 ▕    CTRL+V     ▕
  ▕   1 ▕    CTRL+A     ▕  12 ▕    CTRL+L     ▕  23 ▕    CTRL+W     ▕
  ▕   2 ▕    CTRL+B     ▕  13 ▕    RETURN     ▕  24 ▕    SELECT     ▕
  ▕   3 ▕    CTRL+C     ▕  14 ▕    CTRL+N     ▕  25 ▕    CTRL+Y     ▕
  ▕   4 ▕    CTRL+D     ▕  15 ▕    CTRL+O     ▕  26 ▕    CTRL+Z     ▕
  ▕   5 ▕    CTRL+E     ▕  16 ▕    CTRL+P     ▕  27 ▕     ESC       ▕
  ▕   6 ▕    CTRL+F     ▕  17 ▕    CTRL+Q     ▕  28 ▕     ———▶      ▕
  ▕   7 ▕ CTRL+G (BEEP) ▕  18 ▕     INS       ▕  29 ▕    ◀———       ▕
  ▕   8 ▕      BS       ▕  19 ▕    CTRL+S     ▕  30 ▕"стрелка ВВЕРХ"▕
  ▕   9 ▕     TAB       ▕  20 ▕    CTRL+T     ▕  31 ▕"стрелка ВНИЗ" ▕
  ▕  10 ▕  CTRL+J (LF)  ▕  21 ▕    CTRL+U     ▕ 127 ▕     DEL       ▕
  ▇—————▞———————————————▞—————▞———————————————▞—————▞———————————————▔

\/T1/1-
   Теперь рассмотрим структуру ▇текстового▁ файла  в коде  ASCII. Символы
текстового файла организуются в ▇строки▁, подобно строкам на бумаге. Гра﹣
ницы строк отмечаются форматирующими символами кода ASCII:
              возврат каретки▁ — символ с кодом 13 (0Dh) и
              перевод строки▁  — символ с кодом 10 (0Ah).
   Можно было бы использовать любой символ  для обозначения конца стро﹣
ки,  но используются  именно эти два символа,  поскольку  они управляют
процессом перехода к новой строке на печатающем устройстве.
   Одной  из причин  использования  двух  символов,  обозначающих конец
строки,  состоит  в обеспечении возможности  наложения строк.  Наиболее
часто такая возможность используется для выполнения подчеркивания.  При
этом на печать в конце строки выдается только символ "возврат каретки",
а затем накладывающиеся символы.  Поскольку перевод строки не выполнял﹣
ся,  новые символы  печатаются  поверх  уже  напечатанных. Однако заме﹣
тим, что такую операцию можно произвести  с печатающим устройством,  но
нельзя с дисплеем.
   Формат текстового файла определяется  не только разделением на стро﹣
ки. Все файлы в коде ASCII имеют один общий символ
                          маркер конца файла,
код ASCII которого равен 26 (1Ah). Этот маркер однозначно указывает ко﹣
нец файла.  Обнаружение  положения кода  26 позволяет  точно установить
размер файла, отличающийся от размера, указанного в Справочнике.

Назад к обзоруСледующая страницаПоследняя страница

msx/floppy_disk_filesystem_structure/010.txt · Последние изменения: 2022-09-15 19:53 — GreyWolf