Сообщение от
AFZ
В моем варианте реализации DMA - это лишние 6 шинных драйверов для A16-21, второй комплект шинных драйверов для управляющих сигналов (СИА, СИП, ВВОД, ВЫВОД и т.д.). Если делать без ДМА, то на прием с МПИ хватит 1/6-й простого 1533ЛН1, на передачу - половины 155ЛА18 или похожей мощной восьминожки с другой логической функцией. А для ДМА их придется ставить двусторонними, или ставить второй комплект с обратной функцией. Да, увеличивается количество рассыпухи, причем заметно.
Без ДМА придётся делать пакетную эмуляцию ДМА ( когда передача "блока ДМА" начинается с появления бита 040000 в CSR и заканчивается появлением бита READY в CSR, а в промежутке - сначала в регистре данных выдаётся счётчик передаваемых слов, а потом все слова пакета со скоростью шины, т.е. без проверки готовности для каждого отдельного слова ).
Но при такой реализации "псевдо ДМА" - минимальный загрузчик, отправляющий команду "передать блок 0 устройства 0" и считывающий из регистра данных пакет "псевдо ДМА" - будет выглядеть так:
Код:
Error: ; При ошибке - повторить чтение.
Mov #177720, R1 ; HD CSR -> R1
Mov #10, (R1) ; 010 == Read Boot
Tst (R1) ; Блок "псевдо ДМА" готов?
BEq .-4. ; Нет..
Tst (R1)+ ; Была ошибка чтения?
BMi Error ; Да..
Mov (R1), R0 ; Word Count -> R0
Clr R2 ; Buff Addr -> R2
Mov (R1), (R2)+ ; Читаем слова блока
SOB R0, .-4. ; Все слова переданы?
Clr PC ; Переходим на адрес 000000
Если часть предварительных операций выполнить вручную - минимальный код загрузчика в ОЗУ ДВК будет таким:
Код:
Mov (R1), R0 ; Word Count -> R0
Mov (R1), (R2)+ ; Читаем слова блока
SOB R0, .-4. ; Все слова переданы?
Clr PC ; Переходим на адрес 000000
При работе с пульта ДВК это будет выглядеть так:
Код:
***** ДОСТУПНОЕ ОЗУ - 256 K *
@ 001000
@R1/001122 177722
R2/000000
@R7/001000 10000
@0010000/000000 11100
00010002/000000 11122
00010004/000000 77002
00010006/000000 5007
@17777720/040200 10
@17777720/000000 /040000
@P
HD Boot-I-Cold boot..
HD (177720) disk driver v4.0 2017
SL V08.00 [SW] Сторожевых С.В. 1988
KZ V01.00 (C) ВЦ МИЭТ, НОЯБРЬ 1987
RT-11SB (Y) V05.07
Если такая процедура загрузки устраивает - можно сделать разновидность контроллера HD с пакетной эмуляцией DMA. В режиме записи - передавать счётчик слов в пакете не надо, потому что контроллер использует счётчик слов, переданный командой "задать счётчик слов". Важная особенность, которую надо учитывать, заключается в том, что контроллер может отдать в пакете меньше слов, чем было указано в счётчике слов чтения, поэтому в качестве счётчика слов при приёме пакета "псевдо ДМА" - обязательно должно использоваться первое слово пакета. При записи контроллер может записать не все переданные ему слова, но перед этим принимает пакет целиком - в соответствии со значением текущего счётчика слов.
Текущие значения номера привода, номера блока и счётчика слов сохраняются между операциями и обнуляются по сигналу шины INIT ( команда CPU = RESET ).
- - - Добавлено - - -
Сигнал INIT и любая запись в CSR на этапе чтения/записи пакета "псевдо ДМА" - принудительно завершают выполнение текущей команды и переводят контроллер в режим приёма команды. При этом, в случае записи в CSR - выполнение текущей команды завершается с установкой бита ошибки в CSR и кода ошибки IE_ABT = 0375 в регистре данных.
- - - Добавлено - - -
Чтобы операционка могла сбросить операцию на "этапе заглушки" - можно добавить в заглушку возможность приёма сигналов DOUT и INIT с установкой флагов для контроллера. Тогда, при выходе из "режима заглушки" контроллер при наличии флага INIT или флага записи в CSR - отменяет посылку прерывания, отключает прерывания, а всё остальное делает так же, как в случае приёма INIT или записи в CSR на этапе обмена пакетами.