> велосипедисты - беда того времени.
"Велосипед" - это, обычно, написание своего кода, вместо уже существующего, причем свой не сильно лучше существующего. Но с агатом ситуация немного другая: на него было очень мало софта.
Я, например, когда начинал работать с агатом, нуждался даже просто в хорошем копировщике файлов.
Был FID, но он требовал указать номер слота контроллера-источника, привод на контроллере, контроллер-приёмник, привод на контроллере и имя файла ввести вручную (там была возможность указать что-то типа "маски", но об этом нигде в интерфейсе не было сказано, я это нашел почти случайно).
Поэтому я на агате очень много времени проводил в разработке системного ПО. Прикладное тоже писал, но заметно меньше.
И поскольку агаты ставились в школы, очень многие будущие агат-программисты начинали своё творчество ещё будучи школьниками. И мы агат видели как единственно возможную систему. Это же был СССР, времена дефицита, в том числе ВТ ... Есть агат и не было даже мыслей о том, что его оборудование кто-то будет как-то развивать, что надо будет думать о совместимости. Что сам написал или спаял - то и будет у тебя.
> А как в окне $F000..$F7FF вектора обрабатываются, там же BRK, старт?
А как оно может обрабатываться ? Проц вектора запрашивает в адресах FFFA..FFFF.
Так что это окно не имеет к ним отношения.
> Я стараюсь хитрые вещи обходить...
Избегать хитростей самому, особенно в коде проги (если только ты не добиваешся какой-то эффективности) - это хорошо. Но речь идёт об эмуляции уже существующего железа и исполнения уже существующих прог.
Так что никуда не денешся.
С этим контроллером всё выглядит так:
например, в инструкции пишут (не цитата, я примерно вспоминаю): читаем регистр чтения по такому-то адресу, записываем в регистр записи по такому-то адресу. Чтобы включить запись щёлкаем такой-то регистр, чтобы прочитать состояние датчика защиты записи читаем такой-то регистр. После того, как ЦП читает слово из регистра чтения, контроллер начинает считывать следующее слово с диска.
Это всё будет работать, да.
Но если вам встретится странный драйвер, который действует совсем не так (но тоже работает нормально), то знайте:
регистр в этом контроллере всего один. Он читается по любому из 16 адресов.
Но обращение на любой из 16 адресов переключает один из 8 бит управления (чётный адрес выключает, нечётный - включает бит, номер которого указывают линии A3..A1 шины адреса).
Поскольку автомат управления контроллером как раз и управляется 3 из 8 бит управления (ещё 4 идут на управление двигателем головки и ещё 1 выбирает один из двух приводов), то любое чтение или запись могут менять режим работы контроллера.
И, например, чтение датчика защиты записи обязательно, так как это тоже переключение автомата для правильного вход в режим записи.
Контроллер вообще не интересуется - успевает ЦП читать что-то там или нет: набрался байт с дискеты в регистр - ок, начался следующий байт - старый сбрасывается, набирается следующий. Кто не успел - тот опоздал.
А запись в регистр, в режиме записи на диск - это вообще легендарная баллада: контроллер захватывает байт на определённый такт системой шины, и ему не важно что там будет, какую команду ЦП будет выполнять (хоть чтение).
Подробности про контроллеры 140 или 840:
http://agatcomp.ru/agat/Hardware/DZU.shtml
Там есть что почитать, если надоело смотреть в схему.