Формат дисков CP/M 2.2: различия между версиями
Panther (обсуждение | вклад) (Размещено по просьбе автора перевода) |
Panther (обсуждение | вклад) м (Panther переименовал страницу Форматы файлов CP/M в Формат дисков CP/M 2.2 без оставления перенаправления) |
(нет различий)
|
Текущая версия от 09:49, 29 сентября 2015
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Источник: http://www.seasip.info/Cpm/format22.html Перевод: Black Cat / Era CG (era_cg@speccy.su) |
Формат дисков CP/M 2.2
CP/M 2.2 поддерживает работу с гораздо большим числом дисковых форматов, чем CP/M 1.4. Параметры дисков хранятся в специальном блоке - DPB (Disk Parameter Block), который содержит следующую информацию:
DEFW spt ;Sector Per Track - число 128-байтных записей на одной дорожке DEFB bsh ;Block shift - блоковое смещение. 3 => 1k, 4 => 2k, 5 => 4k.... DEFB blm ;Block mask - маска блока. 7 => 1k, 0Fh => 2k, 1Fh => 4k... DEFB exm ;Extent mask - маска экстента, см. далее DEFW dsm ;(число блоков на диске)-1 DEFW drm ;(число элементов в директории)-1 DEFB al0 ;Карта расположения директории, первый байт DEFB al1 ;Карта расположения директории, второй байт DEFW cks ;Checksum vector size - размер вектора контрольной суммы (?), 0 - для фиксированного диска ;число элементов в директории/4, округленно. DEFW off ;Offset - смещение, число зарезервированных (под систему - прим. переводчика) дорожек
Карта расположения директории интерпретируется следующим образом:
al0 al1 b7b6b5b4b3b2b1b0 b7b6b5b4b3b2b1b0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 - таким образом, в этом примере директория занимает первые четыре блока.
DPB не хранится на диске. Параметры диска либо жестко прописаны в BIOS, либо определяются на лету при чтении диска. Примечание переводчика. Это не совсем так. В некоторых вариантах реализации CP/M DPB все же может хранится на диске (Возможно это справедливо только для советских реализаций системы). Например, в CP/M для компьютера Корвет (а также в системах заимствовавших этот принцип - Орион, Вектор-06Ц), DPB хранится в байтах 10h-1Eh первого сектора первой дорожке диска. Также в этом секторе в этих системах в байтах 0Ah-0Fh хранится так называемый Disk Parameter Header (DPH), описывающий физический формат диска и имеющий следующую структуру:
DEFB len ;Размер физического сектора. 0 => 128, 1 => 256, 2 => 512, 3 => 1024 DEFB den ;(число сторон диска)-1 DEFW sec ;Число секторов на дорожке DEFW trk ;Число дорожек на одной стороне диска
Также в байте 1Fh хранится контрольная сумма всех предыдущих 15 байт (00h-1Eh), вычисляемая простой арифметической суммой значений всех байт +66h (CheckSum = [00h]+[01h]+...+[1Dh]+[1Eh]+66h). Учитывается только младший байт результата.
Зарезервированные дорожки содержат образ CP/M 2.2, используемый при перезапуске системы с диска. Диски могут быть отформатированы, как диски только для данных, в этом случае они не будут иметь системных дорожек и не смогут быть использованы для перезапуска системы.
Директория CP/M 2.2
Директория CP/M 2.2 имеет только один тип записи:
UU F1 F2 F3 F4 F5 F6 F7 F8 T1 T2 T3 EX S1 S2 RC .FILENAMETYP.... AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL ................ UU = User number - Номер области пользователя. 0-15 (в некоторых реализациях системы, 0-31). Номер области позволяет существование нескольких файлов с одинаковыми именами на диске. User number = 0E5h => Файл удален Fn - Filename - имя файла Tn - FyleType - тип файла. Используется 7-бит ASCII. Старший бит T1 (часто упоминается как T1') установлен для файлов "только для чтения". T2' установлен для системных файлов (соответствует атрибуту "скрытого" файла в других системах). EX = Extent counter - номер экстента, младший байт - принимает значения 0-31 S2 = Номер экстента, старший байт. Экстент - это часть файла, контролируемая одной записью директории. Если файл состоит из большего числа блоков, чем может быть описано в одной записи в директории, он получает несколько записей, отличающихся байтами EX и S2. Формула: Номер записи = ((32*S2)+EX) / (exm+1), где exm - значение маски экстента из DPB. S1 - зарезервировано, устанавливается в 0. RC - Число записей (1 запись=128 байт) занятых этим экстентом, младший байт. Полное число записей занятых экстентом равно: (EX & exm) * 128 + RC Если RC равно 80h, этот экстент полный и может существовать еще один на этом диске. Размеры файлов округляются в сторону ближайших 128 байт. AL - Allocation - расположение (карта расположения блоков файла). Каждый байт AL - это номер блока на диске. Если AL содержит ноль, то он не указывает на какой-либо блок (то есть соответствующий блок не существует). Например 3k файл может иметь следующее расположение: 5,6,8,0,0.... - первые 1k - в блоке 5, вторые - в блоке 6, третьи - в блоке 8. AL-номера могут быть либо 8-битными (если диск содержит менее 256 блоков), либо 16- битными (первым хранится младший байт).
Даты файлов
Некоторые DDOS совместимые c 3 версией (такие как Z80DOS и DOS+) сохраняют даты файлов. К сожалению формат хранения дат, который они используют, отличается от формата, используемого в CP/M 3.
Каждая четвертая запись директории, поддерживающей хранение дат, содержит даты для предыдущих трех записей:
21 00 C1 C1 M1 M1 M1 M1 A1 A1 A1 A1 C2 C2 M2 M2 !............... M2 M2 A2 A2 A2 A2 C3 C3 M3 M3 M3 M3 A3 A3 A3 A3 ................ C1 = Дата создания первого файла M1 = Дата/время изменения первого файла A1 = Дата/время доступа для первого файла C2 = Дата создания второго файла M2 = Дата/время изменения второго файла A2 = Дата/время доступа для второго файла C3 = Дата создания третьего файла M3 = Дата/время изменения третьего файла A3 = Дата/время доступа для третьего файла
Формат хранения Даты/времени:
DW день ;Юлианская дата, младший байт хранится первым. ;1 день = 1 января 1978. DB hour ;Часы в BCD формате (двоично-десятичный код), т.о. 13h => 13:xx DB min ;Минуты в BCD формате
От переводчика
Данный перевод ни в коем случае не претендует на то, чтобы считаться абсолютно точным и безошибочным. В случае, если Вами будут найдены какие-то ошибки или неточности, просьба написать мне: era_cg@speccy.su
Black Cat / Era CG
29.o9.2o15