Понятно. Я начал делать что-то подобное, но мне до окончания, как до Луны пешком. Только вот у меня и CSR другой, и команды не совсем совпадают (частично совпадают, но тем не менее...) Поэтому, ИМХО, надо будет сочинить какой-то промежуточный интерфейсный модуль, который будет приводить эти дела к общему знаменателю.
Здесь, как раз, ограничений нет, читать можно сколько угодно. У меня по аналогичной команде - "передать таблицу назначений" передаются 560 слов - таблица назначений во внутреннем формате, для всех восьми дисков. Только не чтениЯ, а чтениЕ. То есть счетчик слов я задаю не 256, а 560, и всё прилетает. Ну, и вместо чтения какого-то блока, я принимаю несколько команд, одна из них специальная, остальные - общего назначения: запросить передачу таблицы назначений, читать из памяти контроллера и цикл чтения регистра данных без ожидания, по счетчику, который в этом случае начинается с 560.
У меня, опять же, несколько манипуляций - передать (укороченный) блок данных с полным путём к оглавлению, открыть оглавление, читать его по одной записи, после последней записи следующей прочитается пустая строка.
------------------------------------------------
В общем, для того, чтобы пользовать одну программу для двух разных устройств, необходима "прослойка" между железом и программой. Вопрос, как ее прицепить. Навскидку, возможно, имеет смысл сделать драйвер, у которого тот же CSR, что и у основного устройства, а средства ввода-вывода повторяют NL: плюс единственная SPFUN, которая возвратит адрес таблицы вызовов. Тогда делаем .FETCH этому драйверу, вызываем эту SPFUN, запоминаем возвращенный адрес и вызываем нужные функции по таблице. Ну, или, вариант, собрать её, как .REL и сделать свой загрузчик для нее (списать из системы).
У меня не поддерживается относительная адресация - строку текущего оглавления надо будет держать у себя.
С этим пока сложности...





Ответить с цитированием