Можно, в принципе такой сигнал уже есть внутри, нужно только вывести его наружу.
Можно, в принципе такой сигнал уже есть внутри, нужно только вывести его наружу.
Пока нет, вот и спрашиваю здесь, что нужно реализовывать?
Пока так:
1. ожидаем готовности на каждом шаге.
2. в регистр данных заносим код операции
3. номер тома
4. номер блока в томе (мл.слово)
5. номер блока в томе (ст.слово, 0 для RT-11)
6. кол-во слов (16-бит хватит всем, а в случае с RT-11 - даже 15 бит)
7. здесь можно прочитать предварительный результат операции из регистра 2.
8. читаем/пишем данные
9. читаем результат операции из регистра 2.
Я пока ничего не делал, так что предложения принимаются.
1. На каждом шаге проверяем бит завершения и если он установлен - контроллер завершил выполнение команды.
2. Если код операции ошибочный - контроллер установит биты ошибки и завершения.
3. Если к указанному номеру тома не подключен образ - контроллер установит биты ошибки и завершения.
4,5. Если номер блока больше размера образа - контроллер установит биты ошибки и завершения.
6. Если количество слов больше имеющегося в образе места от номера блока до конца образа - контроллер установит бит ошибки, но прочитает/запишет всё имеющееся место.
Коды команд контроллера:
000 - CHECK - Контроллер возвращает в старшем байте регистра данных номер тома последней операции, а в младшем - код состояния ( код ошибки последней операции ).
001 - READ
002 - WRITE
004 - SIZE - Номер Тома - Контроллер возвращает два слова размера подключенного образа ( мл.слово-ст.слово ). Если образ не подключен - контроллер сразу ставит биты ошибки и завершения.
Коды ошибок:
IS_SUC = 0001; // нет ошибки
IE_OFL = 0277; // устройство offline (образ не подключен)
IE_BLK = 0354; // выход за пределы устройства
IE_WLK = 0364; // попытка записи на защищённое устройство
IE_VER = 0374; // неустранимая ошибка (например внутренняя ошибка контроллера)
IE_IFC = 0376; // неверная команда
Последний раз редактировалось Patron; 01.08.2017 в 20:21.
Кстати, забыли о том, что диски в наших системах имеют блочную структуру. Если отправить на запись кусок произвольной длины, то в последнем блоке, в "хвосте", может остаться мусор. Я на эти грабли уже наступал, но у меня, в качестве мусора, было последнее переданное по DMA слово, в итоге, сохраненный исходник при загрузке в EDK показывал в конце текста множество пустых строк, если последним словом было 005015 (<ВК><ПС>, длина занятой части файла четная) да, в придачу еще и как-то неадекватно себя вел, если последнее слово было 000012 (<ПС>0, длина нечетная). А здесь в RT-11 возможны вообще всяческие чудеса.
Далее, определяемся с регистрами. Как я понял, основной, всегда доступный регистр состояния - 176560, т в нем бит Д7 (0200) - готовность к обмену через 176562, так? Еще какие-то адреса есть? Вроде бы загрузчику из сети требовались еще 176564 и 66, они дальше используются? Какие еще биты есть или планируются в 176560?
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Это баг или фича? Нужно повторять такое поведение? Сейчас еще раз глянул исходники FatFS, там неполный сектор предварительно считывается.
176564 повторяет значение 176560 при чтении. Я хотел исполбзовать 176566 для чтения кода ошибки, но patron предлагает через команду CHECK.
Баг, вестимо. Положено недописанный остаток блока заполнить двоичными нулями.
А 176562 - регистр команд/данных?
Какие биты определены в 176560? Кто из них аппаратный, а кто эмулируется программой Кортекса?
Когда Кортекс занят длительной операцией (прочитать или записать сектор SD-шки) и не исполняет программу эмуляции программных регистров, что видно и что можно записать в РС ? (обращение к РД, как я понимаю, вызовет TRAP TO 4)
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Если есть лишний регистр - лучше использовать его, а не команду CHECK.
- - - Добавлено - - -
Для битов ошибки и завершения можно использовать младшие биты 176560 ( 01 == DONE ; 02 == ERROR ). Тогда опрос регистра может выглядеть так:
Код:1$: MOV @#176560, R0 BPL 1$ ASR R0 BCS DONE ....... DONE: ASR R0 BCS ERROR
Последний раз редактировалось Patron; 02.08.2017 в 15:52.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)