.mdr

Материал из Emuverse
Версия от 18:21, 19 декабря 2007; Panther (обсуждение | вклад) (Новая: {{ДИ|Автор=(с) Г. А. Лунтер (G.A.Lunter), Нидерланды, 1994; (с) Перевод с английского и техническое редактирование...)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Данный материал защищён авторскими правами!

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

Автор: (с) Г. А. Лунтер (G.A.Lunter), Нидерланды, 1994; (с) Перевод с английского и техническое редактирование «Инфорком-Пресс», Москва, 1995.

Эмулятор использует формат файлов картриджа микродрайва, идентичный тому, который ввел в использование Карлос Дельгез в своем эмуляторе Спектрума, написанном для компьютера Sinclair QL. Этот же формат поддерживается эмулятором «XZX» Дез Хэрриота.

Файл, эмулирующий картридж, состоит из 254-х секторов, по 543 байта в каждом. В конце картриджа есть еще один финальный байт, который не равен нулю, если картридж защищен от записи. Итого, полная длина файла составляет 137923 байта. На ленте картриджа, после GAP-зазора некоторой длины Интерфейс-1 прописывает 10 нулевых байтов и 2 байта по FF (так называемая «преамбула»). После нее идет 15-байтный блок хэдера с контрольной суммой. После еще одного GAP-зазора он пишет преамбулу еще раз, а за ней 15-байтный блок-описатель с контрольной суммой (его структура очень похожа на хэдер-блок). Сразу следом идет блок данных длиной 512 байтов и, наконец, контрольная сумма этих 512-ти байтов. Преамбулы используются Интерфейсом-1 для синхронизации и не используются программами, поэтому преамбулы не сохраняются в файл, эмулирующий микродрайв.

Смещение Длина Имя Содержание
0	1 HDFLAG Единица указывает на то, что это хэдер
1	1 HDNUMB номер сектора (значения от 254 до 1)
2	2	не используются
4	10 HDNAME имя картриджа (дополненное пробелами)
14	1 HDCHK контрольная сумма хэдера (первых 14 байтов)
15	1 RECFLG 
                  — bit 0: всегда 0, что указывает на то, что блок служит для записи
                  — bit 1: включен для блока EOF
                  — bit 2: выключен для PRINT-файла
                  — bits 3-7: не используются (нули) 16 1 RECNUM номер записи (от 0 и выше)
17	2 RECLEN длина блока (<=512, младший байт впереди)
19	10 RECNAM имя файла (дополненное пробелами)
29	1 DESCHK контрольная сумма описателя записи (предыдущих 14 байтов) 30 512 блок данных
542	1 DCHK	контрольная сумма блока (всех 512 байтов, даже если не все байты использованы)
254 раза

На самом деле вся эта информация «прозрачна» для эмулятора. Все, что он делает, так только сохраняет 2 раза по 254 блока в файле .MDR по мере того, как они поступают на порт вывода. Длины этих блоков поочередно составляют 15 байтов и 528 байтов и т. д. Эмулятор проверяет контрольные суммы. С прочими данными разбирается эмулируемое программное обеспечение Интерфейса-1.

Использованный блок либо является конечным блоком (EOF-блок, у которого бит-1 RECFLG равен 1) либо является блоком данных и содержит 512 байтов данных (RECLEN = 512, то есть бит 1 старшего байта RECLEN равен 1). Пустой блок содержит 0 в первом бите RECFLG и RECLEN=0. Блок, не подлежащий использованию — это EOF-блок, у которого RECLEN=0.

Три контрольных суммы рассчитываются путем сложения всех байтов вместе по модулю 255. В итоге контрольная сумма никогда не может быть равна 255. Возможно, именно по такому числу Интерфейс-1 определяет, что на ленте нет данных или что данные испорчены.

В нормальных условиях все первые пятнадцатибайтные блоки каждого хэдера и каждого блока должны иметь правильную контрольную сумму. Если контрольная сумма неправильна, блок воспринимается как зазор GAP. например, если вы дадите команду OUT 239,0 на нормальном Спектруме с Интерфейсом-1, начнет работать двигатель микродрайва и весь картридж будет полностью стерт за 7 секунд. Команда CAT 1 даст резолюцию 'microdrive not ready'. Проверьте это на эмуляторе.