2

Я получил образы дискет (оригинальные загрузочные диски DOS 6.22 и FreeDOS 1.44 МБ), созданные с помощью команды * nix dd которые отлично работают при использовании в виртуальной среде.

Теперь я хочу понять структуру этих файлов.

Насколько я знаю, дискета объемом 1,44 МБ имеет 80 дорожек, каждая дорожка имеет 18 секторов, а каждый сектор состоит из 512 байтов. Умножая это, я получаю около 0,7 МБ, что точно соответствует размеру одной из двух сторон.

Положение дорожки 0 сектора 2, головки 2, равно 9728 (или 0x2600) - это первый сектор, который загрузчик DOS 6.22 извлекает с диска. Но как это рассчитывается?

Как мне добраться до этих значений? Я использовал эмулятор, чтобы пройти через загрузчик. Первый доступ к дискете осуществляется путем вызова прерывания 013h с AH = 2 (чтение с дискеты), AL = 1 (чтение одного сектора), CH = 0 (чтение с дорожки 0), CL = 2 (чтение из сектора 2) и DH = 1 (используйте головку 1 = используйте вторую сторону). Этот вызов заставляет эмулятор загружать байты, начиная с позиции 9728.

Каждое значение регистра, кроме номера сектора (которое основано на 1), основано на 0.

Заранее спасибо!

1 ответ1

3

Я нашел ответ сам. Файл структурирован в формате LBA , который может быть легко вычислен из значений CHS, которые я получил:

LBA = (цилиндр * число_головок + головка) * sector_per_track + сектор - 1

= (0 * 2 + 1) * 18 + 2 - 1 = 19

19 * bytes_per_sector = 19 * 512 = 9728

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .