
Сообщение от
Black Cat/Era CG
Не знаю, что сохранять в BOOT-секторе кроме DPB
Привожу все необходимые сведения, чтобы сформировать ODI-образ любого формата. Ниже содержимое ИНФО-блока (первых 32 байтов BOOT-сектора).
Следующие за ИНФО-блоком 15 байтов с офсетом 20...2E содержат имя диска, а байт 2F это стоп байт =0.
Код:
SPT EQU 5 ; sectors pro track
SIDES EQU 2 ; число плоскостей (только 1 или 2)
SSIZE EQU 1024 ; размер сектора (только 1024 или 512)
TRKS EQU 80 ; число треков формата (35,40,42,80,82,83)
if SSIZE eq 1024
SPARM EQU 3 ; параметр размера. При MFM: 3 (1024)
else
SPARM EQU 2 ; параметр размера. При FM: 2 (512)
endif
; Далее собственно все 32 байта ИНФО-блока дискеты
A_0000: rept 8
defb 0 ; не используется 8 байтов (здесь код загрузчика)
endm
A_0008: defb 1 ; не используется (лучше не трогать)
A_0009: defb 1 ; не используется (лучше не трогать)
A_000A: defb SPARM ; при SD =2 (512), при DD =3 (1024)
A_000B: defb SIDES-1 ; при SS =0, при DS =1
A_000C: defb SPT ; sectors pro track (1...11)
A_000D: defb 0 ; не используется (лучше не трогать)
A_000E: defb TRKS ; число треков формата (35,40,42,80,82,83)
A_000F: defb 0 ; не используется (лучше не трогать)
DPB: DW SPT*SSIZE/128 ; кол-во лог.секторов по 128 байт на треке
defb 4 ; размер блока (3-1K, 4-2K, 5-4K, 6-8K)
defb 15 ; размер блока (7-1К, 15-2K, 31-4K, 63-8K)
defb 1 ; параметр экстента (0-1K, 0-2K, 1-4K, 3-8K)
DW SPT*TRKS*SIDES/2-1 ; размер дискового пространства в блоках минус 1
DW 128-1 ; количество записей в каталоге минус 1
defb 11000000B,0 ; маска занятых каталогом блоков
DW 128/4 ; количество контр-мых лог.секторов каталога
DW 4 ; количество резервных дорожек
A_001F: DS KS ; здесь контр.сумма ИНФО-блока 0...1E
A_0020: rept 15 ; 15 байтов имени диска
defb 20H
endm
A_002F: defb 0 ; стоп-байт для вывода имени п/п-мой MSSG
Число треков в большинстве реализаций не используется (развитые реализации CP/M, зная, что дисковод на 80 треков, а дискета на 40, начинают читать 40-ка дорожечные дискеты на 80-ти дорожечном флопе, делая 2 шага на дорожку). КС блока параметров в КОРВЕТЕ и ОРИОНЕ считаются по разному (байт 66H добавлялся чтобы КС в байте 1F была такой-же как в КОРВЕТЕ при DD/DS)
Чтобы избежать зависа при установке чужой дискеты и на случай дохлоты, целостность ИНФО-блока контроллируется подсчётом КС первых 31-го байта BOOT-сектора (эта КС читается из байта с офсетом 1F - т.е из 32-го байта). Вот как проверяется эта КС во всех CP/M ОРИОНА (в ОС не CP/M ИНФО-блок другой).
Код:
LD HL,BUFFER ; в буфере загружен BOOT-сектор
LD A,66H ; было надо для совместимости с КОРВЕТОМ
LD B,31 ; считаем арифм.сумму 31 байта ИНФО-блока
LOOP: ADD A,(HL)
INC HL
DJNZ LOOP
CP (HL)
JR Z,NODISK
Таким образом, байт с оффсетом в 1F содержит КС - арифметическую сумму (плюс 66H) первых 31 байта дискеты. Если КС не совпала, значит чужой или дохлый диск. Если первый байт BOOT-сектора =C3, то загрузчик считает дискету системной. КС контроллируется загрузчиком с дискеты и п/п-ммой SELDSK в CP/M-BIOS.
Загрузчик с дискеты работает так. Он грузит BOOT-сектор в свой буфер и первым делом контроллирует КС ИНФО-блока. Если первый байт C3, то из BOOT-сектора кидает первые 256 байт на адрес 0 в банку ОЗУ, номер которой берётся из BOOT-сектора из байта с офсетом 9FH (так в моём загрузчике 1990 года и загрузчике МП ОРИОН-СЕРВИС, но в загрузчике ОРИОНСОФТ адрес банки не 9F, а другой, причём и номер банки только 0 или 1, в банку 2 нельзя).
Информация приведена, чтобы было ясно как создать диск любого формата, чтобы он читался из CP/M ОРИОНА. Например, чтобы создать диск на 10 секторов с 82 треками достаточно подставить SPT=10, SIDES=2 и TRKS=82. Затем выше приведённой программкой считаем КС и подставляем его байтом со смещением 1FH. Размер созданного файла надо сделать точно равным физическому размеру диска - 1640 кб.
Но в основном использовался формат 1300 кб и именно на такой максимальный размер рассчитаны версии CP/M для HD-дисковода. Это ограничение из-за объёма Alloc Table, т.е её размер допускает диск максимум размером в 1300 кб. Поясню почему 1300, а не 1600.
На IBM в контроллере дисковода нельзя изменить кварц. А на ОРИОНЕ это делалось постоянно. По причине того, что для HD формата 1600К надо иметь скорость ОРИОНА, минимум, 5 МГЦ. Но из-за того, что при ТУРБО-200% РУ5-е работают на 5 МГЦ, они перегреваются и надёжность низка. Потому в основном использовалась схема ТУРБО, где ОЗУ остаётся на 2.5 МГЦ, дающая лишь 3.5 или 3.9 МГЦ реального такта. Такой скорости хватало только на чтение формата 7 или 8 секторов на трек на HD-дискете (с соответствующей заменой кварца в КНГМД). Дискеты HD-5.25 из-за большей скорости колеса использовались в формате 6 секторов (960К). Т.е из-за скоростных ограничений использовались полу-торные форматы. На PC было только 3 формата 720, 1440 и 1.20 мб, а на ОРИОНЕ - куча форматов.

Сообщение от
Black Cat/Era CG
Создание диска делается при создании нового образа... Создать образ с произвольной геометрией можно, выбрав при создании xdi
Насчёт xdi не понял, а в меню 'СОЗДАТЬ ОБРАЗ' есть только один формат 800К (лучше создавать чистый диск, а не с системой, тем более древней).
Удобно в меню 'СОЗДАТЬ ОБРАЗ' иметь форматы:
800К - DD/DS, 80 треков, 5 секторов по 1024
410К - SD/DS, 82 трека, 5 секторов по 512
820К - DD/DS, 82 трека, 5 секторов по 1024
1640К - DD/DS, 82 трека, 10 секторов по 1024