📂 Документ: orion128-mod-02_clean.html


 

Загрузчики периферии на Орион, рекомендации

Орион-128 примеры модификации и замены микросхем

1. Чтобы продолжить: Рекомендации В. Чистякова (Многие про них не читали)

2. Контроллер НГМД - Авторская схема Орион СОФТ

3. Схема НГМД Орион- Сервис

4. Контроллер  НГМД SP-DOS

5. Контроллер НГМД Чистякова, и описание ACPM

Статья с https://ruecm.forum2x2.ru/

Если имеется ввиду загрузчик с дисковода, то название темы лучше уточнить. Т.к есть загрузчики из ROM-диска, загрузчики из проводной линии, загрузчики с магнитофона, загрузчики из флэш-карты и даже гипотетически - загрузчики по BlueTooth.

У ОРИОНА в основном применялось два формата загрузочных DD-дискет, отличающихся только BOOT-сектором. BOOT-сектор содержит блок параметров диска (это ~30 байтов с оффсетом 3 в BOOT-секторе со своей КС) и маленькая программка вторичного загрузчика (227 байтов). Так же у других компьютеров, например у IBM PC. Вторичный загрузчик нужен потому что DOS (или версий одной DOS) может быть много, которые грузятся в разное ОЗУ и разным способом. Задача холодного загрузчика лишь загрузить вторичный загрузчик и запустить его.

Холодный загрузчик с НГМД в IBM PC прошит в ROM-BIOS-е и стартует автоматически, а в ОРИОНЕ он обычно выполнен в виде отдельной программки в ROM-диске (хотя было одно ПЗУ М3 для Z80, где холодный загрузчик НГМД умещён в ROM-BIOS).

Холодный загрузчик не знает куда и как грузить конкретную DOS. Потому он загружает на фиксированный адрес и стартует вторичный загрузчик (который на ОРИОНЕ обычно занимает 256 байт первого сектора). И этот вторичный загрузчик (он для каждой DOS свой) уже знает куда (по каким адресам, в какие банки) и как грузить DOS.

Например, стандартная CP/M-80 обычно грузится так, - сначала грузится CP/M-BIOS, после чего делается JMP на Warm Boot (адрес BIOS+3), а BIOS сначала грузит блок BDOS, затем блок CCP и стартует CCP. Хотя это вдвое дольше. Потому мои версии CP/M грузились иначе - они заливались в ОЗУ одним сплошным блоком.

Для DD-формата коды вторичных загрузчиков чуть отличаются. Исторически первым в 1990 году появился загрузчик в котором байт задающий в BOOT-секторе номер банки был с оффсетом 9F. Холодный загрузчик считывал первый однокилобайтовый физический сектор (в банку 0 на B800 или B000 - неважно, лишь бы не ниже CCP) и считав байт с оффсетом 9F, перекидывал 256 байтов из начала этого физ.сектора на адрес 0 в банку, номер которой задавался байтом с оффсетом 9F.

Но в 1993 авторы ОРИОНА сдуру (а точнее, чтобы показать пользователям, что стандарты задают именно они) выпустили CP/M, которая грузилась вторичным BOOT-сектором в котором оффсет байта задающего номер банки был другой, не 9F (а на десяток байтов дальше от начала сектора). Соответственно и холодный загрузчик был иной, отличающийся по сути лишь адресом куда первый физ.сектор грузится и адресом байта хранящего номер банки (задаваемый оффсетом от начала сектора, что определяет смещение от начала буфера загрузки сектора). Потому загрузчик ОРИОНСОФТ не мог грузить загрузочные дискеты других систем (их вторичный загрузчик попадал не в ту банку и не в тот адрес и при получении управления, естественно, "улетал"). И соответственно, загрузочные дискеты от ОРИОНСОФТ не могли быть загружены старым загрузчиком.

Кстати, и адреса ВГ93 в КНГМД ОРИОНСОФТ были изменены. Это глупо, но не очень фатально, т.к аппаратная несовместимость по адресам ВГ93 легко устранялась с помощью двух диодов и резистора. А вот загрузчик не исправить. Потому возникло два стандарта адресации КНГМД и два типа загрузчиков (отличие между которыми в основном в смещении от начала сектора байта, который задаёт номер банки в которую грузится DOS, ну и также в том, что загрузчик ОРИОНСОФТ выводит ненужное сообщение о загрузке в банку 1).

Кроме того загрузчик ОРИОНСОФТ упрощённый, относительно корветовского. Который, если загрузка в MFM-формате (DD- Double Density) не проходит, т.е если BOOT-сектор не читается, то загрузчик включает ВГ93 в формат FM (SD- Single Density) и снова пытается загрузить BOOT-сектор. Т.е загрузчик универсальный для двух форматов. А в загрузчике ОРИОНСОФТ это свойство забито, грузится только формат MFM.

Это ещё одна глупая ошибка ОРИОНСОФТ, потому что хотя формат SD (на 400К) и не имел особого смысла, но такой загрузчик позволяет им же грузить и HD- и DD-дискеты (т.е сначала загрузчик пытается считать сектор как DD, если не получается, то читает его как HD) или, если бит DD/SD использовать для выбора флопа, то позволяет грузить DOS как с одного дисковода, так и с другого (что очень важно, если один 5.25", а другой 3.5"). Потому при введении HD и дисководов 3.5" не пришлось менять загрузчик. Загрузчик ОРИОНСОФТ также сдуру портит TPA в банке CP/M. Потому, если произошёл улёт в текстовом редакторе, то текст исходника в ОЗУ погиб (нельзя перезагрузившись командой SAVE спасти текст).

Т.о универсальный загрузчик с НГМД по сути невозможен. Можно лишь сделать программу в которой присутствуют оба загрузчика и пользователю предлагается выбор. Такой сводный загрузчик сделал error404. Смысл такой загрузчик имеет лишь, если его сделать автостартовым (в виде EXT$). Если нет, то это хорошо лишь тем, что сокращает на единицу общее число файлов прошиваемых в ROM-диск.

Но с середины 90-тых я не использовал CP/M с подкачкой кода DOS с дискеты (по ^C), т.к это долго. У меня код DOS по ^C подкачивается из ПЗУ или ОЗУ, благо в ОРИОНЕ много излишнего ОЗУ. И DOS не грузится с дискеты, а стартует из ROM-диска одним файлом. Это делает все дискеты совместимыми (что не так в системах с подкачкой с диска), а главное, - это позволяет иметь и использовать столько версий DOS, сколько хочется, а не лишь одну, что занесена на системные треки всех дискет. Потому никакой загрузчик вообще не нужен. Также делалось и в некоторых немецких бытовых компьютерах (раз уж всё-равно нужно доп.ПЗУ для загрузчика, удобнее в ПЗУ хранить целиком DOS).

Автор под псевдонимом, источник  https://ruecm.forum2x2.ru/

Доработки и схемы прочие... непроверенные

 

 

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу