Формат дисков CP/M 2.2

Материал из Emuverse
Данный материал защищён авторскими правами!

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

Источник: 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