Ну команда и не предназначена для злоупотребления. Более того, если ее использовать в живой системе которая это позволит (RT-11SJ/SB/FB) например, система может оказаться далее неработоспособной.
Вид для печати
Это ясно - по низкому INIT сбросятся все устройства, имеющиеся в машине, драйвера запросто могут впасть в непонятку.
Еще любопытный момент - команда RESET производит аппаратный сброс процессора, если в момент генерации INIT присутствует низкий ACLO. В принципе, логично в обработчике прерывания ниспадающего ACLO выполнить RESET - процессор сбросится и будет в сбросе ожидать нарастания ACLO или уже полного пропадания питания.
И таки бит 2 регистра управления 177700 - это режим ожидания прерывания, по команде WAIT активируется, по приходу прерывания сбрасывается, в других командах его установка не замечена.
При записи в регистр старта 177702 происходит запись данных в скрытый регистр и выставляется запрос на прерывание, но от матрицы контроллера это запрос оторван и ничего не происходит, поэтому реально это регистр никак не используется, проявляется только эффект "пропадания" из адресного пространства. "Пропадание" предназначено для исключения повторной записи адреса старта пока не обработано предыдущее прерывание, а оно не происходит, т.к. оторвано. В-общем, регистр старта тоже можно смело выкинуть из схемы, оставить только блок отвечающий за "пропадание".
Увы, у меня на этот пункт есть только банальный комментарий - ну вот так вот свободные художники "по-быстрому" сделали переделку из 1801ВЕ1. Там много чего от контроллера прерываний оторвано - прерывание по записи регистра старта, прерывание от таймера ВЕ1, пара исключений (err2 и err3) которые никогда не возникают (то есть, их причина неизвестна), ловушка odd address trap (ну это хоть совместимостью с LSI-11 можно объяснить). Как я уже писал - примерно 3-5 процентов транзисторного бюджета ВМ1 просто занимает место и никак не используется, получается что регистр стартового адреса просто часть этого балласта.
Прогресс перевода на синхронную модель такой:
- из примерно 500 латчей осталось 85, но самых мелких и занудных, соответственно число ошибок и предупреждений Quartus-а уменьшилось с 1200 до 350
- пока все внутренние сигналы полностью сохранили свою форму как было в асинхронной модели
- размер процессора "усох" с 2700 до 2024 ячейки
- достижимая частота пока 60 МГц (будем оптимизировать еще)
- вроде получается заменить блок регистров и генератор констант (частично) на блоки RAM и ROM, тогда проект может существенно добавить в скорости и уменьшить количество занимаемых ячеек (в процессе)
- тесты 401 и 404 неизменно проходят на текущей модели (примерно за тоже количество тактов что и асинхронная)
Update:
Асинхронная версия 1.0F
Cинхронная версия 1.1F
Не изменяется - предполагается что совпадение изначально максимально точное и постоянно проверяется при модификации модели на синхронную. То есть, если первичная асинхронная модель исполняет тест 791404 до останова за 1.165.525 нс, то текущая рабочая синхронная тот же тест до останова исполняет за 1.165.515 нс, разница в один такт обусловлена дополнительной внутренней синхронизацией DCLO - синхронная модель немножко по другому выходит из аппаратного сброса. С учетом этого сдвига - диаграммы полностью совпадают.
Исполнение микрокода и обмен по внешней шине происходит точно как у оригинала и в тех же самых фазах. Но абсолютно точное потактовое сравнение с аппаратным оригинальным процессором на внешних пинах невозможно - в процессоре есть, например, прескайлер таймера шины Qbus который не сбрасывается по аппаратному сбросу, поэтому тайм-аут будет плавать в пределах 56-63 такта, на модели я взял усредненный таймаут 60 тактов. Точно так же есть неопределенный прескайлер таймера ВЕ1 - он тоже не сбрасывается сигналами аппаратного сброса.
Но в каких-то ограниченных пределах сравнить синтетический и аппаратный процессоры будет можно.
Правда я не уверен что буду делать в FPGA процессор с шиной Qbus - там очень много возни с переносом всех этих латчей. Cкорее всего, будет только синхронный вариант с двумя шинами Wishbone (мастер и ведомый для периферийного блока) и эмулятором точной задержки Qbus в не-турбо режиме.
Угу, оно у меня зафиксировано, но по ходу еще появляются мелкие неточности и ошибки, приходится и в нее вносить незначительные изменения. В связи с этим принята такая нумерация версий:
Асинхронная версия 1.0F - полностью соответствует схеме процессора, за исключением совсем неиспользуемых транзисторных блоков, которые очевидно не влияют на работу процессора (регистр стартового вектора темне менее включен).
Cинхронная версия 1.1F - текущая версия адаптируемая под современные FPGA
Для встраивания Verilog-моделей в C-программы есть Verilator, превращающий Verilog-модель в объект C++, но при таком подходе при каждом изменении модели надо пересобирать проект, поэтому интересно найти или сделать какой-то компилятор Verilog-модели в байтовый код, чтобы полученный файл можно было при старте эмулятора грузить в неизменный "интерпретатор байткода 1801ВМ1".